@budibase/server 2.0.30-alpha.7 → 2.0.31

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/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/{index.b1aa5e8a.js → index.c4b43e7e.js} +283 -287
  3. package/builder/assets/{index.a6a040bb.css → index.dfa4073c.css} +2 -2
  4. package/builder/index.html +2 -2
  5. package/coverage/clover.xml +491 -495
  6. package/coverage/coverage-final.json +26 -26
  7. package/coverage/lcov-report/api/controllers/apikeys.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/datasource.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/dev.js.html +2 -2
  13. package/coverage/lcov-report/api/controllers/index.html +1 -1
  14. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  20. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/internal.js.html +12 -12
  26. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +15 -15
  28. package/coverage/lcov-report/api/controllers/row/utils.js.html +13 -13
  29. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  42. package/coverage/lcov-report/api/index.html +1 -1
  43. package/coverage/lcov-report/api/index.js.html +5 -5
  44. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  45. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/index.html +1 -1
  54. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  68. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  71. package/coverage/lcov-report/automations/actions.js.html +1 -1
  72. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  73. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  74. package/coverage/lcov-report/automations/index.html +1 -1
  75. package/coverage/lcov-report/automations/index.js.html +5 -5
  76. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  77. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  78. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/index.html +1 -1
  83. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/updateRow.js.html +3 -3
  91. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  93. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  94. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  95. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  96. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggers.js.html +22 -22
  102. package/coverage/lcov-report/constants/index.html +1 -1
  103. package/coverage/lcov-report/constants/index.js.html +2 -8
  104. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  105. package/coverage/lcov-report/constants/screens.js.html +1 -1
  106. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  107. package/coverage/lcov-report/db/index.html +1 -1
  108. package/coverage/lcov-report/db/index.js.html +1 -1
  109. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +11 -11
  110. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  111. package/coverage/lcov-report/db/linkedRows/index.js.html +11 -11
  112. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +3 -3
  113. package/coverage/lcov-report/db/newid.js.html +2 -2
  114. package/coverage/lcov-report/db/utils.js.html +16 -10
  115. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  116. package/coverage/lcov-report/events/index.html +1 -1
  117. package/coverage/lcov-report/events/index.js.html +2 -2
  118. package/coverage/lcov-report/events/utils.js.html +9 -9
  119. package/coverage/lcov-report/index.html +24 -24
  120. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  121. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  122. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  123. package/coverage/lcov-report/middleware/builder.js.html +11 -11
  124. package/coverage/lcov-report/middleware/currentapp.js.html +34 -34
  125. package/coverage/lcov-report/middleware/index.html +1 -1
  126. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  127. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  128. package/coverage/lcov-report/middleware/resourceId.js.html +7 -7
  129. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  130. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  131. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  132. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  133. package/coverage/lcov-report/utilities/csvParser.js.html +8 -11
  134. package/coverage/lcov-report/utilities/global.js.html +16 -16
  135. package/coverage/lcov-report/utilities/index.html +15 -15
  136. package/coverage/lcov-report/utilities/index.js.html +7 -7
  137. package/coverage/lcov-report/utilities/plugins.js.html +1 -1
  138. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +13 -13
  139. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  140. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  141. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  142. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  143. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +39 -54
  144. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +10 -10
  145. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  146. package/coverage/lcov-report/utilities/security.js.html +1 -1
  147. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  148. package/coverage/lcov-report/utilities/usageQuota/index.html +14 -14
  149. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +11 -23
  150. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  151. package/coverage/lcov-report/utilities/users.js.html +1 -1
  152. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  153. package/coverage/lcov.info +892 -900
  154. package/dist/api/controllers/application.js +2 -2
  155. package/dist/api/controllers/dev.js +1 -1
  156. package/dist/api/controllers/query/index.js +2 -7
  157. package/dist/api/controllers/row/index.js +10 -30
  158. package/dist/api/controllers/static/templates/preview.hbs +0 -10
  159. package/dist/api/controllers/table/internal.js +2 -8
  160. package/dist/api/controllers/table/utils.js +1 -3
  161. package/dist/automations/steps/updateRow.js +2 -2
  162. package/dist/automations/utils.js +3 -5
  163. package/dist/constants/index.js +0 -2
  164. package/dist/db/utils.js +1 -1
  165. package/dist/index.js +0 -1
  166. package/dist/integrations/base/sqlTable.js +0 -1
  167. package/dist/integrations/mongodb.js +11 -300
  168. package/dist/integrations/rest.js +5 -38
  169. package/dist/migrations/functions/{usageQuotas/syncPlugins.js → pluginCount.js} +3 -1
  170. package/dist/migrations/functions/{syncQuotas.js → quotas1.js} +7 -3
  171. package/dist/migrations/functions/usageQuotas/syncApps.js +1 -0
  172. package/dist/migrations/functions/usageQuotas/syncRows.js +5 -9
  173. package/dist/migrations/index.js +38 -9
  174. package/dist/package.json +9 -8
  175. package/dist/tsconfig.build.tsbuildinfo +1 -1
  176. package/dist/utilities/csvParser.js +0 -1
  177. package/dist/utilities/rowProcessor/index.js +0 -5
  178. package/dist/utilities/usageQuota/rows.js +4 -6
  179. package/package.json +10 -9
  180. package/specs/openapi.json +0 -3
  181. package/specs/openapi.yaml +0 -3
  182. package/src/api/controllers/application.ts +2 -2
  183. package/src/api/controllers/deploy/index.ts +1 -0
  184. package/src/api/controllers/dev.js +1 -1
  185. package/src/api/controllers/query/index.ts +2 -8
  186. package/src/api/controllers/row/index.ts +13 -36
  187. package/src/api/controllers/static/templates/preview.hbs +0 -10
  188. package/src/api/controllers/table/internal.ts +2 -5
  189. package/src/api/controllers/table/utils.ts +1 -3
  190. package/src/api/routes/tests/row.spec.js +27 -22
  191. package/src/automations/steps/updateRow.js +2 -2
  192. package/src/automations/tests/automation.spec.js +6 -1
  193. package/src/automations/utils.ts +4 -6
  194. package/src/constants/index.js +0 -2
  195. package/src/db/utils.js +2 -0
  196. package/src/definitions/datasource.ts +0 -1
  197. package/src/index.ts +0 -1
  198. package/src/integrations/base/sqlTable.ts +0 -1
  199. package/src/integrations/mongodb.ts +27 -290
  200. package/src/integrations/rest.ts +5 -17
  201. package/src/integrations/tests/mongo.spec.ts +19 -19
  202. package/src/integrations/tests/rest.spec.ts +22 -38
  203. package/src/migrations/functions/backfill/global.ts +1 -1
  204. package/src/migrations/functions/pluginCount.ts +12 -0
  205. package/src/migrations/functions/{syncQuotas.ts → quotas1.ts} +8 -3
  206. package/src/migrations/functions/tests/{syncQuotas.spec.js → quotas1.spec.js} +2 -5
  207. package/src/migrations/functions/usageQuotas/syncApps.ts +1 -0
  208. package/src/migrations/functions/usageQuotas/syncRows.ts +6 -15
  209. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +1 -9
  210. package/src/migrations/index.ts +45 -20
  211. package/src/migrations/tests/index.spec.ts +1 -0
  212. package/src/utilities/csvParser.js +0 -1
  213. package/src/utilities/rowProcessor/index.js +0 -5
  214. package/src/utilities/usageQuota/rows.js +3 -7
  215. package/src/migrations/functions/usageQuotas/syncPlugins.ts +0 -10
