@budibase/server 1.0.98-alpha.8 → 1.0.100

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 (237) hide show
  1. package/builder/assets/index.10df5571.js +1291 -0
  2. package/builder/assets/{index.ea3718aa.css → index.7c8961b4.css} +2 -2
  3. package/builder/assets/{vendor.8e34a169.js → vendor.a7c6ad0a.js} +1 -1
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +342 -346
  6. package/coverage/coverage-final.json +15 -15
  7. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +18 -18
  18. package/coverage/lcov-report/api/controllers/integration.js.html +11 -59
  19. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/permission.js.html +7 -7
  23. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  24. package/coverage/lcov-report/api/controllers/query/index.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/query/validation.js.html +2 -2
  26. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/index.html +10 -10
  30. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/internal.js.html +7 -19
  32. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/row/utils.js.html +6 -6
  35. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  40. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  47. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  49. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  50. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  51. package/coverage/lcov-report/api/index.html +1 -1
  52. package/coverage/lcov-report/api/index.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/analytics.js.html +3 -3
  54. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/index.html +1 -1
  65. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/table.js.html +2 -2
  79. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  82. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  84. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  85. package/coverage/lcov-report/automations/actions.js.html +1 -1
  86. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  87. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  88. package/coverage/lcov-report/automations/index.html +12 -12
  89. package/coverage/lcov-report/automations/index.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/index.html +1 -1
  99. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  106. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  107. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  113. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  114. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  115. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  116. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  117. package/coverage/lcov-report/automations/utils.js.html +20 -8
  118. package/coverage/lcov-report/constants/index.html +1 -1
  119. package/coverage/lcov-report/constants/index.js.html +1 -1
  120. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  121. package/coverage/lcov-report/constants/screens.js.html +1 -1
  122. package/coverage/lcov-report/db/client.js.html +1 -1
  123. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  124. package/coverage/lcov-report/db/index.html +1 -1
  125. package/coverage/lcov-report/db/index.js.html +1 -1
  126. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  127. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  128. package/coverage/lcov-report/db/linkedRows/index.js.html +10 -10
  129. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +7 -7
  130. package/coverage/lcov-report/db/newid.js.html +2 -2
  131. package/coverage/lcov-report/db/utils.js.html +2 -2
  132. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  133. package/coverage/lcov-report/events/index.html +1 -1
  134. package/coverage/lcov-report/events/index.js.html +1 -1
  135. package/coverage/lcov-report/events/utils.js.html +1 -1
  136. package/coverage/lcov-report/index.html +29 -29
  137. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  138. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  139. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  140. package/coverage/lcov-report/middleware/authorized.js.html +75 -15
  141. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  142. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  143. package/coverage/lcov-report/middleware/index.html +15 -15
  144. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  145. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  146. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  147. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  148. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  149. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  150. package/coverage/lcov-report/threads/automation.js.html +1 -1
  151. package/coverage/lcov-report/threads/index.html +1 -1
  152. package/coverage/lcov-report/threads/index.js.html +1 -1
  153. package/coverage/lcov-report/threads/query.js.html +1 -1
  154. package/coverage/lcov-report/threads/utils.js.html +1 -1
  155. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  156. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  157. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  158. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  159. package/coverage/lcov-report/utilities/global.js.html +1 -1
  160. package/coverage/lcov-report/utilities/index.html +1 -1
  161. package/coverage/lcov-report/utilities/index.js.html +1 -1
  162. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  163. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  164. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  165. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  166. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  167. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +12 -12
  168. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +8 -8
  169. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  170. package/coverage/lcov-report/utilities/security.js.html +1 -1
  171. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  172. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  173. package/coverage/lcov-report/utilities/usageQuota/index.js.html +1 -1
  174. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  175. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  176. package/coverage/lcov-report/utilities/users.js.html +1 -1
  177. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  178. package/coverage/lcov.info +568 -562
  179. package/dist/api/controllers/integration.js +1 -15
  180. package/dist/api/controllers/permission.js +3 -4
  181. package/dist/api/controllers/query/import/index.js +1 -2
  182. package/dist/api/controllers/query/import/sources/base/index.js +1 -12
  183. package/dist/api/controllers/query/import/sources/curl.js +2 -2
  184. package/dist/api/controllers/row/internal.js +1 -2
  185. package/dist/api/routes/analytics.js +2 -2
  186. package/dist/api/routes/table.js +1 -1
  187. package/dist/automations/utils.js +3 -1
  188. package/dist/definitions/datasource.js +0 -1
  189. package/dist/environment.js +0 -2
  190. package/dist/integrations/base/sql.js +9 -16
  191. package/dist/integrations/dynamodb.js +1 -3
  192. package/dist/integrations/googlesheets.js +1 -17
  193. package/dist/integrations/index.js +1 -4
  194. package/dist/integrations/mysql.js +14 -1
  195. package/dist/integrations/rest.js +1 -2
  196. package/dist/middleware/authorized.js +24 -7
  197. package/dist/package.json +4 -7
  198. package/dist/tsconfig.tsbuildinfo +1 -1
  199. package/package.json +5 -8
  200. package/scripts/dev/manage.js +1 -2
  201. package/specs/openapi.json +23 -3
  202. package/specs/openapi.yaml +20 -4
  203. package/specs/resources/query.js +27 -5
  204. package/src/api/controllers/integration.js +1 -17
  205. package/src/api/controllers/permission.js +3 -3
  206. package/src/api/controllers/query/import/index.ts +1 -2
  207. package/src/api/controllers/query/import/sources/base/index.ts +2 -12
  208. package/src/api/controllers/query/import/sources/curl.ts +2 -2
  209. package/src/api/controllers/query/import/tests/index.spec.js +0 -43
  210. package/src/api/controllers/row/internal.js +1 -5
  211. package/src/api/routes/analytics.js +2 -2
  212. package/src/api/routes/table.js +1 -1
  213. package/src/api/routes/tests/misc.spec.js +2 -2
  214. package/src/automations/utils.js +5 -1
  215. package/src/definitions/datasource.ts +1 -6
  216. package/src/definitions/openapi.ts +483 -473
  217. package/src/environment.js +0 -2
  218. package/src/integrations/base/sql.ts +9 -14
  219. package/src/integrations/dynamodb.ts +1 -3
  220. package/src/integrations/googlesheets.ts +1 -16
  221. package/src/integrations/index.ts +1 -4
  222. package/src/integrations/mysql.ts +15 -1
  223. package/src/integrations/rest.ts +1 -2
  224. package/src/integrations/tests/sql.spec.js +0 -51
  225. package/src/middleware/authorized.js +26 -6
  226. package/builder/assets/index.f7a1491e.js +0 -1291
  227. package/dist/api/controllers/query/import/sources/openapi3.js +0 -174
  228. package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
  229. package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
  230. package/dist/integrations/firebase.js +0 -192
  231. package/src/api/controllers/query/import/sources/openapi3.ts +0 -205
  232. package/src/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
  233. package/src/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.yaml +0 -153
  234. package/src/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
  235. package/src/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.yaml +0 -804
  236. package/src/api/controllers/query/import/sources/tests/openapi3/openapi3.spec.js +0 -240
  237. package/src/integrations/firebase.ts +0 -205
