@budibase/server 1.3.21-alpha.1 → 1.3.21

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 (308) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/index.8d12d461.css +6 -0
  3. package/builder/assets/index.d354271c.js +879 -0
  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 +390 -451
  8. package/coverage/coverage-final.json +21 -21
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +8 -41
  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 +11 -68
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +34 -73
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +46 -46
  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 +2 -2
  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 -207
  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 +13 -13
  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 +2 -2
  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 +9 -9
  74. package/coverage/lcov-report/api/routes/utils/validators.js.html +12 -75
  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 +3 -3
  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 +46 -46
  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 +40 -46
  131. package/coverage/lcov-report/middleware/index.html +15 -15
  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 +15 -15
  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 +8 -32
  158. package/coverage/lcov.info +672 -798
  159. package/dist/api/controllers/application.js +5 -5
  160. package/dist/api/controllers/auth.js +0 -9
  161. package/dist/api/controllers/component.js +1 -14
  162. package/dist/api/controllers/datasource.js +8 -21
  163. package/dist/api/controllers/deploy/index.js +8 -1
  164. package/dist/api/controllers/integration.js +4 -4
  165. package/dist/api/controllers/row/external.js +1 -1
  166. package/dist/api/controllers/screen.js +2 -52
  167. package/dist/api/controllers/static/index.js +0 -1
  168. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  169. package/dist/api/controllers/static/templates/preview.hbs +1 -5
  170. package/dist/api/index.js +1 -1
  171. package/dist/api/routes/application.js +2 -3
  172. package/dist/api/routes/index.js +0 -2
  173. package/dist/api/routes/public/rows.js +82 -1
  174. package/dist/api/routes/public/tables.js +1 -1
  175. package/dist/api/routes/table.js +1 -1
  176. package/dist/api/routes/utils/validators.js +2 -20
  177. package/dist/app.js +1 -16
  178. package/dist/db/utils.js +1 -10
  179. package/dist/environment.js +0 -1
  180. package/dist/integrations/airtable.js +129 -126
  181. package/dist/integrations/arangodb.js +89 -86
  182. package/dist/integrations/base/query.js +2 -2
  183. package/dist/integrations/base/sqlTable.js +1 -3
  184. package/dist/integrations/couchdb.js +83 -80
  185. package/dist/integrations/dynamodb.js +164 -161
  186. package/dist/integrations/elasticsearch.js +138 -135
  187. package/dist/integrations/firebase.js +157 -154
  188. package/dist/integrations/googlesheets.js +327 -323
  189. package/dist/integrations/index.js +51 -99
  190. package/dist/integrations/microsoftSqlServer.js +243 -240
  191. package/dist/integrations/mongodb.js +242 -239
  192. package/dist/integrations/mysql.js +219 -215
  193. package/dist/integrations/oracle.js +322 -318
  194. package/dist/integrations/postgres.js +265 -262
  195. package/dist/integrations/redis.js +139 -134
  196. package/dist/integrations/rest.js +292 -289
  197. package/dist/integrations/s3.js +64 -61
  198. package/dist/integrations/snowflake.js +86 -83
  199. package/dist/middleware/currentapp.js +0 -2
  200. package/dist/migrations/functions/backfill/global.js +3 -0
  201. package/dist/migrations/functions/developerQuota.js +49 -0
  202. package/dist/{api/routes/plugin.js → migrations/functions/publishedAppsQuota.js} +21 -13
  203. package/dist/{api/controllers/plugin/url.js → migrations/functions/usageQuotas/syncDevelopers.js} +13 -13
  204. package/dist/{api/controllers/plugin/file.js → migrations/functions/usageQuotas/syncPublishedApps.js} +15 -13
  205. package/dist/migrations/index.js +10 -0
  206. package/dist/package.json +6 -9
  207. package/dist/tests/utilities/TestConfiguration.js +1 -1
  208. package/dist/threads/query.js +2 -2
  209. package/dist/tsconfig.build.tsbuildinfo +1 -1
  210. package/dist/utilities/fileSystem/index.js +1 -111
  211. package/dist/utilities/workerRequests.js +0 -4
  212. package/package.json +7 -10
  213. package/scripts/dev/manage.js +0 -4
  214. package/scripts/localdomain.js +1 -3
  215. package/specs/openapi.json +112 -115
  216. package/specs/openapi.yaml +94 -96
  217. package/specs/resources/misc.js +0 -116
  218. package/specs/resources/query.js +1 -1
  219. package/src/api/controllers/application.ts +2 -1
  220. package/src/api/controllers/auth.js +0 -11
  221. package/src/api/controllers/component.js +2 -21
  222. package/src/api/controllers/datasource.js +8 -21
  223. package/src/api/controllers/deploy/index.ts +6 -1
  224. package/src/api/controllers/integration.js +4 -4
  225. package/src/api/controllers/public/mapping/types.ts +0 -8
  226. package/src/api/controllers/row/external.js +1 -1
  227. package/src/api/controllers/screen.js +1 -66
  228. package/src/api/controllers/static/index.ts +1 -1
  229. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  230. package/src/api/controllers/static/templates/preview.hbs +1 -5
  231. package/src/api/index.js +1 -1
  232. package/src/api/routes/application.ts +2 -13
  233. package/src/api/routes/index.ts +0 -2
  234. package/src/api/routes/public/rows.ts +82 -1
  235. package/src/api/routes/public/tables.ts +1 -1
  236. package/src/api/routes/table.js +1 -1
  237. package/src/api/routes/tests/query.spec.js +25 -8
  238. package/src/api/routes/tests/user.spec.js +2 -0
  239. package/src/api/routes/utils/validators.js +5 -26
  240. package/src/app.ts +2 -25
  241. package/src/db/utils.js +0 -12
  242. package/src/definitions/openapi.ts +55 -56
  243. package/src/environment.js +0 -1
  244. package/src/integrations/airtable.ts +118 -116
  245. package/src/integrations/arangodb.ts +89 -87
  246. package/src/integrations/base/query.ts +2 -2
  247. package/src/integrations/base/sqlTable.ts +1 -3
  248. package/src/integrations/couchdb.ts +89 -83
  249. package/src/integrations/dynamodb.ts +175 -173
  250. package/src/integrations/elasticsearch.ts +122 -120
  251. package/src/integrations/firebase.ts +159 -157
  252. package/src/integrations/googlesheets.ts +338 -328
  253. package/src/integrations/index.ts +21 -64
  254. package/src/integrations/microsoftSqlServer.ts +251 -249
  255. package/src/integrations/mongodb.ts +258 -261
  256. package/src/integrations/mysql.ts +234 -229
  257. package/src/integrations/oracle.ts +380 -373
  258. package/src/integrations/postgres.ts +268 -264
  259. package/src/integrations/redis.ts +132 -128
  260. package/src/integrations/rest.ts +329 -324
  261. package/src/integrations/s3.ts +71 -68
  262. package/src/integrations/snowflake.ts +82 -80
  263. package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
  264. package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
  265. package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
  266. package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
  267. package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
  268. package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
  269. package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
  270. package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
  271. package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
  272. package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
  273. package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
  274. package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
  275. package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
  276. package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
  277. package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
  278. package/src/middleware/currentapp.js +0 -2
  279. package/src/migrations/functions/backfill/global.ts +3 -0
  280. package/src/migrations/functions/developerQuota.ts +15 -0
  281. package/src/migrations/functions/publishedAppsQuota.ts +13 -0
  282. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
  283. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
  284. package/src/migrations/index.ts +16 -0
  285. package/src/module.d.ts +0 -2
  286. package/src/tests/utilities/TestConfiguration.js +1 -1
  287. package/src/threads/query.ts +2 -2
  288. package/src/utilities/fileSystem/index.js +0 -130
  289. package/src/utilities/workerRequests.js +0 -8
  290. package/builder/assets/index.c9d3f9e8.js +0 -1005
  291. package/builder/assets/index.f1b70f52.css +0 -6
  292. package/dist/api/controllers/plugin/github.js +0 -69
  293. package/dist/api/controllers/plugin/index.js +0 -200
  294. package/dist/api/controllers/plugin/npm.js +0 -58
  295. package/dist/api/controllers/plugin/uploaders.js +0 -11
  296. package/dist/api/controllers/plugin/utils.js +0 -26
  297. package/dist/watch.js +0 -77
  298. package/dist/websocket.js +0 -22
  299. package/src/api/controllers/plugin/file.ts +0 -15
  300. package/src/api/controllers/plugin/github.ts +0 -75
  301. package/src/api/controllers/plugin/index.ts +0 -215
  302. package/src/api/controllers/plugin/npm.ts +0 -56
  303. package/src/api/controllers/plugin/uploaders.ts +0 -4
  304. package/src/api/controllers/plugin/url.ts +0 -12
  305. package/src/api/controllers/plugin/utils.ts +0 -19
  306. package/src/api/routes/plugin.ts +0 -14
  307. package/src/watch.ts +0 -38
  308. package/src/websocket.ts +0 -26
