@budibase/server 2.0.23 → 2.0.24-alpha.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 (190) hide show
  1. package/builder/assets/{index.b61c225e.js → index.868c6c14.js} +260 -260
  2. package/builder/assets/{index.dfa4073c.css → index.aef99fa8.css} +2 -2
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +344 -341
  5. package/coverage/coverage-final.json +24 -24
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/index.html +1 -1
  13. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  19. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  24. package/coverage/lcov-report/api/controllers/row/internal.js.html +12 -12
  25. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +15 -15
  27. package/coverage/lcov-report/api/controllers/row/utils.js.html +13 -13
  28. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  37. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  41. package/coverage/lcov-report/api/index.html +1 -1
  42. package/coverage/lcov-report/api/index.js.html +5 -5
  43. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  44. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  45. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/index.html +1 -1
  53. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  67. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  70. package/coverage/lcov-report/automations/actions.js.html +1 -1
  71. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  72. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  73. package/coverage/lcov-report/automations/index.html +1 -1
  74. package/coverage/lcov-report/automations/index.js.html +5 -5
  75. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  76. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  77. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  78. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/index.html +1 -1
  82. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/updateRow.js.html +3 -3
  90. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  92. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  93. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  94. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  95. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  96. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggers.js.html +22 -22
  101. package/coverage/lcov-report/constants/index.html +1 -1
  102. package/coverage/lcov-report/constants/index.js.html +1 -1
  103. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  104. package/coverage/lcov-report/constants/screens.js.html +1 -1
  105. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  106. package/coverage/lcov-report/db/index.html +1 -1
  107. package/coverage/lcov-report/db/index.js.html +1 -1
  108. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +11 -11
  109. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  110. package/coverage/lcov-report/db/linkedRows/index.js.html +11 -11
  111. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +3 -3
  112. package/coverage/lcov-report/db/newid.js.html +2 -2
  113. package/coverage/lcov-report/db/utils.js.html +10 -16
  114. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  115. package/coverage/lcov-report/events/index.html +1 -1
  116. package/coverage/lcov-report/events/index.js.html +2 -2
  117. package/coverage/lcov-report/events/utils.js.html +9 -9
  118. package/coverage/lcov-report/index.html +15 -15
  119. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  120. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  121. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  122. package/coverage/lcov-report/middleware/builder.js.html +11 -11
  123. package/coverage/lcov-report/middleware/currentapp.js.html +34 -34
  124. package/coverage/lcov-report/middleware/index.html +1 -1
  125. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  126. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  127. package/coverage/lcov-report/middleware/resourceId.js.html +7 -7
  128. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  129. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  130. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  131. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  132. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  133. package/coverage/lcov-report/utilities/global.js.html +16 -16
  134. package/coverage/lcov-report/utilities/index.html +1 -1
  135. package/coverage/lcov-report/utilities/index.js.html +1 -1
  136. package/coverage/lcov-report/utilities/plugins.js.html +1 -1
  137. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +13 -13
  138. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  139. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  140. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  141. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  142. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +38 -38
  143. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +10 -10
  144. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  145. package/coverage/lcov-report/utilities/security.js.html +1 -1
  146. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  147. package/coverage/lcov-report/utilities/usageQuota/index.html +14 -14
  148. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +23 -11
  149. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  150. package/coverage/lcov-report/utilities/users.js.html +1 -1
  151. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  152. package/coverage/lcov.info +619 -614
  153. package/dist/api/controllers/application.js +2 -2
  154. package/dist/api/controllers/query/index.js +6 -2
  155. package/dist/api/controllers/row/index.js +30 -10
  156. package/dist/api/controllers/table/internal.js +3 -1
  157. package/dist/api/controllers/table/utils.js +3 -1
  158. package/dist/automations/steps/updateRow.js +2 -2
  159. package/dist/automations/utils.js +5 -3
  160. package/dist/db/utils.js +1 -1
  161. package/dist/migrations/functions/{quotas1.js → syncQuotas.js} +3 -7
  162. package/dist/migrations/functions/usageQuotas/syncApps.js +0 -1
  163. package/dist/migrations/functions/{pluginCount.js → usageQuotas/syncPlugins.js} +1 -3
  164. package/dist/migrations/functions/usageQuotas/syncRows.js +9 -5
  165. package/dist/migrations/index.js +3 -9
  166. package/dist/package.json +7 -7
  167. package/dist/tsconfig.build.tsbuildinfo +1 -1
  168. package/dist/utilities/usageQuota/rows.js +6 -4
  169. package/package.json +8 -8
  170. package/src/api/controllers/application.ts +2 -2
  171. package/src/api/controllers/query/index.ts +7 -2
  172. package/src/api/controllers/row/index.ts +36 -13
  173. package/src/api/controllers/table/internal.ts +3 -1
  174. package/src/api/controllers/table/utils.ts +3 -1
  175. package/src/api/routes/tests/row.spec.js +22 -27
  176. package/src/automations/steps/updateRow.js +2 -2
  177. package/src/automations/tests/automation.spec.js +1 -6
  178. package/src/automations/utils.ts +6 -4
  179. package/src/db/utils.js +0 -2
  180. package/src/migrations/functions/backfill/global.ts +1 -1
  181. package/src/migrations/functions/{quotas1.ts → syncQuotas.ts} +3 -8
  182. package/src/migrations/functions/tests/{quotas1.spec.js → syncQuotas.spec.js} +5 -2
  183. package/src/migrations/functions/usageQuotas/syncApps.ts +0 -1
  184. package/src/migrations/functions/usageQuotas/syncPlugins.ts +10 -0
  185. package/src/migrations/functions/usageQuotas/syncRows.ts +15 -6
  186. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +9 -1
  187. package/src/migrations/index.ts +3 -15
  188. package/src/migrations/tests/index.spec.ts +0 -1
  189. package/src/utilities/usageQuota/rows.js +7 -3
  190. package/src/migrations/functions/pluginCount.ts +0 -12
