@budibase/server 0.9.185-alpha.1 → 0.9.185-alpha.13

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 (234) hide show
  1. package/Dockerfile +1 -1
  2. package/builder/assets/bb-space-man.5be51a45.svg +290 -0
  3. package/builder/assets/index.4a7c5636.css +1 -0
  4. package/builder/assets/index.dc495306.js +1317 -0
  5. package/builder/assets/vendor.470042a4.js +152 -0
  6. package/builder/assets/vendor.5e1fe644.css +1 -0
  7. package/builder/index.html +4 -4
  8. package/coverage/clover.xml +689 -598
  9. package/coverage/coverage-final.json +89 -87
  10. package/coverage/lcov-report/api/controllers/analytics.js.html +2 -2
  11. package/coverage/lcov-report/api/controllers/apikeys.js.html +2 -2
  12. package/coverage/lcov-report/api/controllers/application.js.html +43 -13
  13. package/coverage/lcov-report/api/controllers/auth.js.html +7 -7
  14. package/coverage/lcov-report/api/controllers/automation.js.html +3 -3
  15. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  18. package/coverage/lcov-report/api/controllers/datasource.js.html +129 -21
  19. package/coverage/lcov-report/api/controllers/dev.js.html +16 -7
  20. package/coverage/lcov-report/api/controllers/hosting.js.html +10 -10
  21. package/coverage/lcov-report/api/controllers/index.html +83 -83
  22. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/layout.js.html +3 -3
  24. package/coverage/lcov-report/api/controllers/metadata.js.html +3 -3
  25. package/coverage/lcov-report/api/controllers/permission.js.html +3 -3
  26. package/coverage/lcov-report/api/controllers/query.js.html +48 -210
  27. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  28. package/coverage/lcov-report/api/controllers/routing.js.html +3 -3
  29. package/coverage/lcov-report/api/controllers/row/external.js.html +2 -2
  30. package/coverage/lcov-report/api/controllers/row/index.html +10 -10
  31. package/coverage/lcov-report/api/controllers/row/index.js.html +2 -2
  32. package/coverage/lcov-report/api/controllers/row/internal.js.html +9 -9
  33. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +2 -2
  34. package/coverage/lcov-report/api/controllers/row/utils.js.html +2 -2
  35. package/coverage/lcov-report/api/controllers/screen.js.html +2 -2
  36. package/coverage/lcov-report/api/controllers/script.js.html +3 -3
  37. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.html +11 -11
  39. package/coverage/lcov-report/api/controllers/table/index.js.html +3 -3
  40. package/coverage/lcov-report/api/controllers/table/internal.js.html +2 -2
  41. package/coverage/lcov-report/api/controllers/table/utils.js.html +8 -8
  42. package/coverage/lcov-report/api/controllers/templates.js.html +4 -4
  43. package/coverage/lcov-report/api/controllers/user.js.html +33 -18
  44. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/index.html +9 -9
  46. package/coverage/lcov-report/api/controllers/view/index.js.html +5 -5
  47. package/coverage/lcov-report/api/controllers/view/utils.js.html +11 -11
  48. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -3
  49. package/coverage/lcov-report/api/controllers/webhook.js.html +4 -4
  50. package/coverage/lcov-report/api/index.html +1 -1
  51. package/coverage/lcov-report/api/index.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/dev.js.html +2 -2
  63. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/index.html +4 -4
  65. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/query.js.html +5 -2
  71. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/static.js.html +2 -2
  77. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  82. package/coverage/lcov-report/automations/actions.js.html +2 -2
  83. package/coverage/lcov-report/automations/automationUtils.js.html +3 -3
  84. package/coverage/lcov-report/automations/bullboard.js.html +71 -20
  85. package/coverage/lcov-report/automations/index.html +33 -48
  86. package/coverage/lcov-report/automations/index.js.html +2 -2
  87. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/discord.js.html +3 -3
  92. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -3
  94. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/index.html +14 -14
  96. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +3 -3
  98. package/coverage/lcov-report/automations/steps/queryRows.js.html +3 -3
  99. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/utils.js.html +7 -7
  104. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  106. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  107. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  109. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  110. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  111. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  112. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggers.js.html +22 -10
  114. package/coverage/lcov-report/automations/utils.js.html +42 -12
  115. package/coverage/lcov-report/constants/index.html +5 -5
  116. package/coverage/lcov-report/constants/index.js.html +25 -4
  117. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  118. package/coverage/lcov-report/constants/screens.js.html +1 -1
  119. package/coverage/lcov-report/db/client.js.html +2 -2
  120. package/coverage/lcov-report/db/inMemoryView.js.html +2 -2
  121. package/coverage/lcov-report/db/index.html +2 -2
  122. package/coverage/lcov-report/db/index.js.html +1 -1
  123. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +6 -6
  124. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  125. package/coverage/lcov-report/db/linkedRows/index.js.html +5 -5
  126. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +6 -6
  127. package/coverage/lcov-report/db/newid.js.html +1 -1
  128. package/coverage/lcov-report/db/utils.js.html +1 -1
  129. package/coverage/lcov-report/events/AutomationEmitter.js.html +6 -6
  130. package/coverage/lcov-report/events/index.html +6 -6
  131. package/coverage/lcov-report/events/index.js.html +1 -1
  132. package/coverage/lcov-report/events/utils.js.html +5 -5
  133. package/coverage/lcov-report/index.html +83 -68
  134. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  135. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  136. package/coverage/lcov-report/middleware/appInfo.js.html +2 -2
  137. package/coverage/lcov-report/middleware/authorized.js.html +4 -4
  138. package/coverage/lcov-report/middleware/builder.js.html +16 -7
  139. package/coverage/lcov-report/middleware/currentapp.js.html +6 -6
  140. package/coverage/lcov-report/middleware/index.html +21 -21
  141. package/coverage/lcov-report/middleware/joi-validator.js.html +2 -2
  142. package/coverage/lcov-report/middleware/resourceId.js.html +18 -18
  143. package/coverage/lcov-report/middleware/selfhost.js.html +2 -2
  144. package/coverage/lcov-report/middleware/usageQuota.js.html +4 -4
  145. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  146. package/coverage/lcov-report/{automations/thread.js.html → threads/automation.js.html} +83 -32
  147. package/coverage/lcov-report/threads/index.html +141 -0
  148. package/coverage/lcov-report/threads/index.js.html +260 -0
  149. package/coverage/lcov-report/threads/query.js.html +269 -0
  150. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  151. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  152. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  153. package/coverage/lcov-report/utilities/csvParser.js.html +2 -2
  154. package/coverage/lcov-report/utilities/global.js.html +2 -2
  155. package/coverage/lcov-report/utilities/index.html +21 -21
  156. package/coverage/lcov-report/utilities/index.js.html +12 -9
  157. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +30 -9
  158. package/coverage/lcov-report/utilities/queue/index.html +14 -14
  159. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  160. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  161. package/coverage/lcov-report/utilities/rowProcessor/index.html +4 -4
  162. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +2 -2
  163. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +3 -3
  164. package/coverage/lcov-report/utilities/scriptRunner.js.html +16 -7
  165. package/coverage/lcov-report/utilities/security.js.html +3 -3
  166. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  167. package/coverage/lcov-report/utilities/users.js.html +1 -1
  168. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  169. package/coverage/lcov.info +1136 -972
  170. package/dist/api/controllers/application.js +11 -1
  171. package/dist/api/controllers/datasource.js +31 -7
  172. package/dist/api/controllers/deploy/index.js +2 -0
  173. package/dist/api/controllers/dev.js +4 -1
  174. package/dist/api/controllers/query.js +27 -57
  175. package/dist/api/controllers/user.js +10 -6
  176. package/dist/api/routes/query.js +1 -1
  177. package/dist/app.js +2 -11
  178. package/dist/automations/bullboard.js +37 -10
  179. package/dist/automations/triggers.js +7 -3
  180. package/dist/automations/utils.js +11 -2
  181. package/dist/constants/index.js +6 -0
  182. package/dist/integrations/base/IntegrationBase.js +2 -0
  183. package/dist/integrations/base/sql.js +36 -8
  184. package/dist/integrations/mysql.js +3 -1
  185. package/dist/integrations/utils.js +7 -1
  186. package/dist/middleware/builder.js +4 -1
  187. package/dist/package.json +7 -6
  188. package/dist/{automations/thread.js → threads/automation.js} +23 -7
  189. package/dist/threads/index.js +58 -0
  190. package/dist/threads/query.js +61 -0
  191. package/dist/tsconfig.tsbuildinfo +1 -1
  192. package/dist/utilities/index.js +1 -0
  193. package/dist/utilities/queue/inMemoryQueue.js +8 -0
  194. package/dist/utilities/scriptRunner.js +4 -1
  195. package/package.json +8 -7
  196. package/scripts/likeCypress.ts +33 -0
  197. package/src/api/controllers/application.js +11 -1
  198. package/src/api/controllers/datasource.js +45 -9
  199. package/src/api/controllers/deploy/index.js +2 -0
  200. package/src/api/controllers/dev.js +4 -1
  201. package/src/api/controllers/query.js +26 -80
  202. package/src/api/controllers/user.js +15 -10
  203. package/src/api/routes/query.js +1 -0
  204. package/src/app.ts +2 -10
  205. package/src/automations/bullboard.js +28 -11
  206. package/src/automations/tests/automation.spec.js +3 -4
  207. package/src/automations/triggers.js +7 -3
  208. package/src/automations/utils.js +12 -2
  209. package/src/constants/index.js +7 -0
  210. package/src/integrations/airtable.ts +2 -1
  211. package/src/integrations/arangodb.ts +2 -1
  212. package/src/integrations/base/IntegrationBase.ts +6 -0
  213. package/src/integrations/base/datasourcePlus.ts +2 -1
  214. package/src/integrations/base/sql.ts +38 -9
  215. package/src/integrations/couchdb.ts +2 -1
  216. package/src/integrations/dynamodb.ts +2 -1
  217. package/src/integrations/elasticsearch.ts +2 -1
  218. package/src/integrations/mongodb.ts +2 -1
  219. package/src/integrations/mysql.ts +1 -1
  220. package/src/integrations/rest.ts +2 -1
  221. package/src/integrations/s3.ts +2 -1
  222. package/src/integrations/utils.ts +6 -1
  223. package/src/middleware/builder.js +4 -1
  224. package/src/{automations/thread.js → threads/automation.js} +24 -7
  225. package/src/threads/index.js +60 -0
  226. package/src/threads/query.js +63 -0
  227. package/src/utilities/index.js +1 -0
  228. package/src/utilities/queue/inMemoryQueue.js +7 -0
  229. package/src/utilities/scriptRunner.js +4 -1
  230. package/tsconfig.json +1 -1
  231. package/builder/assets/index.4feb6e69.js +0 -201
  232. package/builder/assets/index.a79ec0ef.css +0 -29
  233. package/builder/assets/vendor.278a305c.js +0 -9
  234. package/builder/assets/vendor.d75d5eb7.css +0 -1
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">27.87% </span>
26
+ <span class="strong">28.12% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>17/61</span>
28
+ <span class='fraction'>18/64</span>
29
29
  </div>
