@gadmin2n/schematics 0.0.72 → 0.0.75

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 (173) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +2 -0
  3. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/job.prisma +62 -0
  4. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/system.prisma +0 -21
  5. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/workflow.prisma +171 -0
  6. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/AgendaJob.ts +60 -0
  7. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Event.ts +1 -1
  8. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/WorkflowEventOutbox.ts +62 -0
  9. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/WorkflowNodeInstance.ts +62 -0
  10. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/WorkflowNodeType.ts +62 -0
  11. package/dist/lib/application/files/gadmin2-game-angle-demo/server/.env +5 -0
  12. package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +5 -4
  13. package/dist/lib/application/files/gadmin2-game-angle-demo/server/prisma.config.ts +14 -7
  14. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/index.ts +4 -0
  15. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/permissions.ts +49 -3
  16. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow-node-types.ts +746 -0
  17. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflows.ts +786 -0
  18. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/agenda/agenda.controller.ts +6 -0
  19. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/agenda/agenda.service.ts +79 -0
  20. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/agendaJob/agendaJob.controller.spec.ts +20 -0
  21. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/agendaJob/agendaJob.controller.ts +145 -0
  22. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/agendaJob/agendaJob.module.ts +10 -0
  23. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/{canvas/canvas.service.spec.ts → agendaJob/agendaJob.service.spec.ts} +71 -65
  24. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/agendaJob/agendaJob.service.ts +83 -0
  25. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +2 -1
  26. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/temporal.module.ts +9 -0
  27. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/temporal.service.ts +100 -0
  28. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-execution.dto.ts +19 -0
  29. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.dto.ts +43 -0
  30. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.service.ts +317 -0
  31. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-node-type.controller.ts +16 -0
  32. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-node-type.service.ts +13 -0
  33. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.controller.ts +220 -0
  34. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.dto.ts +82 -0
  35. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.module.ts +16 -0
  36. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.ts +505 -0
  37. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.controller.spec.ts +22 -0
  38. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.controller.ts +147 -0
  39. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.module.ts +10 -0
  40. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.service.spec.ts +356 -0
  41. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.service.ts +110 -0
  42. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.controller.spec.ts +22 -0
  43. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.controller.ts +216 -0
  44. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.module.ts +10 -0
  45. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.spec.ts +356 -0
  46. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.ts +168 -0
  47. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeType/workflowNodeType.controller.spec.ts +22 -0
  48. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeType/workflowNodeType.controller.ts +199 -0
  49. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeType/workflowNodeType.module.ts +10 -0
  50. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeType/workflowNodeType.service.spec.ts +348 -0
  51. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeType/workflowNodeType.service.ts +106 -0
  52. package/dist/lib/application/files/gadmin2-game-angle-demo/server/yarn.lock +579 -1082
  53. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/README.md +278 -0
  54. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/config/development-sql.yaml +5 -0
  55. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/docker-compose.yml +25 -0
  56. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/package.json +13 -0
  57. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/sql/create-event-trigger.sql +87 -0
  58. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/.env +7 -0
  59. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/SANDBOX.md +122 -0
  60. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/package-lock.json +4285 -0
  61. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/package.json +28 -0
  62. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/__tests__/activities/code-execute.test.ts +44 -0
  63. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/__tests__/activities/http-request.test.ts +87 -0
  64. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/__tests__/helpers.test.ts +225 -0
  65. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/__tests__/node-type-consistency.test.ts +101 -0
  66. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/activities/code-execute.ts +51 -0
  67. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/activities/db-execute.ts +85 -0
  68. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/activities/db-query.ts +35 -0
  69. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/activities/http-request.ts +54 -0
  70. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/activities/index.ts +6 -0
  71. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/activities/reporting.ts +62 -0
  72. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/activities/send-notification.ts +47 -0
  73. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/config.ts +13 -0
  74. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/dsl/condition.ts +101 -0
  75. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/dsl/context.ts +58 -0
  76. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/dsl/graph.ts +184 -0
  77. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/dsl/helpers.ts +133 -0
  78. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/dsl/node-types.ts +57 -0
  79. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/dsl/types.ts +77 -0
  80. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/index.ts +36 -0
  81. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/outbox-poller.ts +226 -0
  82. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/workflows/dsl-workflow.ts +411 -0
  83. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/tsconfig.json +19 -0
  84. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/vitest.config.ts +8 -0
  85. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/yarn.lock +1905 -0
  86. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package-lock.json +17555 -0
  87. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +5 -2
  88. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +1 -0
  89. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +5 -1
  90. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/title.tsx +1 -1
  91. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +63 -0
  92. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DevShell.tsx +91 -2
  93. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +48 -2
  94. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/show.tsx +43 -2
  95. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/common.json +14 -9
  96. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/common.json +14 -9
  97. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/index.tsx +309 -56
  98. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/show.tsx +1 -3
  99. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/create.tsx +108 -0
  100. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/edit.tsx +124 -0
  101. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/index.tsx +4 -0
  102. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/list.tsx +245 -0
  103. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/show.tsx +70 -0
  104. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasListPage.tsx +0 -1
  105. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasPage.tsx +160 -2
  106. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasToolbar.tsx +120 -148
  107. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CodeFloatWindow.tsx +74 -181
  108. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/LivePreview.tsx +15 -13
  109. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasConfigRegistry.tsx +2 -2
  110. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasContextMenuRegistry.tsx +338 -3
  111. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasDefaults.ts +18 -17
  112. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/BarChartDataSourceModal.tsx +10 -4
  113. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/LineChartDataSourceModal.tsx +10 -4
  114. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/{ChartViewerConfigModal.tsx → MultiChartConfigModal.tsx} +30 -18
  115. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/MultiChartDataSourceModal.tsx +427 -0
  116. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/NumCardDataSourceModal.tsx +10 -4
  117. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/PromptModal.tsx +6 -14
  118. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/RadarChartDataSourceModal.tsx +10 -4
  119. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableDataSourceModal.tsx +10 -4
  120. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/canvasModalProps.ts +24 -0
  121. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/demos.ts +45 -63
  122. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CustomNode.tsx +99 -0
  123. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExportModal.tsx +87 -0
  124. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/FlowRenderer.tsx +322 -0
  125. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ImportModal.tsx +175 -0
  126. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeEditModal.tsx +60 -0
  127. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.tsx +1150 -0
  128. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/RunWorkflowModal.tsx +101 -0
  129. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/StatusCards.tsx +198 -0
  130. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/VersionPanel.tsx +81 -0
  131. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/editor.tsx +566 -0
  132. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useWorkflowAgent.ts +224 -0
  133. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/index.tsx +524 -0
  134. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instance-detail.tsx +343 -0
  135. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instances.tsx +243 -0
  136. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/CreateNodeInstanceModal.tsx +363 -0
  137. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/DynamicConfigForm.tsx +154 -0
  138. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/NodeInstanceForm.tsx +176 -0
  139. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/create.tsx +77 -0
  140. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/edit.tsx +112 -0
  141. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/index.tsx +305 -0
  142. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/show.tsx +282 -0
  143. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/show.tsx +469 -0
  144. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types.ts +92 -0
  145. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/create.tsx +111 -0
  146. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/edit.tsx +127 -0
  147. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/index.tsx +4 -0
  148. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/list.tsx +254 -0
  149. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/show.tsx +74 -0
  150. package/dist/lib/application/files/gadmin2-game-angle-demo/web/yarn.lock +1501 -1199
  151. package/package.json +1 -1
  152. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/app.controller.spec.ts +0 -22
  153. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/BarChart/index.tsx +0 -896
  154. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/ChartSwitcher/index.tsx +0 -219
  155. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/ChartViewer/index.tsx +0 -159
  156. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Filter/index.tsx +0 -192
  157. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/LineChart/index.tsx +0 -1034
  158. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumCard/NumCard.module.css +0 -8
  159. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumCard/index.tsx +0 -509
  160. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumLineCard/index.tsx +0 -66
  161. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/PieChart/index.tsx +0 -552
  162. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/RadarChart/index.tsx +0 -263
  163. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Section/index.tsx +0 -35
  164. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Table/index.tsx +0 -207
  165. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/TreemapChart/index.tsx +0 -382
  166. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/WorldMap/index.tsx +0 -135
  167. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/chart-constants.ts +0 -53
  168. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/icon/InfoIcon.tsx +0 -8
  169. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/icon/index.ts +0 -1
  170. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/config.ts +0 -31
  171. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/nameMap.json +0 -9
  172. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/world.geo.json +0 -39349
  173. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/metric-info-tooltip/index.tsx +0 -19