@@ -316,7 +316,7 @@ const appPostCreate = (ctx, app) => __awaiter(void 0, void 0, void 0, function*
316
316
  yield creationEvents(ctx.request, app);
317
317
  // app import & template creation
318
318
  if (ctx.request.body.useTemplate === "true") {
319
- const rows = yield (0, rows_1.getUniqueRows)([app.appId]);
319
+ const { rows } = yield (0, rows_1.getUniqueRows)([app.appId]);
320
320
  const rowCount = rows ? rows.length : 0;
321
321
  if (rowCount) {
322
322
  try {
@@ -441,7 +441,7 @@ const destroyApp = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
441
441
  return result;
442
442
  });
443
443
  const preDestroyApp = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
444
- const rows = yield (0, rows_1.getUniqueRows)([ctx.params.appId]);
444
+ const { rows } = yield (0, rows_1.getUniqueRows)([ctx.params.appId]);
445
445
  ctx.rowCount = rows.length;
446
446
  });
447
447
  const postDestroyApp = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
@@ -149,7 +149,9 @@ function preview(ctx) {
149
149
  auth: Object.assign({}, authConfigCtx),
150
150
  },
151
151
  });
152
- const { rows, keys, info, extra } = yield pro_1.quotas.addQuery(runFn);
152
+ const { rows, keys, info, extra } = yield pro_1.quotas.addQuery(runFn, {
153
+ datasourceId: datasource._id,
154
+ });
153
155
  const schemaFields = {};
154
156
  if ((rows === null || rows === void 0 ? void 0 : rows.length) > 0) {
155
157
  for (let key of [...new Set(keys)]) {
@@ -226,7 +228,9 @@ function execute(ctx, opts = { rowsOnly: false, isAutomation: false }) {
226
228
  auth: Object.assign({}, authConfigCtx),
227
229
  },
228
230
  });
229
- const { rows, pagination, extra } = yield pro_1.quotas.addQuery(runFn);
231
+ const { rows, pagination, extra } = yield pro_1.quotas.addQuery(runFn, {
232
+ datasourceId: datasource._id,
233
+ });
230
234
  // remove the raw from execution incase transformer being used to hide data
