@gadmin2n/schematics 0.0.139 → 0.0.141

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 (329) 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/config/ui/Event.ts +1 -1
  6. package/dist/lib/application/files/gadmin2-game-angle-demo/gitignore +6 -5
  7. package/dist/lib/application/files/gadmin2-game-angle-demo/readme.md +10 -3
  8. package/dist/lib/application/files/gadmin2-game-angle-demo/server/migrate-between-pg-schemas.js +6 -4
  9. package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +5 -2
  10. package/dist/lib/application/files/gadmin2-game-angle-demo/server/prisma.config.ts +12 -3
  11. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/gen-jwt.ts +8 -1
  12. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/migrate-human-approval-configs.ts +86 -0
  13. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow-node-types.ts +710 -121
  14. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow.seed.ts +125 -10
  15. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/config/index.ts +28 -0
  16. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/json-body-parser.spec.ts +61 -0
  17. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/json-body-parser.ts +7 -0
  18. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/structured-all-exceptions.filter.spec.ts +54 -0
  19. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/structured-all-exceptions.filter.ts +86 -0
  20. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/main.ts +9 -3
  21. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.controller.ts +89 -0
  22. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.dto.ts +68 -0
  23. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.spec.ts +177 -0
  24. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.ts +283 -0
  25. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approvalChannel.module.ts +10 -0
  26. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-executor.spec.ts +42 -0
  27. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-executor.ts +108 -0
  28. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.controller.ts +101 -0
  29. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.dto.ts +29 -0
  30. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/codeRuntime.module.ts +21 -0
  31. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-handler.registry.ts +30 -0
  32. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-handler.ts +15 -0
  33. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.spec.ts +105 -0
  34. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.ts +96 -0
  35. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.dto.ts +78 -0
  36. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-signal-outbox.service.spec.ts +56 -0
  37. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-signal-outbox.service.ts +111 -0
  38. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-token.spec.ts +23 -0
  39. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-token.ts +18 -0
  40. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.spec.ts +240 -0
  41. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.ts +339 -0
  42. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.types.ts +74 -0
  43. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-wait.handler.ts +47 -0
  44. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/externalInteraction.module.ts +41 -0
  45. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/human-approval.handler.spec.ts +70 -0
  46. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/human-approval.handler.ts +76 -0
  47. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.controller.ts +12 -0
  48. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.spec.ts +227 -0
  49. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.ts +121 -0
  50. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.controller.ts +160 -0
  51. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.dto.ts +41 -0
  52. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.util.spec.ts +171 -0
  53. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.util.ts +245 -0
  54. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/httpRequest.module.ts +22 -0
  55. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule-evaluator.spec.ts +68 -0
  56. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule-evaluator.ts +126 -0
  57. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule.types.ts +34 -0
  58. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-signal-outbox.service.ts +115 -0
  59. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-subject-source.util.spec.ts +45 -0
  60. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-subject-source.util.ts +59 -0
  61. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.controller.ts +72 -0
  62. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.dto.ts +144 -0
  63. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.errors.ts +19 -0
  64. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.external-decision.spec.ts +350 -0
  65. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.service.ts +774 -0
  66. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/humanApproval.module.ts +46 -0
  67. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/legacy-approval-config-migration.ts +227 -0
  68. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/outbox-retry.util.ts +14 -0
  69. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.controller.ts +151 -0
  70. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.dto.ts +88 -0
  71. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/runtime-token.guard.ts +43 -0
  72. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +21 -1
  73. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.controller.ts +77 -0
  74. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.dto.ts +98 -0
  75. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.service.ts +277 -0
  76. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-secret-cipher.spec.ts +14 -0
  77. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-secret-cipher.ts +59 -0
  78. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integrationConnection.module.ts +10 -0
  79. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/actor-context.util.ts +27 -0
  80. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/providers/user-group.provider.ts +208 -0
  81. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/providers/user.provider.ts +168 -0
  82. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.controller.spec.ts +157 -0
  83. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.controller.ts +176 -0
  84. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.dto.ts +21 -0
  85. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.errors.ts +78 -0
  86. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.registry.spec.ts +100 -0
  87. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.registry.ts +115 -0
  88. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.types.ts +97 -0
  89. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subjectProvider.module.ts +34 -0
  90. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.spec.ts +89 -1
  91. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.ts +4 -0
  92. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.controller.ts +119 -0
  93. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.dto.ts +91 -0
  94. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.errors.ts +34 -0
  95. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.service.spec.ts +161 -0
  96. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.service.ts +390 -0
  97. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/userGroup.module.ts +10 -0
  98. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.spec.ts +17 -0
  99. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.ts +8 -2
  100. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/parameter-binding.ts +93 -0
  101. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/temporal.service.spec.ts +34 -1
  102. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/temporal.service.ts +26 -0
  103. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.spec.ts +158 -0
  104. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.ts +155 -0
  105. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.spec.ts +512 -0
  106. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.ts +368 -0
  107. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.types.ts +43 -0
  108. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-data-edge.util.spec.ts +174 -0
  109. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-data-edge.util.ts +149 -0
  110. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-dsl-comparison.ts +43 -0
  111. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-execution.dto.ts +1 -1
  112. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.dto.ts +4 -0
  113. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.service.ts +70 -28
  114. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-handle-validator.ts +128 -0
  115. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-http-response.spec.ts +85 -0
  116. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-http-response.ts +157 -0
  117. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.controller.spec.ts +59 -0
  118. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.controller.ts +27 -5
  119. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.module.ts +18 -3
  120. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.spec.ts +493 -21
  121. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.ts +426 -90
  122. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/node-config-validator.service.spec.ts +79 -0
  123. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/node-config-validator.service.ts +62 -0
  124. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/schema.types.ts +10 -0
  125. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/subject-config-validator.service.spec.ts +124 -0
  126. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/subject-config-validator.service.ts +236 -0
  127. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.spec.ts +49 -0
  128. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.ts +69 -0
  129. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/workflowConfig.module.ts +20 -0
  130. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/node-instance-config.util.spec.ts +15 -0
  131. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/node-instance-config.util.ts +25 -0
  132. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.controller.ts +103 -11
  133. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.dto.ts +98 -0
  134. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.module.ts +3 -0
  135. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.spec.ts +72 -62
  136. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.ts +148 -11
  137. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +13 -9
  138. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +5 -2
  139. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/authProvider.ts +2 -2
  140. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/BulkActions.tsx +0 -5
  141. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/PageHeader.tsx +46 -0
  142. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SearchBar.tsx +26 -18
  143. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/eventList/index.tsx +2 -2
  144. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logButton/index.tsx +24 -17
  145. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logList/index.tsx +7 -18
  146. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/modalDiffViewer/index.tsx +2 -2
  147. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +288 -33
  148. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/themeStyles.ts +97 -0
  149. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/index.ts +1 -0
  150. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/SettingDrawer.tsx +251 -0
  151. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header.tsx +47 -19
  152. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/layout.tsx +18 -9
  153. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/menuRenderer.tsx +155 -0
  154. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +123 -129
  155. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.test.ts +10 -0
  156. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +18 -0
  157. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/constants/layout.ts +32 -3
  158. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddDataModal.tsx +98 -3
  159. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddPageModal.tsx +101 -0
  160. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DevShell.tsx +8 -0
  161. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/style.css +51 -0
  162. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/form.tsx +1 -1
  163. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +1 -1
  164. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/login.ts +40 -1
  165. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/show.tsx +5 -5
  166. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +16 -1
  167. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useListPageState.ts +10 -7
  168. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/i18n.ts +4 -2
  169. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/common.json +26 -2
  170. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/workflow.json +575 -0
  171. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/common.json +26 -2
  172. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/workflow.json +575 -0
  173. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/plugins/devShellPlugin.ts +152 -2
  174. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/index.tsx +9 -15
  175. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/show.tsx +41 -9
  176. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/edit.tsx +1 -1
  177. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/list.tsx +10 -8
  178. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/show.tsx +3 -3
  179. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.css +1 -1
  180. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/edit.tsx +1 -1
  181. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/list.tsx +141 -138
  182. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/show.tsx +3 -6
  183. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.css +3 -0
  184. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.tsx +45 -13
  185. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasComponentLibrary.tsx +45 -22
  186. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasListPage.tsx +175 -119
  187. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasPage.tsx +248 -74
  188. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasToolbar.tsx +33 -18
  189. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CodeFloatWindow.tsx +16 -10
  190. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/PublishModal.tsx +1 -1
  191. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasContextMenuRegistry.tsx +31 -0
  192. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasDefaults.ts +15 -0
  193. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/BarChartDataSourceModal.tsx +16 -11
  194. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/CanvasAiModal.tsx +25 -21
  195. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/ExportModal.tsx +6 -1
  196. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/LineChartDataSourceModal.tsx +9 -10
  197. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/MultiChartConfigModal.tsx +4 -7
  198. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/MultiChartDataSourceModal.tsx +23 -9
  199. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/NumCardDataSourceModal.tsx +16 -11
  200. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/PromptModal.tsx +2 -5
  201. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/RadarChartDataSourceModal.tsx +16 -11
  202. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableConfigModal.tsx +2 -9
  203. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableDataSourceModal.tsx +23 -12
  204. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/canvasModalProps.ts +2 -17
  205. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.test.ts +149 -0
  206. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.ts +111 -17
  207. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/types.ts +1 -0
  208. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardLayout.test.ts +83 -0
  209. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardLayout.ts +118 -0
  210. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardName.test.ts +26 -0
  211. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas-page/index.tsx +9 -1
  212. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/edit.tsx +1 -1
  213. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/list.tsx +10 -8
  214. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/show.tsx +3 -6
  215. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/DecisionModal.tsx +71 -0
  216. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/inbox.tsx +209 -0
  217. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/AssignRolesModal.tsx +6 -1
  218. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/list.tsx +47 -150
  219. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/permissionReadme/index.tsx +21 -20
  220. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/modal.tsx +1 -1
  221. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +115 -118
  222. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/modal.tsx +1 -1
  223. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/list.tsx +61 -64
  224. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/show-drawer.tsx +1 -1
  225. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/list.tsx +187 -200
  226. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.test.tsx +84 -0
  227. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.tsx +141 -0
  228. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/approval-channel.types.ts +16 -0
  229. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/index.tsx +210 -0
  230. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CreateNodeInstanceDrawer.tsx +154 -0
  231. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CustomNode.tsx +194 -5
  232. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DeletableEdge.tsx +76 -0
  233. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DslView.tsx +1 -1
  234. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/EnhancedFlowRenderer.tsx +176 -22
  235. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.test.tsx +62 -0
  236. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.tsx +94 -5
  237. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExportModal.tsx +15 -10
  238. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/FlowRenderer.tsx +251 -70
  239. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ImportModal.tsx +18 -24
  240. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/InstanceRequiredDialog.tsx +106 -0
  241. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/LookupConnectionDialog.test.tsx +45 -0
  242. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/LookupConnectionDialog.tsx +43 -0
  243. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NewNodeDefaults.test.tsx +283 -0
  244. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeEditModal.tsx +6 -7
  245. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.test.tsx +335 -0
  246. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.tsx +433 -237
  247. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ParameterBindingEditor.tsx +179 -0
  248. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/RunWorkflowModal.tsx +18 -16
  249. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/StatusCards.tsx +20 -16
  250. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/VersionPanel.tsx +6 -4
  251. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/ConnectionModal.test.tsx +68 -0
  252. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/ConnectionModal.tsx +367 -0
  253. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/connection.types.ts +21 -0
  254. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/index.tsx +180 -0
  255. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/editor.tsx +38 -22
  256. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useNodeInstanceLibrary.ts +41 -0
  257. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useWorkflowAgent.ts +6 -0
  258. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/index.tsx +29 -35
  259. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instance-detail.tsx +8 -11
  260. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instances.tsx +4 -3
  261. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/NodeInstanceForm.tsx +56 -23
  262. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/create.tsx +21 -6
  263. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/edit.tsx +17 -20
  264. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/index.tsx +9 -17
  265. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaField.tsx +311 -0
  266. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaForm.test.tsx +218 -0
  267. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaForm.tsx +83 -0
  268. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/default-widgets.tsx +135 -0
  269. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/schema-defaults.ts +36 -0
  270. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/schema.types.ts +32 -0
  271. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/widget-registry.test.tsx +23 -0
  272. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/widget-registry.tsx +52 -0
  273. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/show.tsx +9 -13
  274. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRequestTriggerConfigEditor.tsx +39 -0
  275. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRuleEditor.test.tsx +20 -0
  276. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRuleEditor.tsx +72 -0
  277. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.test.tsx +47 -0
  278. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.tsx +185 -0
  279. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CallableInputParametersEditor.test.tsx +102 -0
  280. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CallableInputParametersEditor.tsx +150 -0
  281. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CodeConfigEditor.tsx +103 -0
  282. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.test.tsx +135 -0
  283. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.tsx +273 -0
  284. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalWaitConfigEditor.tsx +303 -0
  285. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.test.tsx +189 -0
  286. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.tsx +706 -0
  287. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.test.tsx +86 -0
  288. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.tsx +458 -0
  289. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.test.tsx +81 -0
  290. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.tsx +281 -0
  291. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubjectPicker.test.tsx +61 -0
  292. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubjectPicker.tsx +266 -0
  293. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitApprovalResultConfigEditor.tsx +104 -0
  294. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitExternalResultConfigEditor.tsx +98 -0
  295. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/UserGroupCreateModal.tsx +70 -0
  296. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/UserGroupEditModal.tsx +138 -0
  297. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/approver-source.test.ts +25 -0
  298. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/approver-source.ts +42 -0
  299. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/subject-provider.api.ts +95 -0
  300. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/show.tsx +15 -11
  301. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/temporal-tenant/index.test.tsx +152 -0
  302. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/temporal-tenant/index.tsx +438 -141
  303. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types/parameter-binding.ts +49 -0
  304. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types.ts +31 -2
  305. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/lookupConnection.test.ts +208 -0
  306. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/lookupConnection.ts +246 -0
  307. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/newNodeConfig.ts +77 -0
  308. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/removeWorkflowEdges.test.ts +34 -0
  309. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/removeWorkflowEdges.ts +18 -0
  310. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveLookupPorts.ts +66 -0
  311. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.test.ts +39 -0
  312. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.ts +48 -0
  313. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveWorkflowDisplay.test.ts +51 -0
  314. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveWorkflowDisplay.ts +32 -0
  315. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/edit.tsx +1 -1
  316. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/list.tsx +10 -8
  317. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/show.tsx +3 -3
  318. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd-theme-vars.css +93 -0
  319. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd.css +8 -8
  320. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/fc.css +4 -4
  321. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/index.css +40 -5
  322. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-drawer.module.css +3 -3
  323. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-page.module.css +3 -3
  324. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/theme-styles.css +81 -0
  325. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/test/setup.ts +5 -0
  326. package/dist/lib/application/files/gadmin2-game-angle-demo/web/vite.config.ts +1 -7
  327. package/dist/lib/application/files/gadmin2-game-angle-demo/web/vitest.config.ts +12 -0
  328. package/package.json +1 -1
  329. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/DynamicConfigForm.tsx +0 -154