30
30
 
31
31
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">28.33% </span>
47
+ <span class="strong">28.57% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>17/60</span>
49
+ <span class='fraction'>18/63</span>
50
50
  </div>
51
51
 
52
52
 
@@ -176,7 +176,11 @@
176
176
  <a name='L117'></a><a href='#L117'>117</a>
177
177
  <a name='L118'></a><a href='#L118'>118</a>
178
178
  <a name='L119'></a><a href='#L119'>119</a>
179
- <a name='L120'></a><a href='#L120'>120</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
179
+ <a name='L120'></a><a href='#L120'>120</a>
180
+ <a name='L121'></a><a href='#L121'>121</a>
181
+ <a name='L122'></a><a href='#L122'>122</a>
182
+ <a name='L123'></a><a href='#L123'>123</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
183
+ <span class="cline-any cline-yes">23x</span>
180
184
  <span class="cline-any cline-yes">23x</span>
181
185
  <span class="cline-any cline-yes">23x</span>
182
186
  <span class="cline-any cline-yes">23x</span>
@@ -203,6 +207,7 @@
203
207
  <span class="cline-any cline-neutral">&nbsp;</span>
204
208
  <span class="cline-any cline-no">&nbsp;</span>
205
209
  <span class="cline-any cline-no">&nbsp;</span>