231
235
  if (extra === null || extra === void 0 ? void 0 : extra.raw) {
232
236
  delete extra.raw;
@@ -44,7 +44,9 @@ function patch(ctx) {
44
44
  return (0, exports.save)(ctx);
45
45
  }
46
46
  try {
47
- const { row, table } = yield pro_1.quotas.addQuery(() => pickApi(tableId).patch(ctx));
47
+ const { row, table } = yield pro_1.quotas.addQuery(() => pickApi(tableId).patch(ctx), {
48
+ datasourceId: tableId,
49
+ });
48
50
  ctx.status = 200;
49
51
  ctx.eventEmitter &&
50
52
  ctx.eventEmitter.emitRow(`row:update`, appId, row, table);
@@ -66,7 +68,9 @@ const save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
66
68
  return patch(ctx);
67
69
  }
68
70
  try {
69
- const { row, table } = yield pro_1.quotas.addRow(() => pro_1.quotas.addQuery(() => pickApi(tableId).save(ctx)));
71
+ const { row, table } = yield pro_1.quotas.addRow(() => pro_1.quotas.addQuery(() => pickApi(tableId).save(ctx), {
72
+ datasourceId: tableId,
73
+ }));
70
74
  ctx.status = 200;
71
75
  ctx.eventEmitter && ctx.eventEmitter.emitRow(`row:save`, appId, row, table);
72
76
  ctx.message = `${table.name} saved successfully`;
@@ -81,7 +85,9 @@ function fetchView(ctx) {
81
85
  return __awaiter(this, void 0, void 0, function* () {
82
86
  const tableId = getTableId(ctx);
83
87
  try {
84
- ctx.body = yield pro_1.quotas.addQuery(() => pickApi(tableId).fetchView(ctx));
88
+ ctx.body = yield pro_1.quotas.addQuery(() => pickApi(tableId).fetchView(ctx), {
89
+ datasourceId: tableId,
90
+ });
85
91
  }
86
92
  catch (err) {
87
93
  ctx.throw(400, err);
@@ -93,7 +99,9 @@ function fetch(ctx) {
93
99
  return __awaiter(this, void 0, void 0, function* () {
94
100
  const tableId = getTableId(ctx);
95
101
  try {
96
- ctx.body = yield pro_1.quotas.addQuery(() => pickApi(tableId).fetch(ctx));
102
+ ctx.body = yield pro_1.quotas.addQuery(() => pickApi(tableId).fetch(ctx), {
103
+ datasourceId: tableId,
104
+ });
97
105
  }
98
106
  catch (err) {
99
107
  ctx.throw(400, err);
@@ -105,7 +113,9 @@ function find(ctx) {
105
113
  return __awaiter(this, void 0, void 0, function* () {
106
114
  const tableId = getTableId(ctx);
107
115
  try {
108
- ctx.body = yield pro_1.quotas.addQuery(() => pickApi(tableId).find(ctx));
116
+ ctx.body = yield pro_1.quotas.addQuery(() => pickApi(tableId).find(ctx), {
117
+ datasourceId: tableId,
118
+ });
109
119
  }
110
120
  catch (err) {
111
121
  ctx.throw(400, err);
@@ -120,7 +130,9 @@ function destroy(ctx) {
120
130
  const tableId = getTableId(ctx);
121
131
  let response, row;
122
132
  if (inputs.rows) {
123
- let { rows } = yield pro_1.quotas.addQuery(() => pickApi(tableId).bulkDestroy(ctx));
133
+ let { rows } = yield pro_1.quotas.addQuery(() => pickApi(tableId).bulkDestroy(ctx), {
134
+ datasourceId: tableId,
135
+ });
124
136
  yield pro_1.quotas.removeRows(rows.length);
125
137
  response = rows;
126
138
  for (let row of rows) {
@@ -128,7 +140,9 @@ function destroy(ctx) {
128
140
  }
129
141
  }
130
142
  else {
131
- let resp = yield pro_1.quotas.addQuery(() => pickApi(tableId).destroy(ctx));
143
+ let resp = yield pro_1.quotas.addQuery(() => pickApi(tableId).destroy(ctx), {
144
+ datasourceId: tableId,
145
+ });
132
146
  yield pro_1.quotas.removeRow();
133
147
  response = resp.response;
134
148
  row = resp.row;
@@ -146,7 +160,9 @@ function search(ctx) {
146
160
  const tableId = getTableId(ctx);
147
161
  try {
148
162
  ctx.status = 200;
149
- ctx.body = yield pro_1.quotas.addQuery(() => pickApi(tableId).search(ctx));
163
+ ctx.body = yield pro_1.quotas.addQuery(() => pickApi(tableId).search(ctx), {
164
+ datasourceId: tableId,
165
+ });
150
166
  }
151
167
  catch (err) {
152
168
  ctx.throw(400, err);
@@ -170,7 +186,9 @@ function fetchEnrichedRow(ctx) {
170
186
  return __awaiter(this, void 0, void 0, function* () {
171
187
  const tableId = getTableId(ctx);
172
188
  try {
173
- ctx.body = yield pro_1.quotas.addQuery(() => pickApi(tableId).fetchEnrichedRow(ctx));
189
+ ctx.body = yield pro_1.quotas.addQuery(() => pickApi(tableId).fetchEnrichedRow(ctx), {
190
+ datasourceId: tableId,
191
+ });
174
192
  }
175
193
  catch (err) {
176
194
  ctx.throw(400, err);
@@ -181,7 +199,9 @@ exports.fetchEnrichedRow = fetchEnrichedRow;
181
199
  const exportRows = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
182
200
  const tableId = getTableId(ctx);
183
201
  try {
184
- ctx.body = yield pro_1.quotas.addQuery(() => pickApi(tableId).exportRows(ctx));
202
+ ctx.body = yield pro_1.quotas.addQuery(() => pickApi(tableId).exportRows(ctx), {
203
+ datasourceId: tableId,
204
+ });
185
205
  }
186
206
  catch (err) {
187
207
  ctx.throw(400, err);
@@ -150,7 +150,9 @@ function destroy(ctx) {
150
150
  include_docs: true,
151
151
  }));
152
152
  yield db.bulkDocs(rows.rows.map((row) => (Object.assign(Object.assign({}, row.doc), { _deleted: true }))));
153
- yield pro_1.quotas.removeRows(rows.rows.length);
153
+ yield pro_1.quotas.removeRows(rows.rows.length, {
154
+ tableId: ctx.params.tableId,
155
+ });
154
156
  // update linked rows
155
157
  yield (0, linkedRows_1.updateLinks)({
156
158
  eventType: linkedRows_1.EventType.TABLE_DELETE,
@@ -130,7 +130,9 @@ function handleDataImport(user, table, dataImport) {
130
130
  }
131
131
  finalData.push(row);
132
132
  }
133
- yield pro_1.quotas.addRows(finalData.length, () => db.bulkDocs(finalData));
133
+ yield pro_1.quotas.addRows(finalData.length, () => db.bulkDocs(finalData), {
134
+ tableId: table._id,
135
+ });
134
136
  yield backend_core_1.events.rows.imported(table, "csv", finalData.length);
135
137
  return table;
136
138
  });
@@ -74,9 +74,9 @@ exports.run = function ({ inputs, appId, emitter }) {
74
74
  };
75
75
  }
76
76
  const tableId = inputs.row.tableId;
77
- // clear any falsy properties so that they aren't updated
77
+ // clear any undefined, null or empty string properties so that they aren't updated
78
78
  for (let propKey of Object.keys(inputs.row)) {
79
- if (!inputs.row[propKey] || inputs.row[propKey] === "") {
79
+ if (inputs.row[propKey] == null || inputs.row[propKey] === "") {
80
80
  delete inputs.row[propKey];
81
81
  }
82
82
  }
@@ -59,12 +59,14 @@ const jobMessage = (job, message) => {
59
59
  function processEvent(job) {
60
60
  return __awaiter(this, void 0, void 0, function* () {
61
61
  try {
62
+ const automationId = job.data.automation._id;
62
63
  console.log(jobMessage(job, "running"));
63
64
  // need to actually await these so that an error can be captured properly
64
- const tenantId = backend_core_1.tenancy.getTenantIDFromAppID(job.data.event.appId);
65
- return yield backend_core_1.tenancy.doInTenant(tenantId, () => __awaiter(this, void 0, void 0, function* () {
65
+ return yield backend_core_1.context.doInContext(job.data.event.appId, () => __awaiter(this, void 0, void 0, function* () {
66
66
  const runFn = () => Runner.run(job);
67
- return pro_1.quotas.addAutomation(runFn);
67
+ return pro_1.quotas.addAutomation(runFn, {
68
+ automationId,
69
+ });
68
70
  }));
69
71
  }
70
72
  catch (err) {
package/dist/db/utils.js CHANGED
@@ -7,7 +7,7 @@ const AppStatus = {
7
7
  ALL: "all",
8
8
  DEPLOYED: "published",
9
9
  };
10
- const DocumentType = Object.assign(Object.assign({}, CoreDocTypes), { TABLE: "ta", ROW: "ro", USER: "us", AUTOMATION: "au", LINK: "li", WEBHOOK: "wh", INSTANCE: "inst", LAYOUT: "layout", SCREEN: "screen", DATASOURCE: "datasource", DATASOURCE_PLUS: "datasource_plus", QUERY: "query", DEPLOYMENTS: "deployments", METADATA: "metadata", MEM_VIEW: "view", USER_FLAG: "flag", AUTOMATION_METADATA: "meta_au" });
10
+ const DocumentType = Object.assign(Object.assign({}, CoreDocTypes), { TABLE: "ta", ROW: "ro", USER: "us", AUTOMATION: "au", LINK: "li", WEBHOOK: "wh", INSTANCE: "inst", LAYOUT: "layout", SCREEN: "screen", QUERY: "query", DEPLOYMENTS: "deployments", METADATA: "metadata", MEM_VIEW: "view", USER_FLAG: "flag", AUTOMATION_METADATA: "meta_au" });
11
11
  const InternalTables = {
12
12
  USER_METADATA: "ta_users",
13
13
  };
@@ -36,19 +36,15 @@ exports.run = void 0;
36
36
  const usageQuotas_1 = require("./usageQuotas");
37
37
  const syncApps = __importStar(require("./usageQuotas/syncApps"));
38
38
  const syncRows = __importStar(require("./usageQuotas/syncRows"));
39
+ const syncPlugins = __importStar(require("./usageQuotas/syncPlugins"));
39
40
  /**
40
- * Date:
41
- * January 2022
42
- *
43
- * Description:
44
- * Synchronise the app and row quotas to the state of the db after it was
45
- * discovered that the quota resets were still in place and the row quotas
46
- * weren't being decremented correctly.
41
+ * Synchronise quotas to the state of the db.
47
42
  */
48
43
  const run = () => __awaiter(void 0, void 0, void 0, function* () {
49
44
  yield (0, usageQuotas_1.runQuotaMigration)(() => __awaiter(void 0, void 0, void 0, function* () {
50
45
  yield syncApps.run();
51
46
  yield syncRows.run();
47
+ yield syncPlugins.run();
52
48
  }));
53
49
  });
54
50
  exports.run = run;
@@ -16,7 +16,6 @@ const pro_1 = require("@budibase/pro");
16
16
  const types_1 = require("@budibase/types");
17
17
  const run = () => __awaiter(void 0, void 0, void 0, function* () {
18
18
  // get app count
19
- // @ts-ignore
20
19
  const devApps = yield (0, db_1.getAllApps)({ dev: true });
21
20
  const appCount = devApps ? devApps.length : 0;
22
21
  // sync app count
@@ -14,9 +14,7 @@ const backend_core_1 = require("@budibase/backend-core");
14
14
  const pro_1 = require("@budibase/pro");
15
15
  const run = () => __awaiter(void 0, void 0, void 0, function* () {
16
16
  try {
17
- yield backend_core_1.tenancy.doInTenant(backend_core_1.tenancy.DEFAULT_TENANT_ID, () => __awaiter(void 0, void 0, void 0, function* () {
18
- yield pro_1.plugins.checkPluginQuotas();
19
- }));
17
+ yield pro_1.plugins.checkPluginQuotas();
20
18
  }
21
19
  catch (err) {
22
20
  backend_core_1.logging.logAlert("Failed to update plugin quotas", err);
@@ -17,15 +17,19 @@ const pro_1 = require("@budibase/pro");
17
17
  const types_1 = require("@budibase/types");
18
18
  const run = () => __awaiter(void 0, void 0, void 0, function* () {
19
19
  // get all rows in all apps
20
- // @ts-ignore
21
20
  const allApps = yield (0, db_1.getAllApps)({ all: true });
22
- // @ts-ignore
23
21
  const appIds = allApps ? allApps.map((app) => app.appId) : [];
24
- const rows = yield (0, rows_1.getUniqueRows)(appIds);
25
- const rowCount = rows ? rows.length : 0;
22
+ const { appRows } = yield (0, rows_1.getUniqueRows)(appIds);
23
+ // get the counts per app
24
+ const counts = {};
25
+ let rowCount = 0;
26
+ Object.entries(appRows).forEach(([appId, rows]) => {
27
+ counts[appId] = rows.length;
28
+ rowCount += rows.length;
29
+ });
26
30
  // sync row count
27
31
  const tenantId = (0, tenancy_1.getTenantId)();
28
32
  console.log(`[Tenant: ${tenantId}] Syncing row count: ${rowCount}`);
29
- yield pro_1.quotas.setUsage(rowCount, types_1.StaticQuotaName.ROWS, types_1.QuotaUsageType.STATIC);
33
+ yield pro_1.quotas.setUsagePerApp(counts, types_1.StaticQuotaName.ROWS, types_1.QuotaUsageType.STATIC);
30
34
  });
31
35
  exports.run = run;
@@ -41,10 +41,9 @@ const types_1 = require("@budibase/types");
41
41
  const environment_1 = __importDefault(require("../environment"));
42
42
  // migration functions
43
43
  const userEmailViewCasing = __importStar(require("./functions/userEmailViewCasing"));
44
- const quota1 = __importStar(require("./functions/quotas1"));
44
+ const syncQuotas = __importStar(require("./functions/syncQuotas"));
45
45
  const appUrls = __importStar(require("./functions/appUrls"));
46
46
  const backfill = __importStar(require("./functions/backfill"));
47
- const pluginCount = __importStar(require("./functions/pluginCount"));
48
47
  /**
49
48
  * Populate the migration function and additional configuration from
50
49
  * the static migration definitions.
@@ -58,8 +57,8 @@ const buildMigrations = () => {
58
57
  serverMigrations.push(Object.assign(Object.assign({}, definition), { fn: userEmailViewCasing.run }));
59
58
  break;
60
59
  }
61
- case types_1.MigrationName.QUOTAS_1: {
62
- serverMigrations.push(Object.assign(Object.assign({}, definition), { fn: quota1.run }));
60
+ case types_1.MigrationName.SYNC_QUOTAS: {
61
+ serverMigrations.push(Object.assign(Object.assign({}, definition), { fn: syncQuotas.run }));
63
62
  break;
64
63
  }
65
64
  case types_1.MigrationName.APP_URLS: {
@@ -78,11 +77,6 @@ const buildMigrations = () => {
78
77
  serverMigrations.push(Object.assign(Object.assign({}, definition), { fn: backfill.installation.run, silent: !!environment_1.default.SELF_HOSTED, preventRetry: !!environment_1.default.SELF_HOSTED }));
79
78
  break;
80
79
  }
81
- case types_1.MigrationName.PLUGIN_COUNT: {
82
- if (environment_1.default.SELF_HOSTED) {
83
- serverMigrations.push(Object.assign(Object.assign({}, definition), { fn: pluginCount.run, silent: !!environment_1.default.SELF_HOSTED, preventRetry: false }));
84
- }
85
- }
86
80
  }
87
81
  }
88
82
  return serverMigrations;
package/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "2.0.22",
4
+ "version": "2.0.23",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -77,11 +77,11 @@
77
77
  "license": "GPL-3.0",
78
78
  "dependencies": {
79
79
  "@apidevtools/swagger-parser": "10.0.3",
80
- "@budibase/backend-core": "^2.0.22",
81
- "@budibase/client": "^2.0.22",
82
- "@budibase/pro": "2.0.22",
83
- "@budibase/string-templates": "^2.0.22",
84
- "@budibase/types": "^2.0.22",
80
+ "@budibase/backend-core": "^2.0.23",
81
+ "@budibase/client": "^2.0.23",
82
+ "@budibase/pro": "2.0.23",
83
+ "@budibase/string-templates": "^2.0.23",
84
+ "@budibase/types": "^2.0.23",
85
85
  "@bull-board/api": "3.7.0",
86
86
  "@bull-board/koa": "3.9.4",
87
87
  "@elastic/elasticsearch": "7.10.0",
@@ -146,7 +146,7 @@
146
146
  "to-json-schema": "0.2.5",
147
147
  "uuid": "3.3.2",
148
148
  "validate.js": "0.13.1",
149
- "vm2": "3.9.6",
149
+ "vm2": "3.9.11",
150
150
  "worker-farm": "1.7.0",
151
151
  "xml2js": "0.4.23",
152
152
  "yargs": "13.2.4",