@budibase/server 1.0.219 → 1.0.220-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 (284) hide show
  1. package/.yarnrc +1 -0
  2. package/__mocks__/node-fetch.ts +9 -0
  3. package/builder/assets/index.7786f497.css +6 -0
  4. package/builder/assets/index.e1885c5f.js +974 -0
  5. package/builder/assets/{vendor.9bf2fcb4.js → vendor.001dcf8c.js} +163 -163
  6. package/builder/index.html +3 -3
  7. package/coverage/clover.xml +1018 -950
  8. package/coverage/coverage-final.json +31 -31
  9. package/coverage/lcov-report/api/controllers/apikeys.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 +111 -12
  12. package/coverage/lcov-report/api/controllers/backup.js.html +9 -6
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +16 -16
  16. package/coverage/lcov-report/api/controllers/dev.js.html +13 -166
  17. package/coverage/lcov-report/api/controllers/index.html +32 -32
  18. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  24. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/external.js.html +47 -17
  28. package/coverage/lcov-report/api/controllers/row/index.html +33 -33
  29. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +159 -21
  31. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +17 -8
  33. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  47. package/coverage/lcov-report/api/index.html +15 -15
  48. package/coverage/lcov-report/api/index.js.html +22 -13
  49. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/automation.js.html +32 -2
  53. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/dev.js.html +2 -5
  59. package/coverage/lcov-report/api/routes/index.html +1 -1
  60. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  74. package/coverage/lcov-report/api/routes/utils/validators.js.html +5 -2
  75. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  77. package/coverage/lcov-report/automations/actions.js.html +1 -1
  78. package/coverage/lcov-report/automations/automationUtils.js.html +57 -12
  79. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  80. package/coverage/lcov-report/automations/index.html +17 -17
  81. package/coverage/lcov-report/automations/index.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/executeQuery.js.html +2 -2
  86. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/filter.js.html +58 -34
  88. package/coverage/lcov-report/automations/steps/index.html +11 -11
  89. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggers.js.html +4 -4
  108. package/coverage/lcov-report/constants/index.html +1 -1
  109. package/coverage/lcov-report/constants/index.js.html +1 -1
  110. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  111. package/coverage/lcov-report/constants/screens.js.html +1 -1
  112. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  113. package/coverage/lcov-report/db/index.html +14 -14
  114. package/coverage/lcov-report/db/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  116. package/coverage/lcov-report/db/linkedRows/index.html +13 -13
  117. package/coverage/lcov-report/db/linkedRows/index.js.html +10 -7
  118. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  119. package/coverage/lcov-report/db/newid.js.html +2 -2
  120. package/coverage/lcov-report/db/utils.js.html +27 -51
  121. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  122. package/coverage/lcov-report/events/index.html +1 -1
  123. package/coverage/lcov-report/events/index.js.html +1 -1
  124. package/coverage/lcov-report/events/utils.js.html +1 -1
  125. package/coverage/lcov-report/index.html +83 -83
  126. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  127. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  128. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  129. package/coverage/lcov-report/middleware/builder.js.html +12 -12
  130. package/coverage/lcov-report/middleware/currentapp.js.html +33 -33
  131. package/coverage/lcov-report/middleware/index.html +1 -1
  132. package/coverage/lcov-report/middleware/joi-validator.js.html +10 -10
  133. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  134. package/coverage/lcov-report/middleware/resourceId.js.html +7 -7
  135. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  136. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  137. package/coverage/lcov-report/threads/automation.js.html +18 -9
  138. package/coverage/lcov-report/threads/index.html +25 -25
  139. package/coverage/lcov-report/threads/query.js.html +301 -79
  140. package/coverage/lcov-report/threads/utils.js.html +4 -4
  141. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  142. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  143. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  144. package/coverage/lcov-report/utilities/global.js.html +14 -14
  145. package/coverage/lcov-report/utilities/index.html +26 -26
  146. package/coverage/lcov-report/utilities/index.js.html +17 -32
  147. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
  148. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  149. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  150. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  151. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  152. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  153. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  154. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  155. package/coverage/lcov-report/utilities/security.js.html +2 -2
  156. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  157. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  158. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  159. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  160. package/coverage/lcov-report/utilities/users.js.html +1 -1
  161. package/coverage/lcov-report/utilities/workerRequests.js.html +57 -9
  162. package/coverage/lcov.info +1789 -1665
  163. package/dist/api/controllers/application.js +19 -16
  164. package/dist/api/controllers/automation.js +28 -2
  165. package/dist/api/controllers/backup.js +3 -2
  166. package/dist/api/controllers/dev.js +2 -40
  167. package/dist/api/controllers/public/applications.js +1 -1
  168. package/dist/api/controllers/public/utils.js +8 -1
  169. package/dist/api/controllers/query/index.js +31 -3
  170. package/dist/api/controllers/row/external.js +19 -7
  171. package/dist/api/controllers/row/internalSearch.js +47 -10
  172. package/dist/api/controllers/row/utils.js +3 -0
  173. package/dist/api/controllers/static/index.js +1 -5
  174. package/dist/api/index.js +4 -1
  175. package/dist/api/routes/automation.js +2 -0
  176. package/dist/api/routes/dev.js +1 -2
  177. package/dist/api/routes/public/rows.js +7 -2
  178. package/dist/api/routes/utils/validators.js +1 -0
  179. package/dist/app.js +20 -0
  180. package/dist/automations/automationUtils.js +16 -4
  181. package/dist/automations/logging/index.js +70 -0
  182. package/dist/automations/steps/executeQuery.js +1 -1
  183. package/dist/automations/steps/filter.js +38 -29
  184. package/dist/automations/triggers.js +1 -1
  185. package/dist/db/linkedRows/index.js +1 -0
  186. package/dist/db/utils.js +4 -31
  187. package/dist/definitions/datasource.js +1 -0
  188. package/dist/environment.js +3 -0
  189. package/dist/integrations/airtable.js +1 -0
  190. package/dist/integrations/arangodb.js +1 -0
  191. package/dist/integrations/base/sql.js +22 -3
  192. package/dist/integrations/couchdb.js +1 -0
  193. package/dist/integrations/dynamodb.js +1 -0
  194. package/dist/integrations/elasticsearch.js +1 -0
  195. package/dist/integrations/firebase.js +1 -0
  196. package/dist/integrations/googlesheets.js +1 -0
  197. package/dist/integrations/index.js +4 -0
  198. package/dist/integrations/microsoftSqlServer.js +2 -1
  199. package/dist/integrations/mongodb.js +1 -0
  200. package/dist/integrations/mysql.js +2 -1
  201. package/dist/integrations/oracle.js +1 -0
  202. package/dist/integrations/postgres.js +2 -1
  203. package/dist/integrations/queries/sql.js +3 -0
  204. package/dist/integrations/redis.js +1 -0
  205. package/dist/integrations/rest.js +2 -1
  206. package/dist/integrations/s3.js +1 -0
  207. package/dist/integrations/snowflake.js +102 -0
  208. package/dist/package.json +7 -6
  209. package/dist/tests/utilities/TestConfiguration.js +19 -6
  210. package/dist/threads/automation.js +6 -3
  211. package/dist/threads/index.js +15 -1
  212. package/dist/threads/query.js +65 -12
  213. package/dist/tsconfig.build.tsbuildinfo +1 -1
  214. package/dist/utilities/fileSystem/index.js +16 -6
  215. package/dist/utilities/index.js +1 -5
  216. package/dist/utilities/workerRequests.js +8 -0
  217. package/package.json +8 -7
  218. package/scripts/dev/manage.js +2 -0
  219. package/scripts/integrations/oracle/instantclient/linux/arm64/basiclite-19.10.zip +0 -0
  220. package/scripts/integrations/oracle/instantclient/linux/arm64/install.sh +23 -0
  221. package/scripts/integrations/oracle/instantclient/linux/install.sh +10 -0
  222. package/specs/openapi.json +9 -5
  223. package/specs/openapi.yaml +10 -4
  224. package/src/api/controllers/application.ts +19 -19
  225. package/src/api/controllers/automation.js +35 -2
  226. package/src/api/controllers/backup.js +3 -2
  227. package/src/api/controllers/dev.js +2 -53
  228. package/src/api/controllers/public/applications.ts +2 -2
  229. package/src/api/controllers/public/utils.ts +8 -1
  230. package/src/api/controllers/query/index.ts +40 -4
  231. package/src/api/controllers/row/external.js +19 -9
  232. package/src/api/controllers/row/internalSearch.js +55 -9
  233. package/src/api/controllers/row/utils.js +3 -0
  234. package/src/api/controllers/static/index.js +1 -6
  235. package/src/api/index.js +4 -1
  236. package/src/api/routes/automation.js +10 -0
  237. package/src/api/routes/dev.js +0 -1
  238. package/src/api/routes/public/rows.ts +7 -2
  239. package/src/api/routes/tests/query.spec.js +166 -1
  240. package/src/api/routes/utils/validators.js +1 -0
  241. package/src/app.ts +30 -1
  242. package/src/automations/automationUtils.js +19 -4
  243. package/src/automations/logging/index.ts +35 -0
  244. package/src/automations/steps/executeQuery.js +1 -1
  245. package/src/automations/steps/filter.js +36 -28
  246. package/src/automations/tests/filter.spec.js +2 -1
  247. package/src/automations/triggers.js +1 -1
  248. package/src/db/linkedRows/index.js +1 -0
  249. package/src/db/utils.js +5 -13
  250. package/src/definitions/common.ts +1 -0
  251. package/src/definitions/datasource.ts +2 -0
  252. package/src/definitions/openapi.ts +471 -469
  253. package/src/environment.js +3 -0
  254. package/src/integrations/airtable.ts +1 -0
  255. package/src/integrations/arangodb.ts +1 -0
  256. package/src/integrations/base/sql.ts +29 -11
  257. package/src/integrations/couchdb.ts +1 -0
  258. package/src/integrations/dynamodb.ts +1 -0
  259. package/src/integrations/elasticsearch.ts +1 -0
  260. package/src/integrations/firebase.ts +1 -0
  261. package/src/integrations/googlesheets.ts +1 -0
  262. package/src/integrations/index.ts +4 -0
  263. package/src/integrations/microsoftSqlServer.ts +2 -0
  264. package/src/integrations/mongodb.ts +1 -0
  265. package/src/integrations/mysql.ts +2 -0
  266. package/src/integrations/oracle.ts +1 -0
  267. package/src/integrations/postgres.ts +2 -0
  268. package/src/integrations/queries/sql.ts +3 -1
  269. package/src/integrations/redis.ts +1 -0
  270. package/src/integrations/rest.ts +2 -1
  271. package/src/integrations/s3.ts +1 -0
  272. package/src/integrations/snowflake.ts +99 -0
  273. package/src/integrations/tests/rest.spec.js +16 -1
  274. package/src/migrations/tests/index.spec.ts +18 -2
  275. package/src/module.d.ts +2 -0
  276. package/src/tests/utilities/TestConfiguration.js +22 -3
  277. package/src/threads/automation.js +6 -3
  278. package/src/threads/index.ts +5 -1
  279. package/src/threads/query.js +88 -14
  280. package/src/utilities/fileSystem/index.js +22 -8
  281. package/src/utilities/index.js +1 -6
  282. package/src/utilities/workerRequests.js +16 -0
  283. package/builder/assets/index.1c640a53.js +0 -1316
  284. package/builder/assets/index.24307ca0.css +0 -6
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">91.34% </span>
26
+ <span class="strong">81.34% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>95/104</span>
28
+ <span class='fraction'>109/134</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">79.06% </span>
33
+ <span class="strong">64.4% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>34/43</span>
35
+ <span class='fraction'>38/59</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">90.9% </span>
40
+ <span class="strong">76.92% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>10/11</span>
42
+ <span class='fraction'>10/13</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">92% </span>
47
+ <span class="strong">81.53% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>92/100</span>
49
+ <span class='fraction'>106/130</span>
50
50
  </div>
