@budibase/server 1.0.79 → 1.0.80-alpha.2

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 (316) hide show
  1. package/__mocks__/node-fetch.ts +1 -0
  2. package/builder/assets/{index.c8d1e8f0.css → index.c57242d4.css} +2 -2
  3. package/builder/assets/index.f3e82852.js +1288 -0
  4. package/builder/assets/{vendor.20f80cec.js → vendor.a7c6ad0a.js} +190 -216
  5. package/builder/index.html +3 -3
  6. package/coverage/clover.xml +2399 -2336
  7. package/coverage/coverage-final.json +138 -137
  8. package/coverage/lcov-report/api/controllers/analytics.js.html +6 -6
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +6 -6
  10. package/coverage/lcov-report/api/controllers/application.js.html +152 -149
  11. package/coverage/lcov-report/api/controllers/auth.js.html +7 -7
  12. package/coverage/lcov-report/api/controllers/automation.js.html +21 -21
  13. package/coverage/lcov-report/api/controllers/backup.js.html +3 -3
  14. package/coverage/lcov-report/api/controllers/cloud.js.html +11 -11
  15. package/coverage/lcov-report/api/controllers/component.js.html +5 -5
  16. package/coverage/lcov-report/api/controllers/datasource.js.html +16 -16
  17. package/coverage/lcov-report/api/controllers/dev.js.html +19 -19
  18. package/coverage/lcov-report/api/controllers/index.html +16 -16
  19. package/coverage/lcov-report/api/controllers/integration.js.html +4 -4
  20. package/coverage/lcov-report/api/controllers/layout.js.html +6 -6
  21. package/coverage/lcov-report/api/controllers/metadata.js.html +9 -9
  22. package/coverage/lcov-report/api/controllers/migrations.js.html +4 -4
  23. package/coverage/lcov-report/api/controllers/permission.js.html +15 -15
  24. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  25. package/coverage/lcov-report/api/controllers/query/index.js.html +26 -26
  26. package/coverage/lcov-report/api/controllers/query/validation.js.html +10 -10
  27. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  28. package/coverage/lcov-report/api/controllers/routing.js.html +9 -9
  29. package/coverage/lcov-report/api/controllers/row/external.js.html +16 -16
  30. package/coverage/lcov-report/api/controllers/row/index.html +27 -27
  31. package/coverage/lcov-report/api/controllers/row/index.js.html +46 -46
  32. package/coverage/lcov-report/api/controllers/row/internal.js.html +94 -82
  33. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +204 -204
  34. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +24 -24
  35. package/coverage/lcov-report/api/controllers/row/utils.js.html +29 -29
  36. package/coverage/lcov-report/api/controllers/screen.js.html +7 -7
  37. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  38. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +49 -49
  39. package/coverage/lcov-report/api/controllers/table/external.js.html +12 -12
  40. package/coverage/lcov-report/api/controllers/table/index.html +11 -11
  41. package/coverage/lcov-report/api/controllers/table/index.js.html +47 -44
  42. package/coverage/lcov-report/api/controllers/table/internal.js.html +50 -50
  43. package/coverage/lcov-report/api/controllers/table/utils.js.html +80 -80
  44. package/coverage/lcov-report/api/controllers/templates.js.html +5 -5
  45. package/coverage/lcov-report/api/controllers/user.js.html +19 -19
  46. package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
  47. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  48. package/coverage/lcov-report/api/controllers/view/index.js.html +14 -14
  49. package/coverage/lcov-report/api/controllers/view/utils.js.html +12 -12
  50. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
  51. package/coverage/lcov-report/api/controllers/webhook.js.html +18 -27
  52. package/coverage/lcov-report/api/index.html +10 -10
  53. package/coverage/lcov-report/api/index.js.html +37 -28
  54. package/coverage/lcov-report/api/routes/analytics.js.html +6 -6
  55. package/coverage/lcov-report/api/routes/apikeys.js.html +8 -8
  56. package/coverage/lcov-report/api/routes/application.js.html +9 -9
  57. package/coverage/lcov-report/api/routes/auth.js.html +6 -6
  58. package/coverage/lcov-report/api/routes/automation.js.html +19 -109
  59. package/coverage/lcov-report/api/routes/backup.js.html +8 -8
  60. package/coverage/lcov-report/api/routes/cloud.js.html +8 -8
  61. package/coverage/lcov-report/api/routes/component.js.html +8 -8
  62. package/coverage/lcov-report/api/routes/datasource.js.html +18 -156
  63. package/coverage/lcov-report/api/routes/deploy.js.html +8 -8
  64. package/coverage/lcov-report/api/routes/dev.js.html +13 -13
  65. package/coverage/lcov-report/api/routes/index.html +35 -35
  66. package/coverage/lcov-report/api/routes/index.js.html +38 -32
  67. package/coverage/lcov-report/api/routes/integration.js.html +8 -8
  68. package/coverage/lcov-report/api/routes/layout.js.html +8 -8
  69. package/coverage/lcov-report/api/routes/metadata.js.html +9 -9
  70. package/coverage/lcov-report/api/routes/migrations.js.html +7 -7
  71. package/coverage/lcov-report/api/routes/permission.js.html +16 -58
  72. package/coverage/lcov-report/api/routes/query.js.html +10 -10
  73. package/coverage/lcov-report/api/routes/role.js.html +15 -78
  74. package/coverage/lcov-report/api/routes/routing.js.html +8 -8
  75. package/coverage/lcov-report/api/routes/row.js.html +17 -14
  76. package/coverage/lcov-report/api/routes/screen.js.html +14 -95
  77. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/static.js.html +13 -13
  79. package/coverage/lcov-report/api/routes/table.js.html +17 -62
  80. package/coverage/lcov-report/api/routes/templates.js.html +8 -8
  81. package/coverage/lcov-report/api/routes/user.js.html +8 -8
  82. package/coverage/lcov-report/api/routes/utils/index.html +111 -0
  83. package/coverage/lcov-report/api/routes/utils/validators.js.html +737 -0
  84. package/coverage/lcov-report/api/routes/view.js.html +10 -10
  85. package/coverage/lcov-report/api/routes/webhook.js.html +14 -62
  86. package/coverage/lcov-report/automations/actions.js.html +24 -24
  87. package/coverage/lcov-report/automations/automationUtils.js.html +5 -5
  88. package/coverage/lcov-report/automations/bullboard.js.html +16 -16
  89. package/coverage/lcov-report/automations/index.html +1 -1
  90. package/coverage/lcov-report/automations/index.js.html +7 -7
  91. package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
  92. package/coverage/lcov-report/automations/steps/createRow.js.html +7 -7
  93. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  94. package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
  95. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  96. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  97. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  98. package/coverage/lcov-report/automations/steps/filter.js.html +12 -9
  99. package/coverage/lcov-report/automations/steps/index.html +1 -1
  100. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  101. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  102. package/coverage/lcov-report/automations/steps/queryRows.js.html +11 -11
  103. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  104. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  105. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  106. package/coverage/lcov-report/automations/steps/updateRow.js.html +6 -6
  107. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  108. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  109. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  110. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  111. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  113. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  114. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  115. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  116. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  117. package/coverage/lcov-report/automations/triggers.js.html +26 -26
  118. package/coverage/lcov-report/automations/utils.js.html +35 -35
  119. package/coverage/lcov-report/constants/index.html +5 -5
  120. package/coverage/lcov-report/constants/index.js.html +40 -28
  121. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  122. package/coverage/lcov-report/constants/screens.js.html +4 -4
  123. package/coverage/lcov-report/db/client.js.html +18 -18
  124. package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
  125. package/coverage/lcov-report/db/index.html +15 -15
  126. package/coverage/lcov-report/db/index.js.html +3 -3
  127. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +21 -21
  128. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  129. package/coverage/lcov-report/db/linkedRows/index.js.html +36 -36
  130. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +30 -30
  131. package/coverage/lcov-report/db/newid.js.html +4 -4
  132. package/coverage/lcov-report/db/utils.js.html +123 -87
  133. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  134. package/coverage/lcov-report/events/index.html +1 -1
  135. package/coverage/lcov-report/events/index.js.html +8 -8
  136. package/coverage/lcov-report/events/utils.js.html +18 -18
  137. package/coverage/lcov-report/index.html +89 -74
  138. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  139. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  140. package/coverage/lcov-report/middleware/appInfo.js.html +5 -5
  141. package/coverage/lcov-report/middleware/authorized.js.html +29 -29
  142. package/coverage/lcov-report/middleware/builder.js.html +16 -16
  143. package/coverage/lcov-report/middleware/currentapp.js.html +44 -44
  144. package/coverage/lcov-report/middleware/index.html +1 -1
  145. package/coverage/lcov-report/middleware/joi-validator.js.html +14 -14
  146. package/coverage/lcov-report/middleware/resourceId.js.html +29 -29
  147. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  148. package/coverage/lcov-report/middleware/usageQuota.js.html +17 -17
  149. package/coverage/lcov-report/middleware/utils.js.html +4 -4
  150. package/coverage/lcov-report/threads/automation.js.html +1 -1
  151. package/coverage/lcov-report/threads/index.html +19 -19
  152. package/coverage/lcov-report/threads/index.js.html +10 -10
  153. package/coverage/lcov-report/threads/query.js.html +123 -39
  154. package/coverage/lcov-report/threads/utils.js.html +14 -14
  155. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  156. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  157. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  158. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  159. package/coverage/lcov-report/utilities/global.js.html +28 -28
  160. package/coverage/lcov-report/utilities/index.html +18 -18
  161. package/coverage/lcov-report/utilities/index.js.html +24 -24
  162. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +9 -9
  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 +6 -6
  166. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  167. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +60 -60
  168. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +13 -13
  169. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  170. package/coverage/lcov-report/utilities/security.js.html +8 -8
  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 +12 -12
  174. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +8 -8
  175. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  176. package/coverage/lcov-report/utilities/users.js.html +5 -5
  177. package/coverage/lcov-report/utilities/workerRequests.js.html +200 -53
  178. package/coverage/lcov.info +3323 -3224
  179. package/dist/api/controllers/application.js +1 -0
  180. package/dist/api/controllers/public/applications.js +94 -0
  181. package/dist/api/controllers/public/mapping/applications.js +29 -0
  182. package/dist/api/controllers/public/mapping/index.js +11 -0
  183. package/dist/api/controllers/public/mapping/queries.js +36 -0
  184. package/dist/api/controllers/public/mapping/rows.js +24 -0
  185. package/dist/api/controllers/public/mapping/tables.js +23 -0
  186. package/dist/api/controllers/public/mapping/types.js +2 -0
  187. package/dist/api/controllers/public/mapping/users.js +29 -0
  188. package/dist/api/controllers/public/queries.js +38 -0
  189. package/dist/api/controllers/public/rows.js +97 -0
  190. package/dist/api/controllers/public/tables.js +75 -0
  191. package/dist/api/controllers/public/users.js +95 -0
  192. package/dist/api/controllers/public/utils.js +49 -0
  193. package/dist/api/controllers/row/internal.js +4 -1
  194. package/dist/api/controllers/table/index.js +2 -1
  195. package/dist/api/controllers/webhook.js +3 -5
  196. package/dist/api/index.js +3 -1
  197. package/dist/api/routes/automation.js +3 -31
  198. package/dist/api/routes/datasource.js +3 -50
  199. package/dist/api/routes/index.js +2 -0
  200. package/dist/api/routes/permission.js +4 -14
  201. package/dist/api/routes/public/applications.js +141 -0
  202. package/dist/api/routes/public/index.js +101 -0
  203. package/dist/api/routes/public/middleware/mapper.js +94 -0
  204. package/dist/api/routes/public/queries.js +77 -0
  205. package/dist/api/routes/public/rows.js +229 -0
  206. package/dist/api/routes/public/tables.js +154 -0
  207. package/dist/api/routes/public/users.js +137 -0
  208. package/dist/api/routes/public/utils/Endpoint.js +36 -0
  209. package/dist/api/routes/role.js +3 -19
  210. package/dist/api/routes/row.js +3 -4
  211. package/dist/api/routes/screen.js +2 -23
  212. package/dist/api/routes/table.js +3 -17
  213. package/dist/api/routes/tests/utilities/index.js +23 -0
  214. package/dist/api/routes/utils/validators.js +200 -0
  215. package/dist/api/routes/webhook.js +2 -17
  216. package/dist/automations/steps/filter.js +2 -2
  217. package/dist/automations/steps/queryRows.js +1 -1
  218. package/dist/automations/utils.js +2 -2
  219. package/dist/constants/index.js +3 -0
  220. package/dist/db/utils.js +11 -0
  221. package/dist/definitions/openapi.js +6 -0
  222. package/dist/environment.js +1 -0
  223. package/dist/integrations/base/sql.js +16 -1
  224. package/dist/integrations/base/sqlTable.js +8 -4
  225. package/dist/integrations/googlesheets.js +3 -0
  226. package/dist/integrations/microsoftSqlServer.js +60 -43
  227. package/dist/integrations/mysql.js +3 -0
  228. package/dist/integrations/oracle.js +14 -19
  229. package/dist/integrations/postgres.js +34 -28
  230. package/dist/integrations/utils.js +32 -15
  231. package/dist/package.json +11 -7
  232. package/dist/tests/utilities/TestConfiguration.js +25 -8
  233. package/dist/threads/query.js +33 -8
  234. package/dist/tsconfig.tsbuildinfo +1 -1
  235. package/dist/utilities/workerRequests.js +50 -15
  236. package/package.json +12 -8
  237. package/scripts/integrations/mssql/data/setup.sql +18 -1
  238. package/scripts/integrations/oracle/oracle.md +2 -2
  239. package/scripts/integrations/postgres/init.sql +11 -3
  240. package/scripts/likeCypress.ts +9 -6
  241. package/specs/generate.js +83 -0
  242. package/specs/openapi.json +2222 -0
  243. package/specs/openapi.yaml +1530 -0
  244. package/specs/parameters.js +59 -0
  245. package/specs/resources/application.js +101 -0
  246. package/specs/resources/index.js +24 -0
  247. package/specs/resources/misc.js +12 -0
  248. package/specs/resources/query.js +189 -0
  249. package/specs/resources/row.js +125 -0
  250. package/specs/resources/table.js +191 -0
  251. package/specs/resources/user.js +126 -0
  252. package/specs/resources/utils/Resource.js +26 -0
  253. package/specs/resources/utils/index.js +11 -0
  254. package/specs/security.js +7 -0
  255. package/src/api/controllers/application.js +1 -0
  256. package/src/api/controllers/public/applications.ts +74 -0
  257. package/src/api/controllers/public/mapping/applications.ts +32 -0
  258. package/src/api/controllers/public/mapping/index.ts +13 -0
  259. package/src/api/controllers/public/mapping/queries.ts +39 -0
  260. package/src/api/controllers/public/mapping/rows.ts +31 -0
  261. package/src/api/controllers/public/mapping/tables.ts +26 -0
  262. package/src/api/controllers/public/mapping/types.ts +13 -0
  263. package/src/api/controllers/public/mapping/users.ts +32 -0
  264. package/src/api/controllers/public/queries.ts +20 -0
  265. package/src/api/controllers/public/rows.ts +77 -0
  266. package/src/api/controllers/public/tables.ts +56 -0
  267. package/src/api/controllers/public/users.ts +82 -0
  268. package/src/api/controllers/public/utils.ts +38 -0
  269. package/src/api/controllers/row/ExternalRequest.ts +1 -1
  270. package/src/api/controllers/row/internal.js +4 -0
  271. package/src/api/controllers/table/index.js +2 -1
  272. package/src/api/controllers/webhook.js +3 -6
  273. package/src/api/index.js +4 -1
  274. package/src/api/routes/automation.js +3 -33
  275. package/src/api/routes/datasource.js +6 -52
  276. package/src/api/routes/index.js +2 -0
  277. package/src/api/routes/permission.js +4 -18
  278. package/src/api/routes/public/applications.ts +156 -0
  279. package/src/api/routes/public/index.ts +118 -0
  280. package/src/api/routes/public/middleware/mapper.ts +81 -0
  281. package/src/api/routes/public/queries.ts +81 -0
  282. package/src/api/routes/public/rows.ts +242 -0
  283. package/src/api/routes/public/tables.ts +169 -0
  284. package/src/api/routes/public/tests/compare.spec.js +184 -0
  285. package/src/api/routes/public/users.ts +144 -0
  286. package/src/api/routes/public/utils/Endpoint.ts +51 -0
  287. package/src/api/routes/role.js +3 -24
  288. package/src/api/routes/row.js +3 -2
  289. package/src/api/routes/screen.js +2 -29
  290. package/src/api/routes/table.js +4 -19
  291. package/src/api/routes/tests/utilities/index.js +24 -0
  292. package/src/api/routes/utils/validators.js +219 -0
  293. package/src/api/routes/webhook.js +2 -18
  294. package/src/automations/steps/filter.js +3 -2
  295. package/src/automations/steps/queryRows.js +1 -1
  296. package/src/automations/utils.js +2 -2
  297. package/src/constants/index.js +4 -0
  298. package/src/db/utils.js +12 -0
  299. package/src/definitions/common.ts +4 -0
  300. package/src/definitions/datasource.ts +1 -0
  301. package/src/definitions/openapi.ts +943 -0
  302. package/src/environment.js +1 -0
  303. package/src/integrations/base/datasourcePlus.ts +3 -0
  304. package/src/integrations/base/sql.ts +16 -1
  305. package/src/integrations/base/sqlTable.ts +11 -7
  306. package/src/integrations/googlesheets.ts +5 -2
  307. package/src/integrations/microsoftSqlServer.ts +86 -61
  308. package/src/integrations/mysql.ts +4 -0
  309. package/src/integrations/oracle.ts +27 -35
  310. package/src/integrations/postgres.ts +33 -26
  311. package/src/integrations/utils.ts +43 -15
  312. package/src/tests/utilities/TestConfiguration.js +23 -2
  313. package/src/threads/query.js +37 -9
  314. package/src/utilities/workerRequests.js +65 -16
  315. package/builder/assets/index.f28c5d54.js +0 -1352
  316. package/scripts/proxy/generateProxyConfig.js +0 -70
