@budibase/server 1.3.15-alpha.0 → 1.3.15

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 (250) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/index.3953692d.js +876 -0
  3. package/builder/assets/{index.f5c54dd2.css → index.a70e216a.css} +2 -2
  4. package/builder/assets/vendor.5e1fe644.css +1 -0
  5. package/builder/assets/vendor.67dbd8fa.js +248 -0
  6. package/builder/index.html +4 -2
  7. package/coverage/clover.xml +254 -296
  8. package/coverage/coverage-final.json +17 -17
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +13 -82
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +20 -20
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +30 -30
  18. package/coverage/lcov-report/api/controllers/integration.js.html +6 -6
  19. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  24. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/screen.js.html +12 -204
  34. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  47. package/coverage/lcov-report/api/index.html +1 -1
  48. package/coverage/lcov-report/api/index.js.html +12 -12
  49. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/index.html +1 -1
  60. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  74. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  77. package/coverage/lcov-report/automations/actions.js.html +1 -1
  78. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  79. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  80. package/coverage/lcov-report/automations/index.html +1 -1
  81. package/coverage/lcov-report/automations/index.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/index.html +1 -1
  89. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  108. package/coverage/lcov-report/constants/index.html +1 -1
  109. package/coverage/lcov-report/constants/index.js.html +1 -1
  110. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  111. package/coverage/lcov-report/constants/screens.js.html +1 -1
  112. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  113. package/coverage/lcov-report/db/index.html +18 -18
  114. package/coverage/lcov-report/db/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  116. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  117. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  118. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  119. package/coverage/lcov-report/db/newid.js.html +2 -2
  120. package/coverage/lcov-report/db/utils.js.html +20 -56
  121. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  122. package/coverage/lcov-report/events/index.html +1 -1
  123. package/coverage/lcov-report/events/index.js.html +1 -1
  124. package/coverage/lcov-report/events/utils.js.html +1 -1
  125. package/coverage/lcov-report/index.html +28 -28
  126. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  127. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  128. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  129. package/coverage/lcov-report/middleware/builder.js.html +12 -12
  130. package/coverage/lcov-report/middleware/currentapp.js.html +33 -33
  131. package/coverage/lcov-report/middleware/index.html +1 -1
  132. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  133. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  134. package/coverage/lcov-report/middleware/resourceId.js.html +7 -7
  135. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  136. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  137. package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
  138. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  139. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  140. package/coverage/lcov-report/utilities/global.js.html +16 -16
  141. package/coverage/lcov-report/utilities/index.html +1 -1
  142. package/coverage/lcov-report/utilities/index.js.html +24 -24
  143. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
  144. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  145. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  146. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  147. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  148. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  150. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  151. package/coverage/lcov-report/utilities/security.js.html +2 -2
  152. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  153. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  154. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  156. package/coverage/lcov-report/utilities/users.js.html +1 -1
  157. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  158. package/coverage/lcov.info +445 -533
  159. package/dist/api/controllers/application.js +4 -5
  160. package/dist/api/controllers/component.js +1 -18
  161. package/dist/api/controllers/datasource.js +4 -4
  162. package/dist/api/controllers/integration.js +4 -4
  163. package/dist/api/controllers/screen.js +2 -51
  164. package/dist/api/controllers/static/index.js +0 -1
  165. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  166. package/dist/api/controllers/static/templates/preview.hbs +1 -3
  167. package/dist/api/routes/index.js +0 -2
  168. package/dist/app.js +0 -9
  169. package/dist/db/utils.js +1 -10
  170. package/dist/environment.js +2 -3
  171. package/dist/integrations/airtable.js +129 -126
  172. package/dist/integrations/arangodb.js +89 -86
  173. package/dist/integrations/base/query.js +2 -2
  174. package/dist/integrations/couchdb.js +83 -80
  175. package/dist/integrations/dynamodb.js +164 -161
  176. package/dist/integrations/elasticsearch.js +138 -135
  177. package/dist/integrations/firebase.js +157 -154
  178. package/dist/integrations/googlesheets.js +327 -323
  179. package/dist/integrations/index.js +51 -93
  180. package/dist/integrations/microsoftSqlServer.js +243 -240
  181. package/dist/integrations/mongodb.js +242 -239
  182. package/dist/integrations/mysql.js +219 -215
  183. package/dist/integrations/oracle.js +322 -318
  184. package/dist/integrations/postgres.js +265 -262
  185. package/dist/integrations/redis.js +139 -134
  186. package/dist/integrations/rest.js +292 -289
  187. package/dist/integrations/s3.js +64 -61
  188. package/dist/integrations/snowflake.js +86 -83
  189. package/dist/package.json +0 -2
  190. package/dist/threads/query.js +2 -2
  191. package/dist/tsconfig.build.tsbuildinfo +1 -1
  192. package/dist/utilities/fileSystem/index.js +10 -66
  193. package/package.json +6 -8
  194. package/scripts/dev/manage.js +0 -1
  195. package/src/api/controllers/application.ts +1 -1
  196. package/src/api/controllers/component.js +2 -25
  197. package/src/api/controllers/datasource.js +4 -4
  198. package/src/api/controllers/integration.js +4 -4
  199. package/src/api/controllers/screen.js +1 -65
  200. package/src/api/controllers/static/index.ts +0 -1
  201. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  202. package/src/api/controllers/static/templates/preview.hbs +1 -3
  203. package/src/api/routes/index.ts +0 -2
  204. package/src/api/routes/tests/query.spec.js +25 -8
  205. package/src/app.ts +0 -12
  206. package/src/db/utils.js +0 -12
  207. package/src/environment.js +2 -3
  208. package/src/integrations/airtable.ts +118 -116
  209. package/src/integrations/arangodb.ts +89 -87
  210. package/src/integrations/base/query.ts +2 -2
  211. package/src/integrations/couchdb.ts +89 -83
  212. package/src/integrations/dynamodb.ts +175 -173
  213. package/src/integrations/elasticsearch.ts +122 -120
  214. package/src/integrations/firebase.ts +159 -157
  215. package/src/integrations/googlesheets.ts +338 -328
  216. package/src/integrations/index.ts +21 -59
  217. package/src/integrations/microsoftSqlServer.ts +251 -249
  218. package/src/integrations/mongodb.ts +258 -261
  219. package/src/integrations/mysql.ts +234 -229
  220. package/src/integrations/oracle.ts +380 -373
  221. package/src/integrations/postgres.ts +268 -264
  222. package/src/integrations/redis.ts +132 -128
  223. package/src/integrations/rest.ts +329 -324
  224. package/src/integrations/s3.ts +71 -68
  225. package/src/integrations/snowflake.ts +82 -80
  226. package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
  227. package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
  228. package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
  229. package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
  230. package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
  231. package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
  232. package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
  233. package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
  234. package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
  235. package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
  236. package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
  237. package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
  238. package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
  239. package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
  240. package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
  241. package/src/module.d.ts +0 -1
  242. package/src/threads/query.ts +2 -2
  243. package/src/utilities/fileSystem/index.js +9 -70
  244. package/builder/assets/index.b266d29f.js +0 -995
  245. package/dist/api/controllers/plugin.js +0 -119
  246. package/dist/api/routes/plugin.js +0 -38
  247. package/dist/watch.js +0 -77
  248. package/src/api/controllers/plugin.ts +0 -110
  249. package/src/api/routes/plugin.ts +0 -13
  250. package/src/watch.ts +0 -38
