cxtms 1.9.13

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 (215) hide show
  1. package/README.md +384 -0
  2. package/dist/cli.d.ts +6 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +4784 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/extractUtils.d.ts +11 -0
  7. package/dist/extractUtils.d.ts.map +1 -0
  8. package/dist/extractUtils.js +19 -0
  9. package/dist/extractUtils.js.map +1 -0
  10. package/dist/index.d.ts +7 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +11 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/types.d.ts +129 -0
  15. package/dist/types.d.ts.map +1 -0
  16. package/dist/types.js +6 -0
  17. package/dist/types.js.map +1 -0
  18. package/dist/utils/schemaLoader.d.ts +17 -0
  19. package/dist/utils/schemaLoader.d.ts.map +1 -0
  20. package/dist/utils/schemaLoader.js +134 -0
  21. package/dist/utils/schemaLoader.js.map +1 -0
  22. package/dist/validator.d.ts +72 -0
  23. package/dist/validator.d.ts.map +1 -0
  24. package/dist/validator.js +432 -0
  25. package/dist/validator.js.map +1 -0
  26. package/dist/workflowValidator.d.ts +103 -0
  27. package/dist/workflowValidator.d.ts.map +1 -0
  28. package/dist/workflowValidator.js +753 -0
  29. package/dist/workflowValidator.js.map +1 -0
  30. package/package.json +51 -0
  31. package/schemas/actions/all.json +27 -0
  32. package/schemas/actions/clipboard.json +46 -0
  33. package/schemas/actions/confirm.json +21 -0
  34. package/schemas/actions/consoleLog.json +16 -0
  35. package/schemas/actions/dialog.json +25 -0
  36. package/schemas/actions/fileDownload.json +16 -0
  37. package/schemas/actions/forEach.json +31 -0
  38. package/schemas/actions/if.json +12 -0
  39. package/schemas/actions/mutation.json +25 -0
  40. package/schemas/actions/navigate.json +18 -0
  41. package/schemas/actions/navigateBack.json +22 -0
  42. package/schemas/actions/navigateBackOrClose.json +21 -0
  43. package/schemas/actions/notification.json +19 -0
  44. package/schemas/actions/openBarcodeScanner.json +104 -0
  45. package/schemas/actions/query.json +32 -0
  46. package/schemas/actions/refresh.json +13 -0
  47. package/schemas/actions/resetDirtyState.json +22 -0
  48. package/schemas/actions/setFields.json +21 -0
  49. package/schemas/actions/setStore.json +13 -0
  50. package/schemas/actions/validateForm.json +15 -0
  51. package/schemas/actions/workflow.json +24 -0
  52. package/schemas/components/README.md +147 -0
  53. package/schemas/components/appComponent.json +58 -0
  54. package/schemas/components/barcodeScanner.json +69 -0
  55. package/schemas/components/button.json +123 -0
  56. package/schemas/components/calendar.json +489 -0
  57. package/schemas/components/card.json +176 -0
  58. package/schemas/components/collection.json +54 -0
  59. package/schemas/components/dataGrid.json +119 -0
  60. package/schemas/components/datasource.json +151 -0
  61. package/schemas/components/dropdown.json +57 -0
  62. package/schemas/components/field-collection.json +618 -0
  63. package/schemas/components/field.json +265 -0
  64. package/schemas/components/form.json +234 -0
  65. package/schemas/components/index.json +71 -0
  66. package/schemas/components/layout.json +69 -0
  67. package/schemas/components/module.json +167 -0
  68. package/schemas/components/navDropdown.json +36 -0
  69. package/schemas/components/navbar.json +78 -0
  70. package/schemas/components/navbarItem.json +28 -0
  71. package/schemas/components/navbarLink.json +36 -0
  72. package/schemas/components/row.json +31 -0
  73. package/schemas/components/slot.json +30 -0
  74. package/schemas/components/tab.json +34 -0
  75. package/schemas/components/tabs.json +35 -0
  76. package/schemas/components/timeline.json +172 -0
  77. package/schemas/components/timelineGrid.json +328 -0
  78. package/schemas/fields/README.md +66 -0
  79. package/schemas/fields/attachment.json +156 -0
  80. package/schemas/fields/autocomplete-googleplaces.json +130 -0
  81. package/schemas/fields/checkbox.json +82 -0
  82. package/schemas/fields/date.json +88 -0
  83. package/schemas/fields/datetime.json +75 -0
  84. package/schemas/fields/email.json +75 -0
  85. package/schemas/fields/index.json +53 -0
  86. package/schemas/fields/number.json +91 -0
  87. package/schemas/fields/password.json +70 -0
  88. package/schemas/fields/radio.json +94 -0
  89. package/schemas/fields/rangedatetime.json +56 -0
  90. package/schemas/fields/select-async.json +334 -0
  91. package/schemas/fields/select.json +115 -0
  92. package/schemas/fields/tel.json +79 -0
  93. package/schemas/fields/text.json +86 -0
  94. package/schemas/fields/textarea.json +95 -0
  95. package/schemas/fields/time.json +91 -0
  96. package/schemas/fields/url.json +74 -0
  97. package/schemas/schema.graphql +12248 -0
  98. package/schemas/schemas.json +610 -0
  99. package/schemas/workflows/activity.json +96 -0
  100. package/schemas/workflows/common/condition.json +48 -0
  101. package/schemas/workflows/common/expression.json +76 -0
  102. package/schemas/workflows/common/mapping.json +173 -0
  103. package/schemas/workflows/common/step.json +38 -0
  104. package/schemas/workflows/flow/aggregation.json +44 -0
  105. package/schemas/workflows/flow/entity.json +129 -0
  106. package/schemas/workflows/flow/state.json +105 -0
  107. package/schemas/workflows/flow/transition.json +143 -0
  108. package/schemas/workflows/input.json +122 -0
  109. package/schemas/workflows/output.json +61 -0
  110. package/schemas/workflows/schedule.json +26 -0
  111. package/schemas/workflows/tasks/accounting-transaction.json +95 -0
  112. package/schemas/workflows/tasks/action-event.json +65 -0
  113. package/schemas/workflows/tasks/all.json +152 -0
  114. package/schemas/workflows/tasks/appmodule.json +56 -0
  115. package/schemas/workflows/tasks/attachment.json +97 -0
  116. package/schemas/workflows/tasks/authentication.json +86 -0
  117. package/schemas/workflows/tasks/caching.json +68 -0
  118. package/schemas/workflows/tasks/charge.json +92 -0
  119. package/schemas/workflows/tasks/commodity.json +92 -0
  120. package/schemas/workflows/tasks/contact-address.json +72 -0
  121. package/schemas/workflows/tasks/contact-payment-method.json +72 -0
  122. package/schemas/workflows/tasks/contact.json +82 -0
  123. package/schemas/workflows/tasks/csv.json +81 -0
  124. package/schemas/workflows/tasks/document-render.json +105 -0
  125. package/schemas/workflows/tasks/document-send.json +84 -0
  126. package/schemas/workflows/tasks/edi.json +157 -0
  127. package/schemas/workflows/tasks/email-send.json +110 -0
  128. package/schemas/workflows/tasks/error.json +72 -0
  129. package/schemas/workflows/tasks/export.json +90 -0
  130. package/schemas/workflows/tasks/filetransfer.json +102 -0
  131. package/schemas/workflows/tasks/flow-transition.json +68 -0
  132. package/schemas/workflows/tasks/foreach.json +69 -0
  133. package/schemas/workflows/tasks/generic.json +47 -0
  134. package/schemas/workflows/tasks/graphql.json +78 -0
  135. package/schemas/workflows/tasks/httpRequest.json +161 -0
  136. package/schemas/workflows/tasks/import.json +64 -0
  137. package/schemas/workflows/tasks/inventory.json +67 -0
  138. package/schemas/workflows/tasks/job.json +88 -0
  139. package/schemas/workflows/tasks/log.json +73 -0
  140. package/schemas/workflows/tasks/map.json +58 -0
  141. package/schemas/workflows/tasks/movement.json +54 -0
  142. package/schemas/workflows/tasks/note.json +59 -0
  143. package/schemas/workflows/tasks/number.json +65 -0
  144. package/schemas/workflows/tasks/order-tracking-event.json +109 -0
  145. package/schemas/workflows/tasks/order.json +139 -0
  146. package/schemas/workflows/tasks/payment.json +85 -0
  147. package/schemas/workflows/tasks/pdf-document.json +60 -0
  148. package/schemas/workflows/tasks/postal-codes.json +92 -0
  149. package/schemas/workflows/tasks/resolve-timezone.json +65 -0
  150. package/schemas/workflows/tasks/setVariable.json +76 -0
  151. package/schemas/workflows/tasks/switch.json +75 -0
  152. package/schemas/workflows/tasks/template.json +73 -0
  153. package/schemas/workflows/tasks/tracking-event.json +137 -0
  154. package/schemas/workflows/tasks/transmission.json +185 -0
  155. package/schemas/workflows/tasks/unzip-file.json +68 -0
  156. package/schemas/workflows/tasks/user.json +70 -0
  157. package/schemas/workflows/tasks/validation.json +99 -0
  158. package/schemas/workflows/tasks/while.json +53 -0
  159. package/schemas/workflows/tasks/workflow-execute.json +82 -0
  160. package/schemas/workflows/trigger.json +90 -0
  161. package/schemas/workflows/variable.json +46 -0
  162. package/schemas/workflows/workflow.json +335 -0
  163. package/scripts/postinstall.js +291 -0
  164. package/scripts/setup-vscode.js +80 -0
  165. package/skills/cxtms-developer/SKILL.md +118 -0
  166. package/skills/cxtms-developer/ref-cli-auth.md +120 -0
  167. package/skills/cxtms-developer/ref-entity-accounting.md +180 -0
  168. package/skills/cxtms-developer/ref-entity-commodity.md +239 -0
  169. package/skills/cxtms-developer/ref-entity-contact.md +163 -0
  170. package/skills/cxtms-developer/ref-entity-geography.md +154 -0
  171. package/skills/cxtms-developer/ref-entity-job.md +77 -0
  172. package/skills/cxtms-developer/ref-entity-notification.md +85 -0
  173. package/skills/cxtms-developer/ref-entity-order-sub.md +160 -0
  174. package/skills/cxtms-developer/ref-entity-order.md +183 -0
  175. package/skills/cxtms-developer/ref-entity-organization.md +41 -0
  176. package/skills/cxtms-developer/ref-entity-rate.md +182 -0
  177. package/skills/cxtms-developer/ref-entity-shared.md +176 -0
  178. package/skills/cxtms-developer/ref-entity-warehouse.md +115 -0
  179. package/skills/cxtms-developer/ref-graphql-query.md +309 -0
  180. package/skills/cxtms-module-builder/SKILL.md +477 -0
  181. package/skills/cxtms-module-builder/ref-components-data.md +293 -0
  182. package/skills/cxtms-module-builder/ref-components-display.md +411 -0
  183. package/skills/cxtms-module-builder/ref-components-forms.md +369 -0
  184. package/skills/cxtms-module-builder/ref-components-interactive.md +317 -0
  185. package/skills/cxtms-module-builder/ref-components-layout.md +390 -0
  186. package/skills/cxtms-module-builder/ref-components-specialized.md +477 -0
  187. package/skills/cxtms-workflow-builder/SKILL.md +438 -0
  188. package/skills/cxtms-workflow-builder/ref-accounting.md +66 -0
  189. package/skills/cxtms-workflow-builder/ref-communication.md +169 -0
  190. package/skills/cxtms-workflow-builder/ref-entity.md +342 -0
  191. package/skills/cxtms-workflow-builder/ref-expressions-ncalc.md +128 -0
  192. package/skills/cxtms-workflow-builder/ref-expressions-template.md +161 -0
  193. package/skills/cxtms-workflow-builder/ref-filetransfer.md +80 -0
  194. package/skills/cxtms-workflow-builder/ref-flow.md +210 -0
  195. package/skills/cxtms-workflow-builder/ref-other.md +157 -0
  196. package/skills/cxtms-workflow-builder/ref-query.md +105 -0
  197. package/skills/cxtms-workflow-builder/ref-utilities.md +417 -0
  198. package/templates/module-configuration.yaml +44 -0
  199. package/templates/module-form.yaml +152 -0
  200. package/templates/module-grid.yaml +229 -0
  201. package/templates/module-select.yaml +139 -0
  202. package/templates/module.yaml +84 -0
  203. package/templates/workflow-api-tracking.yaml +189 -0
  204. package/templates/workflow-basic.yaml +76 -0
  205. package/templates/workflow-document.yaml +155 -0
  206. package/templates/workflow-entity-trigger.yaml +90 -0
  207. package/templates/workflow-ftp-edi.yaml +158 -0
  208. package/templates/workflow-ftp-tracking.yaml +161 -0
  209. package/templates/workflow-mcp-tool.yaml +112 -0
  210. package/templates/workflow-public-api.yaml +135 -0
  211. package/templates/workflow-scheduled-execute.yaml +75 -0
  212. package/templates/workflow-scheduled.yaml +125 -0
  213. package/templates/workflow-utility.yaml +96 -0
  214. package/templates/workflow-webhook.yaml +128 -0
  215. package/templates/workflow.yaml +140 -0