210
+ <span class="cline-any cline-no">&nbsp;</span>
206
211
  <span class="cline-any cline-neutral">&nbsp;</span>
207
212
  <span class="cline-any cline-no">&nbsp;</span>
208
213
  <span class="cline-any cline-no">&nbsp;</span>
@@ -285,6 +290,7 @@
285
290
  <span class="cline-any cline-no">&nbsp;</span>
286
291
  <span class="cline-any cline-no">&nbsp;</span>
287
292
  <span class="cline-any cline-no">&nbsp;</span>
293
+ <span class="cline-any cline-no">&nbsp;</span>
288
294
  <span class="cline-any cline-neutral">&nbsp;</span>
289
295
  <span class="cline-any cline-neutral">&nbsp;</span>
290
296
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -303,6 +309,7 @@ const { request } = require("../../utilities/workerRequests")
303
309
  const { clearLock } = require("../../utilities/redis")
304
310
  const { Replication } = require("@budibase/auth").db
305
311
  const { DocumentTypes } = require("../../db/utils")
312
+ const { app: appCache } = require("@budibase/auth/cache")
306
313
  &nbsp;
307
314
  async function <span class="fstat-no" title="function not covered" >redirect(</span>ctx, method, path = <span class="branch-0 cbranch-no" title="branch not covered" >"global")</span> {
308
315
  const { devPath } = <span class="cstat-no" title="statement not covered" >ctx.params</span>
@@ -321,7 +328,8 @@ async function <span class="fstat-no" title="function not covered" >redirect(</s
321
328
  )
322
329
  )
323
330
  <span class="cstat-no" title="statement not covered" > if (response.status !== 200) {</span>
324
- <span class="cstat-no" title="statement not covered" > ctx.throw(response.status, response.statusText)</span>
331
+ const err = <span class="cstat-no" title="statement not covered" >await response.text()</span>
332
+ <span class="cstat-no" title="statement not covered" > ctx.throw(400, err)</span>
325
333
  }
326
334
  const cookie = <span class="cstat-no" title="statement not covered" >response.headers.get("set-cookie")</span>
