@loxia-labs/loxia-autopilot-one 4.6.2 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (958) hide show
  1. package/bin/cli.js +8 -0
  2. package/package.json +1 -1
  3. package/src/__tests__/autoUpdateConfig.test.js +44 -0
  4. package/src/__tests__/releaseWorkflow.test.js +72 -0
  5. package/src/interfaces/__tests__/accountRoutes.test.js +429 -0
  6. package/src/interfaces/__tests__/apiKeyManagerContract.test.js +39 -0
  7. package/src/interfaces/__tests__/authRoutes.test.js +8 -8
  8. package/src/interfaces/accountRoutes.js +250 -0
  9. package/src/interfaces/webServer.js +83 -32
  10. package/src/services/__tests__/apiKeyManager.test.js +4 -6
  11. package/src/services/__tests__/authCacheStore.test.js +118 -0
  12. package/src/services/apiKeyManager.js +12 -99
  13. package/src/services/authCacheStore.js +140 -0
  14. package/src/tools/__tests__/webTool.e2e.test.js +9 -1
  15. package/src/tools/webTool.js +20 -4
  16. package/src/utilities/__tests__/authCache.test.js +266 -0
  17. package/src/utilities/__tests__/secretsCipher.test.js +97 -0
  18. package/src/utilities/__tests__/updateNotifier.test.js +139 -0
  19. package/src/utilities/authCache.js +121 -0
  20. package/src/utilities/secretsCipher.js +116 -0
  21. package/src/utilities/updateNotifier.js +140 -0
  22. package/web-ui/build/index.html +2 -2
  23. package/web-ui/build/static/1c-CX8Slyuy.js +1 -0
  24. package/web-ui/build/static/abap-ByFP_7BL.js +1 -0
  25. package/web-ui/build/static/abnf-DO9lTflJ.js +1 -0
  26. package/web-ui/build/static/abnf-pQFXLUki.js +1 -0
  27. package/web-ui/build/static/accesslog-zbmvgYYy.js +1 -0
  28. package/web-ui/build/static/actionscript-CGSADvRR.js +1 -0
  29. package/web-ui/build/static/actionscript-DJxydOkG.js +1 -0
  30. package/web-ui/build/static/ada-C1GBdBmX.js +1 -0
  31. package/web-ui/build/static/ada-CYIJwIz6.js +1 -0
  32. package/web-ui/build/static/agda-BUBCs0Uq.js +1 -0
  33. package/web-ui/build/static/al-BjReRMC6.js +1 -0
  34. package/web-ui/build/static/angelscript-DOLMKLjX.js +1 -0
  35. package/web-ui/build/static/antlr4-Bu8OsL8S.js +1 -0
  36. package/web-ui/build/static/apache-n1bxew7r.js +1 -0
  37. package/web-ui/build/static/apacheconf-C5OspOQE.js +1 -0
  38. package/web-ui/build/static/apex-qUb6dg5p.js +1 -0
  39. package/web-ui/build/static/apl-B18h8M4O.js +1 -0
  40. package/web-ui/build/static/applescript-LLqxLsS0.js +1 -0
  41. package/web-ui/build/static/applescript-bW6TNKkP.js +1 -0
  42. package/web-ui/build/static/aql-D9MREtV9.js +1 -0
  43. package/web-ui/build/static/arcade-ZlvwpSV3.js +1 -0
  44. package/web-ui/build/static/arduino-BWoMsnYp.js +1 -0
  45. package/web-ui/build/static/arduino-mM6OXMgH.js +1 -0
  46. package/web-ui/build/static/arff-CJP3AwdL.js +1 -0
  47. package/web-ui/build/static/armasm-DxcYudrf.js +1 -0
  48. package/web-ui/build/static/asciidoc-B8dOaH5z.js +1 -0
  49. package/web-ui/build/static/asciidoc-C4o-XeNG.js +1 -0
  50. package/web-ui/build/static/asm6502-BLeKY4SL.js +1 -0
  51. package/web-ui/build/static/asmatmel-BYnE8jGi.js +1 -0
  52. package/web-ui/build/static/aspectj-vX7_GEBk.js +1 -0
  53. package/web-ui/build/static/aspnet-B1q_tMNw.js +1 -0
  54. package/web-ui/build/static/autohotkey-B_XBZG4P.js +1 -0
  55. package/web-ui/build/static/autohotkey-GyOypU7w.js +1 -0
  56. package/web-ui/build/static/autoit-BrMgC4Zp.js +1 -0
  57. package/web-ui/build/static/autoit-GvA8pxCa.js +1 -0
  58. package/web-ui/build/static/avisynth-wuoUPVPh.js +1 -0
  59. package/web-ui/build/static/avrasm-cI_H-qhQ.js +1 -0
  60. package/web-ui/build/static/avro-idl-C0ww38I4.js +1 -0
  61. package/web-ui/build/static/awk-D4AWwjGv.js +1 -0
  62. package/web-ui/build/static/axapta-knUSaGmt.js +1 -0
  63. package/web-ui/build/static/bash-C8l2zCmk.js +1 -0
  64. package/web-ui/build/static/bash-DXj2cElJ.js +1 -0
  65. package/web-ui/build/static/basic-B4zB2Qvl.js +1 -0
  66. package/web-ui/build/static/basic-Cp06c5UD.js +1 -0
  67. package/web-ui/build/static/batch-DswVOBab.js +1 -0
  68. package/web-ui/build/static/bbcode-BT0lX7B5.js +1 -0
  69. package/web-ui/build/static/bicep-Bt_6qKgS.js +1 -0
  70. package/web-ui/build/static/birb-BotQnNDI.js +1 -0
  71. package/web-ui/build/static/bison-iMByvPAu.js +1 -0
  72. package/web-ui/build/static/bnf-BLvXrrla.js +1 -0
  73. package/web-ui/build/static/bnf-DsZj3l-L.js +1 -0
  74. package/web-ui/build/static/brainfuck-CC1GhH39.js +1 -0
  75. package/web-ui/build/static/brainfuck-CaEkb1ts.js +1 -0
  76. package/web-ui/build/static/brightscript-BmAWk-eT.js +1 -0
  77. package/web-ui/build/static/bro-DkeeRbk2.js +1 -0
  78. package/web-ui/build/static/bsl-BYCojYBO.js +1 -0
  79. package/web-ui/build/static/c-D5lITjxk.js +1 -0
  80. package/web-ui/build/static/c-like-CkQeNTMK.js +1 -0
  81. package/web-ui/build/static/c-mpDaEuj4.js +1 -0
  82. package/web-ui/build/static/cal-Csy8fht-.js +1 -0
  83. package/web-ui/build/static/capnproto-CE-oCIvZ.js +1 -0
  84. package/web-ui/build/static/ceylon-D3eiRwxZ.js +1 -0
  85. package/web-ui/build/static/cfscript-CmcWItJj.js +1 -0
  86. package/web-ui/build/static/chaiscript-DkQ6SEAo.js +1 -0
  87. package/web-ui/build/static/cil-Ckcl1cVC.js +1 -0
  88. package/web-ui/build/static/clean-dxAJWNSD.js +1 -0
  89. package/web-ui/build/static/clojure-Bga69PRS.js +1 -0
  90. package/web-ui/build/static/clojure-C9Il189X.js +1 -0
  91. package/web-ui/build/static/clojure-repl-DF3B6Gsk.js +1 -0
  92. package/web-ui/build/static/cmake-BXIkFb9v.js +1 -0
  93. package/web-ui/build/static/cmake-_UbiBFhJ.js +1 -0
  94. package/web-ui/build/static/cobol-DupcTyV0.js +1 -0
  95. package/web-ui/build/static/coffeescript-8HO8_14O.js +1 -0
  96. package/web-ui/build/static/coffeescript-DPFzOoZ4.js +1 -0
  97. package/web-ui/build/static/concurnas-Cvabin0G.js +1 -0
  98. package/web-ui/build/static/coq-C1qSbAiV.js +1 -0
  99. package/web-ui/build/static/coq-D_Pc8ttu.js +1 -0
  100. package/web-ui/build/static/cos-57dtE8dv.js +1 -0
  101. package/web-ui/build/static/cpp-CFEgr9BN.js +1 -0
  102. package/web-ui/build/static/cpp-CYF-Z28E.js +1 -0
  103. package/web-ui/build/static/crmsh-zZn_yW59.js +1 -0
  104. package/web-ui/build/static/crystal-Bp0Z8JsU.js +1 -0
  105. package/web-ui/build/static/crystal-ReZiG2r4.js +1 -0
  106. package/web-ui/build/static/csharp-CqI_aPLc.js +1 -0
  107. package/web-ui/build/static/csharp-Da3XdCp1.js +1 -0
  108. package/web-ui/build/static/cshtml-BmmHjfHg.js +1 -0
  109. package/web-ui/build/static/csp-DpurwP5D.js +1 -0
  110. package/web-ui/build/static/csp-DyAchjDy.js +1 -0
  111. package/web-ui/build/static/css-DevpjMne.js +1 -0
  112. package/web-ui/build/static/css-extras-rYiN8G-4.js +1 -0
  113. package/web-ui/build/static/csv-BB8PxKBq.js +1 -0
  114. package/web-ui/build/static/cypher-t9vxQbyV.js +1 -0
  115. package/web-ui/build/static/d-BWuXShJ_.js +1 -0
  116. package/web-ui/build/static/d-C-KM8JAh.js +1 -0
  117. package/web-ui/build/static/dart-BubT57X6.js +1 -0
  118. package/web-ui/build/static/dart-u3opiHnb.js +1 -0
  119. package/web-ui/build/static/dataweave-De6gGz-5.js +1 -0
  120. package/web-ui/build/static/dax-WGOREtQE.js +1 -0
  121. package/web-ui/build/static/delphi-BmTWpSni.js +1 -0
  122. package/web-ui/build/static/dhall-D0oue5FQ.js +1 -0
  123. package/web-ui/build/static/diff-BtyaXg0g.js +1 -0
  124. package/web-ui/build/static/diff-W9I2f4Db.js +1 -0
  125. package/web-ui/build/static/django-Dbhnhgcb.js +1 -0
  126. package/web-ui/build/static/django-GmJzMqjX.js +1 -0
  127. package/web-ui/build/static/dns-xdZxee8h.js +1 -0
  128. package/web-ui/build/static/dns-zone-file-_MpgnK8X.js +1 -0
  129. package/web-ui/build/static/docker-Da7QHg_I.js +1 -0
  130. package/web-ui/build/static/dockerfile-C2QuoMkq.js +1 -0
  131. package/web-ui/build/static/dos-lFpn9qNL.js +1 -0
  132. package/web-ui/build/static/dot-Cp5lobKU.js +1 -0
  133. package/web-ui/build/static/dsconfig-C9kpqYHC.js +1 -0
  134. package/web-ui/build/static/dts-CkiHehKi.js +1 -0
  135. package/web-ui/build/static/dust-WajpfWv6.js +1 -0
  136. package/web-ui/build/static/ebnf-21h1Q35I.js +1 -0
  137. package/web-ui/build/static/ebnf-Dk00h-rc.js +1 -0
  138. package/web-ui/build/static/editorconfig-DCPpExvQ.js +1 -0
  139. package/web-ui/build/static/eiffel-CztIr2Hf.js +1 -0
  140. package/web-ui/build/static/ejs-BY8hFJJY.js +1 -0
  141. package/web-ui/build/static/elixir-C629vVWc.js +1 -0
  142. package/web-ui/build/static/elixir-DCZqZgdm.js +1 -0
  143. package/web-ui/build/static/elm-BMoYTwhJ.js +1 -0
  144. package/web-ui/build/static/elm-uRFvX7tF.js +1 -0
  145. package/web-ui/build/static/erb-ChZKaEOr.js +1 -0
  146. package/web-ui/build/static/erb-MkfZ5cYZ.js +1 -0
  147. package/web-ui/build/static/erlang-BghmkCmj.js +1 -0
  148. package/web-ui/build/static/erlang-D17FIDAb.js +1 -0
  149. package/web-ui/build/static/erlang-repl-4vYQtS7W.js +1 -0
  150. package/web-ui/build/static/etlua-DbiM7eh2.js +1 -0
  151. package/web-ui/build/static/excel-B4FK6fcP.js +1 -0
  152. package/web-ui/build/static/excel-formula-Cb0aSQ9r.js +1 -0
  153. package/web-ui/build/static/factor-B05Ayzf5.js +1 -0
  154. package/web-ui/build/static/false-wVcaJfkC.js +1 -0
  155. package/web-ui/build/static/firestore-security-rules-Bbv2kriy.js +1 -0
  156. package/web-ui/build/static/fix-0r7xZPtZ.js +1 -0
  157. package/web-ui/build/static/flix-C1BkiNOg.js +1 -0
  158. package/web-ui/build/static/flow-DAPQdrXD.js +1 -0
  159. package/web-ui/build/static/fortran-BCYjQoXS.js +1 -0
  160. package/web-ui/build/static/fortran-FE3G8IZd.js +1 -0
  161. package/web-ui/build/static/fsharp-BttHa9io.js +1 -0
  162. package/web-ui/build/static/fsharp-VwctmRYd.js +1 -0
  163. package/web-ui/build/static/ftl-B7oddpvt.js +1 -0
  164. package/web-ui/build/static/gams-CaxZUQ7u.js +1 -0
  165. package/web-ui/build/static/gap-DZB4QFEH.js +1 -0
  166. package/web-ui/build/static/gauss-MHopEXyb.js +1 -0
  167. package/web-ui/build/static/gcode-CLzojtUf.js +1 -0
  168. package/web-ui/build/static/gcode-CugoOoXS.js +1 -0
  169. package/web-ui/build/static/gdscript-DKnajFmn.js +1 -0
  170. package/web-ui/build/static/gedcom-CV7hn1hP.js +1 -0
  171. package/web-ui/build/static/gherkin-BitvJG6T.js +1 -0
  172. package/web-ui/build/static/gherkin-BnZJeipO.js +1 -0
  173. package/web-ui/build/static/git-CZH1XcUO.js +1 -0
  174. package/web-ui/build/static/glsl-CavDhmQa.js +1 -0
  175. package/web-ui/build/static/glsl-DQD1vrL6.js +1 -0
  176. package/web-ui/build/static/gml-CAd0UgxV.js +1 -0
  177. package/web-ui/build/static/gml-DZ85I0Pq.js +1 -0
  178. package/web-ui/build/static/gn-BiSQ_QEv.js +1 -0
  179. package/web-ui/build/static/go-DvTBJnhu.js +1 -0
  180. package/web-ui/build/static/go-bxBzOVIX.js +1 -0
  181. package/web-ui/build/static/go-module-u2R6Ghd5.js +1 -0
  182. package/web-ui/build/static/golo-DdZTtTc6.js +1 -0
  183. package/web-ui/build/static/gradle-vEIb9Hi2.js +1 -0
  184. package/web-ui/build/static/graphql-ReUpmrlX.js +1 -0
  185. package/web-ui/build/static/groovy-CFDSpKx8.js +1 -0
  186. package/web-ui/build/static/groovy-DRob46Gf.js +1 -0
  187. package/web-ui/build/static/haml-DQ4KGMuK.js +1 -0
  188. package/web-ui/build/static/haml-EfN0GwIO.js +1 -0
  189. package/web-ui/build/static/handlebars-B0YgHx-_.js +1 -0
  190. package/web-ui/build/static/handlebars-BG9MCVU3.js +1 -0
  191. package/web-ui/build/static/haskell-BSiJOeA0.js +1 -0
  192. package/web-ui/build/static/haskell-CGj7MLnu.js +1 -0
  193. package/web-ui/build/static/haxe-DWn_RhOo.js +1 -0
  194. package/web-ui/build/static/haxe-UnD9jWjR.js +1 -0
  195. package/web-ui/build/static/hcl-DyAS_bHs.js +1 -0
  196. package/web-ui/build/static/hlsl-CNVHenLQ.js +1 -0
  197. package/web-ui/build/static/hoon-B2wREB7p.js +1 -0
  198. package/web-ui/build/static/hpkp-_IcMcoTr.js +1 -0
  199. package/web-ui/build/static/hsp--I0xmKjj.js +1 -0
  200. package/web-ui/build/static/hsts-DaPOEr_Y.js +1 -0
  201. package/web-ui/build/static/htmlbars-DpQoY5Go.js +1 -0
  202. package/web-ui/build/static/http-BAgt0PRY.js +1 -0
  203. package/web-ui/build/static/http-Sr0rAnJ0.js +1 -0
  204. package/web-ui/build/static/hy-EVsOEJWc.js +1 -0
  205. package/web-ui/build/static/ichigojam-DxINQRV1.js +1 -0
  206. package/web-ui/build/static/icon-Dyepwmyj.js +1 -0
  207. package/web-ui/build/static/icu-message-format-D5CgZ_sh.js +1 -0
  208. package/web-ui/build/static/idris-Cpk_1dNn.js +1 -0
  209. package/web-ui/build/static/iecst-Tklrp8WD.js +1 -0
  210. package/web-ui/build/static/ignore-BgYR5coN.js +1 -0
  211. package/web-ui/build/static/index-CVxFdlqk.js +1 -0
  212. package/web-ui/build/static/index-Cjbz2j4l.js +13 -0
  213. package/web-ui/build/static/index-Cr9q1fNq.css +1 -0
  214. package/web-ui/build/static/index-a1tUPLQt.js +1162 -0
  215. package/web-ui/build/static/inform7-BLoDkh5x.js +1 -0
  216. package/web-ui/build/static/inform7-Gkek9wv7.js +1 -0
  217. package/web-ui/build/static/ini-CSt-q-LU.js +1 -0
  218. package/web-ui/build/static/ini-DrzoiG54.js +1 -0
  219. package/web-ui/build/static/io-D_p06qo3.js +1 -0
  220. package/web-ui/build/static/irpf90-CPEKUyp2.js +1 -0
  221. package/web-ui/build/static/isbl-CP0nmt-H.js +1 -0
  222. package/web-ui/build/static/j-BFWMSghm.js +1 -0
  223. package/web-ui/build/static/java-K1oaNRy7.js +1 -0
  224. package/web-ui/build/static/java-dAiDxk1O.js +1 -0
  225. package/web-ui/build/static/javadoc-D5_ShfmN.js +1 -0
  226. package/web-ui/build/static/javadoclike-BBd68KGE.js +1 -0
  227. package/web-ui/build/static/javascript-C2TRVGHM.js +1 -0
  228. package/web-ui/build/static/javastacktrace-BlkLalxe.js +1 -0
  229. package/web-ui/build/static/jboss-cli-CoEbYnR6.js +1 -0
  230. package/web-ui/build/static/jexl-BL9D9K-1.js +1 -0
  231. package/web-ui/build/static/jolie-ahyASuPq.js +1 -0
  232. package/web-ui/build/static/jq-BOvPZk2x.js +1 -0
  233. package/web-ui/build/static/js-extras-D3dmvoL4.js +1 -0
  234. package/web-ui/build/static/js-templates-QgsLHkNh.js +1 -0
  235. package/web-ui/build/static/jsdoc-DCD5breD.js +1 -0
  236. package/web-ui/build/static/json-DzNuIYtp.js +1 -0
  237. package/web-ui/build/static/json-Y9pcY1NZ.js +1 -0
  238. package/web-ui/build/static/json5-BY00UoES.js +1 -0
  239. package/web-ui/build/static/jsonp-BT-kz7Qm.js +1 -0
  240. package/web-ui/build/static/jsstacktrace-axMY0dFx.js +1 -0
  241. package/web-ui/build/static/jsx-DXLiKT9d.js +1 -0
  242. package/web-ui/build/static/julia-Cjtnsv6K.js +1 -0
  243. package/web-ui/build/static/julia-Pw_e1mAP.js +1 -0
  244. package/web-ui/build/static/julia-repl-DIMI6CM0.js +1 -0
  245. package/web-ui/build/static/keepalived-Bcnw3S2E.js +1 -0
  246. package/web-ui/build/static/keyman-CbUN9w39.js +1 -0
  247. package/web-ui/build/static/kotlin-CGpA8LwS.js +1 -0
  248. package/web-ui/build/static/kotlin-CWtILFWe.js +1 -0
  249. package/web-ui/build/static/kumir-lf1U5wf9.js +1 -0
  250. package/web-ui/build/static/kusto-Csi7OUhD.js +1 -0
  251. package/web-ui/build/static/lasso-B1hWfYlJ.js +1 -0
  252. package/web-ui/build/static/latex-2Y9XfW0D.js +1 -0
  253. package/web-ui/build/static/latex-CmyvSmzv.js +1 -0
  254. package/web-ui/build/static/latte-DuTDO-zP.js +1 -0
  255. package/web-ui/build/static/ldif-DbXQA4Eh.js +1 -0
  256. package/web-ui/build/static/leaf-2NmRMS4h.js +1 -0
  257. package/web-ui/build/static/less-Bg6a0dbD.js +1 -0
  258. package/web-ui/build/static/less-v68uPo6s.js +1 -0
  259. package/web-ui/build/static/lilypond-DGsETYIr.js +1 -0
  260. package/web-ui/build/static/liquid-DUmPhMqf.js +1 -0
  261. package/web-ui/build/static/lisp-Dq7qhhOC.js +1 -0
  262. package/web-ui/build/static/lisp-n7ZoYaZB.js +1 -0
  263. package/web-ui/build/static/livecodeserver-DKp-Vg3o.js +1 -0
  264. package/web-ui/build/static/livescript-Bc0xsHtN.js +1 -0
  265. package/web-ui/build/static/livescript-DGam8ClS.js +1 -0
  266. package/web-ui/build/static/llvm-Buvuwjv7.js +1 -0
  267. package/web-ui/build/static/llvm-M94JxwSe.js +1 -0
  268. package/web-ui/build/static/log-DNUdJW3Q.js +1 -0
  269. package/web-ui/build/static/lolcode-AEvltoaL.js +1 -0
  270. package/web-ui/build/static/lsl-Dkc-0IN7.js +1 -0
  271. package/web-ui/build/static/lua-Bfri8IZA.js +1 -0
  272. package/web-ui/build/static/lua-D9CzfWk8.js +1 -0
  273. package/web-ui/build/static/magma-Bj1F_e-w.js +1 -0
  274. package/web-ui/build/static/makefile-CV1EU3rr.js +1 -0
  275. package/web-ui/build/static/makefile-CmJmmJbC.js +1 -0
  276. package/web-ui/build/static/markdown-BciE-W2A.js +1 -0
  277. package/web-ui/build/static/markdown-Cby2Kne0.js +1 -0
  278. package/web-ui/build/static/markup-templating-C2BLotzz.js +1 -0
  279. package/web-ui/build/static/mathematica-DvMoySHv.js +1 -0
  280. package/web-ui/build/static/matlab-B3XPXHyn.js +1 -0
  281. package/web-ui/build/static/matlab-S7v-rWnX.js +1 -0
  282. package/web-ui/build/static/maxima-CrL5RGot.js +1 -0
  283. package/web-ui/build/static/maxscript-Cz1FxhmA.js +1 -0
  284. package/web-ui/build/static/mel-BeinNQPi.js +1 -0
  285. package/web-ui/build/static/mel-DjaUDIBw.js +1 -0
  286. package/web-ui/build/static/mercury-CapU4A1b.js +1 -0
  287. package/web-ui/build/static/mermaid-D-6hLrkc.js +1 -0
  288. package/web-ui/build/static/mipsasm-D97E9V3D.js +1 -0
  289. package/web-ui/build/static/mizar-D5KX4WfW.js +1 -0
  290. package/web-ui/build/static/mizar-D8-uT09d.js +1 -0
  291. package/web-ui/build/static/mojolicious-UpHDgQyi.js +1 -0
  292. package/web-ui/build/static/mongodb-B9itzJ_c.js +1 -0
  293. package/web-ui/build/static/monkey-CJQoKMn0.js +1 -0
  294. package/web-ui/build/static/monkey-CmDSvk72.js +1 -0
  295. package/web-ui/build/static/moonscript-C3Y7q9ZG.js +1 -0
  296. package/web-ui/build/static/moonscript-CO9HEL_-.js +1 -0
  297. package/web-ui/build/static/n1ql-BCx02Pfk.js +1 -0
  298. package/web-ui/build/static/n1ql-dytzeuwS.js +1 -0
  299. package/web-ui/build/static/n4js-l6h7_oMC.js +1 -0
  300. package/web-ui/build/static/nand2tetris-hdl-Cd9s97O3.js +1 -0
  301. package/web-ui/build/static/naniscript-CeVT49ih.js +1 -0
  302. package/web-ui/build/static/nasm-BsRIArJc.js +1 -0
  303. package/web-ui/build/static/neon-8lRVh1Ys.js +1 -0
  304. package/web-ui/build/static/nevod-CwL48TO8.js +1 -0
  305. package/web-ui/build/static/nginx-D9gBoG-W.js +1 -0
  306. package/web-ui/build/static/nginx-Ug3C56El.js +1 -0
  307. package/web-ui/build/static/nim-BcLtM1HF.js +1 -0
  308. package/web-ui/build/static/nim-IuzgCNTD.js +1 -0
  309. package/web-ui/build/static/nix-BCR9d0oF.js +1 -0
  310. package/web-ui/build/static/nix-zC8ApXrK.js +1 -0
  311. package/web-ui/build/static/node-repl-1QNkPL7r.js +1 -0
  312. package/web-ui/build/static/nsis-BVXhe1OQ.js +1 -0
  313. package/web-ui/build/static/nsis-DIoGl7O7.js +1 -0
  314. package/web-ui/build/static/objectivec-Cn0seATa.js +1 -0
  315. package/web-ui/build/static/objectivec-Cwc3QGlF.js +1 -0
  316. package/web-ui/build/static/ocaml-Bm-7R8W_.js +1 -0
  317. package/web-ui/build/static/ocaml-DZm0MSBn.js +1 -0
  318. package/web-ui/build/static/opencl-ClqcfInT.js +1 -0
  319. package/web-ui/build/static/openqasm-DQOupnbB.js +1 -0
  320. package/web-ui/build/static/openscad-CAlcKTt_.js +1 -0
  321. package/web-ui/build/static/oxygene-h1qUhF_y.js +1 -0
  322. package/web-ui/build/static/oz--iJdW5aI.js +1 -0
  323. package/web-ui/build/static/parigp-CeMf2XY0.js +1 -0
  324. package/web-ui/build/static/parser-C_Rhe9tG.js +1 -0
  325. package/web-ui/build/static/parser3-CfIhIGzL.js +1 -0
  326. package/web-ui/build/static/pascal-UP6W9zuu.js +1 -0
  327. package/web-ui/build/static/pascaligo-CcuSIjaC.js +1 -0
  328. package/web-ui/build/static/pcaxis-pAIt3BoI.js +1 -0
  329. package/web-ui/build/static/peoplecode-BER09twz.js +1 -0
  330. package/web-ui/build/static/perl-Cs_xnzKV.js +1 -0
  331. package/web-ui/build/static/perl-D72eOwd-.js +1 -0
  332. package/web-ui/build/static/pf-CKTl5F-c.js +1 -0
  333. package/web-ui/build/static/pgsql-BZQolNb5.js +1 -0
  334. package/web-ui/build/static/php-BvGwAAS4.js +1 -0
  335. package/web-ui/build/static/php-CiB7pWfs.js +1 -0
  336. package/web-ui/build/static/php-extras-3oCvA2rf.js +1 -0
  337. package/web-ui/build/static/php-template-BSQTVokD.js +1 -0
  338. package/web-ui/build/static/phpdoc-5t4L9kjR.js +1 -0
  339. package/web-ui/build/static/plaintext-DZfTddVt.js +1 -0
  340. package/web-ui/build/static/plsql-DHwLFIXJ.js +1 -0
  341. package/web-ui/build/static/pony-LtDguIDM.js +1 -0
  342. package/web-ui/build/static/powerquery-awzDefEX.js +1 -0
  343. package/web-ui/build/static/powershell-BFEaYZKk.js +1 -0
  344. package/web-ui/build/static/powershell-D1KqKxmm.js +1 -0
  345. package/web-ui/build/static/processing-D4R55DGB.js +1 -0
  346. package/web-ui/build/static/processing-rS7yvBsw.js +1 -0
  347. package/web-ui/build/static/profile-BKJQvDU1.js +1 -0
  348. package/web-ui/build/static/prolog-ClYiwV6V.js +1 -0
  349. package/web-ui/build/static/prolog-DcMMCy3p.js +1 -0
  350. package/web-ui/build/static/promql-D9TfU9wi.js +1 -0
  351. package/web-ui/build/static/properties-CfjThyg6.js +1 -0
  352. package/web-ui/build/static/properties-DXyGPO56.js +1 -0
  353. package/web-ui/build/static/protobuf-CWQI1HF4.js +1 -0
  354. package/web-ui/build/static/protobuf-CdYaBGrs.js +1 -0
  355. package/web-ui/build/static/psl-Bv5Hyoad.js +1 -0
  356. package/web-ui/build/static/pug-C7KNYq-O.js +1 -0
  357. package/web-ui/build/static/puppet-CsNk0Ac_.js +1 -0
  358. package/web-ui/build/static/puppet-DoRcUtOe.js +1 -0
  359. package/web-ui/build/static/pure-WExaiHTK.js +1 -0
  360. package/web-ui/build/static/purebasic-D0zFsBy5.js +1 -0
  361. package/web-ui/build/static/purebasic-zb4Av5A6.js +1 -0
  362. package/web-ui/build/static/purescript-DC_tX0Fe.js +1 -0
  363. package/web-ui/build/static/python-Cdc6NQKV.js +1 -0
  364. package/web-ui/build/static/python-Cfl-IyWz.js +1 -0
  365. package/web-ui/build/static/python-repl-C_02knkl.js +1 -0
  366. package/web-ui/build/static/q-BTpWGy4U.js +1 -0
  367. package/web-ui/build/static/q-ighKuCL5.js +1 -0
  368. package/web-ui/build/static/qml-DbrxJa--.js +1 -0
  369. package/web-ui/build/static/qml-JtvE0qZI.js +1 -0
  370. package/web-ui/build/static/qore-CuJ1SiiK.js +1 -0
  371. package/web-ui/build/static/qsharp-B3juxol2.js +1 -0
  372. package/web-ui/build/static/r-DVCoE8oa.js +1 -0
  373. package/web-ui/build/static/r-DnhhElkt.js +1 -0
  374. package/web-ui/build/static/racket-CRc96T9l.js +1 -0
  375. package/web-ui/build/static/reason-Byd2boaL.js +1 -0
  376. package/web-ui/build/static/reasonml-T89JBGF3.js +1 -0
  377. package/web-ui/build/static/regex-CCYx_Lzk.js +1 -0
  378. package/web-ui/build/static/rego-CRTNtWNZ.js +1 -0
  379. package/web-ui/build/static/renpy-C68VY20r.js +1 -0
  380. package/web-ui/build/static/rest-Bv81man5.js +1 -0
  381. package/web-ui/build/static/rib-CH_vBpAb.js +1 -0
  382. package/web-ui/build/static/rip-B8JSgJKc.js +1 -0
  383. package/web-ui/build/static/roboconf-79wSii7N.js +1 -0
  384. package/web-ui/build/static/roboconf-BdGCg5RM.js +1 -0
  385. package/web-ui/build/static/robotframework-DN2rtDFM.js +1 -0
  386. package/web-ui/build/static/routeros-Cb3zmKRC.js +1 -0
  387. package/web-ui/build/static/rsl-BscS3yqi.js +1 -0
  388. package/web-ui/build/static/ruby-CMoWtmVY.js +1 -0
  389. package/web-ui/build/static/ruby-CR6eTwsn.js +1 -0
  390. package/web-ui/build/static/ruleslanguage-CN1a7i_9.js +1 -0
  391. package/web-ui/build/static/rust-CCwDPN5L.js +1 -0
  392. package/web-ui/build/static/rust-Cr3D4zI2.js +1 -0
  393. package/web-ui/build/static/sas-C7Tc773U.js +1 -0
  394. package/web-ui/build/static/sas-pYXw0yW1.js +1 -0
  395. package/web-ui/build/static/sass-BXCWeprT.js +1 -0
  396. package/web-ui/build/static/scala-BfCgC1jZ.js +1 -0
  397. package/web-ui/build/static/scala-Dzul6A2C.js +1 -0
  398. package/web-ui/build/static/scheme-CB7LecP9.js +1 -0
  399. package/web-ui/build/static/scheme-dgHnQkTX.js +1 -0
  400. package/web-ui/build/static/scilab-CNrYKluw.js +1 -0
  401. package/web-ui/build/static/scss-DIacZKvh.js +1 -0
  402. package/web-ui/build/static/scss-qx86tAuA.js +1 -0
  403. package/web-ui/build/static/shell-DI7kfPhX.js +1 -0
  404. package/web-ui/build/static/shell-session-DauOairG.js +1 -0
  405. package/web-ui/build/static/smali-C-MFzLlJ.js +1 -0
  406. package/web-ui/build/static/smali-CBjjRSrh.js +1 -0
  407. package/web-ui/build/static/smalltalk-BUeVqjaK.js +1 -0
  408. package/web-ui/build/static/smalltalk-BpRXW4JD.js +1 -0
  409. package/web-ui/build/static/smarty-CviZlIaF.js +1 -0
  410. package/web-ui/build/static/sml-CnPb1r9G.js +1 -0
  411. package/web-ui/build/static/sml-vdcheLP4.js +1 -0
  412. package/web-ui/build/static/solidity-BIoeKpmK.js +1 -0
  413. package/web-ui/build/static/solution-file-DN2GfETX.js +1 -0
  414. package/web-ui/build/static/soy-1iRuZ68D.js +1 -0
  415. package/web-ui/build/static/sparql-DpNKy3Qh.js +1 -0
  416. package/web-ui/build/static/splunk-spl-D7p0JtO1.js +1 -0
  417. package/web-ui/build/static/sqf-DzGb-kgq.js +1 -0
  418. package/web-ui/build/static/sqf-I5-3qPXy.js +1 -0
  419. package/web-ui/build/static/sql-CH3JEERs.js +1 -0
  420. package/web-ui/build/static/sql-DZx0D1pV.js +1 -0
  421. package/web-ui/build/static/sql_more-CJo9JseU.js +1 -0
  422. package/web-ui/build/static/squirrel-TPdt5Twt.js +1 -0
  423. package/web-ui/build/static/stan-BW23OiEC.js +1 -0
  424. package/web-ui/build/static/stan-C1X_122o.js +1 -0
  425. package/web-ui/build/static/stata-BkrDi-vH.js +1 -0
  426. package/web-ui/build/static/step21-w3LD46I8.js +1 -0
  427. package/web-ui/build/static/stylus-BOqpbZMO.js +1 -0
  428. package/web-ui/build/static/stylus-xQ41J98W.js +1 -0
  429. package/web-ui/build/static/subunit-Qo73JzWz.js +1 -0
  430. package/web-ui/build/static/swift-BGAyHECl.js +1 -0
  431. package/web-ui/build/static/swift-CzBG3wbY.js +1 -0
  432. package/web-ui/build/static/systemd-w7VyDz7h.js +1 -0
  433. package/web-ui/build/static/t4-cs-n0p8ynM0.js +1 -0
  434. package/web-ui/build/static/t4-templating-DtdMTfhS.js +1 -0
  435. package/web-ui/build/static/t4-vb-B83e2O1s.js +1 -0
  436. package/web-ui/build/static/taggerscript-DKaTnSi3.js +1 -0
  437. package/web-ui/build/static/tap-BGL6pUAS.js +1 -0
  438. package/web-ui/build/static/tap-CAGXYaf5.js +1 -0
  439. package/web-ui/build/static/tcl-BDCD9Wxg.js +1 -0
  440. package/web-ui/build/static/tcl-B_HjP1Wv.js +1 -0
  441. package/web-ui/build/static/textile-u5pL67xJ.js +1 -0
  442. package/web-ui/build/static/thrift-DHA4NkFg.js +1 -0
  443. package/web-ui/build/static/toml-BrlroJ9y.js +1 -0
  444. package/web-ui/build/static/tp-DfqF7q7J.js +1 -0
  445. package/web-ui/build/static/tremor-Bo875BVP.js +1 -0
  446. package/web-ui/build/static/tsx-NbbFMK_p.js +1 -0
  447. package/web-ui/build/static/tt2-CiauJgHm.js +1 -0
  448. package/web-ui/build/static/turtle-B1lTPGGF.js +1 -0
  449. package/web-ui/build/static/twig-BjkntuFz.js +1 -0
  450. package/web-ui/build/static/twig-CcYOHGzc.js +1 -0
  451. package/web-ui/build/static/typescript-C-Mv4KnI.js +1 -0
  452. package/web-ui/build/static/typescript-CosbLbyx.js +1 -0
  453. package/web-ui/build/static/typoscript-RByaFfO0.js +1 -0
  454. package/web-ui/build/static/unrealscript-CWN5JCj9.js +1 -0
  455. package/web-ui/build/static/uorazor-KAU3puYn.js +1 -0
  456. package/web-ui/build/static/uri-_USw_C0h.js +1 -0
  457. package/web-ui/build/static/v-B8dk96Yk.js +1 -0
  458. package/web-ui/build/static/vala-BrNlVgV4.js +1 -0
  459. package/web-ui/build/static/vala-LbSOd50F.js +1 -0
  460. package/web-ui/build/static/vbnet-BD6KJOjE.js +1 -0
  461. package/web-ui/build/static/vbnet-Dztp7Di6.js +1 -0
  462. package/web-ui/build/static/vbscript-BNYuRODB.js +1 -0
  463. package/web-ui/build/static/vbscript-html-W2p7VOYv.js +1 -0
  464. package/web-ui/build/static/velocity-DYzEKmc0.js +1 -0
  465. package/web-ui/build/static/verilog-C-UFLFJW.js +1 -0
  466. package/web-ui/build/static/verilog-tep1uMgI.js +1 -0
  467. package/web-ui/build/static/vhdl-BE5aeF9d.js +1 -0
  468. package/web-ui/build/static/vhdl-DwHBKbBo.js +1 -0
  469. package/web-ui/build/static/vim-BBpXzim_.js +1 -0
  470. package/web-ui/build/static/vim-CYkTFI0g.js +1 -0
  471. package/web-ui/build/static/visual-basic-qsFoqRlW.js +1 -0
  472. package/web-ui/build/static/warpscript-BVRgxBbf.js +1 -0
  473. package/web-ui/build/static/wasm-BUoRHz_g.js +1 -0
  474. package/web-ui/build/static/web-idl-BfkZ-0Zs.js +1 -0
  475. package/web-ui/build/static/wiki-Bw6aH4v4.js +1 -0
  476. package/web-ui/build/static/wolfram-CFK3ihnW.js +1 -0
  477. package/web-ui/build/static/wren-aAONXREJ.js +1 -0
  478. package/web-ui/build/static/x86asm-CT9pzq47.js +1 -0
  479. package/web-ui/build/static/xeora-6xq_xEfE.js +1 -0
  480. package/web-ui/build/static/xl-5qF2hdo7.js +1 -0
  481. package/web-ui/build/static/xml-BTWk7Jci.js +1 -0
  482. package/web-ui/build/static/xml-doc-D540qUoQ.js +1 -0
  483. package/web-ui/build/static/xojo-CQ1tIdjx.js +1 -0
  484. package/web-ui/build/static/xquery-CYnpm8sy.js +1 -0
  485. package/web-ui/build/static/xquery-DXDxMCpW.js +1 -0
  486. package/web-ui/build/static/yaml-Bs7_xHrY.js +1 -0
  487. package/web-ui/build/static/yaml-CMNnp9T5.js +1 -0
  488. package/web-ui/build/static/yang-CPWL_sCE.js +1 -0
  489. package/web-ui/build/static/zephir--ZB5wSH9.js +1 -0
  490. package/web-ui/build/static/zig-Cs8kdr0x.js +1 -0
  491. package/web-ui/build/static/1c-Cq-hwO_r.js +0 -1
  492. package/web-ui/build/static/abap-Bj3J92o0.js +0 -1
  493. package/web-ui/build/static/abnf-B7dRTyYV.js +0 -1
  494. package/web-ui/build/static/abnf-CgIeOKW_.js +0 -1
  495. package/web-ui/build/static/accesslog-Brfuws0y.js +0 -1
  496. package/web-ui/build/static/actionscript-BtQ2t5pu.js +0 -1
  497. package/web-ui/build/static/actionscript-goVL5Y6e.js +0 -1
  498. package/web-ui/build/static/ada-B-A6_5hH.js +0 -1
  499. package/web-ui/build/static/ada-BjgP_FtU.js +0 -1
  500. package/web-ui/build/static/agda-BacrCQWL.js +0 -1
  501. package/web-ui/build/static/al-BWbVu8rj.js +0 -1
  502. package/web-ui/build/static/angelscript-DcbXRun6.js +0 -1
  503. package/web-ui/build/static/antlr4-CcHtLL8K.js +0 -1
  504. package/web-ui/build/static/apache-OAiHHzpe.js +0 -1
  505. package/web-ui/build/static/apacheconf-C3A7Y_U1.js +0 -1
  506. package/web-ui/build/static/apex-BVwOQaEZ.js +0 -1
  507. package/web-ui/build/static/apl-PT43VQmo.js +0 -1
  508. package/web-ui/build/static/applescript-Dn1LkiWJ.js +0 -1
  509. package/web-ui/build/static/applescript-_6TXRPac.js +0 -1
  510. package/web-ui/build/static/aql-gfGf0_Pw.js +0 -1
  511. package/web-ui/build/static/arcade-C_48BaTr.js +0 -1
  512. package/web-ui/build/static/arduino-BBPz8-CO.js +0 -1
  513. package/web-ui/build/static/arduino-CC5iDbCS.js +0 -1
  514. package/web-ui/build/static/arff-DGjgQSVs.js +0 -1
  515. package/web-ui/build/static/armasm-jLweXbby.js +0 -1
  516. package/web-ui/build/static/asciidoc-BkdFS48t.js +0 -1
  517. package/web-ui/build/static/asciidoc-DsWN0DVy.js +0 -1
  518. package/web-ui/build/static/asm6502-Copj29i5.js +0 -1
  519. package/web-ui/build/static/asmatmel-xHtRNIqR.js +0 -1
  520. package/web-ui/build/static/aspectj-D6QKOTTR.js +0 -1
  521. package/web-ui/build/static/aspnet-UnARUlEV.js +0 -1
  522. package/web-ui/build/static/autohotkey-B5VwtEWA.js +0 -1
  523. package/web-ui/build/static/autohotkey-CqzTeM4m.js +0 -1
  524. package/web-ui/build/static/autoit-BfbzHKiS.js +0 -1
  525. package/web-ui/build/static/autoit-C32ox-vP.js +0 -1
  526. package/web-ui/build/static/avisynth-BbrT7kC0.js +0 -1
  527. package/web-ui/build/static/avrasm-xzyiZtVs.js +0 -1
  528. package/web-ui/build/static/avro-idl-Dv8xVlxB.js +0 -1
  529. package/web-ui/build/static/awk-CRy92Bde.js +0 -1
  530. package/web-ui/build/static/axapta-BkTCS6L7.js +0 -1
  531. package/web-ui/build/static/bash-B7mprhYC.js +0 -1
  532. package/web-ui/build/static/bash-CHvd-a4J.js +0 -1
  533. package/web-ui/build/static/basic-COP-ShrV.js +0 -1
  534. package/web-ui/build/static/basic-DtUei7pT.js +0 -1
  535. package/web-ui/build/static/batch-DJfB6_51.js +0 -1
  536. package/web-ui/build/static/bbcode-CpVKyEQ3.js +0 -1
  537. package/web-ui/build/static/bicep-CR06L3-R.js +0 -1
  538. package/web-ui/build/static/birb-DHy6KGuz.js +0 -1
  539. package/web-ui/build/static/bison-sYVGdmNK.js +0 -1
  540. package/web-ui/build/static/bnf-BhNWY88k.js +0 -1
  541. package/web-ui/build/static/bnf-Dl361XGv.js +0 -1
  542. package/web-ui/build/static/brainfuck-BipgMC6i.js +0 -1
  543. package/web-ui/build/static/brainfuck-DCrqBkOp.js +0 -1
  544. package/web-ui/build/static/brightscript-CZKGAj9D.js +0 -1
  545. package/web-ui/build/static/bro-Bn09ZJrJ.js +0 -1
  546. package/web-ui/build/static/bsl-DSmhgqqT.js +0 -1
  547. package/web-ui/build/static/c-C6b19vHL.js +0 -1
  548. package/web-ui/build/static/c-like-BBz63X23.js +0 -1
  549. package/web-ui/build/static/c-z2cXPHr7.js +0 -1
  550. package/web-ui/build/static/cal-dGf8L3bC.js +0 -1
  551. package/web-ui/build/static/capnproto-CKcdR_89.js +0 -1
  552. package/web-ui/build/static/ceylon-DKFd94eN.js +0 -1
  553. package/web-ui/build/static/cfscript-DSXMtUck.js +0 -1
  554. package/web-ui/build/static/chaiscript-CIaow3hF.js +0 -1
  555. package/web-ui/build/static/cil-DamWSUrE.js +0 -1
  556. package/web-ui/build/static/clean-DfoslqN2.js +0 -1
  557. package/web-ui/build/static/clojure-Ci0HAhFu.js +0 -1
  558. package/web-ui/build/static/clojure-MDpeBL7q.js +0 -1
  559. package/web-ui/build/static/clojure-repl-DUh15rdu.js +0 -1
  560. package/web-ui/build/static/cmake-Dd-PjbmJ.js +0 -1
  561. package/web-ui/build/static/cmake-kWFpJh0b.js +0 -1
  562. package/web-ui/build/static/cobol-CbdFN9Aq.js +0 -1
  563. package/web-ui/build/static/coffeescript-BOZvfZXe.js +0 -1
  564. package/web-ui/build/static/coffeescript-C8lkA6yF.js +0 -1
  565. package/web-ui/build/static/concurnas-DshY3dVP.js +0 -1
  566. package/web-ui/build/static/coq-BK5joHcg.js +0 -1
  567. package/web-ui/build/static/coq-BgDArCYV.js +0 -1
  568. package/web-ui/build/static/cos-BhytKs2e.js +0 -1
  569. package/web-ui/build/static/cpp-BR6BpY8m.js +0 -1
  570. package/web-ui/build/static/cpp-C_8wyEl5.js +0 -1
  571. package/web-ui/build/static/crmsh-nsUcp_iD.js +0 -1
  572. package/web-ui/build/static/crystal-BVuQ7y3a.js +0 -1
  573. package/web-ui/build/static/crystal-BdPQWPu8.js +0 -1
  574. package/web-ui/build/static/csharp-DcpW4AJy.js +0 -1
  575. package/web-ui/build/static/csharp-mtmelfWD.js +0 -1
  576. package/web-ui/build/static/cshtml-DJz-D0xI.js +0 -1
  577. package/web-ui/build/static/csp-BzQ5E6Bu.js +0 -1
  578. package/web-ui/build/static/csp-RdR17lsz.js +0 -1
  579. package/web-ui/build/static/css-eqtWHuIF.js +0 -1
  580. package/web-ui/build/static/css-extras-DRjniEBA.js +0 -1
  581. package/web-ui/build/static/csv-oiHAEGf8.js +0 -1
  582. package/web-ui/build/static/cypher-B6PhWZfQ.js +0 -1
  583. package/web-ui/build/static/d-BSc2vjoC.js +0 -1
  584. package/web-ui/build/static/d-VDcHLiun.js +0 -1
  585. package/web-ui/build/static/dart-0iSQS_b8.js +0 -1
  586. package/web-ui/build/static/dart-BxSSgaKE.js +0 -1
  587. package/web-ui/build/static/dataweave-By2gmS3t.js +0 -1
  588. package/web-ui/build/static/dax-Cywwleui.js +0 -1
  589. package/web-ui/build/static/delphi-C4FzpL-G.js +0 -1
  590. package/web-ui/build/static/dhall-DJpg1Rfk.js +0 -1
  591. package/web-ui/build/static/diff-B3nrWdii.js +0 -1
  592. package/web-ui/build/static/diff-BL-tsEUu.js +0 -1
  593. package/web-ui/build/static/django-DB_RWHoG.js +0 -1
  594. package/web-ui/build/static/django-DOIzlRmz.js +0 -1
  595. package/web-ui/build/static/dns-CTCuK0du.js +0 -1
  596. package/web-ui/build/static/dns-zone-file-Bt3PjwWE.js +0 -1
  597. package/web-ui/build/static/docker-I3c4bB6G.js +0 -1
  598. package/web-ui/build/static/dockerfile-DjTSGVMW.js +0 -1
  599. package/web-ui/build/static/dos-CGox9yfy.js +0 -1
  600. package/web-ui/build/static/dot-DH505s_O.js +0 -1
  601. package/web-ui/build/static/dsconfig-DaIKzJvX.js +0 -1
  602. package/web-ui/build/static/dts-DP0MVTrt.js +0 -1
  603. package/web-ui/build/static/dust-DdkQ8UXz.js +0 -1
  604. package/web-ui/build/static/ebnf-D_zXrsCu.js +0 -1
  605. package/web-ui/build/static/ebnf-Dz8XUjVl.js +0 -1
  606. package/web-ui/build/static/editorconfig-D5cETs6D.js +0 -1
  607. package/web-ui/build/static/eiffel-ByIQuBxb.js +0 -1
  608. package/web-ui/build/static/ejs-IXzNzC2K.js +0 -1
  609. package/web-ui/build/static/elixir-DF00X4Q5.js +0 -1
  610. package/web-ui/build/static/elixir-_YieNFnB.js +0 -1
  611. package/web-ui/build/static/elm-D5jCsD-F.js +0 -1
  612. package/web-ui/build/static/elm-XJZ3qBNS.js +0 -1
  613. package/web-ui/build/static/erb-CMWgsBAj.js +0 -1
  614. package/web-ui/build/static/erb-CXbzQc1j.js +0 -1
  615. package/web-ui/build/static/erlang-BvHlOHvL.js +0 -1
  616. package/web-ui/build/static/erlang-CH3e3Jau.js +0 -1
  617. package/web-ui/build/static/erlang-repl-Dguaz0rL.js +0 -1
  618. package/web-ui/build/static/etlua-oV9c6CTH.js +0 -1
  619. package/web-ui/build/static/excel-CZbfsO-6.js +0 -1
  620. package/web-ui/build/static/excel-formula-DiY7sLGv.js +0 -1
  621. package/web-ui/build/static/factor-DQEChkb5.js +0 -1
  622. package/web-ui/build/static/false-Dm19qogz.js +0 -1
  623. package/web-ui/build/static/firestore-security-rules-CtSQyWr3.js +0 -1
  624. package/web-ui/build/static/fix-D4XFpahA.js +0 -1
  625. package/web-ui/build/static/flix-D_JEQ32L.js +0 -1
  626. package/web-ui/build/static/flow-DszRmXf2.js +0 -1
  627. package/web-ui/build/static/fortran-CeLKOdH6.js +0 -1
  628. package/web-ui/build/static/fortran-D5myOCVB.js +0 -1
  629. package/web-ui/build/static/fsharp-DtPM_gy7.js +0 -1
  630. package/web-ui/build/static/fsharp-vIuj_Bnm.js +0 -1
  631. package/web-ui/build/static/ftl-BUNS0s6s.js +0 -1
  632. package/web-ui/build/static/gams-D2ylzdDl.js +0 -1
  633. package/web-ui/build/static/gap-rOFlfMs0.js +0 -1
  634. package/web-ui/build/static/gauss-DDZ3gI6i.js +0 -1
  635. package/web-ui/build/static/gcode-BoLQ70FH.js +0 -1
  636. package/web-ui/build/static/gcode-Cmt976qD.js +0 -1
  637. package/web-ui/build/static/gdscript-CjMnc0X2.js +0 -1
  638. package/web-ui/build/static/gedcom-B98412jq.js +0 -1
  639. package/web-ui/build/static/gherkin-BrFCuUxf.js +0 -1
  640. package/web-ui/build/static/gherkin-CRRvxB4F.js +0 -1
  641. package/web-ui/build/static/git-d8i2pvOD.js +0 -1
  642. package/web-ui/build/static/glsl-Bqgs46E0.js +0 -1
  643. package/web-ui/build/static/glsl-DnILOWIr.js +0 -1
  644. package/web-ui/build/static/gml-B0epsACN.js +0 -1
  645. package/web-ui/build/static/gml-Cab70aFo.js +0 -1
  646. package/web-ui/build/static/gn-C4OTHZKr.js +0 -1
  647. package/web-ui/build/static/go-hVwedUNS.js +0 -1
  648. package/web-ui/build/static/go-module-DH0W_eXA.js +0 -1
  649. package/web-ui/build/static/go-pngPoFXS.js +0 -1
  650. package/web-ui/build/static/golo-B0GO6QRK.js +0 -1
  651. package/web-ui/build/static/gradle-C1z9idoO.js +0 -1
  652. package/web-ui/build/static/graphql-0IbxsnF-.js +0 -1
  653. package/web-ui/build/static/groovy-7xkgnCzv.js +0 -1
  654. package/web-ui/build/static/groovy-D2Lh_JPf.js +0 -1
  655. package/web-ui/build/static/haml-CLxKE6PK.js +0 -1
  656. package/web-ui/build/static/haml-XunOjScz.js +0 -1
  657. package/web-ui/build/static/handlebars-C8jv0dUb.js +0 -1
  658. package/web-ui/build/static/handlebars-C99IfyoK.js +0 -1
  659. package/web-ui/build/static/haskell-CWzSiyT-.js +0 -1
  660. package/web-ui/build/static/haskell-DE01j0GM.js +0 -1
  661. package/web-ui/build/static/haxe-CyNgjHdQ.js +0 -1
  662. package/web-ui/build/static/haxe-DY-IsjV8.js +0 -1
  663. package/web-ui/build/static/hcl-C91f9mbi.js +0 -1
  664. package/web-ui/build/static/hlsl-Cg-aML-6.js +0 -1
  665. package/web-ui/build/static/hoon-DdsgJ1nD.js +0 -1
  666. package/web-ui/build/static/hpkp-BwnyfhJ5.js +0 -1
  667. package/web-ui/build/static/hsp-B9ns6-4O.js +0 -1
  668. package/web-ui/build/static/hsts-CK4xEuMd.js +0 -1
  669. package/web-ui/build/static/htmlbars-CbMJbzwi.js +0 -1
  670. package/web-ui/build/static/http-Dn6_x4um.js +0 -1
  671. package/web-ui/build/static/http-DzUrXUjn.js +0 -1
  672. package/web-ui/build/static/hy-BI4hrOPN.js +0 -1
  673. package/web-ui/build/static/ichigojam-DQAwFjHg.js +0 -1
  674. package/web-ui/build/static/icon-DljbjsmV.js +0 -1
  675. package/web-ui/build/static/icu-message-format-BScYu7Pd.js +0 -1
  676. package/web-ui/build/static/idris-DGuape_d.js +0 -1
  677. package/web-ui/build/static/iecst-BXVLJcgO.js +0 -1
  678. package/web-ui/build/static/ignore-gGv3YITN.js +0 -1
  679. package/web-ui/build/static/index-BSOED9wx.js +0 -1
  680. package/web-ui/build/static/index-Bsv2frSs.js +0 -1156
  681. package/web-ui/build/static/index-f5UnFSsY.css +0 -1
  682. package/web-ui/build/static/index-rjZBcJJ2.js +0 -13
  683. package/web-ui/build/static/inform7-B5U2RbzC.js +0 -1
  684. package/web-ui/build/static/inform7-Mg7P7aTg.js +0 -1
  685. package/web-ui/build/static/ini-BwDsaS_4.js +0 -1
  686. package/web-ui/build/static/ini-G5U3MIZ9.js +0 -1
  687. package/web-ui/build/static/io-Crvny-3e.js +0 -1
  688. package/web-ui/build/static/irpf90-CtDlYVwl.js +0 -1
  689. package/web-ui/build/static/isbl-DNyPUVU5.js +0 -1
  690. package/web-ui/build/static/j-CVdZprNZ.js +0 -1
  691. package/web-ui/build/static/java-XYNFUOGI.js +0 -1
  692. package/web-ui/build/static/java-uKcccJc4.js +0 -1
  693. package/web-ui/build/static/javadoc-_Zax_O1M.js +0 -1
  694. package/web-ui/build/static/javadoclike-BRZhh271.js +0 -1
  695. package/web-ui/build/static/javascript-CzrJKg-u.js +0 -1
  696. package/web-ui/build/static/javastacktrace-DtrXF-Hv.js +0 -1
  697. package/web-ui/build/static/jboss-cli-5JqyLvtS.js +0 -1
  698. package/web-ui/build/static/jexl-C533Rpgl.js +0 -1
  699. package/web-ui/build/static/jolie-Do8aKXGV.js +0 -1
  700. package/web-ui/build/static/jq-Dn9wFLd3.js +0 -1
  701. package/web-ui/build/static/js-extras-AGPxIHGE.js +0 -1
  702. package/web-ui/build/static/js-templates-DNtCgC87.js +0 -1
  703. package/web-ui/build/static/jsdoc-hwqCC4Lp.js +0 -1
  704. package/web-ui/build/static/json-DEoJAiqk.js +0 -1
  705. package/web-ui/build/static/json-ejWyt3_H.js +0 -1
  706. package/web-ui/build/static/json5-DlqfLQMJ.js +0 -1
  707. package/web-ui/build/static/jsonp-D6RoLXPZ.js +0 -1
  708. package/web-ui/build/static/jsstacktrace-B079OZqT.js +0 -1
  709. package/web-ui/build/static/jsx-DnNBZwen.js +0 -1
  710. package/web-ui/build/static/julia-DAxIO9Pp.js +0 -1
  711. package/web-ui/build/static/julia-DVj1XagP.js +0 -1
  712. package/web-ui/build/static/julia-repl-BocQ8nYs.js +0 -1
  713. package/web-ui/build/static/keepalived-BxAnMqU-.js +0 -1
  714. package/web-ui/build/static/keyman-BZzRV71X.js +0 -1
  715. package/web-ui/build/static/kotlin-DVWSyyWq.js +0 -1
  716. package/web-ui/build/static/kotlin-KCaDUqWq.js +0 -1
  717. package/web-ui/build/static/kumir-yffxUwae.js +0 -1
  718. package/web-ui/build/static/kusto-cV3zbdUQ.js +0 -1
  719. package/web-ui/build/static/lasso-DH3oyNiE.js +0 -1
  720. package/web-ui/build/static/latex-BAyzngso.js +0 -1
  721. package/web-ui/build/static/latex-BHWKh_46.js +0 -1
  722. package/web-ui/build/static/latte-Blg_W9F1.js +0 -1
  723. package/web-ui/build/static/ldif-CkmLAuCD.js +0 -1
  724. package/web-ui/build/static/leaf-wp91yycn.js +0 -1
  725. package/web-ui/build/static/less-BcVttCav.js +0 -1
  726. package/web-ui/build/static/less-DavWq8Ej.js +0 -1
  727. package/web-ui/build/static/lilypond-BDFQdugn.js +0 -1
  728. package/web-ui/build/static/liquid-CEmFNNn_.js +0 -1
  729. package/web-ui/build/static/lisp-CZ9xnOtp.js +0 -1
  730. package/web-ui/build/static/lisp-DmVNCT5A.js +0 -1
  731. package/web-ui/build/static/livecodeserver-CnTXXbyn.js +0 -1
  732. package/web-ui/build/static/livescript-YtsX-KsX.js +0 -1
  733. package/web-ui/build/static/livescript-q7M8NvRi.js +0 -1
  734. package/web-ui/build/static/llvm-BZSRO8TC.js +0 -1
  735. package/web-ui/build/static/llvm-CIH40boh.js +0 -1
  736. package/web-ui/build/static/log-Db10RsDZ.js +0 -1
  737. package/web-ui/build/static/lolcode-p4ZflfJp.js +0 -1
  738. package/web-ui/build/static/lsl-DXh7pjYJ.js +0 -1
  739. package/web-ui/build/static/lua-C31DMdf6.js +0 -1
  740. package/web-ui/build/static/lua-CDtNj-WJ.js +0 -1
  741. package/web-ui/build/static/magma-Do8lsoaB.js +0 -1
  742. package/web-ui/build/static/makefile-DgO7O4GE.js +0 -1
  743. package/web-ui/build/static/makefile-qXSN_Sq3.js +0 -1
  744. package/web-ui/build/static/markdown-0DVf96AH.js +0 -1
  745. package/web-ui/build/static/markdown-DUvwylNF.js +0 -1
  746. package/web-ui/build/static/markup-templating-BEgeUnJB.js +0 -1
  747. package/web-ui/build/static/mathematica-BpImSdDi.js +0 -1
  748. package/web-ui/build/static/matlab-Bq4Kg8f5.js +0 -1
  749. package/web-ui/build/static/matlab-cScwCPnu.js +0 -1
  750. package/web-ui/build/static/maxima-DFa27ffM.js +0 -1
  751. package/web-ui/build/static/maxscript-FgAXJWR-.js +0 -1
  752. package/web-ui/build/static/mel-BB_XdWST.js +0 -1
  753. package/web-ui/build/static/mel-BHQ0e9FG.js +0 -1
  754. package/web-ui/build/static/mercury-zXc4e900.js +0 -1
  755. package/web-ui/build/static/mermaid-BjJdX04L.js +0 -1
  756. package/web-ui/build/static/mipsasm-C_8B_olq.js +0 -1
  757. package/web-ui/build/static/mizar-BPgzC9n4.js +0 -1
  758. package/web-ui/build/static/mizar-KXBoNOjg.js +0 -1
  759. package/web-ui/build/static/mojolicious-UXIt_n7S.js +0 -1
  760. package/web-ui/build/static/mongodb-KNu-iplX.js +0 -1
  761. package/web-ui/build/static/monkey-DtKCan0H.js +0 -1
  762. package/web-ui/build/static/monkey-Sk9JV1i6.js +0 -1
  763. package/web-ui/build/static/moonscript-BHr1aT02.js +0 -1
  764. package/web-ui/build/static/moonscript-C4teXzGl.js +0 -1
  765. package/web-ui/build/static/n1ql-6RIanocw.js +0 -1
  766. package/web-ui/build/static/n1ql-ova2ScLZ.js +0 -1
  767. package/web-ui/build/static/n4js-c8rVS7Gf.js +0 -1
  768. package/web-ui/build/static/nand2tetris-hdl-cMjtYBkP.js +0 -1
  769. package/web-ui/build/static/naniscript-CH96wAj0.js +0 -1
  770. package/web-ui/build/static/nasm-DDq7TMhS.js +0 -1
  771. package/web-ui/build/static/neon-DpyKpY9y.js +0 -1
  772. package/web-ui/build/static/nevod-BFMPW4vr.js +0 -1
  773. package/web-ui/build/static/nginx-BSEzhEoc.js +0 -1
  774. package/web-ui/build/static/nginx-khKNIkjU.js +0 -1
  775. package/web-ui/build/static/nim-BTcQu8Ir.js +0 -1
  776. package/web-ui/build/static/nim-QHQEY_XP.js +0 -1
  777. package/web-ui/build/static/nix-CtfD19iA.js +0 -1
  778. package/web-ui/build/static/nix-DzFReDOl.js +0 -1
  779. package/web-ui/build/static/node-repl-DOV4aoOq.js +0 -1
  780. package/web-ui/build/static/nsis-DdeJutdb.js +0 -1
  781. package/web-ui/build/static/nsis-m7HKG8Ck.js +0 -1
  782. package/web-ui/build/static/objectivec-CaBwHUVA.js +0 -1
  783. package/web-ui/build/static/objectivec-E2Sxhpx3.js +0 -1
  784. package/web-ui/build/static/ocaml-CslucHZs.js +0 -1
  785. package/web-ui/build/static/ocaml-PdR-Fm5g.js +0 -1
  786. package/web-ui/build/static/opencl-BHnw4hIn.js +0 -1
  787. package/web-ui/build/static/openqasm-0Yg2K--f.js +0 -1
  788. package/web-ui/build/static/openscad-DHU3smLY.js +0 -1
  789. package/web-ui/build/static/oxygene-BHgytj3y.js +0 -1
  790. package/web-ui/build/static/oz-BDa_7LoZ.js +0 -1
  791. package/web-ui/build/static/parigp-BOLbAs8r.js +0 -1
  792. package/web-ui/build/static/parser-B8MrBRtL.js +0 -1
  793. package/web-ui/build/static/parser3-DHHKIy7l.js +0 -1
  794. package/web-ui/build/static/pascal-fr5fg72O.js +0 -1
  795. package/web-ui/build/static/pascaligo-Bv9ESutQ.js +0 -1
  796. package/web-ui/build/static/pcaxis-CTxT44xh.js +0 -1
  797. package/web-ui/build/static/peoplecode-DuP5YO5Z.js +0 -1
  798. package/web-ui/build/static/perl-CnR6UBSD.js +0 -1
  799. package/web-ui/build/static/perl-VrmtJoR5.js +0 -1
  800. package/web-ui/build/static/pf-CdAhDTlA.js +0 -1
  801. package/web-ui/build/static/pgsql-izKyeRmK.js +0 -1
  802. package/web-ui/build/static/php-D8b_lajG.js +0 -1
  803. package/web-ui/build/static/php-IMt6Ky04.js +0 -1
  804. package/web-ui/build/static/php-extras-BCkAoLIa.js +0 -1
  805. package/web-ui/build/static/php-template-CpWfthU5.js +0 -1
  806. package/web-ui/build/static/phpdoc-LFhMcc59.js +0 -1
  807. package/web-ui/build/static/plaintext-Cc8p1sBl.js +0 -1
  808. package/web-ui/build/static/plsql-CtgL-GEj.js +0 -1
  809. package/web-ui/build/static/pony-ChSK1r1W.js +0 -1
  810. package/web-ui/build/static/powerquery-Bq9CVFLv.js +0 -1
  811. package/web-ui/build/static/powershell-DJhVY7mv.js +0 -1
  812. package/web-ui/build/static/powershell-DPCxeA_C.js +0 -1
  813. package/web-ui/build/static/processing-BQVkx3d5.js +0 -1
  814. package/web-ui/build/static/processing-Dg6Vk1EX.js +0 -1
  815. package/web-ui/build/static/profile-DAego1Qs.js +0 -1
  816. package/web-ui/build/static/prolog-C8mW1ZKs.js +0 -1
  817. package/web-ui/build/static/prolog-DNoEuBy4.js +0 -1
  818. package/web-ui/build/static/promql-HvkXQ3ai.js +0 -1
  819. package/web-ui/build/static/properties-BvJceoSE.js +0 -1
  820. package/web-ui/build/static/properties-CSR6n3Kz.js +0 -1
  821. package/web-ui/build/static/protobuf-C9KfKNP5.js +0 -1
  822. package/web-ui/build/static/protobuf-CXLzTtwT.js +0 -1
  823. package/web-ui/build/static/psl-DobsNRGm.js +0 -1
  824. package/web-ui/build/static/pug-PmM-JpHf.js +0 -1
  825. package/web-ui/build/static/puppet-CqR72GAW.js +0 -1
  826. package/web-ui/build/static/puppet-yUfG4MKq.js +0 -1
  827. package/web-ui/build/static/pure-D7s0bBCy.js +0 -1
  828. package/web-ui/build/static/purebasic-C52FzmCB.js +0 -1
  829. package/web-ui/build/static/purebasic-DjkzVED2.js +0 -1
  830. package/web-ui/build/static/purescript-D1LK7z8k.js +0 -1
  831. package/web-ui/build/static/python-C97TWczR.js +0 -1
  832. package/web-ui/build/static/python-Dop4CVEu.js +0 -1
  833. package/web-ui/build/static/python-repl-WhdhfdYY.js +0 -1
  834. package/web-ui/build/static/q-C_oxjdmr.js +0 -1
  835. package/web-ui/build/static/q-GDjprcRB.js +0 -1
  836. package/web-ui/build/static/qml-BFTo3N5w.js +0 -1
  837. package/web-ui/build/static/qml-BVflF1jH.js +0 -1
  838. package/web-ui/build/static/qore-PUVehvIq.js +0 -1
  839. package/web-ui/build/static/qsharp-r1qD-Qml.js +0 -1
  840. package/web-ui/build/static/r-CfIF5NTF.js +0 -1
  841. package/web-ui/build/static/r-DExb8B6q.js +0 -1
  842. package/web-ui/build/static/racket-2pRnv9sU.js +0 -1
  843. package/web-ui/build/static/reason-D3le1Ik7.js +0 -1
  844. package/web-ui/build/static/reasonml-B_LPCqhs.js +0 -1
  845. package/web-ui/build/static/regex-CUJGaatT.js +0 -1
  846. package/web-ui/build/static/rego-D-EIm0D3.js +0 -1
  847. package/web-ui/build/static/renpy-D1xy8Iy-.js +0 -1
  848. package/web-ui/build/static/rest-CD69jFkK.js +0 -1
  849. package/web-ui/build/static/rib-CPUDHLwl.js +0 -1
  850. package/web-ui/build/static/rip-Cxeddhze.js +0 -1
  851. package/web-ui/build/static/roboconf-C2H4bOQQ.js +0 -1
  852. package/web-ui/build/static/roboconf-DBGmRhwT.js +0 -1
  853. package/web-ui/build/static/robotframework-DMqmmtCh.js +0 -1
  854. package/web-ui/build/static/routeros-BX8G8D7_.js +0 -1
  855. package/web-ui/build/static/rsl-DBR_c-1r.js +0 -1
  856. package/web-ui/build/static/ruby-CcHtNU-6.js +0 -1
  857. package/web-ui/build/static/ruby-wb1QW8WC.js +0 -1
  858. package/web-ui/build/static/ruleslanguage-aX2-7OxM.js +0 -1
  859. package/web-ui/build/static/rust-Bd2sp6pf.js +0 -1
  860. package/web-ui/build/static/rust-DVifCW-g.js +0 -1
  861. package/web-ui/build/static/sas-6QrlvVKK.js +0 -1
  862. package/web-ui/build/static/sas-ByAinTlk.js +0 -1
  863. package/web-ui/build/static/sass-BKQhUGnZ.js +0 -1
  864. package/web-ui/build/static/scala-BhSxUbI1.js +0 -1
  865. package/web-ui/build/static/scala-Dn8_PN1b.js +0 -1
  866. package/web-ui/build/static/scheme-DtqAbiCr.js +0 -1
  867. package/web-ui/build/static/scheme-HiyfIgoM.js +0 -1
  868. package/web-ui/build/static/scilab-SrFR1XYu.js +0 -1
  869. package/web-ui/build/static/scss-C7zap9cM.js +0 -1
  870. package/web-ui/build/static/scss-ztCHTX-C.js +0 -1
  871. package/web-ui/build/static/shell-CnNWN3oe.js +0 -1
  872. package/web-ui/build/static/shell-session-DztxruRN.js +0 -1
  873. package/web-ui/build/static/smali-CRW3Hn6u.js +0 -1
  874. package/web-ui/build/static/smali-Uc8xwa45.js +0 -1
  875. package/web-ui/build/static/smalltalk-BJAea-kO.js +0 -1
  876. package/web-ui/build/static/smalltalk-DMZhndty.js +0 -1
  877. package/web-ui/build/static/smarty-BRqtJvDf.js +0 -1
  878. package/web-ui/build/static/sml-B9lfSzv2.js +0 -1
  879. package/web-ui/build/static/sml-DNOuaX1q.js +0 -1
  880. package/web-ui/build/static/solidity-CGaCcZCi.js +0 -1
  881. package/web-ui/build/static/solution-file-WeOld1Kf.js +0 -1
  882. package/web-ui/build/static/soy-CZB6ZNvF.js +0 -1
  883. package/web-ui/build/static/sparql-Do2fgKpd.js +0 -1
  884. package/web-ui/build/static/splunk-spl-C6RHRf8q.js +0 -1
  885. package/web-ui/build/static/sqf-BcN5vl8t.js +0 -1
  886. package/web-ui/build/static/sqf-Dj_a7IxO.js +0 -1
  887. package/web-ui/build/static/sql-B87I-FaL.js +0 -1
  888. package/web-ui/build/static/sql-CQzFE9Uc.js +0 -1
  889. package/web-ui/build/static/sql_more-IfJrJKAw.js +0 -1
  890. package/web-ui/build/static/squirrel-BRCBHmD6.js +0 -1
  891. package/web-ui/build/static/stan-BkZcpomr.js +0 -1
  892. package/web-ui/build/static/stan-DWGK62T_.js +0 -1
  893. package/web-ui/build/static/stata-C2YxAJhZ.js +0 -1
  894. package/web-ui/build/static/step21-DYmM5W5o.js +0 -1
  895. package/web-ui/build/static/stylus-BOr2WgLI.js +0 -1
  896. package/web-ui/build/static/stylus-CUInBPw_.js +0 -1
  897. package/web-ui/build/static/subunit-Dg4frc3d.js +0 -1
  898. package/web-ui/build/static/swift-BjspT_iz.js +0 -1
  899. package/web-ui/build/static/swift-rTkDrEgC.js +0 -1
  900. package/web-ui/build/static/systemd-CRrXJX07.js +0 -1
  901. package/web-ui/build/static/t4-cs-XlWVo-Wn.js +0 -1
  902. package/web-ui/build/static/t4-templating-Dt1Cb58v.js +0 -1
  903. package/web-ui/build/static/t4-vb-D42ADTJB.js +0 -1
  904. package/web-ui/build/static/taggerscript-N3Ft4sxA.js +0 -1
  905. package/web-ui/build/static/tap-CSN85wMv.js +0 -1
  906. package/web-ui/build/static/tap-CnqkUDXA.js +0 -1
  907. package/web-ui/build/static/tcl-Bt3tSIZl.js +0 -1
  908. package/web-ui/build/static/tcl-DpH3RZy1.js +0 -1
  909. package/web-ui/build/static/textile-umRMpilC.js +0 -1
  910. package/web-ui/build/static/thrift-QmVqpkfA.js +0 -1
  911. package/web-ui/build/static/toml-DnpdwodL.js +0 -1
  912. package/web-ui/build/static/tp-C6DUhXUh.js +0 -1
  913. package/web-ui/build/static/tremor-CUlFpVPg.js +0 -1
  914. package/web-ui/build/static/tsx-DxkoiUWp.js +0 -1
  915. package/web-ui/build/static/tt2-DtlKol3c.js +0 -1
  916. package/web-ui/build/static/turtle-CXUTzYdG.js +0 -1
  917. package/web-ui/build/static/twig-CKDPuEw2.js +0 -1
  918. package/web-ui/build/static/twig-DyUVOKrP.js +0 -1
  919. package/web-ui/build/static/typescript-CoOCr-sy.js +0 -1
  920. package/web-ui/build/static/typescript-DWRTzUkQ.js +0 -1
  921. package/web-ui/build/static/typoscript-DYej8cr8.js +0 -1
  922. package/web-ui/build/static/unrealscript-BhLFmWwl.js +0 -1
  923. package/web-ui/build/static/uorazor-BSVFfcGU.js +0 -1
  924. package/web-ui/build/static/uri-C9AomfWW.js +0 -1
  925. package/web-ui/build/static/v-Cymts6Dt.js +0 -1
  926. package/web-ui/build/static/vala-Ba0VW_4J.js +0 -1
  927. package/web-ui/build/static/vala-DEgjPvtK.js +0 -1
  928. package/web-ui/build/static/vbnet-BARjUM89.js +0 -1
  929. package/web-ui/build/static/vbnet-BqQ_vQ6x.js +0 -1
  930. package/web-ui/build/static/vbscript-0MN-MWsT.js +0 -1
  931. package/web-ui/build/static/vbscript-html-ChxcfYOz.js +0 -1
  932. package/web-ui/build/static/velocity-D-GUSd2k.js +0 -1
  933. package/web-ui/build/static/verilog-B3i4ra9i.js +0 -1
  934. package/web-ui/build/static/verilog-Ceg4SzRV.js +0 -1
  935. package/web-ui/build/static/vhdl-CV-wCwb-.js +0 -1
  936. package/web-ui/build/static/vhdl-kOCdWLTF.js +0 -1
  937. package/web-ui/build/static/vim-CQKKnLA5.js +0 -1
  938. package/web-ui/build/static/vim-D_4b4vLF.js +0 -1
  939. package/web-ui/build/static/visual-basic-CivDY1tN.js +0 -1
  940. package/web-ui/build/static/warpscript-BrpGurFU.js +0 -1
  941. package/web-ui/build/static/wasm-D03CVhDa.js +0 -1
  942. package/web-ui/build/static/web-idl-Dkpybgl6.js +0 -1
  943. package/web-ui/build/static/wiki-bJYJ6Gpa.js +0 -1
  944. package/web-ui/build/static/wolfram-CGCN9m9E.js +0 -1
  945. package/web-ui/build/static/wren-A6lX_oDU.js +0 -1
  946. package/web-ui/build/static/x86asm-jW1AxoFe.js +0 -1
  947. package/web-ui/build/static/xeora-ClwjRZuP.js +0 -1
  948. package/web-ui/build/static/xl-D4Brj665.js +0 -1
  949. package/web-ui/build/static/xml-FLJc8kc_.js +0 -1
  950. package/web-ui/build/static/xml-doc-EGzalCQd.js +0 -1
  951. package/web-ui/build/static/xojo-CceyP-U4.js +0 -1
  952. package/web-ui/build/static/xquery-AqDaorVp.js +0 -1
  953. package/web-ui/build/static/xquery-CC4CdVPw.js +0 -1
  954. package/web-ui/build/static/yaml-CSGvIXJS.js +0 -1
  955. package/web-ui/build/static/yaml-Dv98V3q0.js +0 -1
  956. package/web-ui/build/static/yang-DEa3bQVw.js +0 -1
  957. package/web-ui/build/static/zephir-EbYOiPVH.js +0 -1
  958. package/web-ui/build/static/zig-DoeoftqW.js +0 -1