@@ -8,25 +8,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- const { cloneDeep } = require("lodash");
12
11
  const { definitions } = require("../../integrations");
13
- const { getTenantId } = require("@budibase/backend-core/tenancy");
14
- const { SourceNames } = require("../../definitions/datasource");
15
- const googlesheets = require("../../integrations/googlesheets");
16
- const env = require("../../environment");
17
12
  exports.fetch = function (ctx) {
18
13
  return __awaiter(this, void 0, void 0, function* () {
19
14
  ctx.status = 200;
20
- const defs = cloneDeep(definitions);
21
- // for google sheets integration google verification
22
- if (env.EXCLUDE_QUOTAS_TENANTS) {
23
- const excludedTenants = env.EXCLUDE_QUOTAS_TENANTS.split(",");
24
- const tenantId = getTenantId();
25
- if (excludedTenants.includes(tenantId)) {
26
- defs[SourceNames.GOOGLE_SHEETS] = googlesheets.schema;
27
- }
28
- }
29
- ctx.body = defs;
15
+ ctx.body = definitions;
30
16
  });
31
17
  };
32
18
  exports.find = function (ctx) {
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  const { getBuiltinPermissions } = require("@budibase/backend-core/permissions");
12
- const { isBuiltin, getDBRoleID, getExternalRoleID, getBuiltinRoles, } = require("@budibase/backend-core/roles");
12
+ const { isBuiltin, getDBRoleID, getExternalRoleID, getBuiltinRoles, checkForRoleResourceArray, } = require("@budibase/backend-core/roles");
13
13
  const { getRoleParams } = require("../../db/utils");
14
14
  const { CURRENTLY_SUPPORTED_LEVELS, getBasePermissions, } = require("../../utilities/security");
15
15
  const { removeFromArray } = require("../../utilities");
@@ -130,11 +130,10 @@ exports.getResourcePerms = function (ctx) {
130
130
  for (let level of SUPPORTED_LEVELS) {
131
131
  // update the various roleIds in the resource permissions
132
132
  for (let role of roles) {
133
- const rolePerms = role.permissions;
133
+ const rolePerms = checkForRoleResourceArray(role.permissions, resourceId);
134
134
  if (rolePerms &&
135
135
  rolePerms[resourceId] &&
136
- (rolePerms[resourceId] === level ||
137
- rolePerms[resourceId].indexOf(level) !== -1)) {
136
+ rolePerms[resourceId].indexOf(level) !== -1) {
138
137
  permissions[level] = getExternalRoleID(role._id);
139
138
  }
140
139
  }
@@ -13,7 +13,6 @@ exports.RestImporter = void 0;
13
13
  const validation_1 = require("../validation");
14
14
  const utils_1 = require("../../../../db/utils");
15
15
  const openapi2_1 = require("./sources/openapi2");
16
- const openapi3_1 = require("./sources/openapi3");
17
16
  const curl_1 = require("./sources/curl");
18
17
  // @ts-ignore
19
18
  const context_1 = require("@budibase/backend-core/context");
@@ -72,7 +71,7 @@ class RestImporter {
72
71
  };
73
72
  });
74
73
  this.data = data;
75
- this.sources = [new openapi2_1.OpenAPI2(), new openapi3_1.OpenAPI3(), new curl_1.Curl()];
74
+ this.sources = [new openapi2_1.OpenAPI2(), new curl_1.Curl()];
76
75
  }
