@budibase/server 1.0.79-alpha.8 → 1.0.80-alpha.0

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 (189) hide show
  1. package/__mocks__/mysql2/promise.ts +17 -0
  2. package/builder/assets/{index.d0476387.js → index.b37e0ebb.js} +84 -84
  3. package/builder/assets/{vendor.6b00a24f.js → vendor.a7c6ad0a.js} +1 -1
  4. package/builder/index.html +2 -2
  5. package/coverage/clover.xml +2 -2
  6. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/index.html +1 -1
  17. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query/index.js.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/index.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  39. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  46. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  47. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  49. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  50. package/coverage/lcov-report/api/index.html +1 -1
  51. package/coverage/lcov-report/api/index.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/index.html +1 -1
  64. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  81. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  82. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  84. package/coverage/lcov-report/automations/actions.js.html +1 -1
  85. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  86. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  87. package/coverage/lcov-report/automations/index.html +1 -1
  88. package/coverage/lcov-report/automations/index.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/index.html +1 -1
  98. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  106. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  113. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  114. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  115. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  116. package/coverage/lcov-report/automations/utils.js.html +1 -1
  117. package/coverage/lcov-report/constants/index.html +1 -1
  118. package/coverage/lcov-report/constants/index.js.html +1 -1
  119. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  120. package/coverage/lcov-report/constants/screens.js.html +1 -1
  121. package/coverage/lcov-report/db/client.js.html +1 -1
  122. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  123. package/coverage/lcov-report/db/index.html +1 -1
  124. package/coverage/lcov-report/db/index.js.html +1 -1
  125. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  126. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  127. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  128. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  129. package/coverage/lcov-report/db/newid.js.html +1 -1
  130. package/coverage/lcov-report/db/utils.js.html +1 -1
  131. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  132. package/coverage/lcov-report/events/index.html +1 -1
  133. package/coverage/lcov-report/events/index.js.html +1 -1
  134. package/coverage/lcov-report/events/utils.js.html +1 -1
  135. package/coverage/lcov-report/index.html +1 -1
  136. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  137. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  138. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  139. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  140. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  141. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  142. package/coverage/lcov-report/middleware/index.html +1 -1
  143. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  144. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  145. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  146. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  147. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  148. package/coverage/lcov-report/threads/automation.js.html +1 -1
  149. package/coverage/lcov-report/threads/index.html +1 -1
  150. package/coverage/lcov-report/threads/index.js.html +1 -1
  151. package/coverage/lcov-report/threads/query.js.html +1 -1
  152. package/coverage/lcov-report/threads/utils.js.html +1 -1
  153. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  154. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  155. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  156. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  157. package/coverage/lcov-report/utilities/global.js.html +1 -1
  158. package/coverage/lcov-report/utilities/index.html +1 -1
  159. package/coverage/lcov-report/utilities/index.js.html +1 -1
  160. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  161. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  162. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  163. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  164. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  165. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  166. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  167. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  168. package/coverage/lcov-report/utilities/security.js.html +1 -1
  169. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  170. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  171. package/coverage/lcov-report/utilities/usageQuota/index.js.html +1 -1
  172. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  173. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  174. package/coverage/lcov-report/utilities/users.js.html +1 -1
  175. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  176. package/dist/api/routes/public/index.js +33 -0
  177. package/dist/environment.js +1 -0
  178. package/dist/integrations/mysql.js +71 -56
  179. package/dist/integrations/utils.js +1 -1
  180. package/dist/package.json +7 -7
  181. package/dist/tsconfig.tsbuildinfo +1 -1
  182. package/package.json +8 -8
  183. package/src/api/controllers/row/ExternalRequest.ts +1 -1
  184. package/src/api/routes/public/index.ts +36 -0
  185. package/src/environment.js +1 -0
  186. package/src/integrations/mysql.ts +79 -70
  187. package/src/integrations/tests/mysql.spec.js +4 -4
  188. package/src/integrations/utils.ts +1 -1
  189. package/scripts/proxy/generateProxyConfig.js +0 -70
