@saltcorn/data 1.1.0-beta.9 → 1.1.0

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 (166) hide show
  1. package/dist/base-plugin/actions.d.ts +102 -9
  2. package/dist/base-plugin/actions.d.ts.map +1 -1
  3. package/dist/base-plugin/actions.js +183 -29
  4. package/dist/base-plugin/actions.js.map +1 -1
  5. package/dist/base-plugin/fieldviews.d.ts +0 -1
  6. package/dist/base-plugin/fieldviews.d.ts.map +1 -1
  7. package/dist/base-plugin/index.d.ts +169 -123
  8. package/dist/base-plugin/index.d.ts.map +1 -1
  9. package/dist/base-plugin/index.js +11 -1
  10. package/dist/base-plugin/index.js.map +1 -1
  11. package/dist/base-plugin/types.d.ts.map +1 -1
  12. package/dist/base-plugin/types.js +17 -9
  13. package/dist/base-plugin/types.js.map +1 -1
  14. package/dist/base-plugin/viewtemplates/edit.d.ts +7 -13
  15. package/dist/base-plugin/viewtemplates/edit.d.ts.map +1 -1
  16. package/dist/base-plugin/viewtemplates/edit.js +90 -12
  17. package/dist/base-plugin/viewtemplates/edit.js.map +1 -1
  18. package/dist/base-plugin/viewtemplates/feed.d.ts +0 -8
  19. package/dist/base-plugin/viewtemplates/feed.d.ts.map +1 -1
  20. package/dist/base-plugin/viewtemplates/filter.d.ts +0 -8
  21. package/dist/base-plugin/viewtemplates/filter.d.ts.map +1 -1
  22. package/dist/base-plugin/viewtemplates/list.d.ts +0 -10
  23. package/dist/base-plugin/viewtemplates/list.d.ts.map +1 -1
  24. package/dist/base-plugin/viewtemplates/room.d.ts +0 -2
  25. package/dist/base-plugin/viewtemplates/room.d.ts.map +1 -1
  26. package/dist/base-plugin/viewtemplates/room.js +7 -2
  27. package/dist/base-plugin/viewtemplates/room.js.map +1 -1
  28. package/dist/base-plugin/viewtemplates/show.d.ts +0 -9
  29. package/dist/base-plugin/viewtemplates/show.d.ts.map +1 -1
  30. package/dist/base-plugin/viewtemplates/show.js +2 -2
  31. package/dist/base-plugin/viewtemplates/show.js.map +1 -1
  32. package/dist/base-plugin/viewtemplates/viewable_fields.d.ts.map +1 -1
  33. package/dist/base-plugin/viewtemplates/viewable_fields.js +8 -5
  34. package/dist/base-plugin/viewtemplates/viewable_fields.js.map +1 -1
  35. package/dist/base-plugin/viewtemplates/workflow-room.d.ts +59 -0
  36. package/dist/base-plugin/viewtemplates/workflow-room.d.ts.map +1 -0
  37. package/dist/base-plugin/viewtemplates/workflow-room.js +250 -0
  38. package/dist/base-plugin/viewtemplates/workflow-room.js.map +1 -0
  39. package/dist/db/index.js +1 -1
  40. package/dist/db/index.js.map +1 -1
  41. package/dist/db/state.d.ts +16 -0
  42. package/dist/db/state.d.ts.map +1 -1
  43. package/dist/db/state.js +55 -3
  44. package/dist/db/state.js.map +1 -1
  45. package/dist/diagram/cy_raster.d.ts +1 -1
  46. package/dist/diagram/cy_raster.d.ts.map +1 -1
  47. package/dist/diagram/node_extract_utils.d.ts +2 -2
  48. package/dist/diagram/node_extract_utils.d.ts.map +1 -1
  49. package/dist/diagram/nodes/node.d.ts +1 -1
  50. package/dist/diagram/nodes/node.d.ts.map +1 -1
  51. package/dist/migrations/202412051957.d.ts +3 -0
  52. package/dist/migrations/202412051957.d.ts.map +1 -0
  53. package/dist/migrations/202412051957.js +48 -0
  54. package/dist/migrations/202412051957.js.map +1 -0
  55. package/dist/migrations/202412111526.d.ts +3 -0
  56. package/dist/migrations/202412111526.d.ts.map +1 -0
  57. package/dist/migrations/202412111526.js +38 -0
  58. package/dist/migrations/202412111526.js.map +1 -0
  59. package/dist/models/config.d.ts +2 -4
  60. package/dist/models/config.d.ts.map +1 -1
  61. package/dist/models/config.js +44 -34
  62. package/dist/models/config.js.map +1 -1
  63. package/dist/models/crash.d.ts +1 -1
  64. package/dist/models/crash.d.ts.map +1 -1
  65. package/dist/models/email.d.ts +1 -1
  66. package/dist/models/eventlog.d.ts +1 -1
  67. package/dist/models/eventlog.d.ts.map +1 -1
  68. package/dist/models/expression.d.ts.map +1 -1
  69. package/dist/models/expression.js +16 -2
  70. package/dist/models/expression.js.map +1 -1
  71. package/dist/models/field.d.ts.map +1 -1
  72. package/dist/models/field.js +22 -4
  73. package/dist/models/field.js.map +1 -1
  74. package/dist/models/fieldrepeat.d.ts +1 -1
  75. package/dist/models/fieldrepeat.d.ts.map +1 -1
  76. package/dist/models/file.d.ts +7 -3
  77. package/dist/models/file.d.ts.map +1 -1
  78. package/dist/models/file.js +3 -3
  79. package/dist/models/file.js.map +1 -1
  80. package/dist/models/form.d.ts +1 -1
  81. package/dist/models/form.d.ts.map +1 -1
  82. package/dist/models/form.js +5 -1
  83. package/dist/models/form.js.map +1 -1
  84. package/dist/models/index.d.ts +2 -2
  85. package/dist/models/index.d.ts.map +1 -1
  86. package/dist/models/index.js +1 -1
  87. package/dist/models/index.js.map +1 -1
  88. package/dist/models/layout.d.ts +1 -1
  89. package/dist/models/layout.d.ts.map +1 -1
  90. package/dist/models/model_instance.d.ts +1 -0
  91. package/dist/models/model_instance.d.ts.map +1 -1
  92. package/dist/models/notification.d.ts +1 -1
  93. package/dist/models/notification.d.ts.map +1 -1
  94. package/dist/models/page.d.ts.map +1 -1
  95. package/dist/models/page.js +3 -1
  96. package/dist/models/page.js.map +1 -1
  97. package/dist/models/page_group.d.ts +1 -1
  98. package/dist/models/page_group.d.ts.map +1 -1
  99. package/dist/models/page_group.js +7 -1
  100. package/dist/models/page_group.js.map +1 -1
  101. package/dist/models/page_group_member.d.ts +1 -1
  102. package/dist/models/page_group_member.d.ts.map +1 -1
  103. package/dist/models/plugin.d.ts.map +1 -1
  104. package/dist/models/plugin.js +5 -3
  105. package/dist/models/plugin.js.map +1 -1
  106. package/dist/models/scheduler.d.ts.map +1 -1
  107. package/dist/models/scheduler.js +4 -0
  108. package/dist/models/scheduler.js.map +1 -1
  109. package/dist/models/table.d.ts +4 -3
  110. package/dist/models/table.d.ts.map +1 -1
  111. package/dist/models/table.js +34 -3
  112. package/dist/models/table.js.map +1 -1
  113. package/dist/models/table_constraints.d.ts +2 -2
  114. package/dist/models/table_constraints.d.ts.map +1 -1
  115. package/dist/models/tag.d.ts +1 -1
  116. package/dist/models/tag.d.ts.map +1 -1
  117. package/dist/models/tag_entry.d.ts +1 -1
  118. package/dist/models/tag_entry.d.ts.map +1 -1
  119. package/dist/models/trigger.d.ts +5 -1
  120. package/dist/models/trigger.d.ts.map +1 -1
  121. package/dist/models/trigger.js +38 -7
  122. package/dist/models/trigger.js.map +1 -1
  123. package/dist/models/user.d.ts +1 -1
  124. package/dist/models/user.d.ts.map +1 -1
  125. package/dist/models/view.d.ts +1 -1
  126. package/dist/models/view.d.ts.map +1 -1
  127. package/dist/models/view.js +3 -3
  128. package/dist/models/workflow.d.ts +1 -1
  129. package/dist/models/workflow.d.ts.map +1 -1
  130. package/dist/models/workflow_run.d.ts +78 -0
  131. package/dist/models/workflow_run.d.ts.map +1 -0
  132. package/dist/models/workflow_run.js +433 -0
  133. package/dist/models/workflow_run.js.map +1 -0
  134. package/dist/models/workflow_step.d.ts +58 -0
  135. package/dist/models/workflow_step.d.ts.map +1 -0
  136. package/dist/models/workflow_step.js +144 -0
  137. package/dist/models/workflow_step.js.map +1 -0
  138. package/dist/models/workflow_trace.d.ts +57 -0
  139. package/dist/models/workflow_trace.d.ts.map +1 -0
  140. package/dist/models/workflow_trace.js +90 -0
  141. package/dist/models/workflow_trace.js.map +1 -0
  142. package/dist/plugin-helper.d.ts +1 -0
  143. package/dist/plugin-helper.d.ts.map +1 -1
  144. package/dist/plugin-helper.js +8 -9
  145. package/dist/plugin-helper.js.map +1 -1
  146. package/dist/tests/actions.test.js.map +1 -1
  147. package/dist/tests/auxtest.test.js +6 -3
  148. package/dist/tests/auxtest.test.js.map +1 -1
  149. package/dist/tests/config.test.js +2 -2
  150. package/dist/tests/config.test.js.map +1 -1
  151. package/dist/tests/field.test.js +47 -0
  152. package/dist/tests/field.test.js.map +1 -1
  153. package/dist/tests/mocks.d.ts +1 -1
  154. package/dist/tests/mocks.js +1 -1
  155. package/dist/tests/mocks.js.map +1 -1
  156. package/dist/tests/workflow.test.js +9 -0
  157. package/dist/tests/workflow.test.js.map +1 -1
  158. package/dist/tests/workflow_run.test.d.ts +2 -0
  159. package/dist/tests/workflow_run.test.d.ts.map +1 -0
  160. package/dist/tests/workflow_run.test.js +109 -0
  161. package/dist/tests/workflow_run.test.js.map +1 -0
  162. package/dist/utils.d.ts +9 -1
  163. package/dist/utils.d.ts.map +1 -1
  164. package/dist/utils.js +32 -6
  165. package/dist/utils.js.map +1 -1
  166. package/package.json +11 -9
@@ -0,0 +1,433 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ /**
29
+ * Workflow Run Database Access Layer
30
+ * @category saltcorn-data
31
+ * @module models/workflow_run
32
+ * @subcategory models
33
+ */
34
+ const db_1 = __importDefault(require("../db"));
35
+ const workflow_step_1 = __importDefault(require("./workflow_step"));
36
+ const workflow_trace_1 = __importDefault(require("./workflow_trace"));
37
+ const expression_1 = __importDefault(require("./expression"));
38
+ const notification_1 = __importDefault(require("./notification"));
39
+ const utils_1 = __importDefault(require("../utils"));
40
+ const moment_1 = __importDefault(require("moment"));
41
+ const { ensure_final_slash, interpolate } = utils_1.default;
42
+ const { eval_expression } = expression_1.default;
43
+ const { getState } = require("../db/state");
44
+ const allReturnDirectives = [
45
+ "popup",
46
+ "goto",
47
+ "eval_js",
48
+ "download",
49
+ "set_fields",
50
+ "notify",
51
+ "notify_success",
52
+ "error",
53
+ ];
54
+ /**
55
+ * WorkflowRun Class
56
+ * @category saltcorn-data
57
+ */
58
+ class WorkflowRun {
59
+ /**
60
+ * WorkflowRun constructor
61
+ * @param {object} o
62
+ */
63
+ constructor(o) {
64
+ this.id = o.id;
65
+ this.trigger_id = o.trigger_id;
66
+ this.context =
67
+ typeof o.context === "string" ? JSON.parse(o.context) : o.context || {};
68
+ this.wait_info =
69
+ typeof o.wait_info === "string" ? JSON.parse(o.wait_info) : o.wait_info;
70
+ this.started_at = o.started_at || new Date();
71
+ this.status_updated_at = o.status_updated_at || new Date();
72
+ this.started_by = o.started_by;
73
+ this.session_id = o.session_id;
74
+ this.error = o.error;
75
+ this.status = o.status || "Pending";
76
+ this.current_step = o.current_step;
77
+ }
78
+ /**
79
+ * @param {object} lib_in
80
+ */
81
+ static async create(run_in) {
82
+ const run = new WorkflowRun(run_in);
83
+ const id = await db_1.default.insert("_sc_workflow_runs", run.toJson);
84
+ run.id = id;
85
+ return run;
86
+ }
87
+ /**
88
+ * @type {...*}
89
+ */
90
+ get toJson() {
91
+ const { id, steps, step_start, ...rest } = this;
92
+ return rest;
93
+ }
94
+ /**
95
+ * @param {*} where
96
+ * @param {*} selectopts
97
+ * @returns {WorkflowRun[]}
98
+ */
99
+ static async find(where, selectopts) {
100
+ const us = await db_1.default.select("_sc_workflow_runs", where, selectopts);
101
+ return us.map((u) => new WorkflowRun(u));
102
+ }
103
+ /**
104
+ * @param {*} where
105
+ * @returns {WorkflowRun}
106
+ */
107
+ static async findOne(where, selectopts) {
108
+ const u = await db_1.default.selectMaybeOne("_sc_workflow_runs", where, selectopts);
109
+ return u ? new WorkflowRun(u) : u;
110
+ }
111
+ /**
112
+ * @param {*} what
113
+ * @returns {object}
114
+ */
115
+ /**
116
+ * @returns {Promise<void>}
117
+ */
118
+ async delete() {
119
+ const schema = db_1.default.getTenantSchemaPrefix();
120
+ await db_1.default.query(`delete FROM ${schema}_sc_workflow_runs WHERE id = $1`, [
121
+ this.id,
122
+ ]);
123
+ }
124
+ /**
125
+ * @param {*} row
126
+ * @returns {Promise<void>}
127
+ */
128
+ async update(row) {
129
+ const useRow = row.status !== this.status
130
+ ? { status_updated_at: new Date(), ...row }
131
+ : row;
132
+ await db_1.default.update("_sc_workflow_runs", useRow, this.id);
133
+ Object.assign(this, useRow);
134
+ }
135
+ async provide_form_input(form_values) {
136
+ //write values
137
+ Object.assign(this.context, form_values);
138
+ this.wait_info.form = false;
139
+ await this.update({ wait_info: this.wait_info, context: this.context });
140
+ }
141
+ get_next_step(step, user) {
142
+ let nextStep;
143
+ if (!step?.next_step) {
144
+ return null;
145
+ }
146
+ else if ((nextStep = this.steps.find((s) => s.name === step.next_step))) {
147
+ return nextStep;
148
+ }
149
+ else {
150
+ // eval next_step
151
+ const next_step_ctx = { ...this.context };
152
+ this.steps.forEach((s) => {
153
+ next_step_ctx[s.name] = s.name;
154
+ });
155
+ const next_step_name = eval_expression(step.next_step, next_step_ctx, user, `next_step in step ${step.name}`);
156
+ return this.steps.find((s) => s.name === next_step_name) || null;
157
+ }
158
+ }
159
+ user_allowed_to_fill_form(user) {
160
+ if (this.wait_info.user_id) {
161
+ if (this.wait_info.user_id != user?.id)
162
+ return false;
163
+ }
164
+ return true;
165
+ }
166
+ //get worklows that can be resumed by scheduler
167
+ static async getResumableWorkflows() {
168
+ const state = getState();
169
+ if (!state.waitingWorkflows)
170
+ return [];
171
+ const waiting_runs = await WorkflowRun.find({ status: "Waiting" });
172
+ const until_runs = waiting_runs.filter((r) => !r.wait_info.form);
173
+ if (!until_runs.length) {
174
+ state.waitingWorkflows = false;
175
+ return [];
176
+ }
177
+ const now = new Date();
178
+ return until_runs.filter((r) => !r.wait_info.until_time || new Date(r.wait_info.until_time) < now);
179
+ }
180
+ //call from scheduler
181
+ static async runResumableWorkflows() {
182
+ const runs = await this.getResumableWorkflows();
183
+ for (const run of runs) {
184
+ await run.run({});
185
+ }
186
+ }
187
+ async createTrace(step_name, user) {
188
+ await workflow_trace_1.default.create({
189
+ run_id: this.id,
190
+ context: this.context,
191
+ step_name_run: step_name,
192
+ wait_info: this.wait_info,
193
+ user_id: user?.id,
194
+ error: this.error,
195
+ status: this.status,
196
+ elapsed: this.step_start
197
+ ? (new Date().getTime() - this.step_start?.getTime()) / 1000
198
+ : 0,
199
+ step_started_at: this.step_start || new Date(),
200
+ });
201
+ }
202
+ async userFormFields(step0) {
203
+ const step = step0 ||
204
+ (await workflow_step_1.default.findOne({
205
+ trigger_id: this.trigger_id,
206
+ name: this.current_step,
207
+ }));
208
+ const qTypeToField = (q) => {
209
+ switch (q.qtype) {
210
+ case "Yes/No":
211
+ return {
212
+ type: "String",
213
+ attributes: { options: "Yes,No" },
214
+ fieldview: "radio_group",
215
+ };
216
+ case "Checkbox":
217
+ return { type: "Bool" };
218
+ case "Free text":
219
+ return { type: "String" };
220
+ case "Multiple choice":
221
+ return {
222
+ type: "String",
223
+ attributes: { options: q.options },
224
+ fieldview: "radio_group",
225
+ };
226
+ case "Integer":
227
+ return { type: "Integer" };
228
+ case "Float":
229
+ return { type: "Float" };
230
+ default:
231
+ return {};
232
+ }
233
+ };
234
+ return (step.configuration.user_form_questions || []).map((q) => ({
235
+ label: q.label,
236
+ name: q.var_name,
237
+ ...qTypeToField(q),
238
+ }));
239
+ }
240
+ async run({ user, interactive, api_call, trace, }) {
241
+ if (this.status === "Error" || this.status === "Finished")
242
+ return;
243
+ //get steps
244
+ const steps = await workflow_step_1.default.find({ trigger_id: this.trigger_id });
245
+ this.steps = steps;
246
+ const state = getState();
247
+ state.log(6, `Running workflow id=${this.id}`);
248
+ if (this.status === "Waiting") {
249
+ //are wait conditions fulfilled?
250
+ //TODO
251
+ let fulfilled = true;
252
+ Object.entries(this.wait_info || {}).forEach(([k, v]) => {
253
+ switch (k) {
254
+ case "until_time":
255
+ if (new Date(v) > new Date())
256
+ fulfilled = false;
257
+ break;
258
+ case "form":
259
+ if (v)
260
+ fulfilled = false;
261
+ default:
262
+ break;
263
+ }
264
+ });
265
+ if (!fulfilled)
266
+ return;
267
+ else {
268
+ const step = steps.find((step) => step.name === this.current_step);
269
+ const nextStep = this.get_next_step(step, user);
270
+ await this.update({
271
+ wait_info: {},
272
+ status: nextStep ? "Running" : "Finished",
273
+ current_step: nextStep?.name,
274
+ });
275
+ if (!nextStep)
276
+ return;
277
+ }
278
+ }
279
+ //find current step
280
+ let step;
281
+ if (this.current_step)
282
+ step = steps.find((step) => step.name === this.current_step);
283
+ else
284
+ step = steps.find((step) => step.initial_step);
285
+ if (step && this.status !== "Running")
286
+ await this.update({ status: "Running" });
287
+ //run in loop
288
+ while (step) {
289
+ if (step.name !== this.current_step)
290
+ await this.update({ current_step: step.name });
291
+ state.log(6, `Workflow run ${this.id} Running step ${step.name}`);
292
+ this.step_start = new Date();
293
+ try {
294
+ if (step.action_name === "UserForm") {
295
+ let user_id;
296
+ if (step.configuration.user_id_expression) {
297
+ user_id = eval_expression(step.configuration.user_id_expression, this.context, user, `User id expression in step ${step.name}`);
298
+ }
299
+ else
300
+ user_id = user?.id;
301
+ if (user_id) {
302
+ //TODO send notification
303
+ const base_url = state.getConfig("base_url", "");
304
+ await notification_1.default.create({
305
+ title: "Your input is required",
306
+ link: `${ensure_final_slash(base_url)}actions/fill-workflow-form/${this.id}`,
307
+ user_id,
308
+ });
309
+ }
310
+ await this.update({
311
+ status: "Waiting",
312
+ wait_info: { form: true, user_id: user_id },
313
+ });
314
+ if (trace)
315
+ this.createTrace(step.name, user);
316
+ if (interactive &&
317
+ (!step.configuration.user_id_expression || user_id === user?.id)) {
318
+ return { popup: `/actions/fill-workflow-form/${this.id}?resume=1` };
319
+ }
320
+ step = null;
321
+ break;
322
+ }
323
+ if (step.action_name === "Output") {
324
+ const output = interpolate(step.configuration.output_text, this.context, user);
325
+ await this.update({
326
+ status: "Waiting",
327
+ wait_info: { output, user_id: user?.id },
328
+ });
329
+ if (trace)
330
+ this.createTrace(step.name, user);
331
+ if (interactive) {
332
+ return { popup: `/actions/fill-workflow-form/${this.id}?resume=1` };
333
+ }
334
+ step = null;
335
+ break;
336
+ }
337
+ if (step.action_name === "WaitNextTick") {
338
+ await this.update({
339
+ status: "Waiting",
340
+ wait_info: {},
341
+ });
342
+ state.waitingWorkflows = true;
343
+ if (trace)
344
+ this.createTrace(step.name, user);
345
+ break;
346
+ }
347
+ if (step.action_name === "WaitUntil") {
348
+ const resume_at = eval_expression(step.configuration.resume_at, { moment: moment_1.default, ...this.context }, user, `Resume at expression in step ${step.name}`);
349
+ state.waitingWorkflows = true;
350
+ await this.update({
351
+ status: "Waiting",
352
+ wait_info: { until_time: new Date(resume_at).toISOString() },
353
+ });
354
+ if (trace)
355
+ this.createTrace(step.name, user);
356
+ break;
357
+ }
358
+ const result = await step.run(this.context, user);
359
+ const nextUpdate = {};
360
+ if (typeof result === "object" && result !== null) {
361
+ Object.assign(this.context, result);
362
+ nextUpdate.context = this.context;
363
+ }
364
+ if (trace)
365
+ this.createTrace(step.name, user);
366
+ //find next step
367
+ const nextStep = this.get_next_step(step, user);
368
+ if (!nextStep) {
369
+ step = null;
370
+ nextUpdate.status = "Finished";
371
+ }
372
+ else {
373
+ step = nextStep;
374
+ nextUpdate.current_step = step.name;
375
+ }
376
+ await this.update(nextUpdate);
377
+ if (interactive &&
378
+ result &&
379
+ typeof result === "object" &&
380
+ allReturnDirectives.some((k) => typeof result[k] !== "undefined")) {
381
+ const ret = await this.popReturnDirectives();
382
+ ret.resume_workflow = this.id;
383
+ return ret;
384
+ }
385
+ }
386
+ catch (e) {
387
+ console.error("Workflow error", e);
388
+ await this.update({ status: "Error", error: e.message });
389
+ const Trigger = (await Promise.resolve().then(() => __importStar(require("./trigger")))).default;
390
+ Trigger.emitEvent("Error", null, user, {
391
+ workflow_run: this.id,
392
+ message: e.message,
393
+ stack: e.stack,
394
+ step: step?.name,
395
+ run_page: `/actions/run/${this.id}`,
396
+ });
397
+ break;
398
+ }
399
+ }
400
+ return this.context;
401
+ }
402
+ async popReturnDirectives() {
403
+ const retVals = Object.create(null);
404
+ allReturnDirectives.forEach((k) => {
405
+ if (typeof this.context[k] !== "undefined") {
406
+ retVals[k] = this.context[k];
407
+ delete this.context[k];
408
+ }
409
+ });
410
+ if (Object.keys(retVals).length)
411
+ await this.update({ context: this.context });
412
+ return retVals;
413
+ }
414
+ static async count(where) {
415
+ return await db_1.default.count("_sc_workflow_runs", where);
416
+ }
417
+ static async prune() {
418
+ for (const status of ["Error", "Finished", "Running", "Waiting"]) {
419
+ let k = `delete_${status.toLowerCase()}_workflows_days`;
420
+ const days = getState().getConfig(k, false);
421
+ if (!days)
422
+ continue;
423
+ const cutoff = new Date();
424
+ cutoff.setDate(cutoff.getDate() - days);
425
+ await db_1.default.deleteWhere("_sc_workflow_runs", {
426
+ status,
427
+ status_updated_at: { lt: cutoff },
428
+ });
429
+ }
430
+ }
431
+ }
432
+ module.exports = WorkflowRun;
433
+ //# sourceMappingURL=workflow_run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow_run.js","sourceRoot":"","sources":["../../models/workflow_run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { Where, SelectOptions, Row } from "@saltcorn/db-common/internal";
2
+ import type { WorkflowStepCfg } from "@saltcorn/types/model-abstracts/abstract_workflow_step";
3
+ import User from "./user";
4
+ /**
5
+ * WorkflowStep Class
6
+ * @category saltcorn-data
7
+ */
8
+ declare class WorkflowStep {
9
+ id?: number;
10
+ name: string;
11
+ trigger_id: number;
12
+ next_step?: string;
13
+ only_if?: string;
14
+ action_name: string;
15
+ initial_step: boolean;
16
+ configuration: any;
17
+ /**
18
+ * WorkflowStep constructor
19
+ * @param {object} o
20
+ */
21
+ constructor(o: WorkflowStepCfg | WorkflowStep);
22
+ /**
23
+ * @param {object} lib_in
24
+ */
25
+ static create(step_in: WorkflowStepCfg): Promise<void>;
26
+ /**
27
+ * @type {...*}
28
+ */
29
+ get toJson(): any;
30
+ /**
31
+ * @param {*} where
32
+ * @param {*} selectopts
33
+ * @returns {WorkflowStep[]}
34
+ */
35
+ static find(where: Where, selectopts?: SelectOptions): Promise<WorkflowStep[]>;
36
+ /**
37
+ * @param {*} where
38
+ * @returns {WorkflowStep}
39
+ */
40
+ static findOne(where: Where): Promise<WorkflowStep>;
41
+ /**
42
+ * @param {*} what
43
+ * @returns {object}
44
+ */
45
+ /**
46
+ * @returns {Promise<void>}
47
+ */
48
+ delete(): Promise<void>;
49
+ static deleteForTrigger(trigger_id: number): Promise<void>;
50
+ /**
51
+ * @param {*} row
52
+ * @returns {Promise<void>}
53
+ */
54
+ update(row: Row): Promise<void>;
55
+ run(context: any, user: User): Promise<any>;
56
+ }
57
+ export = WorkflowStep;
58
+ //# sourceMappingURL=workflow_step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow_step.d.ts","sourceRoot":"","sources":["../../models/workflow_step.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wDAAwD,CAAC;AAC9F,OAAO,IAAI,MAAM,QAAQ,CAAC;AAO1B;;;GAGG;AACH,cAAM,YAAY;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,GAAG,CAAC;IAEnB;;;OAGG;gBACS,CAAC,EAAE,eAAe,GAAG,YAAY;IAc7C;;OAEG;WACU,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5D;;OAEG;IACH,IAAI,MAAM,IAAI,GAAG,CAGhB;IAED;;;;OAIG;WACU,IAAI,CACf,KAAK,EAAE,KAAK,EACZ,UAAU,CAAC,EAAE,aAAa,GACzB,OAAO,CAAC,YAAY,EAAE,CAAC;IAK1B;;;OAGG;WACU,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;IAKzD;;;OAGG;IACH;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;WAOhB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhE;;;OAGG;IACG,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/B,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI;CAmDnC;AAED,SAAS,YAAY,CAAC"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ /**
6
+ * Workflow step Database Access Layer
7
+ * @category saltcorn-data
8
+ * @module models/workflow_step
9
+ * @subcategory models
10
+ */
11
+ const db_1 = __importDefault(require("../db"));
12
+ const trigger_1 = __importDefault(require("./trigger"));
13
+ const table_1 = __importDefault(require("./table"));
14
+ const expression_1 = __importDefault(require("./expression"));
15
+ const { eval_expression } = expression_1.default;
16
+ const { getState } = require("../db/state");
17
+ /**
18
+ * WorkflowStep Class
19
+ * @category saltcorn-data
20
+ */
21
+ class WorkflowStep {
22
+ /**
23
+ * WorkflowStep constructor
24
+ * @param {object} o
25
+ */
26
+ constructor(o) {
27
+ this.id = o.id;
28
+ this.name = o.name;
29
+ this.trigger_id = o.trigger_id;
30
+ this.next_step = o.next_step;
31
+ this.only_if = o.only_if;
32
+ this.action_name = o.action_name;
33
+ this.initial_step = !!o.initial_step;
34
+ this.configuration =
35
+ typeof o.configuration === "string"
36
+ ? JSON.parse(o.configuration)
37
+ : o.configuration;
38
+ }
39
+ /**
40
+ * @param {object} lib_in
41
+ */
42
+ static async create(step_in) {
43
+ const step = new WorkflowStep(step_in);
44
+ if (step.initial_step) {
45
+ await db_1.default.updateWhere("_sc_workflow_steps", { initial_step: false }, {
46
+ trigger_id: step.trigger_id,
47
+ });
48
+ }
49
+ return await db_1.default.insert("_sc_workflow_steps", step.toJson);
50
+ }
51
+ /**
52
+ * @type {...*}
53
+ */
54
+ get toJson() {
55
+ const { id, ...rest } = this;
56
+ return rest;
57
+ }
58
+ /**
59
+ * @param {*} where
60
+ * @param {*} selectopts
61
+ * @returns {WorkflowStep[]}
62
+ */
63
+ static async find(where, selectopts) {
64
+ const us = await db_1.default.select("_sc_workflow_steps", where, selectopts);
65
+ return us.map((u) => new WorkflowStep(u));
66
+ }
67
+ /**
68
+ * @param {*} where
69
+ * @returns {WorkflowStep}
70
+ */
71
+ static async findOne(where) {
72
+ const u = await db_1.default.selectMaybeOne("_sc_workflow_steps", where);
73
+ return u ? new WorkflowStep(u) : u;
74
+ }
75
+ /**
76
+ * @param {*} what
77
+ * @returns {object}
78
+ */
79
+ /**
80
+ * @returns {Promise<void>}
81
+ */
82
+ async delete() {
83
+ const schema = db_1.default.getTenantSchemaPrefix();
84
+ await db_1.default.query(`delete FROM ${schema}_sc_workflow_steps WHERE id = $1`, [
85
+ this.id,
86
+ ]);
87
+ }
88
+ static async deleteForTrigger(trigger_id) {
89
+ const schema = db_1.default.getTenantSchemaPrefix();
90
+ await db_1.default.query(`delete FROM ${schema}_sc_workflow_steps WHERE trigger_id = $1`, [trigger_id]);
91
+ }
92
+ /**
93
+ * @param {*} row
94
+ * @returns {Promise<void>}
95
+ */
96
+ async update(row) {
97
+ if (row.initial_step) {
98
+ await db_1.default.updateWhere("_sc_workflow_steps", { initial_step: false }, {
99
+ trigger_id: this.trigger_id,
100
+ not: { id: this.id },
101
+ });
102
+ }
103
+ await db_1.default.update("_sc_workflow_steps", row, this.id);
104
+ }
105
+ async run(context, user) {
106
+ if (this.only_if) {
107
+ const proceed = eval_expression(this.only_if, context, user, `Only if expression in ${this.name} step`);
108
+ if (!proceed)
109
+ return;
110
+ }
111
+ if (this.action_name === "TableQuery") {
112
+ const table = table_1.default.findOne({ name: this.configuration.query_table });
113
+ if (!table)
114
+ throw new Error(`Table ${this.configuration.query_table} not found`);
115
+ const query = eval_expression(this.configuration.query_object, context, user, `Query expression in ${this.name} step`);
116
+ const rows = await table.getRows(query);
117
+ return { [this.configuration.query_variable]: rows };
118
+ }
119
+ if (this.action_name === "SetContext") {
120
+ return eval_expression(this.configuration.ctx_values, context, user, `Context values expression in ${this.name} step`);
121
+ }
122
+ let state_action = getState().actions[this.action_name];
123
+ if (state_action) {
124
+ return await state_action.run({
125
+ configuration: this.configuration,
126
+ user,
127
+ row: context,
128
+ mode: "workflow",
129
+ });
130
+ }
131
+ else {
132
+ const trigger = await trigger_1.default.findOne({ name: this.action_name });
133
+ state_action = getState().actions[trigger.action];
134
+ return await state_action.run({
135
+ configuration: trigger.configuration,
136
+ user,
137
+ row: context,
138
+ mode: "workflow",
139
+ });
140
+ }
141
+ }
142
+ }
143
+ module.exports = WorkflowStep;
144
+ //# sourceMappingURL=workflow_step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow_step.js","sourceRoot":"","sources":["../../models/workflow_step.ts"],"names":[],"mappings":"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"}