@budibase/server 1.0.79 → 1.0.80-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/__mocks__/node-fetch.ts +1 -0
  2. package/builder/assets/index.b37e0ebb.js +1288 -0
  3. package/builder/assets/{index.c8d1e8f0.css → index.c57242d4.css} +2 -2
  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/googlesheets.js +3 -0
  224. package/dist/integrations/microsoftSqlServer.js +35 -29
  225. package/dist/integrations/mysql.js +3 -0
  226. package/dist/integrations/oracle.js +14 -19
  227. package/dist/integrations/postgres.js +34 -28
  228. package/dist/package.json +11 -7
  229. package/dist/tests/utilities/TestConfiguration.js +25 -8
  230. package/dist/threads/query.js +33 -8
  231. package/dist/tsconfig.tsbuildinfo +1 -1
  232. package/dist/utilities/workerRequests.js +50 -15
  233. package/package.json +12 -8
  234. package/scripts/integrations/oracle/oracle.md +2 -2
  235. package/scripts/integrations/postgres/init.sql +5 -3
  236. package/scripts/likeCypress.ts +9 -6
  237. package/specs/generate.js +83 -0
  238. package/specs/openapi.json +2222 -0
  239. package/specs/openapi.yaml +1530 -0
  240. package/specs/parameters.js +59 -0
  241. package/specs/resources/application.js +101 -0
  242. package/specs/resources/index.js +24 -0
  243. package/specs/resources/misc.js +12 -0
  244. package/specs/resources/query.js +189 -0
  245. package/specs/resources/row.js +125 -0
  246. package/specs/resources/table.js +191 -0
  247. package/specs/resources/user.js +126 -0
  248. package/specs/resources/utils/Resource.js +26 -0
  249. package/specs/resources/utils/index.js +11 -0
  250. package/specs/security.js +7 -0
  251. package/src/api/controllers/application.js +1 -0
  252. package/src/api/controllers/public/applications.ts +74 -0
  253. package/src/api/controllers/public/mapping/applications.ts +32 -0
  254. package/src/api/controllers/public/mapping/index.ts +13 -0
  255. package/src/api/controllers/public/mapping/queries.ts +39 -0
  256. package/src/api/controllers/public/mapping/rows.ts +31 -0
  257. package/src/api/controllers/public/mapping/tables.ts +26 -0
  258. package/src/api/controllers/public/mapping/types.ts +13 -0
  259. package/src/api/controllers/public/mapping/users.ts +32 -0
  260. package/src/api/controllers/public/queries.ts +20 -0
  261. package/src/api/controllers/public/rows.ts +77 -0
  262. package/src/api/controllers/public/tables.ts +56 -0
  263. package/src/api/controllers/public/users.ts +82 -0
  264. package/src/api/controllers/public/utils.ts +38 -0
  265. package/src/api/controllers/row/ExternalRequest.ts +1 -1
  266. package/src/api/controllers/row/internal.js +4 -0
  267. package/src/api/controllers/table/index.js +2 -1
  268. package/src/api/controllers/webhook.js +3 -6
  269. package/src/api/index.js +4 -1
  270. package/src/api/routes/automation.js +3 -33
  271. package/src/api/routes/datasource.js +6 -52
  272. package/src/api/routes/index.js +2 -0
  273. package/src/api/routes/permission.js +4 -18
  274. package/src/api/routes/public/applications.ts +156 -0
  275. package/src/api/routes/public/index.ts +118 -0
  276. package/src/api/routes/public/middleware/mapper.ts +81 -0
  277. package/src/api/routes/public/queries.ts +81 -0
  278. package/src/api/routes/public/rows.ts +242 -0
  279. package/src/api/routes/public/tables.ts +169 -0
  280. package/src/api/routes/public/tests/compare.spec.js +184 -0
  281. package/src/api/routes/public/users.ts +144 -0
  282. package/src/api/routes/public/utils/Endpoint.ts +51 -0
  283. package/src/api/routes/role.js +3 -24
  284. package/src/api/routes/row.js +3 -2
  285. package/src/api/routes/screen.js +2 -29
  286. package/src/api/routes/table.js +4 -19
  287. package/src/api/routes/tests/utilities/index.js +24 -0
  288. package/src/api/routes/utils/validators.js +219 -0
  289. package/src/api/routes/webhook.js +2 -18
  290. package/src/automations/steps/filter.js +3 -2
  291. package/src/automations/steps/queryRows.js +1 -1
  292. package/src/automations/utils.js +2 -2
  293. package/src/constants/index.js +4 -0
  294. package/src/db/utils.js +12 -0
  295. package/src/definitions/common.ts +4 -0
  296. package/src/definitions/openapi.ts +943 -0
  297. package/src/environment.js +1 -0
  298. package/src/integrations/base/datasourcePlus.ts +3 -0
  299. package/src/integrations/googlesheets.ts +5 -2
  300. package/src/integrations/microsoftSqlServer.ts +38 -33
  301. package/src/integrations/mysql.ts +4 -0
  302. package/src/integrations/oracle.ts +27 -35
  303. package/src/integrations/postgres.ts +33 -26
  304. package/src/tests/utilities/TestConfiguration.js +23 -2
  305. package/src/threads/query.js +37 -9
  306. package/src/utilities/workerRequests.js +65 -16
  307. package/builder/assets/index.f28c5d54.js +0 -1352
  308. package/scripts/proxy/generateProxyConfig.js +0 -70