@@ -15,6 +15,7 @@ var MSSQLModule;
15
15
  (function (MSSQLModule) {
16
16
  const sqlServer = require("mssql");
17
17
  const Sql = require("./base/sql");
18
+ const DEFAULT_SCHEMA = "dbo";
18
19
  const SCHEMA = {
19
20
  docs: "https://github.com/tediousjs/node-mssql",
20
21
  plus: true,
@@ -43,6 +44,10 @@ var MSSQLModule;
43
44
  type: datasource_1.DatasourceFieldTypes.STRING,
44
45
  default: "root",
45
46
  },
47
+ schema: {
48
+ type: datasource_1.DatasourceFieldTypes.STRING,
49
+ default: DEFAULT_SCHEMA,
50
+ },
46
51
  encrypt: {
47
52
  type: datasource_1.DatasourceFieldTypes.BOOLEAN,
48
53
  default: true,
@@ -63,32 +68,10 @@ var MSSQLModule;
63
68
  },
64
69
  },
65
70
  };
66
- function internalQuery(client, query, operation = undefined) {
67
- return __awaiter(this, void 0, void 0, function* () {
68
- const request = client.request();
69
- try {
70
- if (Array.isArray(query.bindings)) {
71
- let count = 0;
72
- for (let binding of query.bindings) {
73
- request.input(`p${count++}`, binding);
74
- }
75
- }
76
- // this is a hack to get the inserted ID back,
77
- // no way to do this with Knex nicely
78
- const sql = operation === datasource_1.Operation.CREATE
79
- ? `${query.sql}; SELECT SCOPE_IDENTITY() AS id;`
80
- : query.sql;
81
- return yield request.query(sql);
82
- }
83
- catch (err) {
84
- // @ts-ignore
85
- throw new Error(err);
86
- }
87
- });
88
- }
89
71
  class SqlServerIntegration extends Sql {
90
72
  constructor(config) {
91
73
  super(utils_1.SqlClients.MS_SQL);
74
+ this.index = 0;
92
75
  this.tables = {};
93
76
  this.schemaErrors = {};
94
77
  this.MASTER_TABLES = [
@@ -109,6 +92,45 @@ var MSSQLModule;
109
92
  this.pool = new sqlServer.ConnectionPool(clientCfg);
110
93
  }
111
94
  }
95
+ getBindingIdentifier() {
96
+ return `(@p${this.index++})`;
97
+ }
98
+ connect() {
99
+ return __awaiter(this, void 0, void 0, function* () {
100
+ try {
101
+ this.client = yield this.pool.connect();
102
+ }
103
+ catch (err) {
104
+ // @ts-ignore
105
+ throw new Error(err);
106
+ }
107
+ });
108
+ }
109
+ internalQuery(query, operation = undefined) {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ const client = this.client;
112
+ const request = client.request();
113
+ this.index = 0;
114
+ try {
115
+ if (Array.isArray(query.bindings)) {
116
+ let count = 0;
117
+ for (let binding of query.bindings) {
118
+ request.input(`p${count++}`, binding);
119
+ }
120
+ }
121
+ // this is a hack to get the inserted ID back,
122
+ // no way to do this with Knex nicely
123
+ const sql = operation === datasource_1.Operation.CREATE
124
+ ? `${query.sql}; SELECT SCOPE_IDENTITY() AS id;`
125
+ : query.sql;
126
+ return yield request.query(sql);
127
+ }
128
+ catch (err) {
129
+ // @ts-ignore
130
+ throw new Error(err);
131
+ }
132
+ });
133
+ }
112
134
  getDefinitionSQL(tableName) {
113
135
  return `select *
114
136
  from INFORMATION_SCHEMA.COLUMNS
@@ -134,20 +156,9 @@ var MSSQLModule;
134
156
  FROM INFORMATION_SCHEMA.COLUMNS
135
157
  WHERE TABLE_NAME='${tableName}'`;
136
158
  }