@@ -16,16 +16,12 @@ const { doWithDB, dangerousGetDB, closeDB, } = require("@budibase/backend-core/d
16
16
  const { ObjectStoreBuckets } = require("../../constants");
17
17
  const { upload, retrieve, retrieveToTmp, streamUpload, deleteFolder, downloadTarball, deleteFiles, } = require("./utilities");
18
18
  const { updateClientLibrary } = require("./clientLibrary");
19
- const { checkSlashesInUrl } = require("../");
20
19
  const env = require("../../environment");
21
20
  const { USER_METDATA_PREFIX, LINK_USER_METADATA_PREFIX, TABLE_ROW_PREFIX, } = require("../../db/utils");
22
21
  const MemoryStream = require("memorystream");
23
22
  const { getAppId } = require("@budibase/backend-core/context");
24
- const tar = require("tar");
25
- const fetch = require("node-fetch");
26
23
  const TOP_LEVEL_PATH = join(__dirname, "..", "..", "..");
27
24
  const NODE_MODULES_PATH = join(TOP_LEVEL_PATH, "node_modules");
28
- const DATASOURCE_PATH = join(budibaseTempDir(), "datasource");
29
25
  /**
30
26
  * The single stack system (Cloud and Builder) should not make use of the file system where possible,
31
27
  * this file handles all of the file access for the system with the intention of limiting it all to one
@@ -39,7 +35,16 @@ const DATASOURCE_PATH = join(budibaseTempDir(), "datasource");
39
35
  exports.init = () => {
40
36
  const tempDir = budibaseTempDir();
41
37
  if (!fs.existsSync(tempDir)) {
42
- fs.mkdirSync(tempDir);
38
+ // some test cases fire this quickly enough that
39
+ // synchronous cases can end up here at the same time
40
+ try {
41
+ fs.mkdirSync(tempDir);
42
+ }
43
+ catch (err) {
44
+ if (!err || err.code !== "EEXIST") {
45
+ throw err;
46
+ }
47
+ }
43
48
  }
44
49
  const clientLibPath = join(budibaseTempDir(), "budibase-client.js");
45
50
  if (env.isTest() && !fs.existsSync(clientLibPath)) {
@@ -91,12 +96,6 @@ exports.getTemplateStream = (template) => __awaiter(void 0, void 0, void 0, func
91
96
  exports.loadHandlebarsFile = path => {
92
97
  return fs.readFileSync(path, "utf8");
93
98
  };
94
- /**
95
- * Same as above just with a different name.
96
- */
97
- exports.loadJSFile = (directory, name) => {
98
- return fs.readFileSync(join(directory, name), "utf8");
99
- };
100
99
  /**
101
100
  * When return a file from the API need to write the file to the system temporarily so we
102
101
  * can create a read stream to send.
@@ -295,61 +294,6 @@ exports.cleanup = appIds => {
295
294
  }
296
295
  }
297
296
  };
298
- exports.extractPluginTarball = (file) => __awaiter(void 0, void 0, void 0, function* () {
299
- if (!file.name.endsWith(".tar.gz")) {
300
- throw new Error("Plugin must be compressed into a gzipped tarball.");
301
- }
302
- const path = join(budibaseTempDir(), file.name.split(".tar.gz")[0]);
303
- // remove old tmp directories automatically - don't combine
304
- if (fs.existsSync(path)) {
305
- fs.rmSync(path, { recursive: true, force: true });
306
- }
307
- fs.mkdirSync(path);
308
- yield tar.extract({
309
- file: file.path,
310
- C: path,
311
- });
312
- let metadata = {};
313
- try {
314
- const pkg = fs.readFileSync(join(path, "package.json"), "utf8");
315
- const schema = fs.readFileSync(join(path, "schema.json"), "utf8");
316
- metadata.schema = JSON.parse(schema);
317
- metadata.package = JSON.parse(pkg);
318
- }
319
- catch (err) {
320
- throw new Error("Unable to process schema.json/package.json in plugin.");
321
- }
322
- return { metadata, directory: path };
323
- });
324
- exports.getDatasourcePlugin = (name, url, hash) => __awaiter(void 0, void 0, void 0, function* () {
325
- if (!fs.existsSync(DATASOURCE_PATH)) {
326
- fs.mkdirSync(DATASOURCE_PATH);
327
- }
328
- const filename = join(DATASOURCE_PATH, name);
329
- const metadataName = `${filename}.bbmetadata`;
330
- if (fs.existsSync(filename)) {
331
- const currentHash = fs.readFileSync(metadataName, "utf8");
332
- // if hash is the same return the file, otherwise remove it and re-download
333
- if (currentHash === hash) {
334
- return require(filename);
335
- }
336
- else {
337
- console.log(`Updating plugin: ${name}`);
338
- fs.unlinkSync(filename);
339
- }
340
- }
341
- const fullUrl = checkSlashesInUrl(`${env.MINIO_URL}/${ObjectStoreBuckets.PLUGINS}/${url}`);
342
- const response = yield fetch(fullUrl);
343
- if (response.status === 200) {
344
- const content = yield response.text();
345
- fs.writeFileSync(filename, content);
346
- fs.writeFileSync(metadataName, hash);
347
- require(filename);
348
- }
349
- else {
350
- throw new Error(`Unable to retrieve plugin - reason: ${yield response.text()}`);
351
- }
352
- });
353
297
  /**
354
298
  * Full function definition for below can be found in the utilities.
355
299
  */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.3.15-alpha.0",
4
+ "version": "1.3.15",
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": "1.3.15-alpha.0",
81
- "@budibase/client": "1.3.15-alpha.0",
80
+ "@budibase/backend-core": "^1.3.15",
81
+ "@budibase/client": "^1.3.15",
82
82
  "@budibase/pro": "1.3.13",
83
- "@budibase/string-templates": "1.3.15-alpha.0",
84
- "@budibase/types": "1.3.15-alpha.0",
83
+ "@budibase/string-templates": "^1.3.15",
84
+ "@budibase/types": "^1.3.15",
85
85
  "@bull-board/api": "3.7.0",
86
86
  "@bull-board/koa": "3.9.4",
87
87
  "@elastic/elasticsearch": "7.10.0",
@@ -95,7 +95,6 @@
95
95
  "bcryptjs": "2.4.3",
96
96
  "bull": "4.8.5",
97
97
  "chmodr": "1.2.0",
98
- "chokidar": "3.5.3",
99
98
  "csvtojson": "2.0.10",
100
99
  "curlconverter": "3.21.0",
101
100
  "dotenv": "8.2.0",
@@ -141,7 +140,6 @@
141
140
  "snowflake-promise": "^4.5.0",
142
141
  "svelte": "3.49.0",
143
142
  "swagger-parser": "10.0.3",
144
- "tar": "6.1.11",
145
143
  "to-json-schema": "0.2.5",
146
144
  "uuid": "3.3.2",
147
145
  "validate.js": "0.13.1",
@@ -198,5 +196,5 @@
198
196
  "optionalDependencies": {
199
197
  "oracledb": "5.3.0"
200
198
  },
201
- "gitHead": "38f3c6d1d713f5e1bd18fdd81bdffb9bf7d4f9d3"
199
+ "gitHead": "735709a59a4f62b5b91d1e4477da7c9b5dd5d8ac"
202
200
  }