@@ -4,22 +4,8 @@ const tableController = require("../controllers/table");
4
4
  const authorized = require("../../middleware/authorized");
5
5
  const { paramResource, bodyResource } = require("../../middleware/resourceId");
6
6
  const { BUILDER, PermissionLevels, PermissionTypes, } = require("@budibase/backend-core/permissions");
7
- const joiValidator = require("../../middleware/joi-validator");
8
- const Joi = require("joi");
7
+ const { tableValidator } = require("./utils/validators");
9
8
  const router = Router();
10
- function generateSaveValidator() {
11
- // prettier-ignore
12
- return joiValidator.body(Joi.object({
13
- _id: Joi.string(),
14
- _rev: Joi.string(),
15
- type: Joi.string().valid("table", "internal", "external"),
16
- primaryDisplay: Joi.string(),
17
- schema: Joi.object().required(),
18
- name: Joi.string().required(),
19
- views: Joi.object(),
20
- dataImport: Joi.object(),
21
- }).unknown(true));
22
- }
23
9
  router
24
10
  /**
25
11
  * @api {get} /api/tables Fetch all tables
@@ -46,7 +32,7 @@ router
46
32
  *
47
33
  * @apiSuccess {object[]} body The response body will be the table that was found.
48
34
  */
49
- .get("/api/tables/:id", paramResource("id"), authorized(PermissionTypes.TABLE, PermissionLevels.READ), tableController.find)
35
+ .get("/api/tables/:tableId", paramResource("tableId"), authorized(PermissionTypes.TABLE, PermissionLevels.READ), tableController.find)
50
36
  /**
51
37
  * @api {post} /api/tables Save a table
52
38
  * @apiName Save a table
@@ -122,7 +108,7 @@ router
122
108
  */
