@budibase/server 1.0.41 → 1.0.44-alpha.1

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 (186) hide show
  1. package/builder/assets/{index.d5158e11.js → index.69d37e5e.js} +231 -231
  2. package/builder/assets/{vendor.f9faf6ab.js → vendor.10e2ad1b.js} +12 -12
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +285 -275
  5. package/coverage/coverage-final.json +5 -5
  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/hosting.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +1 -1
  18. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  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/permission.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/query/index.html +14 -14
  23. package/coverage/lcov-report/api/controllers/query/index.js.html +18 -9
  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 +15 -15
  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/utils.js.html +29 -14
  33. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/index.html +17 -17
  37. package/coverage/lcov-report/api/controllers/table/index.js.html +34 -16
  38. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/table/utils.js.html +16 -7
  40. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  47. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  48. package/coverage/lcov-report/api/index.html +1 -1
  49. package/coverage/lcov-report/api/index.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/index.html +1 -1
  63. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  80. package/coverage/lcov-report/automations/actions.js.html +1 -1
  81. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  82. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  83. package/coverage/lcov-report/automations/index.html +1 -1
  84. package/coverage/lcov-report/automations/index.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/index.html +1 -1
  94. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  112. package/coverage/lcov-report/automations/utils.js.html +1 -1
  113. package/coverage/lcov-report/constants/index.html +1 -1
  114. package/coverage/lcov-report/constants/index.js.html +1 -1
  115. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  116. package/coverage/lcov-report/constants/screens.js.html +1 -1
  117. package/coverage/lcov-report/db/client.js.html +1 -1
  118. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  119. package/coverage/lcov-report/db/index.html +1 -1
  120. package/coverage/lcov-report/db/index.js.html +1 -1
  121. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  122. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  123. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  124. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  125. package/coverage/lcov-report/db/newid.js.html +1 -1
  126. package/coverage/lcov-report/db/utils.js.html +1 -1
  127. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  128. package/coverage/lcov-report/events/index.html +1 -1
  129. package/coverage/lcov-report/events/index.js.html +1 -1
  130. package/coverage/lcov-report/events/utils.js.html +1 -1
  131. package/coverage/lcov-report/index.html +32 -32
  132. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  133. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  134. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  135. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  136. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  137. package/coverage/lcov-report/middleware/currentapp.js.html +33 -6
  138. package/coverage/lcov-report/middleware/index.html +10 -10
  139. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  140. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  141. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  142. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  143. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  144. package/coverage/lcov-report/threads/automation.js.html +1 -1
  145. package/coverage/lcov-report/threads/index.html +1 -1
  146. package/coverage/lcov-report/threads/index.js.html +1 -1
  147. package/coverage/lcov-report/threads/query.js.html +1 -1
  148. package/coverage/lcov-report/threads/utils.js.html +1 -1
  149. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  150. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  151. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  152. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  153. package/coverage/lcov-report/utilities/global.js.html +1 -1
  154. package/coverage/lcov-report/utilities/index.html +1 -1
  155. package/coverage/lcov-report/utilities/index.js.html +1 -1
  156. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  157. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  158. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  159. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  160. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  161. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  162. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  163. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  164. package/coverage/lcov-report/utilities/security.js.html +1 -1
  165. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  166. package/coverage/lcov-report/utilities/users.js.html +1 -1
  167. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  168. package/coverage/lcov.info +461 -444
  169. package/dist/api/controllers/query/index.js +4 -1
  170. package/dist/api/controllers/row/utils.js +12 -6
  171. package/dist/api/controllers/table/index.js +10 -4
  172. package/dist/api/controllers/table/utils.js +4 -2
  173. package/dist/integrations/base/sql.js +13 -6
  174. package/dist/integrations/utils.js +6 -1
  175. package/dist/middleware/currentapp.js +9 -0
  176. package/dist/package.json +4 -4
  177. package/dist/tsconfig.tsbuildinfo +1 -1
  178. package/package.json +5 -5
  179. package/src/api/controllers/query/index.js +4 -1
  180. package/src/api/controllers/row/utils.js +11 -6
  181. package/src/api/controllers/table/index.js +15 -9
  182. package/src/api/controllers/table/utils.js +4 -1
  183. package/src/integrations/base/sql.ts +14 -7
  184. package/src/integrations/tests/sql.spec.js +16 -0
  185. package/src/integrations/utils.ts +7 -3
  186. package/src/middleware/currentapp.js +9 -0
@@ -15,7 +15,10 @@ const { Thread, ThreadType } = require("../../../threads");
15
15
  const { save: saveDatasource } = require("../datasource");
16
16
  const { RestImporter } = require("./import");
17
17
  const { invalidateDynamicVariables } = require("../../../threads/utils");
18
- const Runner = new Thread(ThreadType.QUERY, { timeoutMs: 10000 });
18
+ const environment = require("../../../environment");
19
+ const Runner = new Thread(ThreadType.QUERY, {
20
+ timeoutMs: environment.QUERY_THREAD_TIMEOUT || 10000,
21
+ });
19
22
  // simple function to append "readable" to all read queries
