@adelie/server 0.0.0-stage → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +53 -2
  3. package/dist/api/types.d.ts +6195 -0
  4. package/dist/api/types.js +10 -0
  5. package/dist/api/types.js.map +1 -0
  6. package/dist/auth-token.d.ts +50 -0
  7. package/dist/auth-token.js +55 -0
  8. package/dist/auth-token.js.map +1 -0
  9. package/dist/chunk-B5IP37ZQ.js +56 -0
  10. package/dist/chunk-B5IP37ZQ.js.map +1 -0
  11. package/dist/chunk-BQZC56BR.js +78 -0
  12. package/dist/chunk-BQZC56BR.js.map +1 -0
  13. package/dist/chunk-C2S2LVQ7.js +14 -0
  14. package/dist/chunk-C2S2LVQ7.js.map +1 -0
  15. package/dist/chunk-CXGWSWJA.js +485 -0
  16. package/dist/chunk-CXGWSWJA.js.map +1 -0
  17. package/dist/chunk-GO6G445C.js +83 -0
  18. package/dist/chunk-GO6G445C.js.map +1 -0
  19. package/dist/chunk-HMTT2PX4.js +93 -0
  20. package/dist/chunk-HMTT2PX4.js.map +1 -0
  21. package/dist/chunk-IZEMORXV.js +16 -0
  22. package/dist/chunk-IZEMORXV.js.map +1 -0
  23. package/dist/chunk-K4ZSUT72.js +34 -0
  24. package/dist/chunk-K4ZSUT72.js.map +1 -0
  25. package/dist/chunk-WPYTS7TI.js +178 -0
  26. package/dist/chunk-WPYTS7TI.js.map +1 -0
  27. package/dist/chunk-ZZUQGQD6.js +954 -0
  28. package/dist/chunk-ZZUQGQD6.js.map +1 -0
  29. package/dist/hmr/manifest.d.ts +1 -0
  30. package/dist/hmr/manifest.js +16 -0
  31. package/dist/hmr/manifest.js.map +1 -0
  32. package/dist/index.d.ts +2 -0
  33. package/dist/index.js +81551 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/initial-password.d.ts +14 -0
  36. package/dist/initial-password.js +12 -0
  37. package/dist/initial-password.js.map +1 -0
  38. package/dist/install.ps1 +492 -0
  39. package/dist/install.sh +494 -0
  40. package/dist/lock.d.ts +26 -0
  41. package/dist/lock.js +20 -0
  42. package/dist/lock.js.map +1 -0
  43. package/dist/machine-status.d.ts +18 -0
  44. package/dist/machine-status.js +38 -0
  45. package/dist/machine-status.js.map +1 -0
  46. package/dist/plugin/index.d.ts +3002 -0
  47. package/dist/plugin/index.js +1 -0
  48. package/dist/plugin/index.js.map +1 -0
  49. package/dist/reset-admin-password.d.ts +25 -0
  50. package/dist/reset-admin-password.js +45 -0
  51. package/dist/reset-admin-password.js.map +1 -0
  52. package/dist/secret-file.d.ts +3 -0
  53. package/dist/secret-file.js +19 -0
  54. package/dist/secret-file.js.map +1 -0
  55. package/dist/version-report.d.ts +12 -0
  56. package/dist/version-report.js +9 -0
  57. package/dist/version-report.js.map +1 -0
  58. package/package.json +106 -3
  59. package/web-dist/adelie-icon.svg +46 -0
  60. package/web-dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  61. package/web-dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  62. package/web-dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  63. package/web-dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  64. package/web-dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  65. package/web-dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  66. package/web-dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  67. package/web-dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  68. package/web-dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  69. package/web-dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  70. package/web-dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  71. package/web-dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  72. package/web-dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  73. package/web-dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  74. package/web-dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  75. package/web-dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  76. package/web-dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  77. package/web-dist/assets/KaTeX_Size3-Regular-gV2CO0n9.woff2 +0 -0
  78. package/web-dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  79. package/web-dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  80. package/web-dist/assets/addon-clipboard-BU5GZsef.js +1 -0
  81. package/web-dist/assets/addon-fit-B_mXSH9E.js +1 -0
  82. package/web-dist/assets/addon-web-links-CrIdpbXy.js +1 -0
  83. package/web-dist/assets/c-BG-tZi7o.js +1 -0
  84. package/web-dist/assets/c-BIGW1oBm.js +1 -0
  85. package/web-dist/assets/cpp-CaeG3uDQ.js +1 -0
  86. package/web-dist/assets/cpp-DIPi6g--.js +1 -0
  87. package/web-dist/assets/css-Br67jR8j.js +1 -0
  88. package/web-dist/assets/css-CLj8gQPS.js +1 -0
  89. package/web-dist/assets/diff-D97Zzqfu.js +1 -0
  90. package/web-dist/assets/diff-jW5kmiru.js +1 -0
  91. package/web-dist/assets/github-dark-BQV5ugrc.js +1 -0
  92. package/web-dist/assets/github-dark-DHJKELXO.js +1 -0
  93. package/web-dist/assets/github-light-DAi9KRSo.js +1 -0
  94. package/web-dist/assets/github-light-Rcb2q3L5.js +1 -0
  95. package/web-dist/assets/go-B7VTfpnm.js +1 -0
  96. package/web-dist/assets/go-C27-OAKa.js +1 -0
  97. package/web-dist/assets/highlighter-BDxr2Reu.js +2 -0
  98. package/web-dist/assets/highlighter-core-C91BgiW7.js +152 -0
  99. package/web-dist/assets/highlighter.worker-CPvC3l9a.js +152 -0
  100. package/web-dist/assets/html-BW_6VhB7.js +1 -0
  101. package/web-dist/assets/html-pp8916En.js +1 -0
  102. package/web-dist/assets/ibm-plex-sans-condensed-latin-600-normal-CRd5VyFf.woff2 +0 -0
  103. package/web-dist/assets/ibm-plex-sans-condensed-latin-ext-600-normal-CBdNZ9Ci.woff2 +0 -0
  104. package/web-dist/assets/ibm-plex-sans-latin-ext-wght-normal-CIII54If.woff2 +0 -0
  105. package/web-dist/assets/ibm-plex-sans-latin-wght-normal-IvpUvPa2.woff2 +0 -0
  106. package/web-dist/assets/index-By5tJCWt.js +1080 -0
  107. package/web-dist/assets/index-DU13e4im.css +1 -0
  108. package/web-dist/assets/ini-BEwlwnbL.js +1 -0
  109. package/web-dist/assets/ini-Dix3pTmg.js +1 -0
  110. package/web-dist/assets/java-BTDmaRNO.js +1 -0
  111. package/web-dist/assets/java-CylS5w8V.js +1 -0
  112. package/web-dist/assets/javascript-WyGyM1wV.js +1 -0
  113. package/web-dist/assets/javascript-wDzz0qaB.js +1 -0
  114. package/web-dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  115. package/web-dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  116. package/web-dist/assets/json-B8JryHcM.js +1 -0
  117. package/web-dist/assets/json-Cp-IABpG.js +1 -0
  118. package/web-dist/assets/jsx-8cLv2Six.js +1 -0
  119. package/web-dist/assets/jsx-g9-lgVsj.js +1 -0
  120. package/web-dist/assets/log-2UxHyX5q.js +1 -0
  121. package/web-dist/assets/log-CcaF_xNv.js +1 -0
  122. package/web-dist/assets/markdown-Cvjx9yec.js +1 -0
  123. package/web-dist/assets/markdown-DX-TNHnc.js +1 -0
  124. package/web-dist/assets/misans-400-100-DHkMCix2.woff2 +0 -0
  125. package/web-dist/assets/misans-400-101-CwgSLsmc.woff2 +0 -0
  126. package/web-dist/assets/misans-400-102-BQgefHPQ.woff2 +0 -0
  127. package/web-dist/assets/misans-400-103-CP58Mc_T.woff2 +0 -0
  128. package/web-dist/assets/misans-400-104-Ta_Xu1gd.woff2 +0 -0
  129. package/web-dist/assets/misans-400-105-CDop11AR.woff2 +0 -0
  130. package/web-dist/assets/misans-400-106-Dv8y0ubk.woff2 +0 -0
  131. package/web-dist/assets/misans-400-107-CjnHtp9E.woff2 +0 -0
  132. package/web-dist/assets/misans-400-108-BA8nQUBw.woff2 +0 -0
  133. package/web-dist/assets/misans-400-109-B6uEN0pG.woff2 +0 -0
  134. package/web-dist/assets/misans-400-110-BQqnShrY.woff2 +0 -0
  135. package/web-dist/assets/misans-400-111-CHB-Jj5X.woff2 +0 -0
  136. package/web-dist/assets/misans-400-112-D1dh4Cjx.woff2 +0 -0
  137. package/web-dist/assets/misans-400-113-Bw_wNCFp.woff2 +0 -0
  138. package/web-dist/assets/misans-400-114-CUb-5IzE.woff2 +0 -0
  139. package/web-dist/assets/misans-400-115-BICOatsO.woff2 +0 -0
  140. package/web-dist/assets/misans-400-116-B3_gmYW6.woff2 +0 -0
  141. package/web-dist/assets/misans-400-117-B8k_y3cv.woff2 +0 -0
  142. package/web-dist/assets/misans-400-118-C-2Cf5C6.woff2 +0 -0
  143. package/web-dist/assets/misans-400-119-CmLP7xnX.woff2 +0 -0
  144. package/web-dist/assets/misans-400-21-DsSSD_Zj.woff2 +0 -0
  145. package/web-dist/assets/misans-400-22-rtkxWOv4.woff2 +0 -0
  146. package/web-dist/assets/misans-400-23-CDDB4M1H.woff2 +0 -0
  147. package/web-dist/assets/misans-400-24-Dqf_XeOL.woff2 +0 -0
  148. package/web-dist/assets/misans-400-25-C4U1tJ5J.woff2 +0 -0
  149. package/web-dist/assets/misans-400-26-CEXOK-nT.woff2 +0 -0
  150. package/web-dist/assets/misans-400-27-BrNOAScF.woff2 +0 -0
  151. package/web-dist/assets/misans-400-28-CPpEnCkG.woff2 +0 -0
  152. package/web-dist/assets/misans-400-29-C9JMVw8g.woff2 +0 -0
  153. package/web-dist/assets/misans-400-30-CD-QimXa.woff2 +0 -0
  154. package/web-dist/assets/misans-400-31-S4k06NbS.woff2 +0 -0
  155. package/web-dist/assets/misans-400-32-zRMBDkz6.woff2 +0 -0
  156. package/web-dist/assets/misans-400-33-sQ_tNZSM.woff2 +0 -0
  157. package/web-dist/assets/misans-400-34-8LEGljja.woff2 +0 -0
  158. package/web-dist/assets/misans-400-35-CxSPyuiU.woff2 +0 -0
  159. package/web-dist/assets/misans-400-36-BY1i4WtO.woff2 +0 -0
  160. package/web-dist/assets/misans-400-37-C0oF42pu.woff2 +0 -0
  161. package/web-dist/assets/misans-400-38-y7xcB90w.woff2 +0 -0
  162. package/web-dist/assets/misans-400-39-C307YgZx.woff2 +0 -0
  163. package/web-dist/assets/misans-400-40-ByZr736f.woff2 +0 -0
  164. package/web-dist/assets/misans-400-41-ChKEw5zV.woff2 +0 -0
  165. package/web-dist/assets/misans-400-42-CD__zJu5.woff2 +0 -0
  166. package/web-dist/assets/misans-400-43-CqNV6_TG.woff2 +0 -0
  167. package/web-dist/assets/misans-400-44-zE-akmW8.woff2 +0 -0
  168. package/web-dist/assets/misans-400-45-Du98otwc.woff2 +0 -0
  169. package/web-dist/assets/misans-400-46-B6JXbEy2.woff2 +0 -0
  170. package/web-dist/assets/misans-400-47-DpqW0kSq.woff2 +0 -0
  171. package/web-dist/assets/misans-400-48-BprON5Q_.woff2 +0 -0
  172. package/web-dist/assets/misans-400-49-N-ct3sN6.woff2 +0 -0
  173. package/web-dist/assets/misans-400-5-ton_4jCN.woff2 +0 -0
  174. package/web-dist/assets/misans-400-50-JgU49P0U.woff2 +0 -0
  175. package/web-dist/assets/misans-400-51-DSS3Moge.woff2 +0 -0
  176. package/web-dist/assets/misans-400-52-BMoXFmwE.woff2 +0 -0
  177. package/web-dist/assets/misans-400-53-BaLMGl4z.woff2 +0 -0
  178. package/web-dist/assets/misans-400-54-CaeSn3OR.woff2 +0 -0
  179. package/web-dist/assets/misans-400-55-BBqrtLxN.woff2 +0 -0
  180. package/web-dist/assets/misans-400-56-DAZ5BnbO.woff2 +0 -0
  181. package/web-dist/assets/misans-400-57-F-n3b0gI.woff2 +0 -0
  182. package/web-dist/assets/misans-400-58-DEUuPQAq.woff2 +0 -0
  183. package/web-dist/assets/misans-400-59-DXP5rhCL.woff2 +0 -0
  184. package/web-dist/assets/misans-400-6-DWCCUO_c.woff2 +0 -0
  185. package/web-dist/assets/misans-400-60-BE6IO6zJ.woff2 +0 -0
  186. package/web-dist/assets/misans-400-61-5Qb1gaxK.woff2 +0 -0
  187. package/web-dist/assets/misans-400-62-D_tJKNAj.woff2 +0 -0
  188. package/web-dist/assets/misans-400-63-hwmne8yB.woff2 +0 -0
  189. package/web-dist/assets/misans-400-64-BGedxReM.woff2 +0 -0
  190. package/web-dist/assets/misans-400-65-BaKPsugb.woff2 +0 -0
  191. package/web-dist/assets/misans-400-66-IdaOMzCz.woff2 +0 -0
  192. package/web-dist/assets/misans-400-67-BdWyS83H.woff2 +0 -0
  193. package/web-dist/assets/misans-400-68-DrZ_1swq.woff2 +0 -0
  194. package/web-dist/assets/misans-400-69-B3jsSD92.woff2 +0 -0
  195. package/web-dist/assets/misans-400-70-D6UZI2Ua.woff2 +0 -0
  196. package/web-dist/assets/misans-400-71-HFxyMCYg.woff2 +0 -0
  197. package/web-dist/assets/misans-400-72-CP5A-yQP.woff2 +0 -0
  198. package/web-dist/assets/misans-400-73-BoD_bu6s.woff2 +0 -0
  199. package/web-dist/assets/misans-400-74-CbJlhZlZ.woff2 +0 -0
  200. package/web-dist/assets/misans-400-75-BsbWuELX.woff2 +0 -0
  201. package/web-dist/assets/misans-400-76-DkwiQhof.woff2 +0 -0
  202. package/web-dist/assets/misans-400-77-6pVHXHnF.woff2 +0 -0
  203. package/web-dist/assets/misans-400-78-CfUF6pih.woff2 +0 -0
  204. package/web-dist/assets/misans-400-79-BCS3Dx4e.woff2 +0 -0
  205. package/web-dist/assets/misans-400-80-BEYSdQ_N.woff2 +0 -0
  206. package/web-dist/assets/misans-400-81-BzL-Gncx.woff2 +0 -0
  207. package/web-dist/assets/misans-400-82-CaENmdUU.woff2 +0 -0
  208. package/web-dist/assets/misans-400-83-Bvq1eBcA.woff2 +0 -0
  209. package/web-dist/assets/misans-400-84-Ctd90hiP.woff2 +0 -0
  210. package/web-dist/assets/misans-400-85-DWuOxfL1.woff2 +0 -0
  211. package/web-dist/assets/misans-400-86-D5niZS5c.woff2 +0 -0
  212. package/web-dist/assets/misans-400-87-DkOIADQJ.woff2 +0 -0
  213. package/web-dist/assets/misans-400-88-CGY4WTcC.woff2 +0 -0
  214. package/web-dist/assets/misans-400-89-CA3eoMTt.woff2 +0 -0
  215. package/web-dist/assets/misans-400-90-CzxR9MYb.woff2 +0 -0
  216. package/web-dist/assets/misans-400-91-Dyr85txc.woff2 +0 -0
  217. package/web-dist/assets/misans-400-97-qEZrCUNe.woff2 +0 -0
  218. package/web-dist/assets/misans-400-cyrillic--hFcG0Xp.woff2 +0 -0
  219. package/web-dist/assets/misans-400-extra-ZRI9n2Hu.woff2 +0 -0
  220. package/web-dist/assets/misans-400-latin-BRDR1WaL.woff2 +0 -0
  221. package/web-dist/assets/misans-400-latin-ext-6xS-MvHW.woff2 +0 -0
  222. package/web-dist/assets/misans-400-vietnamese-D7xD7kBB.woff2 +0 -0
  223. package/web-dist/assets/misans-500-100-BHuGA96E.woff2 +0 -0
  224. package/web-dist/assets/misans-500-101-CDMYUz0c.woff2 +0 -0
  225. package/web-dist/assets/misans-500-102-CWcqYYCV.woff2 +0 -0
  226. package/web-dist/assets/misans-500-103-BE1QSEzY.woff2 +0 -0
  227. package/web-dist/assets/misans-500-104-CDp743BV.woff2 +0 -0
  228. package/web-dist/assets/misans-500-105-y7dY6Foi.woff2 +0 -0
  229. package/web-dist/assets/misans-500-106-CP-kGZ6j.woff2 +0 -0
  230. package/web-dist/assets/misans-500-107-CUc8Hvle.woff2 +0 -0
  231. package/web-dist/assets/misans-500-108-ItN_x8jX.woff2 +0 -0
  232. package/web-dist/assets/misans-500-109-CEtf3R4D.woff2 +0 -0
  233. package/web-dist/assets/misans-500-110-BSZSHYRL.woff2 +0 -0
  234. package/web-dist/assets/misans-500-111-DfdArrjn.woff2 +0 -0
  235. package/web-dist/assets/misans-500-112-DRtNyrQw.woff2 +0 -0
  236. package/web-dist/assets/misans-500-113-CDT7tKuB.woff2 +0 -0
  237. package/web-dist/assets/misans-500-114-CCh4jwL8.woff2 +0 -0
  238. package/web-dist/assets/misans-500-115-DplUgPp0.woff2 +0 -0
  239. package/web-dist/assets/misans-500-116-C7eCklyK.woff2 +0 -0
  240. package/web-dist/assets/misans-500-117-BA0KabyT.woff2 +0 -0
  241. package/web-dist/assets/misans-500-118-V_M0eu2q.woff2 +0 -0
  242. package/web-dist/assets/misans-500-119-Cgf3Hszt.woff2 +0 -0
  243. package/web-dist/assets/misans-500-21-Di6DyR6O.woff2 +0 -0
  244. package/web-dist/assets/misans-500-22-CSnXvtL-.woff2 +0 -0
  245. package/web-dist/assets/misans-500-23-A06Hm9a6.woff2 +0 -0
  246. package/web-dist/assets/misans-500-24-Df97RCik.woff2 +0 -0
  247. package/web-dist/assets/misans-500-25-bOSJ6YXH.woff2 +0 -0
  248. package/web-dist/assets/misans-500-26-C65icgBb.woff2 +0 -0
  249. package/web-dist/assets/misans-500-27-C_GRm0va.woff2 +0 -0
  250. package/web-dist/assets/misans-500-28-CzZkqO0l.woff2 +0 -0
  251. package/web-dist/assets/misans-500-29-BReyeRyX.woff2 +0 -0
  252. package/web-dist/assets/misans-500-30-DzfjlROz.woff2 +0 -0
  253. package/web-dist/assets/misans-500-31-B2nLpgdU.woff2 +0 -0
  254. package/web-dist/assets/misans-500-32-Bz3rHm8X.woff2 +0 -0
  255. package/web-dist/assets/misans-500-33-AU3lZ1vY.woff2 +0 -0
  256. package/web-dist/assets/misans-500-34-CBAWkH-I.woff2 +0 -0
  257. package/web-dist/assets/misans-500-35-VgnGd14P.woff2 +0 -0
  258. package/web-dist/assets/misans-500-36-B2kfXv6A.woff2 +0 -0
  259. package/web-dist/assets/misans-500-37-DhKo8ykb.woff2 +0 -0
  260. package/web-dist/assets/misans-500-38-D8tTxFuc.woff2 +0 -0
  261. package/web-dist/assets/misans-500-39-DTm3aqJQ.woff2 +0 -0
  262. package/web-dist/assets/misans-500-40-C_akwj8_.woff2 +0 -0
  263. package/web-dist/assets/misans-500-41-RVM1JHQW.woff2 +0 -0
  264. package/web-dist/assets/misans-500-42-MVWIN_il.woff2 +0 -0
  265. package/web-dist/assets/misans-500-43-BtLZYNyD.woff2 +0 -0
  266. package/web-dist/assets/misans-500-44-D0QHMl6G.woff2 +0 -0
  267. package/web-dist/assets/misans-500-45-DRlclX7-.woff2 +0 -0
  268. package/web-dist/assets/misans-500-46-BEWswL4N.woff2 +0 -0
  269. package/web-dist/assets/misans-500-47-COSoxWaW.woff2 +0 -0
  270. package/web-dist/assets/misans-500-48-DZAISq3n.woff2 +0 -0
  271. package/web-dist/assets/misans-500-49-KSfi7MW0.woff2 +0 -0
  272. package/web-dist/assets/misans-500-5-h1SBcwuW.woff2 +0 -0
  273. package/web-dist/assets/misans-500-50-CIVMfG11.woff2 +0 -0
  274. package/web-dist/assets/misans-500-51-BdeNBhBL.woff2 +0 -0
  275. package/web-dist/assets/misans-500-52-CEW4e7ex.woff2 +0 -0
  276. package/web-dist/assets/misans-500-53-lmPCsEnt.woff2 +0 -0
  277. package/web-dist/assets/misans-500-54-B_7AqKQW.woff2 +0 -0
  278. package/web-dist/assets/misans-500-55-B-3RtUnH.woff2 +0 -0
  279. package/web-dist/assets/misans-500-56-g6D0e0cW.woff2 +0 -0
  280. package/web-dist/assets/misans-500-57-D5hp5Yqr.woff2 +0 -0
  281. package/web-dist/assets/misans-500-58-ilnDgEKt.woff2 +0 -0
  282. package/web-dist/assets/misans-500-59-DJYXz8tr.woff2 +0 -0
  283. package/web-dist/assets/misans-500-6-uCdpdDQy.woff2 +0 -0
  284. package/web-dist/assets/misans-500-60-B3Iaqx0p.woff2 +0 -0
  285. package/web-dist/assets/misans-500-61-CMxqg5hc.woff2 +0 -0
  286. package/web-dist/assets/misans-500-62-7FY8O2NQ.woff2 +0 -0
  287. package/web-dist/assets/misans-500-63-JP6vEuJf.woff2 +0 -0
  288. package/web-dist/assets/misans-500-64-Cdub62jh.woff2 +0 -0
  289. package/web-dist/assets/misans-500-65-DVHk_mlC.woff2 +0 -0
  290. package/web-dist/assets/misans-500-66-BX39wRtF.woff2 +0 -0
  291. package/web-dist/assets/misans-500-67-BcsepI3X.woff2 +0 -0
  292. package/web-dist/assets/misans-500-68-etUIUjrh.woff2 +0 -0
  293. package/web-dist/assets/misans-500-69-DfhVmnuA.woff2 +0 -0
  294. package/web-dist/assets/misans-500-70-D6dgy6-B.woff2 +0 -0
  295. package/web-dist/assets/misans-500-71-PkeKjcVn.woff2 +0 -0
  296. package/web-dist/assets/misans-500-72-D66Fnb30.woff2 +0 -0
  297. package/web-dist/assets/misans-500-73-jr9z9870.woff2 +0 -0
  298. package/web-dist/assets/misans-500-74-DsCkPKwe.woff2 +0 -0
  299. package/web-dist/assets/misans-500-75-Dkooq6KM.woff2 +0 -0
  300. package/web-dist/assets/misans-500-76-B0sfieHl.woff2 +0 -0
  301. package/web-dist/assets/misans-500-77-8tflq1ji.woff2 +0 -0
  302. package/web-dist/assets/misans-500-78-COKdMbdp.woff2 +0 -0
  303. package/web-dist/assets/misans-500-79-Bm0rBjSF.woff2 +0 -0
  304. package/web-dist/assets/misans-500-80-B9OoAnyy.woff2 +0 -0
  305. package/web-dist/assets/misans-500-81-DsQ9tpfX.woff2 +0 -0
  306. package/web-dist/assets/misans-500-82-VKsL2Tk2.woff2 +0 -0
  307. package/web-dist/assets/misans-500-83-Ce6mfHYD.woff2 +0 -0
  308. package/web-dist/assets/misans-500-84-D7kPSZLm.woff2 +0 -0
  309. package/web-dist/assets/misans-500-85-W5L0cEfd.woff2 +0 -0
  310. package/web-dist/assets/misans-500-86-DukGOEET.woff2 +0 -0
  311. package/web-dist/assets/misans-500-87-BJ_Lok6j.woff2 +0 -0
  312. package/web-dist/assets/misans-500-88-DbJ11zcA.woff2 +0 -0
  313. package/web-dist/assets/misans-500-89-LNKcEq6M.woff2 +0 -0
  314. package/web-dist/assets/misans-500-90-DNDDgSCd.woff2 +0 -0
  315. package/web-dist/assets/misans-500-91-rT8Q0evu.woff2 +0 -0
  316. package/web-dist/assets/misans-500-97-c8zW_WRq.woff2 +0 -0
  317. package/web-dist/assets/misans-500-cyrillic-CLHOGwgx.woff2 +0 -0
  318. package/web-dist/assets/misans-500-extra-CTAMEQ59.woff2 +0 -0
  319. package/web-dist/assets/misans-500-latin-Be606ott.woff2 +0 -0
  320. package/web-dist/assets/misans-500-latin-ext-BzDyL4sU.woff2 +0 -0
  321. package/web-dist/assets/misans-500-vietnamese-DBOLOqZH.woff2 +0 -0
  322. package/web-dist/assets/mona-sans-latin-ext-wght-normal-BqSk0Z3x.woff2 +0 -0
  323. package/web-dist/assets/mona-sans-latin-wght-normal-Pz49MTQZ.woff2 +0 -0
  324. package/web-dist/assets/noto-sans-sc-100-wght-normal-DrqXJETY.woff2 +0 -0
  325. package/web-dist/assets/noto-sans-sc-101-wght-normal-c94LAl5p.woff2 +0 -0
  326. package/web-dist/assets/noto-sans-sc-102-wght-normal-C1RtbCZr.woff2 +0 -0
  327. package/web-dist/assets/noto-sans-sc-103-wght-normal-DGHo20nu.woff2 +0 -0
  328. package/web-dist/assets/noto-sans-sc-104-wght-normal-CJT2ioDJ.woff2 +0 -0
  329. package/web-dist/assets/noto-sans-sc-105-wght-normal-BFoiJwz2.woff2 +0 -0
  330. package/web-dist/assets/noto-sans-sc-106-wght-normal-D6uUHw3w.woff2 +0 -0
  331. package/web-dist/assets/noto-sans-sc-107-wght-normal-kFQzJDLH.woff2 +0 -0
  332. package/web-dist/assets/noto-sans-sc-108-wght-normal-7aXvqIa2.woff2 +0 -0
  333. package/web-dist/assets/noto-sans-sc-109-wght-normal-CnjNbNmw.woff2 +0 -0
  334. package/web-dist/assets/noto-sans-sc-110-wght-normal-D2JBr045.woff2 +0 -0
  335. package/web-dist/assets/noto-sans-sc-111-wght-normal-ClFr5QXM.woff2 +0 -0
  336. package/web-dist/assets/noto-sans-sc-112-wght-normal-CiZxJMyY.woff2 +0 -0
  337. package/web-dist/assets/noto-sans-sc-113-wght-normal-OgQXOX6x.woff2 +0 -0
  338. package/web-dist/assets/noto-sans-sc-114-wght-normal-CRH9SDZu.woff2 +0 -0
  339. package/web-dist/assets/noto-sans-sc-115-wght-normal-BN__2iBG.woff2 +0 -0
  340. package/web-dist/assets/noto-sans-sc-116-wght-normal-vdFVzbO2.woff2 +0 -0
  341. package/web-dist/assets/noto-sans-sc-117-wght-normal-Dsz3vkzU.woff2 +0 -0
  342. package/web-dist/assets/noto-sans-sc-118-wght-normal-BPEb0gM9.woff2 +0 -0
  343. package/web-dist/assets/noto-sans-sc-119-wght-normal-BfzSEbFz.woff2 +0 -0
  344. package/web-dist/assets/noto-sans-sc-21-wght-normal-DIu_1ZBI.woff2 +0 -0
  345. package/web-dist/assets/noto-sans-sc-22-wght-normal-VXjdYcT-.woff2 +0 -0
  346. package/web-dist/assets/noto-sans-sc-23-wght-normal-4HrHKhpL.woff2 +0 -0
  347. package/web-dist/assets/noto-sans-sc-24-wght-normal-B58DWgHS.woff2 +0 -0
  348. package/web-dist/assets/noto-sans-sc-25-wght-normal-C3Jm6l7O.woff2 +0 -0
  349. package/web-dist/assets/noto-sans-sc-26-wght-normal-YNOygvr_.woff2 +0 -0
  350. package/web-dist/assets/noto-sans-sc-27-wght-normal-BP2pEGQH.woff2 +0 -0
  351. package/web-dist/assets/noto-sans-sc-28-wght-normal-BWPKDbtH.woff2 +0 -0
  352. package/web-dist/assets/noto-sans-sc-29-wght-normal-45aVmHn_.woff2 +0 -0
  353. package/web-dist/assets/noto-sans-sc-30-wght-normal-B8_s30jZ.woff2 +0 -0
  354. package/web-dist/assets/noto-sans-sc-31-wght-normal-DW0t445S.woff2 +0 -0
  355. package/web-dist/assets/noto-sans-sc-32-wght-normal-ShbWPcei.woff2 +0 -0
  356. package/web-dist/assets/noto-sans-sc-33-wght-normal-BOTZYTjM.woff2 +0 -0
  357. package/web-dist/assets/noto-sans-sc-34-wght-normal-BF1rqDSt.woff2 +0 -0
  358. package/web-dist/assets/noto-sans-sc-35-wght-normal-Bosspiyr.woff2 +0 -0
  359. package/web-dist/assets/noto-sans-sc-36-wght-normal-CtU9CyKw.woff2 +0 -0
  360. package/web-dist/assets/noto-sans-sc-37-wght-normal-ghDiyiuv.woff2 +0 -0
  361. package/web-dist/assets/noto-sans-sc-38-wght-normal-4Nz8k_dt.woff2 +0 -0
  362. package/web-dist/assets/noto-sans-sc-39-wght-normal-Ddtm1XVC.woff2 +0 -0
  363. package/web-dist/assets/noto-sans-sc-4-wght-normal-BRbPMj-C.woff2 +0 -0
  364. package/web-dist/assets/noto-sans-sc-40-wght-normal-BVn4-kgX.woff2 +0 -0
  365. package/web-dist/assets/noto-sans-sc-41-wght-normal-CZqajZnl.woff2 +0 -0
  366. package/web-dist/assets/noto-sans-sc-42-wght-normal-CQ4lY28u.woff2 +0 -0
  367. package/web-dist/assets/noto-sans-sc-43-wght-normal-psppu0d8.woff2 +0 -0
  368. package/web-dist/assets/noto-sans-sc-44-wght-normal-cbKJlTUe.woff2 +0 -0
  369. package/web-dist/assets/noto-sans-sc-45-wght-normal-MKIEVRIC.woff2 +0 -0
  370. package/web-dist/assets/noto-sans-sc-46-wght-normal-CErGc6Mt.woff2 +0 -0
  371. package/web-dist/assets/noto-sans-sc-47-wght-normal-C5Kgg1_m.woff2 +0 -0
  372. package/web-dist/assets/noto-sans-sc-48-wght-normal-DFMjDDY6.woff2 +0 -0
  373. package/web-dist/assets/noto-sans-sc-49-wght-normal-B7l_3BZr.woff2 +0 -0
  374. package/web-dist/assets/noto-sans-sc-5-wght-normal-DI846rD9.woff2 +0 -0
  375. package/web-dist/assets/noto-sans-sc-50-wght-normal-C5KfAmFp.woff2 +0 -0
  376. package/web-dist/assets/noto-sans-sc-51-wght-normal-C2bq6hC8.woff2 +0 -0
  377. package/web-dist/assets/noto-sans-sc-52-wght-normal-P18e_Y0j.woff2 +0 -0
  378. package/web-dist/assets/noto-sans-sc-53-wght-normal-Bgkuo2tF.woff2 +0 -0
  379. package/web-dist/assets/noto-sans-sc-54-wght-normal-DL5lmlUd.woff2 +0 -0
  380. package/web-dist/assets/noto-sans-sc-55-wght-normal-BV_Oy6IF.woff2 +0 -0
  381. package/web-dist/assets/noto-sans-sc-56-wght-normal-B4L7Hj8f.woff2 +0 -0
  382. package/web-dist/assets/noto-sans-sc-57-wght-normal-DU8YBsDj.woff2 +0 -0
  383. package/web-dist/assets/noto-sans-sc-58-wght-normal-CE0BKS9u.woff2 +0 -0
  384. package/web-dist/assets/noto-sans-sc-59-wght-normal-Azv2Ku9_.woff2 +0 -0
  385. package/web-dist/assets/noto-sans-sc-6-wght-normal-ozUCEY9O.woff2 +0 -0
  386. package/web-dist/assets/noto-sans-sc-60-wght-normal-C1lngC61.woff2 +0 -0
  387. package/web-dist/assets/noto-sans-sc-61-wght-normal-BxWkGF5M.woff2 +0 -0
  388. package/web-dist/assets/noto-sans-sc-62-wght-normal-CXXMAq-5.woff2 +0 -0
  389. package/web-dist/assets/noto-sans-sc-63-wght-normal-4La5uKvS.woff2 +0 -0
  390. package/web-dist/assets/noto-sans-sc-64-wght-normal-CbIuD2Eg.woff2 +0 -0
  391. package/web-dist/assets/noto-sans-sc-65-wght-normal-BGqvKda2.woff2 +0 -0
  392. package/web-dist/assets/noto-sans-sc-66-wght-normal-BvNozWOY.woff2 +0 -0
  393. package/web-dist/assets/noto-sans-sc-67-wght-normal-CC-WRBV-.woff2 +0 -0
  394. package/web-dist/assets/noto-sans-sc-68-wght-normal-c0FjfUaj.woff2 +0 -0
  395. package/web-dist/assets/noto-sans-sc-69-wght-normal-D596Jjl2.woff2 +0 -0
  396. package/web-dist/assets/noto-sans-sc-70-wght-normal-ColEcmtJ.woff2 +0 -0
  397. package/web-dist/assets/noto-sans-sc-71-wght-normal-ChZfXpdg.woff2 +0 -0
  398. package/web-dist/assets/noto-sans-sc-72-wght-normal-D1VyfEG3.woff2 +0 -0
  399. package/web-dist/assets/noto-sans-sc-73-wght-normal-DwSJRYPJ.woff2 +0 -0
  400. package/web-dist/assets/noto-sans-sc-74-wght-normal-Cte7o1QG.woff2 +0 -0
  401. package/web-dist/assets/noto-sans-sc-75-wght-normal-B0qL41rF.woff2 +0 -0
  402. package/web-dist/assets/noto-sans-sc-76-wght-normal-BPLMO_2x.woff2 +0 -0
  403. package/web-dist/assets/noto-sans-sc-77-wght-normal-Dkbi3pye.woff2 +0 -0
  404. package/web-dist/assets/noto-sans-sc-78-wght-normal-BFUXeSw6.woff2 +0 -0
  405. package/web-dist/assets/noto-sans-sc-79-wght-normal-DoJG4UTB.woff2 +0 -0
  406. package/web-dist/assets/noto-sans-sc-80-wght-normal-BEFypWOO.woff2 +0 -0
  407. package/web-dist/assets/noto-sans-sc-81-wght-normal-ed_TZlfo.woff2 +0 -0
  408. package/web-dist/assets/noto-sans-sc-82-wght-normal-DcxfR5OJ.woff2 +0 -0
  409. package/web-dist/assets/noto-sans-sc-83-wght-normal-C9UjAcMM.woff2 +0 -0
  410. package/web-dist/assets/noto-sans-sc-84-wght-normal-C7NxT478.woff2 +0 -0
  411. package/web-dist/assets/noto-sans-sc-85-wght-normal-DBcDBu1n.woff2 +0 -0
  412. package/web-dist/assets/noto-sans-sc-86-wght-normal-CLJIoPpl.woff2 +0 -0
  413. package/web-dist/assets/noto-sans-sc-87-wght-normal-DYfJ-vGE.woff2 +0 -0
  414. package/web-dist/assets/noto-sans-sc-88-wght-normal-ClNDOCGW.woff2 +0 -0
  415. package/web-dist/assets/noto-sans-sc-89-wght-normal-IQU_KQA8.woff2 +0 -0
  416. package/web-dist/assets/noto-sans-sc-90-wght-normal-BWcrRNoG.woff2 +0 -0
  417. package/web-dist/assets/noto-sans-sc-91-wght-normal-CGekvDdH.woff2 +0 -0
  418. package/web-dist/assets/noto-sans-sc-97-wght-normal-BsBHkXi3.woff2 +0 -0
  419. package/web-dist/assets/noto-sans-sc-98-wght-normal-BZqSA1r_.woff2 +0 -0
  420. package/web-dist/assets/noto-sans-sc-99-wght-normal-Q_IptJM5.woff2 +0 -0
  421. package/web-dist/assets/noto-sans-sc-cyrillic-wght-normal-CRA5_Pf1.woff2 +0 -0
  422. package/web-dist/assets/noto-sans-sc-latin-ext-wght-normal-CqPqLCfe.woff2 +0 -0
  423. package/web-dist/assets/noto-sans-sc-latin-wght-normal-DYAKOyvl.woff2 +0 -0
  424. package/web-dist/assets/noto-sans-sc-vietnamese-wght-normal-y5SU35Rl.woff2 +0 -0
  425. package/web-dist/assets/php-CNeTOyEV.js +1 -0
  426. package/web-dist/assets/php-Csjmro_R.js +1 -0
  427. package/web-dist/assets/python-B6Ihcp-E.js +1 -0
  428. package/web-dist/assets/python-B6aJPvgy.js +1 -0
  429. package/web-dist/assets/ruby-B13GW9FM.js +1 -0
  430. package/web-dist/assets/ruby-CYiNE6ps.js +1 -0
  431. package/web-dist/assets/rust-B1yitclQ.js +1 -0
  432. package/web-dist/assets/rust-CxuBE0J8.js +1 -0
  433. package/web-dist/assets/shellscript-DgJyDXW6.js +1 -0
  434. package/web-dist/assets/shellscript-Yzrsuije.js +1 -0
  435. package/web-dist/assets/sql-CRqJ_cUM.js +1 -0
  436. package/web-dist/assets/sql-Dq2MiB0T.js +1 -0
  437. package/web-dist/assets/toml-Ms459DBw.js +1 -0
  438. package/web-dist/assets/toml-vGWfd6FD.js +1 -0
  439. package/web-dist/assets/tsx-COt5Ahok.js +1 -0
  440. package/web-dist/assets/tsx-D6116Ycy.js +1 -0
  441. package/web-dist/assets/typescript-BPQ3VLAy.js +1 -0
  442. package/web-dist/assets/typescript-BqvgUolh.js +1 -0
  443. package/web-dist/assets/xml-BkAJuBCc.js +1 -0
  444. package/web-dist/assets/xml-sdJ4AIDG.js +1 -0
  445. package/web-dist/assets/xterm-BT4qZAkH.js +9 -0
  446. package/web-dist/assets/yaml-Bopit2L3.js +1 -0
  447. package/web-dist/assets/yaml-Buea-lGh.js +1 -0
  448. package/web-dist/fonts-licenses/ibm-plex-sans-condensed.txt +93 -0
  449. package/web-dist/fonts-licenses/ibm-plex-sans.txt +93 -0
  450. package/web-dist/fonts-licenses/jetbrains-mono.txt +93 -0
  451. package/web-dist/fonts-licenses/misans.txt +119 -0
  452. package/web-dist/fonts-licenses/mona-sans.txt +93 -0
  453. package/web-dist/fonts-licenses/noto-sans-sc.txt +93 -0
  454. package/web-dist/index.html +29 -0
  455. package/web-dist/workflow-ui.css +261 -0
