@budibase/server 1.3.15-alpha.0 → 1.3.15-alpha.3

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 (188) hide show
  1. package/builder/assets/{index.b266d29f.js → index.e1d89439.js} +288 -288
  2. package/builder/assets/{index.f5c54dd2.css → index.ecdac070.css} +2 -2
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +21 -21
  5. package/coverage/coverage-final.json +1 -1
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/index.html +1 -1
  15. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/screen.js.html +5 -2
  31. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  44. package/coverage/lcov-report/api/index.html +1 -1
  45. package/coverage/lcov-report/api/index.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/index.html +1 -1
  57. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  71. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  74. package/coverage/lcov-report/automations/actions.js.html +1 -1
  75. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  76. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  77. package/coverage/lcov-report/automations/index.html +1 -1
  78. package/coverage/lcov-report/automations/index.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/index.html +1 -1
  86. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  96. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  105. package/coverage/lcov-report/constants/index.html +1 -1
  106. package/coverage/lcov-report/constants/index.js.html +1 -1
  107. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  108. package/coverage/lcov-report/constants/screens.js.html +1 -1
  109. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  110. package/coverage/lcov-report/db/index.html +1 -1
  111. package/coverage/lcov-report/db/index.js.html +1 -1
  112. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  113. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  114. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  116. package/coverage/lcov-report/db/newid.js.html +1 -1
  117. package/coverage/lcov-report/db/utils.js.html +1 -1
  118. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  119. package/coverage/lcov-report/events/index.html +1 -1
  120. package/coverage/lcov-report/events/index.js.html +1 -1
  121. package/coverage/lcov-report/events/utils.js.html +1 -1
  122. package/coverage/lcov-report/index.html +1 -1
  123. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  124. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  125. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  126. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  127. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  128. package/coverage/lcov-report/middleware/index.html +1 -1
  129. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  130. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  131. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  132. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  133. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  134. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  135. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  136. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  137. package/coverage/lcov-report/utilities/global.js.html +1 -1
  138. package/coverage/lcov-report/utilities/index.html +1 -1
  139. package/coverage/lcov-report/utilities/index.js.html +1 -1
  140. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  141. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  142. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  143. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  144. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  145. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  146. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  147. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  148. package/coverage/lcov-report/utilities/security.js.html +1 -1
  149. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  150. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  151. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  152. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  153. package/coverage/lcov-report/utilities/users.js.html +1 -1
  154. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  155. package/coverage/lcov.info +34 -34
  156. package/dist/api/controllers/plugin/file.js +24 -0
  157. package/dist/api/controllers/plugin/github.js +69 -0
  158. package/dist/api/controllers/{plugin.js → plugin/index.js} +87 -14
  159. package/dist/api/controllers/plugin/npm.js +58 -0
  160. package/dist/api/controllers/plugin/uploaders.js +11 -0
  161. package/dist/api/controllers/plugin/url.js +24 -0
  162. package/dist/api/controllers/plugin/utils.js +26 -0
  163. package/dist/api/controllers/screen.js +1 -0
  164. package/dist/api/controllers/static/templates/preview.hbs +3 -1
  165. package/dist/api/routes/plugin.js +1 -0
  166. package/dist/app.js +2 -0
  167. package/dist/integrations/base/sqlTable.js +3 -1
  168. package/dist/package.json +7 -6
  169. package/dist/tsconfig.build.tsbuildinfo +1 -1
  170. package/dist/utilities/fileSystem/index.js +56 -12
  171. package/dist/websocket.js +22 -0
  172. package/package.json +8 -7
  173. package/src/api/controllers/plugin/file.ts +15 -0
  174. package/src/api/controllers/plugin/github.ts +75 -0
  175. package/src/api/controllers/plugin/index.ts +206 -0
  176. package/src/api/controllers/plugin/npm.ts +56 -0
  177. package/src/api/controllers/plugin/uploaders.ts +4 -0
  178. package/src/api/controllers/plugin/url.ts +12 -0
  179. package/src/api/controllers/plugin/utils.ts +19 -0
  180. package/src/api/controllers/screen.js +1 -0
  181. package/src/api/controllers/static/templates/preview.hbs +3 -1
  182. package/src/api/routes/plugin.ts +1 -0
  183. package/src/app.ts +2 -0
  184. package/src/integrations/base/sqlTable.ts +3 -1
  185. package/src/module.d.ts +1 -0
  186. package/src/utilities/fileSystem/index.js +72 -12
  187. package/src/websocket.ts +26 -0
  188. package/src/api/controllers/plugin.ts +0 -110
