@budibase/server 1.3.15-alpha.3 → 1.3.17

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 (268) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/index.8f5f192a.js +876 -0
  3. package/builder/assets/{index.ecdac070.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 -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 +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/row/ExternalRequest.js +3 -1
  164. package/dist/api/controllers/screen.js +2 -52
  165. package/dist/api/controllers/static/index.js +0 -1
  166. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  167. package/dist/api/controllers/static/templates/preview.hbs +1 -5
  168. package/dist/api/routes/index.js +0 -2
  169. package/dist/app.js +0 -11
  170. package/dist/db/utils.js +1 -10
  171. package/dist/environment.js +2 -3
  172. package/dist/integrations/airtable.js +129 -126
  173. package/dist/integrations/arangodb.js +89 -86
  174. package/dist/integrations/base/query.js +2 -2
  175. package/dist/integrations/base/sqlTable.js +1 -3
  176. package/dist/integrations/couchdb.js +83 -80
  177. package/dist/integrations/dynamodb.js +164 -161
  178. package/dist/integrations/elasticsearch.js +138 -135
  179. package/dist/integrations/firebase.js +157 -154
  180. package/dist/integrations/googlesheets.js +327 -323
  181. package/dist/integrations/index.js +51 -93
  182. package/dist/integrations/microsoftSqlServer.js +243 -240
  183. package/dist/integrations/mongodb.js +242 -239
  184. package/dist/integrations/mysql.js +219 -215
  185. package/dist/integrations/oracle.js +322 -318
  186. package/dist/integrations/postgres.js +265 -262
  187. package/dist/integrations/redis.js +139 -134
  188. package/dist/integrations/rest.js +292 -289
  189. package/dist/integrations/s3.js +64 -61
  190. package/dist/integrations/snowflake.js +86 -83
  191. package/dist/package.json +6 -9
  192. package/dist/threads/query.js +2 -2
  193. package/dist/tsconfig.build.tsbuildinfo +1 -1
  194. package/dist/utilities/fileSystem/index.js +11 -111
  195. package/package.json +7 -10
  196. package/scripts/dev/manage.js +0 -1
  197. package/src/api/controllers/application.ts +1 -1
  198. package/src/api/controllers/component.js +2 -25
  199. package/src/api/controllers/datasource.js +4 -4
  200. package/src/api/controllers/integration.js +4 -4
  201. package/src/api/controllers/row/ExternalRequest.ts +4 -1
  202. package/src/api/controllers/screen.js +1 -66
  203. package/src/api/controllers/static/index.ts +0 -1
  204. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  205. package/src/api/controllers/static/templates/preview.hbs +1 -5
  206. package/src/api/routes/index.ts +0 -2
  207. package/src/api/routes/tests/query.spec.js +25 -8
  208. package/src/app.ts +0 -14
  209. package/src/db/utils.js +0 -12
  210. package/src/environment.js +2 -3
  211. package/src/integrations/airtable.ts +118 -116
  212. package/src/integrations/arangodb.ts +89 -87
  213. package/src/integrations/base/query.ts +2 -2
  214. package/src/integrations/base/sqlTable.ts +1 -3
  215. package/src/integrations/couchdb.ts +89 -83
  216. package/src/integrations/dynamodb.ts +175 -173
  217. package/src/integrations/elasticsearch.ts +122 -120
  218. package/src/integrations/firebase.ts +159 -157
  219. package/src/integrations/googlesheets.ts +338 -328
  220. package/src/integrations/index.ts +21 -59
  221. package/src/integrations/microsoftSqlServer.ts +251 -249
  222. package/src/integrations/mongodb.ts +258 -261
  223. package/src/integrations/mysql.ts +234 -229
  224. package/src/integrations/oracle.ts +380 -373
  225. package/src/integrations/postgres.ts +268 -264
  226. package/src/integrations/redis.ts +132 -128
  227. package/src/integrations/rest.ts +329 -324
  228. package/src/integrations/s3.ts +71 -68
  229. package/src/integrations/snowflake.ts +82 -80
  230. package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
  231. package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
  232. package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
  233. package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
  234. package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
  235. package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
  236. package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
  237. package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
  238. package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
  239. package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
  240. package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
  241. package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
  242. package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
  243. package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
  244. package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
  245. package/src/module.d.ts +0 -2
  246. package/src/threads/query.ts +2 -2
  247. package/src/utilities/fileSystem/index.js +9 -130
  248. package/builder/assets/index.e1d89439.js +0 -995
  249. package/dist/api/controllers/plugin/file.js +0 -24
  250. package/dist/api/controllers/plugin/github.js +0 -69
  251. package/dist/api/controllers/plugin/index.js +0 -192
  252. package/dist/api/controllers/plugin/npm.js +0 -58
  253. package/dist/api/controllers/plugin/uploaders.js +0 -11
  254. package/dist/api/controllers/plugin/url.js +0 -24
  255. package/dist/api/controllers/plugin/utils.js +0 -26
  256. package/dist/api/routes/plugin.js +0 -39
  257. package/dist/watch.js +0 -77
  258. package/dist/websocket.js +0 -22
  259. package/src/api/controllers/plugin/file.ts +0 -15
  260. package/src/api/controllers/plugin/github.ts +0 -75
  261. package/src/api/controllers/plugin/index.ts +0 -206
  262. package/src/api/controllers/plugin/npm.ts +0 -56
  263. package/src/api/controllers/plugin/uploaders.ts +0 -4
  264. package/src/api/controllers/plugin/url.ts +0 -12
  265. package/src/api/controllers/plugin/utils.ts +0 -19
  266. package/src/api/routes/plugin.ts +0 -14
  267. package/src/watch.ts +0 -38
  268. package/src/websocket.ts +0 -26
@@ -1,206 +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 } from "@budibase/types"
12
- import env from "../../../environment"
13
- import { ClientAppSocket } from "../../../websocket"
14
-
15
- export async function getPlugins(type?: PluginType) {
16
- const db = getGlobalDB()
17
- const response = await db.allDocs(
18
- getPluginParams(null, {
19
- include_docs: true,
20
- })
21
- )
22
- const plugins = response.rows.map((row: any) => row.doc)
23
- if (type) {
24
- return plugins.filter((plugin: any) => plugin.schema?.type === type)
25
- } else {
26
- return plugins
27
- }
28
- }
29
-
30
- export async function upload(ctx: any) {
31
- const plugins: FileType[] =
32
- ctx.request.files.file.length > 1
33
- ? Array.from(ctx.request.files.file)
34
- : [ctx.request.files.file]
35
- try {
36
- let docs = []
37
- // can do single or multiple plugins
38
- for (let plugin of plugins) {
39
- const doc = await processPlugin(plugin, PluginSource.FILE)
40
- docs.push(doc)
41
- }
42
- ctx.body = {
43
- message: "Plugin(s) uploaded successfully",
44
- plugins: docs,
45
- }
46
- } catch (err: any) {
47
- const errMsg = err?.message ? err?.message : err
48
-
49
- ctx.throw(400, `Failed to import plugin: ${errMsg}`)
50
- }
51
- }
52
-
53
- export async function create(ctx: any) {
54
- const { source, url, headers, githubToken } = ctx.request.body
55
-
56
- if (!env.SELF_HOSTED) {
57
- ctx.throw(400, "Plugins not supported outside of self-host.")
58
- }
59
-
60
- try {
61
- let metadata
62
- let directory
63
- // Generating random name as a backup and needed for url
64
- let name = "PLUGIN_" + Math.floor(100000 + Math.random() * 900000)
65
-
66
- switch (source) {
67
- case PluginSource.NPM:
68
- const { metadata: metadataNpm, directory: directoryNpm } =
69
- await npmUpload(url, name)
70
- metadata = metadataNpm
71
- directory = directoryNpm
72
- break
73
- case PluginSource.GITHUB:
74
- const { metadata: metadataGithub, directory: directoryGithub } =
75
- await githubUpload(url, name, githubToken)
76
- metadata = metadataGithub
77
- directory = directoryGithub
78
- break
79
- case PluginSource.URL:
80
- const headersObj = headers || {}
81
- const { metadata: metadataUrl, directory: directoryUrl } =
82
- await urlUpload(url, name, headersObj)
83
- metadata = metadataUrl
84
- directory = directoryUrl
85
- break
86
- }
87
-
88
- validate(metadata?.schema)
89
-
90
- const doc = await storePlugin(metadata, directory, source)
91
-
92
- ctx.body = {
93
- message: "Plugin uploaded successfully",
94
- plugins: [doc],
95
- }
96
- } catch (err: any) {
97
- const errMsg = err?.message ? err?.message : err
98
-
99
- ctx.throw(400, `Failed to import plugin: ${errMsg}`)
100
- }
101
- ctx.status = 200
102
- }
103
-
104
- export async function fetch(ctx: any) {
105
- ctx.body = await getPlugins()
106
- }
107
-
108
- export async function destroy(ctx: any) {
109
- const db = getGlobalDB()
110
- const { pluginId } = ctx.params
111
-
112
- try {
113
- const plugin = await db.get(pluginId)
114
- const bucketPath = `${plugin.name}/`
115
- await deleteFolder(ObjectStoreBuckets.PLUGINS, bucketPath)
116
-
117
- await db.remove(pluginId, plugin._rev)
118
- } catch (err: any) {
119
- const errMsg = err?.message ? err?.message : err
120
-
121
- ctx.throw(400, `Failed to delete plugin: ${errMsg}`)
122
- }
123
-
124
- ctx.message = `Plugin ${ctx.params.pluginId} deleted.`
125
- ctx.status = 200
126
- }
127
-
128
- export async function storePlugin(
129
- metadata: any,
130
- directory: any,
131
- source?: string
132
- ) {
133
- const db = getGlobalDB()
134
- const version = metadata.package.version,
135
- name = metadata.package.name,
136
- description = metadata.package.description,
137
- hash = metadata.schema.hash
138
-
139
- // first open the tarball into tmp directory
140
- const bucketPath = `${name}/`
141
- const files = await uploadDirectory(
142
- ObjectStoreBuckets.PLUGINS,
143
- directory,
144
- bucketPath
145
- )
146
- const jsFile = files.find((file: any) => file.name.endsWith(".js"))
147
- if (!jsFile) {
148
- throw new Error(`Plugin missing .js file.`)
149
- }
150
- // validate the JS for a datasource
151
- if (metadata.schema.type === PluginType.DATASOURCE) {
152
- const js = loadJSFile(directory, jsFile.name)
153
- // TODO: this isn't safe - but we need full node environment
154
- // in future we should do this in a thread for safety
155
- try {
156
- eval(js)
157
- } catch (err: any) {
158
- const message = err?.message ? err.message : JSON.stringify(err)
159
- throw new Error(`JS invalid: ${message}`)
160
- }
161
- }
162
- const jsFileName = jsFile.name
163
- const pluginId = generatePluginID(name)
164
-
165
- // overwrite existing docs entirely if they exist
166
- let rev
167
- try {
168
- const existing = await db.get(pluginId)
169
- rev = existing._rev
170
- } catch (err) {
171
- rev = undefined
172
- }
173
- let doc = {
174
- _id: pluginId,
175
- _rev: rev,
176
- ...metadata,
177
- name,
178
- version,
179
- hash,
180
- description,
181
- jsUrl: `${bucketPath}${jsFileName}`,
182
- }
183
-
184
- if (source) {
185
- doc = {
186
- ...doc,
187
- source,
188
- }
189
- }
190
-
191
- const response = await db.put(doc)
192
- ClientAppSocket.emit("plugin-update", { name, hash })
193
- return {
194
- ...doc,
195
- _rev: response.rev,
196
- }
197
- }
198
-
199
- export async function processPlugin(plugin: FileType, source?: string) {
200
- if (!env.SELF_HOSTED) {
201
- throw new Error("Plugins not supported outside of self-host.")
202
- }
203
-
204
- const { metadata, directory } = await fileUpload(plugin)
205
- return await storePlugin(metadata, directory, source)
206
- }
@@ -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 }