@@ -0,0 +1,746 @@
1
+ import { PrismaClient } from '@prisma/client';
2
+
3
+ export const NODE_TYPES = [
4
+ // ─── TRIGGER ───────────────────────────────────────────────────────────────
5
+ {
6
+ type: 'cron_trigger',
7
+ category: 'TRIGGER',
8
+ label: 'Cron Trigger',
9
+ icon: 'ClockCircleOutlined',
10
+ description: 'Trigger workflow on a cron schedule',
11
+ configSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ cron: {
15
+ type: 'string',
16
+ description: 'Cron expression (6-field with seconds supported)',
17
+ },
18
+ timezone: {
19
+ type: 'string',
20
+ description: 'IANA timezone, e.g. Asia/Shanghai',
21
+ },
22
+ },
23
+ required: ['cron'],
24
+ },
25
+ inputSchema: { type: 'object', properties: {} },
26
+ outputSchema: {
27
+ type: 'object',
28
+ properties: { triggeredAt: { type: 'string' } },
29
+ },
30
+ },
31
+ {
32
+ type: 'webhook_trigger',
33
+ category: 'TRIGGER',
34
+ label: 'Webhook Trigger',
35
+ icon: 'ApiOutlined',
36
+ description: 'Trigger workflow via HTTP webhook',
37
+ configSchema: {
38
+ type: 'object',
39
+ properties: {
40
+ path: { type: 'string', description: 'Webhook endpoint path' },
41
+ method: {
42
+ type: 'string',
43
+ enum: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
44
+ description: 'HTTP method',
45
+ },
46
+ authentication: {
47
+ type: 'string',
48
+ enum: ['none', 'basic', 'headerAuth', 'jwt'],
49
+ description: 'Authentication method for incoming requests',
50
+ },
51
+ responseMode: {
52
+ type: 'string',
53
+ enum: ['immediately', 'lastNode', 'respondNode'],
54
+ description: 'When to send the HTTP response',
55
+ },
56
+ responseCode: {
57
+ type: 'number',
58
+ description: 'HTTP response status code (default 200)',
59
+ },
60
+ responseBody: {
61
+ type: 'string',
62
+ description: 'Custom response body (JSON string)',
63
+ },
64
+ allowedOrigins: {
65
+ type: 'array',
66
+ items: { type: 'string' },
67
+ description: 'CORS allowed origins',
68
+ },
69
+ },
70
+ required: ['path', 'method'],
71
+ },
72
+ inputSchema: {
73
+ type: 'object',
74
+ properties: {
75
+ body: { type: 'object' },
76
+ headers: { type: 'object' },
77
+ query: { type: 'object' },
78
+ },
79
+ },
80
+ outputSchema: { type: 'object', properties: { body: { type: 'object' } } },
81
+ },
82
+ {
83
+ type: 'event_trigger',
84
+ category: 'TRIGGER',
85
+ label: 'Event Trigger',
86
+ icon: 'ThunderboltOutlined',
87
+ description: 'Trigger workflow on an internal event (Temporal Signal)',
88
+ configSchema: {
89
+ type: 'object',
90
+ properties: {
91
+ eventName: {
92
+ type: 'string',
93
+ description: 'Internal event/signal name to listen for',
94
+ },
95
+ filterExpression: {
96
+ type: 'string',
97
+ description: 'Optional expression to filter events',
98
+ },
99
+ },
100
+ required: ['eventName'],
101
+ },
102
+ inputSchema: {
103
+ type: 'object',
104
+ properties: { payload: { type: 'object' } },
105
+ },
106
+ outputSchema: {
107
+ type: 'object',
108
+ properties: { payload: { type: 'object' } },
109
+ },
110
+ },
111
+ {
112
+ type: 'manual_trigger',
113
+ category: 'TRIGGER',
114
+ label: 'Manual Trigger',
115
+ icon: 'PlayCircleOutlined',
116
+ description: 'Trigger workflow manually for testing or one-time execution',
117
+ configSchema: {
118
+ type: 'object',
119
+ properties: {
120
+ inputSchema: {
121
+ type: 'object',
122
+ description: 'JSON Schema defining expected manual input',
123
+ },
124
+ },
125
+ required: [],
126
+ },
127
+ inputSchema: { type: 'object', properties: { data: { type: 'object' } } },
128
+ outputSchema: { type: 'object', properties: { data: { type: 'object' } } },
129
+ },
130
+
131
+ // ─── ACTION ────────────────────────────────────────────────────────────────
132
+ {
133
+ type: 'http_request',
134
+ category: 'ACTION',
135
+ label: 'HTTP Request',
136
+ icon: 'GlobalOutlined',
137
+ description: 'Make an HTTP request to an external API',
138
+ configSchema: {
139
+ type: 'object',
140
+ properties: {
141
+ url: { type: 'string', description: 'Request URL' },
142
+ method: {
143
+ type: 'string',
144
+ enum: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD'],
145
+ description: 'HTTP method',
146
+ },
147
+ headers: { type: 'object', description: 'Request headers (JSON)' },
148
+ body: { type: 'object', description: 'Request body (JSON)' },
149
+ authentication: {
150
+ type: 'string',
151
+ enum: ['none', 'basic', 'bearer', 'apiKey', 'oauth2'],
152
+ description: 'Authentication type',
153
+ },
154
+ timeout: {
155
+ type: 'number',
156
+ description: 'Request timeout in milliseconds',
157
+ },
158
+ retryOnFail: { type: 'boolean', description: 'Retry on failure' },
159
+ maxRetries: { type: 'number', description: 'Maximum retry attempts' },
160
+ retryInterval: {
161
+ type: 'number',
162
+ description: 'Interval between retries (ms)',
163
+ },
164
+ followRedirects: {
165
+ type: 'boolean',
166
+ description: 'Follow HTTP redirects',
167
+ },
168
+ responseFormat: {
169
+ type: 'string',
170
+ enum: ['json', 'text', 'binary'],
171
+ description: 'Expected response format',
172
+ },
173
+ ignoreSslErrors: {
174
+ type: 'boolean',
175
+ description: 'Ignore SSL certificate errors',
176
+ },
177
+ },
178
+ required: ['url', 'method'],
179
+ },
180
+ inputSchema: { type: 'object', properties: { data: { type: 'object' } } },
181
+ outputSchema: {
182
+ type: 'object',
183
+ properties: {
184
+ status: { type: 'number' },
185
+ data: { type: 'object' },
186
+ headers: { type: 'object' },
187
+ },
188
+ },
189
+ },
190
+ {
191
+ type: 'db_query',
192
+ category: 'ACTION',
193
+ label: 'Database Query',
194
+ icon: 'DatabaseOutlined',
195
+ description: 'Execute a database read query (SELECT)',
196
+ configSchema: {
197
+ type: 'object',
198
+ properties: {
199
+ operation: {
200
+ type: 'string',
201
+ enum: ['query', 'execute'],
202
+ description:
203
+ 'query = read (SELECT), execute = write (INSERT/UPDATE/DELETE)',
204
+ },
205
+ query: { type: 'string', description: 'SQL statement' },
206
+ params: {
207
+ type: 'array',
208
+ items: { type: 'string' },
209
+ description: 'Parameterized values ($1, $2...)',
210
+ },
211
+ datasource: {
212
+ type: 'string',
213
+ description: 'Database connection identifier',
214
+ },
215
+ timeout: {
216
+ type: 'number',
217
+ description: 'Query timeout in milliseconds',
218
+ },
219
+ },
220
+ required: ['query'],
221
+ },
222
+ inputSchema: { type: 'object', properties: {} },
223
+ outputSchema: {
224
+ type: 'object',
225
+ properties: { rows: { type: 'array' }, rowCount: { type: 'number' } },
226
+ },
227
+ },
228
+ {
229
+ type: 'db_execute',
230
+ category: 'ACTION',
231
+ label: 'Database Execute',
232
+ icon: 'ConsoleSqlOutlined',
233
+ description: 'Execute a database write operation (INSERT/UPDATE/DELETE)',
234
+ configSchema: {
235
+ type: 'object',
236
+ properties: {
237
+ operation: {
238
+ type: 'string',
239
+ enum: ['insert', 'update', 'delete', 'raw'],
240
+ description: 'Write operation type',
241
+ },
242
+ table: { type: 'string', description: 'Target table name' },
243
+ data: { type: 'object', description: 'Data to insert/update (JSON)' },
244
+ where: {
245
+ type: 'string',
246
+ description: 'WHERE condition for update/delete',
247
+ },
248
+ rawSql: {
249
+ type: 'string',
250
+ description: 'Raw SQL for complex writes (when operation=raw)',
251
+ },
252
+ params: {
253
+ type: 'array',
254
+ items: { type: 'string' },
255
+ description: 'Parameterized values',
256
+ },
257
+ datasource: {
258
+ type: 'string',
259
+ description: 'Database connection identifier',
260
+ },
261
+ timeout: {
262
+ type: 'number',
263
+ description: 'Execution timeout in milliseconds',
264
+ },
265
+ },
266
+ required: ['operation'],
267
+ },
268
+ inputSchema: { type: 'object', properties: { data: { type: 'object' } } },
269
+ outputSchema: {
270
+ type: 'object',
271
+ properties: {
272
+ affectedRows: { type: 'number' },
273
+ insertedId: { type: 'string' },
274
+ },
275
+ },
276
+ },
277
+ {
278
+ type: 'send_notification',
279
+ category: 'ACTION',
280
+ label: 'Send Notification',
281
+ icon: 'BellOutlined',
282
+ description: 'Send a notification via email, Slack, or webhook',
283
+ configSchema: {
284
+ type: 'object',
285
+ properties: {
286
+ channel: {
287
+ type: 'string',
288
+ enum: ['email', 'slack', 'webhook', 'dingtalk', 'wecom'],
289
+ description: 'Notification channel',
290
+ },
291
+ recipients: {
292
+ type: 'array',
293
+ items: { type: 'string' },
294
+ description: 'Recipient list (emails, user IDs, or webhook URLs)',
295
+ },
296
+ subject: {
297
+ type: 'string',
298
+ description: 'Message subject (for email channel)',
299
+ },
300
+ message: {
301
+ type: 'string',
302
+ description:
303
+ 'Notification message body (supports template variables)',
304
+ },
305
+ templateId: {
306
+ type: 'string',
307
+ description: 'Message template ID (optional, overrides message)',
308
+ },
309
+ },
310
+ required: ['channel', 'recipients', 'message'],
311
+ },
312
+ inputSchema: { type: 'object', properties: { data: { type: 'object' } } },
313
+ outputSchema: {
314
+ type: 'object',
315
+ properties: { sent: { type: 'boolean' }, messageId: { type: 'string' } },
316
+ },
317
+ },
318
+ {
319
+ type: 'code',
320
+ category: 'ACTION',
321
+ label: 'Code',
322
+ icon: 'CodeOutlined',
323
+ description: 'Execute custom JavaScript code for data transformation',
324
+ configSchema: {
325
+ type: 'object',
326
+ properties: {
327
+ script: { type: 'string', description: 'JavaScript code to execute' },
328
+ mode: {
329
+ type: 'string',
330
+ enum: ['runOnceForAll', 'runOnceForEach'],
331
+ description: 'Execution mode: run once for all items or per item',
332
+ },
333
+ timeout: {
334
+ type: 'number',
335
+ description: 'Script execution timeout (ms)',
336
+ },
337
+ },
338
+ required: ['script'],
339
+ },
340
+ inputSchema: {
341
+ type: 'object',
342
+ properties: { data: { type: 'object' }, items: { type: 'array' } },
343
+ },
344
+ outputSchema: {
345
+ type: 'object',
346
+ properties: { result: { type: 'object' } },
347
+ },
348
+ },
349
+
350
+ // ─── DATA PROCESSING ───────────────────────────────────────────────────────
351
+ {
352
+ type: 'set_variable',
353
+ category: 'ACTION',
354
+ label: 'Set Variable',
355
+ icon: 'FormOutlined',
356
+ description: 'Set, transform, or rename variables in the workflow context',
357
+ configSchema: {
358
+ type: 'object',
359
+ properties: {
360
+ assignments: {
361
+ type: 'array',
362
+ items: {
363
+ type: 'object',
364
+ properties: {
365
+ name: { type: 'string' },
366
+ value: { type: 'string' },
367
+ },
368
+ },
369
+ description: 'Variable assignments (name → expression)',
370
+ },
371
+ keepOnlySet: {
372
+ type: 'boolean',
373
+ description: 'Remove all other fields, keep only assigned',
374
+ },
375
+ },
376
+ required: ['assignments'],
377
+ },
378
+ inputSchema: { type: 'object', properties: { data: { type: 'object' } } },
379
+ outputSchema: { type: 'object', properties: { data: { type: 'object' } } },
380
+ },
381
+
382
+ // ─── CONDITION ─────────────────────────────────────────────────────────────
383
+ {
384
+ type: 'if_else',
385
+ category: 'CONDITION',
386
+ label: 'If/Else',
387
+ icon: 'BranchesOutlined',
388
+ description: 'Branch workflow based on a condition',
389
+ configSchema: {
390
+ type: 'object',
391
+ properties: {
392
+ conditions: {
393
+ type: 'array',
394
+ items: {
395
+ type: 'object',
396
+ properties: {
397
+ field: { type: 'string' },
398
+ operator: { type: 'string' },
399
+ value: { type: 'string' },
400
+ },
401
+ },
402
+ description: 'Condition rules (field + operator + value)',
403
+ },
404
+ combineOperation: {
405
+ type: 'string',
406
+ enum: ['AND', 'OR'],
407
+ description: 'How to combine multiple conditions',
408
+ },
409
+ fallbackExpression: {
410
+ type: 'string',
411
+ description:
412
+ 'Fallback: raw expression (if conditions array is empty)',
413
+ },
414
+ },
415
+ required: [],
416
+ },
417
+ inputSchema: { type: 'object', properties: { data: { type: 'object' } } },
418
+ outputSchema: {
419
+ type: 'object',
420
+ properties: { branch: { type: 'string', enum: ['true', 'false'] } },
421
+ },
422
+ },
423
+ {
424
+ type: 'switch',
425
+ category: 'CONDITION',
426
+ label: 'Switch',
427
+ icon: 'PartitionOutlined',
428
+ description: 'Multi-way branch based on a field value',
429
+ configSchema: {
430
+ type: 'object',
431
+ properties: {
432
+ field: { type: 'string', description: 'Field to evaluate' },
433
+ cases: {
434
+ type: 'array',
435
+ items: {
436
+ type: 'object',
437
+ properties: {
438
+ value: { type: 'string' },
439
+ label: { type: 'string' },
440
+ },
441
+ },
442
+ description: 'Case branches (value → output handle)',
443
+ },
444
+ defaultCase: {
445
+ type: 'string',
446
+ description: 'Default branch label when no case matches',
447
+ },
448
+ },
449
+ required: ['field', 'cases'],
450
+ },
451
+ inputSchema: { type: 'object', properties: { data: { type: 'object' } } },
452
+ outputSchema: {
453
+ type: 'object',
454
+ properties: { matchedCase: { type: 'string' } },
455
+ },
456
+ },
457
+
458
+ // ─── FLOW CONTROL ──────────────────────────────────────────────────────────
459
+ {
460
+ type: 'for_each',
461
+ category: 'LOOP',
462
+ label: 'For Each',
463
+ icon: 'RetweetOutlined',
464
+ description: 'Iterate over an array field',
465
+ configSchema: {
466
+ type: 'object',
467
+ properties: {
468
+ iteratorField: {
469
+ type: 'string',
470
+ description: 'Path to the array field to iterate',
471
+ },
472
+ concurrency: {
473
+ type: 'number',
474
+ description: 'Parallel concurrency (1 = sequential)',
475
+ },
476
+ batchSize: {
477
+ type: 'number',
478
+ description: 'Process items in batches of this size',
479
+ },
480
+ errorPolicy: {
481
+ type: 'string',
482
+ enum: ['stop', 'continue', 'collect'],
483
+ description:
484
+ 'Behavior on item failure: stop all, continue, or collect errors',
485
+ },
486
+ },
487
+ required: ['iteratorField'],
488
+ },
489
+ inputSchema: { type: 'object', properties: { items: { type: 'array' } } },
490
+ outputSchema: {
491
+ type: 'object',
492
+ properties: {
493
+ currentItem: { type: 'object' },
494
+ index: { type: 'number' },
495
+ results: { type: 'array' },
496
+ },
497
+ },
498
+ },
499
+ {
500
+ type: 'delay',
501
+ category: 'FLOW_CONTROL',
502
+ label: 'Delay/Wait',
503
+ icon: 'HourglassOutlined',
504
+ description:
505
+ 'Pause workflow execution for a specified duration (Temporal Timer)',
506
+ configSchema: {
507
+ type: 'object',
508
+ properties: {
509
+ delayType: {
510
+ type: 'string',
511
+ enum: ['fixedDuration', 'untilTime', 'untilSignal'],
512
+ description: 'Type of delay',
513
+ },
514
+ duration: {
515
+ type: 'number',
516
+ description: 'Delay duration in seconds (for fixedDuration)',
517
+ },
518
+ untilTime: {
519
+ type: 'string',
520
+ description: 'Resume at ISO datetime (for untilTime)',
521
+ },
522
+ signalName: {
523
+ type: 'string',
524
+ description: 'Signal name to wait for (for untilSignal)',
525
+ },
526
+ },
527
+ required: ['delayType'],
528
+ },
529
+ inputSchema: { type: 'object', properties: {} },
530
+ outputSchema: {
531
+ type: 'object',
532
+ properties: {
533
+ resumedAt: { type: 'string' },
534
+ resumeReason: { type: 'string' },
535
+ },
536
+ },
537
+ },
538
+ {
539
+ type: 'parallel',
540
+ category: 'FLOW_CONTROL',
541
+ label: 'Parallel',
542
+ icon: 'ForkOutlined',
543
+ description:
544
+ 'Execute multiple branches in parallel and wait for all to complete',
545
+ configSchema: {
546
+ type: 'object',
547
+ properties: {
548
+ branches: {
549
+ type: 'array',
550
+ items: {
551
+ type: 'object',
552
+ properties: {
553
+ label: { type: 'string' },
554
+ },
555
+ },
556
+ description: 'Named parallel branches',
557
+ },
558
+ waitMode: {
559
+ type: 'string',
560
+ enum: ['all', 'any', 'count'],
561
+ description: 'Wait for all, any one, or N branches to complete',
562
+ },
563
+ waitCount: {
564
+ type: 'number',
565
+ description: 'Number of branches to wait for (when waitMode=count)',
566
+ },
567
+ },
568
+ required: ['branches'],
569
+ },
570
+ inputSchema: { type: 'object', properties: { data: { type: 'object' } } },
571
+ outputSchema: {
572
+ type: 'object',
573
+ properties: { results: { type: 'array' } },
574
+ },
575
+ },
576
+ {
577
+ type: 'error_handler',
578
+ category: 'FLOW_CONTROL',
579
+ label: 'Error Handler',
580
+ icon: 'WarningOutlined',
581
+ description: 'Catch errors from upstream nodes and execute fallback logic',
582
+ configSchema: {
583
+ type: 'object',
584
+ properties: {
585
+ errorTypes: {
586
+ type: 'array',
587
+ items: { type: 'string' },
588
+ description: 'Error types to catch (empty = catch all)',
589
+ },
590
+ retryPolicy: {
591
+ type: 'string',
592
+ enum: ['none', 'fixed', 'exponential'],
593
+ description: 'Retry strategy before triggering error handler',
594
+ },
595
+ maxRetries: { type: 'number', description: 'Maximum retry attempts' },
596
+ retryInterval: {
597
+ type: 'number',
598
+ description: 'Initial retry interval in seconds',
599
+ },
600
+ fallbackAction: {
601
+ type: 'string',
602
+ enum: ['continue', 'stop', 'goto'],
603
+ description:
604
+ 'Action after catching: continue downstream, stop workflow, or goto a specific node',
605
+ },
606
+ gotoNodeId: {
607
+ type: 'string',
608
+ description: 'Target node ID (when fallbackAction=goto)',
609
+ },
610
+ },
611
+ required: [],
612
+ },
613
+ inputSchema: { type: 'object', properties: { error: { type: 'object' } } },
614
+ outputSchema: {
615
+ type: 'object',
616
+ properties: { error: { type: 'object' }, handled: { type: 'boolean' } },
617
+ },
618
+ },
619
+
620
+ // ─── APPROVAL ──────────────────────────────────────────────────────────────
621
+ {
622
+ type: 'approval',
623
+ category: 'APPROVAL',
624
+ label: 'Human Approval',
625
+ icon: 'CheckCircleOutlined',
626
+ description: 'Pause workflow and wait for human approval (Temporal Signal)',
627
+ configSchema: {
628
+ type: 'object',
629
+ properties: {
630
+ approvers: {
631
+ type: 'array',
632
+ items: { type: 'string' },
633
+ description: 'Approver user IDs or emails',
634
+ },
635
+ approvalMode: {
636
+ type: 'string',
637
+ enum: ['any', 'all', 'percentage'],
638
+ description:
639
+ 'any = one approver, all = unanimous, percentage = quorum',
640
+ },
641
+ minApprovalCount: {
642
+ type: 'number',
643
+ description: 'Minimum approvals needed (for percentage mode)',
644
+ },
645
+ timeout: { type: 'number', description: 'Approval timeout in seconds' },
646
+ timeoutAction: {
647
+ type: 'string',
648
+ enum: ['auto_approve', 'auto_reject', 'escalate'],
649
+ description: 'Action when approval times out',
650
+ },
651
+ escalateTo: {
652
+ type: 'array',
653
+ items: { type: 'string' },
654
+ description: 'Escalation targets (when timeoutAction=escalate)',
655
+ },
656
+ reminderInterval: {
657
+ type: 'number',
658
+ description: 'Reminder interval in hours (0 = no reminder)',
659
+ },
660
+ allowDelegate: {
661
+ type: 'boolean',
662
+ description: 'Allow approvers to delegate to others',
663
+ },
664
+ },
665
+ required: ['approvers'],
666
+ },
667
+ inputSchema: {
668
+ type: 'object',
669
+ properties: { requestData: { type: 'object' } },
670
+ },
671
+ outputSchema: {
672
+ type: 'object',
673
+ properties: {
674
+ approved: { type: 'boolean' },
675
+ approvedBy: { type: 'string' },
676
+ comment: { type: 'string' },
677
+ },
678
+ },
679
+ },
680
+
681
+ // ─── SUB WORKFLOW ──────────────────────────────────────────────────────────
682
+ {
683
+ type: 'sub_workflow',
684
+ category: 'SUB_WORKFLOW',
685
+ label: 'Sub Workflow',
686
+ icon: 'SubnodeOutlined',
687
+ description:
688
+ 'Call another workflow as a sub-process (Temporal Child Workflow)',
689
+ configSchema: {
690
+ type: 'object',
691
+ properties: {
692
+ workflowId: {
693
+ type: 'string',
694
+ description: 'Target workflow ID to invoke',
695
+ },
696
+ inputMapping: {
697
+ type: 'object',
698
+ description: 'Map current context fields to child workflow input',
699
+ },
700
+ waitForCompletion: {
701
+ type: 'boolean',
702
+ description: 'Wait for child workflow to finish (sync vs async)',
703
+ },
704
+ timeout: {
705
+ type: 'number',
706
+ description: 'Child workflow timeout in seconds',
707
+ },
708
+ },
709
+ required: ['workflowId'],
710
+ },
711
+ inputSchema: { type: 'object', properties: { data: { type: 'object' } } },
712
+ outputSchema: {
713
+ type: 'object',
714
+ properties: { result: { type: 'object' }, status: { type: 'string' } },
715
+ },
716
+ },
717
+ ];
718
+
719
+ export async function seedNodeTypes(prisma: PrismaClient) {
720
+ console.log('Seeding workflow node types...');
721
+ for (const nodeType of NODE_TYPES) {
722
+ await prisma.workflowNodeType.upsert({
723
+ where: { type: nodeType.type },
724
+ update: {
725
+ category: nodeType.category as any,
726
+ label: nodeType.label,
727
+ icon: nodeType.icon,
728
+ description: nodeType.description,
729
+ configSchema: nodeType.configSchema,
730
+ inputSchema: nodeType.inputSchema,
731
+ outputSchema: nodeType.outputSchema,
732
+ },
733
+ create: {
734
+ type: nodeType.type,
735
+ category: nodeType.category as any,
736
+ label: nodeType.label,
737
+ icon: nodeType.icon,
738
+ description: nodeType.description,
739
+ configSchema: nodeType.configSchema,
740
+ inputSchema: nodeType.inputSchema,
741
+ outputSchema: nodeType.outputSchema,
742
+ },
743
+ });
744
+ }
745
+ console.log(`Seeded ${NODE_TYPES.length} node types.`);
746
+ }