51
51
 
52
52
 
@@ -266,12 +266,94 @@
266
266
  <a name='L201'></a><a href='#L201'>201</a>
267
267
  <a name='L202'></a><a href='#L202'>202</a>
268
268
  <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
270
344
  <span class="cline-any cline-yes">2x</span>
271
345
  <span class="cline-any cline-yes">2x</span>
272
346
  <span class="cline-any cline-yes">2x</span>
273
347
  <span class="cline-any cline-yes">2x</span>
274
348
  <span class="cline-any cline-yes">2x</span>
349
+ <span class="cline-any cline-neutral">&nbsp;</span>
350
+ <span class="cline-any cline-neutral">&nbsp;</span>
351
+ <span class="cline-any cline-neutral">&nbsp;</span>
352
+ <span class="cline-any cline-yes">2x</span>
353
+ <span class="cline-any cline-yes">2x</span>
354
+ <span class="cline-any cline-yes">2x</span>
355
+ <span class="cline-any cline-yes">2x</span>
356
+ <span class="cline-any cline-neutral">&nbsp;</span>
275
357
  <span class="cline-any cline-yes">2x</span>
276
358
  <span class="cline-any cline-neutral">&nbsp;</span>
277
359
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -280,59 +362,88 @@
280
362
  <span class="cline-any cline-neutral">&nbsp;</span>