137
- connect() {
138
- return __awaiter(this, void 0, void 0, function* () {
139
- try {
140
- this.client = yield this.pool.connect();
141
- }
142
- catch (err) {
143
- // @ts-ignore
144
- throw new Error(err);
145
- }
146
- });
147
- }
148
159
  runSQL(sql) {
149
160
  return __awaiter(this, void 0, void 0, function* () {
150
- return (yield internalQuery(this.client, utils_1.getSqlQuery(sql))).recordset;
161
+ return (yield this.internalQuery(utils_1.getSqlQuery(sql))).recordset;
151
162
  });
152
163
  }
153
164
  /**
@@ -158,11 +169,13 @@ var MSSQLModule;
158
169
  buildSchema(datasourceId, entities) {
159
170
  return __awaiter(this, void 0, void 0, function* () {
160
171
  yield this.connect();
161
- let tableNames = yield this.runSQL(this.TABLES_SQL);
162
- if (tableNames == null || !Array.isArray(tableNames)) {
172
+ let tableInfo = yield this.runSQL(this.TABLES_SQL);
173
+ if (tableInfo == null || !Array.isArray(tableInfo)) {
163
174
  throw "Unable to get list of tables in database";
164
175
  }
165
- tableNames = tableNames
176
+ const schema = this.config.schema || DEFAULT_SCHEMA;
177
+ const tableNames = tableInfo
178
+ .filter((record) => record.TABLE_SCHEMA === schema)
166
179
  .map((record) => record.TABLE_NAME)
167
180
  .filter((name) => this.MASTER_TABLES.indexOf(name) === -1);
168
181
  const tables = {};
@@ -207,36 +220,40 @@ var MSSQLModule;
207
220
  read(query) {
208
221
  return __awaiter(this, void 0, void 0, function* () {
209
222
  yield this.connect();
210
- const response = yield internalQuery(this.client, utils_1.getSqlQuery(query));
223
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
211
224
  return response.recordset;
212
225
  });
213
226
  }
214
227
  create(query) {
215
228
  return __awaiter(this, void 0, void 0, function* () {
216
229
  yield this.connect();
217
- const response = yield internalQuery(this.client, utils_1.getSqlQuery(query));
230
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
218
231
  return response.recordset || [{ created: true }];
219
232
  });
220
233
  }
221
234
  update(query) {
222
235
  return __awaiter(this, void 0, void 0, function* () {
223
236
  yield this.connect();
224
- const response = yield internalQuery(this.client, utils_1.getSqlQuery(query));
237
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
225
238
  return response.recordset || [{ updated: true }];
226
239
  });
227
240
  }
228
241
  delete(query) {
229
242
  return __awaiter(this, void 0, void 0, function* () {
230
243
  yield this.connect();
231
- const response = yield internalQuery(this.client, utils_1.getSqlQuery(query));
244
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
232
245
  return response.recordset || [{ deleted: true }];
233
246
  });
234
247
  }
235
248
  query(json) {
236
249
  return __awaiter(this, void 0, void 0, function* () {
250
+ const schema = this.config.schema;
237
251
  yield this.connect();
252
+ if (schema && schema !== DEFAULT_SCHEMA && (json === null || json === void 0 ? void 0 : json.endpoint)) {
253
+ json.endpoint.schema = schema;
254
+ }
238
255
  const operation = this._operation(json);
239
- const queryFn = (query, op) => internalQuery(this.client, query, op);
256
+ const queryFn = (query, op) => this.internalQuery(query, op);
240
257
  const processFn = (result) => result.recordset ? result.recordset : [{ [operation]: true }];
241
258
  return this.queryWithReturning(json, queryFn, processFn);
242
259
  });
@@ -76,6 +76,9 @@ var MySQLModule;
76
76
  }
77
77
  this.config = config;
78
78
  }
79
+ getBindingIdentifier() {
80
+ return "?";
81
+ }
79
82
  connect() {
80
83
  return __awaiter(this, void 0, void 0, function* () {
81
84
  this.client = yield mysql.createConnection(this.config);
@@ -74,6 +74,7 @@ var OracleModule;
74
74
  class OracleIntegration extends sql_1.default {
75
75
  constructor(config) {
76
76
  super(utils_1.SqlClients.ORACLE);
77
+ this.index = 1;
77
78
  this.tables = {};
78
79
  this.schemaErrors = {};
79
80
  this.COLUMNS_SQL = `
@@ -116,6 +117,9 @@ var OracleModule;
116
117
  });
117
118
  this.config = config;
118
119
  }
120
+ getBindingIdentifier() {
121
+ return `:${this.index++}`;
122
+ }
119
123
  /**
120
124
  * Map the flat tabular columns and constraints data into a nested object
121
125
  */