@@ -0,0 +1,34 @@
1
+ // src/initial-password.ts
2
+ import fs from "fs";
3
+ import path from "path";
4
+ function initialAdminPasswordPath(root) {
5
+ return path.join(root, "initial-admin-password");
6
+ }
7
+ function clearInitialAdminPassword(root) {
8
+ try {
9
+ fs.rmSync(initialAdminPasswordPath(root), { force: true });
10
+ } catch {
11
+ }
12
+ }
13
+ var NOTICE_PADDING = 3;
14
+ function renderFirstLoginNotice(url) {
15
+ const lines = [
16
+ "This server has no admin password yet. Open this link to claim it:",
17
+ "",
18
+ ` ${url}`,
19
+ "",
20
+ "The link lasts 30 days or until a password is set; restarting prints a fresh one."
21
+ ];
22
+ const width = Math.max(...lines.map((line) => line.length));
23
+ const bar = `+${"-".repeat(width + NOTICE_PADDING * 2)}+`;
24
+ const pad = " ".repeat(NOTICE_PADDING);
25
+ const body = lines.map((line) => `|${pad}${line.padEnd(width)}${pad}|`);
26
+ return [bar, ...body, bar].join("\n");
27
+ }
28
+
29
+ export {
30
+ initialAdminPasswordPath,
31
+ clearInitialAdminPassword,
32
+ renderFirstLoginNotice
33
+ };
34
+ //# sourceMappingURL=chunk-K4ZSUT72.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/initial-password.ts"],"sourcesContent":["/** The framed first-run notice carrying the first-login link (minted in auth/service.ts). */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport function initialAdminPasswordPath(root: string): string {\n return path.join(root, \"initial-admin-password\");\n}\n\n/**\n * Removes the plaintext an older build stored here; nothing writes it any more.\n *\n * TODO(compat): goes once no supported upgrade path can carry an `initial-admin-password`.\n */\nexport function clearInitialAdminPassword(root: string): void {\n try {\n fs.rmSync(initialAdminPasswordPath(root), { force: true });\n } catch {\n // Best-effort: a leftover file only re-prints a password that no longer works.\n }\n}\n\nconst NOTICE_PADDING = 3;\n\n/**\n * Plain ASCII rather than box-drawing characters: a non-UTF-8 console (legacy Windows above\n * all) would mangle the frame around exactly the line it exists to highlight.\n */\nexport function renderFirstLoginNotice(url: string): string {\n const lines = [\n \"This server has no admin password yet. Open this link to claim it:\",\n \"\",\n ` ${url}`,\n \"\",\n \"The link lasts 30 days or until a password is set; restarting prints a fresh one.\",\n ];\n const width = Math.max(...lines.map((line) => line.length));\n const bar = `+${\"-\".repeat(width + NOTICE_PADDING * 2)}+`;\n const pad = \" \".repeat(NOTICE_PADDING);\n const body = lines.map((line) => `|${pad}${line.padEnd(width)}${pad}|`);\n return [bar, ...body, bar].join(\"\\n\");\n}\n"],"mappings":";AACA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEV,SAAS,yBAAyB,MAAsB;AAC7D,SAAO,KAAK,KAAK,MAAM,wBAAwB;AACjD;AAOO,SAAS,0BAA0B,MAAoB;AAC5D,MAAI;AACF,OAAG,OAAO,yBAAyB,IAAI,GAAG,EAAE,OAAO,KAAK,CAAC;AAAA,EAC3D,QAAQ;AAAA,EAER;AACF;AAEA,IAAM,iBAAiB;AAMhB,SAAS,uBAAuB,KAAqB;AAC1D,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA,KAAK,GAAG;AAAA,IACR;AAAA,IACA;AAAA,EACF;AACA,QAAM,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC;AAC1D,QAAM,MAAM,IAAI,IAAI,OAAO,QAAQ,iBAAiB,CAAC,CAAC;AACtD,QAAM,MAAM,IAAI,OAAO,cAAc;AACrC,QAAM,OAAO,MAAM,IAAI,CAAC,SAAS,IAAI,GAAG,GAAG,KAAK,OAAO,KAAK,CAAC,GAAG,GAAG,GAAG;AACtE,SAAO,CAAC,KAAK,GAAG,MAAM,GAAG,EAAE,KAAK,IAAI;AACtC;","names":[]}
@@ -0,0 +1,178 @@
1
+ import {
2
+ __decorateElement,
3
+ __decoratorStart,
4
+ __publicField,
5
+ __runInitializers
6
+ } from "./chunk-B5IP37ZQ.js";
7
+
8
+ // src/db/repos/users.ts
9
+ import { Component, Use } from "@adelie/core/kernel";
10
+ function mapRow(r) {
11
+ return {
12
+ userId: r.user_id,
13
+ passwordHash: r.password_hash,
14
+ isAdmin: r.is_admin === 1,
15
+ passwordIsInitial: r.password_is_initial === 1,
16
+ displayName: r.display_name ?? null,
17
+ avatar: r.avatar ?? null,
18
+ lastLoginAt: r.last_login_at ?? null,
19
+ createdAt: r.created_at
20
+ };
21
+ }
22
+ var _db_dec, _UsersRepo_decorators, _init;
23
+ _UsersRepo_decorators = [Component()], _db_dec = [Use()];
24
+ var UsersRepo = class {
25
+ constructor() {
26
+ __publicField(this, "db", __runInitializers(_init, 8, this)), __runInitializers(_init, 11, this);
27
+ }
28
+ insert(row) {
29
+ this.db.prepare(
30
+ "INSERT INTO users (user_id, password_hash, is_admin, password_is_initial, display_name, avatar, last_login_at, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
31
+ ).run(
32
+ row.userId,
33
+ row.passwordHash,
34
+ row.isAdmin ? 1 : 0,
35
+ row.passwordIsInitial ? 1 : 0,
36
+ row.displayName,
37
+ row.avatar,
38
+ row.lastLoginAt,
39
+ row.createdAt
40
+ );
41
+ }
42
+ findById(userId) {
43
+ const r = this.db.prepare("SELECT * FROM users WHERE user_id = ?").get(userId);
44
+ return r ? mapRow(r) : null;
45
+ }
46
+ /** All users (for the admin user backend), ordered by creation time ascending. */
47
+ list() {
48
+ const rows = this.db.prepare("SELECT * FROM users ORDER BY created_at ASC, user_id ASC").all();
49
+ return rows.map(mapRow);
50
+ }
51
+ count() {
52
+ const r = this.db.prepare("SELECT COUNT(*) AS n FROM users").get();
53
+ return r?.n ?? 0;
54
+ }
55
+ /** Update the password hash; isInitial marks whether the password was set by someone else (seed / admin). */
56
+ updatePassword(userId, passwordHash, isInitial) {
57
+ this.db.prepare("UPDATE users SET password_hash = ?, password_is_initial = ? WHERE user_id = ?").run(passwordHash, isInitial ? 1 : 0, userId);
58
+ }
59
+ /**
60
+ * Stamp the account's most recent sign-in, overwriting whatever was there: the column is a
61
+ * "when did they last get in" fact, not a history (the admin user backend shows the one value).
62
+ */
63
+ touchLastLogin(userId, at) {
64
+ this.db.prepare("UPDATE users SET last_login_at = ? WHERE user_id = ?").run(at, userId);
65
+ }
66
+ /**
67
+ * Writes the profile fields the patch names, leaving the rest as they are: an absent key
68
+ * keeps the stored value, `null` clears it, a string replaces it. A patch naming neither
69
+ * field writes nothing rather than issuing an UPDATE with an empty SET list.
70
+ */
71
+ updateProfile(userId, patch) {
72
+ const sets = [];
73
+ const values = [];
74
+ if (patch.displayName !== void 0) {
75
+ sets.push("display_name = ?");
76
+ values.push(patch.displayName);
77
+ }
78
+ if (patch.avatar !== void 0) {
79
+ sets.push("avatar = ?");
80
+ values.push(patch.avatar);
81
+ }
82
+ if (sets.length === 0) return;
83
+ this.db.prepare(`UPDATE users SET ${sets.join(", ")} WHERE user_id = ?`).run(...values, userId);
84
+ }
85
+ /** Used by admin user deletion and account-creation compensation paths (owned Projects must be cleaned up first). */
86
+ delete(userId) {
87
+ this.db.prepare("DELETE FROM users WHERE user_id = ?").run(userId);
88
+ }
89
+ };
90
+ _init = __decoratorStart(null);
91
+ __decorateElement(_init, 5, "db", _db_dec, UsersRepo);
92
+ UsersRepo = __decorateElement(_init, 0, "UsersRepo", _UsersRepo_decorators, UsersRepo);
93
+ __runInitializers(_init, 1, UsersRepo);
94
+
95
+ // src/db/repos/auth-sessions.ts
96
+ import { createHash, randomBytes } from "crypto";
97
+ import { Component as Component2, Use as Use2 } from "@adelie/core/kernel";
98
+ function sessionTokenHash(token) {
99
+ return createHash("sha256").update(token).digest("hex");
100
+ }
101
+ var _db_dec2, _AuthSessionsRepo_decorators, _init2;
102
+ _AuthSessionsRepo_decorators = [Component2()], _db_dec2 = [Use2()];
103
+ var AuthSessionsRepo = class {
104
+ constructor() {
105
+ __publicField(this, "db", __runInitializers(_init2, 8, this)), __runInitializers(_init2, 11, this);
106
+ }
107
+ /**
108
+ * Mints a session and returns the raw token for a cookie or the terminal. `maxTtlMs` caps a
109
+ * caller-supplied lifetime (`--ttl-seconds`): one longer than an ordinary session would make
110
+ * a leaked token file outlive every other credential, sliding forever. Expired rows are
111
+ * swept here too, so a cron that only mints does not accumulate them.
112
+ */
113
+ issue(opts) {
114
+ const ttlMs = Math.max(1e3, Math.min(opts.ttlMs, opts.maxTtlMs ?? opts.ttlMs));
115
+ const token = randomBytes(32).toString("base64url");
116
+ const createdAt = opts.now.toISOString();
117
+ const expiresAt = new Date(opts.now.getTime() + ttlMs).toISOString();
118
+ this.deleteExpired(createdAt);
119
+ this.insert({
120
+ tokenHash: sessionTokenHash(token),
121
+ userId: opts.userId,
122
+ createdAt,
123
+ expiresAt,
124
+ via: opts.via
125
+ });
126
+ return { token, expiresAt };
127
+ }
128
+ insert(row) {
129
+ this.db.prepare(
130
+ "INSERT INTO auth_sessions (token_hash, user_id, created_at, expires_at, via) VALUES (?, ?, ?, ?, ?)"
131
+ ).run(row.tokenHash, row.userId, row.createdAt, row.expiresAt, row.via);
132
+ }
133
+ findByTokenHash(tokenHash) {
134
+ const r = this.db.prepare("SELECT * FROM auth_sessions WHERE token_hash = ?").get(tokenHash);
135
+ if (!r) return null;
136
+ return {
137
+ tokenHash: r.token_hash,
138
+ userId: r.user_id,
139
+ createdAt: r.created_at,
140
+ expiresAt: r.expires_at,
141
+ via: r.via ?? null
142
+ };
143
+ }
144
+ /** Sliding renewal: update the expiration time. */
145
+ touch(tokenHash, expiresAt) {
146
+ this.db.prepare("UPDATE auth_sessions SET expires_at = ? WHERE token_hash = ?").run(expiresAt, tokenHash);
147
+ }
148
+ delete(tokenHash) {
149
+ this.db.prepare("DELETE FROM auth_sessions WHERE token_hash = ?").run(tokenHash);
150
+ }
151
+ /** Opportunistically clean up expired sessions (called during login/validation). */
152
+ deleteExpired(nowIso) {
153
+ this.db.prepare("DELETE FROM auth_sessions WHERE expires_at < ?").run(nowIso);
154
+ }
155
+ /** Clear all sessions for a user (forces re-login after an admin resets the password). */
156
+ deleteByUser(userId) {
157
+ this.db.prepare("DELETE FROM auth_sessions WHERE user_id = ?").run(userId);
158
+ }
159
+ /**
160
+ * Clear a user's sessions of one kind. Used to end EVERY first-login session when a password
161
+ * is set: an earlier boot's link may still be live in someone's scrollback, and a `setup`
162
+ * session may change the password without knowing the old one.
163
+ */
164
+ deleteByUserAndVia(userId, via) {
165
+ this.db.prepare("DELETE FROM auth_sessions WHERE user_id = ? AND via = ?").run(userId, via);
166
+ }
167
+ };
168
+ _init2 = __decoratorStart(null);
169
+ __decorateElement(_init2, 5, "db", _db_dec2, AuthSessionsRepo);
170
+ AuthSessionsRepo = __decorateElement(_init2, 0, "AuthSessionsRepo", _AuthSessionsRepo_decorators, AuthSessionsRepo);
171
+ __runInitializers(_init2, 1, AuthSessionsRepo);
172
+
173
+ export {
174
+ UsersRepo,
175
+ sessionTokenHash,
176
+ AuthSessionsRepo
177
+ };
178
+ //# sourceMappingURL=chunk-WPYTS7TI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/db/repos/users.ts","../src/db/repos/auth-sessions.ts"],"sourcesContent":["/**\n * users table repo: pure SQL wrapper, no business rules.\n * user_id is the login name (a semantic id, specified at creation, immutable).\n */\nimport { Component, Use } from \"@adelie/core/kernel\";\nimport type { Db } from \"../../hmr/capabilities.js\";\nimport type { Users } from \"../../mechanisms/identity.js\";\n\nexport interface UserRow {\n userId: string;\n passwordHash: string;\n isAdmin: boolean;\n /** Still using the initial password (seeded / set by an admin); cleared to 0 once the user changes it. */\n passwordIsInitial: boolean;\n /** Nickname shown in place of the id; null = never set. */\n displayName: string | null;\n /** Avatar as a data URL; null = never set. */\n avatar: string | null;\n /** Most recent successful sign-in (ISO); null = never signed in — an account that exists but has not been used yet. */\n lastLoginAt: string | null;\n createdAt: string;\n}\n\nfunction mapRow(r: Record<string, unknown>): UserRow {\n return {\n userId: r.user_id as string,\n passwordHash: r.password_hash as string,\n isAdmin: (r.is_admin as number) === 1,\n passwordIsInitial: (r.password_is_initial as number) === 1,\n displayName: (r.display_name as string | null) ?? null,\n avatar: (r.avatar as string | null) ?? null,\n lastLoginAt: (r.last_login_at as string | null) ?? null,\n createdAt: r.created_at as string,\n };\n}\n\n@Component()\nexport class UsersRepo implements Users {\n @Use() private readonly db!: Db;\n\n insert(row: UserRow): void {\n this.db\n .prepare(\n \"INSERT INTO users (user_id, password_hash, is_admin, password_is_initial, display_name, avatar, last_login_at, created_at)\" +\n \" VALUES (?, ?, ?, ?, ?, ?, ?, ?)\",\n )\n .run(\n row.userId,\n row.passwordHash,\n row.isAdmin ? 1 : 0,\n row.passwordIsInitial ? 1 : 0,\n row.displayName,\n row.avatar,\n row.lastLoginAt,\n row.createdAt,\n );\n }\n\n findById(userId: string): UserRow | null {\n const r = this.db.prepare(\"SELECT * FROM users WHERE user_id = ?\").get(userId);\n return r ? mapRow(r) : null;\n }\n\n /** All users (for the admin user backend), ordered by creation time ascending. */\n list(): UserRow[] {\n const rows = this.db.prepare(\"SELECT * FROM users ORDER BY created_at ASC, user_id ASC\").all();\n return rows.map(mapRow);\n }\n\n count(): number {\n const r = this.db.prepare(\"SELECT COUNT(*) AS n FROM users\").get();\n return (r?.n as number) ?? 0;\n }\n\n /** Update the password hash; isInitial marks whether the password was set by someone else (seed / admin). */\n updatePassword(userId: string, passwordHash: string, isInitial: boolean): void {\n this.db\n .prepare(\"UPDATE users SET password_hash = ?, password_is_initial = ? WHERE user_id = ?\")\n .run(passwordHash, isInitial ? 1 : 0, userId);\n }\n\n /**\n * Stamp the account's most recent sign-in, overwriting whatever was there: the column is a\n * \"when did they last get in\" fact, not a history (the admin user backend shows the one value).\n */\n touchLastLogin(userId: string, at: string): void {\n this.db.prepare(\"UPDATE users SET last_login_at = ? WHERE user_id = ?\").run(at, userId);\n }\n\n /**\n * Writes the profile fields the patch names, leaving the rest as they are: an absent key\n * keeps the stored value, `null` clears it, a string replaces it. A patch naming neither\n * field writes nothing rather than issuing an UPDATE with an empty SET list.\n */\n updateProfile(\n userId: string,\n patch: { displayName?: string | null; avatar?: string | null },\n ): void {\n const sets: string[] = [];\n const values: (string | null)[] = [];\n if (patch.displayName !== undefined) {\n sets.push(\"display_name = ?\");\n values.push(patch.displayName);\n }\n if (patch.avatar !== undefined) {\n sets.push(\"avatar = ?\");\n values.push(patch.avatar);\n }\n if (sets.length === 0) return;\n this.db.prepare(`UPDATE users SET ${sets.join(\", \")} WHERE user_id = ?`).run(...values, userId);\n }\n\n /** Used by admin user deletion and account-creation compensation paths (owned Projects must be cleaned up first). */\n delete(userId: string): void {\n this.db.prepare(\"DELETE FROM users WHERE user_id = ?\").run(userId);\n }\n}\n","/**\n * auth_sessions table repo (server-side sessions backing the HttpOnly cookie). Stores only\n * sha256(token); the raw token appears only in the cookie. `issue()` is the ONE minting point,\n * so a CLI-minted row cannot drift from one the server issues itself.\n */\nimport { createHash, randomBytes } from \"node:crypto\";\nimport { Component, Use } from \"@adelie/core/kernel\";\nimport type { Db } from \"../../hmr/capabilities.js\";\nimport type { AuthSessions } from \"../../mechanisms/identity.js\";\n\n/** How a session was established, as stored. NULL on rows formed before the column existed. */\nexport type SessionViaValue = \"password\" | \"desktop\" | \"setup\" | \"cli\";\n\nexport interface AuthSessionRow {\n tokenHash: string;\n userId: string;\n createdAt: string;\n expiresAt: string;\n via: SessionViaValue | null;\n}\n\n/** sha256 hex of a raw session token — the only form the database ever holds. */\nexport function sessionTokenHash(token: string): string {\n return createHash(\"sha256\").update(token).digest(\"hex\");\n}\n\n@Component()\nexport class AuthSessionsRepo implements AuthSessions {\n @Use() private readonly db!: Db;\n\n /**\n * Mints a session and returns the raw token for a cookie or the terminal. `maxTtlMs` caps a\n * caller-supplied lifetime (`--ttl-seconds`): one longer than an ordinary session would make\n * a leaked token file outlive every other credential, sliding forever. Expired rows are\n * swept here too, so a cron that only mints does not accumulate them.\n */\n issue(opts: {\n userId: string;\n via: SessionViaValue;\n now: Date;\n ttlMs: number;\n maxTtlMs?: number;\n }): { token: string; expiresAt: string } {\n const ttlMs = Math.max(1_000, Math.min(opts.ttlMs, opts.maxTtlMs ?? opts.ttlMs));\n const token = randomBytes(32).toString(\"base64url\");\n const createdAt = opts.now.toISOString();\n const expiresAt = new Date(opts.now.getTime() + ttlMs).toISOString();\n this.deleteExpired(createdAt);\n this.insert({\n tokenHash: sessionTokenHash(token),\n userId: opts.userId,\n createdAt,\n expiresAt,\n via: opts.via,\n });\n return { token, expiresAt };\n }\n\n insert(row: AuthSessionRow): void {\n this.db\n .prepare(\n \"INSERT INTO auth_sessions (token_hash, user_id, created_at, expires_at, via) VALUES (?, ?, ?, ?, ?)\",\n )\n .run(row.tokenHash, row.userId, row.createdAt, row.expiresAt, row.via);\n }\n\n findByTokenHash(tokenHash: string): AuthSessionRow | null {\n const r = this.db.prepare(\"SELECT * FROM auth_sessions WHERE token_hash = ?\").get(tokenHash);\n if (!r) return null;\n return {\n tokenHash: r.token_hash as string,\n userId: r.user_id as string,\n createdAt: r.created_at as string,\n expiresAt: r.expires_at as string,\n via: (r.via as SessionViaValue | null) ?? null,\n };\n }\n\n /** Sliding renewal: update the expiration time. */\n touch(tokenHash: string, expiresAt: string): void {\n this.db\n .prepare(\"UPDATE auth_sessions SET expires_at = ? WHERE token_hash = ?\")\n .run(expiresAt, tokenHash);\n }\n\n delete(tokenHash: string): void {\n this.db.prepare(\"DELETE FROM auth_sessions WHERE token_hash = ?\").run(tokenHash);\n }\n\n /** Opportunistically clean up expired sessions (called during login/validation). */\n deleteExpired(nowIso: string): void {\n this.db.prepare(\"DELETE FROM auth_sessions WHERE expires_at < ?\").run(nowIso);\n }\n\n /** Clear all sessions for a user (forces re-login after an admin resets the password). */\n deleteByUser(userId: string): void {\n this.db.prepare(\"DELETE FROM auth_sessions WHERE user_id = ?\").run(userId);\n }\n\n /**\n * Clear a user's sessions of one kind. Used to end EVERY first-login session when a password\n * is set: an earlier boot's link may still be live in someone's scrollback, and a `setup`\n * session may change the password without knowing the old one.\n */\n deleteByUserAndVia(userId: string, via: SessionViaValue): void {\n this.db.prepare(\"DELETE FROM auth_sessions WHERE user_id = ? AND via = ?\").run(userId, via);\n }\n}\n"],"mappings":"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","names":["Component","Use","_db_dec","_init","Component","Use"]}