327
335
  <span class="cstat-no" title="statement not covered" > if (cookie) {</span>
@@ -403,6 +411,7 @@ exports.revert = <span class="fstat-no" title="function not covered" >as</span>y
403
411
  <span class="cstat-no" title="statement not covered" > appDoc.appId = appId</span>
404
412
  <span class="cstat-no" title="statement not covered" > appDoc.instance._id = appId</span>
405
413
  <span class="cstat-no" title="statement not covered" > await db.put(appDoc)</span>
414
+ <span class="cstat-no" title="statement not covered" > await appCache.invalidateAppMetadata(appId)</span>
406
415
  <span class="cstat-no" title="statement not covered" > ctx.body = {</span>
407
416
  message: "Reverted changes successfully.",
408
417
  }
@@ -421,7 +430,7 @@ exports.getBudibaseVersion = <span class="fstat-no" title="function not covered"
421
430
  <div class='footer quiet pad2 space-top1 center small'>
422
431
  Code coverage generated by
423
432
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
424
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
433
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
425
434
  </div>
426
435
  </div>
427
436
  <script src="../../prettify.js"></script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">86.67% </span>
26
+ <span class="strong">93.33% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>13/15</span>
28
+ <span class='fraction'>14/15</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">50% </span>
33
+ <span class="strong">75% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>2/4</span>
35
+ <span class='fraction'>3/4</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">86.67% </span>
47
+ <span class="strong">93.33% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>13/15</span>
49
+ <span class='fraction'>14/15</span>
50
50
  </div>
51
51
 
52
52
 
@@ -91,7 +91,7 @@
91
91
  <span class="cline-any cline-yes">1x</span>
92
92
  <span class="cline-any cline-yes">1x</span>
93
93
  <span class="cline-any cline-yes">1x</span>
94
- <span class="cline-any cline-no">&nbsp;</span>
94
+ <span class="cline-any cline-yes">1x</span>
95
95
  <span class="cline-any cline-neutral">&nbsp;</span>
96
96
  <span class="cline-any cline-yes">1x</span>
97
97
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -112,8 +112,8 @@ exports.fetchUrls = async ctx =&gt; {
112
112
  const db = new CouchDB(appId)
113
113
  const settings = await getScopedConfig(db, { type: Configs.SETTINGS })
114
114
  let appUrl = "http://localhost:10000/app"
115
- <span class="missing-if-branch" title="if path not taken" >I</span>if (settings &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >settings["platformUrl"])</span> {
116
- <span class="cstat-no" title="statement not covered" > appUrl = checkSlashesInUrl(`${settings["platformUrl"]}/app`)</span>
115
+ if (settings &amp;&amp; settings["platformUrl"]) {
116
+ appUrl = checkSlashesInUrl(`${settings["platformUrl"]}/app`)
117
117
  }
118
118
  ctx.body = {
119
119
  app: appUrl,
@@ -130,7 +130,7 @@ exports.getDeployedApps = <span class="fstat-no" title="function not covered" >a
130
130
  <div class='footer quiet pad2 space-top1 center small'>
131
131
  Code coverage generated by
132
132
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
133
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
133
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
134
134
  </div>
135
135
  </div>
136
136
  <script src="../../prettify.js"></script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">72.39% </span>
26
+ <span class="strong">71.85% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>818/1130</span>
28
+ <span class='fraction'>812/1130</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">48.5% </span>
33
+ <span class="strong">46.59% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>178/367</span>
35
+ <span class='fraction'>171/367</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">72.9% </span>
40
+ <span class="strong">71.89% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>113/155</span>
42
+ <span class='fraction'>110/153</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">72.6% </span>
47
+ <span class="strong">72.04% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>808/1113</span>
49
+ <span class='fraction'>804/1116</span>
50
50
  </div>
51
51
 
52
52
 
@@ -79,7 +79,7 @@
79
79
  </td>
80
80
  <td data-value="46.15" class="pct low">46.15%</td>
81
81
  <td data-value="13" class="abs low">6/13</td>
82
- <td data-value="30.77" class="pct low">30.77%</td>
82
+ <td data-value="30.76" class="pct low">30.76%</td>
83
83
  <td data-value="13" class="abs low">4/13</td>
84
84
  <td data-value="50" class="pct medium">50%</td>
85
85
  <td data-value="2" class="abs medium">1/2</td>
@@ -104,31 +104,31 @@
104
104
 
105
105
  <tr>
106
106
  <td class="file medium" data-value="application.js"><a href="application.js.html">application.js</a></td>
107
- <td data-value="78.09" class="pic medium">
107
+ <td data-value="78.49" class="pic medium">
108
108
  <div class="chart"><div class="cover-fill" style="width: 78%"></div><div class="cover-empty" style="width: 22%"></div></div>
109
109
  </td>
110
- <td data-value="78.09" class="pct medium">78.09%</td>
111
- <td data-value="178" class="abs medium">139/178</td>
112
- <td data-value="57.35" class="pct medium">57.35%</td>
113
- <td data-value="68" class="abs medium">39/68</td>
110
+ <td data-value="78.49" class="pct medium">78.49%</td>
111
+ <td data-value="186" class="abs medium">146/186</td>
112
+ <td data-value="56.94" class="pct medium">56.94%</td>
113
+ <td data-value="72" class="abs medium">41/72</td>
114
114
  <td data-value="85" class="pct high">85%</td>
115
115
  <td data-value="20" class="abs high">17/20</td>
116
- <td data-value="78.98" class="pct medium">78.98%</td>
117
- <td data-value="176" class="abs medium">139/176</td>
116
+ <td data-value="79.34" class="pct medium">79.34%</td>
117
+ <td data-value="184" class="abs medium">146/184</td>
118
118
  </tr>
119
119
 
120
120
  <tr>
121
121
  <td class="file high" data-value="auth.js"><a href="auth.js.html">auth.js</a></td>
122
- <td data-value="85.19" class="pic high">
122
+ <td data-value="85.18" class="pic high">
123
123
  <div class="chart"><div class="cover-fill" style="width: 85%"></div><div class="cover-empty" style="width: 15%"></div></div>
124
124
  </td>
125
- <td data-value="85.19" class="pct high">85.19%</td>
125
+ <td data-value="85.18" class="pct high">85.18%</td>
126
126
  <td data-value="27" class="abs high">23/27</td>
127
127
  <td data-value="50" class="pct medium">50%</td>
128
128
  <td data-value="8" class="abs medium">4/8</td>
129
129
  <td data-value="100" class="pct high">100%</td>
130
130
  <td data-value="1" class="abs high">1/1</td>
131
- <td data-value="85.19" class="pct high">85.19%</td>
131
+ <td data-value="85.18" class="pct high">85.18%</td>
132
132
  <td data-value="27" class="abs high">23/27</td>
133
133
  </tr>
134
134
 
@@ -139,9 +139,9 @@
139
139
  </td>
140
140
  <td data-value="89.47" class="pct high">89.47%</td>
141
141
  <td data-value="95" class="abs high">85/95</td>
142
- <td data-value="71.88" class="pct medium">71.88%</td>
142
+ <td data-value="71.87" class="pct medium">71.87%</td>
143
143
  <td data-value="32" class="abs medium">23/32</td>
144
- <td data-value="92.86" class="pct high">92.86%</td>
144
+ <td data-value="92.85" class="pct high">92.85%</td>
145
145
  <td data-value="14" class="abs high">13/14</td>
146
146
  <td data-value="89.36" class="pct high">89.36%</td>
147
147
  <td data-value="94" class="abs high">84/94</td>
@@ -193,48 +193,48 @@
193
193
  </tr>
194
194
 
195
195
  <tr>
196
- <td class="file medium" data-value="datasource.js"><a href="datasource.js.html">datasource.js</a></td>
197
- <td data-value="50" class="pic medium">
198
- <div class="chart"><div class="cover-fill" style="width: 50%"></div><div class="cover-empty" style="width: 50%"></div></div>
196
+ <td class="file low" data-value="datasource.js"><a href="datasource.js.html">datasource.js</a></td>
197
+ <td data-value="44.44" class="pic low">
198
+ <div class="chart"><div class="cover-fill" style="width: 44%"></div><div class="cover-empty" style="width: 56%"></div></div>
199
199
  </td>
200
+ <td data-value="44.44" class="pct low">44.44%</td>
201
+ <td data-value="108" class="abs low">48/108</td>
202
+ <td data-value="19.44" class="pct low">19.44%</td>
203
+ <td data-value="36" class="abs low">7/36</td>
200
204
  <td data-value="50" class="pct medium">50%</td>
201
- <td data-value="96" class="abs medium">48/96</td>
202
- <td data-value="25" class="pct low">25%</td>
203
- <td data-value="28" class="abs low">7/28</td>
204
- <td data-value="57.14" class="pct medium">57.14%</td>
205
- <td data-value="14" class="abs medium">8/14</td>
206
- <td data-value="48.94" class="pct low">48.94%</td>
207
- <td data-value="94" class="abs low">46/94</td>
205
+ <td data-value="16" class="abs medium">8/16</td>
206
+ <td data-value="43.92" class="pct low">43.92%</td>
207
+ <td data-value="107" class="abs low">47/107</td>
208
208
  </tr>
209
209
 
210
210
  <tr>
211
211
  <td class="file low" data-value="dev.js"><a href="dev.js.html">dev.js</a></td>
212
- <td data-value="27.87" class="pic low">
213
- <div class="chart"><div class="cover-fill" style="width: 27%"></div><div class="cover-empty" style="width: 73%"></div></div>
212
+ <td data-value="28.12" class="pic low">
213
+ <div class="chart"><div class="cover-fill" style="width: 28%"></div><div class="cover-empty" style="width: 72%"></div></div>
214
214
  </td>
215
- <td data-value="27.87" class="pct low">27.87%</td>
216
- <td data-value="61" class="abs low">17/61</td>
215
+ <td data-value="28.12" class="pct low">28.12%</td>
216
+ <td data-value="64" class="abs low">18/64</td>
217
217
  <td data-value="0" class="pct low">0%</td>
218
218
  <td data-value="15" class="abs low">0/15</td>
219
219
  <td data-value="30" class="pct low">30%</td>
220
220
  <td data-value="10" class="abs low">3/10</td>
221
- <td data-value="28.33" class="pct low">28.33%</td>
222
- <td data-value="60" class="abs low">17/60</td>
221
+ <td data-value="28.57" class="pct low">28.57%</td>
222
+ <td data-value="63" class="abs low">18/63</td>
223
223
  </tr>
224
224
 
225
225
  <tr>
226
226
  <td class="file high" data-value="hosting.js"><a href="hosting.js.html">hosting.js</a></td>
227
- <td data-value="86.67" class="pic high">
228
- <div class="chart"><div class="cover-fill" style="width: 86%"></div><div class="cover-empty" style="width: 14%"></div></div>
227
+ <td data-value="93.33" class="pic high">
228
+ <div class="chart"><div class="cover-fill" style="width: 93%"></div><div class="cover-empty" style="width: 7%"></div></div>
229
229
  </td>
230
- <td data-value="86.67" class="pct high">86.67%</td>
231
- <td data-value="15" class="abs high">13/15</td>
232
- <td data-value="50" class="pct medium">50%</td>
233
- <td data-value="4" class="abs medium">2/4</td>
230
+ <td data-value="93.33" class="pct high">93.33%</td>
231
+ <td data-value="15" class="abs high">14/15</td>
232
+ <td data-value="75" class="pct medium">75%</td>
233
+ <td data-value="4" class="abs medium">3/4</td>
234
234
  <td data-value="50" class="pct medium">50%</td>
235
235
  <td data-value="2" class="abs medium">1/2</td>
236
- <td data-value="86.67" class="pct high">86.67%</td>
237
- <td data-value="15" class="abs high">13/15</td>
236
+ <td data-value="93.33" class="pct high">93.33%</td>
237
+ <td data-value="15" class="abs high">14/15</td>
238
238
  </tr>
239
239
 
240
240
  <tr>
@@ -254,16 +254,16 @@
254
254
 
255
255
  <tr>
256
256
  <td class="file high" data-value="layout.js"><a href="layout.js.html">layout.js</a></td>
257
- <td data-value="85.19" class="pic high">
257
+ <td data-value="85.18" class="pic high">
258
258
  <div class="chart"><div class="cover-fill" style="width: 85%"></div><div class="cover-empty" style="width: 15%"></div></div>
259
259
  </td>
260
- <td data-value="85.19" class="pct high">85.19%</td>
260
+ <td data-value="85.18" class="pct high">85.18%</td>
261
261
  <td data-value="27" class="abs high">23/27</td>
262
262
  <td data-value="62.5" class="pct medium">62.5%</td>
263
263
  <td data-value="8" class="abs medium">5/8</td>
264
264
  <td data-value="100" class="pct high">100%</td>
265
265
  <td data-value="3" class="abs high">3/3</td>
266
- <td data-value="85.19" class="pct high">85.19%</td>
266
+ <td data-value="85.18" class="pct high">85.18%</td>
267
267
  <td data-value="27" class="abs high">23/27</td>
268
268
  </tr>
269
269
 
@@ -289,56 +289,56 @@
289
289
  </td>
290
290
  <td data-value="98.78" class="pct high">98.78%</td>
291
291
  <td data-value="82" class="abs high">81/82</td>
292
- <td data-value="90.91" class="pct high">90.91%</td>
292
+ <td data-value="90.9" class="pct high">90.9%</td>
293
293
  <td data-value="33" class="abs high">30/33</td>
294
294
  <td data-value="100" class="pct high">100%</td>
295
295
  <td data-value="13" class="abs high">13/13</td>
296
- <td data-value="98.72" class="pct high">98.72%</td>
296
+ <td data-value="98.71" class="pct high">98.71%</td>
297
297
  <td data-value="78" class="abs high">77/78</td>
298
298
  </tr>
299
299
 
300
300
  <tr>
301
- <td class="file medium" data-value="query.js"><a href="query.js.html">query.js</a></td>
302
- <td data-value="78.57" class="pic medium">
303
- <div class="chart"><div class="cover-fill" style="width: 78%"></div><div class="cover-empty" style="width: 22%"></div></div>
301
+ <td class="file high" data-value="query.js"><a href="query.js.html">query.js</a></td>
302
+ <td data-value="84.93" class="pic high">
303
+ <div class="chart"><div class="cover-fill" style="width: 84%"></div><div class="cover-empty" style="width: 16%"></div></div>
304
304
  </td>
305
- <td data-value="78.57" class="pct medium">78.57%</td>
306
- <td data-value="98" class="abs medium">77/98</td>
307
- <td data-value="53.66" class="pct medium">53.66%</td>
308
- <td data-value="41" class="abs medium">22/41</td>
309
- <td data-value="92.31" class="pct high">92.31%</td>
310
- <td data-value="13" class="abs high">12/13</td>
311
- <td data-value="78.95" class="pct medium">78.95%</td>
312
- <td data-value="95" class="abs medium">75/95</td>
305
+ <td data-value="84.93" class="pct high">84.93%</td>
306
+ <td data-value="73" class="abs high">62/73</td>
307
+ <td data-value="48" class="pct low">48%</td>
308
+ <td data-value="25" class="abs low">12/25</td>
309
+ <td data-value="100" class="pct high">100%</td>
310
+ <td data-value="9" class="abs high">9/9</td>
311
+ <td data-value="84.72" class="pct high">84.72%</td>
312
+ <td data-value="72" class="abs high">61/72</td>
313
313
  </tr>
314
314
 
315
315
  <tr>
316
316
  <td class="file high" data-value="role.js"><a href="role.js.html">role.js</a></td>
317
- <td data-value="87.04" class="pic high">
317
+ <td data-value="87.03" class="pic high">
318
318
  <div class="chart"><div class="cover-fill" style="width: 87%"></div><div class="cover-empty" style="width: 13%"></div></div>
319
319
  </td>
320
- <td data-value="87.04" class="pct high">87.04%</td>
320
+ <td data-value="87.03" class="pct high">87.03%</td>
321
321
  <td data-value="54" class="abs high">47/54</td>
322
- <td data-value="63.64" class="pct medium">63.64%</td>
322
+ <td data-value="63.63" class="pct medium">63.63%</td>
323
323
  <td data-value="22" class="abs medium">14/22</td>
324
- <td data-value="71.43" class="pct medium">71.43%</td>
324
+ <td data-value="71.42" class="pct medium">71.42%</td>
325
325
  <td data-value="7" class="abs medium">5/7</td>
326
- <td data-value="88.68" class="pct high">88.68%</td>
326
+ <td data-value="88.67" class="pct high">88.67%</td>
327
327
  <td data-value="53" class="abs high">47/53</td>
328
328
  </tr>
329
329
 
330
330
  <tr>
331
331
  <td class="file high" data-value="routing.js"><a href="routing.js.html">routing.js</a></td>
332
- <td data-value="89.8" class="pic high">
332
+ <td data-value="89.79" class="pic high">
333
333
  <div class="chart"><div class="cover-fill" style="width: 89%"></div><div class="cover-empty" style="width: 11%"></div></div>
334
334
  </td>
335
- <td data-value="89.8" class="pct high">89.8%</td>
335
+ <td data-value="89.79" class="pct high">89.79%</td>
336
336
  <td data-value="49" class="abs high">44/49</td>
337
337
  <td data-value="78.57" class="pct medium">78.57%</td>
338
338
  <td data-value="14" class="abs medium">11/14</td>
339
339
  <td data-value="100" class="pct high">100%</td>
340
340
  <td data-value="7" class="abs high">7/7</td>
341
- <td data-value="89.8" class="pct high">89.8%</td>
341
+ <td data-value="89.79" class="pct high">89.79%</td>
342
342
  <td data-value="49" class="abs high">44/49</td>
343
343
  </tr>
344
344
 
@@ -359,16 +359,16 @@
359
359
 
360
360
  <tr>
361
361
  <td class="file low" data-value="script.js"><a href="script.js.html">script.js</a></td>
362
- <td data-value="42.86" class="pic low">
362
+ <td data-value="42.85" class="pic low">
363
363
  <div class="chart"><div class="cover-fill" style="width: 42%"></div><div class="cover-empty" style="width: 58%"></div></div>
364
364
  </td>
365
- <td data-value="42.86" class="pct low">42.86%</td>
365
+ <td data-value="42.85" class="pct low">42.85%</td>
366
366
  <td data-value="7" class="abs low">3/7</td>
367
367
  <td data-value="100" class="pct high">100%</td>
368
368
  <td data-value="0" class="abs high">0/0</td>
369
369
  <td data-value="0" class="pct low">0%</td>
370
370
  <td data-value="2" class="abs low">0/2</td>
371
- <td data-value="42.86" class="pct low">42.86%</td>
371
+ <td data-value="42.85" class="pct low">42.85%</td>
372
372
  <td data-value="7" class="abs low">3/7</td>
373
373
  </tr>
374
374
 
@@ -379,7 +379,7 @@
379
379
  </td>
380
380
  <td data-value="80" class="pct high">80%</td>
381
381
  <td data-value="15" class="abs high">12/15</td>
382
- <td data-value="71.43" class="pct medium">71.43%</td>
382
+ <td data-value="71.42" class="pct medium">71.42%</td>
383
383
  <td data-value="7" class="abs medium">5/7</td>
384
384
  <td data-value="100" class="pct high">100%</td>
385
385
  <td data-value="1" class="abs high">1/1</td>
@@ -389,25 +389,25 @@
389
389
 
390
390
  <tr>
391
391
  <td class="file low" data-value="user.js"><a href="user.js.html">user.js</a></td>
392
- <td data-value="38.14" class="pic low">
393
- <div class="chart"><div class="cover-fill" style="width: 38%"></div><div class="cover-empty" style="width: 62%"></div></div>
392
+ <td data-value="37.37" class="pic low">
393
+ <div class="chart"><div class="cover-fill" style="width: 37%"></div><div class="cover-empty" style="width: 63%"></div></div>
394
394
  </td>
395
- <td data-value="38.14" class="pct low">38.14%</td>
396
- <td data-value="97" class="abs low">37/97</td>
395
+ <td data-value="37.37" class="pct low">37.37%</td>
396
+ <td data-value="99" class="abs low">37/99</td>
397
397
  <td data-value="0" class="pct low">0%</td>
398
- <td data-value="27" class="abs low">0/27</td>
398
+ <td data-value="31" class="abs low">0/31</td>
399
399
  <td data-value="35.71" class="pct low">35.71%</td>
400
400
  <td data-value="14" class="abs low">5/14</td>
401
- <td data-value="38.54" class="pct low">38.54%</td>
402
- <td data-value="96" class="abs low">37/96</td>
401
+ <td data-value="37.75" class="pct low">37.75%</td>
402
+ <td data-value="98" class="abs low">37/98</td>
403
403
  </tr>
404
404
 
405
405
  <tr>
406
406
  <td class="file high" data-value="webhook.js"><a href="webhook.js.html">webhook.js</a></td>
407
- <td data-value="91.23" class="pic high">
407
+ <td data-value="91.22" class="pic high">
408
408
  <div class="chart"><div class="cover-fill" style="width: 91%"></div><div class="cover-empty" style="width: 9%"></div></div>
409
409
  </td>
410
- <td data-value="91.23" class="pct high">91.23%</td>
410
+ <td data-value="91.22" class="pct high">91.22%</td>
411
411
  <td data-value="57" class="abs high">52/57</td>
412
412
  <td data-value="40" class="pct low">40%</td>
413
413
  <td data-value="10" class="abs low">4/10</td>
@@ -425,7 +425,7 @@
425
425
  <div class='footer quiet pad2 space-top1 center small'>
426
426
  Code coverage generated by
427
427
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
428
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
428
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
429
429
  </div>
430
430
  </div>
431
431
  <script src="../../prettify.js"></script>
@@ -100,7 +100,7 @@ exports.find = async function (ctx) {
100
100
  <div class='footer quiet pad2 space-top1 center small'>
101
101
  Code coverage generated by
102
102
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
103
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
103
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
104
104
  </div>
105
105
  </div>
106
106
  <script src="../../prettify.js"></script>
@@ -23,7 +23,7 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">85.19% </span>
26
+ <span class="strong">85.18% </span>
27
27
  <span class="quiet">Statements</span>
28
28
  <span class='fraction'>23/27</span>
29
29
  </div>
@@ -44,7 +44,7 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">85.19% </span>
47
+ <span class="strong">85.18% </span>
48
48
  <span class="quiet">Lines</span>
49
49
  <span class='fraction'>23/27</span>
50
50
  </div>
@@ -217,7 +217,7 @@ exports.destroy = async function (ctx) {
217
217
  <div class='footer quiet pad2 space-top1 center small'>
218
218
  Code coverage generated by
219
219
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
220
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
220
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
221
221
  </div>
222
222
  </div>
223
223
  <script src="../../prettify.js"></script>
@@ -188,9 +188,9 @@ exports.getMetadata = async ctx =&gt; {
188
188
  try {
189
189
  ctx.body = await db.get(id)
190
190
  } catch (err) {
191
- <span class="missing-if-branch" title="else path not taken" >E</span>if (err.status === 404) {
191
+ if (err.status === 404) {
192
192
  ctx.body = {}
193
- } else {
193
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
194
194
  <span class="cstat-no" title="statement not covered" > ctx.throw(err.status, err)</span>
195
195
  }
196
196
  }
@@ -202,7 +202,7 @@ exports.getMetadata = async ctx =&gt; {
202
202
  <div class='footer quiet pad2 space-top1 center small'>
203
203
  Code coverage generated by
204
204
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
205
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
205
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
206
206
  </div>
207
207
  </div>
208
208
  <script src="../../prettify.js"></script>
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">90.91% </span>
33
+ <span class="strong">90.9% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>30/33</span>
36
36
  </div>
@@ -44,7 +44,7 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">98.72% </span>
47
+ <span class="strong">98.71% </span>
48
48
  <span class="quiet">Lines</span>
49
49
  <span class='fraction'>77/78</span>
50
50
  </div>
@@ -589,7 +589,7 @@ exports.removePermission = async function (ctx) {
589
589
  <div class='footer quiet pad2 space-top1 center small'>
590
590
  Code coverage generated by
591
591
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
592
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
592
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
593
593
  </div>
594
594
  </div>
595
595
  <script src="../../prettify.js"></script>