77
76
  }
78
77
  exports.RestImporter = RestImporter;
@@ -17,18 +17,7 @@ class ImportSource {
17
17
  const transformer = "return data";
18
18
  const schema = {};
19
19
  path = this.processPath(path);
20
- if (url) {
21
- if (typeof url === "string") {
22
- path = `${url}/${path}`;
23
- }
24
- else {
25
- let href = url.href;
26
- if (href.endsWith("/")) {
27
- href = href.slice(0, -1);
28
- }
29
- path = `${href}/${path}`;
30
- }
31
- }
20
+ path = `${url.origin}/${path}`;
32
21
  queryString = this.processQuery(queryString);
33
22
  const requestBody = JSON.stringify(body, null, 2);
34
23
  const query = {
@@ -79,7 +79,7 @@ class Curl extends base_1.ImportSource {
79
79
  this.getQueries = (datasourceId) => __awaiter(this, void 0, void 0, function* () {
80
80
  const url = this.getUrl();
81
81
  const name = url.pathname;
82
- const path = url.origin + url.pathname;
82
+ const path = url.pathname;
83
83
  const method = this.curl.method;
84
84
  const queryString = url.search;
85
85
  const headers = this.curl.headers;
@@ -88,7 +88,7 @@ class Curl extends base_1.ImportSource {
88
88
  if (cookieHeader) {
89
89
  headers["Cookie"] = cookieHeader;
90
90
  }
91
- const query = this.constructQuery(datasourceId, name, method, path, undefined, queryString, headers, [], requestBody);
91
+ const query = this.constructQuery(datasourceId, name, method, path, url, queryString, headers, [], requestBody);
92
92
  return [query];
93
93
  });
94
94
  }
@@ -91,8 +91,7 @@ exports.patch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
91
91
  const isUserTable = tableId === InternalTables.USER_METADATA;
92
92
  let oldRow;
93
93
  try {
94
- let dbTable = yield db.get(tableId);
95
- oldRow = yield outputProcessing(dbTable, yield findRow(ctx, tableId, inputs._id));
94
+ oldRow = yield db.get(inputs._id);
96
95
  }
97
96
  catch (err) {
98
97
  if (isUserTable) {
@@ -3,6 +3,6 @@ const Router = require("@koa/router");
3
3
  const controller = require("../controllers/analytics");
4
4
  const router = Router();
5
5
  router
6
- .get("/api/bbtel", controller.isEnabled)
7
- .post("/api/bbtel/ping", controller.endUserPing);
6
+ .get("/api/analytics", controller.isEnabled)
7
+ .post("/api/analytics/ping", controller.endUserPing);
8
8
  module.exports = router;
@@ -32,7 +32,7 @@ router
32
32
  *
33
33
  * @apiSuccess {object[]} body The response body will be the table that was found.
34
34
  */
35
- .get("/api/tables/:tableId", paramResource("tableId"), authorized(PermissionTypes.TABLE, PermissionLevels.READ), tableController.find)
35
+ .get("/api/tables/:tableId", paramResource("tableId"), authorized(PermissionTypes.TABLE, PermissionLevels.READ, { schema: true }), tableController.find)
36
36
  /**
37
37
  * @api {post} /api/tables Save a table
38
38
  * @apiName Save a table
@@ -25,10 +25,12 @@ const Runner = new Thread(ThreadType.AUTOMATION);
25
25
  exports.processEvent = (job) => __awaiter(void 0, void 0, void 0, function* () {
26
26
  try {
27
27
  // need to actually await these so that an error can be captured properly
28
+ console.log(`${job.data.automation.appId} automation ${job.data.automation._id} running`);
28
29
  return yield Runner.run(job);
29
30
  }
30
31
  catch (err) {
31
- console.error(`${job.data.automation.appId} automation ${job.data.automation._id} was unable to run - ${err}`);
32
+ const errJson = JSON.stringify(err);
33
+ console.error(`${job.data.automation.appId} automation ${job.data.automation._id} was unable to run - ${errJson}`);
32
34
  console.trace(err);
33
35
  return { err };
34
36
  }
@@ -50,7 +50,6 @@ var SourceNames;
50
50
  SourceNames["REST"] = "REST";
51
51
  SourceNames["ORACLE"] = "ORACLE";
52
52
  SourceNames["GOOGLE_SHEETS"] = "GOOGLE_SHEETS";
53
- SourceNames["FIREBASE"] = "FIREBASE";
54
53
  })(SourceNames = exports.SourceNames || (exports.SourceNames = {}));
55
54
  var IncludeRelationships;
56
55
  (function (IncludeRelationships) {
@@ -38,8 +38,6 @@ module.exports = {
38
38
  MULTI_TENANCY: process.env.MULTI_TENANCY,
39
39
  HTTP_MIGRATIONS: process.env.HTTP_MIGRATIONS,
40
40
  API_REQ_LIMIT_PER_SEC: process.env.API_REQ_LIMIT_PER_SEC,
41
- GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID,
42
- GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET,
43
41
  // environment
44
42
  NODE_ENV: process.env.NODE_ENV,
45
43
  JEST_WORKER_ID: process.env.JEST_WORKER_ID,
@@ -34,8 +34,11 @@ function parse(input) {
34
34
  if (typeof input !== "string") {
35
35
  return input;
36
36
  }
37
- if (input === MAX_ISO_DATE || input === MIN_ISO_DATE) {
38
- return null;
37
+ if (input === MAX_ISO_DATE) {
38
+ return new Date(8640000000000000);
39
+ }
40
+ if (input === MIN_ISO_DATE) {
41
+ return new Date(-8640000000000000);
39
42
  }
40
43
  if (utils_1.isIsoDateString(input)) {
41
44
  return new Date(input);
@@ -124,21 +127,11 @@ class InternalBuilder {
124
127
  }
125
128
  if (filters.range) {
126
129
  iterate(filters.range, (key, value) => {
127
- if (value.low && value.high) {
128
- // Use a between operator if we have 2 valid range values
129
- const fnc = allOr ? "orWhereBetween" : "whereBetween";
130
- query = query[fnc](key, [value.low, value.high]);
131
- }
132
- else if (value.low) {
133
- // Use just a single greater than operator if we only have a low
134
- const fnc = allOr ? "orWhere" : "where";
135
- query = query[fnc](key, ">", value.low);
136
- }
137
- else if (value.high) {
138
- // Use just a single less than operator if we only have a high
139
- const fnc = allOr ? "orWhere" : "where";
140
- query = query[fnc](key, "<", value.high);
130
+ if (!value.high || !value.low) {
131
+ return;
141
132
  }
133
+ const fnc = allOr ? "orWhereBetween" : "whereBetween";
134
+ query = query[fnc](key, [value.low, value.high]);
142
135
  });
143
136
  }
144
137
  if (filters.equal) {
@@ -124,9 +124,7 @@ var DynamoModule;
124
124
  class DynamoDBIntegration {
125
125
  constructor(config) {
126
126
  this.config = config;
127
- if (!this.config.endpoint) {
128
- this.connect();
129
- }
127
+ this.connect();
130
128
  let options = {
131
129
  correctClockSkew: true,
132
130
  endpoint: config.endpoint ? config.endpoint : undefined,
@@ -8,16 +8,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
12
  const datasource_1 = require("../definitions/datasource");
16
13
  const google_auth_library_1 = require("google-auth-library");
17
14
  const utils_1 = require("./utils");
18
15
  const constants_1 = require("../constants");
19
16
  const google_spreadsheet_1 = require("google-spreadsheet");
20
- const environment_1 = __importDefault(require("../environment"));
21
17
  var GoogleSheetsModule;
22
18
  (function (GoogleSheetsModule) {
23
19
  const { getGlobalDB } = require("@budibase/backend-core/tenancy");
@@ -124,25 +120,13 @@ var GoogleSheetsModule;
124
120
  try {
125
121
  // Initialise oAuth client
126
122
  const db = getGlobalDB();
127
- let googleConfig = yield getScopedConfig(db, {
123
+ const googleConfig = yield getScopedConfig(db, {
128
124
  type: Configs.GOOGLE,
129
125
  });
130
- if (!googleConfig) {
131
- googleConfig = {
132
- clientID: environment_1.default.GOOGLE_CLIENT_ID,
133
- clientSecret: environment_1.default.GOOGLE_CLIENT_SECRET,
134
- };
135
- }
136
126
  const oauthClient = new google_auth_library_1.OAuth2Client({
137
127
  clientId: googleConfig.clientID,
138
128
  clientSecret: googleConfig.clientSecret,
139
129
  });
140
- oauthClient.on("tokens", tokens => {
141
- oauthClient.setCredentials({
142
- refresh_token: googleConfig.refreshToken,
143
- access_token: tokens.access_token,
144
- });
145
- });
146
130
  oauthClient.credentials.access_token = this.config.auth.accessToken;
147
131
  oauthClient.credentials.refresh_token = this.config.auth.refreshToken;
148
132
  this.client.useOAuth2Client(oauthClient);
@@ -11,7 +11,6 @@ const mysql = require("./mysql");
11
11
  const arangodb = require("./arangodb");
12
12
  const rest = require("./rest");
13
13
  const googlesheets = require("./googlesheets");
14
- const firebase = require("./firebase");
15
14
  const { SourceNames } = require("../definitions/datasource");
16
15
  const environment = require("../environment");
17
16
  const DEFINITIONS = {
@@ -26,7 +25,6 @@ const DEFINITIONS = {
26
25
  [SourceNames.MYSQL]: mysql.schema,
27
26
  [SourceNames.ARANGODB]: arangodb.schema,
28
27
  [SourceNames.REST]: rest.schema,
29
- [SourceNames.FIREBASE]: firebase.schema,
30
28
  };
31
29
  const INTEGRATIONS = {
32
30
  [SourceNames.POSTGRES]: postgres.integration,
@@ -40,8 +38,6 @@ const INTEGRATIONS = {
40
38
  [SourceNames.MYSQL]: mysql.integration,
41
39
  [SourceNames.ARANGODB]: arangodb.integration,
42
40
  [SourceNames.REST]: rest.integration,
43
- [SourceNames.FIREBASE]: firebase.integration,
44
- [SourceNames.GOOGLE_SHEETS]: googlesheets.integration,
45
41
  };
46
42
  // optionally add oracle integration if the oracle binary can be installed
47
43
  if (!(process.arch === "arm64" && process.platform === "darwin")) {
@@ -51,6 +47,7 @@ if (!(process.arch === "arm64" && process.platform === "darwin")) {
51
47
  }
52
48
  if (environment.SELF_HOSTED) {
53
49
  DEFINITIONS[SourceNames.GOOGLE_SHEETS] = googlesheets.schema;
50
+ INTEGRATIONS[SourceNames.GOOGLE_SHEETS] = googlesheets.integration;
54
51
  }
55
52
  module.exports = {
56
53
  definitions: DEFINITIONS,
@@ -65,6 +65,19 @@ var MySQLModule;
65
65
  },
66
66
  },
67
67
  };
68
+ function bindingTypeCoerce(bindings) {
69
+ for (let i = 0; i < bindings.length; i++) {
70
+ const binding = bindings[i];
71
+ if (typeof binding !== "string") {
72
+ continue;
73
+ }
74
+ const matches = binding.match(/^\d*/g);
75
+ if (matches && matches[0] !== "" && !isNaN(Number(matches[0]))) {
76
+ bindings[i] = parseFloat(binding);
77
+ }
78
+ }
79
+ return bindings;
80
+ }
68
81
  class MySQLIntegration extends Sql {
69
82
  constructor(config) {
70
83
  super(utils_1.SqlClients.MY_SQL);
@@ -99,7 +112,7 @@ var MySQLModule;
99
112
  yield this.connect();
100
113
  }
101
114
  // Node MySQL is callback based, so we must wrap our call in a promise
102
- const response = yield this.client.query(query.sql, query.bindings || []);
115
+ const response = yield this.client.query(query.sql, bindingTypeCoerce(query.bindings || []));
103
116
  return response[0];
104
117
  }
105
118
  finally {
@@ -10,7 +10,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  const datasource_1 = require("../definitions/datasource");
13
- const lodash_1 = require("lodash");
14
13
  const BodyTypes = {
15
14
  NONE: "none",
16
15
  FORM_DATA: "form",
@@ -149,7 +148,7 @@ var RestModule;
149
148
  // Check if a pagination cursor exists in the response
150
149
  let nextCursor = null;
151
150
  if (pagination === null || pagination === void 0 ? void 0 : pagination.responseParam) {
152
- nextCursor = lodash_1.get(data, pagination.responseParam);
151
+ nextCursor = data === null || data === void 0 ? void 0 : data[pagination.responseParam];
153
152
  }
154
153
  return {
155
154
  data,
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  const { getUserRoleHierarchy, getRequiredResourceRole, BUILTIN_ROLE_IDS, } = require("@budibase/backend-core/roles");
12
- const { PermissionTypes, doesHaveBasePermission, } = require("@budibase/backend-core/permissions");
12
+ const { PermissionTypes, PermissionLevels, doesHaveBasePermission, } = require("@budibase/backend-core/permissions");
13
13
  const builderMiddleware = require("./builder");
14
14
  const { isWebhookEndpoint } = require("./utils");
15
15
  const { buildCsrfMiddleware } = require("@budibase/backend-core/auth");
@@ -57,7 +57,7 @@ const checkAuthorizedResource = (ctx, resourceRoles, permType, permLevel) => __a
57
57
  }
58
58
  });
59
59
  module.exports =
60
- (permType, permLevel = null) => (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
60
+ (permType, permLevel = null, opts = { schema: false }) => (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
61
61
  // webhooks don't need authentication, each webhook unique
62
62
  // also internal requests (between services) don't need authorized
63
63
  if (isWebhookEndpoint(ctx) || ctx.internal) {
@@ -70,22 +70,39 @@ module.exports =
70
70
  // to find API endpoints which are builder focused
71
71
  yield builderMiddleware(ctx, permType);
72
72
  // get the resource roles
73
- let resourceRoles = [];
73
+ let resourceRoles = [], otherLevelRoles;
74
+ const otherLevel = permLevel === PermissionLevels.READ
75
+ ? PermissionLevels.WRITE
76
+ : PermissionLevels.READ;
74
77
  const appId = getAppId();
75
78
  if (appId && hasResource(ctx)) {
76
79
  resourceRoles = yield getRequiredResourceRole(permLevel, ctx);
80
+ if (opts && opts.schema) {
81
+ otherLevelRoles = yield getRequiredResourceRole(otherLevel, ctx);
82
+ }
77
83
  }
78
84
  // if the resource is public, proceed
79
- const isPublicResource = resourceRoles.includes(BUILTIN_ROLE_IDS.PUBLIC);
80
- if (isPublicResource) {
85
+ if (resourceRoles.includes(BUILTIN_ROLE_IDS.PUBLIC) ||
86
+ (otherLevelRoles && otherLevelRoles.includes(BUILTIN_ROLE_IDS.PUBLIC))) {
81
87
  return next();
82
88
  }
83
89
  // check authenticated
84
90
  if (!ctx.isAuthenticated) {
85
91
  return ctx.throw(403, "Session not authenticated");
86
92
  }
87
- // check authorized
88
- yield checkAuthorized(ctx, resourceRoles, permType, permLevel);
93
+ try {
94
+ // check authorized
95
+ yield checkAuthorized(ctx, resourceRoles, permType, permLevel);
96
+ }
97
+ catch (err) {
98
+ // this is a schema, check if
99
+ if (opts && opts.schema && permLevel) {
100
+ yield checkAuthorized(ctx, otherLevelRoles, permType, otherLevel);
101
+ }
102
+ else {
103
+ throw err;
104
+ }
105
+ }
89
106
  // csrf protection
90
107
  return csrf(ctx, next);
91
108
  });
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.98-alpha.7",
4
+ "version": "1.0.99",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -68,13 +68,12 @@
68
68
  "license": "GPL-3.0",
69
69
  "dependencies": {
70
70
  "@apidevtools/swagger-parser": "^10.0.3",
71
- "@budibase/backend-core": "^1.0.98-alpha.7",
72
- "@budibase/client": "^1.0.98-alpha.7",
73
- "@budibase/string-templates": "^1.0.98-alpha.7",
71
+ "@budibase/backend-core": "^1.0.99",
72
+ "@budibase/client": "^1.0.99",
73
+ "@budibase/string-templates": "^1.0.99",
74
74
  "@bull-board/api": "^3.7.0",
75
75
  "@bull-board/koa": "^3.7.0",
76
76
  "@elastic/elasticsearch": "7.10.0",
77
- "@google-cloud/firestore": "^5.0.2",
78
77
  "@koa/router": "8.0.0",
79
78
  "@sendgrid/mail": "7.1.1",
80
79
  "@sentry/node": "^6.0.0",
@@ -146,7 +145,6 @@
146
145
  "@types/jest": "^26.0.23",
147
146
  "@types/koa": "^2.13.3",
148
147
  "@types/koa-router": "^7.4.2",
149
- "@types/lodash": "4.14.180",
150
148
  "@types/node": "^15.12.4",
151
149
  "@types/oracledb": "^5.2.1",
152
150
  "@types/redis": "^4.0.11",
@@ -155,7 +153,6 @@
155
153
  "copyfiles": "^2.4.1",
156
154
  "docker-compose": "^0.23.6",
157
155
  "eslint": "^6.8.0",
158
- "is-wsl": "^2.2.0",
159
156
  "jest": "^27.0.5",
160
157
  "jest-openapi": "^0.14.2",
161
158
  "nodemon": "^2.0.4",