@@ -1,215 +0,0 @@
1
- import { ObjectStoreBuckets } from "../../../constants"
2
- import { loadJSFile } from "../../../utilities/fileSystem"
3
- import { npmUpload, urlUpload, githubUpload, fileUpload } from "./uploaders"
4
- import { getGlobalDB } from "@budibase/backend-core/tenancy"
5
- import { validate } from "@budibase/backend-core/plugins"
6
- import { generatePluginID, getPluginParams } from "../../../db/utils"
7
- import {
8
- uploadDirectory,
9
- deleteFolder,
10
- } from "@budibase/backend-core/objectStore"
11
- import { PluginType, FileType, PluginSource, Plugin } from "@budibase/types"
12
- import env from "../../../environment"
13
- import { ClientAppSocket } from "../../../websocket"
14
- import { events } from "@budibase/backend-core"
15
-
16
- export async function getPlugins(type?: PluginType) {
17
- const db = getGlobalDB()
18
- const response = await db.allDocs(
19
- getPluginParams(null, {
20
- include_docs: true,
21
- })
22
- )
23
- const plugins = response.rows.map((row: any) => row.doc)
24
- if (type) {
25
- return plugins.filter((plugin: any) => plugin.schema?.type === type)
26
- } else {
27
- return plugins
28
- }
29
- }
30
-
31
- export async function upload(ctx: any) {
32
- const plugins: FileType[] =
33
- ctx.request.files.file.length > 1
34
- ? Array.from(ctx.request.files.file)
35
- : [ctx.request.files.file]
36
- try {
37
- let docs = []
38
- // can do single or multiple plugins
39
- for (let plugin of plugins) {
40
- const doc = await processPlugin(plugin, PluginSource.FILE)
41
- docs.push(doc)
42
- }
43
- ctx.body = {
44
- message: "Plugin(s) uploaded successfully",
45
- plugins: docs,
46
- }
47
- } catch (err: any) {
48
- const errMsg = err?.message ? err?.message : err
49
-
50
- ctx.throw(400, `Failed to import plugin: ${errMsg}`)
51
- }
52
- }
53
-
54
- export async function create(ctx: any) {
55
- const { source, url, headers, githubToken } = ctx.request.body
56
-
57
- try {
58
- let metadata
59
- let directory
60
- // Generating random name as a backup and needed for url
61
- let name = "PLUGIN_" + Math.floor(100000 + Math.random() * 900000)
62
-
63
- switch (source) {
64
- case PluginSource.NPM:
65
- const { metadata: metadataNpm, directory: directoryNpm } =
66
- await npmUpload(url, name)
67
- metadata = metadataNpm
68
- directory = directoryNpm
69
- break
70
- case PluginSource.GITHUB:
71
- const { metadata: metadataGithub, directory: directoryGithub } =
72
- await githubUpload(url, name, githubToken)
73
- metadata = metadataGithub
74
- directory = directoryGithub
75
- break
76
- case PluginSource.URL:
77
- const headersObj = headers || {}
78
- const { metadata: metadataUrl, directory: directoryUrl } =
79
- await urlUpload(url, name, headersObj)
80
- metadata = metadataUrl
81
- directory = directoryUrl
82
- break
83
- }
84
-
85
- validate(metadata?.schema)
86
-
87
- // Only allow components in cloud
88
- if (!env.SELF_HOSTED && metadata?.schema?.type !== PluginType.COMPONENT) {
89
- throw new Error(
90
- "Only component plugins are supported outside of self-host"
91
- )
92
- }
93
-
94
- const doc = await storePlugin(metadata, directory, source)
95
-
96
- ctx.body = {
97
- message: "Plugin uploaded successfully",
98
- plugins: [doc],
99
- }
100
- } catch (err: any) {
101
- const errMsg = err?.message ? err?.message : err
102
-
103
- ctx.throw(400, `Failed to import plugin: ${errMsg}`)
104
- }
105
- ctx.status = 200
106
- }
107
-
108
- export async function fetch(ctx: any) {
109
- ctx.body = await getPlugins()
110
- }
111
-
112
- export async function destroy(ctx: any) {
113
- const db = getGlobalDB()
114
- const { pluginId } = ctx.params
115
-
116
- try {
117
- const plugin: Plugin = await db.get(pluginId)
118
- const bucketPath = `${plugin.name}/`
119
- await deleteFolder(ObjectStoreBuckets.PLUGINS, bucketPath)
120
-
121
- await db.remove(pluginId, plugin._rev)
122
- await events.plugin.deleted(plugin)
123
- } catch (err: any) {
124
- const errMsg = err?.message ? err?.message : err
125
-
126
- ctx.throw(400, `Failed to delete plugin: ${errMsg}`)
127
- }
128
-
129
- ctx.message = `Plugin ${ctx.params.pluginId} deleted.`
130
- ctx.status = 200
131
- }
132
-
133
- export async function storePlugin(
134
- metadata: any,
135
- directory: any,
136
- source?: PluginSource
137
- ) {
138
- const db = getGlobalDB()
139
- const version = metadata.package.version,
140
- name = metadata.package.name,
141
- description = metadata.package.description,
142
- hash = metadata.schema.hash
143
-
144
- // first open the tarball into tmp directory
145
- const bucketPath = `${name}/`
146
- const files = await uploadDirectory(
147
- ObjectStoreBuckets.PLUGINS,
148
- directory,
149
- bucketPath
150
- )
151
- const jsFile = files.find((file: any) => file.name.endsWith(".js"))
152
- if (!jsFile) {
153
- throw new Error(`Plugin missing .js file.`)
154
- }
155
- // validate the JS for a datasource
156
- if (metadata.schema.type === PluginType.DATASOURCE) {
157
- const js = loadJSFile(directory, jsFile.name)
158
- // TODO: this isn't safe - but we need full node environment
159
- // in future we should do this in a thread for safety
160
- try {
161
- eval(js)
162
- } catch (err: any) {
163
- const message = err?.message ? err.message : JSON.stringify(err)
164
- throw new Error(`JS invalid: ${message}`)
165
- }
166
- }
167
- const jsFileName = jsFile.name
168
- const pluginId = generatePluginID(name)
169
-
170
- // overwrite existing docs entirely if they exist
171
- let rev
172
- try {
173
- const existing = await db.get(pluginId)
174
- rev = existing._rev
175
- } catch (err) {
176
- rev = undefined
177
- }
178
- let doc: Plugin = {
179
- _id: pluginId,
180
- _rev: rev,
181
- ...metadata,
182
- name,
183
- version,
184
- hash,
185
- description,
186
- jsUrl: `${bucketPath}${jsFileName}`,
187
- }
188
-
189
- if (source) {
190
- doc = {
191
- ...doc,
192
- source,
193
- }
194
- }
195
-
196
- const response = await db.put(doc)
197
- await events.plugin.imported(doc)
198
- ClientAppSocket.emit("plugin-update", { name, hash })
199
- return {
200
- ...doc,
201
- _rev: response.rev,
202
- }
203
- }
204
-
205
- export async function processPlugin(plugin: FileType, source?: PluginSource) {
206
- const { metadata, directory } = await fileUpload(plugin)
207
- validate(metadata?.schema)
208
-
209
- // Only allow components in cloud
210
- if (!env.SELF_HOSTED && metadata?.schema?.type !== PluginType.COMPONENT) {
211
- throw new Error("Only component plugins are supported outside of self-host")
212
- }
213
-
214
- return await storePlugin(metadata, directory, source)
215
- }
@@ -1,56 +0,0 @@
1
- import {
2
- getPluginMetadata,
3
- findFileRec,
4
- extractTarball,
5
- deleteFolderFileSystem,
6
- } from "../../../utilities/fileSystem"
7
- import fetch from "node-fetch"
8
- import { join } from "path"
9
- import { downloadUnzipTarball } from "./utils"
10
-
11
- export async function npmUpload(url: string, name: string, headers = {}) {
12
- let npmTarballUrl = url
13
- let pluginName = name
14
-
15
- if (
16
- !npmTarballUrl.includes("https://www.npmjs.com") &&
17
- !npmTarballUrl.includes("https://registry.npmjs.org")
18
- ) {
19
- throw new Error("The plugin origin must be from NPM")
20
- }
21
-
22
- if (!npmTarballUrl.includes(".tgz")) {
23
- const npmPackageURl = url.replace(
24
- "https://www.npmjs.com/package/",
25
- "https://registry.npmjs.org/"
26
- )
27
- const response = await fetch(npmPackageURl)
28
- if (response.status !== 200) {
29
- throw new Error("NPM Package not found")
30
- }
31
-
32
- let npmDetails = await response.json()
33
- pluginName = npmDetails.name
34
- const npmVersion = npmDetails["dist-tags"].latest
35
- npmTarballUrl = npmDetails?.versions?.[npmVersion]?.dist?.tarball
36
-
37
- if (!npmTarballUrl) {
38
- throw new Error("NPM tarball url not found")
39
- }
40
- }
41
-
42
- const path = await downloadUnzipTarball(npmTarballUrl, pluginName, headers)
43
- const tarballPluginFile = findFileRec(path, ".tar.gz")
44
- if (!tarballPluginFile) {
45
- throw new Error("Tarball plugin file not found")
46
- }
47
-
48
- try {
49
- await extractTarball(tarballPluginFile, path)
50
- deleteFolderFileSystem(join(path, "package"))
51
- } catch (err: any) {
52
- throw new Error(err)
53
- }
54
-
55
- return await getPluginMetadata(path)
56
- }
@@ -1,4 +0,0 @@
1
- export { fileUpload } from "./file"
2
- export { githubUpload } from "./github"
3
- export { npmUpload } from "./npm"
4
- export { urlUpload } from "./url"
@@ -1,12 +0,0 @@
1
- import { downloadUnzipTarball } from "./utils"
2
- import { getPluginMetadata } from "../../../utilities/fileSystem"
3
-
4
- export async function urlUpload(url: string, name = "", headers = {}) {
5
- if (!url.includes(".tar.gz")) {
6
- throw new Error("Plugin must be compressed into a gzipped tarball.")
7
- }
8
-
9
- const path = await downloadUnzipTarball(url, name, headers)
10
-
11
- return await getPluginMetadata(path)
12
- }
@@ -1,19 +0,0 @@
1
- import {
2
- createTempFolder,
3
- downloadTarballDirect,
4
- } from "../../../utilities/fileSystem"
5
-
6
- export async function downloadUnzipTarball(
7
- url: string,
8
- name: string,
9
- headers = {}
10
- ) {
11
- try {
12
- const path = createTempFolder(name)
13
- await downloadTarballDirect(url, path, headers)
14
-
15
- return path
16
- } catch (e: any) {
17
- throw new Error(e.message)
18
- }
19
- }
@@ -1,14 +0,0 @@
1
- import Router from "@koa/router"
2
- import * as controller from "../controllers/plugin"
3
- import authorized from "../../middleware/authorized"
4
- import { BUILDER } from "@budibase/backend-core/permissions"
5
-
6
- const router = new Router()
7
-
8
- router
9
- .post("/api/plugin/upload", authorized(BUILDER), controller.upload)
10
- .post("/api/plugin", authorized(BUILDER), controller.create)
11
- .get("/api/plugin", authorized(BUILDER), controller.fetch)
12
- .delete("/api/plugin/:pluginId", authorized(BUILDER), controller.destroy)
13
-
14
- export default router
package/src/watch.ts DELETED
@@ -1,38 +0,0 @@
1
- import path from "path"
2
- import * as env from "./environment"
3
- import chokidar from "chokidar"
4
- import fs from "fs"
5
- import { tenancy } from "@budibase/backend-core"
6
- import { DEFAULT_TENANT_ID } from "@budibase/backend-core/constants"
7
- import { processPlugin } from "./api/controllers/plugin"
8
-
9
- export function watch() {
10
- const watchPath = path.join(env.PLUGINS_DIR, "./**/*.tar.gz")
11
- chokidar
12
- .watch(watchPath, {
13
- ignored: "**/node_modules",
14
- awaitWriteFinish: {
15
- pollInterval: 100,
16
- stabilityThreshold: 250,
17
- },
18
- usePolling: true,
19
- interval: 250,
20
- })
21
- .on("all", async (event: string, path: string) => {
22
- // Sanity checks
23
- if (!path?.endsWith(".tar.gz") || !fs.existsSync(path)) {
24
- return
25
- }
26
- await tenancy.doInTenant(DEFAULT_TENANT_ID, async () => {
27
- try {
28
- const split = path.split("/")
29
- const name = split[split.length - 1]
30
- console.log("Importing plugin:", path)
31
- await processPlugin({ name, path })
32
- } catch (err: any) {
33
- const message = err?.message ? err?.message : err
34
- console.error("Failed to import plugin:", message)
35
- }
36
- })
37
- })
38
- }
package/src/websocket.ts DELETED
@@ -1,26 +0,0 @@
1
- import { Server } from "socket.io"
2
- import http from "http"
3
-
4
- class Websocket {
5
- socketServer: Server
6
-
7
- constructor(server: http.Server, path: string) {
8
- this.socketServer = new Server(server, {
9
- path,
10
- })
11
- }
12
-
13
- // Emit an event to all sockets
14
- emit(event: string, payload: any) {
15
- this.socketServer.sockets.emit(event, payload)
16
- }
17
- }
18
-
19
- // Likely to be more socket instances in future
20
- let ClientAppSocket: Websocket
21
-
22
- export const initialise = (server: http.Server) => {
23
- ClientAppSocket = new Websocket(server, "/socket/client")
24
- }
25
-
26
- export { ClientAppSocket }