281
363
  <span class="cline-any cline-neutral">&nbsp;</span>
282
364
  <span class="cline-any cline-neutral">&nbsp;</span>
283
- <span class="cline-any cline-yes">15x</span>
284
- <span class="cline-any cline-yes">15x</span>
285
- <span class="cline-any cline-yes">15x</span>
286
- <span class="cline-any cline-yes">15x</span>
287
- <span class="cline-any cline-yes">15x</span>
288
- <span class="cline-any cline-yes">15x</span>
289
- <span class="cline-any cline-yes">15x</span>
290
- <span class="cline-any cline-yes">15x</span>
291
- <span class="cline-any cline-yes">15x</span>
365
+ <span class="cline-any cline-yes">22x</span>
366
+ <span class="cline-any cline-yes">22x</span>
367
+ <span class="cline-any cline-yes">22x</span>
368
+ <span class="cline-any cline-yes">22x</span>
369
+ <span class="cline-any cline-yes">22x</span>
370
+ <span class="cline-any cline-yes">22x</span>
371
+ <span class="cline-any cline-yes">22x</span>
372
+ <span class="cline-any cline-yes">22x</span>
373
+ <span class="cline-any cline-yes">22x</span>
292
374
  <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-yes">22x</span>
293
376
  <span class="cline-any cline-neutral">&nbsp;</span>
294
377
  <span class="cline-any cline-neutral">&nbsp;</span>
295
- <span class="cline-any cline-yes">15x</span>
296
- <span class="cline-any cline-yes">15x</span>
297
378
  <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-yes">22x</span>
380
+ <span class="cline-any cline-yes">22x</span>
381
+ <span class="cline-any cline-yes">22x</span>
298
382
  <span class="cline-any cline-neutral">&nbsp;</span>
299
383
  <span class="cline-any cline-neutral">&nbsp;</span>
