@budibase/server 1.0.151 → 1.0.154

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 (172) hide show
  1. package/builder/assets/{index.e05b34c9.js → index.5d695b0f.js} +1 -1
  2. package/builder/index.html +1 -1
  3. package/coverage/clover.xml +144 -123
  4. package/coverage/coverage-final.json +3 -3
  5. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/index.html +1 -1
  15. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  44. package/coverage/lcov-report/api/index.html +1 -1
  45. package/coverage/lcov-report/api/index.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/index.html +1 -1
  57. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  71. package/coverage/lcov-report/api/routes/utils/validators.js.html +2 -5
  72. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  74. package/coverage/lcov-report/automations/actions.js.html +1 -1
  75. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  76. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  77. package/coverage/lcov-report/automations/index.html +1 -1
  78. package/coverage/lcov-report/automations/index.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/index.html +1 -1
  86. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  96. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  105. package/coverage/lcov-report/constants/index.html +5 -5
  106. package/coverage/lcov-report/constants/index.js.html +19 -4
  107. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  108. package/coverage/lcov-report/constants/screens.js.html +1 -1
  109. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  110. package/coverage/lcov-report/db/index.html +1 -1
  111. package/coverage/lcov-report/db/index.js.html +1 -1
  112. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  113. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  114. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  116. package/coverage/lcov-report/db/newid.js.html +1 -1
  117. package/coverage/lcov-report/db/utils.js.html +1 -1
  118. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  119. package/coverage/lcov-report/events/index.html +1 -1
  120. package/coverage/lcov-report/events/index.js.html +1 -1
  121. package/coverage/lcov-report/events/utils.js.html +1 -1
  122. package/coverage/lcov-report/index.html +21 -21
  123. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  124. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  125. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  126. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  127. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  128. package/coverage/lcov-report/middleware/index.html +1 -1
  129. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  130. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  131. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  132. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  133. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  134. package/coverage/lcov-report/threads/automation.js.html +117 -63
  135. package/coverage/lcov-report/threads/index.html +19 -19
  136. package/coverage/lcov-report/threads/query.js.html +1 -1
  137. package/coverage/lcov-report/threads/utils.js.html +1 -1
  138. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  139. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  140. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  141. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  142. package/coverage/lcov-report/utilities/global.js.html +1 -1
  143. package/coverage/lcov-report/utilities/index.html +1 -1
  144. package/coverage/lcov-report/utilities/index.js.html +1 -1
  145. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  146. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  147. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  148. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  150. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  151. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  152. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  153. package/coverage/lcov-report/utilities/security.js.html +1 -1
  154. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  156. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  157. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  158. package/coverage/lcov-report/utilities/users.js.html +1 -1
  159. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  160. package/coverage/lcov.info +242 -207
  161. package/dist/api/controllers/row/index.js +12 -17
  162. package/dist/api/routes/utils/validators.js +0 -1
  163. package/dist/constants/index.js +4 -0
  164. package/dist/package.json +5 -5
  165. package/dist/threads/automation.js +46 -21
  166. package/dist/tsconfig.build.tsbuildinfo +1 -1
  167. package/package.json +6 -6
  168. package/src/api/controllers/row/index.ts +19 -15
  169. package/src/api/routes/tests/row.spec.js +87 -5
  170. package/src/api/routes/utils/validators.js +0 -1
  171. package/src/constants/index.js +5 -0
  172. package/src/threads/automation.js +49 -31
package/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.0.150",
4
+ "version": "1.0.153",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -69,10 +69,10 @@
69
69
  "license": "GPL-3.0",