package/bin/cli.js CHANGED
@@ -17,10 +17,18 @@ import { dirname, join } from 'path';
17
17
  import { spawn } from 'child_process';
18
18
  import { readFileSync } from 'fs';
19
19
  import http from 'http';
20
+ import { runUpdateCheck } from '../src/utilities/updateNotifier.js';
20
21
 
21
22
  const __filename = fileURLToPath(import.meta.url);
22
23
  const __dirname = dirname(__filename);
23
24
 
25
+ // Fire the update-notifier check as soon as the process starts. The
26
+ // helper is non-blocking (it schedules a background fetch and reads
27
+ // from a tiny on-disk cache for the next run) and silently skips
28
+ // every failure mode — missing dep, no network, kill-switch env,
29
+ // not-globally-installed. Worst case: the banner just doesn't appear.
30
+ runUpdateCheck().catch(() => { /* never propagate */ });
31
+
24
32
  // Default configuration
25
33
  const DEFAULT_PORT = 8080;
26
34
  // Use 127.0.0.1 instead of 'localhost' to avoid IPv6 issues in WSL2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loxia-labs/loxia-autopilot-one",
3
- "version": "4.6.2",
3
+ "version": "4.7.0",
4
4
  "description": "Loxia AI Agents System - No-code/vibe-code/companion-coder platform",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Tripwire for the auto-update configuration in package.json.