300
- <span class="cline-any cline-yes">16x</span>
301
- <span class="cline-any cline-yes">16x</span>
302
- <span class="cline-any cline-yes">16x</span>
384
+ <span class="cline-any cline-neutral">&nbsp;</span>
385
+ <span class="cline-any cline-yes">23x</span>
386
+ <span class="cline-any cline-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-yes">23x</span>
388
+ <span class="cline-any cline-yes">23x</span>
389
+ <span class="cline-any cline-neutral">&nbsp;</span>
390
+ <span class="cline-any cline-yes">23x</span>
391
+ <span class="cline-any cline-yes">23x</span>
303
392
  <span class="cline-any cline-yes">2x</span>
304
393
  <span class="cline-any cline-neutral">&nbsp;</span>
305
- <span class="cline-any cline-yes">14x</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-yes">21x</span>
396
+ <span class="cline-any cline-no">&nbsp;</span>
397
+ <span class="cline-any cline-neutral">&nbsp;</span>
398
+ <span class="cline-any cline-no">&nbsp;</span>
399
+ <span class="cline-any cline-neutral">&nbsp;</span>
400
+ <span class="cline-any cline-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-neutral">&nbsp;</span>
402
+ <span class="cline-any cline-yes">21x</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-yes">21x</span>
406
+ <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-neutral">&nbsp;</span>
408
+ <span class="cline-any cline-neutral">&nbsp;</span>
409
+ <span class="cline-any cline-yes">21x</span>
410
+ <span class="cline-any cline-yes">21x</span>
411
+ <span class="cline-any cline-neutral">&nbsp;</span>
412
+ <span class="cline-any cline-neutral">&nbsp;</span>
413
+ <span class="cline-any cline-yes">21x</span>
414
+ <span class="cline-any cline-yes">1x</span>
415
+ <span class="cline-any cline-neutral">&nbsp;</span>
306
416
  <span class="cline-any cline-neutral">&nbsp;</span>
307
417
  <span class="cline-any cline-neutral">&nbsp;</span>
308
- <span class="cline-any cline-yes">14x</span>
309
418
  <span class="cline-any cline-neutral">&nbsp;</span>
310
419
  <span class="cline-any cline-neutral">&nbsp;</span>
311
- <span class="cline-any cline-yes">14x</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-neutral">&nbsp;</span>
422
+ <span class="cline-any cline-yes">21x</span>
312
423
  <span class="cline-any cline-yes">2x</span>
313
424
  <span class="cline-any cline-neutral">&nbsp;</span>
314
- <span class="cline-any cline-yes">12x</span>
425
+ <span class="cline-any cline-yes">19x</span>
315
426
  <span class="cline-any cline-neutral">&nbsp;</span>
316
427
  <span class="cline-any cline-neutral">&nbsp;</span>
317
428
  <span class="cline-any cline-neutral">&nbsp;</span>
318
- <span class="cline-any cline-yes">14x</span>
429
+ <span class="cline-any cline-yes">21x</span>
319
430
  <span class="cline-any cline-no">&nbsp;</span>
320
431
  <span class="cline-any cline-neutral">&nbsp;</span>
321
432
  <span class="cline-any cline-neutral">&nbsp;</span>
322
- <span class="cline-any cline-yes">14x</span>
323
- <span class="cline-any cline-yes">14x</span>
324
- <span class="cline-any cline-yes">14x</span>
325
- <span class="cline-any cline-yes">14x</span>
326
- <span class="cline-any cline-yes">14x</span>
327
- <span class="cline-any cline-yes">14x</span>
328
- <span class="cline-any cline-yes">12x</span>
329
- <span class="cline-any cline-yes">12x</span>
330
- <span class="cline-any cline-yes">12x</span>
331
- <span class="cline-any cline-yes">12x</span>
433
+ <span class="cline-any cline-yes">21x</span>
434
+ <span class="cline-any cline-yes">21x</span>
435
+ <span class="cline-any cline-yes">21x</span>
436
+ <span class="cline-any cline-yes">21x</span>
437
+ <span class="cline-any cline-yes">21x</span>
438
+ <span class="cline-any cline-yes">21x</span>
439
+ <span class="cline-any cline-yes">19x</span>
440
+ <span class="cline-any cline-yes">19x</span>
441
+ <span class="cline-any cline-yes">19x</span>
442
+ <span class="cline-any cline-yes">19x</span>
332
443
  <span class="cline-any cline-neutral">&nbsp;</span>
333
444
  <span class="cline-any cline-neutral">&nbsp;</span>
334
445
  <span class="cline-any cline-neutral">&nbsp;</span>
335
- <span class="cline-any cline-yes">14x</span>
446
+ <span class="cline-any cline-yes">21x</span>
336
447
  <span class="cline-any cline-no">&nbsp;</span>
337
448
  <span class="cline-any cline-neutral">&nbsp;</span>
338
449
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -341,41 +452,46 @@
341
452
  <span class="cline-any cline-neutral">&nbsp;</span>
342
453
  <span class="cline-any cline-neutral">&nbsp;</span>
343
454
  <span class="cline-any cline-neutral">&nbsp;</span>