@@ -1,7 +1,69 @@
1
1
  import { ALL_NODE_TYPES } from '@gadmin2n/nest-common/workflow-dsl';
2
2
  import { Prisma, PrismaClient } from '@prisma/client';
3
3
 
4
- export const NODE_TYPES = [
4
+ type BaseNodeTypeSeed = {
5
+ type: string;
6
+ category: string;
7
+ label: string;
8
+ icon: string;
9
+ description: string;
10
+ configSchema: Prisma.InputJsonObject;
11
+ inputSchema: Prisma.InputJsonObject;
12
+ outputSchema: Prisma.InputJsonObject;
13
+ outputs: Prisma.InputJsonValue | null;
14
+ };
15
+
16
+ type NodeTypeSeed = BaseNodeTypeSeed & {
17
+ runtimeKey: string;
18
+ uiSchema: Prisma.InputJsonObject;
19
+ schemaVersion: number;
20
+ instancePolicy: 'REQUIRED' | 'OPTIONAL' | 'INLINE_ONLY';
21
+ };
22
+
23
+ const inlineNode = (definition: BaseNodeTypeSeed): NodeTypeSeed => ({
24
+ ...definition,
25
+ runtimeKey: definition.type,
26
+ schemaVersion: 1,
27
+ instancePolicy: 'INLINE_ONLY',
28
+ uiSchema: {},
29
+ });
30
+
31
+ const PARAMETER_BINDING_SCHEMA = {
32
+ oneOf: [
33
+ {
34
+ type: 'object',
35
+ properties: {
36
+ source: {
37
+ type: 'string',
38
+ enum: ['INPUT', 'WORKFLOW', 'SYSTEM'],
39
+ },
40
+ path: { type: 'string', minLength: 1 },
41
+ },
42
+ required: ['source', 'path'],
43
+ additionalProperties: false,
44
+ },
45
+ {
46
+ type: 'object',
47
+ properties: {
48
+ source: { type: 'string', enum: ['FIXED'] },
49
+ valueType: {
50
+ type: 'string',
51
+ enum: ['STRING', 'NUMBER', 'BOOLEAN', 'JSON'],
52
+ },
53
+ value: { type: 'string' },
54
+ },
55
+ required: ['source', 'valueType', 'value'],
56
+ additionalProperties: false,
57
+ },
58
+ ],
59
+ };
60
+
61
+ const PARAMETER_BINDINGS_SCHEMA = {
62
+ type: 'object',
63
+ additionalProperties: PARAMETER_BINDING_SCHEMA,
64
+ };
65
+
66
+ const INLINE_NODE_DEFINITIONS: BaseNodeTypeSeed[] = [
5
67
  // ─── TRIGGER ───────────────────────────────────────────────────────────────
6
68
  {
7
69
  type: 'cron_trigger',
@@ -33,9 +95,9 @@ export const NODE_TYPES = [
33
95
  {
34
96
  type: 'webhook_trigger',
35
97
  category: 'TRIGGER',
36
- label: 'Webhook Trigger',
98
+ label: '接收外部请求',
37
99
  icon: 'ApiOutlined',
38
- description: 'Trigger workflow via HTTP webhook (HMAC-signed)',
100
+ description: '通过外部 HTTP POST 请求启动 Workflow',
39
101
  configSchema: {
40
102
  type: 'object',
41
103
  properties: {
@@ -46,16 +108,51 @@ export const NODE_TYPES = [
46
108
  },
47
109
  method: {
48
110
  type: 'string',
49
- enum: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
50
- description: 'HTTP method the webhook accepts',
111
+ enum: ['POST'],
112
+ default: 'POST',
113
+ description: 'External requests use POST',
114
+ },
115
+ verificationMode: {
116
+ type: 'string',
117
+ enum: ['HMAC', 'NONE'],
118
+ default: 'HMAC',
119
+ description:
120
+ 'HMAC verifies signed callers. NONE directly accepts systems that cannot sign requests.',
51
121
  },
52
122
  secret: {
53
123
  type: 'string',
54
124
  description:
55
125
  'HMAC-SHA256 secret. Caller must send X-Workflow-Signature: sha256=HEX(HMAC(secret, "{ts}.{rawBody}")) and X-Workflow-Timestamp.',
56
126
  },
127
+ responseMode: {
128
+ type: 'string',
129
+ enum: ['IMMEDIATE', 'WAIT_FOR_RESULT'],
130
+ default: 'IMMEDIATE',
131
+ description:
132
+ 'Immediately acknowledge the request or wait for a Return Result node.',
133
+ },
134
+ responseTimeoutSeconds: {
135
+ type: 'integer',
136
+ minimum: 1,
137
+ maximum: 300,
138
+ default: 60,
139
+ description:
140
+ 'Maximum time to keep the HTTP request open in WAIT_FOR_RESULT mode.',
141
+ },
57
142
  },
58
- required: ['path', 'method', 'secret'],
143
+ required: ['path', 'method'],
144
+ allOf: [
145
+ {
146
+ if: {
147
+ properties: {
148
+ verificationMode: { const: 'NONE' },
149
+ },
150
+ required: ['verificationMode'],
151
+ },
152
+ then: {},
153
+ else: { required: ['secret'] },
154
+ },
155
+ ],
59
156
  },
60
157
  inputSchema: {
61
158
  type: 'object',
@@ -125,55 +222,69 @@ export const NODE_TYPES = [
125
222
  category: 'ACTION',
126
223
  label: 'HTTP Request',
127
224
  icon: 'GlobalOutlined',
128
- description: 'Make an HTTP request to an external API',
225
+ description: 'Call an external API through a reusable Connection',
129
226
  configSchema: {
130
227
  type: 'object',
131
228
  properties: {
132
- url: { type: 'string', description: 'Request URL' },
229
+ connectionRef: {
230
+ type: 'string',
231
+ description: 'Immutable code of a reusable Connection',
232
+ },
133
233
  method: {
134
234
  type: 'string',
135
235
  enum: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD'],
136
236
  description: 'HTTP method',
137
237
  },
138
- headers: { type: 'object', description: 'Request headers (JSON)' },
139
- body: { type: 'object', description: 'Request body (JSON)' },
140
- authentication: {
238
+ path: {
141
239
  type: 'string',
142
- enum: ['none', 'basic', 'bearer', 'apiKey', 'oauth2'],
143
- description: 'Authentication type',
144
- },
145
- timeout: {
146
- type: 'number',
147
- description: 'Request timeout in milliseconds',
240
+ description:
241
+ 'Relative API path. Supports explicit {{input.path}} and {{workflow.path}} references.',
148
242
  },
149
- retryOnFail: { type: 'boolean', description: 'Retry on failure' },
150
- maxRetries: { type: 'number', description: 'Maximum retry attempts' },
151
- retryInterval: {
152
- type: 'number',
153
- description: 'Interval between retries (ms)',
243
+ queryBindings: {
244
+ ...PARAMETER_BINDINGS_SCHEMA,
245
+ description: 'Direct value sources for query parameters',
154
246
  },
155
- followRedirects: {
156
- type: 'boolean',
157
- description: 'Follow HTTP redirects',
247
+ headerBindings: {
248
+ ...PARAMETER_BINDINGS_SCHEMA,
249
+ description: 'Direct value sources for request headers',
158
250
  },
159
- responseFormat: {
251
+ bodyMode: {
160
252
  type: 'string',
161
- enum: ['json', 'text', 'binary'],
162
- description: 'Expected response format',
253
+ enum: ['FIELDS', 'JSON'],
254
+ description: 'Request body editing mode',
163
255
  },
164
- ignoreSslErrors: {
165
- type: 'boolean',
166
- description: 'Ignore SSL certificate errors',
256
+ bodyBindings: {
257
+ ...PARAMETER_BINDINGS_SCHEMA,
258
+ description: 'Direct value sources for request body fields',
259
+ },
260
+ body: {
261
+ description:
262
+ 'Advanced JSON body with explicit {{input.path}}, {{workflow.path}}, and {{system.path}} references',
263
+ },
264
+ timeoutSeconds: {
265
+ type: 'integer',
266
+ minimum: 1,
267
+ maximum: 300,
268
+ description: 'Request timeout in seconds',
269
+ },
270
+ retryOnFail: { type: 'boolean', description: 'Retry on failure' },
271
+ maxRetries: { type: 'integer', minimum: 0, maximum: 10 },
272
+ retryInterval: {
273
+ type: 'integer',
274
+ minimum: 0,
275
+ maximum: 60000,
276
+ description: 'Interval between retries in milliseconds',
167
277
  },
168
278
  },
169
- required: ['url', 'method'],
279
+ required: ['connectionRef', 'method', 'path', 'bodyMode'],
280
+ additionalProperties: false,
170
281
  },
171
- inputSchema: { type: 'object', properties: { data: { type: 'object' } } },
282
+ inputSchema: { type: 'object', additionalProperties: true },
172
283
  outputSchema: {
173
284
  type: 'object',
174
285
  properties: {
175
286
  status: { type: 'number' },
176
- data: { type: 'object' },
287
+ data: { description: 'Unmodified response body' },
177
288
  headers: { type: 'object' },
178
289
  },
179
290
  },
@@ -349,7 +460,7 @@ export const NODE_TYPES = [
349
460
  category: 'ACTION',
350
461
  label: 'Set Variable',
351
462
  icon: 'FormOutlined',
352
- description: 'Set, transform, or rename variables in the workflow context',
463
+ description: 'Set, transform, or rename values from the previous node',
353
464
  configSchema: {
354
465
  type: 'object',
355
466
  properties: {
@@ -619,114 +730,584 @@ export const NODE_TYPES = [
619
730
  },
620
731
  outputs: [],
621
732
  },
733
+ ];
622
734
 
623
- // ─── APPROVAL ──────────────────────────────────────────────────────────────
624
- {
625
- type: 'approval',
626
- category: 'APPROVAL',
627
- label: 'Human Approval',
628
- icon: 'CheckCircleOutlined',
629
- description: 'Pause workflow and wait for human approval (Temporal Signal)',
630
- configSchema: {
631
- type: 'object',
632
- properties: {
633
- approvers: {
634
- type: 'array',
635
- items: {
636
- type: 'object',
637
- properties: {
638
- type: { type: 'string', enum: ['user', 'group'] },
639
- id: { type: 'string' },
640
- },
641
- required: ['type', 'id'],
735
+ // ─── APPROVAL ──────────────────────────────────────────────────────────────
736
+ const approvalDefinition: BaseNodeTypeSeed = {
737
+ type: 'approval',
738
+ category: 'APPROVAL',
739
+ label: 'Human Approval',
740
+ icon: 'CheckCircleOutlined',
741
+ description: 'Pause workflow and wait for human approval (Temporal Signal)',
742
+ configSchema: {
743
+ type: 'object',
744
+ properties: {
745
+ approvers: {
746
+ type: 'array',
747
+ items: {
748
+ type: 'object',
749
+ properties: {
750
+ type: { type: 'string', enum: ['user', 'group'] },
751
+ id: { type: 'string' },
642
752
  },
643
- description:
644
- 'Approvers — mix of individual users (type=user, id=userid) and reusable groups (type=group, id=UserGroup.code)',
645
- },
646
- approvalMode: {
647
- type: 'string',
648
- enum: ['any', 'all', 'percentage'],
649
- description:
650
- 'any = one approver, all = unanimous, percentage = quorum',
651
- },
652
- minApprovalCount: {
653
- type: 'number',
654
- description: 'Minimum approvals needed (for percentage mode)',
655
- },
656
- timeout: { type: 'number', description: 'Approval timeout in seconds' },
657
- timeoutAction: {
658
- type: 'string',
659
- enum: ['auto_approve', 'auto_reject', 'escalate'],
660
- description: 'Action when approval times out',
661
- },
662
- escalateTo: {
663
- type: 'array',
664
- items: { type: 'string' },
665
- description: 'Escalation targets (when timeoutAction=escalate)',
666
- },
667
- reminderInterval: {
668
- type: 'number',
669
- description: 'Reminder interval in hours (0 = no reminder)',
670
- },
671
- allowDelegate: {
672
- type: 'boolean',
673
- description: 'Allow approvers to delegate to others',
753
+ required: ['type', 'id'],
674
754
  },
755
+ description:
756
+ 'Approvers — mix of individual users (type=user, id=userid) and reusable groups (type=group, id=UserGroup.code)',
757
+ },
758
+ approvalMode: {
759
+ type: 'string',
760
+ enum: ['any', 'all', 'percentage'],
761
+ description: 'any = one approver, all = unanimous, percentage = quorum',
762
+ },
763
+ minApprovalCount: {
764
+ type: 'number',
765
+ description: 'Minimum approvals needed (for percentage mode)',
766
+ },
767
+ timeout: { type: 'number', description: 'Approval timeout in seconds' },
768
+ timeoutAction: {
769
+ type: 'string',
770
+ enum: ['auto_approve', 'auto_reject', 'escalate'],
771
+ description: 'Action when approval times out',
772
+ },
773
+ escalateTo: {
774
+ type: 'array',
775
+ items: { type: 'string' },
776
+ description: 'Escalation targets (when timeoutAction=escalate)',
777
+ },
778
+ reminderInterval: {
779
+ type: 'number',
780
+ description: 'Reminder interval in hours (0 = no reminder)',
781
+ },
782
+ allowDelegate: {
783
+ type: 'boolean',
784
+ description: 'Allow approvers to delegate to others',
675
785
  },
676
- required: ['approvers'],
677
786
  },
678
- inputSchema: {
787
+ required: ['approvers'],
788
+ },
789
+ inputSchema: {
790
+ type: 'object',
791
+ properties: { requestData: { type: 'object' } },
792
+ },
793
+ outputSchema: {
794
+ type: 'object',
795
+ properties: {
796
+ approved: { type: 'boolean' },
797
+ approvedBy: { type: 'string' },
798
+ comment: { type: 'string' },
799
+ },
800
+ },
801
+ outputs: [],
802
+ };
803
+
804
+ // ─── SUB WORKFLOW ──────────────────────────────────────────────────────────
805
+ const subWorkflowDefinition: BaseNodeTypeSeed = {
806
+ type: 'sub_workflow',
807
+ category: 'SUB_WORKFLOW',
808
+ label: 'Sub Workflow',
809
+ icon: 'SubnodeOutlined',
810
+ description:
811
+ 'Call another workflow as a sub-process (Temporal Child Workflow)',
812
+ configSchema: {
813
+ type: 'object',
814
+ properties: {
815
+ workflowId: {
816
+ type: 'string',
817
+ description: 'Target workflow ID to invoke',
818
+ },
819
+ inputBindings: {
820
+ ...PARAMETER_BINDINGS_SCHEMA,
821
+ description:
822
+ 'Bind child inputs to the previous node, Workflow data, or fixed values',
823
+ },
824
+ waitForCompletion: {
825
+ type: 'boolean',
826
+ description: 'Wait for child workflow to finish (sync vs async)',
827
+ },
828
+ timeout: {
829
+ type: 'number',
830
+ description: 'Child workflow timeout in seconds',
831
+ },
832
+ },
833
+ required: ['workflowId'],
834
+ },
835
+ inputSchema: { type: 'object', properties: { data: { type: 'object' } } },
836
+ outputSchema: {
837
+ type: 'object',
838
+ properties: { result: { type: 'object' }, status: { type: 'string' } },
839
+ },
840
+ outputs: [],
841
+ };
842
+
843
+ const HUMAN_APPROVAL_CONFIG_SCHEMA: NodeTypeSeed['configSchema'] = {
844
+ type: 'object',
845
+ properties: {
846
+ channelRef: {
847
+ type: 'string',
848
+ title: 'Approval channel',
849
+ description:
850
+ 'Optional reusable channel for dispatching to and receiving decisions from an external approval provider.',
851
+ },
852
+ channelInputBindings: {
853
+ ...PARAMETER_BINDINGS_SCHEMA,
854
+ title: 'Approval document fields',
855
+ description:
856
+ 'Bind the selected approval channel inputs to input, Workflow data, or fixed values.',
857
+ },
858
+ approverSources: {
859
+ type: 'array',
860
+ title: '自动找审批人',
861
+ items: {
862
+ type: 'object',
863
+ properties: {
864
+ workflowId: { type: 'string' },
865
+ inputBindings: PARAMETER_BINDINGS_SCHEMA,
866
+ },
867
+ required: ['workflowId', 'inputBindings'],
868
+ },
869
+ },
870
+ subjects: {
871
+ type: 'array',
872
+ title: 'Approvers',
873
+ description: 'Users and reusable groups that may decide this request.',
874
+ minItems: 0,
875
+ 'x-gadmin-capability': 'subject-references',
876
+ items: {
877
+ type: 'object',
878
+ properties: {
879
+ source: { type: 'string', enum: ['STATIC', 'DYNAMIC'] },
880
+ provider: { type: 'string', enum: ['USER', 'USER_GROUP'] },
881
+ refs: { type: 'array', items: { type: 'string' } },
882
+ inputKey: { type: 'string' },
883
+ },
884
+ required: ['source', 'provider'],
885
+ allOf: [
886
+ {
887
+ if: { properties: { source: { const: 'STATIC' } } },
888
+ then: { required: ['refs'] },
889
+ },
890
+ {
891
+ if: { properties: { source: { const: 'DYNAMIC' } } },
892
+ then: { required: ['inputKey'] },
893
+ },
894
+ ],
895
+ },
896
+ },
897
+ approvalRule: {
679
898
  type: 'object',
680
- properties: { requestData: { type: 'object' } },
899
+ title: 'Approval rule',
900
+ properties: {
901
+ mode: { type: 'string', enum: ['ANY', 'ALL', 'COUNT', 'PERCENTAGE'] },
902
+ count: { type: 'integer', minimum: 1 },
903
+ percentage: { type: 'integer', minimum: 1, maximum: 100 },
904
+ },
905
+ required: ['mode'],
906
+ default: { mode: 'ANY' },
681
907
  },
682
- outputSchema: {
908
+ rejectionRule: {
683
909
  type: 'object',
910
+ title: 'Rejection rule',
684
911
  properties: {
685
- approved: { type: 'boolean' },
686
- approvedBy: { type: 'string' },
687
- comment: { type: 'string' },
912
+ mode: { type: 'string', enum: ['ANY', 'ALL', 'COUNT', 'PERCENTAGE'] },
913
+ count: { type: 'integer', minimum: 1 },
914
+ percentage: { type: 'integer', minimum: 1, maximum: 100 },
688
915
  },
916
+ required: ['mode'],
917
+ default: { mode: 'ANY' },
689
918
  },
690
- outputs: [],
691
- },
692
-
693
- // ─── SUB WORKFLOW ──────────────────────────────────────────────────────────
694
- {
695
- type: 'sub_workflow',
696
- category: 'SUB_WORKFLOW',
697
- label: 'Sub Workflow',
698
- icon: 'SubnodeOutlined',
699
- description:
700
- 'Call another workflow as a sub-process (Temporal Child Workflow)',
701
- configSchema: {
919
+ timeout: {
702
920
  type: 'object',
921
+ title: 'Timeout',
703
922
  properties: {
704
- workflowId: {
923
+ durationSeconds: {
924
+ type: 'integer',
925
+ minimum: 0,
926
+ default: 0,
927
+ },
928
+ action: {
705
929
  type: 'string',
706
- description: 'Target workflow ID to invoke',
930
+ enum: ['APPROVED', 'REJECTED'],
931
+ default: 'REJECTED',
707
932
  },
708
- inputMapping: {
933
+ },
934
+ required: ['durationSeconds', 'action'],
935
+ default: { durationSeconds: 0, action: 'REJECTED' },
936
+ },
937
+ },
938
+ required: ['subjects', 'approvalRule', 'rejectionRule', 'timeout'],
939
+ };
940
+
941
+ const HUMAN_APPROVAL_UI_SCHEMA: NodeTypeSeed['uiSchema'] = {
942
+ widget: 'human-approval-config',
943
+ };
944
+
945
+ const humanApprovalNode: NodeTypeSeed = {
946
+ ...approvalDefinition,
947
+ configSchema: HUMAN_APPROVAL_CONFIG_SCHEMA,
948
+ outputs: ['true', 'false'],
949
+ runtimeKey: 'human_approval',
950
+ schemaVersion: 6,
951
+ instancePolicy: 'REQUIRED',
952
+ uiSchema: HUMAN_APPROVAL_UI_SCHEMA,
953
+ };
954
+
955
+ const callableTriggerNode: NodeTypeSeed = {
956
+ type: 'callable_trigger',
957
+ category: 'TRIGGER',
958
+ label: '接收调用',
959
+ icon: 'ImportOutlined',
960
+ description: '接收其他地方传入的 Workflow 启动数据',
961
+ configSchema: {
962
+ type: 'object',
963
+ properties: {
964
+ inputParameters: {
965
+ type: 'array',
966
+ title: '调用参数',
967
+ items: {
709
968
  type: 'object',
710
- description: 'Map current context fields to child workflow input',
711
- },
712
- waitForCompletion: {
713
- type: 'boolean',
714
- description: 'Wait for child workflow to finish (sync vs async)',
969
+ properties: {
970
+ key: { type: 'string', title: '参数名' },
971
+ label: { type: 'string', title: '显示名称' },
972
+ required: { type: 'boolean', title: '必填' },
973
+ },
974
+ required: ['key'],
715
975
  },
716
- timeout: {
717
- type: 'number',
718
- description: 'Child workflow timeout in seconds',
976
+ },
977
+ },
978
+ },
979
+ inputSchema: { type: 'object' },
980
+ outputSchema: { type: 'object' },
981
+ outputs: [],
982
+ runtimeKey: 'callable_trigger',
983
+ schemaVersion: 2,
984
+ instancePolicy: 'INLINE_ONLY',
985
+ uiSchema: {
986
+ fields: {
987
+ inputParameters: { widget: 'callable-input-parameters' },
988
+ },
989
+ },
990
+ };
991
+
992
+ const approvalRequestTriggerNode: NodeTypeSeed = {
993
+ type: 'approval_request_trigger',
994
+ category: 'TRIGGER',
995
+ label: '接收调用',
996
+ icon: 'AuditOutlined',
997
+ description: '旧版审批调用入口,仅用于兼容已有 Workflow',
998
+ configSchema: {
999
+ type: 'object',
1000
+ properties: {},
1001
+ },
1002
+ inputSchema: { type: 'object' },
1003
+ outputSchema: { type: 'object' },
1004
+ outputs: [],
1005
+ runtimeKey: 'approval_request_trigger',
1006
+ schemaVersion: 1,
1007
+ instancePolicy: 'INLINE_ONLY',
1008
+ uiSchema: {
1009
+ widget: 'approval-request-trigger-config',
1010
+ },
1011
+ };
1012
+
1013
+ const returnResultNode: NodeTypeSeed = {
1014
+ type: 'return_result',
1015
+ category: 'ACTION',
1016
+ label: '返回结果',
1017
+ icon: 'ExportOutlined',
1018
+ description: '把上一个节点或 Workflow 数据返回给调用方',
1019
+ configSchema: {
1020
+ type: 'object',
1021
+ properties: {
1022
+ resultType: {
1023
+ type: 'string',
1024
+ title: '结果类型',
1025
+ enum: ['JSON', 'APPROVAL_SUBJECTS'],
1026
+ default: 'JSON',
1027
+ },
1028
+ sourceMode: {
1029
+ type: 'string',
1030
+ title: '结果来源',
1031
+ enum: ['INPUT', 'WORKFLOW'],
1032
+ default: 'INPUT',
1033
+ },
1034
+ path: {
1035
+ type: 'string',
1036
+ title: 'Workflow 数据字段',
1037
+ description: '例如 approvers',
1038
+ },
1039
+ httpStatusCode: {
1040
+ type: 'integer',
1041
+ title: 'HTTP 状态码',
1042
+ minimum: 100,
1043
+ maximum: 599,
1044
+ default: 200,
1045
+ },
1046
+ httpHeaders: {
1047
+ type: 'object',
1048
+ title: 'HTTP 响应头',
1049
+ additionalProperties: { type: 'string' },
1050
+ default: {},
1051
+ },
1052
+ },
1053
+ required: ['resultType', 'sourceMode'],
1054
+ },
1055
+ inputSchema: { type: 'object' },
1056
+ outputSchema: { type: 'object' },
1057
+ outputs: [],
1058
+ runtimeKey: 'return_result',
1059
+ schemaVersion: 4,
1060
+ instancePolicy: 'INLINE_ONLY',
1061
+ uiSchema: { widget: 'return-result-config' },
1062
+ };
1063
+
1064
+ const submitApprovalResultNode: NodeTypeSeed = {
1065
+ type: 'submit_approval_result',
1066
+ category: 'ACTION',
1067
+ label: '提交审批结果',
1068
+ icon: 'CheckCircleOutlined',
1069
+ description: '把外部系统的审批决定提交给正在等待的人工审核节点',
1070
+ configSchema: {
1071
+ type: 'object',
1072
+ properties: {
1073
+ inputBindings: {
1074
+ type: 'object',
1075
+ properties: Object.fromEntries(
1076
+ [
1077
+ 'requestId',
1078
+ 'channelRef',
1079
+ 'eventId',
1080
+ 'approverId',
1081
+ 'decision',
1082
+ 'comment',
1083
+ 'payload',
1084
+ ].map((key) => [key, PARAMETER_BINDING_SCHEMA]),
1085
+ ),
1086
+ required: [
1087
+ 'requestId',
1088
+ 'channelRef',
1089
+ 'eventId',
1090
+ 'approverId',
1091
+ 'decision',
1092
+ ],
1093
+ additionalProperties: false,
1094
+ },
1095
+ },
1096
+ required: ['inputBindings'],
1097
+ additionalProperties: false,
1098
+ },
1099
+ inputSchema: { description: 'Normalized approval result' },
1100
+ outputSchema: {
1101
+ type: 'object',
1102
+ properties: {
1103
+ accepted: { type: 'boolean' },
1104
+ requestId: { type: 'string' },
1105
+ },
1106
+ },
1107
+ outputs: [],
1108
+ runtimeKey: 'submit_approval_result',
1109
+ schemaVersion: 1,
1110
+ instancePolicy: 'INLINE_ONLY',
1111
+ uiSchema: { widget: 'submit-approval-result-config' },
1112
+ };
1113
+
1114
+ const submitExternalResultNode: NodeTypeSeed = {
1115
+ type: 'submit_external_result',
1116
+ category: 'ACTION',
1117
+ label: '提交外部处理结果',
1118
+ icon: 'ApiOutlined',
1119
+ description: '把外部系统的处理结果提交给正在等待的 Workflow',
1120
+ configSchema: {
1121
+ type: 'object',
1122
+ properties: {
1123
+ inputBindings: {
1124
+ type: 'object',
1125
+ properties: Object.fromEntries(
1126
+ ['callbackToken', 'eventId', 'outcome', 'operatorId', 'data'].map(
1127
+ (key) => [key, PARAMETER_BINDING_SCHEMA],
1128
+ ),
1129
+ ),
1130
+ required: ['callbackToken', 'eventId', 'outcome'],
1131
+ additionalProperties: false,
1132
+ },
1133
+ },
1134
+ required: ['inputBindings'],
1135
+ additionalProperties: false,
1136
+ },
1137
+ inputSchema: { description: 'External callback payload' },
1138
+ outputSchema: {
1139
+ type: 'object',
1140
+ properties: {
1141
+ accepted: { type: 'boolean' },
1142
+ duplicate: { type: 'boolean' },
1143
+ resolved: { type: 'boolean' },
1144
+ },
1145
+ },
1146
+ outputs: [],
1147
+ runtimeKey: 'submit_external_result',
1148
+ schemaVersion: 1,
1149
+ instancePolicy: 'INLINE_ONLY',
1150
+ uiSchema: { widget: 'submit-external-result-config' },
1151
+ };
1152
+
1153
+ const externalWaitNode: NodeTypeSeed = {
1154
+ type: 'external_wait',
1155
+ category: 'FLOW_CONTROL',
1156
+ label: '等待外部处理',
1157
+ icon: 'HourglassOutlined',
1158
+ description: '发起外部处理,并在收到结果后从对应出口继续',
1159
+ configSchema: {
1160
+ type: 'object',
1161
+ properties: {
1162
+ dispatchWorkflowId: {
1163
+ type: 'string',
1164
+ title: '发送 Workflow',
1165
+ pattern: '^[1-9][0-9]*$',
1166
+ },
1167
+ callbackWorkflowId: {
1168
+ type: 'string',
1169
+ title: '回调 Workflow',
1170
+ pattern: '^[1-9][0-9]*$',
1171
+ },
1172
+ businessDataBinding: PARAMETER_BINDING_SCHEMA,
1173
+ participantsBinding: PARAMETER_BINDING_SCHEMA,
1174
+ outcomes: {
1175
+ type: 'array',
1176
+ minItems: 1,
1177
+ items: {
1178
+ type: 'object',
1179
+ properties: {
1180
+ code: {
1181
+ type: 'string',
1182
+ pattern: '^[A-Z][A-Z0-9_]{0,63}$',
1183
+ },
1184
+ label: { type: 'string', minLength: 1, maxLength: 64 },
1185
+ },
1186
+ required: ['code', 'label'],
1187
+ additionalProperties: false,
719
1188
  },
720
1189
  },
721
- required: ['workflowId'],
1190
+ timeout: {
1191
+ type: 'object',
1192
+ properties: {
1193
+ durationSeconds: { type: 'integer', minimum: 1 },
1194
+ outcome: { type: 'string', const: 'TIMEOUT' },
1195
+ },
1196
+ required: ['durationSeconds', 'outcome'],
1197
+ additionalProperties: false,
1198
+ },
722
1199
  },
723
- inputSchema: { type: 'object', properties: { data: { type: 'object' } } },
724
- outputSchema: {
725
- type: 'object',
726
- properties: { result: { type: 'object' }, status: { type: 'string' } },
1200
+ required: ['dispatchWorkflowId', 'outcomes', 'timeout'],
1201
+ additionalProperties: false,
1202
+ },
1203
+ inputSchema: {
1204
+ description: '上一个节点的结果;默认作为发送给外部系统的业务数据',
1205
+ },
1206
+ outputSchema: {
1207
+ type: 'object',
1208
+ properties: {
1209
+ outcome: { type: 'string' },
1210
+ operatorId: { type: 'string' },
1211
+ data: { type: 'object' },
1212
+ completedAt: { type: 'string' },
1213
+ },
1214
+ required: ['outcome'],
1215
+ },
1216
+ outputs: null,
1217
+ runtimeKey: 'external_wait',
1218
+ schemaVersion: 1,
1219
+ instancePolicy: 'INLINE_ONLY',
1220
+ uiSchema: { widget: 'external-wait-config' },
1221
+ };
1222
+
1223
+ const httpRequestDefinition = INLINE_NODE_DEFINITIONS.find(
1224
+ (definition) => definition.type === 'http_request',
1225
+ )!;
1226
+
1227
+ const webhookDefinition = INLINE_NODE_DEFINITIONS.find(
1228
+ (definition) => definition.type === 'webhook_trigger',
1229
+ )!;
1230
+
1231
+ const webhookNode: NodeTypeSeed = {
1232
+ ...inlineNode(webhookDefinition),
1233
+ runtimeKey: 'webhook_trigger',
1234
+ schemaVersion: 4,
1235
+ uiSchema: { widget: 'external-request-config' },
1236
+ };
1237
+
1238
+ const httpRequestNode: NodeTypeSeed = {
1239
+ ...httpRequestDefinition,
1240
+ runtimeKey: 'http_request',
1241
+ schemaVersion: 5,
1242
+ instancePolicy: 'OPTIONAL',
1243
+ uiSchema: { widget: 'http-request-config' },
1244
+ };
1245
+
1246
+ const codeDefinition = INLINE_NODE_DEFINITIONS.find(
1247
+ (definition) => definition.type === 'code',
1248
+ )!;
1249
+
1250
+ const codeNode: NodeTypeSeed = {
1251
+ ...codeDefinition,
1252
+ configSchema: {
1253
+ type: 'object',
1254
+ properties: {
1255
+ script: {
1256
+ type: 'string',
1257
+ description: 'JavaScript function body. Return the transformed value.',
1258
+ default: 'return input;',
1259
+ },
1260
+ mode: {
1261
+ type: 'string',
1262
+ enum: ['runOnceForAll', 'runOnceForEach'],
1263
+ default: 'runOnceForAll',
1264
+ },
1265
+ timeout: {
1266
+ type: 'integer',
1267
+ minimum: 1,
1268
+ maximum: 5000,
1269
+ default: 1000,
1270
+ description: 'Maximum script execution time in milliseconds',
1271
+ },
1272
+ },
1273
+ required: ['script'],
1274
+ },
1275
+ inputSchema: { description: 'Any JSON value from the previous node' },
1276
+ outputSchema: {
1277
+ type: 'object',
1278
+ properties: {
1279
+ result: { description: 'Any JSON value returned by the script' },
727
1280
  },
728
- outputs: [],
729
1281
  },
1282
+ runtimeKey: 'code',
1283
+ schemaVersion: 4,
1284
+ instancePolicy: 'OPTIONAL',
1285
+ uiSchema: { widget: 'code-config' },
1286
+ };
1287
+
1288
+ const subWorkflowNode: NodeTypeSeed = {
1289
+ ...inlineNode(subWorkflowDefinition),
1290
+ schemaVersion: 2,
1291
+ };
1292
+
1293
+ export const NODE_TYPES: NodeTypeSeed[] = [
1294
+ ...INLINE_NODE_DEFINITIONS.filter(
1295
+ (definition) =>
1296
+ definition.type !== 'http_request' &&
1297
+ definition.type !== 'code' &&
1298
+ definition.type !== 'webhook_trigger',
1299
+ ).map(inlineNode),
1300
+ webhookNode,
1301
+ httpRequestNode,
1302
+ codeNode,
1303
+ humanApprovalNode,
1304
+ callableTriggerNode,
1305
+ approvalRequestTriggerNode,
1306
+ returnResultNode,
1307
+ submitApprovalResultNode,
1308
+ submitExternalResultNode,
1309
+ externalWaitNode,
1310
+ subWorkflowNode,
730
1311
  ];
731
1312
 
732
1313
  // ─── Seed / nest-common consistency check ──────────────────────────────────
@@ -778,6 +1359,10 @@ export async function seedNodeTypes(prisma: PrismaClient) {
778
1359
  inputSchema: nodeType.inputSchema,
779
1360
  outputSchema: nodeType.outputSchema,
780
1361
  outputs: outputsValue,
1362
+ runtimeKey: nodeType.runtimeKey,
1363
+ uiSchema: nodeType.uiSchema,
1364
+ schemaVersion: nodeType.schemaVersion,
1365
+ instancePolicy: nodeType.instancePolicy,
781
1366
  },
782
1367
  create: {
783
1368
  type: nodeType.type,
@@ -789,6 +1374,10 @@ export async function seedNodeTypes(prisma: PrismaClient) {
789
1374
  inputSchema: nodeType.inputSchema,
790
1375
  outputSchema: nodeType.outputSchema,
791
1376
  outputs: outputsValue,
1377
+ runtimeKey: nodeType.runtimeKey,
1378
+ uiSchema: nodeType.uiSchema,
1379
+ schemaVersion: nodeType.schemaVersion,
1380
+ instancePolicy: nodeType.instancePolicy,
792
1381
  },
793
1382
  });
794
1383
  }