123
109
  .post("/api/tables",
124
110
  // allows control over updating a table
125
- bodyResource("_id"), authorized(BUILDER), generateSaveValidator(), tableController.save)
111
+ bodyResource("_id"), authorized(BUILDER), tableValidator(), tableController.save)
126
112
  /**
127
113
  * @api {post} /api/tables/csv/validate Validate a CSV for a table
128
114
  * @apiName Validate a CSV for a table
@@ -11,6 +11,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  const TestConfig = require("../../../../tests/utilities/TestConfiguration");
12
12
  const structures = require("../../../../tests/utilities/structures");
13
13
  const env = require("../../../../environment");
14
+ function user() {
15
+ return {
16
+ _id: "user",
17
+ _rev: "rev",
18
+ createdAt: Date.now(),
19
+ email: "test@test.com",
20
+ roles: {},
21
+ tenantId: "default",
22
+ status: "active",
23
+ };
24
+ }
14
25
  jest.mock("../../../../utilities/workerRequests", () => ({
15
26
  getGlobalUsers: jest.fn(() => {
16
27
  return {
@@ -22,6 +33,18 @@ jest.mock("../../../../utilities/workerRequests", () => ({
22
33
  _id: "us_uuid1",
23
34
  };
24
35
  }),
36
+ allGlobalUsers: jest.fn(() => {
37
+ return [user()];
38
+ }),
39
+ readGlobalUser: jest.fn(() => {
40
+ return user();
41
+ }),
42
+ saveGlobalUser: jest.fn(() => {
43
+ return { _id: "user", _rev: "rev" };
44
+ }),
45
+ deleteGlobalUser: jest.fn(() => {
46
+ return { message: "deleted user" };
47
+ }),
25
48
  removeAppFromUserRoles: jest.fn(),
26
49
  }));
27
50
  exports.delay = ms => new Promise(resolve => setTimeout(resolve, ms));
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ const joiValidator = require("../../../middleware/joi-validator");
3
+ const { DataSourceOperation } = require("../../../constants");
4
+ const { WebhookType } = require("../../../constants");
5
+ const { BUILTIN_PERMISSION_IDS, PermissionLevels, } = require("@budibase/backend-core/permissions");
6
+ const Joi = require("joi");
7
+ const OPTIONAL_STRING = Joi.string().optional().allow(null).allow("");
8
+ const OPTIONAL_NUMBER = Joi.number().optional().allow(null);
9
+ exports.tableValidator = () => {
10
+ // prettier-ignore
11
+ return joiValidator.body(Joi.object({
12
+ _id: OPTIONAL_STRING,
13
+ _rev: OPTIONAL_STRING,
14
+ type: OPTIONAL_STRING.valid("table", "internal", "external"),
15
+ primaryDisplay: OPTIONAL_STRING,
16
+ schema: Joi.object().required(),
17
+ name: Joi.string().required(),
18
+ views: Joi.object(),
19
+ dataImport: Joi.object(),
20
+ }).unknown(true));
21
+ };
22
+ exports.nameValidator = () => {
23
+ // prettier-ignore
24
+ return joiValidator.body(Joi.object({
25
+ name: OPTIONAL_STRING,
26
+ }));
27
+ };
28
+ exports.datasourceValidator = () => {
29
+ // prettier-ignore
30
+ return joiValidator.body(Joi.object({
31
+ _id: Joi.string(),
32
+ _rev: Joi.string(),
33
+ type: OPTIONAL_STRING.allow("datasource_plus"),
34
+ relationships: Joi.array().items(Joi.object({
35
+ from: Joi.string().required(),
36
+ to: Joi.string().required(),
37
+ cardinality: Joi.valid("1:N", "1:1", "N:N").required()
38
+ })),
39
+ }).unknown(true));
40
+ };
41
+ function filterObject() {
42
+ // prettier-ignore
43
+ return Joi.object({
44
+ string: Joi.object().optional(),
45
+ fuzzy: Joi.object().optional(),
46
+ range: Joi.object().optional(),
47
+ equal: Joi.object().optional(),
48
+ notEqual: Joi.object().optional(),
49
+ empty: Joi.object().optional(),
50
+ notEmpty: Joi.object().optional(),
51
+ oneOf: Joi.object().optional(),
52
+ contains: Joi.object().optional(),
53
+ notContains: Joi.object().optional(),
54
+ }).unknown(true);
55
+ }
56
+ exports.internalSearchValidator = () => {
57
+ // prettier-ignore
58
+ return joiValidator.body(Joi.object({
59
+ tableId: OPTIONAL_STRING,
60
+ query: filterObject(),
61
+ limit: OPTIONAL_NUMBER,
62
+ sort: OPTIONAL_STRING,
63
+ sortOrder: OPTIONAL_STRING,
64
+ sortType: OPTIONAL_STRING,
65
+ paginate: Joi.boolean(),
66
+ bookmark: Joi.alternatives().try(OPTIONAL_STRING, OPTIONAL_NUMBER).optional(),
67
+ }));
68
+ };
69
+ exports.externalSearchValidator = () => {
70
+ return joiValidator.body(Joi.object({
71
+ query: filterObject(),
72
+ paginate: Joi.boolean().optional(),
73
+ bookmark: Joi.alternatives()
74
+ .try(OPTIONAL_STRING, OPTIONAL_NUMBER)
75
+ .optional(),
76
+ limit: OPTIONAL_NUMBER,
77
+ sort: Joi.object({
78
+ column: Joi.string(),
79
+ order: OPTIONAL_STRING.valid("ascending", "descending"),
80
+ type: OPTIONAL_STRING.valid("string", "number"),
81
+ }).optional(),
82
+ }));
83
+ };
84
+ exports.datasourceQueryValidator = () => {
85
+ // prettier-ignore
86
+ return joiValidator.body(Joi.object({
87
+ endpoint: Joi.object({
88
+ datasourceId: Joi.string().required(),
89
+ operation: Joi.string().required().valid(...Object.values(DataSourceOperation)),
90
+ entityId: Joi.string().required(),
91
+ }).required(),
92
+ resource: Joi.object({
93
+ fields: Joi.array().items(Joi.string()).optional(),
94
+ }).optional(),
95
+ body: Joi.object().optional(),
96
+ sort: Joi.object().optional(),
97
+ filters: filterObject().optional(),
98
+ paginate: Joi.object({
99
+ page: Joi.string().alphanum().optional(),
100
+ limit: Joi.number().optional(),
101
+ }).optional(),
102
+ }));
103
+ };
104
+ exports.webhookValidator = () => {
105
+ // prettier-ignore
106
+ return joiValidator.body(Joi.object({
107
+ live: Joi.bool(),
108
+ _id: OPTIONAL_STRING,
109
+ _rev: OPTIONAL_STRING,
110
+ name: Joi.string().required(),
111
+ bodySchema: Joi.object().optional(),
112
+ action: Joi.object({
113
+ type: Joi.string().required().valid(WebhookType.AUTOMATION),
114
+ target: Joi.string().required(),
115
+ }).required(),
116
+ }).unknown(true));
117
+ };
118
+ exports.roleValidator = () => {
119
+ const permLevelArray = Object.values(PermissionLevels);
120
+ // prettier-ignore
121
+ return joiValidator.body(Joi.object({
122
+ _id: OPTIONAL_STRING,
123
+ _rev: OPTIONAL_STRING,
124
+ name: Joi.string().required(),
125
+ // this is the base permission ID (for now a built in)
126
+ permissionId: Joi.string().valid(...Object.values(BUILTIN_PERMISSION_IDS)).required(),
127
+ permissions: Joi.object()
128
+ .pattern(/.*/, [Joi.string().valid(...permLevelArray)])
129
+ .optional(),
130
+ inherits: OPTIONAL_STRING,
131
+ }).unknown(true));
132
+ };
133
+ exports.permissionValidator = () => {
134
+ const permLevelArray = Object.values(PermissionLevels);
135
+ // prettier-ignore
136
+ return joiValidator.params(Joi.object({
137
+ level: Joi.string().valid(...permLevelArray).required(),
138
+ resourceId: Joi.string(),
139
+ roleId: Joi.string(),
140
+ }).unknown(true));
141
+ };
142
+ exports.screenValidator = () => {
143
+ // prettier-ignore
144
+ return joiValidator.body(Joi.object({
145
+ name: Joi.string().required(),
146
+ routing: Joi.object({
147
+ route: Joi.string().required(),
148
+ roleId: Joi.string().required().allow(""),
149
+ }).required().unknown(true),
150
+ props: Joi.object({
151
+ _id: Joi.string().required(),
152
+ _component: Joi.string().required(),
153
+ _children: Joi.array().required(),
154
+ _instanceName: Joi.string().required(),
155
+ _styles: Joi.object().required(),
156
+ type: OPTIONAL_STRING,
157
+ table: OPTIONAL_STRING,
158
+ layoutId: OPTIONAL_STRING,
159
+ }).required().unknown(true),
160
+ }).unknown(true));
161
+ };
162
+ function generateStepSchema(allowStepTypes) {
163
+ // prettier-ignore
164
+ return Joi.object({
165
+ stepId: Joi.string().required(),
166
+ id: Joi.string().required(),
167
+ description: Joi.string().required(),
168
+ name: Joi.string().required(),
169
+ tagline: Joi.string().required(),
170
+ icon: Joi.string().required(),
171
+ params: Joi.object(),
172
+ args: Joi.object(),
173
+ type: Joi.string().required().valid(...allowStepTypes),
174
+ }).unknown(true);
175
+ }
176
+ exports.automationValidator = (existing = false) => {
177
+ // prettier-ignore
178
+ return joiValidator.body(Joi.object({
179
+ _id: existing ? Joi.string().required() : OPTIONAL_STRING,
180
+ _rev: existing ? Joi.string().required() : OPTIONAL_STRING,
181
+ name: Joi.string().required(),
182
+ type: Joi.string().valid("automation").required(),
183
+ definition: Joi.object({
184
+ steps: Joi.array().required().items(generateStepSchema(["ACTION", "LOGIC"])),
185
+ trigger: generateStepSchema(["TRIGGER"]).allow(null),
186
+ }).required().unknown(true),
187
+ }).unknown(true));
188
+ };
189
+ exports.applicationValidator = () => {
190
+ // prettier-ignore
191
+ return joiValidator.body(Joi.object({
192
+ _id: OPTIONAL_STRING,
193
+ _rev: OPTIONAL_STRING,
194
+ name: Joi.string().required(),
195
+ url: OPTIONAL_STRING,
196
+ template: Joi.object({
197
+ templateString: OPTIONAL_STRING,
198
+ }).unknown(true),
199
+ }).unknown(true));
200
+ };
@@ -2,27 +2,12 @@
2
2
  const Router = require("@koa/router");