344
- <span class="cline-any cline-yes">14x</span>
455
+ <span class="cline-any cline-yes">21x</span>
456
+ <span class="cline-any cline-yes">1x</span>
345
457
  <span class="cline-any cline-neutral">&nbsp;</span>
346
458
  <span class="cline-any cline-neutral">&nbsp;</span>
347
459
  <span class="cline-any cline-neutral">&nbsp;</span>
348
460
  <span class="cline-any cline-neutral">&nbsp;</span>
461
+ <span class="cline-any cline-no">&nbsp;</span>
462
+ <span class="cline-any cline-neutral">&nbsp;</span>
463
+ <span class="cline-any cline-no">&nbsp;</span>
349
464
  <span class="cline-any cline-neutral">&nbsp;</span>
350
465
  <span class="cline-any cline-yes">1x</span>
351
466
  <span class="cline-any cline-neutral">&nbsp;</span>
467
+ <span class="cline-any cline-neutral">&nbsp;</span>
352
468
  <span class="cline-any cline-yes">1x</span>
353
469
  <span class="cline-any cline-yes">1x</span>
354
470
  <span class="cline-any cline-neutral">&nbsp;</span>
355
471
  <span class="cline-any cline-neutral">&nbsp;</span>
356
472
  <span class="cline-any cline-neutral">&nbsp;</span>
357
- <span class="cline-any cline-yes">13x</span>
473
+ <span class="cline-any cline-yes">20x</span>
358
474
  <span class="cline-any cline-no">&nbsp;</span>
359
475
  <span class="cline-any cline-neutral">&nbsp;</span>
360
476
  <span class="cline-any cline-neutral">&nbsp;</span>
361
477
  <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-yes">13x</span>
363
- <span class="cline-any cline-yes">11x</span>
478
+ <span class="cline-any cline-yes">20x</span>
479
+ <span class="cline-any cline-yes">18x</span>
364
480
  <span class="cline-any cline-neutral">&nbsp;</span>
365
481
  <span class="cline-any cline-neutral">&nbsp;</span>
366
482
  <span class="cline-any cline-neutral">&nbsp;</span>
367
- <span class="cline-any cline-yes">13x</span>
483
+ <span class="cline-any cline-yes">20x</span>
368
484
  <span class="cline-any cline-no">&nbsp;</span>
369
485
  <span class="cline-any cline-neutral">&nbsp;</span>
370
486
  <span class="cline-any cline-neutral">&nbsp;</span>
371
487
  <span class="cline-any cline-neutral">&nbsp;</span>
372
- <span class="cline-any cline-yes">13x</span>
488
+ <span class="cline-any cline-yes">20x</span>
373
489
  <span class="cline-any cline-neutral">&nbsp;</span>
374
- <span class="cline-any cline-yes">13x</span>
490
+ <span class="cline-any cline-yes">20x</span>
375
491
  <span class="cline-any cline-no">&nbsp;</span>
376
492
  <span class="cline-any cline-neutral">&nbsp;</span>
377
493
  <span class="cline-any cline-neutral">&nbsp;</span>
378
- <span class="cline-any cline-yes">13x</span>
494
+ <span class="cline-any cline-yes">20x</span>
379
495
  <span class="cline-any cline-neutral">&nbsp;</span>
380
496
  <span class="cline-any cline-neutral">&nbsp;</span>
381
497
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -395,6 +511,38 @@
395
511
  <span class="cline-any cline-neutral">&nbsp;</span>
396
512
  <span class="cline-any cline-neutral">&nbsp;</span>
397
513
  <span class="cline-any cline-neutral">&nbsp;</span>
514
+ <span class="cline-any cline-no">&nbsp;</span>
515
+ <span class="cline-any cline-no">&nbsp;</span>
516
+ <span class="cline-any cline-neutral">&nbsp;</span>
517
+ <span class="cline-any cline-no">&nbsp;</span>
518
+ <span class="cline-any cline-no">&nbsp;</span>
519
+ <span class="cline-any cline-neutral">&nbsp;</span>
520
+ <span class="cline-any cline-neutral">&nbsp;</span>
521
+ <span class="cline-any cline-no">&nbsp;</span>
522
+ <span class="cline-any cline-neutral">&nbsp;</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-neutral">&nbsp;</span>
525
+ <span class="cline-any cline-neutral">&nbsp;</span>
526
+ <span class="cline-any cline-neutral">&nbsp;</span>
527
+ <span class="cline-any cline-neutral">&nbsp;</span>
528
+ <span class="cline-any cline-neutral">&nbsp;</span>
529
+ <span class="cline-any cline-no">&nbsp;</span>
530
+ <span class="cline-any cline-no">&nbsp;</span>
531
+ <span class="cline-any cline-no">&nbsp;</span>
532
+ <span class="cline-any cline-no">&nbsp;</span>
533
+ <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
536
+ <span class="cline-any cline-no">&nbsp;</span>
537
+ <span class="cline-any cline-no">&nbsp;</span>
538
+ <span class="cline-any cline-neutral">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-no">&nbsp;</span>
543
+ <span class="cline-any cline-neutral">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-neutral">&nbsp;</span>
398
546
  <span class="cline-any cline-yes">6x</span>