@@ -79,7 +79,7 @@ module.exports.budibaseTempDir = budibaseTempDir
79
79
  <div class='footer quiet pad2 space-top1 center small'>
80
80
  Code coverage generated by
81
81
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
82
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
82
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
83
83
  </div>
84
84
  <script src="../prettify.js"></script>
85
85
  <script>
@@ -136,7 +136,7 @@ exports.resolve = function (...args) {
136
136
  <div class='footer quiet pad2 space-top1 center small'>
137
137
  Code coverage generated by
138
138
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
139
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
139
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
140
140
  </div>
141
141
  <script src="../prettify.js"></script>
142
142
  <script>
@@ -502,7 +502,7 @@ module.exports = {
502
502
  <div class='footer quiet pad2 space-top1 center small'>
503
503
  Code coverage generated by
504
504
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
505
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
505
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
506
506
  </div>
507
507
  <script src="../prettify.js"></script>
508
508
  <script>
@@ -445,7 +445,7 @@ exports.getGlobalUsersFromMetadata = async users =&gt; {
445
445
  <div class='footer quiet pad2 space-top1 center small'>
446
446
  Code coverage generated by
447
447
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
448
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
448
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
449
449
  </div>
450
450
  <script src="../prettify.js"></script>
451
451
  <script>
@@ -236,7 +236,7 @@
236
236
  <div class='footer quiet pad2 space-top1 center small'>
237
237
  Code coverage generated by
238
238
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
239
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
239
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
240
240
  </div>
241
241
  <script src="../prettify.js"></script>
242
242
  <script>
@@ -586,7 +586,7 @@ exports.isQsTrue = param =&gt; {
586
586
  <div class='footer quiet pad2 space-top1 center small'>
587
587
  Code coverage generated by
588
588
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
589
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
589
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
590
590
  </div>
591
591
  <script src="../prettify.js"></script>
592
592
  <script>
@@ -436,7 +436,7 @@ module.exports = InMemoryQueue
436
436
  <div class='footer quiet pad2 space-top1 center small'>
437
437
  Code coverage generated by
438
438
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
439
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
439
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
440
440
  </div>
441
441
  <script src="../../prettify.js"></script>
442
442
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
104
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
105
105
  </div>
106
106
  <script src="../../prettify.js"></script>
107
107
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
104
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
105
105
  </div>
106
106
  <script src="../../prettify.js"></script>
107
107
  <script>
@@ -145,7 +145,7 @@ exports.createRoutingView = createRoutingView
145
145
  <div class='footer quiet pad2 space-top1 center small'>
146
146
  Code coverage generated by
147
147
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
148
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
148
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
149
149
  </div>
150
150
  <script src="../../prettify.js"></script>
151
151
  <script>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
119
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>
122
122
  <script>
@@ -1096,7 +1096,7 @@ exports.cleanupAttachments = async (table, { row, rows, oldRow, oldTable }) =&gt
1096
1096
  <div class='footer quiet pad2 space-top1 center small'>
1097
1097
  Code coverage generated by
1098
1098
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1099
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
1099
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
1100
1100
  </div>
1101
1101
  <script src="../../prettify.js"></script>
1102
1102
  <script>
@@ -346,7 +346,7 @@ exports.processDates = <span class="fstat-no" title="function not covered" >(t</
346
346
  <div class='footer quiet pad2 space-top1 center small'>
347
347
  Code coverage generated by
348
348
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
349
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
349
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
350
350
  </div>
351
351
  <script src="../../prettify.js"></script>
352
352
  <script>
@@ -142,7 +142,7 @@ module.exports = ScriptRunner
142
142
  <div class='footer quiet pad2 space-top1 center small'>
143
143
  Code coverage generated by
144
144
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
145
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
145
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
146
146
  </div>
147
147
  <script src="../prettify.js"></script>
148
148
  <script>
@@ -283,7 +283,7 @@ exports.CURRENTLY_SUPPORTED_LEVELS = CURRENTLY_SUPPORTED_LEVELS
283
283
  <div class='footer quiet pad2 space-top1 center small'>
284
284
  Code coverage generated by
285
285
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
286
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
286
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
287
287
  </div>
288
288
  <script src="../prettify.js"></script>
289
289
  <script>
@@ -91,7 +91,7 @@
91
91
  <div class='footer quiet pad2 space-top1 center small'>
92
92
  Code coverage generated by
93
93
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
94
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
94
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
95
95
  </div>
96
96
  <script src="../prettify.js"></script>
97
97
  <script>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
119
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>
122
122
  <script>
@@ -310,7 +310,7 @@ exports.getUniqueRows = async appIds =&gt; {
310
310
  <div class='footer quiet pad2 space-top1 center small'>
311
311
  Code coverage generated by
312
312
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
313
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
313
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
314
314
  </div>
315
315
  <script src="../../prettify.js"></script>
316
316
  <script>
@@ -124,7 +124,7 @@ function <span class="fstat-no" title="function not covered" >resetQuotasIfRequi
124
124
  <div class='footer quiet pad2 space-top1 center small'>
125
125
  Code coverage generated by
126
126
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
127
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
127
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
128
128
  </div>
129
129
  <script src="../../prettify.js"></script>
130
130
  <script>
@@ -205,7 +205,7 @@ exports.publicApiUserFix = ctx =&gt; {
205
205
  <div class='footer quiet pad2 space-top1 center small'>
206
206
  Code coverage generated by
207
207
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
208
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
208
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
209
209
  </div>
210
210
  <script src="../prettify.js"></script>
211
211
  <script>
@@ -535,7 +535,7 @@ exports.getChecklist = <span class="fstat-no" title="function not covered" >as</
535
535
  <div class='footer quiet pad2 space-top1 center small'>
536
536
  Code coverage generated by
537
537
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
538
- at Mon Sep 12 2022 13:16:12 GMT+0000 (Coordinated Universal Time)
538
+ at Tue Sep 13 2022 09:47:25 GMT+0000 (Coordinated Universal Time)
539
539
  </div>
540
540
  <script src="../prettify.js"></script>
541
541
  <script>
@@ -1399,9 +1399,9 @@ FN:54,(anonymous_3)
1399
1399
  FN:55,(anonymous_4)
1400
1400
  FN:66,(anonymous_5)
1401
1401
  FN:67,(anonymous_6)
1402
- FN:95,(anonymous_7)
1403
- FN:109,(anonymous_8)
1404
- FN:121,(anonymous_9)
1402
+ FN:96,(anonymous_7)
1403
+ FN:110,(anonymous_8)
1404
+ FN:122,(anonymous_9)
1405
1405
  FNF:10
1406
1406
  FNH:6
1407
1407
  FNDA:1,(anonymous_0)
@@ -1447,29 +1447,29 @@ DA:66,0
1447
1447
  DA:67,0
1448
1448
  DA:68,0
1449
1449
  DA:69,0
1450
- DA:78,0
1451
1450
  DA:79,0
1452
- DA:83,24
1453
- DA:84,23
1454
- DA:86,24
1451
+ DA:80,0
1452
+ DA:84,24
1453
+ DA:85,23
1455
1454
  DA:87,24
1456
- DA:95,44
1457
- DA:96,1
1455
+ DA:88,24
1456
+ DA:96,44
1458
1457
  DA:97,1
1459
1458
  DA:98,1
1460
- DA:100,1
1461
- DA:102,1
1459
+ DA:99,1
1460
+ DA:101,1
1462
1461
  DA:103,1
1463
- DA:106,1
1464
- DA:109,44
1465
- DA:110,48
1466
- DA:111,0
1467
- DA:113,48
1468
- DA:114,0
1462
+ DA:104,1
1463
+ DA:107,1
1464
+ DA:110,44
1465
+ DA:111,48
1466
+ DA:112,0
1467
+ DA:114,48
1469
1468
  DA:115,0
1470
- DA:118,48
1471
- DA:119,24
1472
- DA:121,24
1469
+ DA:116,0
1470
+ DA:119,48
1471
+ DA:120,24
1472
+ DA:122,24
1473
1473
  LF:56
1474
1474
  LH:40
1475
1475
  BRDA:35,0,0,23
@@ -1482,20 +1482,20 @@ BRDA:64,3,0,0
1482
1482
  BRDA:64,3,1,0
1483
1483
  BRDA:67,4,0,0
1484
1484
  BRDA:67,4,1,0
1485
- BRDA:78,5,0,0
1486
- BRDA:78,5,1,0
1487
- BRDA:83,6,0,23
1488
- BRDA:83,6,1,1
1489
- BRDA:110,7,0,0
1490
- BRDA:110,7,1,48
1491
- BRDA:113,8,0,0
1492
- BRDA:113,8,1,48
1493
- BRDA:114,9,0,0
1494
- BRDA:114,9,1,0
1495
- BRDA:118,10,0,24
1496
- BRDA:118,10,1,24
1497
- BRDA:118,11,0,48
1498
- BRDA:118,11,1,48
1485
+ BRDA:79,5,0,0
1486
+ BRDA:79,5,1,0
1487
+ BRDA:84,6,0,23
1488
+ BRDA:84,6,1,1
1489
+ BRDA:111,7,0,0
1490
+ BRDA:111,7,1,48
1491
+ BRDA:114,8,0,0
1492
+ BRDA:114,8,1,48
1493
+ BRDA:115,9,0,0
1494
+ BRDA:115,9,1,0
1495
+ BRDA:119,10,0,24
1496
+ BRDA:119,10,1,24
1497
+ BRDA:119,11,0,48
1498
+ BRDA:119,11,1,48
1499
1499
  BRF:24
1500
1500
  BRH:11
1501
1501
  end_of_record
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.fileUpload = void 0;
13
+ const fileSystem_1 = require("../../../utilities/fileSystem");
14
+ function fileUpload(file) {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ if (!file.name.endsWith(".tar.gz")) {
17
+ throw new Error("Plugin must be compressed into a gzipped tarball.");
18
+ }
19
+ const path = (0, fileSystem_1.createTempFolder)(file.name.split(".tar.gz")[0]);
20
+ yield (0, fileSystem_1.extractTarball)(file.path, path);
21
+ return yield (0, fileSystem_1.getPluginMetadata)(path);
22
+ });
23
+ }
24
+ exports.fileUpload = fileUpload;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.githubUpload = exports.request = void 0;
16
+ const fileSystem_1 = require("../../../utilities/fileSystem");
17
+ const node_fetch_1 = __importDefault(require("node-fetch"));
18
+ const utils_1 = require("./utils");
19
+ function request(url, headers, err) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ const response = yield (0, node_fetch_1.default)(url, { headers });
22
+ if (response.status >= 300) {
23
+ const respErr = yield response.text();
24
+ throw new Error(`Error: ${err} - ${respErr}`);
25
+ }
26
+ return response.json();
27
+ });
28
+ }
29
+ exports.request = request;
30
+ function githubUpload(url, name = "", token = "") {
31
+ var _a;
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ let githubUrl = url;
34
+ if (!githubUrl.includes("https://github.com/")) {
35
+ throw new Error("The plugin origin must be from Github");
36
+ }
37
+ if (url.includes(".git")) {
38
+ githubUrl = url.replace(".git", "");
39
+ }
40
+ const githubApiUrl = githubUrl.replace("https://github.com/", "https://api.github.com/repos/");
41
+ const headers = token ? { Authorization: `Bearer ${token}` } : {};
42
+ const pluginDetails = yield request(githubApiUrl, headers, "Repository not found");
43
+ const pluginName = pluginDetails.name || name;
44
+ const pluginLatestReleaseUrl = (pluginDetails === null || pluginDetails === void 0 ? void 0 : pluginDetails["releases_url"])
45
+ ? pluginDetails === null || pluginDetails === void 0 ? void 0 : pluginDetails["releases_url"].replace("{/id}", "/latest")
46
+ : undefined;
47
+ if (!pluginLatestReleaseUrl) {
48
+ throw new Error("Github release not found");
49
+ }
50
+ const pluginReleaseDetails = yield request(pluginLatestReleaseUrl, headers, "Github latest release not found");
51
+ const pluginReleaseTarballAsset = (_a = pluginReleaseDetails === null || pluginReleaseDetails === void 0 ? void 0 : pluginReleaseDetails.assets) === null || _a === void 0 ? void 0 : _a.find((x) => (x === null || x === void 0 ? void 0 : x["content_type"]) === "application/gzip");
52
+ const pluginLastReleaseTarballUrl = pluginReleaseTarballAsset === null || pluginReleaseTarballAsset === void 0 ? void 0 : pluginReleaseTarballAsset["browser_download_url"];
53
+ if (!pluginLastReleaseTarballUrl) {
54
+ throw new Error("Github latest release url not found");
55
+ }
56
+ try {
57
+ const path = yield (0, utils_1.downloadUnzipTarball)(pluginLastReleaseTarballUrl, pluginName, headers);
58
+ return yield (0, fileSystem_1.getPluginMetadata)(path);
59
+ }
60
+ catch (err) {
61
+ let errMsg = (err === null || err === void 0 ? void 0 : err.message) || err;
62
+ if (errMsg === "unexpected response Not Found") {
63
+ errMsg = "Github release tarball not found";
64
+ }
65
+ throw new Error(errMsg);
66
+ }
67
+ });
68
+ }
69
+ exports.githubUpload = githubUpload;
@@ -12,14 +12,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.processPlugin = exports.destroy = exports.fetch = exports.upload = exports.getPlugins = void 0;
16
- const constants_1 = require("../../constants");
17
- const fileSystem_1 = require("../../utilities/fileSystem");
15
+ exports.processPlugin = exports.storePlugin = exports.destroy = exports.fetch = exports.create = exports.upload = exports.getPlugins = void 0;
16
+ const constants_1 = require("../../../constants");
17
+ const fileSystem_1 = require("../../../utilities/fileSystem");
18
+ const uploaders_1 = require("./uploaders");
18
19
  const tenancy_1 = require("@budibase/backend-core/tenancy");
