@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
@@ -8,13 +8,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __asyncValues = (this && this.__asyncValues) || function (o) {
12
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
13
- var m = o[Symbol.asyncIterator], i;
14
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
15
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
16
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
17
- };
18
11
  Object.defineProperty(exports, "__esModule", { value: true });
19
12
  const types_1 = require("@budibase/types");
20
13
  const mongodb_1 = require("mongodb");
@@ -47,232 +40,6 @@ const SCHEMA = {
47
40
  delete: {
48
41
  type: types_1.QueryType.JSON,
49
42
  },
50
- aggregate: {
51
- type: types_1.QueryType.JSON,
52
- steps: [
53
- {
54
- key: "$addFields",
55
- template: "{\n\t\n}",
56
- },
57
- {
58
- key: "$bucket",
59
- template: `{
60
- "groupBy": "",
61
- "boundaries": [],
62
- "default": "",
63
- "output": {}
64
- }`,
65
- },
66
- {
67
- key: "$bucketAuto",
68
- template: `{
69
- "groupBy": "",
70
- "buckets": 1,
71
- "output": {},
72
- "granularity": "R5"
73
- }`,
74
- },
75
- {
76
- key: "$changeStream",
77
- template: `{
78
- "allChangesForCluster": true,
79
- "fullDocument": "",
80
- "fullDocumentBeforeChange": "",
81
- "resumeAfter": 1,
82
- "showExpandedEvents": true,
83
- "startAfter": {},
84
- "startAtOperationTime": ""
85
- }`,
86
- },
87
- {
88
- key: "$collStats",
89
- template: `{
90
- "latencyStats": { "histograms": true } },
91
- "storageStats": { "scale": 1 } },
92
- "count": {},
93
- "queryExecStats": {}
94
- }`,
95
- },
96
- {
97
- key: "$count",
98
- template: ``,
99
- },
100
- {
101
- key: "$densify",
102
- template: `{
103
- "field": "",
104
- "partitionByFields": [],
105
- "range": {
106
- "step": 1,
107
- "unit": 1,
108
- "bounds": "full"
109
- }
110
- }`,
111
- },
112
- {
113
- key: "$documents",
114
- template: `[]`,
115
- },
116
- {
117
- key: "$facet",
118
- template: `{\n\t\n}`,
119
- },
120
- {
121
- key: "$fill",
122
- template: `{
123
- "partitionBy": "",
124
- "partitionByFields": [],
125
- "sortBy": {},
126
- "output": {}
127
- }`,
128
- },
129
- {
130
- key: "$geoNear",
131
- template: `{
132
- "near": {
133
- "type": "Point",
134
- "coordinates": [
135
- -73.98142, 40.71782
136
- ]
137
- },
138
- "key": "location",
139
- "distanceField": "dist.calculated",
140
- "query": { "category": "Parks" }
141
- }`,
142
- },
143
- {
144
- key: "$graphLookup",
145
- template: `{
146
- "from": "",
147
- "startWith": "",
148
- "connectFromField": "",
149
- "connectToField": "",
150
- "as": "",
151
- "maxDepth": 1,
152
- "depthField": "",
153
- "restrictSearchWithMatch": {}
154
- }`,
155
- },
156
- {
157
- key: "$group",
158
- template: `{
159
- "_id": ""
160
- }`,
161
- },
162
- {
163
- key: "$indexStats",
164
- template: "{\n\t\n}",
165
- },
166
- {
167
- key: "$limit",
168
- template: `1`,
169
- },
170
- {
171
- key: "$listLocalSessions",
172
- template: `{\n\t\n}`,
173
- },
174
- {
175
- key: "$listSessions",
176
- template: `{\n\t\n}`,
177
- },
178
- {
179
- key: "$lookup",
180
- template: `{
181
- "from": "",
182
- "localField": "",
183
- "foreignField": "",
184
- "as": ""
185
- }`,
186
- },
187
- {
188
- key: "$match",
189
- template: "{\n\t\n}",
190
- },
191
- {
192
- key: "$merge",
193
- template: `{
194
- "into": {},
195
- "on": "_id",
196
- "whenMatched": "replace",
197
- "whenNotMatched": "insert"
198
- }`,
199
- },
200
- {
201
- key: "$out",
202
- template: `{
203
- "db": "",
204
- "coll": ""
205
- }`,
206
- },
207
- {
208
- key: "$planCacheStats",
209
- template: "{\n\t\n}",
210
- },
211
- {
212
- key: "$project",
213
- template: "{\n\t\n}",
214
- },
215
- {
216
- key: "$redact",
217
- template: "",
218
- },
219
- {
220
- key: "$replaceRoot",
221
- template: `{ "newRoot": "" }`,
222
- },
223
- {
224
- key: "$replaceWith",
225
- template: ``,
226
- },
227
- {
228
- key: "$sample",
229
- template: `{ "size": 3 }`,
230
- },
231
- {
232
- key: "$set",
233
- template: "{\n\t\n}",
234
- },
235
- {
236
- key: "$setWindowFields",
237
- template: `{
238
- "partitionBy": "",
239
- "sortBy": {},
240
- "output": {}
241
- }`,
242
- },
243
- {
244
- key: "$skip",
245
- template: `1`,
246
- },
247
- {
248
- key: "$sort",
249
- template: "{\n\t\n}",
250
- },
251
- {
252
- key: "$sortByCount",
253
- template: "",
254
- },
255
- {
256
- key: "$unionWith",
257
- template: `{
258
- "coll": "",
259
- "pipeline": []
260
- }`,
261
- },
262
- {
263
- key: "$unset",
264
- template: "",
265
- },
266
- {
267
- key: "$unwind",
268
- template: `{
269
- "path": "",
270
- "includeArrayIndex": "",
271
- "preserveNullAndEmptyArrays": true
272
- }`,
273
- },
274
- ],
275
- },
276
43
  },