70
70
  "dependencies": {
71
71
  "@apidevtools/swagger-parser": "^10.0.3",
72
- "@budibase/backend-core": "^1.0.150",
73
- "@budibase/client": "^1.0.150",
74
- "@budibase/pro": "1.0.150",
75
- "@budibase/string-templates": "^1.0.150",
72
+ "@budibase/backend-core": "^1.0.153",
73
+ "@budibase/client": "^1.0.153",
74
+ "@budibase/pro": "1.0.153",
75
+ "@budibase/string-templates": "^1.0.153",
76
76
  "@bull-board/api": "^3.7.0",
77
77
  "@bull-board/koa": "^3.7.0",
78
78
  "@elastic/elasticsearch": "7.10.0",
@@ -18,13 +18,46 @@ const { DocumentTypes } = require("../db/utils");
18
18
  const { doInTenant } = require("@budibase/backend-core/tenancy");
19
19
  const { definitions: triggerDefs } = require("../automations/triggerInfo");
20
20
  const { doInAppContext, getAppDB } = require("@budibase/backend-core/context");
21
- const { AutomationErrors } = require("../constants");
21
+ const { AutomationErrors, LoopStepTypes } = require("../constants");
22
22
  const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId;
23
23
  const LOOP_STEP_ID = actions.ACTION_DEFINITIONS.LOOP.stepId;
24
24
  const CRON_STEP_ID = triggerDefs.CRON.stepId;
25
25
  const STOPPED_STATUS = { success: false, status: "STOPPED" };
26
26
  const { cloneDeep } = require("lodash/fp");
27
27
  const env = require("../environment");
28
+ function typecastForLooping(loopStep, input) {
29
+ if (!input || !input.binding) {
30
+ return null;
31
+ }
32
+ const isArray = Array.isArray(input.binding), isString = typeof input.binding === "string";
33
+ try {
34
+ switch (loopStep.inputs.option) {
35
+ case LoopStepTypes.ARRAY:
36
+ if (isString) {
37
+ return JSON.parse(input.binding);
38
+ }
39
+ break;
40
+ case LoopStepTypes.STRING:
41
+ if (isArray) {
42
+ return input.binding.join(",");
43
+ }
44
+ break;
45
+ }
46
+ }
47
+ catch (err) {
48
+ throw new Error("Unable to cast to correct type");
49
+ }
50
+ return input.binding;
51
+ }
52
+ function getLoopIterations(loopStep, input) {
53
+ const binding = typecastForLooping(loopStep, input);
54
+ if (!loopStep || !binding) {
55
+ return 1;
56
+ }
57
+ return Array.isArray(binding)
58
+ ? binding.length
59
+ : automationUtils.stringSplit(binding).length;
60
+ }
28
61
  /**
29
62
  * The automation orchestrator is a class responsible for executing automations.
30
63
  * It handles the context of the automation and makes sure each step gets the correct
@@ -95,7 +128,7 @@ class Orchestrator {
95
128
  this._context.steps.splice(loopStepNumber, 0, Object.assign(Object.assign({}, output), { success: result.success, status: result.status }));
96
129
  }
97
130
  execute() {
98
- var _a, _b;
131
+ var _a;
99
132
  return __awaiter(this, void 0, void 0, function* () {
100
133
  let automation = this._automation;
101
134
  const app = yield this.getApp();
@@ -106,7 +139,7 @@ class Orchestrator {
106
139
  let loopSteps = [];
107
140
  for (let step of automation.definition.steps) {
108
141
  stepCount++;
109
- let input;
142
+ let input, iterations = 1, iterationCount = 0;
110
143
  if (step.stepId === LOOP_STEP_ID) {
111
144
  loopStep = step;
112
145
  loopStepNumber = stepCount;
@@ -114,24 +147,18 @@ class Orchestrator {
114
147
  }
115
148
  if (loopStep) {
116
149
  input = yield processObject(loopStep.inputs, this._context);
150
+ iterations = getLoopIterations(loopStep, input);
117
151
  }
118
- let iterations = loopStep
119
- ? Array.isArray(input.binding)
120
- ? input.binding.length
121
- : automationUtils.stringSplit(input.binding).length
122
- : 1;
123
- let iterationCount = 0;
124
152
  for (let index = 0; index < iterations; index++) {
125
153
  let originalStepInput = cloneDeep(step.inputs);
126
154
  // Handle if the user has set a max iteration count or if it reaches the max limit set by us
127
155
  if (loopStep) {
128
156
  let newInput = yield processObject(loopStep.inputs, cloneDeep(this._context));
129
- newInput = automationUtils.cleanInputValues(newInput, loopStep.schema.inputs);
130
157
  let tempOutput = { items: loopSteps, iterations: iterationCount };
131
- if ((loopStep.inputs.option === "Array" &&
132
- !Array.isArray(newInput.binding)) ||
133
- (loopStep.inputs.option === "String" &&
134
- typeof newInput.binding !== "string")) {
158
+ try {
159
+ newInput.binding = typecastForLooping(loopStep, newInput);
160
+ }
161
+ catch (err) {
135
162
  this.updateContextAndOutput(loopStepNumber, step, tempOutput, {
136
163
  status: AutomationErrors.INCORRECT_TYPE,
137
164
  success: false,
@@ -179,16 +206,14 @@ class Orchestrator {
179
206
  break;
180
207
  }
181
208
  let isFailure = false;
182
- if (typeof ((_a = this._context.steps[loopStepNumber]) === null || _a === void 0 ? void 0 : _a.currentItem) === "object") {
183
- isFailure = Object.keys(this._context.steps[loopStepNumber].currentItem).some(value => {
184
- return (this._context.steps[loopStepNumber].currentItem[value] ===
185
- loopStep.inputs.failure);
209
+ const currentItem = (_a = this._context.steps[loopStepNumber]) === null || _a === void 0 ? void 0 : _a.currentItem;
210
+ if (currentItem && typeof currentItem === "object") {
211
+ isFailure = Object.keys(currentItem).some(value => {
212
+ return currentItem[value] === loopStep.inputs.failure;
186
213
  });
187
214
  }
188
215
  else {
189
- isFailure =
190
- ((_b = this._context.steps[loopStepNumber]) === null || _b === void 0 ? void 0 : _b.currentItem) ===
191
- loopStep.inputs.failure;
216
+ isFailure = currentItem && currentItem === loopStep.inputs.failure;
192
217
  }
193
218
  if (isFailure) {
194
219
  this.updateContextAndOutput(loopStepNumber, step, tempOutput, {