3
3
  const controller = require("../controllers/webhook");
4
4
  const authorized = require("../../middleware/authorized");
5
- const joiValidator = require("../../middleware/joi-validator");
6
5
  const { BUILDER } = require("@budibase/backend-core/permissions");
7
- const Joi = require("joi");
6
+ const { webhookValidator } = require("./utils/validators");
8
7
  const router = Router();
9
- function generateSaveValidator() {
10
- // prettier-ignore
11
- return joiValidator.body(Joi.object({
12
- live: Joi.bool(),
13
- _id: Joi.string().optional(),
14
- _rev: Joi.string().optional(),
15
- name: Joi.string().required(),
16
- bodySchema: Joi.object().optional(),
17
- action: Joi.object({
18
- type: Joi.string().required().valid(controller.WebhookType.AUTOMATION),
19
- target: Joi.string().required(),
20
- }).required(),
21
- }).unknown(true));
22
- }
23
8
  router
24
9
  .get("/api/webhooks", authorized(BUILDER), controller.fetch)
25
- .put("/api/webhooks", authorized(BUILDER), generateSaveValidator(), controller.save)
10
+ .put("/api/webhooks", authorized(BUILDER), webhookValidator(), controller.save)
26
11
  .delete("/api/webhooks/:id/:rev", authorized(BUILDER), controller.destroy)