@@ -58,7 +58,6 @@ async function init() {
58
58
  DEPLOYMENT_ENVIRONMENT: "development",
59
59
  BB_ADMIN_USER_EMAIL: "",
60
60
  BB_ADMIN_USER_PASSWORD: "",
61
- PLUGINS_DIR: "",
62
61
  }
63
62
  let envFile = ""
64
63
  Object.keys(envFileJson).forEach(key => {
@@ -572,7 +572,7 @@ export const sync = async (ctx: any, next: any) => {
572
572
  }
573
573
  }
574
574
 
575
- export const updateAppPackage = async (appPackage: any, appId: any) => {
575
+ const updateAppPackage = async (appPackage: any, appId: any) => {
576
576
  return context.doInAppContext(appId, async () => {
577
577
  const db = context.getAppDB()
578
578
  const application = await db.get(DocumentType.APP_METADATA)
@@ -1,8 +1,6 @@
1
- const { DocumentType, getPluginParams } = require("../../db/utils")
1
+ const { DocumentType } = require("../../db/utils")
2
2
  const { getComponentLibraryManifest } = require("../../utilities/fileSystem")
3
3
  const { getAppDB } = require("@budibase/backend-core/context")
4
- const { getGlobalDB } = require("@budibase/backend-core/tenancy")
5
- const env = require("../../environment")
6
4
 
7
5
  exports.fetchAppComponentDefinitions = async function (ctx) {
8
6
  try {
@@ -12,6 +10,7 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
12
10
  let componentManifests = await Promise.all(
13
11
  app.componentLibraries.map(async library => {
14
12
  let manifest = await getComponentLibraryManifest(library)
13
+
15
14
  return {
16
15
  manifest,
17
16
  library,
@@ -32,28 +31,6 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
32
31
  }
33
32
  }
34
33
  }
35
-
36
- // for now custom components only supported in self-host
37
- if (env.SELF_HOSTED) {
38
- // Add custom components
39
- const globalDB = getGlobalDB()
40
- const response = await globalDB.allDocs(
41
- getPluginParams(null, {
42
- include_docs: true,
43
- })
44
- )
45
- response.rows
46
- .map(row => row.doc)
47
- .filter(plugin => plugin.schema.type === "component")
48
- .forEach(plugin => {
49
- const fullComponentName = `plugin/${plugin.name}`
50
- definitions[fullComponentName] = {
51
- component: fullComponentName,
52
- ...plugin.schema.schema,
53
- }
54
- })
55
- }
56
-
57
34
  ctx.body = definitions
58
35
  } catch (err) {
59
36
  console.error(`component-definitions=failed`, err)
@@ -7,7 +7,7 @@ const {
7
7
  getTableParams,
8
8
  } = require("../../db/utils")
9
9
  const { BuildSchemaErrors, InvalidColumns } = require("../../constants")
10
- const { getIntegration } = require("../../integrations")
10
+ const { integrations } = require("../../integrations")
11
11
  const { getDatasourceAndQuery } = require("./row/utils")
12
12
  const { invalidateDynamicVariables } = require("../../threads/utils")
13
13
  const { getAppDB } = require("@budibase/backend-core/context")
@@ -114,7 +114,7 @@ exports.update = async function (ctx) {
114
114
 
115
115
  // Drain connection pools when configuration is changed
116
116
  if (datasource.source) {
117
- const source = await getIntegration(datasource.source)
117
+ const source = integrations[datasource.source]
118
118
  if (source && source.pool) {
119
119
  await source.pool.end()
120
120
  }
@@ -149,7 +149,7 @@ exports.save = async function (ctx) {
149
149
 
150
150
  // Drain connection pools when configuration is changed
151
151
  if (datasource.source) {
152
- const source = await getIntegration(datasource.source)
152
+ const source = integrations[datasource.source]
153
153
  if (source && source.pool) {
154
154
  await source.pool.end()
155
155
  }
@@ -218,7 +218,7 @@ function updateError(error, newError, tables) {
218
218
  }
219
219
 
220
220
  const buildSchemaHelper = async datasource => {
221
- const Connector = await getIntegration(datasource.source)
221
+ const Connector = integrations[datasource.source]
222
222
 
223
223
  // Connect to the DB and build the schema
224
224
  const connector = new Connector(datasource.config)
@@ -1,11 +1,12 @@
1
- const { getDefinitions } = require("../../integrations")
1
+ const { cloneDeep } = require("lodash")
2
+ const { definitions } = require("../../integrations")
2
3
  const { SourceName } = require("@budibase/types")
3
4
  const googlesheets = require("../../integrations/googlesheets")
4
5
  const { featureFlags } = require("@budibase/backend-core")
5
6
 
6
7
  exports.fetch = async function (ctx) {
7
8
  ctx.status = 200
8
- const defs = await getDefinitions()
9
+ const defs = cloneDeep(definitions)
9
10
 
10
11
  // for google sheets integration google verification
11
12
  if (featureFlags.isEnabled(featureFlags.FeatureFlag.GOOGLE_SHEETS)) {
@@ -16,7 +17,6 @@ exports.fetch = async function (ctx) {
16
17
  }
17
18
 
18
19
  exports.find = async function (ctx) {
19
- const defs = await getDefinitions()
20
20
  ctx.status = 200
21
- ctx.body = defs[ctx.params.type]
21
+ ctx.body = definitions[ctx.params.type]
22
22
  }
@@ -1,14 +1,7 @@
1
- const {
2
- getScreenParams,
3
- generateScreenID,
4
- getPluginParams,
5
- DocumentType,
6
- } = require("../../db/utils")
1
+ const { getScreenParams, generateScreenID } = require("../../db/utils")
7
2
  const { AccessController } = require("@budibase/backend-core/roles")
8
3
  const { getAppDB } = require("@budibase/backend-core/context")
9
4
  const { events } = require("@budibase/backend-core")
10
- const { getGlobalDB } = require("@budibase/backend-core/tenancy")
11
- const { updateAppPackage } = require("./application")
12
5
 
13
6
  exports.fetch = async ctx => {
14
7
  const db = getAppDB()
@@ -39,47 +32,6 @@ exports.save = async ctx => {
39
32
 
40
33
  const response = await db.put(screen)
41
34
 
42
- // Find any custom components being used
43
- let pluginNames = []
44
- let pluginAdded = false
45
- findPlugins(screen.props, pluginNames)
46
- if (pluginNames.length) {
47
- const globalDB = getGlobalDB()
48
- const pluginsResponse = await globalDB.allDocs(
49
- getPluginParams(null, {
50
- include_docs: true,
51
- })
52
- )
53
- const requiredPlugins = pluginsResponse.rows
54
- .map(row => row.doc)
55
- .filter(plugin => {
56
- return (
57
- plugin.schema.type === "component" &&
58
- pluginNames.includes(`plugin/${plugin.name}`)
59
- )
60
- })
61
-
62
- // Update the app metadata
63
- const application = await db.get(DocumentType.APP_METADATA)
64
- let usedPlugins = application.usedPlugins || []
65
-
66
- requiredPlugins.forEach(plugin => {
67
- if (!usedPlugins.find(x => x._id === plugin._id)) {
68
- pluginAdded = true
69
- usedPlugins.push({
70
- _id: plugin._id,
71
- name: plugin.name,
72
- version: plugin.version,
73
- jsUrl: plugin.jsUrl,
74
- })
75
- }
76
- })
77
-
78
- if (pluginAdded) {
79
- await updateAppPackage({ usedPlugins }, ctx.appId)
80
- }
81
- }
82
-
83
35
  if (eventFn) {
84
36
  await eventFn(screen)
85
37
  }
@@ -88,7 +40,6 @@ exports.save = async ctx => {
88
40
  ...screen,
89
41
  _id: response.id,
90
42
  _rev: response.rev,
91
- pluginAdded,
92
43
  }
93
44
  }
94
45
 
@@ -105,18 +56,3 @@ exports.destroy = async ctx => {
105
56
  }
106
57
  ctx.status = 200
107
58
  }
108
-
109
- const findPlugins = (component, foundPlugins) => {
110
- if (!component) {
111
- return
112
- }
113
- if (component._component.startsWith("plugin")) {
114
- if (!foundPlugins.includes(component._component)) {
115
- foundPlugins.push(component._component)
116
- }
117
- }
118
- if (!component._children || !component._children.length) {
119
- return
120
- }
121
- component._children.forEach(child => findPlugins(child, foundPlugins))
122
- }
@@ -113,7 +113,6 @@ export const serveApp = async function (ctx: any) {
113
113
  production: env.isProd(),
114
114
  appId,
115
115
  clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
116
- usedPlugins: appInfo.usedPlugins,
117
116
  })
118
117
 
119
118
  const appHbs = loadHandlebarsFile(`${__dirname}/templates/app.hbs`)
@@ -3,7 +3,6 @@
3
3
  export let favicon = ""
4
4
 
5
5
  export let clientLibPath
6
- export let usedPlugins
7
6
  </script>
8
7
 
9
8
  <svelte:head>
@@ -84,15 +83,6 @@
84
83
  </script>
85
84
  <script type="application/javascript" src={clientLibPath}>
86
85
  </script>
87
- <!-- Custom components need inserted after the core client library -->
88
- <!-- But before loadBudibase is called -->
89
- {#if usedPlugins?.length}
90
- {#each usedPlugins as plugin}
91
- <script
92
- type="application/javascript"
93
- src={`/plugins/${plugin.jsUrl}`}></script>
94
- {/each}
95
- {/if}
96
86
  <script type="application/javascript">
97
87
  if (window.loadBudibase) {
98
88
  window.loadBudibase()
@@ -66,8 +66,7 @@
66
66
  customTheme,
67
67
  previewDevice,
68
68
  navigation,
69
- hiddenComponentIds,
70
- usedPlugins
69
+ hiddenComponentIds
71
70
  } = parsed
72
71
 
73
72
  // Set some flags so the app knows we're in the builder
@@ -82,7 +81,6 @@
82
81
  window["##BUDIBASE_PREVIEW_DEVICE##"] = previewDevice
83
82
  window["##BUDIBASE_PREVIEW_NAVIGATION##"] = navigation
84
83
  window["##BUDIBASE_HIDDEN_COMPONENT_IDS##"] = hiddenComponentIds
85
- window["##BUDIBASE_USED_PLUGINS##"] = usedPlugins
86
84
 
87
85
  // Initialise app
88
86
  try {
@@ -24,7 +24,6 @@ import metadataRoutes from "./metadata"
24
24
  import devRoutes from "./dev"
25
25
  import cloudRoutes from "./cloud"
26
26
  import migrationRoutes from "./migrations"
27
- import pluginRoutes from "./plugin"
28
27
 
29
28
  export { default as staticRoutes } from "./static"
30
29
  export { default as publicRoutes } from "./public"
@@ -58,5 +57,4 @@ export const mainRoutes = [
58
57
  tableRoutes,
59
58
  rowRoutes,
60
59
  migrationRoutes,
61
- pluginRoutes,
62
60
  ]
@@ -231,6 +231,20 @@ describe("/queries", () => {
231
231
  url: `/api/queries/preview`,
232
232
  })
233
233
  })
234
+
235
+ it("should fail with invalid integration type", async () => {
236
+ const { datasource } = await createInvalidIntegration()
237
+ await request
238
+ .post(`/api/queries/preview`)
239
+ .send({
240
+ datasourceId: datasource._id,
241
+ parameters: {},
242
+ fields: {},
243
+ queryVerb: "read",
244
+ })
245
+ .set(config.defaultHeaders())
246
+ .expect(400)
247
+ })
234
248
  })
235
249
 
236
250
  describe("execute", () => {
@@ -247,14 +261,17 @@ describe("/queries", () => {
247
261
  })
248
262
 
249
263
  it("should fail with invalid integration type", async () => {
250
- let error
251
- try {
252
- await createInvalidIntegration()
253
- } catch (err) {
254
- error = err
255
- }
256
- expect(error).toBeDefined()
257
- expect(error.message).toBe("No datasource implementation found.")
264
+ const { query, datasource } = await createInvalidIntegration()
265
+ await request
266
+ .post(`/api/queries/${query._id}`)
267
+ .send({
268
+ datasourceId: datasource._id,
269
+ parameters: {},
270
+ fields: {},
271
+ queryVerb: "read",
272
+ })
273
+ .set(config.defaultHeaders())
274
+ .expect(400)
258
275
  })
259
276
  })
260
277
 
package/src/app.ts CHANGED
@@ -26,12 +26,10 @@ const bullboard = require("./automations/bullboard")
26
26
  const { logAlert } = require("@budibase/backend-core/logging")
27
27
  const { pinoSettings } = require("@budibase/backend-core")
28
28
  const { Thread } = require("./threads")
29
- const fs = require("fs")
30
29
  import redis from "./utilities/redis"
31
30
  import * as migrations from "./migrations"
32
31
  import { events, installation, tenancy } from "@budibase/backend-core"
33
32
  import { createAdminUser, getChecklist } from "./utilities/workerRequests"
34
- import { watch } from "./watch"
35
33
 
36
34
  const app = new Koa()
37
35
 
@@ -141,16 +139,6 @@ module.exports = server.listen(env.PORT || 0, async () => {
141
139
  }
142
140
  }
143
141
 
144
- // monitor plugin directory if required
145
- if (
146
- env.SELF_HOSTED &&
147
- !env.MULTI_TENANCY &&
148
- env.PLUGINS_DIR &&
149
- fs.existsSync(env.PLUGINS_DIR)
150
- ) {
151
- watch()
152
- }
153
-
154
142
  // check for version updates
155
143
  await installation.checkInstallVersion()
156
144
 
package/src/db/utils.js CHANGED
@@ -42,7 +42,6 @@ const DocumentType = {
42
42
  MEM_VIEW: "view",
43
43
  USER_FLAG: "flag",
44
44
  AUTOMATION_METADATA: "meta_au",
45
- PLUGIN: "plg",
46
45
  }
47
46
 
48
47
  const InternalTables = {
@@ -371,10 +370,6 @@ exports.getMemoryViewParams = (otherProps = {}) => {
371
370
  return getDocParams(DocumentType.MEM_VIEW, null, otherProps)
372
371
  }
373
372
 
374
- exports.generatePluginID = name => {
375
- return `${DocumentType.PLUGIN}${SEPARATOR}${name}`
376
- }
377
-
378
373
  /**
379
374
  * This can be used with the db.allDocs to get a list of IDs
380
375
  */
@@ -384,10 +379,3 @@ exports.getMultiIDParams = ids => {
384
379
  include_docs: true,
385
380
  }
386
381
  }
387
-
388
- /**
389
- * Gets parameters for retrieving automations, this is a utility function for the getDocParams function.
390
- */
391
- exports.getPluginParams = (pluginId = null, otherProps = {}) => {
392
- return getDocParams(DocumentType.PLUGIN, pluginId, otherProps)
393
- }
@@ -37,8 +37,8 @@ function parseIntSafe(number) {
37
37
  let inThread = false
38
38
 
39
39
  module.exports = {
40
- // important
41
- PORT: process.env.PORT || process.env.APP_PORT,
40
+ // important - prefer app port to generic port
41
+ PORT: process.env.APP_PORT || process.env.PORT,
42
42
  JWT_SECRET: process.env.JWT_SECRET,
43
43
  COUCH_DB_URL: process.env.COUCH_DB_URL,
44
44
  MINIO_URL: process.env.MINIO_URL,
@@ -74,7 +74,6 @@ module.exports = {
74
74
  SQL_MAX_ROWS: process.env.SQL_MAX_ROWS,
75
75
  BB_ADMIN_USER_EMAIL: process.env.BB_ADMIN_USER_EMAIL,
76
76
  BB_ADMIN_USER_PASSWORD: process.env.BB_ADMIN_USER_PASSWORD,
77
- PLUGINS_DIR: process.env.PLUGINS_DIR || "/plugins",
78
77
  // flags
79
78
  ALLOW_DEV_AUTOMATIONS: process.env.ALLOW_DEV_AUTOMATIONS,
80
79
  DISABLE_THREADING: process.env.DISABLE_THREADING,