3
+ *
4
+ * Catches the class of regression where someone bumps deps or
5
+ * re-formats the build block and accidentally drops:
6
+ * - the `update-notifier` runtime dep (CLI banner stops working)
7
+ * - the `electron-updater` optional dep (Electron updates stop)
8
+ * - the `build.publish` block (electron-builder stops generating
9
+ * latest.yml + electron-updater has nothing to read)
10
+ *
11
+ * If you intentionally remove any of these, update this test in the
12
+ * SAME commit and explain in the test diff why.
13
+ */
14
+
15
+ import { describe, test, expect } from '@jest/globals';
16
+ import { readFileSync } from 'node:fs';
17
+ import { join, dirname } from 'node:path';
18
+ import { fileURLToPath } from 'node:url';
19
+
20
+ const __dirname = dirname(fileURLToPath(import.meta.url));
21
+ const REPO_ROOT = join(__dirname, '..', '..');
22
+ const pkg = JSON.parse(readFileSync(join(REPO_ROOT, 'package.json'), 'utf8'));
23
+
24
+ describe('package.json — auto-update presence', () => {
25
+ test('update-notifier is in dependencies (CLI banner)', () => {
26
+ expect(pkg.dependencies).toBeDefined();
27
+ expect(pkg.dependencies['update-notifier']).toBeTruthy();
28
+ });
29
+
30
+ test('electron-updater is in optionalDependencies (Electron build only)', () => {
31
+ expect(pkg.optionalDependencies?.['electron-updater']).toBeTruthy();
32
+ });
33
+
34
+ test('electron-builder has a publish provider configured', () => {
35
+ expect(pkg.build).toBeDefined();
36
+ expect(Array.isArray(pkg.build.publish) || typeof pkg.build.publish === 'object').toBe(true);
37
+ const entries = Array.isArray(pkg.build.publish) ? pkg.build.publish : [pkg.build.publish];
38
+ expect(entries.length).toBeGreaterThan(0);
39
+ // electron-updater requires a `provider` field on each publish entry.
40
+ for (const entry of entries) {
41
+ expect(entry.provider).toBeTruthy();
42
+ }
43
+ });
44
+ });
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Tripwire: the npm-publish workflow must NOT re-introduce
3
+ * `javascript-obfuscator` or any other source-modifying step that
4
+ * would defeat the explicit decision in commit removing obfuscation.
5
+ *
6
+ * If you genuinely want to bring obfuscation back, change this test
7
+ * AND record the rationale in the workflow's leading comment block.
8
+ * Don't just delete the test.
9
+ */
10
+
11
+ import { describe, test, expect } from '@jest/globals';
12
+ import { readFileSync, readdirSync } from 'node:fs';
13
+ import { join, dirname } from 'node:path';
14
+ import { fileURLToPath } from 'node:url';
15
+
16
+ const __dirname = dirname(fileURLToPath(import.meta.url));
17
+ const REPO_ROOT = join(__dirname, '..', '..');
18
+ const WORKFLOWS_DIR = join(REPO_ROOT, '.github', 'workflows');
19
+
20
+ const FORBIDDEN_IN_PUBLISH = [
21
+ 'javascript-obfuscator',
22
+ 'javascript_obfuscator',
23
+ ];
24
+
25
+ describe('release workflows — obfuscation absence', () => {
26
+ test('publish-npm-trusted.yml contains no obfuscator install or invocation', () => {
27
+ const yaml = readFileSync(join(WORKFLOWS_DIR, 'publish-npm-trusted.yml'), 'utf8');
28
+ for (const needle of FORBIDDEN_IN_PUBLISH) {
29
+ // Tolerate the literal mention inside a comment block that
30
+ // documents the removal — but not in any other context.
31
+ const lines = yaml.split('\n');
32
+ const offending = lines
33
+ .map((line, idx) => ({ line, idx }))
34
+ .filter(({ line }) => line.includes(needle))
35
+ .filter(({ line }) => !/^\s*#/.test(line) && !/^\s*\/\//.test(line));
36
+ expect(offending).toEqual([]);
37
+ }
38
+ });
39
+
40
+ test('workflow YAML is syntactically valid (no orphaned steps)', () => {
41
+ const yaml = readFileSync(join(WORKFLOWS_DIR, 'publish-npm-trusted.yml'), 'utf8');
42
+ // We don't bundle a YAML parser into the CLI repo; a structural
43
+ // smoke test is enough to catch the most common form of breakage
44
+ // (deleting a step without removing the leading `- name:`).
45
+ const stepCount = (yaml.match(/^\s{4,6}- name:/gm) || []).length;
46
+ expect(stepCount).toBeGreaterThan(5);
47
+ // Each top-level step name should be followed by either `run:` or `uses:`
48
+ const lines = yaml.split('\n');
49
+ let pendingStepLine = null;
50
+ for (let i = 0; i < lines.length; i++) {
51
+ if (/^\s{4,6}- name:/.test(lines[i])) {
52
+ pendingStepLine = i;
53
+ } else if (pendingStepLine != null && /^\s{6,8}(run|uses):/.test(lines[i])) {
54
+ pendingStepLine = null;
55
+ } else if (pendingStepLine != null && /^\s{4,6}- /.test(lines[i])) {
56
+ throw new Error(`step at line ${pendingStepLine + 1} has no run/uses`);
57
+ }
58
+ }
59
+ });
60
+
61
+ test('every yml file in .github/workflows parses (basic balance check)', () => {
62
+ const files = readdirSync(WORKFLOWS_DIR).filter(f => f.endsWith('.yml') || f.endsWith('.yaml'));
63
+ expect(files.length).toBeGreaterThan(0);
64
+ for (const f of files) {
65
+ const yaml = readFileSync(join(WORKFLOWS_DIR, f), 'utf8');
66
+ // Naive but useful: every workflow should have `jobs:` and at
67
+ // least one step.
68
+ expect(yaml).toMatch(/^jobs:/m);
69
+ expect(yaml).toMatch(/^\s+steps:/m);
70
+ }
71
+ });
72
+ });
@@ -0,0 +1,429 @@
1
+ /**
2
+ * Tests for the account-proxy router on the local CLI server.
3
+ *
4
+ * These tests cover three categories of behavior:
5
+ *
6
+ * 1. Auth gating — every route MUST return 401 + `not_signed_in`
7
+ * when there's no JWT, never silently fall through to the
8
+ * backend with no auth.
9
+ *
10
+ * 2. JWT forwarding + envelope normalisation — when a JWT is
11
+ * present, the backend is called with a Bearer header, and
12
+ * every response (200, 404, 503, JSON-shape variations) lands
13
+ * in our standard `{ success, error?, code? }` envelope.
14
+ *
15
+ * 3. Handoff URL building — the FE never gets to pick which
16
+ * portal we redirect to, and the handoff is only ever the
17
+ * short-lived token, never the long-lived JWT.
18
+ *
19
+ * The router is constructed with injected `getJwt`, `getBrand`, and
20
+ * `fetchImpl` — no real HTTP, no real `lastAuthResult` plumbing.
21
+ */
22
+
23
+ import { describe, test, expect, jest } from '@jest/globals';
24
+ import express from 'express';
25
+ import { createServer } from 'http';
26
+ import { createAccountRouter, ERROR_CODES, __test__ } from '../accountRoutes.js';
27
+
28
+ const SAMPLE_JWT = 'eyJ.sample.jwt';
29
+ const BACKEND_URL = 'https://backend.test';
30
+
31
+ async function startApp(handler) {
32
+ const app = express();
33
+ app.use(express.json());
34
+ handler(app);
35
+ const server = createServer(app);
36
+ await new Promise(r => server.listen(0, r));
37
+ return { server, baseUrl: `http://127.0.0.1:${server.address().port}` };
38
+ }
39
+
40
+ async function stop(server) { if (server) await new Promise(r => server.close(r)); }
41
+
42
+ function mountRouter({ jwt = SAMPLE_JWT, brand = 'autopilot', fetchImpl, logger = { warn: () => {} } } = {}) {
43
+ const router = createAccountRouter({
44
+ getJwt: () => jwt,
45
+ getBrand: () => brand,
46
+ backendBaseUrl: BACKEND_URL,
47
+ fetchImpl,
48
+ logger,
49
+ });
50
+ return async () => {
51
+ return startApp(app => app.use('/api/account', router));
52
+ };
53
+ }
54
+
55
+ // ────────────────────────────────────────────────────────────────────
56
+ // Constructor guards
57
+ // ────────────────────────────────────────────────────────────────────
58
+ describe('createAccountRouter — constructor', () => {
59
+ test('throws when getJwt is missing', () => {
60
+ expect(() => createAccountRouter({ getBrand: () => 'autopilot' })).toThrow(/getJwt/);
61
+ });
62
+ test('throws when getBrand is missing', () => {
63
+ expect(() => createAccountRouter({ getJwt: () => null })).toThrow(/getBrand/);
64
+ });
65
+ });
66
+
67
+ // ────────────────────────────────────────────────────────────────────
68
+ // Auth gating
69
+ // ────────────────────────────────────────────────────────────────────
70
+ describe('account routes — auth gating', () => {
71
+ test.each([
72
+ ['GET', '/api/account/profile', undefined],
73
+ ['GET', '/api/account/balance', undefined],
74
+ ['GET', '/api/account/keys', undefined],
75
+ ['POST', '/api/account/keys', { name: 'CI key' }],
76
+ ['DELETE', '/api/account/keys/some-id', undefined],
77
+ ['POST', '/api/account/handoff', {}],
78
+ ])('%s %s returns 401 not_signed_in when JWT is absent', async (method, path, body) => {
79
+ const startServer = mountRouter({ jwt: null, fetchImpl: jest.fn() });
80
+ const { server, baseUrl } = await startServer();
81
+ try {
82
+ const r = await fetch(`${baseUrl}${path}`, {
83
+ method,
84
+ headers: { 'Content-Type': 'application/json' },
85
+ body: body !== undefined ? JSON.stringify(body) : undefined,
86
+ });
87
+ expect(r.status).toBe(401);
88
+ const json = await r.json();
89
+ expect(json.success).toBe(false);
90
+ expect(json.code).toBe(ERROR_CODES.NOT_SIGNED_IN);
91
+ } finally {
92
+ await stop(server);
93
+ }
94
+ });
95
+
96
+ test('backend is never called when JWT is absent', async () => {
97
+ const fetchImpl = jest.fn();
98
+ const startServer = mountRouter({ jwt: null, fetchImpl });
99
+ const { server, baseUrl } = await startServer();
100
+ try {
101
+ await fetch(`${baseUrl}/api/account/profile`);
102
+ expect(fetchImpl).not.toHaveBeenCalled();
103
+ } finally {
104
+ await stop(server);
105
+ }
106
+ });
107
+ });
108
+
109
+ // ────────────────────────────────────────────────────────────────────
110
+ // Profile + balance + keys list
111
+ // ────────────────────────────────────────────────────────────────────
112
+ describe('GET /api/account/profile', () => {
113
+ test('forwards JWT and returns normalized { user } even when backend returns flat user object', async () => {
114
+ const fetchImpl = jest.fn().mockResolvedValue({
115
+ ok: true, status: 200,
116
+ text: async () => JSON.stringify({ id: 'u-1', email: 'a@b.com' }),
117
+ });
118
+ const startServer = mountRouter({ fetchImpl });
119
+ const { server, baseUrl } = await startServer();
120
+ try {
121
+ const r = await fetch(`${baseUrl}/api/account/profile`);
122
+ expect(r.status).toBe(200);
123
+ const json = await r.json();
124
+ expect(json).toEqual({ success: true, user: { id: 'u-1', email: 'a@b.com' } });
125
+ expect(fetchImpl).toHaveBeenCalledTimes(1);
126
+ const [url, opts] = fetchImpl.mock.calls[0];
127
+ expect(url).toBe(`${BACKEND_URL}/auth/me`);
128
+ expect(opts.headers.Authorization).toBe(`Bearer ${SAMPLE_JWT}`);
129
+ } finally {
130
+ await stop(server);
131
+ }
132
+ });
133
+
134
+ test('passes nested { user } through unchanged', async () => {
135
+ const fetchImpl = jest.fn().mockResolvedValue({
136
+ ok: true, status: 200,
137
+ text: async () => JSON.stringify({ user: { id: 'u-2', email: 'c@d.com' } }),
138
+ });
139
+ const startServer = mountRouter({ fetchImpl });
140
+ const { server, baseUrl } = await startServer();
141
+ try {
142
+ const json = await (await fetch(`${baseUrl}/api/account/profile`)).json();
143
+ expect(json.user).toEqual({ id: 'u-2', email: 'c@d.com' });
144
+ } finally {
145
+ await stop(server);
146
+ }
147
+ });
148
+ });
149
+
150
+ describe('GET /api/account/balance', () => {
151
+ test('proxies to /account/profile and returns the body verbatim', async () => {
152
+ const fetchImpl = jest.fn().mockResolvedValue({
153
+ ok: true, status: 200,
154
+ text: async () => JSON.stringify({ balance: 12.34, plan: 'pro' }),
155
+ });
156
+ const startServer = mountRouter({ fetchImpl });
157
+ const { server, baseUrl } = await startServer();
158
+ try {
159
+ const r = await fetch(`${baseUrl}/api/account/balance`);
160
+ const json = await r.json();
161
+ expect(json).toEqual({ balance: 12.34, plan: 'pro' });
162
+ expect(fetchImpl.mock.calls[0][0]).toBe(`${BACKEND_URL}/account/profile`);
163
+ } finally {
164
+ await stop(server);
165
+ }
166
+ });
167
+ });
168
+
169
+ describe('GET /api/account/keys', () => {
170
+ test('returns the backend response verbatim', async () => {
171
+ const fetchImpl = jest.fn().mockResolvedValue({
172
+ ok: true, status: 200,
173
+ text: async () => JSON.stringify({ apiKeys: [{ id: 'k1', name: 'CI', status: 'active' }] }),
174
+ });
175
+ const startServer = mountRouter({ fetchImpl });
176
+ const { server, baseUrl } = await startServer();
177
+ try {
178
+ const r = await fetch(`${baseUrl}/api/account/keys`);
179
+ const json = await r.json();
180
+ expect(json.apiKeys).toHaveLength(1);
181
+ expect(fetchImpl.mock.calls[0][0]).toBe(`${BACKEND_URL}/auth/apikeys`);
182
+ } finally {
183
+ await stop(server);
184
+ }
185
+ });
186
+ });
187
+
188
+ // ────────────────────────────────────────────────────────────────────
189
+ // Key create — input validation + one-time-reveal pass-through
190
+ // ────────────────────────────────────────────────────────────────────
191
+ describe('POST /api/account/keys', () => {
192
+ test('400 + bad_request when name is missing', async () => {
193
+ const fetchImpl = jest.fn();
194
+ const startServer = mountRouter({ fetchImpl });
195
+ const { server, baseUrl } = await startServer();
196
+ try {
197
+ const r = await fetch(`${baseUrl}/api/account/keys`, {
198
+ method: 'POST',
199
+ headers: { 'Content-Type': 'application/json' },
200
+ body: JSON.stringify({}),
201
+ });
202
+ expect(r.status).toBe(400);
203
+ const json = await r.json();
204
+ expect(json.code).toBe(ERROR_CODES.BAD_REQUEST);
205
+ expect(fetchImpl).not.toHaveBeenCalled();
206
+ } finally {
207
+ await stop(server);
208
+ }
209
+ });
210
+
211
+ test('400 + bad_request when name is whitespace-only', async () => {
212
+ const startServer = mountRouter({ fetchImpl: jest.fn() });
213
+ const { server, baseUrl } = await startServer();
214
+ try {
215
+ const r = await fetch(`${baseUrl}/api/account/keys`, {
216
+ method: 'POST',
217
+ headers: { 'Content-Type': 'application/json' },
218
+ body: JSON.stringify({ name: ' ' }),
219
+ });
220
+ expect(r.status).toBe(400);
221
+ } finally {
222
+ await stop(server);
223
+ }
224
+ });
225
+
226
+ test('forwards trimmed name + optional expiresIn, returns one-time key', async () => {
227
+ const fetchImpl = jest.fn().mockResolvedValue({
228
+ ok: true, status: 201,
229
+ text: async () => JSON.stringify({
230
+ message: 'API key generated successfully',
231
+ apiKey: { id: 'k-new', name: 'mykey', key: 'lx_secretvalue', createdAt: '2026-05-11', expiresAt: null },
232
+ }),
233
+ });
234
+ const startServer = mountRouter({ fetchImpl });
235
+ const { server, baseUrl } = await startServer();
236
+ try {
237
+ const r = await fetch(`${baseUrl}/api/account/keys`, {
238
+ method: 'POST',
239
+ headers: { 'Content-Type': 'application/json' },
240
+ body: JSON.stringify({ name: ' mykey ', expiresIn: 30 }),
241
+ });
242
+ expect(r.status).toBe(201);
243
+ const json = await r.json();
244
+ expect(json.apiKey.key).toBe('lx_secretvalue');
245
+ const sentBody = JSON.parse(fetchImpl.mock.calls[0][1].body);
246
+ expect(sentBody.name).toBe('mykey');
247
+ expect(sentBody.expiresIn).toBe(30);
248
+ } finally {
249
+ await stop(server);
250
+ }
251
+ });
252
+ });
253
+
254
+ // ────────────────────────────────────────────────────────────────────
255
+ // Key revoke
256
+ // ────────────────────────────────────────────────────────────────────
257
+ describe('DELETE /api/account/keys/:id', () => {
258
+ test('rejects an id with unsafe characters before hitting the backend', async () => {
259
+ const fetchImpl = jest.fn();
260
+ const startServer = mountRouter({ fetchImpl });
261
+ const { server, baseUrl } = await startServer();
262
+ try {
263
+ // Express routes won't let `..` through directly, but
264
+ // `<script>` would. Either way, our regex blocks it.
265
+ const r = await fetch(`${baseUrl}/api/account/keys/bad%20id%21`, { method: 'DELETE' });
266
+ expect(r.status).toBe(400);
267
+ expect(fetchImpl).not.toHaveBeenCalled();
268
+ } finally {
269
+ await stop(server);
270
+ }
271
+ });
272
+
273
+ test('happy path proxies the revoke', async () => {
274
+ const fetchImpl = jest.fn().mockResolvedValue({
275
+ ok: true, status: 200,
276
+ text: async () => JSON.stringify({ message: 'API key revoked successfully' }),
277
+ });
278
+ const startServer = mountRouter({ fetchImpl });
279
+ const { server, baseUrl } = await startServer();
280
+ try {
281
+ const r = await fetch(`${baseUrl}/api/account/keys/abc-123_XYZ`, { method: 'DELETE' });
282
+ expect(r.status).toBe(200);
283
+ const [url, opts] = fetchImpl.mock.calls[0];
284
+ expect(url).toBe(`${BACKEND_URL}/auth/apikey/abc-123_XYZ`);
285
+ expect(opts.method).toBe('DELETE');
286
+ } finally {
287
+ await stop(server);
288
+ }
289
+ });
290
+ });
291
+
292
+ // ────────────────────────────────────────────────────────────────────
293
+ // Handoff URL
294
+ // ────────────────────────────────────────────────────────────────────
295
+ describe('POST /api/account/handoff', () => {
296
+ test('mints token via backend and returns autopilot portal URL with handoff query', async () => {
297
+ const fetchImpl = jest.fn().mockResolvedValue({
298
+ ok: true, status: 200,
299
+ text: async () => JSON.stringify({ handoff: 'handoff-token-xyz' }),
300
+ });
301
+ const startServer = mountRouter({ brand: 'autopilot', fetchImpl });
302
+ const { server, baseUrl } = await startServer();
303
+ try {
304
+ const r = await fetch(`${baseUrl}/api/account/handoff`, {
305
+ method: 'POST',
306
+ headers: { 'Content-Type': 'application/json' },
307
+ body: JSON.stringify({ destination: 'payment' }),
308
+ });
309
+ expect(r.status).toBe(200);
310
+ const json = await r.json();
311
+ expect(json.url).toBe('https://autopilot.loxia.ai/payment?handoff=handoff-token-xyz');
312
+ const fetchOpts = fetchImpl.mock.calls[0][1];
313
+ expect(fetchOpts.method).toBe('POST');
314
+ expect(JSON.parse(fetchOpts.body).purpose).toBe('portal-payment');
315
+ } finally {
316
+ await stop(server);
317
+ }
318
+ });
319
+
320
+ test('switches portal host for OnBuzz brand', async () => {
321
+ const fetchImpl = jest.fn().mockResolvedValue({
322
+ ok: true, status: 200,
323
+ text: async () => JSON.stringify({ handoff: 'tok' }),
324
+ });
325
+ const startServer = mountRouter({ brand: 'onbuzz', fetchImpl });
326
+ const { server, baseUrl } = await startServer();
327
+ try {
328
+ const json = await (await fetch(`${baseUrl}/api/account/handoff`, {
329
+ method: 'POST', headers: { 'Content-Type': 'application/json' }, body: '{}',
330
+ })).json();
331
+ expect(json.url.startsWith(__test__.PORTAL_URLS_BY_BRAND.onbuzz)).toBe(true);
332
+ } finally {
333
+ await stop(server);
334
+ }
335
+ });
336
+
337
+ test('falls back to "payment" when destination is unknown (closed allowlist)', async () => {
338
+ const fetchImpl = jest.fn().mockResolvedValue({
339
+ ok: true, status: 200,
340
+ text: async () => JSON.stringify({ handoff: 'tok' }),
341
+ });
342
+ const startServer = mountRouter({ fetchImpl });
343
+ const { server, baseUrl } = await startServer();
344
+ try {
345
+ const json = await (await fetch(`${baseUrl}/api/account/handoff`, {
346
+ method: 'POST', headers: { 'Content-Type': 'application/json' },
347
+ body: JSON.stringify({ destination: '../evil' }),
348
+ })).json();
349
+ // Unknown destination falls back to /payment, NOT echoed as /../evil
350
+ expect(json.url).toContain('/payment?handoff=');
351
+ expect(json.url).not.toContain('evil');
352
+ } finally {
353
+ await stop(server);
354
+ }
355
+ });
356
+
357
+ test('502 when backend response lacks handoff field', async () => {
358
+ const fetchImpl = jest.fn().mockResolvedValue({
359
+ ok: true, status: 200, text: async () => JSON.stringify({ something_else: 'x' }),
360
+ });
361
+ const startServer = mountRouter({ fetchImpl });
362
+ const { server, baseUrl } = await startServer();
363
+ try {
364
+ const r = await fetch(`${baseUrl}/api/account/handoff`, {
365
+ method: 'POST', headers: { 'Content-Type': 'application/json' }, body: '{}',
366
+ });
367
+ expect(r.status).toBe(502);
368
+ } finally {
369
+ await stop(server);
370
+ }
371
+ });
372
+ });
373
+
374
+ // ────────────────────────────────────────────────────────────────────
375
+ // Backend error translation
376
+ // ────────────────────────────────────────────────────────────────────
377
+ describe('proxy error envelopes', () => {
378
+ test('non-OK response is converted to { success:false, code:backend_error }', async () => {
379
+ const fetchImpl = jest.fn().mockResolvedValue({
380
+ ok: false, status: 500,
381
+ text: async () => JSON.stringify({ error: 'something broke' }),
382
+ });
383
+ const startServer = mountRouter({ fetchImpl });
384
+ const { server, baseUrl } = await startServer();
385
+ try {
386
+ const r = await fetch(`${baseUrl}/api/account/profile`);
387
+ expect(r.status).toBe(500);
388
+ const json = await r.json();
389
+ expect(json).toEqual({
390
+ success: false,
391
+ error: 'something broke',
392
+ code: ERROR_CODES.BACKEND_ERROR,
393
+ });
394
+ } finally {
395
+ await stop(server);
396
+ }
397
+ });
398
+
399
+ test('404 maps to code:not_found', async () => {
400
+ const fetchImpl = jest.fn().mockResolvedValue({
401
+ ok: false, status: 404,
402
+ text: async () => JSON.stringify({ error: 'nope' }),
403
+ });
404
+ const startServer = mountRouter({ fetchImpl });
405
+ const { server, baseUrl } = await startServer();
406
+ try {
407
+ const r = await fetch(`${baseUrl}/api/account/keys`);
408
+ expect(r.status).toBe(404);
409
+ const json = await r.json();
410
+ expect(json.code).toBe(ERROR_CODES.NOT_FOUND);
411
+ } finally {
412
+ await stop(server);
413
+ }
414
+ });
415
+
416
+ test('network failure becomes 503 + code:network_error', async () => {
417
+ const fetchImpl = jest.fn().mockRejectedValue(new Error('ECONNREFUSED'));
418
+ const startServer = mountRouter({ fetchImpl });
419
+ const { server, baseUrl } = await startServer();
420
+ try {
421
+ const r = await fetch(`${baseUrl}/api/account/profile`);
422
+ expect(r.status).toBe(503);
423
+ const json = await r.json();
424
+ expect(json.code).toBe(ERROR_CODES.NETWORK_ERROR);
425
+ } finally {
426
+ await stop(server);
427
+ }
428
+ });
429
+ });
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Contract test: methods that `webServer.js` calls on `ApiKeyManager`
3
+ * MUST exist on the real class.
4
+ *
5
+ * Bug history this guards against:
6
+ * - 2026-05: webServer's /api/auth/signout called
7
+ * `apiKeyManager.removeKeys(null)` but the real method is
8
+ * `removeSessionKeys`. Sign-out 500'd at runtime. The existing
9
+ * `authRoutes.test.js` happened to pass because it built its own
10
+ * mock `apiKeyManager` with the wrong method names — the mock and
11
+ * the production caller agreed with each other, but neither agreed
12
+ * with the real class. Same drift hit /auth/callback's `setKeys`
13
+ * call, which silently failed to persist API keys from OAuth.
14
+ *
15
+ * This file imports the REAL ApiKeyManager and asserts each method
16
+ * webServer.js calls is a function on it. Cheap to maintain — when
17
+ * webServer starts calling a new method, add it here.
18
+ */
19
+
20
+ import { describe, test, expect } from '@jest/globals';
21
+ import ApiKeyManager from '../../services/apiKeyManager.js';
22
+
23
+ /**
24
+ * Every ApiKeyManager method invoked from webServer.js production paths.
25
+ * Update this list when webServer.js starts using a new method.
26
+ */
27
+ const REQUIRED_METHODS = Object.freeze([
28
+ 'setSessionKeys', // /auth/callback, remote-session bootstrap
29
+ 'removeSessionKeys', // /api/auth/signout
30
+ 'getKeysForRequest', // /api/auth/status, /api/auth/resolve, every AI call
31
+ ]);
32
+
33
+ describe('ApiKeyManager contract (methods called by webServer.js)', () => {
34
+ const instance = new ApiKeyManager(/* logger */ null);
35
+
36
+ test.each(REQUIRED_METHODS)('exposes %s as a function', (methodName) => {
37
+ expect(typeof instance[methodName]).toBe('function');
38
+ });
39
+ });
@@ -53,7 +53,7 @@ function buildAuthApp({ apiKeyManager, broadcastToSession, config, logger, fetch
53
53
  }
54
54
 
55
55
  if (apiKey && apiKeyManager) {
56
- await apiKeyManager.setKeys(null, { loxiaApiKey: apiKey });
56
+ await apiKeyManager.setSessionKeys(null, { loxiaApiKey: apiKey });
57
57
  }
58
58
 
59
59
  ctx.lastAuthResult = {
@@ -137,7 +137,7 @@ function buildAuthApp({ apiKeyManager, broadcastToSession, config, logger, fetch
137
137
  app.post('/api/auth/signout', async (req, res) => {
138
138
  try {
139
139
  if (apiKeyManager) {
140
- await apiKeyManager.removeKeys(null);
140
+ await apiKeyManager.removeSessionKeys(null);
141
141
  }
142
142
  ctx.lastAuthResult = null;
143
143
  broadcastToSession(null, {
@@ -177,8 +177,8 @@ function buildAuthApp({ apiKeyManager, broadcastToSession, config, logger, fetch
177
177
  function makeApiKeyManager(initialKey = null) {
178
178
  let storedKey = initialKey;
179
179
  return {
180
- setKeys: jest.fn(async (sessionId, keys) => { storedKey = keys.loxiaApiKey; }),
181
- removeKeys: jest.fn(async () => { storedKey = null; }),
180
+ setSessionKeys: jest.fn(async (sessionId, keys) => { storedKey = keys.loxiaApiKey; }),
181
+ removeSessionKeys: jest.fn(async () => { storedKey = null; }),
182
182
  getKeysForRequest: jest.fn(() => storedKey ? { loxiaApiKey: storedKey } : {}),
183
183
  _peek: () => storedKey
184
184
  };
@@ -254,7 +254,7 @@ describe('Auth Routes (webServer.js)', () => {
254
254
  expect(await res.text()).toContain('Authenticated!');
255
255
 
256
256
  // Verify API key was stored
257
- expect(apiKeyManager.setKeys).toHaveBeenCalledWith(null, { loxiaApiKey: 'lx_generated_key_123' });
257
+ expect(apiKeyManager.setSessionKeys).toHaveBeenCalledWith(null, { loxiaApiKey: 'lx_generated_key_123' });
258
258
 
259
259
  // Verify broadcast
260
260
  const broadcast = broadcasts[0];
@@ -438,14 +438,14 @@ describe('Auth Routes (webServer.js)', () => {
438
438
 
439
439
  const body = await (await fetch(`${baseUrl}/api/auth/signout`, { method: 'POST' })).json();
440
440
  expect(body.success).toBe(true);
441
- expect(apiKeyManager.removeKeys).toHaveBeenCalledWith(null);
441
+ expect(apiKeyManager.removeSessionKeys).toHaveBeenCalledWith(null);
442
442
  expect(apiKeyManager._peek()).toBeNull();
443
443
  expect(ctx.lastAuthResult).toBeNull();
444
444
  expect(broadcasts[0].msg.type).toBe('auth_signout');
445
445
  });
446
446
 
447
- it('returns 500 when removeKeys throws', async () => {
448
- const apiKeyManager = { removeKeys: jest.fn().mockRejectedValue(new Error('vault locked')) };
447
+ it('returns 500 when removeSessionKeys throws', async () => {
448
+ const apiKeyManager = { removeSessionKeys: jest.fn().mockRejectedValue(new Error('vault locked')) };
449
449
  const app = buildAuthApp({ apiKeyManager, broadcastToSession, config: {}, logger, fetchImpl: mockFetch, ctx });
450
450
  const { server: s, baseUrl } = await startServer(app);
451
451
  server = s;