27
12
  .post("/api/webhooks/schema/:instance/:id", authorized(BUILDER), controller.buildSchema)
28
13
  // this shouldn't have authorisation, right now its always public
@@ -23,10 +23,10 @@ const PrettyFilterConditions = {
23
23
  exports.FilterConditions = FilterConditions;
24
24
  exports.PrettyFilterConditions = PrettyFilterConditions;
25
25
  exports.definition = {
26
- name: "Filter",
26
+ name: "Condition",
27
27
  tagline: "{{inputs.field}} {{inputs.condition}} {{inputs.value}}",
28
28
  icon: "Branch2",
29
- description: "Filter any automations which do not meet certain conditions",
29
+ description: "Conditionally halt automations which do not meet certain conditions",
30
30
  type: "LOGIC",
31
31
  internal: true,
32
32
  stepId: "FILTER",
@@ -81,7 +81,7 @@ function getTable(appId, tableId) {
81
81
  return __awaiter(this, void 0, void 0, function* () {
82
82
  const ctx = buildCtx(appId, null, {
83
83
  params: {
84
- id: tableId,
84
+ tableId,
85
85
  },
86
86
  });
87
87
  yield tableController.find(ctx);
@@ -15,7 +15,7 @@ const CouchDB = require("../db");
15
15
  const { queue } = require("./bullboard");
16
16
  const newid = require("../db/newid");
17
17
  const { updateEntityMetadata } = require("../utilities");
18
- const { MetadataTypes } = require("../constants");
18
+ const { MetadataTypes, WebhookType } = require("../constants");
19
19
  const { getProdAppID } = require("@budibase/backend-core/db");
20
20
  const { cloneDeep } = require("lodash/fp");
21
21
  const { getAppDB, getAppId } = require("@budibase/backend-core/context");
@@ -145,7 +145,7 @@ exports.checkForWebhooks = ({ oldAuto, newAuto }) => __awaiter(void 0, void 0, v
145
145
  const ctx = {
146
146
  appId,
147
147
  request: {
148
- body: new webhooks.Webhook("Automation webhook", webhooks.WebhookType.AUTOMATION, newAuto._id),
148
+ body: new webhooks.Webhook("Automation webhook", WebhookType.AUTOMATION, newAuto._id),
149
149
  },
150
150
  };
151
151
  yield webhooks.save(ctx);
@@ -166,5 +166,8 @@ exports.BuildSchemaErrors = {
166
166
  NO_KEY: "no_key",
167
167
  INVALID_COLUMN: "invalid_column",
168
168
  };
169
+ exports.WebhookType = {
170
+ AUTOMATION: "automation",
171
+ };
169
172
  // pass through the list from the auth/core lib
170
173
  exports.ObjectStoreBuckets = ObjectStoreBuckets;
package/dist/db/utils.js CHANGED
@@ -114,6 +114,17 @@ exports.getRowParams = (tableId = null, rowId = null, otherProps = {}) => {
114
114
  const endOfKey = rowId == null ? `${tableId}${SEPARATOR}` : rowId;
115
115
  return getDocParams(DocumentTypes.ROW, endOfKey, otherProps);
116
116
  };
117
+ /**
118
+ * Given a row ID this will find the table ID within it (only works for internal tables).
119
+ * @param {string} rowId The ID of the row.
120
+ * @returns {string} The table ID.
121
+ */
122
+ exports.getTableIDFromRowID = rowId => {
123
+ const components = rowId
124
+ .split(DocumentTypes.TABLE + SEPARATOR)[1]
125
+ .split(SEPARATOR);
126
+ return `${DocumentTypes.TABLE}${SEPARATOR}${components[0]}`;
127
+ };
117
128
  /**
118
129
  * Gets a new row ID for the specified table.
119
130
  * @param {string} tableId The table which the row is being created for.
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * This file was auto-generated by openapi-typescript.
4
+ * Do not make direct changes to the file.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -37,6 +37,7 @@ module.exports = {
37
37
  INTERNAL_API_KEY: process.env.INTERNAL_API_KEY,
38
38
  MULTI_TENANCY: process.env.MULTI_TENANCY,
39
39
  HTTP_MIGRATIONS: process.env.HTTP_MIGRATIONS,
40
+ API_REQ_LIMIT_PER_SEC: process.env.API_REQ_LIMIT_PER_SEC,
40
41
  // environment
41
42
  NODE_ENV: process.env.NODE_ENV,
42
43
  JEST_WORKER_ID: process.env.JEST_WORKER_ID,
@@ -97,6 +97,9 @@ var GoogleSheetsModule;
97
97
  const spreadsheetId = this.cleanSpreadsheetUrl(this.config.spreadsheetId);
98
98
  this.client = new google_spreadsheet_1.GoogleSpreadsheet(spreadsheetId);
99
99
  }
100
+ getBindingIdentifier() {
101
+ return "";
102
+ }
100
103
  /**
101
104
  * Pull the spreadsheet ID out from a valid google sheets URL
102
105
  * @param spreadsheetId - the URL or standard spreadsheetId of the google sheet
@@ -63,32 +63,10 @@ var MSSQLModule;
63
63
  },
64
64
  },
65
65
  };
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
66
  class SqlServerIntegration extends Sql {
90
67
  constructor(config) {
91
68
  super(utils_1.SqlClients.MS_SQL);
69
+ this.index = 0;
92
70
  this.tables = {};
93
71
  this.schemaErrors = {};
94
72
  this.MASTER_TABLES = [
@@ -109,6 +87,31 @@ var MSSQLModule;
109
87
  this.pool = new sqlServer.ConnectionPool(clientCfg);
110
88
  }
111
89
  }
90
+ internalQuery(query, operation = undefined) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ const client = this.client;
93
+ const request = client.request();
94
+ this.index = 0;
95
+ try {
96
+ if (Array.isArray(query.bindings)) {
97
+ let count = 0;
98
+ for (let binding of query.bindings) {
99
+ request.input(`p${count++}`, binding);
100
+ }
101
+ }
102
+ // this is a hack to get the inserted ID back,
103
+ // no way to do this with Knex nicely
104
+ const sql = operation === datasource_1.Operation.CREATE
105
+ ? `${query.sql}; SELECT SCOPE_IDENTITY() AS id;`
106
+ : query.sql;
107
+ return yield request.query(sql);
108
+ }
109
+ catch (err) {
110
+ // @ts-ignore
111
+ throw new Error(err);
112
+ }
113
+ });
114
+ }
112
115
  getDefinitionSQL(tableName) {
113
116
  return `select *
114
117
  from INFORMATION_SCHEMA.COLUMNS
@@ -134,6 +137,9 @@ var MSSQLModule;
134
137
  FROM INFORMATION_SCHEMA.COLUMNS
135
138
  WHERE TABLE_NAME='${tableName}'`;
136
139
  }
140
+ getBindingIdentifier() {
141
+ return `(@p${this.index++})`;
142
+ }
137
143
  connect() {
138
144
  return __awaiter(this, void 0, void 0, function* () {
139
145
  try {
@@ -147,7 +153,7 @@ var MSSQLModule;
147
153
  }
148
154
  runSQL(sql) {
149
155
  return __awaiter(this, void 0, void 0, function* () {
150
- return (yield internalQuery(this.client, utils_1.getSqlQuery(sql))).recordset;
156
+ return (yield this.internalQuery(utils_1.getSqlQuery(sql))).recordset;
151
157
  });
152
158
  }
153
159
  /**
@@ -207,28 +213,28 @@ var MSSQLModule;
207
213
  read(query) {
208
214
  return __awaiter(this, void 0, void 0, function* () {
209
215
  yield this.connect();
210
- const response = yield internalQuery(this.client, utils_1.getSqlQuery(query));
216
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
211
217
  return response.recordset;
212
218
  });
213
219
  }
214
220
  create(query) {
215
221
  return __awaiter(this, void 0, void 0, function* () {
216
222
  yield this.connect();
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.recordset || [{ created: true }];
219
225
  });
220
226
  }
221
227
  update(query) {
222
228
  return __awaiter(this, void 0, void 0, function* () {
223
229
  yield this.connect();
224
- const response = yield internalQuery(this.client, utils_1.getSqlQuery(query));
230
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
225
231
  return response.recordset || [{ updated: true }];
226
232
  });
227
233
  }
228
234
  delete(query) {
229
235
  return __awaiter(this, void 0, void 0, function* () {
230
236
  yield this.connect();
231
- const response = yield internalQuery(this.client, utils_1.getSqlQuery(query));
237
+ const response = yield this.internalQuery(utils_1.getSqlQuery(query));
232
238
  return response.recordset || [{ deleted: true }];
233
239
  });
234
240
  }
@@ -236,7 +242,7 @@ var MSSQLModule;
236
242
  return __awaiter(this, void 0, void 0, function* () {
237
243
  yield this.connect();
238
244
  const operation = this._operation(json);
239
- const queryFn = (query, op) => internalQuery(this.client, query, op);
245
+ const queryFn = (query, op) => this.internalQuery(query, op);
240
246
  const processFn = (result) => result.recordset ? result.recordset : [{ [operation]: true }];
241
247
  return this.queryWithReturning(json, queryFn, processFn);
242
248
  });
@@ -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) {