@@ -13,7 +13,6 @@ const { FieldTypes } = require("../constants");
13
13
  const VALIDATORS = {
14
14
  [FieldTypes.STRING]: () => true,
15
15
  [FieldTypes.OPTIONS]: () => true,
16
- [FieldTypes.BARCODEQR]: () => true,
17
16
  [FieldTypes.NUMBER]: attribute => {
18
17
  // allow not to be present
19
18
  if (!attribute) {
@@ -52,11 +52,6 @@ const TYPE_TRANSFORM_MAP = {
52
52
  [null]: "",
53
53
  [undefined]: undefined,
54
54
  },
55
- [FieldTypes.BARCODEQR]: {
56
- "": "",
57
- [null]: "",
58
- [undefined]: undefined,
59
- },
60
55
  [FieldTypes.FORMULA]: {
61
56
  "": "",
62
57
  [null]: "",
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  const { getRowParams, USER_METDATA_PREFIX } = require("../../db/utils");
12
- const { isDevAppID, getDevelopmentAppID, getProdAppID, doWithDB, } = require("@budibase/backend-core/db");
12
+ const { isDevAppID, getDevelopmentAppID, doWithDB, } = require("@budibase/backend-core/db");
13
13
  const ROW_EXCLUSIONS = [USER_METDATA_PREFIX];
14
14
  const getAppPairs = appIds => {
15
15
  // collect the app ids into dev / prod pairs
@@ -53,7 +53,7 @@ const getAppRows = (appId) => __awaiter(void 0, void 0, void 0, function* () {
53
53
  * Rows duplicates may exist across apps due to data import so they are not filtered out.
54
54
  */
55
55
  exports.getUniqueRows = (appIds) => __awaiter(void 0, void 0, void 0, function* () {
56
- let uniqueRows = [], rowsByApp = {};
56
+ let uniqueRows = [];
57
57
  const pairs = getAppPairs(appIds);
58
58
  for (let pair of Object.values(pairs)) {
59
59
  let appRows = [];
@@ -73,9 +73,7 @@ exports.getUniqueRows = (appIds) => __awaiter(void 0, void 0, void 0, function*
73
73
  // this can't be done on all rows because app import results in
74
74
  // duplicate row ids across apps
75
75
  // the array pre-concat is important to avoid stack overflow
76
- const prodId = getProdAppID(pair.devId || pair.prodId);
77
- rowsByApp[prodId] = [...new Set(appRows)];
78
- uniqueRows = uniqueRows.concat(rowsByApp[prodId]);
76
+ uniqueRows = uniqueRows.concat([...new Set(appRows)]);
79
77
  }
80
- return { rows: uniqueRows, appRows: rowsByApp };
78
+ return uniqueRows;
81
79
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "2.0.30-alpha.7",
4
+ "version": "2.0.31",
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.30-alpha.7",
81
- "@budibase/client": "2.0.30-alpha.7",
82
- "@budibase/pro": "2.0.30-alpha.6",
83
- "@budibase/string-templates": "2.0.30-alpha.7",
84
- "@budibase/types": "2.0.30-alpha.7",
80
+ "@budibase/backend-core": "^2.0.31",
81
+ "@budibase/client": "^2.0.31",
82
+ "@budibase/pro": "2.0.30",
83
+ "@budibase/string-templates": "^2.0.31",
84
+ "@budibase/types": "^2.0.31",
85
85
  "@bull-board/api": "3.7.0",
86
86
  "@bull-board/koa": "3.9.4",
87
87
  "@elastic/elasticsearch": "7.10.0",
@@ -123,7 +123,7 @@
123
123
  "koa2-ratelimit": "1.1.1",
124
124
  "lodash": "4.17.21",
125
125
  "memorystream": "0.3.1",
126
- "mongodb": "4.9",
126
+ "mongodb": "3.6.3",
127
127
  "mssql": "6.2.3",
128
128
  "mysql2": "2.3.3",
129
129
  "node-fetch": "2.6.7",
@@ -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.11",
149
+ "vm2": "3.9.6",
150
150
  "worker-farm": "1.7.0",
151
151
  "xml2js": "0.4.23",
152
152
  "yargs": "13.2.4",
@@ -166,6 +166,7 @@
166
166
  "@types/koa": "2.13.4",
167
167
  "@types/koa__router": "8.0.0",
168
168
  "@types/lodash": "4.14.180",
169
+ "@types/mongodb": "3.6.3",
169
170
  "@types/node": "14.18.20",
170
171
  "@types/node-fetch": "2.6.1",
171
172
  "@types/oracledb": "5.2.2",
@@ -198,5 +199,5 @@
198
199
  "optionalDependencies": {
199
200
  "oracledb": "5.3.0"
200
201
  },
201
- "gitHead": "74511ef9396141daf6d0154eec2b7abc4e884470"
202
+ "gitHead": "a93d02d9e3501a0df1b2c1285912115610bb3769"
202
203
  }
@@ -783,7 +783,6 @@
783
783
  "type": "string",
784
784
  "enum": [
785
785
  "string",
786
- "barcodeqr",
787
786
  "longform",
788
787
  "options",
789
788
  "number",
@@ -987,7 +986,6 @@
987
986
  "type": "string",
988
987
  "enum": [
989
988
  "string",
990
- "barcodeqr",
991
989
  "longform",
992
990
  "options",
993
991
  "number",
@@ -1202,7 +1200,6 @@
1202
1200
  "type": "string",
1203
1201
  "enum": [
1204
1202
  "string",
1205
- "barcodeqr",
1206
1203
  "longform",
1207
1204
  "options",
1208
1205
  "number",
@@ -579,7 +579,6 @@ components:
579
579
  type: string
580
580
  enum:
581
581
  - string
582
- - barcodeqr
583
582
  - longform
584
583
  - options
585
584
  - number
@@ -742,7 +741,6 @@ components:
742
741
  type: string
743
742
  enum:
744
743
  - string
745
- - barcodeqr
746
744
  - longform
747
745
  - options
748
746
  - number
@@ -912,7 +910,6 @@ components:
912
910
  type: string
913
911
  enum:
914
912
  - string
915
- - barcodeqr
916
913
  - longform
917
914
  - options
918
915
  - number
@@ -359,7 +359,7 @@ const appPostCreate = async (ctx: any, app: App) => {
359
359
  await creationEvents(ctx.request, app)
360
360
  // app import & template creation
361
361
  if (ctx.request.body.useTemplate === "true") {
362
- const { rows } = await getUniqueRows([app.appId])
362
+ const rows = await getUniqueRows([app.appId])
363
363
  const rowCount = rows ? rows.length : 0
364
364
  if (rowCount) {
365
365
  try {
@@ -493,7 +493,7 @@ const destroyApp = async (ctx: any) => {
493
493
  }
494
494
 
495
495
  const preDestroyApp = async (ctx: any) => {
496
- const { rows } = await getUniqueRows([ctx.params.appId])
496
+ const rows = await getUniqueRows([ctx.params.appId])
497
497
  ctx.rowCount = rows.length
498
498
  }
499
499
 
@@ -17,6 +17,7 @@ import {
17
17
  getProdAppDB,
18
18
  getDevAppDB,
19
19
  } from "@budibase/backend-core/context"
20
+ import { quotas } from "@budibase/pro"
20
21
  import { events } from "@budibase/backend-core"
21
22
 
22
23
  // the max time we can wait for an invalidation to complete before considering it failed
@@ -103,7 +103,7 @@ exports.revert = async ctx => {
103
103
  target: appId,
104
104
  })
105
105
  try {
106
- if (env.COUCH_DB_URL) {
106
+ if (!env.isTest()) {
107
107
  // in-memory db stalls on rollback
108
108
  await replication.rollback()
109
109
  }
@@ -56,7 +56,6 @@ const _import = async (ctx: any) => {
56
56
  config: {
57
57
  url: info.url,
58
58
  defaultHeaders: [],
59
- rejectUnauthorized: true,
60
59
  },
61
60
  name: info.name,
62
61
  }
@@ -154,10 +153,7 @@ export async function preview(ctx: any) {
154
153
  auth: { ...authConfigCtx },
155
154
  },
156
155
  })
157
-
158
- const { rows, keys, info, extra } = await quotas.addQuery(runFn, {
159
- datasourceId: datasource._id,
160
- })
156
+ const { rows, keys, info, extra } = await quotas.addQuery(runFn)
161
157
  const schemaFields: any = {}
162
158
  if (rows?.length > 0) {
163
159
  for (let key of [...new Set(keys)] as string[]) {
@@ -238,9 +234,7 @@ async function execute(
238
234
  },
239
235
  })
240
236
 
241
- const { rows, pagination, extra } = await quotas.addQuery(runFn, {
242
- datasourceId: datasource._id,
243
- })
237
+ const { rows, pagination, extra } = await quotas.addQuery(runFn)
244
238
  // remove the raw from execution incase transformer being used to hide data
245
239
  if (extra?.raw) {
246
240
  delete extra.raw
@@ -31,11 +31,8 @@ export async function patch(ctx: any): Promise<any> {
31
31
  return save(ctx)
32
32
  }
33
33
  try {
34
- const { row, table } = await quotas.addQuery(
35
- () => pickApi(tableId).patch(ctx),
36
- {
37
- datasourceId: tableId,
38
- }
34
+ const { row, table } = await quotas.addQuery(() =>
35
+ pickApi(tableId).patch(ctx)
39
36
  )
40
37
  ctx.status = 200
41
38
  ctx.eventEmitter &&
@@ -57,9 +54,7 @@ export const save = async (ctx: any) => {
57
54
  }
58
55
  try {
59
56
  const { row, table } = await quotas.addRow(() =>
60
- quotas.addQuery(() => pickApi(tableId).save(ctx), {
61
- datasourceId: tableId,
62
- })
57
+ quotas.addQuery(() => pickApi(tableId).save(ctx))
63
58
  )
64
59
  ctx.status = 200
65
60
  ctx.eventEmitter && ctx.eventEmitter.emitRow(`row:save`, appId, row, table)
@@ -73,9 +68,7 @@ export const save = async (ctx: any) => {
73
68
  export async function fetchView(ctx: any) {
74
69
  const tableId = getTableId(ctx)
75
70
  try {
76
- ctx.body = await quotas.addQuery(() => pickApi(tableId).fetchView(ctx), {
77
- datasourceId: tableId,
78
- })
71
+ ctx.body = await quotas.addQuery(() => pickApi(tableId).fetchView(ctx))
79
72
  } catch (err) {
80
73
  ctx.throw(400, err)
81
74
  }
@@ -84,9 +77,7 @@ export async function fetchView(ctx: any) {
84
77
  export async function fetch(ctx: any) {
85
78
  const tableId = getTableId(ctx)
86
79
  try {
87
- ctx.body = await quotas.addQuery(() => pickApi(tableId).fetch(ctx), {
88
- datasourceId: tableId,
89
- })
80
+ ctx.body = await quotas.addQuery(() => pickApi(tableId).fetch(ctx))
90
81
  } catch (err) {
91
82
  ctx.throw(400, err)
92
83
  }
@@ -95,9 +86,7 @@ export async function fetch(ctx: any) {
95
86
  export async function find(ctx: any) {
96
87
  const tableId = getTableId(ctx)
97
88
  try {
98
- ctx.body = await quotas.addQuery(() => pickApi(tableId).find(ctx), {
99
- datasourceId: tableId,
100
- })
89
+ ctx.body = await quotas.addQuery(() => pickApi(tableId).find(ctx))
101
90
  } catch (err) {
102
91
  ctx.throw(400, err)
103
92
  }
@@ -109,11 +98,8 @@ export async function destroy(ctx: any) {
109
98
  const tableId = getTableId(ctx)
110
99
  let response, row
111
100
  if (inputs.rows) {
112
- let { rows } = await quotas.addQuery(
113
- () => pickApi(tableId).bulkDestroy(ctx),
114
- {
115
- datasourceId: tableId,
116
- }
101
+ let { rows } = await quotas.addQuery(() =>
102
+ pickApi(tableId).bulkDestroy(ctx)
117
103
  )
118
104
  await quotas.removeRows(rows.length)
119
105
  response = rows
@@ -121,9 +107,7 @@ export async function destroy(ctx: any) {
121
107
  ctx.eventEmitter && ctx.eventEmitter.emitRow(`row:delete`, appId, row)
122
108
  }
123
109
  } else {
124
- let resp = await quotas.addQuery(() => pickApi(tableId).destroy(ctx), {
125
- datasourceId: tableId,
126
- })
110
+ let resp = await quotas.addQuery(() => pickApi(tableId).destroy(ctx))
127
111
  await quotas.removeRow()
128
112
  response = resp.response
129
113
  row = resp.row
@@ -139,9 +123,7 @@ export async function search(ctx: any) {
139
123
  const tableId = getTableId(ctx)
140
124
  try {
141
125
  ctx.status = 200
142
- ctx.body = await quotas.addQuery(() => pickApi(tableId).search(ctx), {
143
- datasourceId: tableId,
144
- })
126
+ ctx.body = await quotas.addQuery(() => pickApi(tableId).search(ctx))
145
127
  } catch (err) {
146
128
  ctx.throw(400, err)
147
129
  }
@@ -159,11 +141,8 @@ export async function validate(ctx: any) {
159
141
  export async function fetchEnrichedRow(ctx: any) {
160
142
  const tableId = getTableId(ctx)
161
143
  try {
162
- ctx.body = await quotas.addQuery(
163
- () => pickApi(tableId).fetchEnrichedRow(ctx),
164
- {
165
- datasourceId: tableId,
166
- }
144
+ ctx.body = await quotas.addQuery(() =>
145
+ pickApi(tableId).fetchEnrichedRow(ctx)
167
146
  )
168
147
  } catch (err) {
169
148
  ctx.throw(400, err)
@@ -173,9 +152,7 @@ export async function fetchEnrichedRow(ctx: any) {
173
152
  export const exportRows = async (ctx: any) => {
174
153
  const tableId = getTableId(ctx)
175
154
  try {
176
- ctx.body = await quotas.addQuery(() => pickApi(tableId).exportRows(ctx), {
177
- datasourceId: tableId,
178
- })
155
+ ctx.body = await quotas.addQuery(() => pickApi(tableId).exportRows(ctx))
179
156
  } catch (err) {
180
157
  ctx.throw(400, err)
181
158
  }
@@ -56,16 +56,6 @@
56
56
  return
57
57
  }
58
58
 
59
- // If this is a custom event, try and handle it
60
- if (parsed.runtimeEvent) {
61
- const { name, payload } = parsed
62
- if (window.handleBuilderRuntimeEvent) {
63
- window.handleBuilderRuntimeEvent(name, payload)
64
- }
65
- return
66
- }
67
-
68
- // Otherwise this is a full reload message
69
59
  // Extract data from message
70
60
  const {
71
61
  selectedComponentId,
@@ -18,7 +18,6 @@ import { Table } from "@budibase/types"
18
18
  import { quotas } from "@budibase/pro"
19
19
  import { isEqual } from "lodash"
20
20
  import { cloneDeep } from "lodash/fp"
21
- import env from "../../../environment"
22
21
 
23
22
  function checkAutoColumns(table: Table, oldTable: Table) {
24
23
  if (!table.schema) {
@@ -154,9 +153,7 @@ export async function destroy(ctx: any) {
154
153
  await db.bulkDocs(
155
154
  rows.rows.map((row: any) => ({ ...row.doc, _deleted: true }))
156
155
  )
157
- await quotas.removeRows(rows.rows.length, {
158
- tableId: ctx.params.tableId,
159
- })
156
+ await quotas.removeRows(rows.rows.length)
160
157
 
161
158
  // update linked rows
162
159
  await updateLinks({
@@ -168,7 +165,7 @@ export async function destroy(ctx: any) {
168
165
  await db.remove(tableToDelete)
169
166
 
170
167
  // remove table search index
171
- if (!isTest() || env.COUCH_DB_URL) {
168
+ if (!isTest()) {
172
169
  const currentIndexes = await db.getIndexes()
173
170
  const existingIndex = currentIndexes.indexes.find(
174
171
  (existing: any) => existing.name === `search:${ctx.params.tableId}`
@@ -148,9 +148,7 @@ export async function handleDataImport(user: any, table: any, dataImport: any) {
148
148
  finalData.push(row)
149
149
  }
150
150
 
151
- await quotas.addRows(finalData.length, () => db.bulkDocs(finalData), {
152
- tableId: table._id,
153
- })
151
+ await quotas.addRows(finalData.length, () => db.bulkDocs(finalData))
154
152
  await events.rows.imported(table, "csv", finalData.length)
155
153
  return table
156
154
  }
@@ -34,13 +34,18 @@ describe("/rows", () => {
34
34
  .expect(status)
35
35
 
36
36
  const getRowUsage = async () => {
37
- const { total } = await config.doInContext(null, () => quotas.getCurrentUsageValues(QuotaUsageType.STATIC, StaticQuotaName.ROWS))
38
- return total
37
+ return config.doInContext(null, () =>
38
+ quotas.getCurrentUsageValue(QuotaUsageType.STATIC, StaticQuotaName.ROWS)
39
+ )
39
40
  }
40
41
 
41
42
  const getQueryUsage = async () => {
42
- const { total } = await config.doInContext(null, () => quotas.getCurrentUsageValues(QuotaUsageType.MONTHLY, MonthlyQuotaName.QUERIES))
43
- return total
43
+ return config.doInContext(null, () =>
44
+ quotas.getCurrentUsageValue(
45
+ QuotaUsageType.MONTHLY,
46
+ MonthlyQuotaName.QUERIES
47
+ )
48
+ )
44
49
  }
45
50
 
46
51
  const assertRowUsage = async expected => {
@@ -55,26 +60,26 @@ describe("/rows", () => {
55
60
 
56
61
  describe("save, load, update", () => {
57
62
  it("returns a success message when the row is created", async () => {
58
- const rowUsage = await getRowUsage()
59
- const queryUsage = await getQueryUsage()
60
-
61
- const res = await request
62
- .post(`/api/${row.tableId}/rows`)
63
- .send(row)
64
- .set(config.defaultHeaders())
65
- .expect('Content-Type', /json/)
66
- .expect(200)
67
- expect(res.res.statusMessage).toEqual(`${table.name} saved successfully`)
68
- expect(res.body.name).toEqual("Test Contact")
69
- expect(res.body._rev).toBeDefined()
70
- await assertRowUsage(rowUsage + 1)
71
- await assertQueryUsage(queryUsage + 1)
63
+ // const rowUsage = await getRowUsage()
64
+ // const queryUsage = await getQueryUsage()
65
+ //
66
+ // const res = await request
67
+ // .post(`/api/${row.tableId}/rows`)
68
+ // .send(row)
69
+ // .set(config.defaultHeaders())
70
+ // .expect('Content-Type', /json/)
71
+ // .expect(200)
72
+ // expect(res.res.statusMessage).toEqual(`${table.name} saved successfully`)
73
+ // expect(res.body.name).toEqual("Test Contact")
74
+ // expect(res.body._rev).toBeDefined()
75
+ // await assertRowUsage(rowUsage + 1)
76
+ // await assertQueryUsage(queryUsage + 1)
72
77
  })
73
78
 
74
79
  it("updates a row successfully", async () => {
75
80
  const existing = await config.createRow()
76
- const rowUsage = await getRowUsage()
77
- const queryUsage = await getQueryUsage()
81
+ // const rowUsage = await getRowUsage()
82
+ // const queryUsage = await getQueryUsage()
78
83
 
79
84
  const res = await request
80
85
  .post(`/api/${table._id}/rows`)
@@ -92,8 +97,8 @@ describe("/rows", () => {
92
97
  `${table.name} updated successfully.`
93
98
  )
94
99
  expect(res.body.name).toEqual("Updated Name")
95
- await assertRowUsage(rowUsage)
96
- await assertQueryUsage(queryUsage + 1)
100
+ // await assertRowUsage(rowUsage)
101
+ // await assertQueryUsage(queryUsage + 1)
97
102
  })
98
103
 
99
104
  it("should load a row", async () => {
@@ -66,9 +66,9 @@ exports.run = async function ({ inputs, appId, emitter }) {
66
66
  }
67
67
  const tableId = inputs.row.tableId
68
68
 
69
- // clear any undefined, null or empty string properties so that they aren't updated
69
+ // clear any falsy properties so that they aren't updated
70
70
  for (let propKey of Object.keys(inputs.row)) {
71
- if (inputs.row[propKey] == null || inputs.row[propKey] === "") {
71
+ if (!inputs.row[propKey] || inputs.row[propKey] === "") {
72
72
  delete inputs.row[propKey]
73
73
  }
74
74
  }
@@ -29,11 +29,16 @@ describe("Run through some parts of the automations system", () => {
29
29
  afterAll(setup.afterAll)
30
30
 
31
31
  it("should be able to init in builder", async () => {
32
- await triggers.externalTrigger(basicAutomation(), { a: 1, appId: "app_123" })
32
+ await triggers.externalTrigger(basicAutomation(), { a: 1 })
33
33
  await wait(100)
34
34
  expect(thread.execute).toHaveBeenCalled()
35
35
  })
36
36
 
37
+ it("should be able to init in prod", async () => {
38
+ await triggers.externalTrigger(basicAutomation(), { a: 1 })
39
+ await wait(100)
40
+ })
41
+
37
42
  it("should check coercion", async () => {
38
43
  const table = await config.createTable()
39
44
  const automation = basicAutomation()
@@ -13,7 +13,7 @@ import {
13
13
  getAppId,
14
14
  getProdAppDB,
15
15
  } from "@budibase/backend-core/context"
16
- import { context } from "@budibase/backend-core"
16
+ import { tenancy } from "@budibase/backend-core"
17
17
  import { quotas } from "@budibase/pro"
18
18
  import { Automation } from "@budibase/types"
19
19
 
@@ -28,14 +28,12 @@ const jobMessage = (job: any, message: string) => {
28
28
 
29
29
  export async function processEvent(job: any) {
30
30
  try {
31
- const automationId = job.data.automation._id
32
31
  console.log(jobMessage(job, "running"))
33
32
  // need to actually await these so that an error can be captured properly
34
- return await context.doInContext(job.data.event.appId, async () => {
33
+ const tenantId = tenancy.getTenantIDFromAppID(job.data.event.appId)
34
+ return await tenancy.doInTenant(tenantId, async () => {
35
35
  const runFn = () => Runner.run(job)
36
- return quotas.addAutomation(runFn, {
37
- automationId,
38
- })
36
+ return quotas.addAutomation(runFn)
39
37
  })
40
38
  } catch (err) {
41
39
  const errJson = JSON.stringify(err)
@@ -31,7 +31,6 @@ exports.NoEmptyFilterStrings = [
31
31
 
32
32
  exports.FieldTypes = {
33
33
  STRING: "string",
34
- BARCODEQR: "barcodeqr",
35
34
  LONGFORM: "longform",
36
35
  OPTIONS: "options",
37
36
  NUMBER: "number",
@@ -52,7 +51,6 @@ exports.CanSwitchTypes = [
52
51
  exports.FieldTypes.STRING,
53
52
  exports.FieldTypes.OPTIONS,
54
53
  exports.FieldTypes.LONGFORM,
55
- exports.FieldTypes.BARCODEQR,
56
54
  ],
57
55
  [exports.FieldTypes.BOOLEAN, exports.FieldTypes.NUMBER],
58
56
  ]
package/src/db/utils.js CHANGED
@@ -34,6 +34,8 @@ const DocumentType = {
34
34
  INSTANCE: "inst",
35
35
  LAYOUT: "layout",
36
36
  SCREEN: "screen",
37
+ DATASOURCE: "datasource",
38
+ DATASOURCE_PLUS: "datasource_plus",
37
39
  QUERY: "query",
38
40
  DEPLOYMENTS: "deployments",
39
41
  METADATA: "metadata",
@@ -31,7 +31,6 @@ export interface BearerAuthConfig {
31
31
 
32
32
  export interface RestConfig {
33
33
  url: string
34
- rejectUnauthorized: boolean
35
34
  defaultHeaders: {
36
35
  [key: string]: any
37
36
  }
package/src/index.ts CHANGED
@@ -8,7 +8,6 @@ function runServer() {
8
8
  checkDevelopmentEnvironment()
9
9
  fixPath()
10
10
  // this will setup http and https proxies form env variables
11
- process.env.GLOBAL_AGENT_FORCE_GLOBAL_AGENT = "false"
12
11
  bootstrap()
13
12
  require("./app")
14
13
  }
@@ -40,7 +40,6 @@ function generateSchema(
40
40
  case FieldTypes.STRING:
41
41
  case FieldTypes.OPTIONS:
42
42
  case FieldTypes.LONGFORM:
43
- case FieldTypes.BARCODEQR:
44
43
  schema.text(key)
45
44
  break
46
45
  case FieldTypes.NUMBER: