onbuzz 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-D_MLuenD.js +1 -0
  24. package/web-ui/build/static/abap-BNvFMksw.js +1 -0
  25. package/web-ui/build/static/abnf-WlnRJIp2.js +1 -0
  26. package/web-ui/build/static/abnf-mx1Wbtnp.js +1 -0
  27. package/web-ui/build/static/accesslog-CJumJuuV.js +1 -0
  28. package/web-ui/build/static/actionscript-B6CbK7n7.js +1 -0
  29. package/web-ui/build/static/actionscript-DZ5xfmPr.js +1 -0
  30. package/web-ui/build/static/ada-CCVAXM0c.js +1 -0
  31. package/web-ui/build/static/ada-DtGkgqC4.js +1 -0
  32. package/web-ui/build/static/agda-gMFRTChb.js +1 -0
  33. package/web-ui/build/static/al-88fYQh4r.js +1 -0
  34. package/web-ui/build/static/angelscript-Bibc8YWJ.js +1 -0
  35. package/web-ui/build/static/antlr4-DgibPJaJ.js +1 -0
  36. package/web-ui/build/static/apache-_pZ-s8l6.js +1 -0
  37. package/web-ui/build/static/apacheconf-YDldOH3Q.js +1 -0
  38. package/web-ui/build/static/apex-CIj23tyF.js +1 -0
  39. package/web-ui/build/static/apl-DtRSC0Xv.js +1 -0
  40. package/web-ui/build/static/applescript-CKhcPsla.js +1 -0
  41. package/web-ui/build/static/applescript-DuJeHJ1r.js +1 -0
  42. package/web-ui/build/static/aql-BgmI8Ors.js +1 -0
  43. package/web-ui/build/static/arcade-BX83978b.js +1 -0
  44. package/web-ui/build/static/arduino-BVdatcJb.js +1 -0
  45. package/web-ui/build/static/arduino-h6ifuWka.js +1 -0
  46. package/web-ui/build/static/arff-DHmbMeIA.js +1 -0
  47. package/web-ui/build/static/armasm-DiDgI5h5.js +1 -0
  48. package/web-ui/build/static/asciidoc-CBro7xXU.js +1 -0
  49. package/web-ui/build/static/asciidoc-DRC2X4bq.js +1 -0
  50. package/web-ui/build/static/asm6502-53VLu0lq.js +1 -0
  51. package/web-ui/build/static/asmatmel-DlRHdXes.js +1 -0
  52. package/web-ui/build/static/aspectj-DTSWMNl9.js +1 -0
  53. package/web-ui/build/static/aspnet-DEUO05ai.js +1 -0
  54. package/web-ui/build/static/autohotkey-3gt8xVo-.js +1 -0
  55. package/web-ui/build/static/autohotkey-BWcbMbe_.js +1 -0
  56. package/web-ui/build/static/autoit-CackGf4X.js +1 -0
  57. package/web-ui/build/static/autoit-Dyf0FSt2.js +1 -0
  58. package/web-ui/build/static/avisynth-DfCuxmn5.js +1 -0
  59. package/web-ui/build/static/avrasm-DdDiRWhx.js +1 -0
  60. package/web-ui/build/static/avro-idl-DppsvvwR.js +1 -0
  61. package/web-ui/build/static/awk-Cjk3U-Y4.js +1 -0
  62. package/web-ui/build/static/axapta-WwnY3TVf.js +1 -0
  63. package/web-ui/build/static/bash-C5Xkqken.js +1 -0
  64. package/web-ui/build/static/bash-ckPXa-RG.js +1 -0
  65. package/web-ui/build/static/basic-BCVHqHd2.js +1 -0
  66. package/web-ui/build/static/basic-D0dZbGrs.js +1 -0
  67. package/web-ui/build/static/batch-DUo60tbI.js +1 -0
  68. package/web-ui/build/static/bbcode-BVzBKrPV.js +1 -0
  69. package/web-ui/build/static/bicep-DkTjKL2N.js +1 -0
  70. package/web-ui/build/static/birb-C0rKI0h6.js +1 -0
  71. package/web-ui/build/static/bison-ChzwcDVc.js +1 -0
  72. package/web-ui/build/static/bnf-COhTgjpr.js +1 -0
  73. package/web-ui/build/static/bnf-DUYKVI2p.js +1 -0
  74. package/web-ui/build/static/brainfuck-BBJLbMxW.js +1 -0
  75. package/web-ui/build/static/brainfuck-DufOqE73.js +1 -0
  76. package/web-ui/build/static/brightscript-DXhkwfCc.js +1 -0
  77. package/web-ui/build/static/bro-BOFEsT-K.js +1 -0
  78. package/web-ui/build/static/bsl-ClV9GpNm.js +1 -0
  79. package/web-ui/build/static/c-Cl_3N1WB.js +1 -0
  80. package/web-ui/build/static/c-D0hFoAJ3.js +1 -0
  81. package/web-ui/build/static/c-like-D4BQ8VhL.js +1 -0
  82. package/web-ui/build/static/cal-CVIQ5DKG.js +1 -0
  83. package/web-ui/build/static/capnproto-l7oAqnCr.js +1 -0
  84. package/web-ui/build/static/ceylon-BEhCsFMw.js +1 -0
  85. package/web-ui/build/static/cfscript-DMh-xvVk.js +1 -0
  86. package/web-ui/build/static/chaiscript-DCvDoIGS.js +1 -0
  87. package/web-ui/build/static/cil-Ccn-j3TB.js +1 -0
  88. package/web-ui/build/static/clean-CjrEwcC-.js +1 -0
  89. package/web-ui/build/static/clojure-Dgo-8qFd.js +1 -0
  90. package/web-ui/build/static/clojure-M1AknfQi.js +1 -0
  91. package/web-ui/build/static/clojure-repl-BY1VLOSH.js +1 -0
  92. package/web-ui/build/static/cmake-CdHJ7Mp0.js +1 -0
  93. package/web-ui/build/static/cmake-DDGvi7kU.js +1 -0
  94. package/web-ui/build/static/cobol-BdrXYRxi.js +1 -0
  95. package/web-ui/build/static/coffeescript-BMDvMAy2.js +1 -0
  96. package/web-ui/build/static/coffeescript-CAYcMTRg.js +1 -0
  97. package/web-ui/build/static/concurnas-B8vcX0ec.js +1 -0
  98. package/web-ui/build/static/coq-CqvluN1S.js +1 -0
  99. package/web-ui/build/static/coq-vhnnRdWb.js +1 -0
  100. package/web-ui/build/static/cos-DY4p0y_u.js +1 -0
  101. package/web-ui/build/static/cpp-C3m_aEUX.js +1 -0
  102. package/web-ui/build/static/cpp-DRs9bbEm.js +1 -0
  103. package/web-ui/build/static/crmsh-CY6InunC.js +1 -0
  104. package/web-ui/build/static/crystal-Cwk1figA.js +1 -0
  105. package/web-ui/build/static/crystal-DeCJ5Pz7.js +1 -0
  106. package/web-ui/build/static/csharp-WmvubeKF.js +1 -0
  107. package/web-ui/build/static/csharp-zL1j7hXr.js +1 -0
  108. package/web-ui/build/static/cshtml-CbvGCaf_.js +1 -0
  109. package/web-ui/build/static/csp-BH2nxxKs.js +1 -0
  110. package/web-ui/build/static/csp-CHlC7KoB.js +1 -0
  111. package/web-ui/build/static/css-_X0ZO87y.js +1 -0
  112. package/web-ui/build/static/css-extras-wgFh56PY.js +1 -0
  113. package/web-ui/build/static/csv-momqe7r6.js +1 -0
  114. package/web-ui/build/static/cypher-hOeHFCfk.js +1 -0
  115. package/web-ui/build/static/d-B3d-tfyQ.js +1 -0
  116. package/web-ui/build/static/d-C6iyl9wX.js +1 -0
  117. package/web-ui/build/static/dart-BDKSE6LE.js +1 -0
  118. package/web-ui/build/static/dart-Bjchg8qI.js +1 -0
  119. package/web-ui/build/static/dataweave-ZgvdD-pH.js +1 -0
  120. package/web-ui/build/static/dax-yfGYNpUh.js +1 -0
  121. package/web-ui/build/static/delphi-CRLCdiTE.js +1 -0
  122. package/web-ui/build/static/dhall-yl1p1XUr.js +1 -0
  123. package/web-ui/build/static/diff-5SMtcFK7.js +1 -0
  124. package/web-ui/build/static/diff-y2RTBWsQ.js +1 -0
  125. package/web-ui/build/static/django-CtjG6w9L.js +1 -0
  126. package/web-ui/build/static/django-DNXOxI3v.js +1 -0
  127. package/web-ui/build/static/dns-D7Czwn_S.js +1 -0
  128. package/web-ui/build/static/dns-zone-file-D3yPxpjz.js +1 -0
  129. package/web-ui/build/static/docker-CWC5NqQQ.js +1 -0
  130. package/web-ui/build/static/dockerfile-CKFBVY9d.js +1 -0
  131. package/web-ui/build/static/dos-B7gYphQ-.js +1 -0
  132. package/web-ui/build/static/dot-BsisNMX4.js +1 -0
  133. package/web-ui/build/static/dsconfig-CEWwz7T6.js +1 -0
  134. package/web-ui/build/static/dts-UM5u5dMt.js +1 -0
  135. package/web-ui/build/static/dust-DlPmuh4d.js +1 -0
  136. package/web-ui/build/static/ebnf-BE6vq-fo.js +1 -0
  137. package/web-ui/build/static/ebnf-Czd8moGp.js +1 -0
  138. package/web-ui/build/static/editorconfig-Ctn83uRn.js +1 -0
  139. package/web-ui/build/static/eiffel-CZP01HVF.js +1 -0
  140. package/web-ui/build/static/ejs-BAXhrtLI.js +1 -0
  141. package/web-ui/build/static/elixir-C9PFjTwP.js +1 -0
  142. package/web-ui/build/static/elixir-DMjZPYCh.js +1 -0
  143. package/web-ui/build/static/elm-BH_KfOxJ.js +1 -0
  144. package/web-ui/build/static/elm-DRnNerE2.js +1 -0
  145. package/web-ui/build/static/erb-BhzUuTTy.js +1 -0
  146. package/web-ui/build/static/erb-DNbmX3N2.js +1 -0
  147. package/web-ui/build/static/erlang-BBPIw_V_.js +1 -0
  148. package/web-ui/build/static/erlang-BWdcSiKs.js +1 -0
  149. package/web-ui/build/static/erlang-repl-DQ9I6Dh_.js +1 -0
  150. package/web-ui/build/static/etlua-BeVNUecy.js +1 -0
  151. package/web-ui/build/static/excel-DYFvX5ms.js +1 -0
  152. package/web-ui/build/static/excel-formula-BtiqixBz.js +1 -0
  153. package/web-ui/build/static/factor-BCHyN6XZ.js +1 -0
  154. package/web-ui/build/static/false-UDWS0Dzk.js +1 -0
  155. package/web-ui/build/static/firestore-security-rules-B1-wJ42j.js +1 -0
  156. package/web-ui/build/static/fix-DrXU-V21.js +1 -0
  157. package/web-ui/build/static/flix-BjF0RPW9.js +1 -0
  158. package/web-ui/build/static/flow-DovuDACs.js +1 -0
  159. package/web-ui/build/static/fortran-DOqQP_9c.js +1 -0
  160. package/web-ui/build/static/fortran-DPASe5gH.js +1 -0
  161. package/web-ui/build/static/fsharp-Ckup0uPw.js +1 -0
  162. package/web-ui/build/static/fsharp-DyfRmGjn.js +1 -0
  163. package/web-ui/build/static/ftl-Coj24bDj.js +1 -0
  164. package/web-ui/build/static/gams-GwREZQh1.js +1 -0
  165. package/web-ui/build/static/gap-B7d6Bkmk.js +1 -0
  166. package/web-ui/build/static/gauss-DrLvPj5Z.js +1 -0
  167. package/web-ui/build/static/gcode-40iTJ2U1.js +1 -0
  168. package/web-ui/build/static/gcode-CISHXDj4.js +1 -0
  169. package/web-ui/build/static/gdscript-DmopCB0R.js +1 -0
  170. package/web-ui/build/static/gedcom-LiECv7gg.js +1 -0
  171. package/web-ui/build/static/gherkin-CYp_kcve.js +1 -0
  172. package/web-ui/build/static/gherkin-C_QgMjxf.js +1 -0
  173. package/web-ui/build/static/git-CfTT-600.js +1 -0
  174. package/web-ui/build/static/glsl-DRFMhvlG.js +1 -0
  175. package/web-ui/build/static/glsl-PNmpuSn0.js +1 -0
  176. package/web-ui/build/static/gml-3qmqfrt3.js +1 -0
  177. package/web-ui/build/static/gml-BTCmr4y5.js +1 -0
  178. package/web-ui/build/static/gn-BX0L2dQ-.js +1 -0
  179. package/web-ui/build/static/go-BXYOf5mS.js +1 -0
  180. package/web-ui/build/static/go-BnvPVHID.js +1 -0
  181. package/web-ui/build/static/go-module-BsPBvEmG.js +1 -0
  182. package/web-ui/build/static/golo-B6l7i4bX.js +1 -0
  183. package/web-ui/build/static/gradle-9DvvuDBJ.js +1 -0
  184. package/web-ui/build/static/graphql-OcCfd-Bc.js +1 -0
  185. package/web-ui/build/static/groovy-B33LZAt0.js +1 -0
  186. package/web-ui/build/static/groovy-Uyg0ruyE.js +1 -0
  187. package/web-ui/build/static/haml-D_FDAM6q.js +1 -0
  188. package/web-ui/build/static/haml-DjG31i1A.js +1 -0
  189. package/web-ui/build/static/handlebars-BKPDMksf.js +1 -0
  190. package/web-ui/build/static/handlebars-PP4M-qJ8.js +1 -0
  191. package/web-ui/build/static/haskell-HD9Gv3Wo.js +1 -0
  192. package/web-ui/build/static/haskell-nUf9ckz5.js +1 -0
  193. package/web-ui/build/static/haxe-BSsJNrQU.js +1 -0
  194. package/web-ui/build/static/haxe-D7yTwhdv.js +1 -0
  195. package/web-ui/build/static/hcl-_dqjptFs.js +1 -0
  196. package/web-ui/build/static/hlsl-DKixrsyy.js +1 -0
  197. package/web-ui/build/static/hoon-Di28eQfV.js +1 -0
  198. package/web-ui/build/static/hpkp-CXYG9zoQ.js +1 -0
  199. package/web-ui/build/static/hsp-lYl9KN6o.js +1 -0
  200. package/web-ui/build/static/hsts-CaYq9R8-.js +1 -0
  201. package/web-ui/build/static/htmlbars-eoY2PWS6.js +1 -0
  202. package/web-ui/build/static/http-2DXUmN2h.js +1 -0
  203. package/web-ui/build/static/http-Yjic3oWm.js +1 -0
  204. package/web-ui/build/static/hy-DVImg5uG.js +1 -0
  205. package/web-ui/build/static/ichigojam-Bdk-szlv.js +1 -0
  206. package/web-ui/build/static/icon-BEs9UbI_.js +1 -0
  207. package/web-ui/build/static/icu-message-format-DMfiLVs5.js +1 -0
  208. package/web-ui/build/static/idris-meksg0Ce.js +1 -0
  209. package/web-ui/build/static/iecst-DMPBiTmw.js +1 -0
  210. package/web-ui/build/static/ignore-BOQ9ZPvw.js +1 -0
  211. package/web-ui/build/static/index-BSEOP86D.js +1 -0
  212. package/web-ui/build/static/index-Be9WvMkI.js +1162 -0
  213. package/web-ui/build/static/index-Cr9q1fNq.css +1 -0
  214. package/web-ui/build/static/index-CuZ_erP9.js +13 -0
  215. package/web-ui/build/static/inform7-CNqu8FhU.js +1 -0
  216. package/web-ui/build/static/inform7-Cvfrdb0X.js +1 -0
  217. package/web-ui/build/static/ini-4DHUSW37.js +1 -0
  218. package/web-ui/build/static/ini-BgZ18Nk6.js +1 -0
  219. package/web-ui/build/static/io-c519ulw2.js +1 -0
  220. package/web-ui/build/static/irpf90-Kzq81vn5.js +1 -0
  221. package/web-ui/build/static/isbl-CeBN_o-W.js +1 -0
  222. package/web-ui/build/static/j-BmSuFx5E.js +1 -0
  223. package/web-ui/build/static/java-BezG0JQd.js +1 -0
  224. package/web-ui/build/static/java-BxBhTA1D.js +1 -0
  225. package/web-ui/build/static/javadoc-b96LRy9-.js +1 -0
  226. package/web-ui/build/static/javadoclike-BTNVp6pR.js +1 -0
  227. package/web-ui/build/static/javascript-B75gzQUI.js +1 -0
  228. package/web-ui/build/static/javastacktrace-D4xVOdoe.js +1 -0
  229. package/web-ui/build/static/jboss-cli-DH30pghK.js +1 -0
  230. package/web-ui/build/static/jexl-DF2RGmtX.js +1 -0
  231. package/web-ui/build/static/jolie-BlwO_Eyn.js +1 -0
  232. package/web-ui/build/static/jq-C7YhIw1G.js +1 -0
  233. package/web-ui/build/static/js-extras-JVZxoi4Q.js +1 -0
  234. package/web-ui/build/static/js-templates-D1CnsXgJ.js +1 -0
  235. package/web-ui/build/static/jsdoc-vf63NOxo.js +1 -0
  236. package/web-ui/build/static/json-CiKwLA5O.js +1 -0
  237. package/web-ui/build/static/json-pgLQeaes.js +1 -0
  238. package/web-ui/build/static/json5-_HMAYh1c.js +1 -0
  239. package/web-ui/build/static/jsonp-BeHQpb2r.js +1 -0
  240. package/web-ui/build/static/jsstacktrace-nw21JEtY.js +1 -0
  241. package/web-ui/build/static/jsx-Nxt_XhcW.js +1 -0
  242. package/web-ui/build/static/julia-BFczE4HB.js +1 -0
  243. package/web-ui/build/static/julia-DeDNID0K.js +1 -0
  244. package/web-ui/build/static/julia-repl-CoPTZMue.js +1 -0
  245. package/web-ui/build/static/keepalived-DP1sFl1b.js +1 -0
  246. package/web-ui/build/static/keyman-CCQVTHgo.js +1 -0
  247. package/web-ui/build/static/kotlin-CdZP58gi.js +1 -0
  248. package/web-ui/build/static/kotlin-CzNKVbXq.js +1 -0
  249. package/web-ui/build/static/kumir-lPok55sq.js +1 -0
  250. package/web-ui/build/static/kusto-oLek_zqj.js +1 -0
  251. package/web-ui/build/static/lasso-BFOYENIx.js +1 -0
  252. package/web-ui/build/static/latex-BH6YJXW6.js +1 -0
  253. package/web-ui/build/static/latex-IweVcDOS.js +1 -0
  254. package/web-ui/build/static/latte-Cmzytj93.js +1 -0
  255. package/web-ui/build/static/ldif-Bp4o5m10.js +1 -0
  256. package/web-ui/build/static/leaf-BFbMre84.js +1 -0
  257. package/web-ui/build/static/less-BVpV_iBx.js +1 -0
  258. package/web-ui/build/static/less-vdx-pGtM.js +1 -0
  259. package/web-ui/build/static/lilypond-Da6mCtwg.js +1 -0
  260. package/web-ui/build/static/liquid-RVC3EWUf.js +1 -0
  261. package/web-ui/build/static/lisp-Bgt-EmTk.js +1 -0
  262. package/web-ui/build/static/lisp-E8gUigGo.js +1 -0
  263. package/web-ui/build/static/livecodeserver-DDFQieJg.js +1 -0
  264. package/web-ui/build/static/livescript-C7FEDmfm.js +1 -0
  265. package/web-ui/build/static/livescript-Cc5SDmvx.js +1 -0
  266. package/web-ui/build/static/llvm-C22gmUEJ.js +1 -0
  267. package/web-ui/build/static/llvm-CjnVIiX4.js +1 -0
  268. package/web-ui/build/static/log-duIQICZV.js +1 -0
  269. package/web-ui/build/static/lolcode-Chrz9tTZ.js +1 -0
  270. package/web-ui/build/static/lsl-D1sdqECW.js +1 -0
  271. package/web-ui/build/static/lua-BFoJUb0S.js +1 -0
  272. package/web-ui/build/static/lua-D8RyRvqw.js +1 -0
  273. package/web-ui/build/static/magma-Cb3OhPkH.js +1 -0
  274. package/web-ui/build/static/makefile-BoVTcm8r.js +1 -0
  275. package/web-ui/build/static/makefile-LpYbnzZi.js +1 -0
  276. package/web-ui/build/static/markdown-CtQc_FZV.js +1 -0
  277. package/web-ui/build/static/markdown-DKz9qNdH.js +1 -0
  278. package/web-ui/build/static/markup-templating-D4EP19Lc.js +1 -0
  279. package/web-ui/build/static/mathematica-CIjlHVkd.js +1 -0
  280. package/web-ui/build/static/matlab-2b895p29.js +1 -0
  281. package/web-ui/build/static/matlab-BuluE4GS.js +1 -0
  282. package/web-ui/build/static/maxima-BGR8Puew.js +1 -0
  283. package/web-ui/build/static/maxscript-B429y77A.js +1 -0
  284. package/web-ui/build/static/mel-CYh_3LnF.js +1 -0
  285. package/web-ui/build/static/mel-CbYDscql.js +1 -0
  286. package/web-ui/build/static/mercury-DOee0RcU.js +1 -0
  287. package/web-ui/build/static/mermaid-Bgnlfred.js +1 -0
  288. package/web-ui/build/static/mipsasm-CB-uene8.js +1 -0
  289. package/web-ui/build/static/mizar-7qF42uX5.js +1 -0
  290. package/web-ui/build/static/mizar-Clogrskx.js +1 -0
  291. package/web-ui/build/static/mojolicious-BSIpTTKj.js +1 -0
  292. package/web-ui/build/static/mongodb--rWzrKDS.js +1 -0
  293. package/web-ui/build/static/monkey-C0lS2_fv.js +1 -0
  294. package/web-ui/build/static/monkey-DvqsFbfK.js +1 -0
  295. package/web-ui/build/static/moonscript-D6zFHk1D.js +1 -0
  296. package/web-ui/build/static/moonscript-JTxm8n_4.js +1 -0
  297. package/web-ui/build/static/n1ql-BwY55fjF.js +1 -0
  298. package/web-ui/build/static/n1ql-D8h3fDkJ.js +1 -0
  299. package/web-ui/build/static/n4js-5XIl8zQT.js +1 -0
  300. package/web-ui/build/static/nand2tetris-hdl-C4b_TExX.js +1 -0
  301. package/web-ui/build/static/naniscript-h2vnytgY.js +1 -0
  302. package/web-ui/build/static/nasm-SJmR3Ebn.js +1 -0
  303. package/web-ui/build/static/neon-B7dnnKEh.js +1 -0
  304. package/web-ui/build/static/nevod-zunhA02o.js +1 -0
  305. package/web-ui/build/static/nginx-BR_D0je7.js +1 -0
  306. package/web-ui/build/static/nginx-Cf7oQt-G.js +1 -0
  307. package/web-ui/build/static/nim-D-MjIxvw.js +1 -0
  308. package/web-ui/build/static/nim-D6YOyDC-.js +1 -0
  309. package/web-ui/build/static/nix-DCZEZqSO.js +1 -0
  310. package/web-ui/build/static/nix-Dx16U5rS.js +1 -0
  311. package/web-ui/build/static/node-repl-P-vGpiQ7.js +1 -0
  312. package/web-ui/build/static/nsis-CjyZMgjR.js +1 -0
  313. package/web-ui/build/static/nsis-X8NQeZjE.js +1 -0
  314. package/web-ui/build/static/objectivec-BejNoH7m.js +1 -0
  315. package/web-ui/build/static/objectivec-CGy2F8n6.js +1 -0
  316. package/web-ui/build/static/ocaml-C15hcRxR.js +1 -0
  317. package/web-ui/build/static/ocaml-U7N8L5Z7.js +1 -0
  318. package/web-ui/build/static/opencl-Bkm-SovU.js +1 -0
  319. package/web-ui/build/static/openqasm-BOc5975b.js +1 -0
  320. package/web-ui/build/static/openscad-CRpFnhV_.js +1 -0
  321. package/web-ui/build/static/oxygene-eHBZbxHy.js +1 -0
  322. package/web-ui/build/static/oz-B6RWw36L.js +1 -0
  323. package/web-ui/build/static/parigp-rifRy-ff.js +1 -0
  324. package/web-ui/build/static/parser-C0HBjZDk.js +1 -0
  325. package/web-ui/build/static/parser3-DSK81uS5.js +1 -0
  326. package/web-ui/build/static/pascal-BWha02r-.js +1 -0
  327. package/web-ui/build/static/pascaligo-B5sQ2hGz.js +1 -0
  328. package/web-ui/build/static/pcaxis-B1HLYPhm.js +1 -0
  329. package/web-ui/build/static/peoplecode-C4FPD4Yt.js +1 -0
  330. package/web-ui/build/static/perl-CyNx_mIa.js +1 -0
  331. package/web-ui/build/static/perl-rKxEWgtc.js +1 -0
  332. package/web-ui/build/static/pf-DbL4T2HZ.js +1 -0
  333. package/web-ui/build/static/pgsql-BKrwbRTY.js +1 -0
  334. package/web-ui/build/static/php-Cbd5TyJ-.js +1 -0
  335. package/web-ui/build/static/php-extras-DoVpsRj3.js +1 -0
  336. package/web-ui/build/static/php-template-DvdLavxo.js +1 -0
  337. package/web-ui/build/static/php-wYQJLv7J.js +1 -0
  338. package/web-ui/build/static/phpdoc-DTzZ5d0C.js +1 -0
  339. package/web-ui/build/static/plaintext-BRfzJjyj.js +1 -0
  340. package/web-ui/build/static/plsql-BLiE3aGC.js +1 -0
  341. package/web-ui/build/static/pony-CzLDxYVb.js +1 -0
  342. package/web-ui/build/static/powerquery-BdGgwM1a.js +1 -0
  343. package/web-ui/build/static/powershell-Cxl47yK_.js +1 -0
  344. package/web-ui/build/static/powershell-DrOFoqBE.js +1 -0
  345. package/web-ui/build/static/processing-9GbETrF_.js +1 -0
  346. package/web-ui/build/static/processing-M8gRGxck.js +1 -0
  347. package/web-ui/build/static/profile-CpNlvCnw.js +1 -0
  348. package/web-ui/build/static/prolog-CKZzbIr9.js +1 -0
  349. package/web-ui/build/static/prolog-mmIPeMRS.js +1 -0
  350. package/web-ui/build/static/promql-sDn1PHGN.js +1 -0
  351. package/web-ui/build/static/properties-CMFMCgWo.js +1 -0
  352. package/web-ui/build/static/properties-DQUf7KOp.js +1 -0
  353. package/web-ui/build/static/protobuf-CeY2Q-pH.js +1 -0
  354. package/web-ui/build/static/protobuf-WpfASK2n.js +1 -0
  355. package/web-ui/build/static/psl-D2GfEOkk.js +1 -0
  356. package/web-ui/build/static/pug-OMqhtHt8.js +1 -0
  357. package/web-ui/build/static/puppet-B68-xib8.js +1 -0
  358. package/web-ui/build/static/puppet-DEWzLqRg.js +1 -0
  359. package/web-ui/build/static/pure-C_CchY8g.js +1 -0
  360. package/web-ui/build/static/purebasic-D6vSqsja.js +1 -0
  361. package/web-ui/build/static/purebasic-Dy_z6LTs.js +1 -0
  362. package/web-ui/build/static/purescript-1f1OoM-A.js +1 -0
  363. package/web-ui/build/static/python-BssLWmNd.js +1 -0
  364. package/web-ui/build/static/python-CbOivp-X.js +1 -0
  365. package/web-ui/build/static/python-repl-Dsbi7aBP.js +1 -0
  366. package/web-ui/build/static/q-BC6w8B4U.js +1 -0
  367. package/web-ui/build/static/q-Brd1mf_C.js +1 -0
  368. package/web-ui/build/static/qml-BG4KN74g.js +1 -0
  369. package/web-ui/build/static/qml-BW-AE2Ma.js +1 -0
  370. package/web-ui/build/static/qore-m870d7ZA.js +1 -0
  371. package/web-ui/build/static/qsharp-BC9vEXOd.js +1 -0
  372. package/web-ui/build/static/r-BQySF8sO.js +1 -0
  373. package/web-ui/build/static/r-Cur0B9lo.js +1 -0
  374. package/web-ui/build/static/racket-CiJlajVU.js +1 -0
  375. package/web-ui/build/static/reason-C3VZcXa9.js +1 -0
  376. package/web-ui/build/static/reasonml-CpaxZwMO.js +1 -0
  377. package/web-ui/build/static/regex-bY-o17az.js +1 -0
  378. package/web-ui/build/static/rego-WPkEW7us.js +1 -0
  379. package/web-ui/build/static/renpy-DQr5LC4O.js +1 -0
  380. package/web-ui/build/static/rest-qmfCQ86m.js +1 -0
  381. package/web-ui/build/static/rib-DYzEblkc.js +1 -0
  382. package/web-ui/build/static/rip-D-NWUqHZ.js +1 -0
  383. package/web-ui/build/static/roboconf-CVmdy543.js +1 -0
  384. package/web-ui/build/static/roboconf-Ray0NGMb.js +1 -0
  385. package/web-ui/build/static/robotframework-DlxPBTF_.js +1 -0
  386. package/web-ui/build/static/routeros-S_f-nuVM.js +1 -0
  387. package/web-ui/build/static/rsl-CHtR71Pc.js +1 -0
  388. package/web-ui/build/static/ruby-ByuU-3cy.js +1 -0
  389. package/web-ui/build/static/ruby-DOin939S.js +1 -0
  390. package/web-ui/build/static/ruleslanguage-zhFrFxeU.js +1 -0
  391. package/web-ui/build/static/rust-B606UvZv.js +1 -0
  392. package/web-ui/build/static/rust-BJMuS7if.js +1 -0
  393. package/web-ui/build/static/sas-Bzk_0rOu.js +1 -0
  394. package/web-ui/build/static/sas-C-C55Hy4.js +1 -0
  395. package/web-ui/build/static/sass-DKkkoHtH.js +1 -0
  396. package/web-ui/build/static/scala-BKlnHttP.js +1 -0
  397. package/web-ui/build/static/scala-IsJjjIKA.js +1 -0
  398. package/web-ui/build/static/scheme-Bq_tfrRE.js +1 -0
  399. package/web-ui/build/static/scheme-DiXFvLKG.js +1 -0
  400. package/web-ui/build/static/scilab-DVyT87si.js +1 -0
  401. package/web-ui/build/static/scss-BtDpAVzH.js +1 -0
  402. package/web-ui/build/static/scss-D8cn4aNM.js +1 -0
  403. package/web-ui/build/static/shell-YROU1_yo.js +1 -0
  404. package/web-ui/build/static/shell-session-D06UXOLk.js +1 -0
  405. package/web-ui/build/static/smali-B1Wl_1dD.js +1 -0
  406. package/web-ui/build/static/smali-D2R-11j_.js +1 -0
  407. package/web-ui/build/static/smalltalk-M2S1lL6Z.js +1 -0
  408. package/web-ui/build/static/smalltalk-OWg84676.js +1 -0
  409. package/web-ui/build/static/smarty-l1m-zZmR.js +1 -0
  410. package/web-ui/build/static/sml-B6gSTHMm.js +1 -0
  411. package/web-ui/build/static/sml-BKURhRNM.js +1 -0
  412. package/web-ui/build/static/solidity-BcrqESJt.js +1 -0
  413. package/web-ui/build/static/solution-file-BYpCOi9k.js +1 -0
  414. package/web-ui/build/static/soy-DOQhQ7Di.js +1 -0
  415. package/web-ui/build/static/sparql-BwiIX_wO.js +1 -0
  416. package/web-ui/build/static/splunk-spl-DuIl6XxN.js +1 -0
  417. package/web-ui/build/static/sqf-8cYPidUR.js +1 -0
  418. package/web-ui/build/static/sqf-n8nRTmXc.js +1 -0
  419. package/web-ui/build/static/sql-D0WSLeXV.js +1 -0
  420. package/web-ui/build/static/sql-D8KWxFl_.js +1 -0
  421. package/web-ui/build/static/sql_more-D3ozDsf6.js +1 -0
  422. package/web-ui/build/static/squirrel-C4U4fAL5.js +1 -0
  423. package/web-ui/build/static/stan-BbFEvT-l.js +1 -0
  424. package/web-ui/build/static/stan-CJ4ny6dZ.js +1 -0
  425. package/web-ui/build/static/stata-BKEkbqzD.js +1 -0
  426. package/web-ui/build/static/step21-52PURHjy.js +1 -0
  427. package/web-ui/build/static/stylus-buszfxDg.js +1 -0
  428. package/web-ui/build/static/stylus-y0WOYXDO.js +1 -0
  429. package/web-ui/build/static/subunit-DU_iInw0.js +1 -0
  430. package/web-ui/build/static/swift-1VeEUHZi.js +1 -0
  431. package/web-ui/build/static/swift-Iw0x_Dum.js +1 -0
  432. package/web-ui/build/static/systemd-BT_5EOz8.js +1 -0
  433. package/web-ui/build/static/t4-cs-DlHeFrua.js +1 -0
  434. package/web-ui/build/static/t4-templating-Bz3RFfzp.js +1 -0
  435. package/web-ui/build/static/t4-vb-BMG0Q3qg.js +1 -0
  436. package/web-ui/build/static/taggerscript-CxwafGpT.js +1 -0
  437. package/web-ui/build/static/tap-6QugbkZA.js +1 -0
  438. package/web-ui/build/static/tap-SB1ST166.js +1 -0
  439. package/web-ui/build/static/tcl-CpV5bsKx.js +1 -0
  440. package/web-ui/build/static/tcl-Dikgd33H.js +1 -0
  441. package/web-ui/build/static/textile-aPmNtrkM.js +1 -0
  442. package/web-ui/build/static/thrift-B4Snltg5.js +1 -0
  443. package/web-ui/build/static/toml-B8SfswHQ.js +1 -0
  444. package/web-ui/build/static/tp-CdO-cn9g.js +1 -0
  445. package/web-ui/build/static/tremor-CqqCLe4A.js +1 -0
  446. package/web-ui/build/static/tsx-Ck0ZDqEy.js +1 -0
  447. package/web-ui/build/static/tt2-BrqZXSkJ.js +1 -0
  448. package/web-ui/build/static/turtle-DpnSIzmN.js +1 -0
  449. package/web-ui/build/static/twig-B5Et_eTY.js +1 -0
  450. package/web-ui/build/static/twig-C3vsy99c.js +1 -0
  451. package/web-ui/build/static/typescript-DH7tzpeO.js +1 -0
  452. package/web-ui/build/static/typescript-s1qBbHGm.js +1 -0
  453. package/web-ui/build/static/typoscript-DD8499cq.js +1 -0
  454. package/web-ui/build/static/unrealscript-C1zerCVR.js +1 -0
  455. package/web-ui/build/static/uorazor-CtRNfzg2.js +1 -0
  456. package/web-ui/build/static/uri-CAfIv8vn.js +1 -0
  457. package/web-ui/build/static/v-B6_f9ZGJ.js +1 -0
  458. package/web-ui/build/static/vala-BIpejmrf.js +1 -0
  459. package/web-ui/build/static/vala-BYLjm9ih.js +1 -0
  460. package/web-ui/build/static/vbnet-DEW7adbx.js +1 -0
  461. package/web-ui/build/static/vbnet-D_CuPCaz.js +1 -0
  462. package/web-ui/build/static/vbscript-Do9hsQ_u.js +1 -0
  463. package/web-ui/build/static/vbscript-html-4bMQ0-FJ.js +1 -0
  464. package/web-ui/build/static/velocity-CQjo2-fz.js +1 -0
  465. package/web-ui/build/static/verilog-C-Xvd__o.js +1 -0
  466. package/web-ui/build/static/verilog-Dn1ZGsRG.js +1 -0
  467. package/web-ui/build/static/vhdl-DZ-dTOLA.js +1 -0
  468. package/web-ui/build/static/vhdl-bDNJfpa7.js +1 -0
  469. package/web-ui/build/static/vim-BDAo5YHC.js +1 -0
  470. package/web-ui/build/static/vim-ClkOafc3.js +1 -0
  471. package/web-ui/build/static/visual-basic-DXIeLZZ8.js +1 -0
  472. package/web-ui/build/static/warpscript-f7veA-3J.js +1 -0
  473. package/web-ui/build/static/wasm-TToDlmNk.js +1 -0
  474. package/web-ui/build/static/web-idl-CrrjMFQT.js +1 -0
  475. package/web-ui/build/static/wiki-aicisDW2.js +1 -0
  476. package/web-ui/build/static/wolfram-C_A80rAh.js +1 -0
  477. package/web-ui/build/static/wren-DkVyeDoy.js +1 -0
  478. package/web-ui/build/static/x86asm-fx1o_ltw.js +1 -0
  479. package/web-ui/build/static/xeora-D-uaDMXn.js +1 -0
  480. package/web-ui/build/static/xl-Dnyvb9_S.js +1 -0
  481. package/web-ui/build/static/xml-BGV0zG9K.js +1 -0
  482. package/web-ui/build/static/xml-doc-DOGLcenw.js +1 -0
  483. package/web-ui/build/static/xojo-B3Qgvb5A.js +1 -0
  484. package/web-ui/build/static/xquery-C-B5-0Q9.js +1 -0
  485. package/web-ui/build/static/xquery-KbuiAVhj.js +1 -0
  486. package/web-ui/build/static/yaml-CBWBoq6m.js +1 -0
  487. package/web-ui/build/static/yaml-IghlDZf6.js +1 -0
  488. package/web-ui/build/static/yang-CArp62P5.js +1 -0
  489. package/web-ui/build/static/zephir-DMLTJ9_9.js +1 -0
  490. package/web-ui/build/static/zig-CWG2311v.js +1 -0
  491. package/web-ui/build/static/1c-4BRB87En.js +0 -1
  492. package/web-ui/build/static/abap-BXIqiAfL.js +0 -1
  493. package/web-ui/build/static/abnf-0gk1i0eD.js +0 -1
  494. package/web-ui/build/static/abnf-jcv7vN9a.js +0 -1
  495. package/web-ui/build/static/accesslog-bXE2aOZl.js +0 -1
  496. package/web-ui/build/static/actionscript-CF-bqawj.js +0 -1
  497. package/web-ui/build/static/actionscript-CodwLKar.js +0 -1
  498. package/web-ui/build/static/ada-BBEDI84F.js +0 -1
  499. package/web-ui/build/static/ada-Kb6JvaxP.js +0 -1
  500. package/web-ui/build/static/agda-UvnMXUUo.js +0 -1
  501. package/web-ui/build/static/al-D5QZ0ijQ.js +0 -1
  502. package/web-ui/build/static/angelscript-RpvZxbeT.js +0 -1
  503. package/web-ui/build/static/antlr4-BPyUvfii.js +0 -1
  504. package/web-ui/build/static/apache-CtM2pGik.js +0 -1
  505. package/web-ui/build/static/apacheconf-D-i9eISH.js +0 -1
  506. package/web-ui/build/static/apex-Dhn_SJi4.js +0 -1
  507. package/web-ui/build/static/apl-HWtdSaYy.js +0 -1
  508. package/web-ui/build/static/applescript-Br9NrmTP.js +0 -1
  509. package/web-ui/build/static/applescript-DLL0TuGw.js +0 -1
  510. package/web-ui/build/static/aql-MjCgNRUX.js +0 -1
  511. package/web-ui/build/static/arcade--DFvEPVv.js +0 -1
  512. package/web-ui/build/static/arduino-Cqw5W_fL.js +0 -1
  513. package/web-ui/build/static/arduino-DIDBbB7R.js +0 -1
  514. package/web-ui/build/static/arff-GGvbnOhc.js +0 -1
  515. package/web-ui/build/static/armasm-DKLRDLs1.js +0 -1
  516. package/web-ui/build/static/asciidoc-CN5qfm0K.js +0 -1
  517. package/web-ui/build/static/asciidoc-CeQEWYOj.js +0 -1
  518. package/web-ui/build/static/asm6502-B1l2Hc9j.js +0 -1
  519. package/web-ui/build/static/asmatmel-BAojNNWJ.js +0 -1
  520. package/web-ui/build/static/aspectj-DqZFhwdh.js +0 -1
  521. package/web-ui/build/static/aspnet-C0kQPqSr.js +0 -1
  522. package/web-ui/build/static/autohotkey-DY25td-Z.js +0 -1
  523. package/web-ui/build/static/autohotkey-DlqXINgk.js +0 -1
  524. package/web-ui/build/static/autoit-By7J2Y34.js +0 -1
  525. package/web-ui/build/static/autoit-nsu9sBga.js +0 -1
  526. package/web-ui/build/static/avisynth-DmhvVsr-.js +0 -1
  527. package/web-ui/build/static/avrasm-CHfBwwoQ.js +0 -1
  528. package/web-ui/build/static/avro-idl-BKgIWEIF.js +0 -1
  529. package/web-ui/build/static/awk-CpAb4d4E.js +0 -1
  530. package/web-ui/build/static/axapta-CM4aTfCZ.js +0 -1
  531. package/web-ui/build/static/bash-D1KTDlk-.js +0 -1
  532. package/web-ui/build/static/bash-DShkskxb.js +0 -1
  533. package/web-ui/build/static/basic-C4CfKvhg.js +0 -1
  534. package/web-ui/build/static/basic-CkQS4VwL.js +0 -1
  535. package/web-ui/build/static/batch-DZtrClI1.js +0 -1
  536. package/web-ui/build/static/bbcode-CY2FsfaO.js +0 -1
  537. package/web-ui/build/static/bicep-BeSEpm_3.js +0 -1
  538. package/web-ui/build/static/birb-huu22Mwu.js +0 -1
  539. package/web-ui/build/static/bison-CmbxfR57.js +0 -1
  540. package/web-ui/build/static/bnf-c2l_4HXN.js +0 -1
  541. package/web-ui/build/static/bnf-wucEDTqY.js +0 -1
  542. package/web-ui/build/static/brainfuck-CzWBg5U7.js +0 -1
  543. package/web-ui/build/static/brainfuck-I_YQ4sma.js +0 -1
  544. package/web-ui/build/static/brightscript-LOkD4eYW.js +0 -1
  545. package/web-ui/build/static/bro-CLJ7Afqo.js +0 -1
  546. package/web-ui/build/static/bsl-DbUgC2FQ.js +0 -1
  547. package/web-ui/build/static/c-C0S2D2ge.js +0 -1
  548. package/web-ui/build/static/c-KH25O_pL.js +0 -1
  549. package/web-ui/build/static/c-like-DtAFxyl_.js +0 -1
  550. package/web-ui/build/static/cal-uGiVJBNC.js +0 -1
  551. package/web-ui/build/static/capnproto-DSLchjOW.js +0 -1
  552. package/web-ui/build/static/ceylon-Bbxk66YL.js +0 -1
  553. package/web-ui/build/static/cfscript-CjDdgKbl.js +0 -1
  554. package/web-ui/build/static/chaiscript-CnRXaMae.js +0 -1
  555. package/web-ui/build/static/cil-CM9ygF3R.js +0 -1
  556. package/web-ui/build/static/clean-ppAH0SYy.js +0 -1
  557. package/web-ui/build/static/clojure-C5LVccGq.js +0 -1
  558. package/web-ui/build/static/clojure-DtLXiuuC.js +0 -1
  559. package/web-ui/build/static/clojure-repl-fSdrYuup.js +0 -1
  560. package/web-ui/build/static/cmake-AD1fuzSY.js +0 -1
  561. package/web-ui/build/static/cmake-D-o08Yta.js +0 -1
  562. package/web-ui/build/static/cobol-bDh1KHf9.js +0 -1
  563. package/web-ui/build/static/coffeescript-D8InK8kf.js +0 -1
  564. package/web-ui/build/static/coffeescript-MKWUOXb5.js +0 -1
  565. package/web-ui/build/static/concurnas-CR56nj6R.js +0 -1
  566. package/web-ui/build/static/coq-DDLBsBJu.js +0 -1
  567. package/web-ui/build/static/coq-WbhtANeW.js +0 -1
  568. package/web-ui/build/static/cos-Bfmre3op.js +0 -1
  569. package/web-ui/build/static/cpp-Cdy6A7gI.js +0 -1
  570. package/web-ui/build/static/cpp-De2KZejr.js +0 -1
  571. package/web-ui/build/static/crmsh-uf3vbKnN.js +0 -1
  572. package/web-ui/build/static/crystal-BHMyEVPP.js +0 -1
  573. package/web-ui/build/static/crystal-DXAQwftg.js +0 -1
  574. package/web-ui/build/static/csharp-Ci2MRG6L.js +0 -1
  575. package/web-ui/build/static/csharp-D8MV2a7f.js +0 -1
  576. package/web-ui/build/static/cshtml-kVj3v3uY.js +0 -1
  577. package/web-ui/build/static/csp-B83CCdVc.js +0 -1
  578. package/web-ui/build/static/csp-DUO7zlPh.js +0 -1
  579. package/web-ui/build/static/css-BWsx7mtO.js +0 -1
  580. package/web-ui/build/static/css-extras-oHch2Y5C.js +0 -1
  581. package/web-ui/build/static/csv-DIf0iNlc.js +0 -1
  582. package/web-ui/build/static/cypher-B1rOF_f3.js +0 -1
  583. package/web-ui/build/static/d-BUgLS87u.js +0 -1
  584. package/web-ui/build/static/d-ClM8XTCr.js +0 -1
  585. package/web-ui/build/static/dart-D5rVGtrb.js +0 -1
  586. package/web-ui/build/static/dart-Oal__k4m.js +0 -1
  587. package/web-ui/build/static/dataweave-B0uxnNDC.js +0 -1
  588. package/web-ui/build/static/dax-B9z6d1P6.js +0 -1
  589. package/web-ui/build/static/delphi-KMlx8q8A.js +0 -1
  590. package/web-ui/build/static/dhall-DLWFgSR8.js +0 -1
  591. package/web-ui/build/static/diff-DDMGnyhE.js +0 -1
  592. package/web-ui/build/static/diff-yg1oXq3U.js +0 -1
  593. package/web-ui/build/static/django-BDtkIu_c.js +0 -1
  594. package/web-ui/build/static/django-Bkn9HlyQ.js +0 -1
  595. package/web-ui/build/static/dns-Bx1VHfo6.js +0 -1
  596. package/web-ui/build/static/dns-zone-file-Bgn5zn_J.js +0 -1
  597. package/web-ui/build/static/docker-CTdrZJHc.js +0 -1
  598. package/web-ui/build/static/dockerfile-B7ziWbf_.js +0 -1
  599. package/web-ui/build/static/dos-cbBC5Icj.js +0 -1
  600. package/web-ui/build/static/dot-JXSVTLEH.js +0 -1
  601. package/web-ui/build/static/dsconfig-sEua2C2o.js +0 -1
  602. package/web-ui/build/static/dts-Zem_gT_O.js +0 -1
  603. package/web-ui/build/static/dust-B-dZ6-uQ.js +0 -1
  604. package/web-ui/build/static/ebnf-CXfeZoXF.js +0 -1
  605. package/web-ui/build/static/ebnf-raQs4FpT.js +0 -1
  606. package/web-ui/build/static/editorconfig-hp8ARbHf.js +0 -1
  607. package/web-ui/build/static/eiffel-tO3jaG00.js +0 -1
  608. package/web-ui/build/static/ejs-BGmD5Rvl.js +0 -1
  609. package/web-ui/build/static/elixir-CF0JDN9L.js +0 -1
  610. package/web-ui/build/static/elixir-CFSil_Ou.js +0 -1
  611. package/web-ui/build/static/elm-As6XaD-g.js +0 -1
  612. package/web-ui/build/static/elm-pw5GpqTZ.js +0 -1
  613. package/web-ui/build/static/erb-BrpCJIyN.js +0 -1
  614. package/web-ui/build/static/erb-D2_eJU9C.js +0 -1
  615. package/web-ui/build/static/erlang-5rSv6NMZ.js +0 -1
  616. package/web-ui/build/static/erlang-RCAxVMBd.js +0 -1
  617. package/web-ui/build/static/erlang-repl-BN0h_6XR.js +0 -1
  618. package/web-ui/build/static/etlua-BMtMnKtv.js +0 -1
  619. package/web-ui/build/static/excel-CRNS57iM.js +0 -1
  620. package/web-ui/build/static/excel-formula-BNw56R2m.js +0 -1
  621. package/web-ui/build/static/factor-7lsloWTf.js +0 -1
  622. package/web-ui/build/static/false-CQUvGnfd.js +0 -1
  623. package/web-ui/build/static/firestore-security-rules-WC1PabFS.js +0 -1
  624. package/web-ui/build/static/fix-Cs6kLeYV.js +0 -1
  625. package/web-ui/build/static/flix-1fdMgw2I.js +0 -1
  626. package/web-ui/build/static/flow-CRPduKSH.js +0 -1
  627. package/web-ui/build/static/fortran-C-3TUt5R.js +0 -1
  628. package/web-ui/build/static/fortran-CA4bbZCj.js +0 -1
  629. package/web-ui/build/static/fsharp-BScjCFae.js +0 -1
  630. package/web-ui/build/static/fsharp-BtHWuW4o.js +0 -1
  631. package/web-ui/build/static/ftl-Re-S2zvF.js +0 -1
  632. package/web-ui/build/static/gams-Cr12l-cM.js +0 -1
  633. package/web-ui/build/static/gap-H0O9-Zju.js +0 -1
  634. package/web-ui/build/static/gauss-CW8jwURx.js +0 -1
  635. package/web-ui/build/static/gcode-CIxfYtg9.js +0 -1
  636. package/web-ui/build/static/gcode-CVqRWYeB.js +0 -1
  637. package/web-ui/build/static/gdscript-BltZCaKl.js +0 -1
  638. package/web-ui/build/static/gedcom-nMT5ety_.js +0 -1
  639. package/web-ui/build/static/gherkin-B4M7CGOo.js +0 -1
  640. package/web-ui/build/static/gherkin-DumuqAQF.js +0 -1
  641. package/web-ui/build/static/git-BBiBlZ5H.js +0 -1
  642. package/web-ui/build/static/glsl-D8ckiRVo.js +0 -1
  643. package/web-ui/build/static/glsl-Z4VdDyPa.js +0 -1
  644. package/web-ui/build/static/gml-BHuSndHE.js +0 -1
  645. package/web-ui/build/static/gml-DZpfN_A4.js +0 -1
  646. package/web-ui/build/static/gn-BjpAHNh_.js +0 -1
  647. package/web-ui/build/static/go-BeZ9IgZB.js +0 -1
  648. package/web-ui/build/static/go-HEXrcgIc.js +0 -1
  649. package/web-ui/build/static/go-module-BGdPb7sP.js +0 -1
  650. package/web-ui/build/static/golo-Cr70KUbI.js +0 -1
  651. package/web-ui/build/static/gradle-C7MXrDnB.js +0 -1
  652. package/web-ui/build/static/graphql-CJK0wQjf.js +0 -1
  653. package/web-ui/build/static/groovy-Bwe7hkFG.js +0 -1
  654. package/web-ui/build/static/groovy-Dc6WDoKa.js +0 -1
  655. package/web-ui/build/static/haml-BSsAjltt.js +0 -1
  656. package/web-ui/build/static/haml-CZih7X_4.js +0 -1
  657. package/web-ui/build/static/handlebars-CN8hCpsy.js +0 -1
  658. package/web-ui/build/static/handlebars-XBLc7i13.js +0 -1
  659. package/web-ui/build/static/haskell-BH9WhK10.js +0 -1
  660. package/web-ui/build/static/haskell-Djf2J1vd.js +0 -1
  661. package/web-ui/build/static/haxe-BllD-W9e.js +0 -1
  662. package/web-ui/build/static/haxe-DY8Hyn7u.js +0 -1
  663. package/web-ui/build/static/hcl-CfktAP2o.js +0 -1
  664. package/web-ui/build/static/hlsl-B2JSOD9d.js +0 -1
  665. package/web-ui/build/static/hoon-BILyDobB.js +0 -1
  666. package/web-ui/build/static/hpkp-Bb8rXx4p.js +0 -1
  667. package/web-ui/build/static/hsp-BmjeJC21.js +0 -1
  668. package/web-ui/build/static/hsts-DJhW57Fu.js +0 -1
  669. package/web-ui/build/static/htmlbars-CJe_ZLjw.js +0 -1
  670. package/web-ui/build/static/http-D7SlABvQ.js +0 -1
  671. package/web-ui/build/static/http-DEUJqmEm.js +0 -1
  672. package/web-ui/build/static/hy-DVfsgEbr.js +0 -1
  673. package/web-ui/build/static/ichigojam-CPdz2bOt.js +0 -1
  674. package/web-ui/build/static/icon-DYK9RbU9.js +0 -1
  675. package/web-ui/build/static/icu-message-format-HiZB_alB.js +0 -1
  676. package/web-ui/build/static/idris-Clk3tJIE.js +0 -1
  677. package/web-ui/build/static/iecst-D7wkeksq.js +0 -1
  678. package/web-ui/build/static/ignore-GSm-L3jG.js +0 -1
  679. package/web-ui/build/static/index-BJe5td0v.js +0 -13
  680. package/web-ui/build/static/index-BYvljeMN.js +0 -1
  681. package/web-ui/build/static/index-CLelJq9j.js +0 -1156
  682. package/web-ui/build/static/index-f5UnFSsY.css +0 -1
  683. package/web-ui/build/static/inform7-D3gc0hSc.js +0 -1
  684. package/web-ui/build/static/inform7-DLdvZTxX.js +0 -1
  685. package/web-ui/build/static/ini-CVcWx1TA.js +0 -1
  686. package/web-ui/build/static/ini-CxYBdsvZ.js +0 -1
  687. package/web-ui/build/static/io-D760QF0i.js +0 -1
  688. package/web-ui/build/static/irpf90-DfkXdZut.js +0 -1
  689. package/web-ui/build/static/isbl-Bl3W-krY.js +0 -1
  690. package/web-ui/build/static/j-DyJj9FSc.js +0 -1
  691. package/web-ui/build/static/java-CLw1cH97.js +0 -1
  692. package/web-ui/build/static/java-vXaHBzP4.js +0 -1
  693. package/web-ui/build/static/javadoc-p5hIe48g.js +0 -1
  694. package/web-ui/build/static/javadoclike-OXi-sQ0q.js +0 -1
  695. package/web-ui/build/static/javascript-CTSqES8o.js +0 -1
  696. package/web-ui/build/static/javastacktrace-PC9-3moA.js +0 -1
  697. package/web-ui/build/static/jboss-cli-CxOZKDLi.js +0 -1
  698. package/web-ui/build/static/jexl-C4kSXhD1.js +0 -1
  699. package/web-ui/build/static/jolie-CntM8cWx.js +0 -1
  700. package/web-ui/build/static/jq-D_4bTCm0.js +0 -1
  701. package/web-ui/build/static/js-extras-Cx9VAZJd.js +0 -1
  702. package/web-ui/build/static/js-templates-BqyJUDxJ.js +0 -1
  703. package/web-ui/build/static/jsdoc-CNHLgAph.js +0 -1
  704. package/web-ui/build/static/json-BXIFrbVC.js +0 -1
  705. package/web-ui/build/static/json-DRUrJL_F.js +0 -1
  706. package/web-ui/build/static/json5-EsTrOpXr.js +0 -1
  707. package/web-ui/build/static/jsonp-RijEuTJY.js +0 -1
  708. package/web-ui/build/static/jsstacktrace-dM13uE1y.js +0 -1
  709. package/web-ui/build/static/jsx-Cf0j02DZ.js +0 -1
  710. package/web-ui/build/static/julia-BLrtj5Dj.js +0 -1
  711. package/web-ui/build/static/julia-D0PJgQhi.js +0 -1
  712. package/web-ui/build/static/julia-repl-BLnLCve4.js +0 -1
  713. package/web-ui/build/static/keepalived-SvzEYloD.js +0 -1
  714. package/web-ui/build/static/keyman-B5l2mmmE.js +0 -1
  715. package/web-ui/build/static/kotlin-B_6COR1e.js +0 -1
  716. package/web-ui/build/static/kotlin-vd1Xdz6D.js +0 -1
  717. package/web-ui/build/static/kumir-8mIZWgJQ.js +0 -1
  718. package/web-ui/build/static/kusto-CoV2oHqt.js +0 -1
  719. package/web-ui/build/static/lasso-BjjUNa_o.js +0 -1
  720. package/web-ui/build/static/latex-C9KOfuFk.js +0 -1
  721. package/web-ui/build/static/latex-DhLttY-I.js +0 -1
  722. package/web-ui/build/static/latte-CaYNaOoK.js +0 -1
  723. package/web-ui/build/static/ldif-DFxnpH3G.js +0 -1
  724. package/web-ui/build/static/leaf-DrMpC83a.js +0 -1
  725. package/web-ui/build/static/less-DUoYpEFn.js +0 -1
  726. package/web-ui/build/static/less-nh0XCcut.js +0 -1
  727. package/web-ui/build/static/lilypond-BlqjLr3W.js +0 -1
  728. package/web-ui/build/static/liquid-BVGHSG0T.js +0 -1
  729. package/web-ui/build/static/lisp-CEK8BtYQ.js +0 -1
  730. package/web-ui/build/static/lisp-D_jGHxhc.js +0 -1
  731. package/web-ui/build/static/livecodeserver-CFUDw_SK.js +0 -1
  732. package/web-ui/build/static/livescript-C5xzpiLM.js +0 -1
  733. package/web-ui/build/static/livescript-CKoPcK0c.js +0 -1
  734. package/web-ui/build/static/llvm-BBOVIeTl.js +0 -1
  735. package/web-ui/build/static/llvm-ioC5bCUB.js +0 -1
  736. package/web-ui/build/static/log-CPYTqm4T.js +0 -1
  737. package/web-ui/build/static/lolcode-BkT93adT.js +0 -1
  738. package/web-ui/build/static/lsl-M98YPNRW.js +0 -1
  739. package/web-ui/build/static/lua-D7Lum5n9.js +0 -1
  740. package/web-ui/build/static/lua-DHyr0QwE.js +0 -1
  741. package/web-ui/build/static/magma-BwMFjwQu.js +0 -1
  742. package/web-ui/build/static/makefile-BFYZ-SfG.js +0 -1
  743. package/web-ui/build/static/makefile-D6oyR2lD.js +0 -1
  744. package/web-ui/build/static/markdown-6jtg6KZm.js +0 -1
  745. package/web-ui/build/static/markdown-DTLtPgeP.js +0 -1
  746. package/web-ui/build/static/markup-templating-K8uoAIqY.js +0 -1
  747. package/web-ui/build/static/mathematica-cW5hOuB2.js +0 -1
  748. package/web-ui/build/static/matlab-CwSNWEq8.js +0 -1
  749. package/web-ui/build/static/matlab-MQ972BY-.js +0 -1
  750. package/web-ui/build/static/maxima-CMSFLri-.js +0 -1
  751. package/web-ui/build/static/maxscript-BzcoS2KA.js +0 -1
  752. package/web-ui/build/static/mel-Cd20pAs-.js +0 -1
  753. package/web-ui/build/static/mel-KWG5N49g.js +0 -1
  754. package/web-ui/build/static/mercury-eW1ljJh0.js +0 -1
  755. package/web-ui/build/static/mermaid-D3zeCM84.js +0 -1
  756. package/web-ui/build/static/mipsasm-B5g6Ndra.js +0 -1
  757. package/web-ui/build/static/mizar-C_nZ0Ts9.js +0 -1
  758. package/web-ui/build/static/mizar-CuTNEv2t.js +0 -1
  759. package/web-ui/build/static/mojolicious-C1Xq--lT.js +0 -1
  760. package/web-ui/build/static/mongodb-C_3giArw.js +0 -1
  761. package/web-ui/build/static/monkey-DQ1olPd-.js +0 -1
  762. package/web-ui/build/static/monkey-n4Tbrep7.js +0 -1
  763. package/web-ui/build/static/moonscript-CmnQJuIL.js +0 -1
  764. package/web-ui/build/static/moonscript-DXgmWjLy.js +0 -1
  765. package/web-ui/build/static/n1ql-531a3W-1.js +0 -1
  766. package/web-ui/build/static/n1ql-BYH9EvME.js +0 -1
  767. package/web-ui/build/static/n4js-Cy0LcM-V.js +0 -1
  768. package/web-ui/build/static/nand2tetris-hdl-CKOztBDD.js +0 -1
  769. package/web-ui/build/static/naniscript-oLFpxBGE.js +0 -1
  770. package/web-ui/build/static/nasm-DLPnwFkM.js +0 -1
  771. package/web-ui/build/static/neon-Cn03wGUR.js +0 -1
  772. package/web-ui/build/static/nevod-C_VRvbdf.js +0 -1
  773. package/web-ui/build/static/nginx-60SpLv4t.js +0 -1
  774. package/web-ui/build/static/nginx-DZLHid-q.js +0 -1
  775. package/web-ui/build/static/nim-BnrHdqGC.js +0 -1
  776. package/web-ui/build/static/nim-Ds3pmwtE.js +0 -1
  777. package/web-ui/build/static/nix-Dl-dS0w4.js +0 -1
  778. package/web-ui/build/static/nix-jL62FzTz.js +0 -1
  779. package/web-ui/build/static/node-repl-BAuDzNZd.js +0 -1
  780. package/web-ui/build/static/nsis-CEnFjfNr.js +0 -1
  781. package/web-ui/build/static/nsis-CcCz6HIu.js +0 -1
  782. package/web-ui/build/static/objectivec-CZXfVowS.js +0 -1
  783. package/web-ui/build/static/objectivec-CuaFU-Ef.js +0 -1
  784. package/web-ui/build/static/ocaml-BGAzfwAx.js +0 -1
  785. package/web-ui/build/static/ocaml-BoO1lU26.js +0 -1
  786. package/web-ui/build/static/opencl-DAnD5xP-.js +0 -1
  787. package/web-ui/build/static/openqasm-CO7gdVj9.js +0 -1
  788. package/web-ui/build/static/openscad-B2wMEMQR.js +0 -1
  789. package/web-ui/build/static/oxygene-1erv93gF.js +0 -1
  790. package/web-ui/build/static/oz-D3334gi7.js +0 -1
  791. package/web-ui/build/static/parigp-rQZTN8zi.js +0 -1
  792. package/web-ui/build/static/parser-B4ZSZ1ig.js +0 -1
  793. package/web-ui/build/static/parser3-CCCjkYLG.js +0 -1
  794. package/web-ui/build/static/pascal-DeC9Pvom.js +0 -1
  795. package/web-ui/build/static/pascaligo-CT2u6UpO.js +0 -1
  796. package/web-ui/build/static/pcaxis-CvlRg6t4.js +0 -1
  797. package/web-ui/build/static/peoplecode-BYahULz2.js +0 -1
  798. package/web-ui/build/static/perl-CKgvyY59.js +0 -1
  799. package/web-ui/build/static/perl-E7sx7Izv.js +0 -1
  800. package/web-ui/build/static/pf-D9wnFBt7.js +0 -1
  801. package/web-ui/build/static/pgsql-CrlBdRAn.js +0 -1
  802. package/web-ui/build/static/php-D2O-B3y7.js +0 -1
  803. package/web-ui/build/static/php-extras-BKqZuzgt.js +0 -1
  804. package/web-ui/build/static/php-nfXl9WfB.js +0 -1
  805. package/web-ui/build/static/php-template-Cg8ERLNQ.js +0 -1
  806. package/web-ui/build/static/phpdoc-Z1u90OwH.js +0 -1
  807. package/web-ui/build/static/plaintext-DkNVeXWx.js +0 -1
  808. package/web-ui/build/static/plsql-DO5fJNhS.js +0 -1
  809. package/web-ui/build/static/pony-DXIqq5Bk.js +0 -1
  810. package/web-ui/build/static/powerquery-B2ovxJZi.js +0 -1
  811. package/web-ui/build/static/powershell-BVeqqari.js +0 -1
  812. package/web-ui/build/static/powershell-CskV4qWh.js +0 -1
  813. package/web-ui/build/static/processing-D90SJpnq.js +0 -1
  814. package/web-ui/build/static/processing-DP2mf97Z.js +0 -1
  815. package/web-ui/build/static/profile-H6zk8v_f.js +0 -1
  816. package/web-ui/build/static/prolog-AUfxYiJV.js +0 -1
  817. package/web-ui/build/static/prolog-Dz2WdsVN.js +0 -1
  818. package/web-ui/build/static/promql-CloMJmMW.js +0 -1
  819. package/web-ui/build/static/properties-CTl3mnrP.js +0 -1
  820. package/web-ui/build/static/properties-D2RfteTZ.js +0 -1
  821. package/web-ui/build/static/protobuf-Be9oqQCu.js +0 -1
  822. package/web-ui/build/static/protobuf-BgG8zUnY.js +0 -1
  823. package/web-ui/build/static/psl-Bqx8iN9e.js +0 -1
  824. package/web-ui/build/static/pug-CHfFC0Wg.js +0 -1
  825. package/web-ui/build/static/puppet-__1ifzZS.js +0 -1
  826. package/web-ui/build/static/puppet-pbtRCMgd.js +0 -1
  827. package/web-ui/build/static/pure-B9STuf4F.js +0 -1
  828. package/web-ui/build/static/purebasic-7ADyn-Ce.js +0 -1
  829. package/web-ui/build/static/purebasic-Bc06YQcD.js +0 -1
  830. package/web-ui/build/static/purescript-CU-dDebr.js +0 -1
  831. package/web-ui/build/static/python-BEsXrEbi.js +0 -1
  832. package/web-ui/build/static/python-CZFrgH2X.js +0 -1
  833. package/web-ui/build/static/python-repl-CI9GmJce.js +0 -1
  834. package/web-ui/build/static/q-E7xvTGRo.js +0 -1
  835. package/web-ui/build/static/q-hvg9aQoY.js +0 -1
  836. package/web-ui/build/static/qml-DkZWcxEv.js +0 -1
  837. package/web-ui/build/static/qml-DpdWla8G.js +0 -1
  838. package/web-ui/build/static/qore-Dsm7ACR_.js +0 -1
  839. package/web-ui/build/static/qsharp-BBec6MJR.js +0 -1
  840. package/web-ui/build/static/r-CTVkq_Ky.js +0 -1
  841. package/web-ui/build/static/r-DHGNCupF.js +0 -1
  842. package/web-ui/build/static/racket-hoSh4YPx.js +0 -1
  843. package/web-ui/build/static/reason-CQPUIbsm.js +0 -1
  844. package/web-ui/build/static/reasonml-BXtFFSTZ.js +0 -1
  845. package/web-ui/build/static/regex-BNkF_ufb.js +0 -1
  846. package/web-ui/build/static/rego-BXHrjItC.js +0 -1
  847. package/web-ui/build/static/renpy-CBQvK_5t.js +0 -1
  848. package/web-ui/build/static/rest-Bf8hzmF1.js +0 -1
  849. package/web-ui/build/static/rib-D0a4KzlP.js +0 -1
  850. package/web-ui/build/static/rip-DchN4BQN.js +0 -1
  851. package/web-ui/build/static/roboconf-HXnyGNTm.js +0 -1
  852. package/web-ui/build/static/roboconf-zfK6mgmU.js +0 -1
  853. package/web-ui/build/static/robotframework-DnP-vXyd.js +0 -1
  854. package/web-ui/build/static/routeros-CDirYxZY.js +0 -1
  855. package/web-ui/build/static/rsl-BCK_msc-.js +0 -1
  856. package/web-ui/build/static/ruby--mXX6GNK.js +0 -1
  857. package/web-ui/build/static/ruby-BIdQYq0Y.js +0 -1
  858. package/web-ui/build/static/ruleslanguage-BD07s5RU.js +0 -1
  859. package/web-ui/build/static/rust-Bgni9V7U.js +0 -1
  860. package/web-ui/build/static/rust-OywmQ2ox.js +0 -1
  861. package/web-ui/build/static/sas-B6-82htH.js +0 -1
  862. package/web-ui/build/static/sas-k9XEScbR.js +0 -1
  863. package/web-ui/build/static/sass-BOvNBStT.js +0 -1
  864. package/web-ui/build/static/scala-At07fmMd.js +0 -1
  865. package/web-ui/build/static/scala-DUOfqSaU.js +0 -1
  866. package/web-ui/build/static/scheme-B87lC0bK.js +0 -1
  867. package/web-ui/build/static/scheme-BS7OzWRX.js +0 -1
  868. package/web-ui/build/static/scilab-Bmn4jjcu.js +0 -1
  869. package/web-ui/build/static/scss-DTeB95yE.js +0 -1
  870. package/web-ui/build/static/scss-xilnl6Dx.js +0 -1
  871. package/web-ui/build/static/shell-CKetyy4y.js +0 -1
  872. package/web-ui/build/static/shell-session-B6rat2c7.js +0 -1
  873. package/web-ui/build/static/smali-C9O9CXOD.js +0 -1
  874. package/web-ui/build/static/smali-CBkgbinS.js +0 -1
  875. package/web-ui/build/static/smalltalk-CuUjFHiz.js +0 -1
  876. package/web-ui/build/static/smalltalk-D0xhFL9b.js +0 -1
  877. package/web-ui/build/static/smarty-CY0N0d5x.js +0 -1
  878. package/web-ui/build/static/sml-BVAw3fjB.js +0 -1
  879. package/web-ui/build/static/sml-CO9XB1ax.js +0 -1
  880. package/web-ui/build/static/solidity-BNixD4Dx.js +0 -1
  881. package/web-ui/build/static/solution-file-DHyGXf2y.js +0 -1
  882. package/web-ui/build/static/soy-Cxgjntsl.js +0 -1
  883. package/web-ui/build/static/sparql-CDLqu9vy.js +0 -1
  884. package/web-ui/build/static/splunk-spl-Cmkl_Xmw.js +0 -1
  885. package/web-ui/build/static/sqf-CIGKolw3.js +0 -1
  886. package/web-ui/build/static/sqf-Cfp_lC6-.js +0 -1
  887. package/web-ui/build/static/sql-DHOGwYxe.js +0 -1
  888. package/web-ui/build/static/sql-QIw1Q2yi.js +0 -1
  889. package/web-ui/build/static/sql_more-C0b3-InT.js +0 -1
  890. package/web-ui/build/static/squirrel-DASToo1F.js +0 -1
  891. package/web-ui/build/static/stan-DHMkcFZg.js +0 -1
  892. package/web-ui/build/static/stan-No3nsdnQ.js +0 -1
  893. package/web-ui/build/static/stata-Brkzu5Nv.js +0 -1
  894. package/web-ui/build/static/step21-D2l5M5Ml.js +0 -1
  895. package/web-ui/build/static/stylus-Bx6FaZN_.js +0 -1
  896. package/web-ui/build/static/stylus-CVkTaPns.js +0 -1
  897. package/web-ui/build/static/subunit-CDrsAMuL.js +0 -1
  898. package/web-ui/build/static/swift-BSw_pS-l.js +0 -1
  899. package/web-ui/build/static/swift-BWyqwIo8.js +0 -1
  900. package/web-ui/build/static/systemd-BwqpYcJK.js +0 -1
  901. package/web-ui/build/static/t4-cs-CwsJLOxV.js +0 -1
  902. package/web-ui/build/static/t4-templating-BfxY01xf.js +0 -1
  903. package/web-ui/build/static/t4-vb-BhsKKFhp.js +0 -1
  904. package/web-ui/build/static/taggerscript-Bkew95or.js +0 -1
  905. package/web-ui/build/static/tap-DHovcHbS.js +0 -1
  906. package/web-ui/build/static/tap-DPl9uPo4.js +0 -1
  907. package/web-ui/build/static/tcl-BeozHO-f.js +0 -1
  908. package/web-ui/build/static/tcl-Df_8ItQH.js +0 -1
  909. package/web-ui/build/static/textile-B3m_f58b.js +0 -1
  910. package/web-ui/build/static/thrift-D20n-HpW.js +0 -1
  911. package/web-ui/build/static/toml-C-fTAonK.js +0 -1
  912. package/web-ui/build/static/tp-hGbXe5Eo.js +0 -1
  913. package/web-ui/build/static/tremor-BaVOtRFz.js +0 -1
  914. package/web-ui/build/static/tsx-ChPInNl0.js +0 -1
  915. package/web-ui/build/static/tt2-DAIJ8cpz.js +0 -1
  916. package/web-ui/build/static/turtle-B7z_y-PK.js +0 -1
  917. package/web-ui/build/static/twig-TUEkve6W.js +0 -1
  918. package/web-ui/build/static/twig-stKDItz7.js +0 -1
  919. package/web-ui/build/static/typescript-BPdM-QOM.js +0 -1
  920. package/web-ui/build/static/typescript-DjSY4MvL.js +0 -1
  921. package/web-ui/build/static/typoscript-BQHgQtEL.js +0 -1
  922. package/web-ui/build/static/unrealscript-g8yNPQQ5.js +0 -1
  923. package/web-ui/build/static/uorazor-CnuMiQz9.js +0 -1
  924. package/web-ui/build/static/uri-CfioiemU.js +0 -1
  925. package/web-ui/build/static/v-B69Oau14.js +0 -1
  926. package/web-ui/build/static/vala-C0PjlK3l.js +0 -1
  927. package/web-ui/build/static/vala-COgjD3gU.js +0 -1
  928. package/web-ui/build/static/vbnet-CklOnyuR.js +0 -1
  929. package/web-ui/build/static/vbnet-MxHUC5Mz.js +0 -1
  930. package/web-ui/build/static/vbscript-BxQnA97w.js +0 -1
  931. package/web-ui/build/static/vbscript-html-DOtde7dD.js +0 -1
  932. package/web-ui/build/static/velocity-l8B9m66X.js +0 -1
  933. package/web-ui/build/static/verilog-DF6dF-Vp.js +0 -1
  934. package/web-ui/build/static/verilog-Dgb9SDRX.js +0 -1
  935. package/web-ui/build/static/vhdl-0GarU_AK.js +0 -1
  936. package/web-ui/build/static/vhdl-BfPQnOdI.js +0 -1
  937. package/web-ui/build/static/vim-Likg_-II.js +0 -1
  938. package/web-ui/build/static/vim-k53Sj7A3.js +0 -1
  939. package/web-ui/build/static/visual-basic-BNVZCzlV.js +0 -1
  940. package/web-ui/build/static/warpscript-BkLK5iuW.js +0 -1
  941. package/web-ui/build/static/wasm-CQhA1ece.js +0 -1
  942. package/web-ui/build/static/web-idl-DmNsI0kE.js +0 -1
  943. package/web-ui/build/static/wiki-B3z4pmra.js +0 -1
  944. package/web-ui/build/static/wolfram-Dsf21d_g.js +0 -1
  945. package/web-ui/build/static/wren-BZXZlzrL.js +0 -1
  946. package/web-ui/build/static/x86asm-DpWGZhJU.js +0 -1
  947. package/web-ui/build/static/xeora-8xPZN4DH.js +0 -1
  948. package/web-ui/build/static/xl-XkdWYMGl.js +0 -1
  949. package/web-ui/build/static/xml-BBdROEWt.js +0 -1
  950. package/web-ui/build/static/xml-doc-Cjs4OpTe.js +0 -1
  951. package/web-ui/build/static/xojo-nCen1FPx.js +0 -1
  952. package/web-ui/build/static/xquery-CBFkAxo1.js +0 -1
  953. package/web-ui/build/static/xquery-Dwsc1weX.js +0 -1
  954. package/web-ui/build/static/yaml-DzSAh6jl.js +0 -1
  955. package/web-ui/build/static/yaml-Lg8gnEUU.js +0 -1
  956. package/web-ui/build/static/yang-Bd-v2b0k.js +0 -1
  957. package/web-ui/build/static/zephir-wbJOizIa.js +0 -1
  958. package/web-ui/build/static/zig-Cz384XjE.js +0 -1
@@ -14,18 +14,13 @@
14
14
 
15
15
  import { promises as fs } from 'fs';
16
16
  import path from 'path';
17
- import crypto from 'crypto';
18
- import os from 'os';
19
17
  import { getUserDataPaths, ensureUserDataDirs } from '../utilities/userDataDir.js';
20
18
  import { isPlaceholderApiKey } from '../utilities/apiKeyPlaceholders.js';
21
-
22
- // Encryption configuration
23
- const ALGORITHM = 'aes-256-gcm';
24
- const KEY_LENGTH = 32; // 256 bits
25
- const IV_LENGTH = 16;
26
- const AUTH_TAG_LENGTH = 16;
27
- const SALT_LENGTH = 32;
28
- const PBKDF2_ITERATIONS = 100000;
19
+ import {
20
+ getOrCreateEncryptionKey as _getOrCreateEncryptionKey,
21
+ encrypt as _cipherEncrypt,
22
+ decrypt as _cipherDecrypt,
23
+ } from '../utilities/secretsCipher.js';
29
24
 
30
25
  class ApiKeyManager {
31
26
  constructor(logger) {
@@ -73,103 +68,21 @@ class ApiKeyManager {
73
68
  }
74
69
 
75
70
  /**
76
- * Get or create a machine-specific encryption key
77
- * @param {string} settingsDir - Settings directory path
78
- * @returns {Promise<Buffer>} Encryption key
71
+ * Cipher primitives delegate to `utilities/secretsCipher.js` so the
72
+ * api-keys.enc and auth-cache.enc stores share one implementation
73
+ * and one byte layout. See that module for the on-disk format and
74
+ * the KEY_DERIVATION_DOMAIN constant.
79
75
  */
80
76
  async _getOrCreateEncryptionKey(settingsDir) {
81
- const saltFile = path.join(settingsDir, '.key-salt');
82
- let salt;
83
-
84
- try {
85
- salt = await fs.readFile(saltFile);
86
- } catch (error) {
87
- // Generate new salt
88
- salt = crypto.randomBytes(SALT_LENGTH);
89
- await fs.writeFile(saltFile, salt, { mode: 0o600 });
90
- this.logger?.info('[ApiKeyManager] Generated new encryption salt');
91
- }
92
-
93
- // Derive key from salt + machine-specific data
94
- const machineData = this._getMachineIdentifier();
95
- const key = crypto.pbkdf2Sync(
96
- machineData,
97
- salt,
98
- PBKDF2_ITERATIONS,
99
- KEY_LENGTH,
100
- 'sha256'
101
- );
102
-
103
- return key;
77
+ return _getOrCreateEncryptionKey(settingsDir, this.logger);
104
78
  }
105
79
 
106
- /**
107
- * Get a machine-specific identifier for key derivation
108
- * @returns {string}
109
- */
110
- _getMachineIdentifier() {
111
- const parts = [
112
- os.hostname(),
113
- os.homedir(),
114
- os.userInfo().username,
115
- process.platform,
116
- 'loxia-api-key-encryption-v1'
117
- ];
118
- return parts.join(':');
119
- }
120
-
121
- /**
122
- * Encrypt data using AES-256-GCM
123
- * @param {string} plaintext - Data to encrypt
124
- * @returns {string} Encrypted data as base64
125
- */
126
80
  _encrypt(plaintext) {
127
- if (!this.encryptionKey) {
128
- throw new Error('Encryption key not initialized');
129
- }
130
-
131
- const iv = crypto.randomBytes(IV_LENGTH);
132
- const cipher = crypto.createCipheriv(ALGORITHM, this.encryptionKey, iv);
133
-
134
- let encrypted = cipher.update(plaintext, 'utf8', 'base64');
135
- encrypted += cipher.final('base64');
136
-
137
- const authTag = cipher.getAuthTag();
138
-
139
- // Combine IV + authTag + encrypted data
140
- const combined = Buffer.concat([
141
- iv,
142
- authTag,
143
- Buffer.from(encrypted, 'base64')
144
- ]);
145
-
146
- return combined.toString('base64');
81
+ return _cipherEncrypt(plaintext, this.encryptionKey);
147
82
  }
148
83
 
149
- /**
150
- * Decrypt data using AES-256-GCM
151
- * @param {string} encryptedData - Encrypted data as base64
152
- * @returns {string} Decrypted plaintext
153
- */
154
84
  _decrypt(encryptedData) {
155
- if (!this.encryptionKey) {
156
- throw new Error('Encryption key not initialized');
157
- }
158
-
159
- const combined = Buffer.from(encryptedData, 'base64');
160
-
161
- // Extract IV, authTag, and encrypted data
162
- const iv = combined.subarray(0, IV_LENGTH);
163
- const authTag = combined.subarray(IV_LENGTH, IV_LENGTH + AUTH_TAG_LENGTH);
164
- const encrypted = combined.subarray(IV_LENGTH + AUTH_TAG_LENGTH);
165
-
166
- const decipher = crypto.createDecipheriv(ALGORITHM, this.encryptionKey, iv);
167
- decipher.setAuthTag(authTag);
168
-
169
- let decrypted = decipher.update(encrypted.toString('base64'), 'base64', 'utf8');
170
- decrypted += decipher.final('utf8');
171
-
172
- return decrypted;
85
+ return _cipherDecrypt(encryptedData, this.encryptionKey);
173
86
  }
174
87
 
175
88
  /**
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Encrypted persistence for `webServer.lastAuthResult`.
3
+ *
4
+ * Purpose:
5
+ * - Survive local-server restarts without losing the OAuth JWT.
6
+ * - Without this, every restart wipes the in-memory auth cache, so
7
+ * the FE polling fallback at `/api/auth/status` returns
8
+ * `{ user: null, jwt: null }` and any frontend that didn't already
9
+ * capture the JWT in its own localStorage (page reload after a
10
+ * server bounce, fresh browser, incognito tab) gets 401s on every
11
+ * marketplace publish/install/rate call.
12
+ *
13
+ * Why encrypted:
14
+ * - The cache row carries a raw JWT — a bearer credential. Storing it
15
+ * in plaintext on disk would let any local process with file-read
16
+ * access impersonate the user against the marketplace service.
17
+ *
18
+ * Storage: `<userDataDir>/settings/auth-cache.enc`. Cipher and key
19
+ * derivation are shared with `apiKeyManager` via
20
+ * `utilities/secretsCipher.js` — DRY by design.
21
+ */
22
+
23
+ import { promises as fs } from 'fs';
24
+ import path from 'path';
25
+ import { getUserDataPaths, ensureUserDataDirs } from '../utilities/userDataDir.js';
26
+ import {
27
+ getOrCreateEncryptionKey,
28
+ encrypt,
29
+ decrypt,
30
+ } from '../utilities/secretsCipher.js';
31
+
32
+ const FILE_NAME = 'auth-cache.enc';
33
+ const SCHEMA_VERSION = 1;
34
+
35
+ class AuthCacheStore {
36
+ constructor(logger) {
37
+ this.logger = logger;
38
+ this.persistenceFile = null;
39
+ this.encryptionKey = null;
40
+ this.initialized = false;
41
+ }
42
+
43
+ /**
44
+ * Resolve the encrypted file path and derive (or load) the AES key.
45
+ * Idempotent. Failures are non-fatal — the store then behaves as a
46
+ * no-op (load returns null, save silently swallows), so a broken
47
+ * disk doesn't crash the server boot.
48
+ */
49
+ async initialize() {
50
+ if (this.initialized) return;
51
+ try {
52
+ await ensureUserDataDirs();
53
+ const paths = getUserDataPaths();
54
+ this.persistenceFile = path.join(paths.settings, FILE_NAME);
55
+ this.encryptionKey = await getOrCreateEncryptionKey(paths.settings, this.logger);
56
+ this.initialized = true;
57
+ this.logger?.info?.('[AuthCacheStore] Initialized');
58
+ } catch (error) {
59
+ this.logger?.warn?.('[AuthCacheStore] init failed, running in memory-only mode', {
60
+ error: error.message,
61
+ });
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Load and decrypt the persisted cache row.
67
+ * Returns null when the file is missing, corrupted, schema-mismatched,
68
+ * or the store failed to initialize. Never throws.
69
+ *
70
+ * @returns {Promise<Object|null>} the `lastAuthResult`-shaped object
71
+ * ({ user, hasApiKey, jwt, timestamp }) or null.
72
+ */
73
+ async load() {
74
+ if (!this.initialized) return null;
75
+ try {
76
+ const ciphertext = await fs.readFile(this.persistenceFile, 'utf8');
77
+ const decoded = decrypt(ciphertext, this.encryptionKey);
78
+ const data = JSON.parse(decoded);
79
+ if (data?.version !== SCHEMA_VERSION || !data.cache) {
80
+ this.logger?.warn?.('[AuthCacheStore] schema mismatch, ignoring on-disk cache', {
81
+ version: data?.version,
82
+ });
83
+ return null;
84
+ }
85
+ return data.cache;
86
+ } catch (error) {
87
+ if (error.code !== 'ENOENT') {
88
+ this.logger?.warn?.('[AuthCacheStore] load failed', { error: error.message });
89
+ }
90
+ return null;
91
+ }
92
+ }
93
+
94
+ /**
95
+ * Persist a cache row. Passing null clears the file (delegate to
96
+ * clear() for clarity; this is a convenience for the webServer
97
+ * call site that always wants "make disk match memory").
98
+ *
99
+ * @param {Object|null} cache
100
+ */
101
+ async save(cache) {
102
+ if (!this.initialized) return;
103
+ if (cache === null || cache === undefined) {
104
+ await this.clear();
105
+ return;
106
+ }
107
+ try {
108
+ const payload = {
109
+ version: SCHEMA_VERSION,
110
+ savedAt: new Date().toISOString(),
111
+ cache,
112
+ };
113
+ const ciphertext = encrypt(JSON.stringify(payload), this.encryptionKey);
114
+ await fs.writeFile(this.persistenceFile, ciphertext, { mode: 0o600 });
115
+ this.logger?.debug?.('[AuthCacheStore] saved', {
116
+ hasUser: !!cache.user,
117
+ hasJwt: !!cache.jwt,
118
+ });
119
+ } catch (error) {
120
+ this.logger?.warn?.('[AuthCacheStore] save failed', { error: error.message });
121
+ }
122
+ }
123
+
124
+ /**
125
+ * Delete the on-disk cache. No-op when the file is already absent.
126
+ */
127
+ async clear() {
128
+ if (!this.initialized) return;
129
+ try {
130
+ await fs.unlink(this.persistenceFile);
131
+ this.logger?.info?.('[AuthCacheStore] cleared');
132
+ } catch (error) {
133
+ if (error.code !== 'ENOENT') {
134
+ this.logger?.warn?.('[AuthCacheStore] clear failed', { error: error.message });
135
+ }
136
+ }
137
+ }
138
+ }
139
+
140
+ export default AuthCacheStore;
@@ -12,7 +12,15 @@
12
12
  * Run with: npm run test:e2e
13
13
  */
14
14
 
15
- import { describe, test, expect, beforeAll, afterAll } from '@jest/globals';
15
+ import { describe, test, expect, beforeAll, afterAll, jest } from '@jest/globals';
16
+
17
+ // Real-network tests against example.com / iana.org are inherently
18
+ // flaky on TCP / DNS / target-server hiccups. The contract under test
19
+ // is "the WebTool chain machinery works", not "example.com is always
20
+ // up", so we tolerate up to 2 retries before declaring failure.
21
+ // If a test fails 3 times in a row, that's a real signal worth
22
+ // investigating; transient flakes get absorbed silently.
23
+ jest.retryTimes(2, { logErrorsBeforeRetry: true });
16
24
  import os from 'os';
17
25
  import fs from 'fs';
18
26
 
@@ -1193,14 +1193,30 @@ If blocked (CAPTCHA, access denied), use stealthLevel: "maximum" (visible browse
1193
1193
  const fetchStatus = fetchResponse ? fetchResponse.status() : null;
1194
1194
 
1195
1195
  if (fetchStatus && fetchStatus >= 400) {
1196
+ // A page that returned 4xx/5xx did NOT give the agent what it
1197
+ // asked for. We used to return `success: true` here on the
1198
+ // theory that "the fetch itself executed"; downstream agents
1199
+ // then ignored the warning and treated the error page as
1200
+ // content. Switching to `success: false` matches the rest of
1201
+ // the tool contract (operation either achieved its purpose
1202
+ // or it didn't) AND surfaces the diagnostic via the standard
1203
+ // `error` field that callers already inspect.
1204
+ const reason =
1205
+ fetchStatus >= 500 ? 'server error' :
1206
+ fetchStatus === 404 ? 'page not found' :
1207
+ fetchStatus === 403 ? 'access forbidden' :
1208
+ fetchStatus === 401 ? 'authentication required' :
1209
+ 'client error';
1196
1210
  const errorResult = {
1197
- success: true, // Fetch itself executed — page returned error status
1211
+ success: false,
1198
1212
  url,
1199
1213
  httpStatus: fetchStatus,
1200
- diagnostic: `Page returned HTTP ${fetchStatus} (${fetchStatus >= 500 ? 'server error' : fetchStatus === 404 ? 'page not found' : fetchStatus === 403 ? 'access forbidden' : 'client error'})`,
1201
- warning: `HTTP ${fetchStatus} — the page loaded but returned an error status. Content may still be available.`
1214
+ error: `HTTP ${fetchStatus}: ${reason}`,
1215
+ diagnostic: `Page returned HTTP ${fetchStatus} (${reason})`,
1216
+ warning: `HTTP ${fetchStatus} — the page loaded but returned an error status. Content may still be available.`,
1202
1217
  };
1203
- // Still try to get title for context
1218
+ // Still try to get title for context — error pages often have
1219
+ // useful titles like "404 - Not Found".
1204
1220
  try { errorResult.title = await page.title(); } catch {}
1205
1221
  // Don't close page here — finally block handles it
1206
1222
  return errorResult;
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Tests for the auth-cache shape + state transitions used by the
3
+ * webServer's /auth/callback, /api/auth/status, and /api/auth/resolve
4
+ * routes.
5
+ *
6
+ * These lock the marketplace-auth bug we fixed in 2026-05: a user who
7
+ * missed the OAuth WS broadcast (page reload, dropped connection)
8
+ * would recover their user account via the polling fallback but lose
9
+ * the JWT, leading to 401 "Authentication required" on every
10
+ * marketplace publish/install/rate call.
11
+ */
12
+ import { describe, test, expect } from '@jest/globals';
13
+ import {
14
+ recordOAuthResult,
15
+ recordResolvedUser,
16
+ projectAuthStatus,
17
+ } from '../authCache.js';
18
+
19
+ // ─── recordOAuthResult ────────────────────────────────────────────────
20
+
21
+ describe('recordOAuthResult', () => {
22
+ test('captures user, jwt, hasApiKey + a timestamp on the cache row', () => {
23
+ const row = recordOAuthResult({
24
+ user: { id: 'u1', email: 'a@b.com' },
25
+ jwt: 'eyJhbG...real-jwt',
26
+ hasApiKey: true,
27
+ });
28
+ expect(row.user).toEqual({ id: 'u1', email: 'a@b.com' });
29
+ expect(row.jwt).toBe('eyJhbG...real-jwt');
30
+ expect(row.hasApiKey).toBe(true);
31
+ expect(typeof row.timestamp).toBe('string');
32
+ // Must be a valid ISO datetime
33
+ expect(new Date(row.timestamp).toString()).not.toBe('Invalid Date');
34
+ });
35
+
36
+ test('CRITICAL: jwt is on the cache row — this is the contract that prevents 401-on-marketplace', () => {
37
+ // The bug we're guarding against: previously this function
38
+ // implicitly did `{user, hasApiKey, timestamp}` and forgot the JWT.
39
+ // Polling fallback then returned no JWT and marketplace auth broke.
40
+ const row = recordOAuthResult({ user: { id: 'u' }, jwt: 'tok', hasApiKey: true });
41
+ expect(row).toHaveProperty('jwt', 'tok');
42
+ });
43
+
44
+ test('non-string jwt collapses to null (defensive against malformed input)', () => {
45
+ expect(recordOAuthResult({ user: {}, jwt: null, hasApiKey: false }).jwt).toBeNull();
46
+ expect(recordOAuthResult({ user: {}, jwt: undefined, hasApiKey: false }).jwt).toBeNull();
47
+ expect(recordOAuthResult({ user: {}, jwt: '', hasApiKey: false }).jwt).toBeNull();
48
+ expect(recordOAuthResult({ user: {}, jwt: 12345, hasApiKey: false }).jwt).toBeNull();
49
+ expect(recordOAuthResult({ user: {}, jwt: { token: 'x' }, hasApiKey: false }).jwt).toBeNull();
50
+ });
51
+
52
+ test('hasApiKey coerces to bool', () => {
53
+ expect(recordOAuthResult({ hasApiKey: 1 }).hasApiKey).toBe(true);
54
+ expect(recordOAuthResult({ hasApiKey: 0 }).hasApiKey).toBe(false);
55
+ expect(recordOAuthResult({ hasApiKey: 'yes' }).hasApiKey).toBe(true);
56
+ expect(recordOAuthResult({}).hasApiKey).toBe(false);
57
+ });
58
+
59
+ test('null user passes through as null (degraded but valid cache row)', () => {
60
+ expect(recordOAuthResult({ user: null, jwt: 'x', hasApiKey: true }).user).toBeNull();
61
+ });
62
+
63
+ test('explicit timestamp wins (useful for deterministic tests)', () => {
64
+ const row = recordOAuthResult({ user: {}, timestamp: '2026-05-01T00:00:00Z' });
65
+ expect(row.timestamp).toBe('2026-05-01T00:00:00Z');
66
+ });
67
+ });
68
+
69
+ // ─── recordResolvedUser ───────────────────────────────────────────────
70
+
71
+ describe('recordResolvedUser', () => {
72
+ test('CRITICAL: preserves a JWT from a previous OAuth cache row', () => {
73
+ // Resolve happens AFTER /auth/callback when the FE loads with an
74
+ // existing API key. Earlier code overwrote lastAuthResult and
75
+ // silently wiped the OAuth-minted JWT, breaking marketplace auth.
76
+ const prev = recordOAuthResult({ user: { id: 'u1' }, jwt: 'oauth-token', hasApiKey: true });
77
+ const next = recordResolvedUser({ user: { id: 'u1', email: 'a@b' }, prevCache: prev });
78
+ expect(next.jwt).toBe('oauth-token');
79
+ expect(next.user).toEqual({ id: 'u1', email: 'a@b' });
80
+ });
81
+
82
+ test('hasApiKey is always true on this path (resolve requires an API key)', () => {
83
+ expect(recordResolvedUser({ user: { id: 'u' }, prevCache: null }).hasApiKey).toBe(true);
84
+ });
85
+
86
+ test('no prior JWT → cache row has jwt: null (no marketplace auth available)', () => {
87
+ const next = recordResolvedUser({ user: { id: 'u' }, prevCache: null });
88
+ expect(next.jwt).toBeNull();
89
+ });
90
+
91
+ test('prior cache without jwt → null (matches the no-prior case)', () => {
92
+ const prev = { user: { id: 'u' }, hasApiKey: true, timestamp: '2026-01-01T00:00:00Z' };
93
+ const next = recordResolvedUser({ user: { id: 'u' }, prevCache: prev });
94
+ expect(next.jwt).toBeNull();
95
+ });
96
+
97
+ test('prior cache with empty/non-string jwt is treated as no jwt', () => {
98
+ for (const badJwt of [null, undefined, '', 0, {}, []]) {
99
+ const prev = { user: {}, hasApiKey: true, jwt: badJwt, timestamp: '2026-01-01T00:00:00Z' };
100
+ expect(recordResolvedUser({ user: {}, prevCache: prev }).jwt).toBeNull();
101
+ }
102
+ });
103
+
104
+ test('explicit timestamp wins (deterministic tests)', () => {
105
+ const next = recordResolvedUser({
106
+ user: { id: 'u' },
107
+ prevCache: null,
108
+ timestamp: '2026-05-03T12:00:00Z',
109
+ });
110
+ expect(next.timestamp).toBe('2026-05-03T12:00:00Z');
111
+ });
112
+ });
113
+
114
+ // ─── projectAuthStatus ────────────────────────────────────────────────
115
+
116
+ describe('projectAuthStatus', () => {
117
+ test('returns null user + null jwt when no cache exists yet', () => {
118
+ const r = projectAuthStatus(null);
119
+ expect(r.user).toBeNull();
120
+ expect(r.jwt).toBeNull();
121
+ expect(r.success).toBe(true);
122
+ });
123
+
124
+ test('returns the cached user + jwt when fresh', () => {
125
+ const cache = recordOAuthResult({
126
+ user: { id: 'u1' }, jwt: 'tok', hasApiKey: true,
127
+ });
128
+ const r = projectAuthStatus(cache);
129
+ expect(r.user).toEqual({ id: 'u1' });
130
+ expect(r.jwt).toBe('tok');
131
+ expect(r.authenticated).toBe(true);
132
+ });
133
+
134
+ test('CRITICAL: jwt round-trips from recordOAuthResult through projectAuthStatus', () => {
135
+ // The full bug-fix contract: callback → cache → status → FE can read JWT.
136
+ const cache = recordOAuthResult({
137
+ user: { id: 'u' }, jwt: 'the-jwt-value', hasApiKey: true,
138
+ });
139
+ const status = projectAuthStatus(cache);
140
+ expect(status.jwt).toBe('the-jwt-value');
141
+ });
142
+
143
+ test('staleness gate: cache predating ?since= reports user=null (and jwt=null)', () => {
144
+ const cache = recordOAuthResult({
145
+ user: { id: 'u' }, jwt: 'old-tok', hasApiKey: true,
146
+ timestamp: '2026-05-01T10:00:00Z',
147
+ });
148
+ // Caller asking about an auth event AFTER the cache was written.
149
+ const r = projectAuthStatus(cache, { since: '2026-05-01T11:00:00Z' });
150
+ expect(r.user).toBeNull();
151
+ expect(r.jwt).toBeNull();
152
+ });
153
+
154
+ test('staleness gate: cache POST-DATING ?since= passes through', () => {
155
+ const cache = recordOAuthResult({
156
+ user: { id: 'u' }, jwt: 'fresh-tok', hasApiKey: true,
157
+ timestamp: '2026-05-01T11:00:00Z',
158
+ });
159
+ const r = projectAuthStatus(cache, { since: '2026-05-01T10:00:00Z' });
160
+ expect(r.user).toEqual({ id: 'u' });
161
+ expect(r.jwt).toBe('fresh-tok');
162
+ });
163
+
164
+ test('staleness gate: equal timestamps → stale (strict <=)', () => {
165
+ const cache = recordOAuthResult({
166
+ user: { id: 'u' }, jwt: 'tok', hasApiKey: true,
167
+ timestamp: '2026-05-01T10:00:00Z',
168
+ });
169
+ const r = projectAuthStatus(cache, { since: '2026-05-01T10:00:00Z' });
170
+ expect(r.user).toBeNull();
171
+ });
172
+
173
+ test('PAIR INVARIANT: when user is null, jwt MUST be null too (never user=null with jwt=set)', () => {
174
+ // Cache exists but is stale → user=null. JWT must follow.
175
+ const cache = recordOAuthResult({
176
+ user: { id: 'u' }, jwt: 'tok',
177
+ timestamp: '2026-05-01T00:00:00Z',
178
+ });
179
+ const r = projectAuthStatus(cache, { since: '2026-05-02T00:00:00Z' });
180
+ expect(r.user).toBeNull();
181
+ expect(r.jwt).toBeNull();
182
+ });
183
+
184
+ test('user without jwt (resolve-via-api-key path) returns user but jwt=null', () => {
185
+ // /auth/resolve sets user but no JWT. Marketplace will 401 — correct
186
+ // behavior, not this fix's job to mint a JWT here.
187
+ const cache = recordResolvedUser({ user: { id: 'u' }, prevCache: null });
188
+ const r = projectAuthStatus(cache);
189
+ expect(r.user).toEqual({ id: 'u' });
190
+ expect(r.jwt).toBeNull();
191
+ });
192
+
193
+ test('authenticated reflects the live hasApiKey override (not the cache value)', () => {
194
+ // The route passes the apiKeyManager's CURRENT view; cache might be stale.
195
+ const cache = recordOAuthResult({ user: { id: 'u' }, jwt: 'x', hasApiKey: true });
196
+ const r = projectAuthStatus(cache, { hasApiKey: false });
197
+ expect(r.authenticated).toBe(false);
198
+ });
199
+
200
+ test('falls back to cache.hasApiKey when no override given', () => {
201
+ const cache = recordOAuthResult({ user: { id: 'u' }, jwt: 'x', hasApiKey: true });
202
+ const r = projectAuthStatus(cache);
203
+ expect(r.authenticated).toBe(true);
204
+ });
205
+ });
206
+
207
+ // ─── End-to-end scenario coverage (the actual bug story) ──────────────
208
+
209
+ describe('full scenario: OAuth → resolve → polling fallback (the bug we fixed)', () => {
210
+ test('happy path: OAuth callback → poll status → JWT returned', () => {
211
+ // 1. User signs in via OAuth. /auth/callback runs:
212
+ let cache = recordOAuthResult({
213
+ user: { id: 'u1', email: 'alice@example.com' },
214
+ jwt: 'oauth-issued-jwt',
215
+ hasApiKey: true,
216
+ });
217
+ // 2. WebSocket broadcast misses (page reload). FE polls /api/auth/status:
218
+ const status = projectAuthStatus(cache, { hasApiKey: true });
219
+ // 3. Polling response now contains jwt → FE writes to localStorage → marketplace auth works
220
+ expect(status.user.email).toBe('alice@example.com');
221
+ expect(status.jwt).toBe('oauth-issued-jwt');
222
+ });
223
+
224
+ test('OAuth then resolve: JWT survives the resolve-overwrite', () => {
225
+ // 1. OAuth login caches everything including the JWT.
226
+ let cache = recordOAuthResult({
227
+ user: { id: 'u1' }, jwt: 'oauth-jwt', hasApiKey: true,
228
+ });
229
+ // 2. Frontend later hits /auth/resolve (e.g. on a fresh page load
230
+ // where API key is already set). Without the fix this would have
231
+ // overwritten cache.jwt = undefined.
232
+ cache = recordResolvedUser({
233
+ user: { id: 'u1', email: 'alice@example.com' },
234
+ prevCache: cache,
235
+ });
236
+ // 3. Subsequent /api/auth/status caller still gets the JWT.
237
+ const status = projectAuthStatus(cache);
238
+ expect(status.jwt).toBe('oauth-jwt');
239
+ expect(status.user.email).toBe('alice@example.com');
240
+ });
241
+
242
+ test('API-key-only flow: user resolves but no marketplace auth available', () => {
243
+ // No prior OAuth — the user pasted an API key in Settings and the
244
+ // /auth/resolve path linked their account from the backend.
245
+ let cache = recordResolvedUser({ user: { id: 'u' }, prevCache: null });
246
+ const status = projectAuthStatus(cache);
247
+ expect(status.user).toEqual({ id: 'u' });
248
+ expect(status.jwt).toBeNull();
249
+ // Marketplace will 401 with "Authentication required" — the fix
250
+ // for that case is server-to-server JWT minting in /auth/resolve,
251
+ // out of scope for this PR.
252
+ });
253
+
254
+ test('polling for a NEW login but cache is from an OLDER one: not the auth we\'re waiting for', () => {
255
+ // A previous user signed out, a new user is mid-login, FE polls.
256
+ const oldCache = recordOAuthResult({
257
+ user: { id: 'old-user' }, jwt: 'old-jwt', hasApiKey: true,
258
+ timestamp: '2026-01-01T00:00:00Z',
259
+ });
260
+ // FE called /api/auth/status?since=<just-now>
261
+ const status = projectAuthStatus(oldCache, { since: '2026-05-03T12:00:00Z' });
262
+ // user=null + jwt=null so the FE keeps polling, doesn't sign in as the wrong user.
263
+ expect(status.user).toBeNull();
264
+ expect(status.jwt).toBeNull();
265
+ });
266
+ });