277
44
  extra: {
278
45
  collection: {
@@ -280,8 +47,8 @@ const SCHEMA = {
280
47
  type: types_1.DatasourceFieldType.STRING,
281
48
  required: true,
282
49
  },
283
- actionType: {
284
- displayName: "Query Type",
50
+ actionTypes: {
51
+ displayName: "Action Types",
285
52
  type: types_1.DatasourceFieldType.LIST,
286
53
  required: true,
287
54
  data: {
@@ -289,7 +56,6 @@ const SCHEMA = {
289
56
  create: ["insertOne", "insertMany"],
290
57
  update: ["updateOne", "updateMany"],
291
58
  delete: ["deleteOne", "deleteMany"],
292
- aggregate: ["json", "pipeline"],
293
59
  },
294
60
  },
295
61
  },
@@ -316,7 +82,7 @@ class MongoIntegration {
316
82
  json[field].toLowerCase().startsWith("objectid")) {
317
83
  const id = (_a = json[field].match(/(?<=objectid\(['"]).*(?=['"]\))/gi)) === null || _a === void 0 ? void 0 : _a[0];
318
84
  if (id) {
319
- json[field] = mongodb_1.ObjectId.createFromHexString(id);
85
+ json[field] = mongodb_1.ObjectID.createFromHexString(id);
320
86
  }
321
87
  }
322
88
  }
@@ -379,7 +145,7 @@ class MongoIntegration {
379
145
  let json = this.createObjectIds(query.json);
380
146
  // For mongodb we add an extra actionType to specify
381
147
  // which method we want to call on the collection
382
- switch (query.extra.actionType) {
148
+ switch (query.extra.actionTypes) {
383
149
  case "insertOne": {
384
150
  return yield collection.insertOne(json);
385
151
  }
@@ -387,7 +153,7 @@ class MongoIntegration {
387
153
  return yield collection.insertMany(json);
388
154
  }
389
155
  default: {
390
- throw new Error(`actionType ${query.extra.actionType} does not exist on DB for create`);
156
+ throw new Error(`actionType ${query.extra.actionTypes} does not exist on DB for create`);
391
157
  }
392
158
  }
393
159
  }
@@ -407,7 +173,7 @@ class MongoIntegration {
407
173
  const db = this.client.db(this.config.db);
408
174
  const collection = db.collection(query.extra.collection);
409
175
  let json = this.createObjectIds(query.json);
410
- switch (query.extra.actionType) {
176
+ switch (query.extra.actionTypes) {
411
177
  case "find": {
412
178
  return yield collection.find(json).toArray();
413
179
  }
@@ -428,7 +194,7 @@ class MongoIntegration {
428
194
  return yield collection.distinct(json);
429
195
  }
430
196
  default: {
431
- throw new Error(`actionType ${query.extra.actionType} does not exist on DB for read`);
197
+ throw new Error(`actionType ${query.extra.actionTypes} does not exist on DB for read`);
432
198
  }
433
199
  }
434
200
  }
@@ -452,7 +218,7 @@ class MongoIntegration {
452
218
  queryJson = this.parseQueryParams(queryJson, "update");
453
219
  }
454
220
  let json = this.createObjectIds(queryJson);
455
- switch (query.extra.actionType) {
221
+ switch (query.extra.actionTypes) {
456
222
  case "updateOne": {
457
223
  return yield collection.updateOne(json.filter, json.update, json.options);
458
224
  }
@@ -460,7 +226,7 @@ class MongoIntegration {
460
226
  return yield collection.updateMany(json.filter, json.update, json.options);
461
227
  }
462
228
  default: {
463
- throw new Error(`actionType ${query.extra.actionType} does not exist on DB for update`);
229
+ throw new Error(`actionType ${query.extra.actionTypes} does not exist on DB for update`);
464
230
  }
465
231
  }
466
232
  }
@@ -490,7 +256,7 @@ class MongoIntegration {
490
256
  options: {},
491
257
  };
492
258
  }
493
- switch (query.extra.actionType) {
259
+ switch (query.extra.actionTypes) {
494
260
  case "deleteOne": {
495
261
  return yield collection.deleteOne(json.filter, json.options);
496
262
  }
@@ -498,64 +264,9 @@ class MongoIntegration {
498
264
  return yield collection.deleteMany(json.filter, json.options);
499
265
  }
500
266
  default: {
501
- throw new Error(`actionType ${query.extra.actionType} does not exist on DB for delete`);
502
- }
503
- }
504
- }
505
- catch (err) {
506
- console.error("Error writing to mongodb", err);
507
- throw err;
508
- }
509
- finally {
510
- yield this.client.close();
511
- }
512
- });
513
- }
514
- aggregate(query) {
515
- var e_1, _a, e_2, _b;
516
- var _c;
517
- return __awaiter(this, void 0, void 0, function* () {
518
- try {
519
- yield this.connect();
520
- const db = this.client.db(this.config.db);
521
- const collection = db.collection(query.extra.collection);
522
- let response = [];
523
- if (((_c = query.extra) === null || _c === void 0 ? void 0 : _c.actionType) === "pipeline") {
524
- try {
525
- for (var _d = __asyncValues(collection.aggregate(query.steps.map(({ key, value }) => {
526
- let temp = {};
527
- temp[key] = JSON.parse(value.value);
528
- return this.createObjectIds(temp);
529
- }))), _e; _e = yield _d.next(), !_e.done;) {
530
- const doc = _e.value;
531
- response.push(doc);
532
- }
533
- }
534
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
535
- finally {
536
- try {
537
- if (_e && !_e.done && (_a = _d.return)) yield _a.call(_d);
538
- }
539
- finally { if (e_1) throw e_1.error; }
540
- }
541
- }
542
- else {
543
- const stages = query.json;
544
- try {
545
- for (var _f = __asyncValues(collection.aggregate(stages ? this.createObjectIds(stages) : [])), _g; _g = yield _f.next(), !_g.done;) {
546
- const doc = _g.value;
547
- response.push(doc);
548
- }
549
- }
550
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
551
- finally {
552
- try {
553
- if (_g && !_g.done && (_b = _f.return)) yield _b.call(_f);
554
- }
555
- finally { if (e_2) throw e_2.error; }
267
+ throw new Error(`actionType ${query.extra.actionTypes} does not exist on DB for delete`);
556
268
  }
557
269
  }
558
- return response;
559
270
  }
560
271
  catch (err) {
561
272
  console.error("Error writing to mongodb", err);
@@ -1,27 +1,4 @@
1
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
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
3
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
4
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -38,7 +15,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
38
15
  const types_1 = require("@budibase/types");
39
16
  const datasource_1 = require("../definitions/datasource");
40
17
  const lodash_1 = require("lodash");
41
- const https = __importStar(require("https"));
42
18
  const querystring_1 = __importDefault(require("querystring"));
43
19
  const fetch = require("node-fetch");
44
20
  const { formatBytes } = require("../utilities");
@@ -96,11 +72,11 @@ const SCHEMA = {
96
72
  required: false,
97
73
  default: {},
98
74
  },
99
- rejectUnauthorized: {
100
- display: "Reject Unauthorized",
75
+ legacyHttpParser: {
76
+ display: "Legacy HTTP Support",
101
77
  type: types_1.DatasourceFieldType.BOOLEAN,
102
- default: true,
103
78
  required: false,
79
+ default: false,
104
80
  },
105
81
  },
106
82
  query: {
@@ -221,11 +197,8 @@ class RestIntegration {
221
197
  queryString = `${paginationString}&${queryString}`;
222
198
  }
223
199
  }
224
- if (queryString) {
225
- // make sure the query string is fully encoded
226
- queryString = "?" + querystring_1.default.encode(querystring_1.default.decode(queryString));
227
- }
228
- const main = `${path}${queryString}`;
200
+ // make sure the query string is fully encoded
201
+ const main = `${path}?${querystring_1.default.encode(querystring_1.default.decode(queryString))}`;
229
202
  let complete = main;
230
203
  if (this.config.url && !main.startsWith("http")) {
231
204
  complete = !this.config.url ? main : `${this.config.url}/${main}`;
@@ -345,12 +318,6 @@ class RestIntegration {
345
318
  }
346
319
  let input = { method, headers: this.headers };
347
320
  input = this.addBody(bodyType, requestBody, input, pagination, paginationValues);
348
- if (this.config.rejectUnauthorized == false) {
349
- input.agent = new https.Agent({
350
- rejectUnauthorized: false,
351
- });
352
- }
353
- // Deprecated by rejectUnauthorized
354
321
  if (this.config.legacyHttpParser) {
355
322
  // https://github.com/nodejs/node/issues/43798
356
323
  input.extraHttpOptions = { insecureHTTPParser: true };
@@ -14,7 +14,9 @@ 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 pro_1.plugins.checkPluginQuotas();
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
+ }));
18
20
  }
19
21
  catch (err) {
20
22
  backend_core_1.logging.logAlert("Failed to update plugin quotas", err);
@@ -36,15 +36,19 @@ 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"));
40
39
  /**
41
- * Synchronise quotas to the state of the db.
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.
42
47
  */
43
48
  const run = () => __awaiter(void 0, void 0, void 0, function* () {
44
49
  yield (0, usageQuotas_1.runQuotaMigration)(() => __awaiter(void 0, void 0, void 0, function* () {
45
50
  yield syncApps.run();
46
51
  yield syncRows.run();
47
- yield syncPlugins.run();
48
52
  }));
49
53
  });
50
54
  exports.run = run;
@@ -16,6 +16,7 @@ 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
19
20
  const devApps = yield (0, db_1.getAllApps)({ dev: true });
20
21
  const appCount = devApps ? devApps.length : 0;
21
22
  // sync app count
@@ -17,19 +17,15 @@ 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
20
21
  const allApps = yield (0, db_1.getAllApps)({ all: true });
22
+ // @ts-ignore
21
23
  const appIds = allApps ? allApps.map((app) => app.appId) : [];
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
- });
24
+ const rows = yield (0, rows_1.getUniqueRows)(appIds);
25
+ const rowCount = rows ? rows.length : 0;
30
26
  // sync row count
31
27
  const tenantId = (0, tenancy_1.getTenantId)();
32
28
  console.log(`[Tenant: ${tenantId}] Syncing row count: ${rowCount}`);
33
- yield pro_1.quotas.setUsagePerApp(counts, types_1.StaticQuotaName.ROWS, types_1.QuotaUsageType.STATIC);
29
+ yield pro_1.quotas.setUsage(rowCount, types_1.StaticQuotaName.ROWS, types_1.QuotaUsageType.STATIC);
34
30
  });
35
31
  exports.run = run;
@@ -41,9 +41,10 @@ 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 syncQuotas = __importStar(require("./functions/syncQuotas"));
44
+ const quota1 = __importStar(require("./functions/quotas1"));
45
45
  const appUrls = __importStar(require("./functions/appUrls"));
46
46
  const backfill = __importStar(require("./functions/backfill"));
47
+ const pluginCount = __importStar(require("./functions/pluginCount"));
47
48
  /**
48
49
  * Populate the migration function and additional configuration from
49
50
  * the static migration definitions.
@@ -57,8 +58,8 @@ const buildMigrations = () => {
57
58
  serverMigrations.push(Object.assign(Object.assign({}, definition), { fn: userEmailViewCasing.run }));
58
59
  break;
59
60
  }
60
- case types_1.MigrationName.SYNC_QUOTAS: {
61
- serverMigrations.push(Object.assign(Object.assign({}, definition), { fn: syncQuotas.run }));
61
+ case types_1.MigrationName.QUOTAS_1: {
62
+ serverMigrations.push(Object.assign(Object.assign({}, definition), { fn: quota1.run }));
62
63
  break;
63
64
  }
64
65
  case types_1.MigrationName.APP_URLS: {
@@ -77,6 +78,11 @@ const buildMigrations = () => {
77
78
  serverMigrations.push(Object.assign(Object.assign({}, definition), { fn: backfill.installation.run, silent: !!environment_1.default.SELF_HOSTED, preventRetry: !!environment_1.default.SELF_HOSTED }));
78
79
  break;
79
80
  }
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
+ }
80
86
  }
81
87
  }
82
88
  return serverMigrations;
@@ -95,11 +101,34 @@ const migrate = (options) => __awaiter(void 0, void 0, void 0, function* () {
95
101
  });
96
102
  exports.migrate = migrate;
97
103
  const migrateWithLock = (options) => __awaiter(void 0, void 0, void 0, function* () {
98
- yield backend_core_1.locks.doWithLock({
99
- type: types_1.LockType.TRY_ONCE,
100
- name: types_1.LockName.MIGRATIONS,
101
- ttl: 1000 * 60 * 15, // auto expire the migration lock after 15 minutes
102
- }, () => __awaiter(void 0, void 0, void 0, function* () {
104
+ // get a new lock client
105
+ const redlock = yield backend_core_1.redis.clients.getMigrationsRedlock();
106
+ // lock for 15 minutes
107
+ const ttl = 1000 * 60 * 15;
108
+ let migrationLock;
109
+ // acquire lock
110
+ try {
111
+ migrationLock = yield redlock.lock("migrations", ttl);
112
+ }
113
+ catch (e) {
114
+ if (e.name === "LockError") {
115
+ return;
116
+ }
117
+ else {
118
+ throw e;
119
+ }
120
+ }
121
+ // run migrations
122
+ try {
103
123
  yield backend_core_1.migrations.runMigrations(exports.MIGRATIONS, options);
104
- }));
124
+ }
125
+ finally {
126
+ // release lock
127
+ try {
128
+ yield migrationLock.unlock();
129
+ }
130
+ catch (e) {
131
+ console.error("unable to release migration lock");
132
+ }
133
+ }
105
134
  });
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.30-alpha.6",
4
+ "version": "2.0.30",
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.6",
81
- "@budibase/client": "2.0.30-alpha.6",
82
- "@budibase/pro": "2.0.30-alpha.6",
83
- "@budibase/string-templates": "2.0.30-alpha.6",
84
- "@budibase/types": "2.0.30-alpha.6",
80
+ "@budibase/backend-core": "^2.0.30",
81
+ "@budibase/client": "^2.0.30",
82
+ "@budibase/pro": "2.0.30",
83
+ "@budibase/string-templates": "^2.0.30",
84
+ "@budibase/types": "^2.0.30",
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",