@gadmin2n/schematics 0.0.139 → 0.0.140

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 (314) hide show
  1. package/dist/lib/application/files/gadmin2-game-angle-demo/Jenkinsfile +6 -34
  2. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/approval.prisma +199 -0
  3. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/system.prisma +9 -0
  4. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/workflow.prisma +191 -14
  5. package/dist/lib/application/files/gadmin2-game-angle-demo/gitignore +6 -5
  6. package/dist/lib/application/files/gadmin2-game-angle-demo/readme.md +10 -3
  7. package/dist/lib/application/files/gadmin2-game-angle-demo/server/migrate-between-pg-schemas.js +6 -4
  8. package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +4 -1
  9. package/dist/lib/application/files/gadmin2-game-angle-demo/server/prisma.config.ts +12 -3
  10. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/migrate-human-approval-configs.ts +86 -0
  11. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow-node-types.ts +682 -121
  12. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow.seed.ts +110 -1
  13. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/config/index.ts +28 -0
  14. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/json-body-parser.spec.ts +61 -0
  15. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/json-body-parser.ts +7 -0
  16. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/structured-all-exceptions.filter.spec.ts +54 -0
  17. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/structured-all-exceptions.filter.ts +86 -0
  18. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/main.ts +9 -3
  19. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.controller.ts +89 -0
  20. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.dto.ts +68 -0
  21. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.spec.ts +177 -0
  22. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.ts +283 -0
  23. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approvalChannel.module.ts +10 -0
  24. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-executor.spec.ts +42 -0
  25. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-executor.ts +108 -0
  26. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.controller.ts +101 -0
  27. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.dto.ts +29 -0
  28. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/codeRuntime.module.ts +21 -0
  29. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-handler.registry.ts +30 -0
  30. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-handler.ts +15 -0
  31. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.spec.ts +105 -0
  32. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.ts +96 -0
  33. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.dto.ts +78 -0
  34. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-signal-outbox.service.spec.ts +56 -0
  35. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-signal-outbox.service.ts +111 -0
  36. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-token.spec.ts +23 -0
  37. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-token.ts +18 -0
  38. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.spec.ts +240 -0
  39. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.ts +339 -0
  40. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.types.ts +74 -0
  41. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-wait.handler.ts +47 -0
  42. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/externalInteraction.module.ts +41 -0
  43. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/human-approval.handler.spec.ts +70 -0
  44. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/human-approval.handler.ts +76 -0
  45. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.controller.ts +12 -0
  46. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.spec.ts +227 -0
  47. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.ts +121 -0
  48. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.controller.ts +160 -0
  49. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.dto.ts +41 -0
  50. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.util.spec.ts +171 -0
  51. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.util.ts +245 -0
  52. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/httpRequest.module.ts +22 -0
  53. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule-evaluator.spec.ts +68 -0
  54. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule-evaluator.ts +126 -0
  55. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule.types.ts +34 -0
  56. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-signal-outbox.service.ts +115 -0
  57. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-subject-source.util.spec.ts +45 -0
  58. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-subject-source.util.ts +59 -0
  59. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.controller.ts +72 -0
  60. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.dto.ts +144 -0
  61. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.errors.ts +19 -0
  62. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.external-decision.spec.ts +350 -0
  63. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.service.ts +774 -0
  64. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/humanApproval.module.ts +46 -0
  65. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/legacy-approval-config-migration.ts +227 -0
  66. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/outbox-retry.util.ts +14 -0
  67. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.controller.ts +151 -0
  68. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.dto.ts +88 -0
  69. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/runtime-token.guard.ts +43 -0
  70. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +21 -1
  71. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.controller.ts +77 -0
  72. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.dto.ts +98 -0
  73. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.service.ts +277 -0
  74. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-secret-cipher.spec.ts +14 -0
  75. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-secret-cipher.ts +59 -0
  76. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integrationConnection.module.ts +10 -0
  77. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/actor-context.util.ts +27 -0
  78. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/providers/user-group.provider.ts +208 -0
  79. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/providers/user.provider.ts +168 -0
  80. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.controller.spec.ts +157 -0
  81. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.controller.ts +176 -0
  82. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.dto.ts +21 -0
  83. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.errors.ts +78 -0
  84. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.registry.spec.ts +100 -0
  85. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.registry.ts +115 -0
  86. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.types.ts +97 -0
  87. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subjectProvider.module.ts +34 -0
  88. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.spec.ts +89 -1
  89. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.ts +4 -0
  90. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.controller.ts +119 -0
  91. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.dto.ts +91 -0
  92. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.errors.ts +34 -0
  93. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.service.spec.ts +161 -0
  94. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.service.ts +390 -0
  95. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/userGroup.module.ts +10 -0
  96. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.spec.ts +17 -0
  97. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.ts +8 -2
  98. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/parameter-binding.ts +93 -0
  99. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.spec.ts +158 -0
  100. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.ts +155 -0
  101. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.spec.ts +363 -0
  102. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.ts +354 -0
  103. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.types.ts +43 -0
  104. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-data-edge.util.spec.ts +174 -0
  105. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-data-edge.util.ts +149 -0
  106. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-dsl-comparison.ts +43 -0
  107. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-execution.dto.ts +1 -1
  108. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.dto.ts +4 -0
  109. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.service.ts +70 -28
  110. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-handle-validator.ts +128 -0
  111. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.controller.ts +12 -1
  112. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.module.ts +18 -3
  113. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.spec.ts +369 -22
  114. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.ts +319 -90
  115. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/node-config-validator.service.spec.ts +79 -0
  116. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/node-config-validator.service.ts +62 -0
  117. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/schema.types.ts +10 -0
  118. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/subject-config-validator.service.spec.ts +124 -0
  119. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/subject-config-validator.service.ts +236 -0
  120. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.spec.ts +49 -0
  121. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.ts +69 -0
  122. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/workflowConfig.module.ts +20 -0
  123. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/node-instance-config.util.spec.ts +15 -0
  124. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/node-instance-config.util.ts +25 -0
  125. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.controller.ts +103 -11
  126. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.dto.ts +98 -0
  127. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.module.ts +3 -0
  128. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.spec.ts +72 -62
  129. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.ts +148 -11
  130. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +13 -9
  131. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +5 -2
  132. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/authProvider.ts +2 -2
  133. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/BulkActions.tsx +0 -5
  134. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SearchBar.tsx +26 -18
  135. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/eventList/index.tsx +2 -2
  136. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logButton/index.tsx +24 -17
  137. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logList/index.tsx +7 -18
  138. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/modalDiffViewer/index.tsx +2 -2
  139. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +288 -33
  140. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/themeStyles.ts +97 -0
  141. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/SettingDrawer.tsx +251 -0
  142. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header.tsx +47 -19
  143. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/layout.tsx +18 -9
  144. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/menuRenderer.tsx +155 -0
  145. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +123 -129
  146. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +16 -0
  147. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/constants/layout.ts +2 -1
  148. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddDataModal.tsx +98 -3
  149. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddPageModal.tsx +101 -0
  150. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DevShell.tsx +8 -0
  151. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/style.css +51 -0
  152. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/form.tsx +1 -1
  153. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +1 -1
  154. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/login.ts +40 -1
  155. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/show.tsx +5 -5
  156. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +16 -1
  157. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useListPageState.ts +10 -7
  158. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/i18n.ts +4 -2
  159. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/common.json +26 -2
  160. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/workflow.json +556 -0
  161. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/common.json +26 -2
  162. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/workflow.json +556 -0
  163. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/plugins/devShellPlugin.ts +152 -2
  164. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/index.tsx +6 -1
  165. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/show.tsx +41 -9
  166. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/edit.tsx +1 -1
  167. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/list.tsx +10 -8
  168. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/show.tsx +3 -3
  169. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.css +1 -1
  170. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/edit.tsx +1 -1
  171. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/show.tsx +3 -6
  172. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.css +3 -0
  173. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.tsx +45 -13
  174. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasComponentLibrary.tsx +45 -22
  175. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasListPage.tsx +168 -101
  176. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasPage.tsx +248 -74
  177. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasToolbar.tsx +33 -18
  178. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CodeFloatWindow.tsx +16 -10
  179. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/PublishModal.tsx +1 -1
  180. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasContextMenuRegistry.tsx +31 -0
  181. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasDefaults.ts +15 -0
  182. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/BarChartDataSourceModal.tsx +16 -11
  183. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/CanvasAiModal.tsx +25 -21
  184. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/ExportModal.tsx +6 -1
  185. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/LineChartDataSourceModal.tsx +9 -10
  186. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/MultiChartConfigModal.tsx +4 -7
  187. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/MultiChartDataSourceModal.tsx +23 -9
  188. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/NumCardDataSourceModal.tsx +16 -11
  189. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/PromptModal.tsx +2 -5
  190. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/RadarChartDataSourceModal.tsx +16 -11
  191. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableConfigModal.tsx +2 -9
  192. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableDataSourceModal.tsx +23 -12
  193. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/canvasModalProps.ts +2 -17
  194. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.test.ts +149 -0
  195. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.ts +111 -17
  196. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/types.ts +1 -0
  197. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardLayout.test.ts +83 -0
  198. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardLayout.ts +118 -0
  199. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardName.test.ts +26 -0
  200. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas-page/index.tsx +9 -1
  201. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/edit.tsx +1 -1
  202. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/list.tsx +10 -8
  203. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/show.tsx +3 -6
  204. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/DecisionModal.tsx +71 -0
  205. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/inbox.tsx +216 -0
  206. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/AssignRolesModal.tsx +6 -1
  207. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/permissionReadme/index.tsx +8 -8
  208. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/modal.tsx +1 -1
  209. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +5 -5
  210. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/modal.tsx +1 -1
  211. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/show-drawer.tsx +1 -1
  212. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.test.tsx +84 -0
  213. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.tsx +141 -0
  214. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/approval-channel.types.ts +16 -0
  215. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/index.tsx +208 -0
  216. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CreateNodeInstanceDrawer.tsx +154 -0
  217. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CustomNode.tsx +194 -5
  218. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DeletableEdge.tsx +76 -0
  219. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DslView.tsx +1 -1
  220. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/EnhancedFlowRenderer.tsx +176 -22
  221. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.test.tsx +62 -0
  222. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.tsx +94 -5
  223. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExportModal.tsx +15 -10
  224. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/FlowRenderer.tsx +251 -70
  225. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ImportModal.tsx +18 -24
  226. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/InstanceRequiredDialog.tsx +106 -0
  227. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/LookupConnectionDialog.test.tsx +45 -0
  228. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/LookupConnectionDialog.tsx +43 -0
  229. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NewNodeDefaults.test.tsx +279 -0
  230. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeEditModal.tsx +6 -7
  231. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.test.tsx +335 -0
  232. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.tsx +433 -237
  233. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ParameterBindingEditor.tsx +179 -0
  234. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/RunWorkflowModal.tsx +18 -16
  235. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/StatusCards.tsx +20 -16
  236. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/VersionPanel.tsx +6 -4
  237. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/ConnectionModal.test.tsx +68 -0
  238. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/ConnectionModal.tsx +367 -0
  239. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/connection.types.ts +21 -0
  240. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/index.tsx +171 -0
  241. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/editor.tsx +38 -22
  242. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useNodeInstanceLibrary.ts +41 -0
  243. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useWorkflowAgent.ts +6 -0
  244. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/index.tsx +27 -20
  245. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instance-detail.tsx +8 -11
  246. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instances.tsx +6 -1
  247. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/NodeInstanceForm.tsx +56 -23
  248. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/create.tsx +21 -6
  249. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/edit.tsx +17 -20
  250. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/index.tsx +6 -1
  251. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaField.tsx +311 -0
  252. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaForm.test.tsx +218 -0
  253. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaForm.tsx +83 -0
  254. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/default-widgets.tsx +135 -0
  255. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/schema-defaults.ts +36 -0
  256. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/schema.types.ts +32 -0
  257. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/widget-registry.test.tsx +23 -0
  258. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/widget-registry.tsx +52 -0
  259. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/show.tsx +9 -13
  260. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRequestTriggerConfigEditor.tsx +39 -0
  261. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRuleEditor.test.tsx +20 -0
  262. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRuleEditor.tsx +72 -0
  263. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.test.tsx +47 -0
  264. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.tsx +185 -0
  265. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CallableInputParametersEditor.test.tsx +102 -0
  266. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CallableInputParametersEditor.tsx +150 -0
  267. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CodeConfigEditor.tsx +103 -0
  268. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.test.tsx +93 -0
  269. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.tsx +196 -0
  270. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalWaitConfigEditor.tsx +303 -0
  271. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.test.tsx +189 -0
  272. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.tsx +706 -0
  273. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.test.tsx +86 -0
  274. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.tsx +458 -0
  275. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.test.tsx +53 -0
  276. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.tsx +91 -0
  277. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubjectPicker.test.tsx +61 -0
  278. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubjectPicker.tsx +266 -0
  279. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitApprovalResultConfigEditor.tsx +104 -0
  280. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitExternalResultConfigEditor.tsx +98 -0
  281. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/UserGroupCreateModal.tsx +70 -0
  282. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/UserGroupEditModal.tsx +138 -0
  283. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/approver-source.test.ts +25 -0
  284. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/approver-source.ts +42 -0
  285. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/subject-provider.api.ts +95 -0
  286. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/show.tsx +15 -11
  287. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/temporal-tenant/index.tsx +49 -8
  288. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types/parameter-binding.ts +49 -0
  289. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types.ts +31 -2
  290. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/lookupConnection.test.ts +208 -0
  291. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/lookupConnection.ts +246 -0
  292. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/newNodeConfig.ts +73 -0
  293. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/removeWorkflowEdges.test.ts +34 -0
  294. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/removeWorkflowEdges.ts +18 -0
  295. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveLookupPorts.ts +66 -0
  296. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.test.ts +39 -0
  297. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.ts +48 -0
  298. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveWorkflowDisplay.test.ts +51 -0
  299. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveWorkflowDisplay.ts +32 -0
  300. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/edit.tsx +1 -1
  301. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/list.tsx +10 -8
  302. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/show.tsx +3 -3
  303. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd-theme-vars.css +93 -0
  304. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd.css +8 -8
  305. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/fc.css +4 -4
  306. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/index.css +20 -5
  307. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-drawer.module.css +3 -3
  308. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-page.module.css +3 -3
  309. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/theme-styles.css +81 -0
  310. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/test/setup.ts +5 -0
  311. package/dist/lib/application/files/gadmin2-game-angle-demo/web/vite.config.ts +1 -7
  312. package/dist/lib/application/files/gadmin2-game-angle-demo/web/vitest.config.ts +12 -0
  313. package/package.json +1 -1
  314. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/DynamicConfigForm.tsx +0 -154