399
547
  <span class="cline-any cline-yes">6x</span>
400
548
  <span class="cline-any cline-yes">6x</span>
@@ -413,21 +561,21 @@
413
561
  <span class="cline-any cline-neutral">&nbsp;</span>
414
562
  <span class="cline-any cline-neutral">&nbsp;</span>
415
563
  <span class="cline-any cline-neutral">&nbsp;</span>
416
- <span class="cline-any cline-yes">14x</span>
417
- <span class="cline-any cline-yes">14x</span>
564
+ <span class="cline-any cline-yes">21x</span>
565
+ <span class="cline-any cline-yes">21x</span>
418
566
  <span class="cline-any cline-no">&nbsp;</span>
419
567
  <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-yes">14x</span>
421
- <span class="cline-any cline-yes">14x</span>
422
- <span class="cline-any cline-yes">14x</span>
568
+ <span class="cline-any cline-yes">21x</span>
569
+ <span class="cline-any cline-yes">21x</span>
570
+ <span class="cline-any cline-yes">21x</span>
423
571
  <span class="cline-any cline-yes">2x</span>
424
572
  <span class="cline-any cline-yes">2x</span>
425
573
  <span class="cline-any cline-neutral">&nbsp;</span>
426
574
  <span class="cline-any cline-neutral">&nbsp;</span>
427
- <span class="cline-any cline-yes">14x</span>
575
+ <span class="cline-any cline-yes">21x</span>
428
576
  <span class="cline-any cline-neutral">&nbsp;</span>
429
- <span class="cline-any cline-yes">9x</span>
430
- <span class="cline-any cline-yes">9x</span>
577
+ <span class="cline-any cline-yes">16x</span>
578
+ <span class="cline-any cline-yes">16x</span>
431
579
  <span class="cline-any cline-neutral">&nbsp;</span>
432
580
  <span class="cline-any cline-yes">6x</span>
433
581
  <span class="cline-any cline-no">&nbsp;</span>
@@ -436,9 +584,9 @@
436
584
  <span class="cline-any cline-yes">6x</span>
437
585
  <span class="cline-any cline-yes">6x</span>
438
586
  <span class="cline-any cline-neutral">&nbsp;</span>
439
- <span class="cline-any cline-yes">9x</span>
440
- <span class="cline-any cline-yes">9x</span>
441
- <span class="cline-any cline-yes">9x</span>
587
+ <span class="cline-any cline-yes">16x</span>
588
+ <span class="cline-any cline-yes">16x</span>
589
+ <span class="cline-any cline-yes">16x</span>
442
590
  <span class="cline-any cline-yes">6x</span>
443
591
  <span class="cline-any cline-yes">6x</span>
444
592
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -454,16 +602,16 @@
454
602
  <span class="cline-any cline-yes">6x</span>
455
603
  <span class="cline-any cline-neutral">&nbsp;</span>
456
604
  <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-yes">14x</span>
605
+ <span class="cline-any cline-yes">21x</span>
458
606
  <span class="cline-any cline-neutral">&nbsp;</span>
459
607
  <span class="cline-any cline-neutral">&nbsp;</span>
460
608
  <span class="cline-any cline-neutral">&nbsp;</span>
461
609
  <span class="cline-any cline-yes">2x</span>
462
- <span class="cline-any cline-yes">10x</span>
463
- <span class="cline-any cline-yes">10x</span>
464
- <span class="cline-any cline-yes">10x</span>
465
- <span class="cline-any cline-yes">10x</span>
466
- <span class="cline-any cline-yes">8x</span>
610
+ <span class="cline-any cline-yes">17x</span>
611
+ <span class="cline-any cline-yes">17x</span>
612
+ <span class="cline-any cline-yes">17x</span>
613
+ <span class="cline-any cline-yes">17x</span>
614
+ <span class="cline-any cline-yes">15x</span>
467
615
  <span class="cline-any cline-neutral">&nbsp;</span>
468
616
  <span class="cline-any cline-yes">2x</span>
469
617
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -475,6 +623,14 @@ const ScriptRunner = require("../utilities/scriptRunner")
475
623
  const { integrations } = require("../integrations")
476
624
  const { processStringSync } = require("@budibase/string-templates")
477
625
  const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
626
+ const {
627
+ refreshOAuthToken,
628
+ updateUserOAuth,
629
+ } = require("@budibase/backend-core/auth")
630
+ const { user: userCache } = require("@budibase/backend-core/cache")
631
+ const { getGlobalIDFromUserMetadataID } = require("../db/utils")
632
+ const { cloneDeep } = require("lodash/fp")
633
+ &nbsp;
478
634
  const { isSQL } = require("../integrations/utils")