@@ -167,24 +171,18 @@ var OracleModule;
167
171
  }
168
172
  return oracleTables;
169
173
  }
170
- isSupportedColumn(column) {
171
- if (UNSUPPORTED_TYPES.includes(column.type)) {
172
- return false;
173
- }
174
- return true;
174
+ static isSupportedColumn(column) {
175
+ return !UNSUPPORTED_TYPES.includes(column.type);
175
176
  }
176
- isAutoColumn(column) {
177
- if (column.default && column.default.toLowerCase().includes("nextval")) {
178
- return true;
179
- }
180
- return false;
177
+ static isAutoColumn(column) {
178
+ return !!(column.default && column.default.toLowerCase().includes("nextval"));
181
179
  }
182
180
  /**
183
181
  * No native boolean in oracle. Best we can do is to check if a manual 1 or 0 number constraint has been set up
184
182
  * This matches the default behaviour for generating DDL used in knex.
185
183
  */
186
184
  isBooleanType(column) {
187
- if (column.type.toLowerCase() === "number" &&
185
+ return (column.type.toLowerCase() === "number" &&
188
186
  Object.values(column.constraints).filter(c => {
189
187
  if (c.type === OracleContraintTypes.NOT_NULL_OR_CHECK &&
190
188
  c.searchCondition) {
@@ -197,10 +195,7 @@ var OracleModule;
197
195
  }
198
196
  }
199
197
  return false;
200
- }).length > 0) {
201
- return true;
202
- }
203
- return false;
198
+ }).length > 0);
204
199
  }