20
23
  function enrichQueries(input) {
21
24
  const wasArray = Array.isArray(input);
@@ -65,12 +65,18 @@ exports.validate = ({ appId, tableId, row, table }) => __awaiter(void 0, void 0,
65
65
  }
66
66
  let res;
67
67
  // Validate.js doesn't seem to handle array
68
- if (type === FieldTypes.ARRAY && row[fieldName] && row[fieldName].length) {
69
- row[fieldName].map(val => {
70
- if (!constraints.inclusion.includes(val)) {
71
- errors[fieldName] = "Field not in list";
72
- }
73
- });
68
+ if (type === FieldTypes.ARRAY && row[fieldName]) {
69
+ if (row[fieldName].length) {
70
+ row[fieldName].map(val => {
71
+ if (!constraints.inclusion.includes(val)) {
72
+ errors[fieldName] = "Field not in list";
73
+ }
74
+ });
75
+ }
76
+ else if (constraints.presence && row[fieldName].length === 0) {
77
+ // non required MultiSelect creates an empty array, which should not throw errors
78
+ errors[fieldName] = [`${fieldName} is required`];
79
+ }
74
80
  }
75
81
  else if (type === FieldTypes.JSON && typeof row[fieldName] === "string") {
76
82
  // this should only happen if there is an error
@@ -12,7 +12,7 @@ const CouchDB = require("../../../db");
12
12
  const internal = require("./internal");
13
13
  const external = require("./external");
14
14
  const csvParser = require("../../../utilities/csvParser");
15
- const { isExternalTable } = require("../../../integrations/utils");
15
+ const { isExternalTable, isSQL } = require("../../../integrations/utils");
16
16
  const { getTableParams, getDatasourceParams, BudibaseInternalDB, } = require("../../../db/utils");
17
17
  const { getTable } = require("./utils");
18
18
  function pickApi({ tableId, table }) {
@@ -34,12 +34,18 @@ exports.fetch = function (ctx) {
34
34
  const internalTables = yield db.allDocs(getTableParams(null, {
35
35
  include_docs: true,
36
36
  }));
37
- const internal = internalTables.rows.map(row => (Object.assign(Object.assign({}, row.doc), { type: "internal", sourceId: BudibaseInternalDB._id })));
37
+ const internal = internalTables.rows.map(tableDoc => (Object.assign(Object.assign({}, tableDoc.doc), { type: "internal", sourceId: BudibaseInternalDB._id })));
38
38
  const externalTables = yield db.allDocs(getDatasourceParams("plus", {
39
39
  include_docs: true,
40
40
  }));
41
- const external = externalTables.rows.flatMap(row => {
42
- return Object.values(row.doc.entities || {}).map(entity => (Object.assign(Object.assign({}, entity), { type: "external", sourceId: row.doc._id })));
41
+ const external = externalTables.rows.flatMap(tableDoc => {
42
+ let entities = tableDoc.doc.entities;
43
+ if (entities) {
44
+ return Object.values(entities).map(entity => (Object.assign(Object.assign({}, entity), { type: "external", sourceId: tableDoc.doc._id, sql: isSQL(tableDoc.doc) })));
45
+ }
46
+ else {
47
+ return [];
48
+ }
43
49
  });
44
50
  ctx.body = [...internal, ...external];
45
51
  });
@@ -15,7 +15,7 @@ const { isEqual } = require("lodash/fp");
15
15
  const { AutoFieldSubTypes, FieldTypes } = require("../../../constants");
16
16
  const { inputProcessing } = require("../../../utilities/rowProcessor");
17
17
  const { USERS_TABLE_SCHEMA, SwitchableTypes } = require("../../../constants");
18
- const { isExternalTable, breakExternalTableId, } = require("../../../integrations/utils");
18
+ const { isExternalTable, breakExternalTableId, isSQL, } = require("../../../integrations/utils");
19
19
  const { getViews, saveView } = require("../view/utils");
20
20
  const viewTemplate = require("../view/viewBuilder");
21
21
  exports.checkForColumnUpdates = (db, oldTable, updatedTable) => __awaiter(void 0, void 0, void 0, function* () {
@@ -207,7 +207,9 @@ exports.getTable = (appId, tableId) => __awaiter(void 0, void 0, void 0, functio
207
207
  const db = new CouchDB(appId);
208
208
  if (isExternalTable(tableId)) {
209
209
  let { datasourceId, tableName } = breakExternalTableId(tableId);
210
- return exports.getExternalTable(appId, datasourceId, tableName);
210
+ const datasource = yield db.get(datasourceId);
211
+ const table = yield exports.getExternalTable(appId, datasourceId, tableName);
212
+ return Object.assign(Object.assign({}, table), { sql: isSQL(datasource) });
211
213
  }
212
214
  else {
213
215
  return db.get(tableId);
@@ -69,10 +69,16 @@ class InternalBuilder {
69
69
  this.client = client;
70
70
  }
71
71
  // right now we only do filters on the specific table being queried
72
- addFilters(tableName, query, filters) {
72
+ addFilters(query, filters, opts) {
73
73
  function iterate(structure, fn) {
74
74
  for (let [key, value] of Object.entries(structure)) {
75
- fn(`${tableName}.${key}`, value);
75
+ const isRelationshipField = key.includes(".");
76
+ if (!opts.relationship && !isRelationshipField) {
77
+ fn(`${opts.tableName}.${key}`, value);
78
+ }
79
+ if (opts.relationship && isRelationshipField) {
80
+ fn(key, value);
81
+ }
76
82
  }
77
83
  }
78
84
  if (!filters) {
@@ -248,7 +254,7 @@ class InternalBuilder {
248
254
  if (foundOffset) {
249
255
  query = query.offset(foundOffset);
250
256
  }
251
- query = this.addFilters(tableName, query, filters);
257
+ query = this.addFilters(query, filters, { tableName });
252
258
  // add sorting to pre-query
253
259
  query = this.addSorting(query, json);
254
260
  // @ts-ignore
@@ -261,13 +267,14 @@ class InternalBuilder {
261
267
  preQuery = this.addSorting(preQuery, json);
262
268
  }
263
269
  // handle joins
264
- return this.addRelationships(knex, preQuery, selectStatement, tableName, relationships);
270
+ query = this.addRelationships(knex, preQuery, selectStatement, tableName, relationships);
271
+ return this.addFilters(query, filters, { relationship: true });
265
272
  }
266
273
  update(knex, json, opts) {
267
274
  const { endpoint, body, filters } = json;
268
275
  let query = knex(endpoint.entityId);
269
276
  const parsedBody = parseBody(body);
270
- query = this.addFilters(endpoint.entityId, query, filters);
277
+ query = this.addFilters(query, filters, { tableName: endpoint.entityId });
271
278
  // mysql can't use returning
272
279
  if (opts.disableReturning) {
273
280
  return query.update(parsedBody);
@@ -279,7 +286,7 @@ class InternalBuilder {
279
286
  delete(knex, json, opts) {
280
287
  const { endpoint, filters } = json;
281
288
  let query = knex(endpoint.entityId);
282
- query = this.addFilters(endpoint.entityId, query, filters);
289
+ query = this.addFilters(query, filters, { tableName: endpoint.entityId });
283
290
  // mysql can't use returning
284
291
  if (opts.disableReturning) {
285
292
  return query.delete();
@@ -125,7 +125,12 @@ function isSQL(datasource) {
125
125
  if (!datasource || !datasource.source) {
126
126
  return false;
127
127
  }
128
- const SQL = [datasource_1.SourceNames.POSTGRES, datasource_1.SourceNames.SQL_SERVER, datasource_1.SourceNames.MYSQL];
128
+ const SQL = [
129
+ datasource_1.SourceNames.POSTGRES,
130
+ datasource_1.SourceNames.SQL_SERVER,
131
+ datasource_1.SourceNames.MYSQL,
132
+ datasource_1.SourceNames.ORACLE,
133
+ ];
129
134
  return SQL.indexOf(datasource.source) !== -1;
130
135
  }
131
136
  exports.isSQL = isSQL;
@@ -49,6 +49,15 @@ module.exports = (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
49
49
  !isWebhookEndpoint(ctx) &&
50
50
  (!ctx.user || !ctx.user.builder || !ctx.user.builder.global)) {
51
51
  clearCookie(ctx, Cookies.CurrentApp);
52
+ // have to set the return url on the server side as client side is not available
53
+ setCookie(ctx, ctx.url, Cookies.RETURN_URL, {
54
+ // don't sign so the browser can easily read
55
+ sign: false,
56
+ // use the request domain to match how ui handles the return url cookie.
57
+ // it's important we don't use the shared domain here as the builder
58
+ // can't delete from it without awareness of the domain.
59
+ requestDomain: true,
60
+ });
52
61
  return ctx.redirect("/");
53
62
  }
54
63
  let appId, roleId = BUILTIN_ROLE_IDS.PUBLIC;
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.40",
4
+ "version": "1.0.44-alpha.0",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -70,9 +70,9 @@
70
70
  "license": "GPL-3.0",
71
71
  "dependencies": {
72
72
  "@apidevtools/swagger-parser": "^10.0.3",
73
- "@budibase/backend-core": "^1.0.40",
74
- "@budibase/client": "^1.0.40",
75
- "@budibase/string-templates": "^1.0.40",
73
+ "@budibase/backend-core": "^1.0.44-alpha.0",
74
+ "@budibase/client": "^1.0.44-alpha.0",
75
+ "@budibase/string-templates": "^1.0.44-alpha.0",
76
76
  "@bull-board/api": "^3.7.0",
77
77
  "@bull-board/koa": "^3.7.0",
78
78
  "@elastic/elasticsearch": "7.10.0",