@@ -0,0 +1,112 @@
1
+ # {{displayName}} Workflow
2
+ # Generated by cxtms create workflow --template mcp-tool
3
+
4
+ workflow:
5
+ workflowId: "{{uuid}}"
6
+ name: "{{displayName}}"
7
+ description: "{{displayName}} - MCP tool workflow"
8
+ version: "1.0"
9
+ executionMode: Sync
10
+ logLevel: Information
11
+ isActive: true
12
+ enableAudit: true
13
+ filePath: "{{fileName}}"
14
+ agentInstruction: |
15
+ Use this tool to {{displayName}}.
16
+ Inputs:
17
+ - orderId (required): The order ID to process
18
+ Returns:
19
+ - result: Processing outcome with success status
20
+ tags:
21
+ - "mcp-tool"
22
+
23
+ inputs:
24
+ - name: orderId
25
+ type: number
26
+ props:
27
+ displayName: "Order ID"
28
+ description: "The ID of the order to process"
29
+ required: true
30
+
31
+ outputs:
32
+ - name: result
33
+ mapping: "Main.SetResult.result"
34
+
35
+ activities:
36
+ - name: Main
37
+ events:
38
+ onActivityStarted:
39
+ - task: "Utilities/Log@1"
40
+ name: LogActivityStarted
41
+ inputs:
42
+ message: "Activity Main started"
43
+ level: Information
44
+ onActivityCompleted:
45
+ - task: "Utilities/Log@1"
46
+ name: LogActivityCompleted
47
+ inputs:
48
+ message: "Activity Main completed"
49
+ level: Information
50
+ onActivityFailed:
51
+ - task: "Utilities/Log@1"
52
+ name: LogActivityFailed
53
+ inputs:
54
+ message: "Activity Main failed: {{exception.message}}"
55
+ level: Error
56
+ steps:
57
+ - task: "Query/GraphQL"
58
+ name: GetOrder
59
+ inputs:
60
+ query: |
61
+ query($organizationId: Int!, $orderId: Int!) {
62
+ order(organizationId: $organizationId, orderId: $orderId) {
63
+ orderId
64
+ orderNumber
65
+ status
66
+ }
67
+ }
68
+ variables:
69
+ organizationId: "\{{int organizationId}}"
70
+ orderId: "\{{inputs.orderId}}"
71
+ outputs:
72
+ - name: order
73
+ mapping: "order?"
74
+
75
+ - task: "Utilities/Error@1"
76
+ name: ValidateOrder
77
+ conditions:
78
+ - expression: "isNullOrEmpty([Main?.GetOrder?.order?]) = true"
79
+ inputs:
80
+ message: "Order not found: \{{inputs.orderId}}"
81
+
82
+ # TODO: Add processing logic here
83
+
84
+ - task: "Utilities/SetVariable@1"
85
+ name: SetResult
86
+ inputs:
87
+ variables:
88
+ - name: result
89
+ value:
90
+ success: true
91
+ orderId: "\{{inputs.orderId}}"
92
+ orderNumber: "\{{Main?.GetOrder?.order?.orderNumber?}}"
93
+
94
+ events:
95
+ onWorkflowStarted:
96
+ - task: "Utilities/Log@1"
97
+ name: LogWorkflowStarted
98
+ inputs:
99
+ message: "{{displayName}} workflow started"
100
+ level: Information
101
+ onWorkflowCompleted:
102
+ - task: "Utilities/Log@1"
103
+ name: LogWorkflowCompleted
104
+ inputs:
105
+ message: "{{displayName}} workflow completed successfully"
106
+ level: Information
107
+ onWorkflowFailed:
108
+ - task: "Utilities/Log@1"
109
+ name: LogWorkflowFailed
110
+ inputs:
111
+ message: "{{displayName}} workflow failed: {{exception.message}}"
112
+ level: Error
@@ -0,0 +1,135 @@
1
+ # {{displayName}} Workflow
2
+ # Generated by cxtms create workflow --template public-api
3
+ #
4
+ # This workflow exposes a public REST API endpoint.
5
+ # The api section defines the route, method, authentication, and OpenAPI metadata.
6
+ # Inputs use props.in to specify parameter location (path, query, header, body).
7
+ # Outputs use props to describe the response schema for OpenAPI documentation.
8
+
9
+ api:
10
+ path: "/orders/{orderId}"
11
+ method: "GET"
12
+ summary: "{{displayName}}"
13
+ description: "{{displayName}} public API endpoint"
14
+ document: "public"
15
+ category: "Orders"
16
+ authentication: "bearer"
17
+ rateLimit:
18
+ perSecond: 10
19
+ perMinute: 100
20
+
21
+ workflow:
22
+ workflowId: "{{uuid}}"
23
+ name: "{{displayName}}"
24
+ description: "{{displayName}} - Public API endpoint"
25
+ version: "1.0"
26
+ workflowType: "PublicApi"
27
+ executionMode: Sync
28
+ logLevel: Information
29
+ isActive: true
30
+ enableAudit: true
31
+ filePath: "{{fileName}}"
32
+ tags:
33
+ - "public-api"
34
+
35
+ inputs:
36
+ - name: orderId
37
+ type: text
38
+ props:
39
+ in: path
40
+ required: true
41
+ description: "Order ID"
42
+ format: "uuid"
43
+
44
+ outputs:
45
+ - name: response
46
+ mapping: "Main.SetResponse.response"
47
+ props:
48
+ type: object
49
+ description: "Order details"
50
+ schema:
51
+ properties:
52
+ orderId:
53
+ type: integer
54
+ orderNumber:
55
+ type: string
56
+ status:
57
+ type: string
58
+ - name: statusCode
59
+ mapping: "Main.SetResponse.statusCode"
60
+
61
+ activities:
62
+ - name: Main
63
+ events:
64
+ onActivityStarted:
65
+ - task: "Utilities/Log@1"
66
+ name: LogActivityStarted
67
+ inputs:
68
+ message: "Activity Main started"
69
+ level: Information
70
+ onActivityCompleted:
71
+ - task: "Utilities/Log@1"
72
+ name: LogActivityCompleted
73
+ inputs:
74
+ message: "Activity Main completed"
75
+ level: Information
76
+ onActivityFailed:
77
+ - task: "Utilities/Log@1"
78
+ name: LogActivityFailed
79
+ inputs:
80
+ message: "Activity Main failed: {{exception.message}}"
81
+ level: Error
82
+ steps:
83
+ - task: "Query/GraphQL"
84
+ name: GetOrder
85
+ inputs:
86
+ query: |
87
+ query($organizationId: Int!, $orderId: String!) {
88
+ order(organizationId: $organizationId, orderId: $orderId) {
89
+ orderId
90
+ orderNumber
91
+ status
92
+ }
93
+ }
94
+ variables:
95
+ organizationId: "\{{int organizationId}}"
96
+ orderId: "\{{inputs.orderId}}"
97
+ outputs:
98
+ - name: order
99
+ mapping: "order?"
100
+
101
+ - task: "Utilities/Error@1"
102
+ name: ValidateOrder
103
+ conditions:
104
+ - expression: "isNullOrEmpty([Main?.GetOrder?.order?]) = true"
105
+ inputs:
106
+ message: "Order not found"
107
+
108
+ - task: "Utilities/SetVariable@1"
109
+ name: SetResponse
110
+ inputs:
111
+ variables:
112
+ - name: response
113
+ value: "\{{Main?.GetOrder?.order?}}"
114
+ - name: statusCode
115
+ value: 200
116
+
117
+ events:
118
+ onWorkflowStarted:
119
+ - task: "Utilities/Log@1"
120
+ name: LogWorkflowStarted
121
+ inputs:
122
+ message: "{{displayName}} workflow started"
123
+ level: Information
124
+ onWorkflowCompleted:
125
+ - task: "Utilities/Log@1"
126
+ name: LogWorkflowCompleted
127
+ inputs:
128
+ message: "{{displayName}} workflow completed successfully"
129
+ level: Information
130
+ onWorkflowFailed:
131
+ - task: "Utilities/Log@1"
132
+ name: LogWorkflowFailed
133
+ inputs:
134
+ message: "{{displayName}} workflow failed: {{exception.message}}"
135
+ level: Error
@@ -0,0 +1,75 @@
1
+ # {{displayName}} Workflow
2
+ # Generated by cxtms create workflow --template scheduled-execute
3
+
4
+ workflow:
5
+ workflowId: "{{uuid}}"
6
+ name: "{{displayName}}"
7
+ description: "{{displayName}} - schedules another workflow on a cron schedule"
8
+ version: "1.0"
9
+ executionMode: Async
10
+ logLevel: Information
11
+ isActive: true
12
+ enableAudit: true
13
+ filePath: "{{fileName}}"
14
+ tags:
15
+ - "generated"
16
+ - "scheduled"
17
+
18
+ schedules:
19
+ - cron: "0 * * * *"
20
+ displayName: "{{displayName}} - Hourly"
21
+
22
+ activities:
23
+ - name: ExecuteWorkflow
24
+ events:
25
+ onActivityStarted:
26
+ - task: "Utilities/Log@1"
27
+ name: LogActivityStarted
28
+ inputs:
29
+ message: "Activity ExecuteWorkflow started"
30
+ level: Information
31
+ onActivityCompleted:
32
+ - task: "Utilities/Log@1"
33
+ name: LogActivityCompleted
34
+ inputs:
35
+ message: "Activity ExecuteWorkflow completed"
36
+ level: Information
37
+ onActivityFailed:
38
+ - task: "Utilities/Log@1"
39
+ name: LogActivityFailed
40
+ inputs:
41
+ message: "Activity ExecuteWorkflow failed: {{exception.message}}"
42
+ level: Error
43
+ steps:
44
+ - task: "Workflow/Execute@1"
45
+ name: RunTargetWorkflow
46
+ inputs:
47
+ workflowName: "Target Workflow Name"
48
+ async: true
49
+ workflowInputs: {}
50
+
51
+ - task: "Utilities/Log@1"
52
+ name: LogComplete
53
+ inputs:
54
+ message: "{{displayName}} completed"
55
+ level: Information
56
+
57
+ events:
58
+ onWorkflowStarted:
59
+ - task: "Utilities/Log@1"
60
+ name: LogWorkflowStarted
61
+ inputs:
62
+ message: "{{displayName}} workflow started"
63
+ level: Information
64
+ onWorkflowCompleted:
65
+ - task: "Utilities/Log@1"
66
+ name: LogWorkflowCompleted
67
+ inputs:
68
+ message: "{{displayName}} workflow completed successfully"
69
+ level: Information
70
+ onWorkflowFailed:
71
+ - task: "Utilities/Log@1"
72
+ name: LogWorkflowFailed
73
+ inputs:
74
+ message: "{{displayName}} workflow failed: {{exception.message}}"
75
+ level: Error
@@ -0,0 +1,125 @@
1
+ # {{displayName}} Workflow
2
+ # Generated by cxtms create workflow --template scheduled
3
+
4
+ workflow:
5
+ workflowId: "{{uuid}}"
6
+ name: "{{displayName}}"
7
+ description: "{{displayName}} scheduled workflow"
8
+ version: "1.0"
9
+ executionMode: Async
10
+ logLevel: Information
11
+ isActive: true
12
+ enableAudit: true
13
+ filePath: "{{fileName}}"
14
+ tags:
15
+ - "generated"
16
+ - "scheduled"
17
+
18
+ variables:
19
+ - name: pageSize
20
+ value: 50
21
+ - name: offset
22
+ value: 0
23
+ - name: hasMorePages
24
+ value: true
25
+
26
+ schedules:
27
+ - cron: "0 * * * *"
28
+ displayName: "{{displayName}} - Hourly"
29
+
30
+ activities:
31
+ - name: BatchProcess
32
+ events:
33
+ onActivityStarted:
34
+ - task: "Utilities/Log@1"
35
+ name: LogActivityStarted
36
+ inputs:
37
+ message: "Activity BatchProcess started"
38
+ level: Information
39
+ onActivityCompleted:
40
+ - task: "Utilities/Log@1"
41
+ name: LogActivityCompleted
42
+ inputs:
43
+ message: "Activity BatchProcess completed"
44
+ level: Information
45
+ onActivityFailed:
46
+ - task: "Utilities/Log@1"
47
+ name: LogActivityFailed
48
+ inputs:
49
+ message: "Activity BatchProcess failed: {{exception.message}}"
50
+ level: Error
51
+ steps:
52
+ - task: "while"
53
+ name: PageLoop
54
+ conditions:
55
+ - expression: "[hasMorePages] = true"
56
+ maxIterations: 100
57
+ steps:
58
+ - task: "Query/GraphQL"
59
+ name: GetPage
60
+ inputs:
61
+ query: |
62
+ query($organizationId: Int!, $first: Int!, $offset: Int!) {
63
+ orders(organizationId: $organizationId, first: $first, offset: $offset, filter: "status:Active") {
64
+ totalCount
65
+ items {
66
+ orderId
67
+ orderNumber
68
+ }
69
+ }
70
+ }
71
+ variables:
72
+ organizationId: "\{{organizationId}}"
73
+ first: "\{{pageSize}}"
74
+ offset: "\{{offset}}"
75
+ outputs:
76
+ - name: result
77
+ mapping: "orders?"
78
+
79
+ - task: "foreach"
80
+ name: ProcessItems
81
+ collection: "BatchProcess?.PageLoop?.GetPage?.result?.items?"
82
+ item: "currentOrder"
83
+ steps:
84
+ - task: "Utilities/Log@1"
85
+ name: LogItem
86
+ inputs:
87
+ message: "Processing order: \{{currentOrder.orderNumber}}"
88
+ level: Information
89
+
90
+ - task: "Utilities/SetVariable@1"
91
+ name: UpdatePagination
92
+ inputs:
93
+ variables:
94
+ - name: offset
95
+ value:
96
+ expression: "[offset] + [pageSize]"
97
+ - name: hasMorePages
98
+ value:
99
+ expression: "[offset] < [BatchProcess?.PageLoop?.GetPage?.result?.totalCount?]"
100
+
101
+ - task: "Utilities/Log@1"
102
+ name: LogComplete
103
+ inputs:
104
+ message: "{{displayName}} completed"
105
+ level: Information
106
+
107
+ events:
108
+ onWorkflowStarted:
109
+ - task: "Utilities/Log@1"
110
+ name: LogWorkflowStarted
111
+ inputs:
112
+ message: "{{displayName}} workflow started"
113
+ level: Information
114
+ onWorkflowCompleted:
115
+ - task: "Utilities/Log@1"
116
+ name: LogWorkflowCompleted
117
+ inputs:
118
+ message: "{{displayName}} workflow completed successfully"
119
+ level: Information
120
+ onWorkflowFailed:
121
+ - task: "Utilities/Log@1"
122
+ name: LogWorkflowFailed
123
+ inputs:
124
+ message: "{{displayName}} workflow failed: {{exception.message}}"
125
+ level: Error
@@ -0,0 +1,96 @@
1
+ # {{displayName}} Workflow
2
+ # Generated by cxtms create workflow --template utility
3
+
4
+ workflow:
5
+ workflowId: "{{uuid}}"
6
+ name: "{{displayName}}"
7
+ description: "{{displayName}} reusable utility workflow"
8
+ version: "1.0"
9
+ executionMode: Sync
10
+ logLevel: Information
11
+ isActive: true
12
+ filePath: "{{fileName}}"
13
+ tags:
14
+ - "generated"
15
+ - "utility"
16
+
17
+ inputs:
18
+ - name: orderId
19
+ type: number
20
+ props:
21
+ displayName: "Order ID"
22
+ description: "The ID of the order to process"
23
+ required: true
24
+
25
+ outputs:
26
+ - name: result
27
+ mapping: "Main.Process.result"
28
+
29
+ activities:
30
+ - name: Main
31
+ events:
32
+ onActivityStarted:
33
+ - task: "Utilities/Log@1"
34
+ name: LogActivityStarted
35
+ inputs:
36
+ message: "Activity Main started"
37
+ level: Information
38
+ onActivityCompleted:
39
+ - task: "Utilities/Log@1"
40
+ name: LogActivityCompleted
41
+ inputs:
42
+ message: "Activity Main completed"
43
+ level: Information
44
+ onActivityFailed:
45
+ - task: "Utilities/Log@1"
46
+ name: LogActivityFailed
47
+ inputs:
48
+ message: "Activity Main failed: {{exception.message}}"
49
+ level: Error
50
+ steps:
51
+ - task: "Query/GraphQL"
52
+ name: GetData
53
+ inputs:
54
+ query: |
55
+ query($organizationId: Int!, $orderId: Int!) {
56
+ order(organizationId: $organizationId, orderId: $orderId) {
57
+ orderId
58
+ orderNumber
59
+ status
60
+ }
61
+ }
62
+ variables:
63
+ organizationId: "\{{organizationId}}"
64
+ orderId: "\{{inputs.orderId}}"
65
+ outputs:
66
+ - name: order
67
+ mapping: "order?"
68
+
69
+ - task: "Utilities/SetVariable@1"
70
+ name: Process
71
+ inputs:
72
+ variables:
73
+ - name: result
74
+ value:
75
+ success: true
76
+ orderId: "\{{inputs.orderId}}"
77
+
78
+ events:
79
+ onWorkflowStarted:
80
+ - task: "Utilities/Log@1"
81
+ name: LogWorkflowStarted
82
+ inputs:
83
+ message: "{{displayName}} workflow started"
84
+ level: Information
85
+ onWorkflowCompleted:
86
+ - task: "Utilities/Log@1"
87
+ name: LogWorkflowCompleted
88
+ inputs:
89
+ message: "{{displayName}} workflow completed successfully"
90
+ level: Information
91
+ onWorkflowFailed:
92
+ - task: "Utilities/Log@1"
93
+ name: LogWorkflowFailed
94
+ inputs:
95
+ message: "{{displayName}} workflow failed: {{exception.message}}"
96
+ level: Error
@@ -0,0 +1,128 @@
1
+ # {{displayName}} Workflow
2
+ # Generated by cxtms create workflow --template webhook
3
+ #
4
+ # Endpoint: POST /api/v2/orgs/{organizationId}/webhooks/{workflowId}
5
+ # The endpoint is anonymous (no auth token required) and rate-limited (10/sec, 100/min per IP).
6
+ # The workflow receives two auto-injected inputs:
7
+ # - payload: parsed JSON body (or raw string if not JSON)
8
+ # - request: { headers, body, remoteIpAddress }
9
+ # The workflow controls the HTTP response via outputs:
10
+ # - response: the response body returned to the caller
11
+ # - statusCode: the HTTP status code (defaults to 200)
12
+
13
+ workflow:
14
+ workflowId: "{{uuid}}"
15
+ name: "{{displayName}}"
16
+ description: "{{displayName}} - Webhook endpoint"
17
+ version: "1.0"
18
+ workflowType: "Webhook"
19
+ executionMode: Sync
20
+ logLevel: Information
21
+ isActive: true
22
+ enableAudit: true
23
+ filePath: "{{fileName}}"
24
+ runAs: "system"
25
+ tags:
26
+ - "webhook"
27
+ additionalProperties:
28
+ cors:
29
+ allowedOrigins:
30
+ - "*"
31
+
32
+ inputs:
33
+ - name: payload
34
+ type: object
35
+ props:
36
+ displayName: "Payload"
37
+ description: "Parsed webhook request body (JSON object or raw string)"
38
+ - name: request
39
+ type: object
40
+ props:
41
+ displayName: "Request"
42
+ description: "HTTP request metadata: headers, body, remoteIpAddress"
43
+
44
+ outputs:
45
+ - name: response
46
+ mapping: "Main.SetResponse.response"
47
+ - name: statusCode
48
+ mapping: "Main.SetResponse.statusCode"
49
+
50
+ variables:
51
+ - name: webhookSecret
52
+ fromConfig:
53
+ configName: "apps.myApp.webhookSecret"
54
+
55
+ activities:
56
+ - name: Main
57
+ events:
58
+ onActivityStarted:
59
+ - task: "Utilities/Log@1"
60
+ name: LogActivityStarted
61
+ inputs:
62
+ message: "Activity Main started"
63
+ level: Information
64
+ onActivityCompleted:
65
+ - task: "Utilities/Log@1"
66
+ name: LogActivityCompleted
67
+ inputs:
68
+ message: "Activity Main completed"
69
+ level: Information
70
+ onActivityFailed:
71
+ - task: "Utilities/Log@1"
72
+ name: LogActivityFailed
73
+ inputs:
74
+ message: "Activity Main failed: {{exception.message}}"
75
+ level: Error
76
+ steps:
77
+ - task: "Utilities/Log@1"
78
+ name: LogRequest
79
+ inputs:
80
+ message: "{{displayName}} webhook received from \{{request.remoteIpAddress}}"
81
+ level: Information
82
+
83
+ # Validate webhook secret — customize with your verification method
84
+ # Common patterns:
85
+ # - Header secret: request.headers.x-webhook-secret vs config secret
86
+ # - HMAC signature: compute HMAC of request.body, compare to X-Hub-Signature header
87
+ - task: "Utilities/Error@1"
88
+ name: ValidateWebhook
89
+ conditions:
90
+ - expression: "isNullOrEmpty([webhookSecret?]) = false and [request?.headers?.x-webhook-secret?] != [webhookSecret?]"
91
+ inputs:
92
+ message: "Unauthorized webhook request"
93
+
94
+ # TODO: Add processing logic here
95
+ # Access payload fields: \{{payload.fieldName}}
96
+ # Access raw body: \{{request.body}}
97
+ # Access headers: \{{request.headers.headerName}}
98
+
99
+ - task: "Utilities/SetVariable@1"
100
+ name: SetResponse
101
+ inputs:
102
+ variables:
103
+ - name: response
104
+ value:
105
+ success: true
106
+ message: "Webhook processed successfully"
107
+ - name: statusCode
108
+ value: 200
109
+
110
+ events:
111
+ onWorkflowStarted:
112
+ - task: "Utilities/Log@1"
113
+ name: LogWorkflowStarted
114
+ inputs:
115
+ message: "{{displayName}} workflow started"
116
+ level: Information
117
+ onWorkflowCompleted:
118
+ - task: "Utilities/Log@1"
119
+ name: LogWorkflowCompleted
120
+ inputs:
121
+ message: "{{displayName}} workflow completed successfully"
122
+ level: Information
123
+ onWorkflowFailed:
124
+ - task: "Utilities/Log@1"
125
+ name: LogWorkflowFailed
126
+ inputs:
127
+ message: "{{displayName}} workflow failed: {{exception.message}}"
128
+ level: Error