205
200
  internalConvertType(column) {
206
201
  if (this.isBooleanType(column)) {
@@ -235,7 +230,7 @@ var OracleModule;
235
230
  // iterate each column on the table
236
231
  Object.values(oracleTable.columns)
237
232
  // remove columns that we can't read / save
238
- .filter(oracleColumn => this.isSupportedColumn(oracleColumn))
233
+ .filter(oracleColumn => OracleIntegration.isSupportedColumn(oracleColumn))
239
234
  // match the order of the columns in the db
240
235
  .sort((c1, c2) => c1.id - c2.id)
241
236
  .forEach(oracleColumn => {
@@ -243,7 +238,7 @@ var OracleModule;
243
238
  let fieldSchema = table.schema[columnName];
244
239
  if (!fieldSchema) {
245
240
  fieldSchema = {
246
- autocolumn: this.isAutoColumn(oracleColumn),
241
+ autocolumn: OracleIntegration.isAutoColumn(oracleColumn),
247
242
  name: columnName,
248
243
  type: this.internalConvertType(oracleColumn),
249
244
  };
@@ -266,11 +261,11 @@ var OracleModule;
266
261
  return __awaiter(this, void 0, void 0, function* () {
267
262
  let connection;
268
263
  try {
264
+ this.index = 1;
269
265
  connection = yield this.getConnection();
270
266
  const options = { autoCommit: true };
271
267
  const bindings = query.bindings || [];
272
- const result = yield connection.execute(query.sql, bindings, options);
273
- return result;
268
+ return yield connection.execute(query.sql, bindings, options);
274
269
  }
275
270
  finally {
276
271
  if (connection) {
@@ -84,31 +84,10 @@ var PostgresModule;
84
84
  },
85
85
  },
86
86
  };
87
- function internalQuery(client, query) {
88
- return __awaiter(this, void 0, void 0, function* () {
89
- // need to handle a specific issue with json data types in postgres,
90
- // new lines inside the JSON data will break it
91
- if (query && query.sql) {
92
- const matches = query.sql.match(JSON_REGEX);
93
- if (matches && matches.length > 0) {
94
- for (let match of matches) {
95
- const escaped = escapeDangerousCharacters(match);
96
- query.sql = query.sql.replace(match, escaped);
97
- }
98
- }
99
- }
100
- try {
101
- return yield client.query(query.sql, query.bindings || []);
102
- }
103
- catch (err) {
104
- // @ts-ignore
105
- throw new Error(err);
106
- }
107
- });
108
- }
109
87
  class PostgresIntegration extends Sql {
110
88
  constructor(config) {
111
89
  super(utils_1.SqlClients.POSTGRES);
90
+ this.index = 1;
112
91
  this.tables = {};
113
92
  this.schemaErrors = {};
114
93
  this.PRIMARY_KEYS_SQL = `
@@ -133,6 +112,33 @@ var PostgresModule;
133
112
  this.client = this.pool;
134
113
  this.setSchema();
135
114
  }
115
+ getBindingIdentifier() {
116
+ return `$${this.index++}`;
117
+ }
118
+ internalQuery(query) {
119
+ return __awaiter(this, void 0, void 0, function* () {
120
+ const client = this.client;
121
+ this.index = 1;
122
+ // need to handle a specific issue with json data types in postgres,
123
+ // new lines inside the JSON data will break it
124
+ if (query && query.sql) {
125
+ const matches = query.sql.match(JSON_REGEX);
126
+ if (matches && matches.length > 0) {
127
+ for (let match of matches) {
128
+ const escaped = escapeDangerousCharacters(match);
129
+ query.sql = query.sql.replace(match, escaped);
130
+ }
131
+ }
132
+ }
133
+ try {
134
+ return yield client.query(query.sql, query.bindings || []);
135
+ }
136
+ catch (err) {
137
+ // @ts-ignore
138
+ throw new Error(err);
139
+ }
140
+ });
141
+ }
136
142
  setSchema() {
137
143
  if (!this.config.schema) {
138
144
  this.config.schema = "public";
@@ -202,25 +208,25 @@ var PostgresModule;
202
208
  }
203
209
  create(query) {
204
210
  return __awaiter(this, void 0, void 0, function* () {
205
- const response = yield internalQuery(this.client, utils_1.getSqlQuery(query));
211
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
206
212
  return response.rows.length ? response.rows : [{ created: true }];
207
213
  });
208
214
  }
209
215
  read(query) {
210
216
  return __awaiter(this, void 0, void 0, function* () {
211
- const response = yield internalQuery(this.client, utils_1.getSqlQuery(query));
217
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
212
218
  return response.rows;
213
219
  });
214
220
  }
215
221
  update(query) {
216
222
  return __awaiter(this, void 0, void 0, function* () {
217
- const response = yield internalQuery(this.client, utils_1.getSqlQuery(query));
223
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
218
224
  return response.rows.length ? response.rows : [{ updated: true }];
219
225
  });
220
226
  }
221
227
  delete(query) {
222
228
  return __awaiter(this, void 0, void 0, function* () {
223
- const response = yield internalQuery(this.client, utils_1.getSqlQuery(query));
229
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
224
230
  return response.rows.length ? response.rows : [{ deleted: true }];
225
231
  });
226
232
  }
@@ -231,12 +237,12 @@ var PostgresModule;
231
237
  if (Array.isArray(input)) {
232
238
  const responses = [];
233
239
  for (let query of input) {
234
- responses.push(yield internalQuery(this.client, query));
240
+ responses.push(yield this.internalQuery(query));
235
241
  }
236
242
  return responses;
237
243
  }
238
244
  else {
239
- const response = yield internalQuery(this.client, input);
245
+ const response = yield this.internalQuery(input);
240
246
  return response.rows.length ? response.rows : [{ [operation]: true }];
241
247
  }
242
248
  });
@@ -6,36 +6,53 @@ const utils_1 = require("../db/utils");
6
6
  const constants_1 = require("../constants");
7
7
  const DOUBLE_SEPARATOR = `${utils_1.SEPARATOR}${utils_1.SEPARATOR}`;
8
8
  const ROW_ID_REGEX = /^\[.*]$/g;
9
- const SQL_TYPE_MAP = {
10
- text: constants_1.FieldTypes.LONGFORM,
11
- varchar: constants_1.FieldTypes.STRING,
9
+ const SQL_NUMBER_TYPE_MAP = {
12
10
  integer: constants_1.FieldTypes.NUMBER,
11
+ int: constants_1.FieldTypes.NUMBER,
13
12
  bigint: constants_1.FieldTypes.NUMBER,
14
13
  decimal: constants_1.FieldTypes.NUMBER,
15
14
  smallint: constants_1.FieldTypes.NUMBER,
16
15
  real: constants_1.FieldTypes.NUMBER,
17
- "double precision": constants_1.FieldTypes.NUMBER,
18
- timestamp: constants_1.FieldTypes.DATETIME,
19
- time: constants_1.FieldTypes.DATETIME,
20
- boolean: constants_1.FieldTypes.BOOLEAN,
21
- json: constants_1.FieldTypes.JSON,
22
- date: constants_1.FieldTypes.DATETIME,
23
- blob: constants_1.FieldTypes.LONGFORM,
24
- enum: constants_1.FieldTypes.STRING,
25
16
  float: constants_1.FieldTypes.NUMBER,
26
- int: constants_1.FieldTypes.NUMBER,
27
17
  numeric: constants_1.FieldTypes.NUMBER,
28
18
  mediumint: constants_1.FieldTypes.NUMBER,
29
19
  dec: constants_1.FieldTypes.NUMBER,
30
20
  double: constants_1.FieldTypes.NUMBER,
31
21
  fixed: constants_1.FieldTypes.NUMBER,
32
- datetime: constants_1.FieldTypes.DATETIME,
33
- tinyint: constants_1.FieldTypes.BOOLEAN,
34
- long: constants_1.FieldTypes.LONGFORM,
22
+ "double precision": constants_1.FieldTypes.NUMBER,
35
23
  number: constants_1.FieldTypes.NUMBER,
36
24
  binary_float: constants_1.FieldTypes.NUMBER,
37
25
  binary_double: constants_1.FieldTypes.NUMBER,
26
+ money: constants_1.FieldTypes.NUMBER,
27
+ smallmoney: constants_1.FieldTypes.NUMBER,
28
+ };
29
+ const SQL_DATE_TYPE_MAP = {
30
+ timestamp: constants_1.FieldTypes.DATETIME,
31
+ time: constants_1.FieldTypes.DATETIME,
32
+ datetime: constants_1.FieldTypes.DATETIME,
33
+ smalldatetime: constants_1.FieldTypes.DATETIME,
34
+ date: constants_1.FieldTypes.DATETIME,
35
+ };
36
+ const SQL_STRING_TYPE_MAP = {
37
+ varchar: constants_1.FieldTypes.STRING,
38
+ char: constants_1.FieldTypes.STRING,
39
+ nchar: constants_1.FieldTypes.STRING,
40
+ nvarchar: constants_1.FieldTypes.STRING,
41
+ ntext: constants_1.FieldTypes.STRING,
42
+ enum: constants_1.FieldTypes.STRING,
43
+ blob: constants_1.FieldTypes.LONGFORM,
44
+ long: constants_1.FieldTypes.LONGFORM,
45
+ text: constants_1.FieldTypes.LONGFORM,
46
+ };
47
+ const SQL_BOOLEAN_TYPE_MAP = {
48
+ boolean: constants_1.FieldTypes.BOOLEAN,
49
+ bit: constants_1.FieldTypes.BOOLEAN,
50
+ tinyint: constants_1.FieldTypes.BOOLEAN,
51
+ };
52
+ const SQL_MISC_TYPE_MAP = {
53
+ json: constants_1.FieldTypes.JSON,
38
54
  };
55
+ const SQL_TYPE_MAP = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, SQL_NUMBER_TYPE_MAP), SQL_DATE_TYPE_MAP), SQL_STRING_TYPE_MAP), SQL_BOOLEAN_TYPE_MAP), SQL_MISC_TYPE_MAP);
39
56
  var SqlClients;
40
57
  (function (SqlClients) {
41
58
  SqlClients["MS_SQL"] = "mssql";
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.78",
4
+ "version": "1.0.80-alpha.1",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -21,10 +21,8 @@
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",
25
+ "specs": "node specs/generate.js && openapi-typescript specs/openapi.yaml --output src/definitions/openapi.ts",
28
26
  "lint": "eslint --fix src/",
29
27
  "lint:fix": "yarn run format && yarn run lint",
30
28
  "initialise": "node scripts/initialise.js",
@@ -73,9 +71,9 @@
73
71
  "license": "GPL-3.0",
74
72
  "dependencies": {
75
73
  "@apidevtools/swagger-parser": "^10.0.3",
76
- "@budibase/backend-core": "^1.0.78",
77
- "@budibase/client": "^1.0.78",
78
- "@budibase/string-templates": "^1.0.78",
74
+ "@budibase/backend-core": "^1.0.80-alpha.1",
75
+ "@budibase/client": "^1.0.80-alpha.1",
76
+ "@budibase/string-templates": "^1.0.80-alpha.1",
79
77
  "@bull-board/api": "^3.7.0",
80
78
  "@bull-board/koa": "^3.7.0",
81
79
  "@elastic/elasticsearch": "7.10.0",
@@ -110,6 +108,7 @@
110
108
  "koa-send": "5.0.0",
111
109
  "koa-session": "5.12.0",
112
110
  "koa-static": "5.0.0",
111
+ "koa2-ratelimit": "^1.1.0",
113
112
  "lodash": "4.17.21",
114
113
  "memorystream": "^0.3.1",
115
114
  "mongodb": "3.6.3",
@@ -125,6 +124,7 @@
125
124
  "pouchdb-all-dbs": "1.0.2",
126
125
  "pouchdb-find": "^7.2.2",
127
126
  "pouchdb-replication-stream": "1.2.9",
127
+ "redis": "4",
128
128
  "server-destroy": "1.0.1",
129
129
  "svelte": "^3.38.2",
130
130
  "swagger-parser": "^10.0.3",
@@ -150,6 +150,7 @@
150
150
  "@types/koa-router": "^7.4.2",
151
151
  "@types/node": "^15.12.4",
152
152
  "@types/oracledb": "^5.2.1",
153
+ "@types/redis": "^4.0.11",
153
154
  "@typescript-eslint/parser": "4.28.0",
154
155
  "apidoc": "^0.50.2",
155
156
  "babel-jest": "^27.0.2",
@@ -157,12 +158,15 @@
157
158
  "docker-compose": "^0.23.6",
158
159
  "eslint": "^6.8.0",
159
160
  "jest": "^27.0.5",
161
+ "jest-openapi": "^0.14.2",
160
162
  "nodemon": "^2.0.4",
161
163
  "openapi-types": "^9.3.1",
164
+ "openapi-typescript": "^5.2.0",
162
165
  "path-to-regexp": "^6.2.0",
163
166
  "prettier": "^2.3.1",
164
167
  "rimraf": "^3.0.2",
165
168
  "supertest": "^4.0.2",
169
+ "swagger-jsdoc": "^6.1.0",
166
170
  "ts-jest": "^27.0.3",
167
171
  "ts-node": "^10.0.0",
168
172
  "typescript": "^4.3.5",
@@ -24,6 +24,8 @@ const { createASession } = require("@budibase/backend-core/sessions");
24
24
  const { user: userCache } = require("@budibase/backend-core/cache");
25
25
  const newid = require("../../db/newid");
26
26
  const context = require("@budibase/backend-core/context");
27
+ const { generateDevInfoID, SEPARATOR } = require("@budibase/backend-core/db");
28
+ const { encrypt } = require("@budibase/backend-core/encryption");
27
29
  const GLOBAL_USER_ID = "us_uuid1";
28
30
  const EMAIL = "babs@babs.com";
29
31
  const CSRF_TOKEN = "e3727778-7af0-4226-b5eb-f43cbe60a306";
@@ -42,6 +44,9 @@ class TestConfiguration {
42
44
  getRequest() {
43
45
  return this.request;
44
46
  }
47
+ getApp() {
48
+ return this.app;
49
+ }
45
50
  getAppId() {
46
51
  return this.appId;
47
52
  }
@@ -80,6 +85,22 @@ class TestConfiguration {
80
85
  }
81
86
  });
82
87
  }
88
+ generateApiKey(userId = GLOBAL_USER_ID) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ const db = getGlobalDB(TENANT_ID);
91
+ const id = generateDevInfoID(userId);
92
+ let devInfo;
93
+ try {
94
+ devInfo = yield db.get(id);
95
+ }
96
+ catch (err) {
97
+ devInfo = { _id: id, userId };
98
+ }
99
+ devInfo.apiKey = encrypt(`${TENANT_ID}${SEPARATOR}${newid()}`);
100
+ yield db.put(devInfo);
101
+ return devInfo.apiKey;
102
+ });
103
+ }
83
104
  globalUser({ id = GLOBAL_USER_ID, builder = true, email = EMAIL, roles, } = {}) {
84
105
  return __awaiter(this, void 0, void 0, function* () {
85
106
  const db = getGlobalDB(TENANT_ID);
@@ -122,7 +143,7 @@ class TestConfiguration {
122
143
  }
123
144
  cleanup(this.allApps.map(app => app.appId));
124
145
  }
125
- defaultHeaders() {
146
+ defaultHeaders(extras = {}) {
126
147
  const auth = {
127
148
  userId: GLOBAL_USER_ID,
128
149
  sessionId: "sessionid",
@@ -134,14 +155,10 @@ class TestConfiguration {
134
155
  };
135
156
  const authToken = jwt.sign(auth, env.JWT_SECRET);
136
157
  const appToken = jwt.sign(app, env.JWT_SECRET);
137
- const headers = {
138
- Accept: "application/json",
139
- Cookie: [
158
+ const headers = Object.assign({ Accept: "application/json", Cookie: [
140
159
  `${Cookies.Auth}=${authToken}`,
141
160
  `${Cookies.CurrentApp}=${appToken}`,
142
- ],
143
- [Headers.CSRF_TOKEN]: CSRF_TOKEN,
144
- };
161
+ ], [Headers.CSRF_TOKEN]: CSRF_TOKEN }, extras);
145
162
  if (this.appId) {
146
163
  headers[Headers.APP_ID] = this.appId;
147
164
  }
@@ -204,7 +221,7 @@ class TestConfiguration {
204
221
  getTable(tableId = null) {
205
222
  return __awaiter(this, void 0, void 0, function* () {
206
223
  tableId = tableId || this.table._id;
207
- return this._req(null, { id: tableId }, controllers.table.find);
224
+ return this._req(null, { tableId }, controllers.table.find);
208
225
  });
209
226
  }
210
227
  createLinkedTable(relationshipType = null, links = ["link"]) {