@@ -7,9 +7,9 @@ import {
7
7
  PageMetaDto,
8
8
  PageOptionsDto,
9
9
  pick,
10
- UserType,
11
10
  } from '@gadmin2n/nest-common';
12
11
  import {
12
+ BadRequestException,
13
13
  Body,
14
14
  Controller,
15
15
  Delete,
@@ -34,8 +34,6 @@ import { Prisma } from '@prisma/client';
34
34
  import { UseRoles } from 'nest-access-control';
35
35
  import { WINSTON_MODULE_PROVIDER } from 'nest-winston';
36
36
  import { Logger } from 'winston';
37
- import { CreateWorkflowNodeInstanceDto } from '../../generated/workflowNodeInstance/dto/create-workflowNodeInstance.dto';
38
- import { UpdateWorkflowNodeInstanceDto } from '../../generated/workflowNodeInstance/dto/update-workflowNodeInstance.dto';
39
37
  import {
40
38
  EffectedCount,
41
39
  UploadResponse,
@@ -43,10 +41,19 @@ import {
43
41
  WorkflowNodeInstanceWhereSelect,
44
42
  } from '../../generated/workflowNodeInstance/dto/workflowNodeInstance-types.dto';
45
43
  import { WorkflowNodeInstanceEntity } from '../../generated/workflowNodeInstance/entities/workflowNodeInstance.entity';
44
+ import {
45
+ CreateConfiguredNodeInstanceDto,
46
+ LegacyCreateWorkflowNodeInstanceDto,
47
+ UpdateConfiguredNodeInstanceDto,
48
+ } from './workflowNodeInstance.dto';
46
49
  import { WorkflowNodeInstanceService } from './workflowNodeInstance.service';
47
50
 
48
51
  import { ConfigService } from '@nestjs/config';
49
52
  import { FileInterceptor } from '@nestjs/platform-express';
53
+ import {
54
+ actorContextFromRequest,
55
+ AuthenticatedActorRequest,
56
+ } from '../subjectProvider/actor-context.util';
50
57
 
51
58
  @UseGuards(ACGuard)
52
59
  @Controller('workflowNodeInstance')
@@ -58,6 +65,27 @@ export class WorkflowNodeInstanceController {
58
65
  @Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger,
59
66
  ) {}
60
67
 
68
+ @Patch(':id')
69
+ @UseRoles({
70
+ resource: 'workflowNodeInstance',
71
+ action: 'update',
72
+ possession: 'any',
73
+ })
74
+ @ApiOkResponse({ type: WorkflowNodeInstanceEntity })
75
+ async updateConfigured(
76
+ @Param('id', ParseIntPipe) id: number,
77
+ @Body() body: UpdateConfiguredNodeInstanceDto,
78
+ @Req() request: AuthenticatedActorRequest,
79
+ ) {
80
+ return new WorkflowNodeInstanceEntity(
81
+ await this.workflowNodeInstanceService.updateConfigured(
82
+ id,
83
+ body,
84
+ this.actorFrom(request),
85
+ ),
86
+ );
87
+ }
88
+
61
89
  @Post('createOne')
62
90
  @UseRoles({
63
91
  resource: 'workflowNodeInstance',
@@ -66,15 +94,18 @@ export class WorkflowNodeInstanceController {
66
94
  })
67
95
  @ApiCreatedResponse({ type: WorkflowNodeInstanceEntity })
68
96
  async createOne(
69
- @Body() body: CreateWorkflowNodeInstanceDto,
97
+ @Body() body: LegacyCreateWorkflowNodeInstanceDto,
70
98
  @ACAttrFilter() acAttrFilter,
71
- @Req() request: Request & { user: UserType },
99
+ @Req() request: AuthenticatedActorRequest,
72
100
  ) {
73
- body.creator = request.user.username;
101
+ const configuredInput = this.normalizeLegacyCreate(
102
+ acAttrFilter(body) as LegacyCreateWorkflowNodeInstanceDto,
103
+ );
74
104
  return new WorkflowNodeInstanceEntity(
75
- await this.workflowNodeInstanceService.createOne({
76
- data: acAttrFilter(body),
77
- }),
105
+ await this.workflowNodeInstanceService.createConfigured(
106
+ configuredInput,
107
+ this.actorFrom(request),
108
+ ),
78
109
  );
79
110
  }
80
111
 
@@ -136,8 +167,9 @@ export class WorkflowNodeInstanceController {
136
167
  @ApiNotFoundResponse({ description: 'Cannot found this record.' })
137
168
  async updateUnique(
138
169
  @Param('id', ParseIntPipe) id: number,
139
- @Body() body: UpdateWorkflowNodeInstanceDto,
170
+ @Body() body: UpdateConfiguredNodeInstanceDto,
140
171
  @ACAttrFilter() acAttrFilter,
172
+ @Req() request: AuthenticatedActorRequest,
141
173
  ) {
142
174
  /*
143
175
  const origin = (await this.workflowNodeInstanceService.findUnique(id, {
@@ -156,13 +188,73 @@ export class WorkflowNodeInstanceController {
156
188
  // 其他个性化逻辑
157
189
  */
158
190
 
159
- const item = await this.workflowNodeInstanceService.updateUnique(
191
+ const item = await this.workflowNodeInstanceService.updateConfigured(
160
192
  id,
161
193
  acAttrFilter(body),
194
+ this.actorFrom(request),
162
195
  );
163
196
  return new WorkflowNodeInstanceEntity(acAttrFilter(item));
164
197
  }
165
198
 
199
+ private actorFrom(request: AuthenticatedActorRequest) {
200
+ return actorContextFromRequest(request);
201
+ }
202
+
203
+ private normalizeLegacyCreate(
204
+ body: LegacyCreateWorkflowNodeInstanceDto,
205
+ ): CreateConfiguredNodeInstanceDto {
206
+ const rawNodeTypeId = body.nodeTypeId ?? body.nodeType?.connect?.id;
207
+ const nodeTypeId = this.parsePositiveNodeTypeId(rawNodeTypeId);
208
+
209
+ let config: unknown = body.config;
210
+ if (typeof config === 'string') {
211
+ try {
212
+ config = JSON.parse(config);
213
+ } catch {
214
+ throw new BadRequestException('config must be a JSON object');
215
+ }
216
+ }
217
+ if (
218
+ config === null ||
219
+ typeof config !== 'object' ||
220
+ Array.isArray(config)
221
+ ) {
222
+ throw new BadRequestException('config must be a JSON object');
223
+ }
224
+
225
+ return {
226
+ nodeTypeId,
227
+ name: body.name,
228
+ ...(body.description != null && { description: body.description }),
229
+ config: config as Record<string, unknown>,
230
+ ...(body.isEnabled !== undefined && { isEnabled: body.isEnabled }),
231
+ };
232
+ }
233
+
234
+ private parsePositiveNodeTypeId(value: unknown): number {
235
+ if (typeof value === 'number') {
236
+ if (Number.isSafeInteger(value) && value > 0) return value;
237
+ throw new BadRequestException('nodeTypeId must be a positive integer');
238
+ }
239
+
240
+ let integerValue: bigint;
241
+ if (typeof value === 'bigint') {
242
+ integerValue = value;
243
+ } else if (typeof value === 'string' && /^\d+$/.test(value)) {
244
+ integerValue = BigInt(value);
245
+ } else {
246
+ throw new BadRequestException('nodeTypeId must be a positive integer');
247
+ }
248
+
249
+ if (
250
+ integerValue <= BigInt(0) ||
251
+ integerValue > BigInt(Number.MAX_SAFE_INTEGER)
252
+ ) {
253
+ throw new BadRequestException('nodeTypeId must be a positive integer');
254
+ }
255
+ return Number(integerValue);
256
+ }
257
+
166
258
  @Delete('deleteUnique/:id')
167
259
  @UseRoles({
168
260
  resource: 'workflowNodeInstance',
@@ -0,0 +1,98 @@
1
+ import { Transform, Type } from 'class-transformer';
2
+ import {
3
+ IsBoolean,
4
+ IsDefined,
5
+ IsInt,
6
+ IsObject,
7
+ IsOptional,
8
+ IsString,
9
+ ValidateIf,
10
+ ValidateNested,
11
+ } from 'class-validator';
12
+
13
+ class LegacyWorkflowNodeTypeConnectDto {
14
+ @IsDefined()
15
+ id: unknown;
16
+ }
17
+
18
+ class LegacyWorkflowNodeTypeRelationDto {
19
+ @IsDefined()
20
+ @ValidateNested()
21
+ @Type(() => LegacyWorkflowNodeTypeConnectDto)
22
+ connect: LegacyWorkflowNodeTypeConnectDto;
23
+ }
24
+
25
+ export class LegacyCreateWorkflowNodeInstanceDto {
26
+ @ValidateIf((body) => body.nodeTypeId === undefined)
27
+ @IsDefined()
28
+ @ValidateNested()
29
+ @Type(() => LegacyWorkflowNodeTypeRelationDto)
30
+ nodeType?: LegacyWorkflowNodeTypeRelationDto;
31
+
32
+ @ValidateIf((body) => body.nodeType === undefined)
33
+ @IsDefined()
34
+ nodeTypeId?: unknown;
35
+
36
+ @IsString()
37
+ name: string;
38
+
39
+ @IsOptional()
40
+ @IsString()
41
+ description?: string | null;
42
+
43
+ @Transform(({ value }) => {
44
+ if (typeof value !== 'string') return value;
45
+ try {
46
+ return JSON.parse(value);
47
+ } catch {
48
+ return value;
49
+ }
50
+ })
51
+ @IsObject({ message: 'config must be a JSON object' })
52
+ config: Record<string, unknown>;
53
+
54
+ @IsOptional()
55
+ @IsBoolean()
56
+ isEnabled?: boolean;
57
+
58
+ @IsOptional()
59
+ @IsString()
60
+ creator?: string;
61
+ }
62
+
63
+ export class CreateConfiguredNodeInstanceDto {
64
+ @IsInt()
65
+ nodeTypeId: number;
66
+
67
+ @IsString()
68
+ name: string;
69
+
70
+ @IsOptional()
71
+ @IsString()
72
+ description?: string;
73
+
74
+ @IsObject()
75
+ config: Record<string, unknown>;
76
+
77
+ @IsOptional()
78
+ @IsBoolean()
79
+ isEnabled?: boolean;
80
+ }
81
+
82
+ export class UpdateConfiguredNodeInstanceDto {
83
+ @IsOptional()
84
+ @IsString()
85
+ name?: string;
86
+
87
+ @IsOptional()
88
+ @IsString()
89
+ description?: string | null;
90
+
91
+ @IsOptional()
92
+ @IsBoolean()
93
+ isEnabled?: boolean;
94
+
95
+ @IsOptional()
96
+ @IsObject()
97
+ config?: Record<string, unknown>;
98
+ }
@@ -1,8 +1,11 @@
1
1
  import { Module } from '@nestjs/common';
2
+ import { SubjectProviderModule } from '../subjectProvider/subjectProvider.module';
3
+ import { WorkflowConfigModule } from '../workflowConfig/workflowConfig.module';
2
4
  import { WorkflowNodeInstanceController } from './workflowNodeInstance.controller';
3
5
  import { WorkflowNodeInstanceService } from './workflowNodeInstance.service';
4
6
 
5
7
  @Module({
8
+ imports: [WorkflowConfigModule, SubjectProviderModule],
6
9
  controllers: [WorkflowNodeInstanceController],
7
10
  providers: [WorkflowNodeInstanceService],
8
11
  exports: [WorkflowNodeInstanceService],
@@ -1,18 +1,16 @@
1
1
  /// <reference types="jest" />
2
- import { ConfigService } from '@nestjs/config';
3
- import { Test, TestingModule } from '@nestjs/testing';
4
- import { WINSTON_MODULE_PROVIDER } from 'nest-winston';
5
-
6
- // Mock nestjs-prisma 模块
7
- jest.mock('nestjs-prisma', () => ({
8
- PrismaService: jest.fn(),
9
- }));
10
-
11
- import { PrismaService } from 'nestjs-prisma';
12
2
  import { WorkflowNodeInstanceService } from './workflowNodeInstance.service';
13
3
 
14
- // Mock PrismaService
15
4
  const mockPrismaService = {
5
+ audit: {
6
+ create: jest.fn(),
7
+ },
8
+ workflowNodeType: {
9
+ findUnique: jest.fn(),
10
+ },
11
+ integrationConnection: {
12
+ findUnique: jest.fn(),
13
+ },
16
14
  workflowNodeInstance: {
17
15
  create: jest.fn(),
18
16
  createMany: jest.fn(),
@@ -28,18 +26,16 @@ const mockPrismaService = {
28
26
  },
29
27
  };
30
28
 
31
- // Mock Logger
32
- const mockLogger = {
33
- child: jest.fn().mockReturnThis(),
34
- info: jest.fn(),
35
- error: jest.fn(),
36
- warn: jest.fn(),
37
- debug: jest.fn(),
29
+ const mockNodeConfigValidator = {
30
+ validateOrThrow: jest.fn(),
38
31
  };
39
32
 
40
- // Mock ConfigService
41
- const mockConfigService = {
42
- get: jest.fn(),
33
+ const mockWidgetCatalog = {
34
+ assertUiSchemaSupported: jest.fn(),
35
+ };
36
+
37
+ const mockSubjectConfigValidator = {
38
+ validateSubjects: jest.fn(),
43
39
  };
44
40
 
45
41
  describe('WorkflowNodeInstanceService', () => {
@@ -50,17 +46,11 @@ describe('WorkflowNodeInstanceService', () => {
50
46
  // 每个测试前重置所有 mock
51
47
  jest.clearAllMocks();
52
48
 
53
- const module: TestingModule = await Test.createTestingModule({
54
- providers: [
55
- WorkflowNodeInstanceService,
56
- { provide: PrismaService, useValue: mockPrismaService },
57
- { provide: ConfigService, useValue: mockConfigService },
58
- { provide: WINSTON_MODULE_PROVIDER, useValue: mockLogger },
59
- ],
60
- }).compile();
61
-
62
- service = module.get<WorkflowNodeInstanceService>(
63
- WorkflowNodeInstanceService,
49
+ service = new WorkflowNodeInstanceService(
50
+ mockPrismaService as any,
51
+ mockNodeConfigValidator as any,
52
+ mockWidgetCatalog as any,
53
+ mockSubjectConfigValidator as any,
64
54
  );
65
55
  prisma = mockPrismaService;
66
56
  });
@@ -69,45 +59,69 @@ describe('WorkflowNodeInstanceService', () => {
69
59
  expect(service).toBeDefined();
70
60
  });
71
61
 
72
- describe('createOne', () => {
73
- it('should create a single workflowNodeInstance record', async () => {
74
- const createArgs = {
75
- data: {
76
- name: 'test_name',
77
- config: {},
78
- creator: 'test_creator',
79
- code: 'test_code',
80
- description: 'test_description',
81
- },
82
- } as any;
83
- const expectedResult = { id: 1, ...createArgs.data };
62
+ describe('createConfigured', () => {
63
+ const nodeType = {
64
+ id: BigInt(1),
65
+ runtimeKey: 'manual',
66
+ schemaVersion: 1,
67
+ configSchema: { type: 'object' },
68
+ uiSchema: {},
69
+ };
70
+ const input = {
71
+ nodeTypeId: 1,
72
+ name: '测试节点',
73
+ description: '测试描述',
74
+ config: {},
75
+ isEnabled: true,
76
+ };
77
+ const actor = { userId: 'user-1', username: 'tester' };
78
+
79
+ it('should validate and create a configured node instance', async () => {
80
+ const expectedResult = {
81
+ id: BigInt(1),
82
+ ...input,
83
+ nodeTypeId: BigInt(1),
84
+ creator: 'tester',
85
+ };
84
86
 
87
+ prisma.workflowNodeType.findUnique.mockResolvedValue(nodeType);
85
88
  prisma.workflowNodeInstance.create.mockResolvedValue(expectedResult);
89
+ prisma.audit.create.mockResolvedValue({});
86
90
 
87
- const result = await service.createOne(createArgs);
91
+ const result = await service.createConfigured(input, actor);
88
92
 
89
- expect(prisma.workflowNodeInstance.create).toHaveBeenCalledWith(
90
- createArgs,
93
+ expect(mockNodeConfigValidator.validateOrThrow).toHaveBeenCalledWith(
94
+ '1:1',
95
+ nodeType.configSchema,
96
+ input.config,
91
97
  );
92
- expect(prisma.workflowNodeInstance.create).toHaveBeenCalledTimes(1);
98
+ expect(prisma.workflowNodeInstance.create).toHaveBeenCalledWith({
99
+ data: {
100
+ nodeTypeId: BigInt(1),
101
+ name: input.name,
102
+ description: input.description,
103
+ config: input.config,
104
+ isEnabled: true,
105
+ creator: 'tester',
106
+ },
107
+ });
108
+ expect(prisma.audit.create).toHaveBeenCalledWith({
109
+ data: expect.objectContaining({
110
+ action: 'CREATE_NODE_INSTANCE',
111
+ resourceId: '1',
112
+ creator: 'tester',
113
+ }),
114
+ });
93
115
  expect(result).toEqual(expectedResult);
94
116
  });
95
117
 
96
118
  it('should throw error when create fails', async () => {
97
- const createArgs = {
98
- data: {
99
- name: 'test_name',
100
- config: {},
101
- creator: 'test_creator',
102
- code: 'test_code',
103
- description: 'test_description',
104
- },
105
- } as any;
106
119
  const error = new Error('Database connection failed');
107
120
 
121
+ prisma.workflowNodeType.findUnique.mockResolvedValue(nodeType);
108
122
  prisma.workflowNodeInstance.create.mockRejectedValue(error);
109
123
 
110
- await expect(service.createOne(createArgs)).rejects.toThrow(
124
+ await expect(service.createConfigured(input, actor)).rejects.toThrow(
111
125
  'Database connection failed',
112
126
  );
113
127
  });
@@ -119,14 +133,12 @@ describe('WorkflowNodeInstanceService', () => {
119
133
  {
120
134
  name: 'test_name',
121
135
  config: {},
122
- creator: 'test_creator',
123
136
  code: 'test_code',
124
137
  description: 'test_description',
125
138
  },
126
139
  {
127
140
  name: 'test_name',
128
141
  config: {},
129
- creator: 'test_creator',
130
142
  code: 'test_code',
131
143
  description: 'test_description',
132
144
  },
@@ -215,7 +227,6 @@ describe('WorkflowNodeInstanceService', () => {
215
227
  const data = {
216
228
  name: 'test_name',
217
229
  config: {},
218
- creator: 'test_creator',
219
230
  code: 'test_code',
220
231
  description: 'test_description',
221
232
  } as any;
@@ -240,7 +251,6 @@ describe('WorkflowNodeInstanceService', () => {
240
251
  data: {
241
252
  name: 'test_name',
242
253
  config: {},
243
- creator: 'test_creator',
244
254
  code: 'test_code',
245
255
  description: 'test_description',
246
256
  },
@@ -1,25 +1,159 @@
1
- import { Inject, Injectable } from '@nestjs/common';
1
+ import { Injectable, NotFoundException } from '@nestjs/common';
2
2
  import { Prisma, WorkflowNodeInstance } from '@prisma/client';
3
- import { WINSTON_MODULE_PROVIDER } from 'nest-winston';
4
3
  import { PrismaService } from 'nestjs-prisma';
5
- import { Logger } from 'winston';
6
4
 
7
- import { ConfigService } from '@nestjs/config';
5
+ import { ActorContext } from '../subjectProvider/subject-provider.types';
6
+ import { NodeConfigValidatorService } from '../workflowConfig/node-config-validator.service';
7
+ import { JsonSchema } from '../workflowConfig/schema.types';
8
+ import { SubjectConfigValidatorService } from '../workflowConfig/subject-config-validator.service';
9
+ import { WidgetCatalogService } from '../workflowConfig/widget-catalog.service';
10
+ import {
11
+ CreateConfiguredNodeInstanceDto,
12
+ UpdateConfiguredNodeInstanceDto,
13
+ } from './workflowNodeInstance.dto';
8
14
 
9
15
  @Injectable()
10
16
  export class WorkflowNodeInstanceService {
11
17
  constructor(
12
18
  private prisma: PrismaService,
13
- private readonly config: ConfigService,
14
- @Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger,
19
+ private readonly nodeConfigValidator: NodeConfigValidatorService,
20
+ private readonly widgetCatalog: WidgetCatalogService,
21
+ private readonly subjectConfigValidator: SubjectConfigValidatorService,
15
22
  ) {}
16
23
 
17
- async createOne(
18
- workflowNodeInstanceCreateArgs: Prisma.WorkflowNodeInstanceCreateArgs,
24
+ async createConfigured(
25
+ input: CreateConfiguredNodeInstanceDto,
26
+ actor: ActorContext,
19
27
  ) {
20
- return await this.prisma.workflowNodeInstance.create(
21
- workflowNodeInstanceCreateArgs,
28
+ const nodeType = await this.prisma.workflowNodeType.findUnique({
29
+ where: { id: BigInt(input.nodeTypeId) },
30
+ select: {
31
+ id: true,
32
+ runtimeKey: true,
33
+ schemaVersion: true,
34
+ configSchema: true,
35
+ uiSchema: true,
36
+ },
37
+ });
38
+ if (!nodeType) throw new NotFoundException('Node type not found');
39
+
40
+ await this.validateConfig(nodeType, input.config, actor);
41
+
42
+ const config = input.config as Prisma.InputJsonValue;
43
+ const creator = this.creatorFrom(actor);
44
+ const instance = await this.prisma.workflowNodeInstance.create({
45
+ data: {
46
+ nodeTypeId: BigInt(input.nodeTypeId),
47
+ name: input.name,
48
+ description: input.description,
49
+ config,
50
+ isEnabled: input.isEnabled ?? true,
51
+ creator,
52
+ },
53
+ });
54
+ await this.createAudit('CREATE_NODE_INSTANCE', instance.id, creator);
55
+ return instance;
56
+ }
57
+
58
+ async updateConfigured(
59
+ instanceId: number,
60
+ input: UpdateConfiguredNodeInstanceDto,
61
+ actor: ActorContext,
62
+ ) {
63
+ const id = BigInt(instanceId);
64
+ const instance = await this.prisma.workflowNodeInstance.findUnique({
65
+ where: { id },
66
+ select: {
67
+ id: true,
68
+ nodeType: {
69
+ select: {
70
+ id: true,
71
+ runtimeKey: true,
72
+ schemaVersion: true,
73
+ configSchema: true,
74
+ uiSchema: true,
75
+ },
76
+ },
77
+ },
78
+ });
79
+ if (!instance) throw new NotFoundException('Node instance not found');
80
+
81
+ if (input.config !== undefined)
82
+ await this.validateConfig(instance.nodeType, input.config, actor);
83
+ const data = {
84
+ ...(input.name !== undefined && { name: input.name }),
85
+ ...(input.description !== undefined && {
86
+ description: input.description,
87
+ }),
88
+ ...(input.isEnabled !== undefined && { isEnabled: input.isEnabled }),
89
+ ...(input.config !== undefined && {
90
+ config: input.config as Prisma.InputJsonValue,
91
+ }),
92
+ };
93
+ const updated = await this.prisma.workflowNodeInstance.update({
94
+ where: { id: BigInt(instanceId) },
95
+ data,
96
+ });
97
+ await this.createAudit(
98
+ 'UPDATE_NODE_INSTANCE',
99
+ updated.id,
100
+ this.creatorFrom(actor),
101
+ );
102
+ return updated;
103
+ }
104
+
105
+ private async validateConfig(
106
+ nodeType: {
107
+ id: bigint;
108
+ runtimeKey: string;
109
+ schemaVersion: number;
110
+ configSchema: Prisma.JsonValue;
111
+ uiSchema: Prisma.JsonValue;
112
+ },
113
+ config: unknown,
114
+ actor: ActorContext,
115
+ ): Promise<void> {
116
+ const schemaKey = `${nodeType.id}:${nodeType.schemaVersion}`;
117
+ const configSchema = nodeType.configSchema as JsonSchema;
118
+
119
+ this.nodeConfigValidator.validateOrThrow(schemaKey, configSchema, config);
120
+ this.widgetCatalog.assertUiSchemaSupported(nodeType.uiSchema);
121
+ await this.subjectConfigValidator.validateSubjects(
122
+ configSchema,
123
+ config,
124
+ actor,
22
125
  );
126
+ if (nodeType.runtimeKey === 'http_request') {
127
+ const connectionRef = (config as Record<string, unknown>)?.connectionRef;
128
+ const connection =
129
+ typeof connectionRef === 'string'
130
+ ? await this.prisma.integrationConnection.findUnique({
131
+ where: { code: connectionRef },
132
+ select: { isEnabled: true },
133
+ })
134
+ : null;
135
+ if (!connection?.isEnabled)
136
+ throw new NotFoundException(
137
+ 'HTTP Request Connection was not found or is disabled',
138
+ );
139
+ }
140
+ }
141
+
142
+ private creatorFrom(actor: ActorContext): string {
143
+ return actor.username ?? actor.userId;
144
+ }
145
+
146
+ private async createAudit(action: string, instanceId: bigint, actor: string) {
147
+ await this.prisma.audit.create({
148
+ data: {
149
+ creator: actor,
150
+ authorName: actor,
151
+ action,
152
+ resource: 'workflowNodeInstance',
153
+ resourceId: String(instanceId),
154
+ data: JSON.stringify({ instanceId: String(instanceId) }),
155
+ },
156
+ });
23
157
  }
24
158
 
25
159
  async createMany(data: Prisma.WorkflowNodeInstanceCreateManyArgs['data']) {
@@ -150,7 +284,10 @@ export class WorkflowNodeInstanceService {
150
284
  if (!dsl?.nodes || !Array.isArray(dsl.nodes)) continue;
151
285
 
152
286
  for (const node of dsl.nodes) {
153
- if (node.instanceRef?.instanceId === targetId) {
287
+ if (
288
+ node.source?.instanceId === targetId ||
289
+ node.instanceRef?.instanceId === targetId
290
+ ) {
154
291
  results.push({
155
292
  workflowId: String(wf.id),
156
293
  workflowName: wf.name,