479
635
  const {
480
636
  enrichQueryFields,
@@ -492,29 +648,58 @@ class QueryRunner {
492
648
  this.queryId = input.queryId
493
649
  this.noRecursiveQuery = flags.noRecursiveQuery
494
650
  this.cachedVariables = []
651
+ // Additional context items for enrichment
652
+ this.ctx = input.ctx
495
653
  // allows the response from a query to be stored throughout this
496
654
  // execution so that if it needs to be re-used for another variable
497
655
  // it can be
498
656
  this.queryResponse = {}
499
657
  this.hasRerun = false
658
+ this.hasRefreshedOAuth = false
500
659
  }
501
660
  &nbsp;
502
661
  async execute() {
503
662
  let { datasource, fields, queryVerb, transformer } = this
504
- const Integration = integrations[datasource.source]
663
+ &nbsp;
664
+ let datasourceClone = cloneDeep(datasource)
665
+ let fieldsClone = cloneDeep(fields)
666
+ &nbsp;
667
+ const Integration = integrations[datasourceClone.source]
505
668
  if (!Integration) {
506
669
  throw "Integration type does not exist."
507
670
  }
508
- const integration = new Integration(datasource.config)
671
+ &nbsp;
672
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (datasourceClone.config.authConfigs) {
673
+ <span class="cstat-no" title="statement not covered" > datasourceClone.config.authConfigs =</span>
674
+ datasourceClone.config.authConfigs.map(<span class="fstat-no" title="function not covered" >co</span>nfig =&gt; {
675
+ <span class="cstat-no" title="statement not covered" > return enrichQueryFields(config, this.ctx)</span>
676
+ })
677
+ }
678
+ &nbsp;
679
+ const integration = new Integration(datasourceClone.config)
509
680
  &nbsp;
510
681
  // pre-query, make sure datasource variables are added to parameters
511
682
  const parameters = await this.addDatasourceVariables()
683
+ &nbsp;
684
+ // Enrich the parameters with the addition context items.
685
+ // 'user' is now a reserved variable key in mapping parameters
686
+ const enrichedParameters = enrichQueryFields(parameters, this.ctx)
687
+ const enrichedContext = { ...enrichedParameters, ...this.ctx }
688
+ &nbsp;
689
+ // Parse global headers
690
+ if (datasourceClone.config.defaultHeaders) {
691
+ datasourceClone.config.defaultHeaders = enrichQueryFields(
692
+ datasourceClone.config.defaultHeaders,
693
+ enrichedContext
694
+ )
695
+ }
696
+ &nbsp;
512
697
  let query
513
698
  // handle SQL injections by interpolating the variables
514
- if (isSQL(datasource)) {
515
- query = interpolateSQL(fields, parameters, integration)
699
+ if (isSQL(datasourceClone)) {
700
+ query = interpolateSQL(fieldsClone, enrichedParameters, integration)
516
701
  } else {
517
- query = enrichQueryFields(fields, parameters)
702
+ query = enrichQueryFields(fieldsClone, enrichedContext)
518
703
  }
519
704
  &nbsp;
520
705
  // Add pagination values for REST queries
@@ -538,20 +723,25 @@ class QueryRunner {
538
723
  <span class="missing-if-branch" title="if path not taken" >I</span>if (transformer) {
539
724
  const runner = <span class="cstat-no" title="statement not covered" >new ScriptRunner(transformer, {</span>
540
725
  data: rows,
541
- params: parameters,
726
+ params: enrichedParameters,
542
727
  })
543
728
  <span class="cstat-no" title="statement not covered" > rows = runner.execute()</span>
544
729
  }
545
730
  &nbsp;
546
731
  // if the request fails we retry once, invalidating the cached value
547
- if (
548
- info &amp;&amp;
549
- info.code &gt;= 400 &amp;&amp;
550
- this.cachedVariables.length &gt; 0 &amp;&amp;
551
- !this.hasRerun
552
- ) {
553
- this.hasRerun = true
554
- // invalidate the cache value
732
+ if (info &amp;&amp; info.code &gt;= 400 &amp;&amp; !this.hasRerun) {
733
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (
734
+ this.ctx.user?.provider &amp;&amp;
735
+ <span class="branch-1 cbranch-no" title="branch not covered" > info.code === 401 </span>&amp;&amp;
736
+ <span class="branch-2 cbranch-no" title="branch not covered" > !this.hasRefreshedOAuth</span>
737
+ ) {
738
+ <span class="cstat-no" title="statement not covered" > await this.refreshOAuth2(this.ctx)</span>
739
+ // Attempt to refresh the access token from the provider
740
+ <span class="cstat-no" title="statement not covered" > this.hasRefreshedOAuth = true</span>
741
+ } else {
742
+ this.hasRerun = true
743
+ }
744
+ &nbsp;
555
745
  await threadUtils.invalidateDynamicVariables(this.cachedVariables)
556
746
  return this.execute()
557
747
  }
@@ -596,6 +786,38 @@ class QueryRunner {
596
786
  { noRecursiveQuery: true }
597
787
  ).execute()
598
788
  }
789
+ &nbsp;
790
+ <span class="fstat-no" title="function not covered" > as</span>ync refreshOAuth2(ctx) {
791
+ const { oauth2, providerType, _id } = <span class="cstat-no" title="statement not covered" >ctx.user</span>
792
+ const { configId } = <span class="cstat-no" title="statement not covered" >ctx.auth</span>
793
+ &nbsp;
794
+ <span class="cstat-no" title="statement not covered" > if (!providerType || !oauth2?.refreshToken) {</span>
795
+ <span class="cstat-no" title="statement not covered" > throw new Error("No refresh token found for authenticated user")</span>
796
+ }
797
+ &nbsp;
798
+ const resp = <span class="cstat-no" title="statement not covered" >await refreshOAuthToken(</span>
799
+ oauth2.refreshToken,
800
+ providerType,
801
+ configId
802
+ )
803
+ &nbsp;
804
+ // Refresh session flow. Should be in same location as refreshOAuthToken
805
+ // There are several other properties available in 'resp'
806
+ <span class="cstat-no" title="statement not covered" > if (!resp.err) {</span>
807
+ const globalUserId = <span class="cstat-no" title="statement not covered" >getGlobalIDFromUserMetadataID(_id)</span>
808
+ <span class="cstat-no" title="statement not covered" > await updateUserOAuth(globalUserId, resp)</span>
809
+ <span class="cstat-no" title="statement not covered" > this.ctx.user = await userCache.getUser(globalUserId)</span>
810
+ } else {
811
+ // In this event the user may have oAuth issues that
812
+ // could require re-authenticating with their provider.
813
+ let errorMessage = <span class="cstat-no" title="statement not covered" >resp.err.data ? resp.err.data : resp.err.toString()</span>
814
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
815
+ "OAuth2 access token could not be refreshed: " + errorMessage
816
+ )
817
+ }
818
+ &nbsp;
819
+ <span class="cstat-no" title="statement not covered" > return resp</span>
820
+ }
599
821
  &nbsp;
600
822
  async getDynamicVariable(variable) {
601
823
  let { parameters } = this
@@ -679,7 +901,7 @@ module.exports = (input, callback) =&gt; {
679
901
  <div class='footer quiet pad2 space-top1 center small'>
680
902
  Code coverage generated by
681
903
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
682
- at Fri Jul 08 2022 12:33:10 GMT+0000 (Coordinated Universal Time)
904
+ at Mon Jul 11 2022 11:03:31 GMT+0000 (Coordinated Universal Time)
683
905
  </div>
684
906
  <script src="../prettify.js"></script>
685
907
  <script>
@@ -200,18 +200,18 @@
200
200
  <span class="cline-any cline-neutral">&nbsp;</span>
201
201
  <span class="cline-any cline-neutral">&nbsp;</span>
202
202
  <span class="cline-any cline-yes">44x</span>
203
- <span class="cline-any cline-yes">14x</span>
203
+ <span class="cline-any cline-yes">21x</span>
204
204
  <span class="cline-any cline-no">&nbsp;</span>
205
205
  <span class="cline-any cline-no">&nbsp;</span>
206
206
  <span class="cline-any cline-neutral">&nbsp;</span>
207
207
  <span class="cline-any cline-no">&nbsp;</span>
208
208
  <span class="cline-any cline-neutral">&nbsp;</span>
209
209
  <span class="cline-any cline-neutral">&nbsp;</span>
210
- <span class="cline-any cline-yes">14x</span>
210
+ <span class="cline-any cline-yes">21x</span>
211
211
  <span class="cline-any cline-neutral">&nbsp;</span>
212
212
  <span class="cline-any cline-neutral">&nbsp;</span>
213
213
  <span class="cline-any cline-yes">44x</span>
214
- <span class="cline-any cline-yes">14x</span>
214
+ <span class="cline-any cline-yes">21x</span>
215
215
  <span class="cline-any cline-neutral">&nbsp;</span>
216
216
  <span class="cline-any cline-neutral">&nbsp;</span>
217
217
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -304,7 +304,7 @@ exports.hasExtraData = response =&gt; {
304
304
  <div class='footer quiet pad2 space-top1 center small'>
305
305
  Code coverage generated by
306
306
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
307
- at Fri Jul 08 2022 12:33:10 GMT+0000 (Coordinated Universal Time)
307
+ at Mon Jul 11 2022 11:03:31 GMT+0000 (Coordinated Universal Time)
308
308
  </div>
309
309
  <script src="../prettify.js"></script>
310
310
  <script>
@@ -79,7 +79,7 @@ module.exports.budibaseTempDir = budibaseTempDir
79
79
  <div class='footer quiet pad2 space-top1 center small'>
80
80
  Code coverage generated by
81
81
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
82
- at Fri Jul 08 2022 12:33:10 GMT+0000 (Coordinated Universal Time)
82
+ at Mon Jul 11 2022 11:03:31 GMT+0000 (Coordinated Universal Time)
83
83
  </div>
84
84
  <script src="../prettify.js"></script>
85
85
  <script>
@@ -136,7 +136,7 @@ exports.resolve = function (...args) {
136
136
  <div class='footer quiet pad2 space-top1 center small'>
137
137
  Code coverage generated by
138
138
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
139
- at Fri Jul 08 2022 12:33:10 GMT+0000 (Coordinated Universal Time)
139
+ at Mon Jul 11 2022 11:03:31 GMT+0000 (Coordinated Universal Time)
140
140
  </div>
141
141
  <script src="../prettify.js"></script>
142
142
  <script>