@@ -298,7 +298,7 @@ exports.hasExtraData = response => {
298
298
  <div class='footer quiet pad2 space-top1 center small'>
299
299
  Code coverage generated by
300
300
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
301
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
301
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
302
302
  </div>
303
303
  </div>
304
304
  <script src="../prettify.js"></script>
@@ -109,7 +109,7 @@ const SALT_ROUNDS = <span class="cstat-no" title="statement not covered" >env.SA
109
109
  <div class='footer quiet pad2 space-top1 center small'>
110
110
  Code coverage generated by
111
111
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
112
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
112
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
113
113
  </div>
114
114
  </div>
115
115
  <script src="../prettify.js"></script>
@@ -94,7 +94,7 @@ module.exports.budibaseTempDir = budibaseTempDir
94
94
  <div class='footer quiet pad2 space-top1 center small'>
95
95
  Code coverage generated by
96
96
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
97
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
97
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
98
98
  </div>
99
99
  </div>
100
100
  <script src="../prettify.js"></script>
@@ -130,7 +130,7 @@ exports.resolve = <span class="fstat-no" title="function not covered" >fu</span>
130
130
  <div class='footer quiet pad2 space-top1 center small'>
131
131
  Code coverage generated by
132
132
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
133
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
133
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
134
134
  </div>
135
135
  </div>
136
136
  <script src="../prettify.js"></script>
@@ -496,7 +496,7 @@ module.exports = {
496
496
  <div class='footer quiet pad2 space-top1 center small'>
497
497
  Code coverage generated by
498
498
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
499
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
499
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
500
500
  </div>
501
501
  </div>
502
502
  <script src="../prettify.js"></script>
@@ -385,7 +385,7 @@ exports.getGlobalUsersFromMetadata = async users =&gt; {
385
385
  <div class='footer quiet pad2 space-top1 center small'>
386
386
  Code coverage generated by
387
387
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
388
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
388
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
389
389
  </div>
390
390
  </div>
391
391
  <script src="../prettify.js"></script>
@@ -245,7 +245,7 @@
245
245
  <div class='footer quiet pad2 space-top1 center small'>
246
246
  Code coverage generated by
247
247
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
248
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
248
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
249
249
  </div>
250
250
  </div>
251
251
  <script src="../prettify.js"></script>
@@ -523,7 +523,7 @@ exports.formatBytes = bytes =&gt; {
523
523
  <div class='footer quiet pad2 space-top1 center small'>
524
524
  Code coverage generated by
525
525
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
526
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
526
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
527
527
  </div>
528
528
  </div>
529
529
  <script src="../prettify.js"></script>
@@ -367,7 +367,7 @@ module.exports = InMemoryQueue
367
367
  <div class='footer quiet pad2 space-top1 center small'>
368
368
  Code coverage generated by
369
369
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
370
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
370
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
371
371
  </div>
372
372
  </div>
373
373
  <script src="../../prettify.js"></script>
@@ -95,7 +95,7 @@
95
95
  <div class='footer quiet pad2 space-top1 center small'>
96
96
  Code coverage generated by
97
97
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
98
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
98
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
99
99
  </div>
100
100
  </div>
101
101
  <script src="../../prettify.js"></script>
@@ -95,7 +95,7 @@
95
95
  <div class='footer quiet pad2 space-top1 center small'>
96
96
  Code coverage generated by
97
97
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
98
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
98
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
99
99
  </div>
100
100
  </div>
101
101
  <script src="../../prettify.js"></script>
@@ -139,7 +139,7 @@ exports.createRoutingView = createRoutingView
139
139
  <div class='footer quiet pad2 space-top1 center small'>
140
140
  Code coverage generated by
141
141
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
142
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
142
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
143
143
  </div>
144
144
  </div>
145
145
  <script src="../../prettify.js"></script>
@@ -110,7 +110,7 @@
110
110
  <div class='footer quiet pad2 space-top1 center small'>
111
111
  Code coverage generated by
112
112
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
113
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
113
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
114
114
  </div>
115
115
  </div>
116
116
  <script src="../../prettify.js"></script>
@@ -1081,7 +1081,7 @@ exports.cleanupAttachments = async (table, { row, rows, oldRow, oldTable }) =&gt
1081
1081
  <div class='footer quiet pad2 space-top1 center small'>
1082
1082
  Code coverage generated by
1083
1083
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1084
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
1084
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
1085
1085
  </div>
1086
1086
  </div>
1087
1087
  <script src="../../prettify.js"></script>
@@ -181,7 +181,7 @@ exports.processFormulas = (
181
181
  <div class='footer quiet pad2 space-top1 center small'>
182
182
  Code coverage generated by
183
183
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
184
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
184
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
185
185
  </div>
186
186
  </div>
187
187
  <script src="../../prettify.js"></script>
@@ -136,7 +136,7 @@ module.exports = ScriptRunner
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">istanbul</a>
139
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
139
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
140
140
  </div>
141
141
  </div>
142
142
  <script src="../prettify.js"></script>
@@ -274,7 +274,7 @@ exports.CURRENTLY_SUPPORTED_LEVELS = CURRENTLY_SUPPORTED_LEVELS
274
274
  <div class='footer quiet pad2 space-top1 center small'>
275
275
  Code coverage generated by
276
276
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
277
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
277
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
278
278
  </div>
279
279
  </div>
280
280
  <script src="../prettify.js"></script>
@@ -85,7 +85,7 @@
85
85
  <div class='footer quiet pad2 space-top1 center small'>
86
86
  Code coverage generated by
87
87
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
88
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
88
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
89
89
  </div>
90
90
  </div>
91
91
  <script src="../prettify.js"></script>
@@ -125,7 +125,7 @@
125
125
  <div class='footer quiet pad2 space-top1 center small'>
126
126
  Code coverage generated by
127
127
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
128
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
128
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
129
129
  </div>
130
130
  </div>
131
131
  <script src="../../prettify.js"></script>
@@ -343,7 +343,7 @@ exports.update = async (property, usage, opts = { dryRun: false }) =&gt; {
343
343
  <div class='footer quiet pad2 space-top1 center small'>
344
344
  Code coverage generated by
345
345
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
346
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
346
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
347
347
  </div>
348
348
  </div>
349
349
  <script src="../../prettify.js"></script>
@@ -289,7 +289,7 @@ exports.getUniqueRows = async appIds =&gt; {
289
289
  <div class='footer quiet pad2 space-top1 center small'>
290
290
  Code coverage generated by
291
291
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
292
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
292
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
293
293
  </div>
294
294
  </div>
295
295
  <script src="../../prettify.js"></script>
@@ -118,7 +118,7 @@ function <span class="fstat-no" title="function not covered" >resetQuotasIfRequi
118
118
  <div class='footer quiet pad2 space-top1 center small'>
119
119
  Code coverage generated by
120
120
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
121
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
121
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
122
122
  </div>
123
123
  </div>
124
124
  <script src="../../prettify.js"></script>
@@ -136,7 +136,7 @@ exports.getFullUser = async (ctx, userId) =&gt; {
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">istanbul</a>
139
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
139
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
140
140
  </div>
141
141
  </div>
142
142
  <script src="../prettify.js"></script>
@@ -481,7 +481,7 @@ exports.readGlobalUser = <span class="fstat-no" title="function not covered" >as
481
481
  <div class='footer quiet pad2 space-top1 center small'>
482
482
  Code coverage generated by
483
483
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
484
- at Wed Mar 02 2022 23:16:47 GMT+0000 (Coordinated Universal Time)
484
+ at Fri Mar 04 2022 11:33:15 GMT+0000 (Coordinated Universal Time)
485
485
  </div>
486
486
  </div>
487
487
  <script src="../prettify.js"></script>
@@ -12,12 +12,45 @@ const usageQuota_1 = __importDefault(require("../../../middleware/usageQuota"));
12
12
  const authorized_1 = __importDefault(require("../../../middleware/authorized"));
13
13
  const resourceId_1 = require("../../../middleware/resourceId");
14
14
  const mapper_1 = __importDefault(require("./middleware/mapper"));
15
+ const environment_1 = __importDefault(require("../../../environment"));
16
+ // below imports don't have declaration files
15
17
  const Router = require("@koa/router");
18
+ const { RateLimit, Stores } = require("koa2-ratelimit");
16
19
  const { PermissionLevels, PermissionTypes, } = require("@budibase/backend-core/permissions");
20
+ const { getRedisOptions } = require("@budibase/backend-core/redis").utils;
17
21
  const PREFIX = "/api/public/v1";
22
+ // allow a lot more requests when in test
23
+ const DEFAULT_API_REQ_LIMIT_PER_SEC = environment_1.default.isTest() ? 100 : 10;
24
+ function getApiLimitPerSecond() {
25
+ if (!environment_1.default.API_REQ_LIMIT_PER_SEC) {
26
+ return DEFAULT_API_REQ_LIMIT_PER_SEC;
27
+ }
28
+ return parseInt(environment_1.default.API_REQ_LIMIT_PER_SEC);
29
+ }
30
+ if (!environment_1.default.isTest()) {
31
+ const REDIS_OPTS = getRedisOptions();
32
+ RateLimit.defaultOptions({
33
+ store: new Stores.Redis({
34
+ // @ts-ignore
35
+ socket: {
36
+ host: REDIS_OPTS.host,
37
+ port: REDIS_OPTS.port,
38
+ },
39
+ password: REDIS_OPTS.opts.password,
40
+ database: 1,
41
+ }),
42
+ });
43
+ }
44
+ // rate limiting, allows for 2 requests per second
45
+ const limiter = RateLimit.middleware({
46
+ interval: { sec: 1 },
47
+ // per ip, per interval
48
+ max: getApiLimitPerSecond(),
49
+ });
18
50
  const publicRouter = new Router({
19
51
  prefix: PREFIX,
20
52
  });
53
+ publicRouter.use(limiter);
21
54
  function addMiddleware(endpoints, middleware, opts = { output: false }) {
22
55
  if (!endpoints) {
23
56
  return;
@@ -37,6 +37,7 @@ module.exports = {
37
37
  INTERNAL_API_KEY: process.env.INTERNAL_API_KEY,
38
38
  MULTI_TENANCY: process.env.MULTI_TENANCY,
39
39
  HTTP_MIGRATIONS: process.env.HTTP_MIGRATIONS,
40
+ API_REQ_LIMIT_PER_SEC: process.env.API_REQ_LIMIT_PER_SEC,
40
41
  // environment
41
42
  NODE_ENV: process.env.NODE_ENV,
42
43
  JEST_WORKER_ID: process.env.JEST_WORKER_ID,
@@ -13,10 +13,10 @@ const datasource_1 = require("../definitions/datasource");
13
13
  const utils_1 = require("./utils");
14
14
  var MySQLModule;
15
15
  (function (MySQLModule) {
16
- const mysql = require("mysql2");
16
+ const mysql = require("mysql2/promise");
17
17
  const Sql = require("./base/sql");
18
18
  const SCHEMA = {
19
- docs: "https://github.com/mysqljs/mysql",
19
+ docs: "https://github.com/sidorares/node-mysql2",
20
20
  plus: true,
21
21
  friendlyName: "MySQL",
22
22
  description: "MySQL Database Service is a fully managed database service to deploy cloud-native applications. ",
@@ -74,72 +74,84 @@ var MySQLModule;
74
74
  if (config.ssl && Object.keys(config.ssl).length === 0) {
75
75
  delete config.ssl;
76
76
  }
77
- this.client = mysql.createConnection(config);
77
+ this.config = config;
78
78
  }
79
79
  getBindingIdentifier() {
80
80
  return "?";
81
81
  }
82
+ connect() {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ this.client = yield mysql.createConnection(this.config);
85
+ });
86
+ }
87
+ disconnect() {
88
+ return __awaiter(this, void 0, void 0, function* () {
89
+ yield this.client.end();
90
+ });
91
+ }
82
92
  internalQuery(query, connect = true) {
83
- const client = this.client;
84
- // Node MySQL is callback based, so we must wrap our call in a promise
85
- return new Promise((resolve, reject) => {
86
- if (connect) {
87
- client.connect();
88
- }
89
- return client.query(query.sql, query.bindings || {}, (error, results) => {
90
- if (error) {
91
- reject(error);
92
- }
93
- else {
94
- resolve(results);
93
+ return __awaiter(this, void 0, void 0, function* () {
94
+ try {
95
+ if (connect) {
96
+ yield this.connect();
95
97
  }
98
+ // Node MySQL is callback based, so we must wrap our call in a promise
99
+ const response = yield this.client.query(query.sql, query.bindings || []);
100
+ return response[0];
101
+ }
102
+ finally {
96
103
  if (connect) {
97
- client.end();
104
+ yield this.disconnect();
98
105
  }
99
- });
106
+ }
100
107
  });
101
108
  }
102
109
  buildSchema(datasourceId, entities) {
103
110
  return __awaiter(this, void 0, void 0, function* () {
104
111
  const tables = {};
105
112
  const database = this.config.database;
106
- this.client.connect();
107
- // get the tables first
108
- const tablesResp = yield this.internalQuery({ sql: "SHOW TABLES;" }, false);
109
- const tableNames = tablesResp.map((obj) => obj[`Tables_in_${database}`] ||
110
- obj[`Tables_in_${database.toLowerCase()}`]);
111
- for (let tableName of tableNames) {
112
- const primaryKeys = [];
113
- const schema = {};
114
- const descResp = yield this.internalQuery({ sql: `DESCRIBE \`${tableName}\`;` }, false);
115
- for (let column of descResp) {
116
- const columnName = column.Field;
117
- if (column.Key === "PRI" && primaryKeys.indexOf(column.Key) === -1) {
118
- primaryKeys.push(columnName);
113
+ yield this.connect();
114
+ try {
115
+ // get the tables first
116
+ const tablesResp = yield this.internalQuery({ sql: "SHOW TABLES;" }, false);
117
+ const tableNames = tablesResp.map((obj) => obj[`Tables_in_${database}`] ||
118
+ obj[`Tables_in_${database.toLowerCase()}`]);
119
+ for (let tableName of tableNames) {
120
+ const primaryKeys = [];
121
+ const schema = {};
122
+ const descResp = yield this.internalQuery({ sql: `DESCRIBE \`${tableName}\`;` }, false);
123
+ for (let column of descResp) {
124
+ const columnName = column.Field;
125
+ if (column.Key === "PRI" &&
126
+ primaryKeys.indexOf(column.Key) === -1) {
127
+ primaryKeys.push(columnName);
128
+ }
129
+ const constraints = {
130
+ presence: column.Null !== "YES",
131
+ };
132
+ const isAuto = typeof column.Extra === "string" &&
133
+ (column.Extra === "auto_increment" ||
134
+ column.Extra.toLowerCase().includes("generated"));
135
+ schema[columnName] = {
136
+ name: columnName,
137
+ autocolumn: isAuto,
138
+ type: utils_1.convertSqlType(column.Type),
139
+ constraints,
140
+ };
141
+ }
142
+ if (!tables[tableName]) {
143
+ tables[tableName] = {
144
+ _id: utils_1.buildExternalTableId(datasourceId, tableName),
145
+ primary: primaryKeys,
146
+ name: tableName,
147
+ schema,
148
+ };
119
149
  }
120
- const constraints = {
121
- presence: column.Null !== "YES",
122
- };
123
- const isAuto = typeof column.Extra === "string" &&
124
- (column.Extra === "auto_increment" ||
125
- column.Extra.toLowerCase().includes("generated"));
126
- schema[columnName] = {
127
- name: columnName,
128
- autocolumn: isAuto,
129
- type: utils_1.convertSqlType(column.Type),
130
- constraints,
131
- };
132
- }
133
- if (!tables[tableName]) {
134
- tables[tableName] = {
135
- _id: utils_1.buildExternalTableId(datasourceId, tableName),
136
- primary: primaryKeys,
137
- name: tableName,
138
- schema,
139
- };
140
150
  }
141
151
  }
142
- this.client.end();
152
+ finally {
153
+ yield this.disconnect();
154
+ }
143
155
  const final = utils_1.finaliseExternalTables(tables, entities);
144
156
  this.tables = final.tables;
145
157
  this.schemaErrors = final.errors;
@@ -170,11 +182,14 @@ var MySQLModule;
170
182
  }
171
183
  query(json) {
172
184
  return __awaiter(this, void 0, void 0, function* () {
173
- this.client.connect();
174
- const queryFn = (query) => this.internalQuery(query, false);
175
- const output = yield this.queryWithReturning(json, queryFn);
176
- this.client.end();
177
- return output;
185
+ yield this.connect();
186
+ try {
187
+ const queryFn = (query) => this.internalQuery(query, false);
188
+ return yield this.queryWithReturning(json, queryFn);
189
+ }
190
+ finally {
191
+ yield this.disconnect();
192
+ }
178
193
  });
179
194
  }
180
195
  }
@@ -40,7 +40,7 @@ var SqlClients;
40
40
  (function (SqlClients) {
41
41
  SqlClients["MS_SQL"] = "mssql";
42
42
  SqlClients["POSTGRES"] = "pg";
43
- SqlClients["MY_SQL"] = "mysql";
43
+ SqlClients["MY_SQL"] = "mysql2";
44
44
  SqlClients["ORACLE"] = "oracledb";
45
45
  })(SqlClients = exports.SqlClients || (exports.SqlClients = {}));
46
46
  function isExternalTable(tableId) {
package/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.0.79-alpha.7",
4
+ "version": "1.0.79",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -21,9 +21,6 @@
21
21
  "dev:stack:down": "node scripts/dev/manage.js down",
22
22
  "dev:stack:nuke": "node scripts/dev/manage.js nuke",
23
23
  "dev:builder": "yarn run dev:stack:up && nodemon",
24
- "generate:proxy:compose": "node scripts/proxy/generateProxyConfig compose",
25
- "generate:proxy:preprod": "node scripts/proxy/generateProxyConfig preprod",
26
- "generate:proxy:prod": "node scripts/proxy/generateProxyConfig prod",
27
24
  "format": "prettier --config ../../.prettierrc.json 'src/**/*.ts' --write",
28
25
  "specs": "node specs/generate.js && openapi-typescript specs/openapi.yaml --output src/definitions/openapi.ts",
29
26
  "lint": "eslint --fix src/",
@@ -74,9 +71,9 @@
74
71
  "license": "GPL-3.0",
75
72
  "dependencies": {
76
73
  "@apidevtools/swagger-parser": "^10.0.3",
77
- "@budibase/backend-core": "^1.0.79-alpha.7",
78
- "@budibase/client": "^1.0.79-alpha.7",
79
- "@budibase/string-templates": "^1.0.79-alpha.7",
74
+ "@budibase/backend-core": "^1.0.79",
75
+ "@budibase/client": "^1.0.79",
76
+ "@budibase/string-templates": "^1.0.79",
80
77
  "@bull-board/api": "^3.7.0",
81
78
  "@bull-board/koa": "^3.7.0",
82
79
  "@elastic/elasticsearch": "7.10.0",
@@ -111,6 +108,7 @@
111
108
  "koa-send": "5.0.0",
112
109
  "koa-session": "5.12.0",
113
110
  "koa-static": "5.0.0",
111
+ "koa2-ratelimit": "^1.1.0",
114
112
  "lodash": "4.17.21",
115
113
  "memorystream": "^0.3.1",
116
114
  "mongodb": "3.6.3",
@@ -126,6 +124,7 @@
126
124
  "pouchdb-all-dbs": "1.0.2",
127
125
  "pouchdb-find": "^7.2.2",
128
126
  "pouchdb-replication-stream": "1.2.9",
127
+ "redis": "4",
129
128
  "server-destroy": "1.0.1",
130
129
  "svelte": "^3.38.2",
131
130
  "swagger-parser": "^10.0.3",
@@ -151,6 +150,7 @@
151
150
  "@types/koa-router": "^7.4.2",
152
151
  "@types/node": "^15.12.4",
153
152
  "@types/oracledb": "^5.2.1",
153
+ "@types/redis": "^4.0.11",
154
154
  "@typescript-eslint/parser": "4.28.0",
155
155
  "apidoc": "^0.50.2",
156
156
  "babel-jest": "^27.0.2",