19
- const utils_1 = require("../../db/utils");
20
+ const plugins_1 = require("@budibase/backend-core/plugins");
21
+ const utils_1 = require("../../../db/utils");
20
22
  const objectStore_1 = require("@budibase/backend-core/objectStore");
21
23
  const types_1 = require("@budibase/types");
22
- const environment_1 = __importDefault(require("../../environment"));
24
+ const environment_1 = __importDefault(require("../../../environment"));
25
+ const websocket_1 = require("../../../websocket");
23
26
  function getPlugins(type) {
24
27
  return __awaiter(this, void 0, void 0, function* () {
25
28
  const db = (0, tenancy_1.getGlobalDB)();
@@ -45,7 +48,7 @@ function upload(ctx) {
45
48
  let docs = [];
46
49
  // can do single or multiple plugins
47
50
  for (let plugin of plugins) {
48
- const doc = yield processPlugin(plugin);
51
+ const doc = yield processPlugin(plugin, types_1.PluginSource.FILE);
49
52
  docs.push(doc);
50
53
  }
51
54
  ctx.body = {
@@ -60,6 +63,50 @@ function upload(ctx) {
60
63
  });
61
64
  }
62
65
  exports.upload = upload;
66
+ function create(ctx) {
67
+ return __awaiter(this, void 0, void 0, function* () {
68
+ const { source, url, headers, githubToken } = ctx.request.body;
69
+ if (!environment_1.default.SELF_HOSTED) {
70
+ ctx.throw(400, "Plugins not supported outside of self-host.");
71
+ }
72
+ try {
73
+ let metadata;
74
+ let directory;
75
+ // Generating random name as a backup and needed for url
76
+ let name = "PLUGIN_" + Math.floor(100000 + Math.random() * 900000);
77
+ switch (source) {
78
+ case types_1.PluginSource.NPM:
79
+ const { metadata: metadataNpm, directory: directoryNpm } = yield (0, uploaders_1.npmUpload)(url, name);
80
+ metadata = metadataNpm;
81
+ directory = directoryNpm;
82
+ break;
83
+ case types_1.PluginSource.GITHUB:
84
+ const { metadata: metadataGithub, directory: directoryGithub } = yield (0, uploaders_1.githubUpload)(url, name, githubToken);
85
+ metadata = metadataGithub;
86
+ directory = directoryGithub;
87
+ break;
88
+ case types_1.PluginSource.URL:
89
+ const headersObj = headers || {};
90
+ const { metadata: metadataUrl, directory: directoryUrl } = yield (0, uploaders_1.urlUpload)(url, name, headersObj);
91
+ metadata = metadataUrl;
92
+ directory = directoryUrl;
93
+ break;
94
+ }
95
+ (0, plugins_1.validate)(metadata === null || metadata === void 0 ? void 0 : metadata.schema);
96
+ const doc = yield storePlugin(metadata, directory, source);
97
+ ctx.body = {
98
+ message: "Plugin uploaded successfully",
99
+ plugins: [doc],
100
+ };
101
+ }
102
+ catch (err) {
103
+ const errMsg = (err === null || err === void 0 ? void 0 : err.message) ? err === null || err === void 0 ? void 0 : err.message : err;
104
+ ctx.throw(400, `Failed to import plugin: ${errMsg}`);
105
+ }
106
+ ctx.status = 200;
107
+ });
108
+ }
109
+ exports.create = create;
63
110
  function fetch(ctx) {
64
111
  return __awaiter(this, void 0, void 0, function* () {
65
112
  ctx.body = yield getPlugins();
@@ -67,17 +114,28 @@ function fetch(ctx) {
67
114
  }
68
115
  exports.fetch = fetch;
69
116
  function destroy(ctx) {
70
- return __awaiter(this, void 0, void 0, function* () { });
117
+ return __awaiter(this, void 0, void 0, function* () {
118
+ const db = (0, tenancy_1.getGlobalDB)();
119
+ const { pluginId } = ctx.params;
120
+ try {
121
+ const plugin = yield db.get(pluginId);
122
+ const bucketPath = `${plugin.name}/`;
123
+ yield (0, objectStore_1.deleteFolder)(constants_1.ObjectStoreBuckets.PLUGINS, bucketPath);
124
+ yield db.remove(pluginId, plugin._rev);
125
+ }
126
+ catch (err) {
127
+ const errMsg = (err === null || err === void 0 ? void 0 : err.message) ? err === null || err === void 0 ? void 0 : err.message : err;
128
+ ctx.throw(400, `Failed to delete plugin: ${errMsg}`);
129
+ }
130
+ ctx.message = `Plugin ${ctx.params.pluginId} deleted.`;
131
+ ctx.status = 200;
132
+ });
71
133
  }
72
134
  exports.destroy = destroy;
73
- function processPlugin(plugin) {
135
+ function storePlugin(metadata, directory, source) {
74
136
  return __awaiter(this, void 0, void 0, function* () {
75
- if (!environment_1.default.SELF_HOSTED) {
76
- throw new Error("Plugins not supported outside of self-host.");
77
- }
78
137
  const db = (0, tenancy_1.getGlobalDB)();
79
- const { metadata, directory } = yield (0, fileSystem_1.extractPluginTarball)(plugin);
80
- const version = metadata.package.version, name = metadata.package.name, description = metadata.package.description;
138
+ const version = metadata.package.version, name = metadata.package.name, description = metadata.package.description, hash = metadata.schema.hash;
81
139
  // first open the tarball into tmp directory
82
140
  const bucketPath = `${name}/`;
83
141
  const files = yield (0, objectStore_1.uploadDirectory)(constants_1.ObjectStoreBuckets.PLUGINS, directory, bucketPath);
@@ -109,11 +167,26 @@ function processPlugin(plugin) {
109
167
  catch (err) {
110
168
  rev = undefined;
111
169
  }
112
- const doc = Object.assign(Object.assign({ _id: pluginId, _rev: rev }, metadata), { name,
170
+ let doc = Object.assign(Object.assign({ _id: pluginId, _rev: rev }, metadata), { name,
113
171
  version,
172
+ hash,
114
173
  description, jsUrl: `${bucketPath}${jsFileName}` });
174
+ if (source) {
175
+ doc = Object.assign(Object.assign({}, doc), { source });
176
+ }
115
177
  const response = yield db.put(doc);
178
+ websocket_1.ClientAppSocket.emit("plugin-update", { name, hash });
116
179
  return Object.assign(Object.assign({}, doc), { _rev: response.rev });
117
180
  });
118
181
  }
182
+ exports.storePlugin = storePlugin;
183
+ function processPlugin(plugin, source) {
184
+ return __awaiter(this, void 0, void 0, function* () {
185
+ if (!environment_1.default.SELF_HOSTED) {
186
+ throw new Error("Plugins not supported outside of self-host.");
187
+ }
188
+ const { metadata, directory } = yield (0, uploaders_1.fileUpload)(plugin);
189
+ return yield storePlugin(metadata, directory, source);
190
+ });
191
+ }
119
192
  exports.processPlugin = processPlugin;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.npmUpload = void 0;
16
+ const fileSystem_1 = require("../../../utilities/fileSystem");
17
+ const node_fetch_1 = __importDefault(require("node-fetch"));
18
+ const path_1 = require("path");
19
+ const utils_1 = require("./utils");
20
+ function npmUpload(url, name, headers = {}) {
21
+ var _a, _b, _c;
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ let npmTarballUrl = url;
24
+ let pluginName = name;
25
+ if (!npmTarballUrl.includes("https://www.npmjs.com") &&
26
+ !npmTarballUrl.includes("https://registry.npmjs.org")) {
27
+ throw new Error("The plugin origin must be from NPM");
28
+ }
29
+ if (!npmTarballUrl.includes(".tgz")) {
30
+ const npmPackageURl = url.replace("https://www.npmjs.com/package/", "https://registry.npmjs.org/");
31
+ const response = yield (0, node_fetch_1.default)(npmPackageURl);
32
+ if (response.status !== 200) {
33
+ throw new Error("NPM Package not found");
34
+ }
35
+ let npmDetails = yield response.json();
36
+ pluginName = npmDetails.name;
37
+ const npmVersion = npmDetails["dist-tags"].latest;
38
+ npmTarballUrl = (_c = (_b = (_a = npmDetails === null || npmDetails === void 0 ? void 0 : npmDetails.versions) === null || _a === void 0 ? void 0 : _a[npmVersion]) === null || _b === void 0 ? void 0 : _b.dist) === null || _c === void 0 ? void 0 : _c.tarball;
39
+ if (!npmTarballUrl) {
40
+ throw new Error("NPM tarball url not found");
41
+ }
42
+ }
43
+ const path = yield (0, utils_1.downloadUnzipTarball)(npmTarballUrl, pluginName, headers);
44
+ const tarballPluginFile = (0, fileSystem_1.findFileRec)(path, ".tar.gz");
45
+ if (!tarballPluginFile) {
46
+ throw new Error("Tarball plugin file not found");
47
+ }
48
+ try {
49
+ yield (0, fileSystem_1.extractTarball)(tarballPluginFile, path);
50
+ (0, fileSystem_1.deleteFolderFileSystem)((0, path_1.join)(path, "package"));
51
+ }
52
+ catch (err) {
53
+ throw new Error(err);
54
+ }
55
+ return yield (0, fileSystem_1.getPluginMetadata)(path);
56
+ });
57
+ }
58
+ exports.npmUpload = npmUpload;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.urlUpload = exports.npmUpload = exports.githubUpload = exports.fileUpload = void 0;
4
+ var file_1 = require("./file");
5
+ Object.defineProperty(exports, "fileUpload", { enumerable: true, get: function () { return file_1.fileUpload; } });
6
+ var github_1 = require("./github");
7
+ Object.defineProperty(exports, "githubUpload", { enumerable: true, get: function () { return github_1.githubUpload; } });
8
+ var npm_1 = require("./npm");
9
+ Object.defineProperty(exports, "npmUpload", { enumerable: true, get: function () { return npm_1.npmUpload; } });
10
+ var url_1 = require("./url");
11
+ Object.defineProperty(exports, "urlUpload", { enumerable: true, get: function () { return url_1.urlUpload; } });