@adelie/server 0.0.0-stage → 0.5.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 (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,10 @@
1
+ import {
2
+ MACHINE_PHASES,
3
+ TICKET_SLUG_PATTERN
4
+ } from "../chunk-IZEMORXV.js";
5
+ import "../chunk-B5IP37ZQ.js";
6
+ export {
7
+ MACHINE_PHASES,
8
+ TICKET_SLUG_PATTERN
9
+ };
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,50 @@
1
+ /** How a session was established, as stored. NULL on rows formed before the column existed. */
2
+ type SessionViaValue = "password" | "desktop" | "setup" | "cli";
3
+
4
+ /** An hour: long enough for a controller to finish, short enough to forget. */
5
+ declare const CLI_TOKEN_TTL_MS: number;
6
+ /**
7
+ * Ceiling on a caller-supplied `--ttl-seconds`, matching the default session TTL (config.ts):
8
+ * a token that lives in a file must not outlive an ordinary browser session.
9
+ */
10
+ declare const CLI_TOKEN_MAX_TTL_MS: number;
11
+ /**
12
+ * What a minted row records about how its session was established.
13
+ *
14
+ * `cli` is the default and what `penguin auth token` writes: a session that behaves like a
15
+ * password one in every way. `desktop` is for the desktop shell signing its own window in
16
+ * against a server it did not spawn, and says the same thing its one-shot claim token says —
17
+ * with as much backing, since only an account that can write this file can mint at all.
18
+ *
19
+ * The distinction is not cosmetic: a desktop session may set a password without supplying the
20
+ * current one, because the account the shell created has a password that was generated,
21
+ * hashed and discarded unseen — there is nothing to supply, and whoever can write to this
22
+ * data root can already reset that password offline (`penguin server reset-admin-password`).
23
+ * That allowance is granted by a server running in desktop mode; against any other server the
24
+ * value records what the session is without widening what it may do (routes/me.ts).
25
+ */
26
+ type MintedVia = Extract<SessionViaValue, "cli" | "desktop">;
27
+ type MintTokenResult = {
28
+ outcome: "minted";
29
+ token: string;
30
+ userId: string;
31
+ expiresAt: string;
32
+ }
33
+ /** No web.db on this root — the server has never run here, so there is no account to mint for. */
34
+ | {
35
+ outcome: "no_server";
36
+ } | {
37
+ outcome: "failed";
38
+ detail: string;
39
+ };
40
+ /** Issues an API session token for the data root at `root`. */
41
+ declare function mintApiToken(root: string, opts?: {
42
+ userId?: string;
43
+ ttlMs?: number;
44
+ dbPath?: string;
45
+ now?: Date;
46
+ /** How the session records its own establishment; `cli` unless told otherwise. */
47
+ via?: MintedVia;
48
+ }): MintTokenResult;
49
+
50
+ export { CLI_TOKEN_MAX_TTL_MS, CLI_TOKEN_TTL_MS, type MintTokenResult, type MintedVia, mintApiToken };
@@ -0,0 +1,55 @@
1
+ import {
2
+ AuthSessionsRepo,
3
+ UsersRepo
4
+ } from "./chunk-WPYTS7TI.js";
5
+ import {
6
+ openExistingDatabase
7
+ } from "./chunk-ZZUQGQD6.js";
8
+ import "./chunk-B5IP37ZQ.js";
9
+
10
+ // src/auth-token.ts
11
+ import path from "path";
12
+ import fs from "fs";
13
+ import { wire } from "@adelie/core/kernel";
14
+ var CLI_TOKEN_TTL_MS = 60 * 6e4;
15
+ var CLI_TOKEN_MAX_TTL_MS = 30 * 24 * 60 * 6e4;
16
+ function explain(err, dbPath) {
17
+ const message = err instanceof Error ? err.message : String(err);
18
+ if (message.includes("no column named via")) {
19
+ return `${dbPath} predates this release \u2014 start the server once (\`penguin web\`) to upgrade it`;
20
+ }
21
+ if (message.includes("unable to open database")) {
22
+ return `cannot open ${dbPath} \u2014 minting needs the data root's own OS account; otherwise sign in with \`penguin auth login --server <url>\``;
23
+ }
24
+ return message;
25
+ }
26
+ function mintApiToken(root, opts = {}) {
27
+ const userId = opts.userId ?? "admin";
28
+ const dbPath = opts.dbPath ?? path.join(root, "web.db");
29
+ if (!fs.existsSync(dbPath)) return { outcome: "no_server" };
30
+ let db = null;
31
+ try {
32
+ db = openExistingDatabase(dbPath);
33
+ if (wire(UsersRepo, { db }).findById(userId) === null) {
34
+ return { outcome: "failed", detail: `no such account: ${userId}` };
35
+ }
36
+ const { token, expiresAt } = wire(AuthSessionsRepo, { db }).issue({
37
+ userId,
38
+ via: opts.via ?? "cli",
39
+ now: opts.now ?? /* @__PURE__ */ new Date(),
40
+ ttlMs: opts.ttlMs ?? CLI_TOKEN_TTL_MS,
41
+ maxTtlMs: CLI_TOKEN_MAX_TTL_MS
42
+ });
43
+ return { outcome: "minted", token, userId, expiresAt };
44
+ } catch (err) {
45
+ return { outcome: "failed", detail: explain(err, dbPath) };
46
+ } finally {
47
+ db?.close();
48
+ }
49
+ }
50
+ export {
51
+ CLI_TOKEN_MAX_TTL_MS,
52
+ CLI_TOKEN_TTL_MS,
53
+ mintApiToken
54
+ };
55
+ //# sourceMappingURL=auth-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth-token.ts"],"sourcesContent":["/**\n * Mints an API session by inserting a row into the root's `web.db` — no running server needed.\n * Authorized by being able to read and write that root, which already holds every credential\n * the token could reach. On a multi-user box that means the OS account running the server;\n * everyone else signs in with `penguin auth login --server <url>`.\n */\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport { openExistingDatabase } from \"./db/database.js\";\nimport { AuthSessionsRepo } from \"./db/repos/auth-sessions.js\";\nimport type { SessionViaValue } from \"./db/repos/auth-sessions.js\";\nimport { UsersRepo } from \"./db/repos/users.js\";\nimport { wire } from \"@adelie/core/kernel\";\n\n/** An hour: long enough for a controller to finish, short enough to forget. */\nexport const CLI_TOKEN_TTL_MS = 60 * 60_000;\n\n/**\n * Ceiling on a caller-supplied `--ttl-seconds`, matching the default session TTL (config.ts):\n * a token that lives in a file must not outlive an ordinary browser session.\n */\nexport const CLI_TOKEN_MAX_TTL_MS = 30 * 24 * 60 * 60_000;\n\n/**\n * What a minted row records about how its session was established.\n *\n * `cli` is the default and what `penguin auth token` writes: a session that behaves like a\n * password one in every way. `desktop` is for the desktop shell signing its own window in\n * against a server it did not spawn, and says the same thing its one-shot claim token says —\n * with as much backing, since only an account that can write this file can mint at all.\n *\n * The distinction is not cosmetic: a desktop session may set a password without supplying the\n * current one, because the account the shell created has a password that was generated,\n * hashed and discarded unseen — there is nothing to supply, and whoever can write to this\n * data root can already reset that password offline (`penguin server reset-admin-password`).\n * That allowance is granted by a server running in desktop mode; against any other server the\n * value records what the session is without widening what it may do (routes/me.ts).\n */\nexport type MintedVia = Extract<SessionViaValue, \"cli\" | \"desktop\">;\n\nexport type MintTokenResult =\n | { outcome: \"minted\"; token: string; userId: string; expiresAt: string }\n /** No web.db on this root — the server has never run here, so there is no account to mint for. */\n | { outcome: \"no_server\" }\n | { outcome: \"failed\"; detail: string };\n\n/**\n * Turns a failure into something the person at the terminal can act on. Both cases are\n * ordinary situations, not crashes: a database owned by another OS account, and one written\n * by an older release (minting deliberately does not migrate — see openExistingDatabase).\n */\nfunction explain(err: unknown, dbPath: string): string {\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes(\"no column named via\")) {\n return `${dbPath} predates this release — start the server once (\\`penguin web\\`) to upgrade it`;\n }\n if (message.includes(\"unable to open database\")) {\n return (\n `cannot open ${dbPath} — minting needs the data root's own OS account; ` +\n \"otherwise sign in with `penguin auth login --server <url>`\"\n );\n }\n return message;\n}\n\n/** Issues an API session token for the data root at `root`. */\nexport function mintApiToken(\n root: string,\n opts: {\n userId?: string;\n ttlMs?: number;\n dbPath?: string;\n now?: Date;\n /** How the session records its own establishment; `cli` unless told otherwise. */\n via?: MintedVia;\n } = {},\n): MintTokenResult {\n const userId = opts.userId ?? \"admin\";\n const dbPath = opts.dbPath ?? path.join(root, \"web.db\");\n // Existence check first: openExistingDatabase would otherwise create an empty file, and a\n // root with no web.db has no account to mint for.\n if (!fs.existsSync(dbPath)) return { outcome: \"no_server\" };\n\n let db: ReturnType<typeof openExistingDatabase> | null = null;\n try {\n db = openExistingDatabase(dbPath);\n if (wire(UsersRepo, { db: db }).findById(userId) === null) {\n return { outcome: \"failed\", detail: `no such account: ${userId}` };\n }\n // The repo is the single minting point (token shape, hash, TTL ceiling), so a CLI-minted\n // row cannot drift from one the server issues itself.\n const { token, expiresAt } = wire(AuthSessionsRepo, { db: db }).issue({\n userId,\n via: opts.via ?? \"cli\",\n now: opts.now ?? new Date(),\n ttlMs: opts.ttlMs ?? CLI_TOKEN_TTL_MS,\n maxTtlMs: CLI_TOKEN_MAX_TTL_MS,\n });\n return { outcome: \"minted\", token, userId, expiresAt };\n } catch (err) {\n return { outcome: \"failed\", detail: explain(err, dbPath) };\n } finally {\n db?.close();\n }\n}\n"],"mappings":";;;;;;;;;;AAMA,OAAO,UAAU;AACjB,OAAO,QAAQ;AAKf,SAAS,YAAY;AAGd,IAAM,mBAAmB,KAAK;AAM9B,IAAM,uBAAuB,KAAK,KAAK,KAAK;AA8BnD,SAAS,QAAQ,KAAc,QAAwB;AACrD,QAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,MAAI,QAAQ,SAAS,qBAAqB,GAAG;AAC3C,WAAO,GAAG,MAAM;AAAA,EAClB;AACA,MAAI,QAAQ,SAAS,yBAAyB,GAAG;AAC/C,WACE,eAAe,MAAM;AAAA,EAGzB;AACA,SAAO;AACT;AAGO,SAAS,aACd,MACA,OAOI,CAAC,GACY;AACjB,QAAM,SAAS,KAAK,UAAU;AAC9B,QAAM,SAAS,KAAK,UAAU,KAAK,KAAK,MAAM,QAAQ;AAGtD,MAAI,CAAC,GAAG,WAAW,MAAM,EAAG,QAAO,EAAE,SAAS,YAAY;AAE1D,MAAI,KAAqD;AACzD,MAAI;AACF,SAAK,qBAAqB,MAAM;AAChC,QAAI,KAAK,WAAW,EAAE,GAAO,CAAC,EAAE,SAAS,MAAM,MAAM,MAAM;AACzD,aAAO,EAAE,SAAS,UAAU,QAAQ,oBAAoB,MAAM,GAAG;AAAA,IACnE;AAGA,UAAM,EAAE,OAAO,UAAU,IAAI,KAAK,kBAAkB,EAAE,GAAO,CAAC,EAAE,MAAM;AAAA,MACpE;AAAA,MACA,KAAK,KAAK,OAAO;AAAA,MACjB,KAAK,KAAK,OAAO,oBAAI,KAAK;AAAA,MAC1B,OAAO,KAAK,SAAS;AAAA,MACrB,UAAU;AAAA,IACZ,CAAC;AACD,WAAO,EAAE,SAAS,UAAU,OAAO,QAAQ,UAAU;AAAA,EACvD,SAAS,KAAK;AACZ,WAAO,EAAE,SAAS,UAAU,QAAQ,QAAQ,KAAK,MAAM,EAAE;AAAA,EAC3D,UAAE;AACA,QAAI,MAAM;AAAA,EACZ;AACF;","names":[]}
@@ -0,0 +1,56 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
5
+ var __typeError = (msg) => {
6
+ throw TypeError(msg);
7
+ };
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
+ var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
11
+ var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
12
+ var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
13
+ var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
14
+ var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
15
+ var __runInitializers = (array, flags, self, value) => {
16
+ for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
17
+ return value;
18
+ };
19
+ var __decorateElement = (array, flags, name, decorators, target, extra) => {
20
+ var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
21
+ var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
22
+ var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
23
+ var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
24
+ return __privateGet(this, extra);
25
+ }, set [name](x) {
26
+ return __privateSet(this, extra, x);
27
+ } }, name));
28
+ k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
29
+ for (var i = decorators.length - 1; i >= 0; i--) {
30
+ ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
31
+ if (k) {
32
+ ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
33
+ if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
34
+ if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
35
+ }
36
+ it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
37
+ if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
38
+ else if (typeof it !== "object" || it === null) __typeError("Object expected");
39
+ else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
40
+ }
41
+ return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
42
+ };
43
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
44
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
45
+ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
46
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
47
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
48
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
49
+
50
+ export {
51
+ __decoratorStart,
52
+ __runInitializers,
53
+ __decorateElement,
54
+ __publicField
55
+ };
56
+ //# sourceMappingURL=chunk-B5IP37ZQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,78 @@
1
+ // src/lock.ts
2
+ import fs from "fs";
3
+ import net from "net";
4
+ import path from "path";
5
+ var PROBE_TIMEOUT_MS = 500;
6
+ function serverLockPath(root) {
7
+ return path.join(root, "server.lock");
8
+ }
9
+ function parseServerLock(raw) {
10
+ try {
11
+ const parsed = JSON.parse(raw);
12
+ if (typeof parsed.pid !== "number" || !Number.isInteger(parsed.pid) || typeof parsed.port !== "number" || !Number.isInteger(parsed.port)) {
13
+ return null;
14
+ }
15
+ return { pid: parsed.pid, port: parsed.port, startedAt: String(parsed.startedAt ?? "") };
16
+ } catch {
17
+ return null;
18
+ }
19
+ }
20
+ function readServerLock(root) {
21
+ try {
22
+ return parseServerLock(fs.readFileSync(serverLockPath(root), "utf8"));
23
+ } catch {
24
+ return null;
25
+ }
26
+ }
27
+ function pidAlive(pid) {
28
+ try {
29
+ process.kill(pid, 0);
30
+ return true;
31
+ } catch (err) {
32
+ return err.code === "EPERM";
33
+ }
34
+ }
35
+ function portAccepts(port) {
36
+ return new Promise((resolve) => {
37
+ const socket = net.connect({ host: "127.0.0.1", port, timeout: PROBE_TIMEOUT_MS });
38
+ const done = (ok) => {
39
+ socket.destroy();
40
+ resolve(ok);
41
+ };
42
+ socket.once("connect", () => done(true));
43
+ socket.once("timeout", () => done(false));
44
+ socket.once("error", () => done(false));
45
+ });
46
+ }
47
+ async function isServerLockAlive(lock) {
48
+ return pidAlive(lock.pid) && await portAccepts(lock.port);
49
+ }
50
+ async function liveServerLock(root) {
51
+ const lock = readServerLock(root);
52
+ if (!lock) return null;
53
+ return await isServerLockAlive(lock) ? lock : null;
54
+ }
55
+ function acquireServerLock(root, lock) {
56
+ const target = serverLockPath(root);
57
+ const tmp = `${target}.${process.pid}.tmp`;
58
+ fs.writeFileSync(tmp, JSON.stringify(lock) + "\n");
59
+ fs.renameSync(tmp, target);
60
+ }
61
+ function releaseServerLock(root) {
62
+ try {
63
+ const lock = readServerLock(root);
64
+ if (lock && lock.pid === process.pid) fs.rmSync(serverLockPath(root));
65
+ } catch {
66
+ }
67
+ }
68
+
69
+ export {
70
+ serverLockPath,
71
+ parseServerLock,
72
+ readServerLock,
73
+ isServerLockAlive,
74
+ liveServerLock,
75
+ acquireServerLock,
76
+ releaseServerLock
77
+ };
78
+ //# sourceMappingURL=chunk-BQZC56BR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lock.ts"],"sourcesContent":["/**\n * Root-level server instance lock (`<root>/server.lock`).\n *\n * web.db is single-process / single-writer (see db/database.ts), and two servers on one\n * data root would also double-run the schedule scheduler — so a data root admits one\n * server at a time. The lock records {pid, port, startedAt}; liveness requires BOTH the\n * pid to be alive AND the recorded port to accept a TCP connection, because either signal\n * alone false-positives (pids get recycled, ports get taken by unrelated processes). A\n * lock that fails the liveness check is stale and is simply overwritten by the next\n * server.\n *\n * Published as `@adelie/server/lock` (side-effect-free) so the CLI and the\n * desktop shell can pre-check a root without importing the package entry, which starts\n * listening.\n */\nimport fs from \"node:fs\";\nimport net from \"node:net\";\nimport path from \"node:path\";\n\nexport interface ServerLock {\n pid: number;\n port: number;\n startedAt: string;\n}\n\n/** TCP probe budget: loopback either connects immediately or the port is dead. */\nconst PROBE_TIMEOUT_MS = 500;\n\nexport function serverLockPath(root: string): string {\n return path.join(root, \"server.lock\");\n}\n\n/**\n * The lock's text, parsed; anything that is not one reads as \"no lock\".\n *\n * Exported because a lock is also read where the file is not: a controller looking at\n * ANOTHER machine gets this same text back from an ssh `cat` (machines/server-state.ts). The\n * shape is defined once here so the two readers cannot drift apart.\n */\nexport function parseServerLock(raw: string): ServerLock | null {\n try {\n const parsed = JSON.parse(raw) as Partial<ServerLock>;\n if (\n typeof parsed.pid !== \"number\" ||\n !Number.isInteger(parsed.pid) ||\n typeof parsed.port !== \"number\" ||\n !Number.isInteger(parsed.port)\n ) {\n return null;\n }\n return { pid: parsed.pid, port: parsed.port, startedAt: String(parsed.startedAt ?? \"\") };\n } catch {\n return null;\n }\n}\n\n/** Reads the lock file; a missing or malformed file reads as \"no lock\". */\nexport function readServerLock(root: string): ServerLock | null {\n try {\n return parseServerLock(fs.readFileSync(serverLockPath(root), \"utf8\"));\n } catch {\n return null;\n }\n}\n\nfunction pidAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (err) {\n // EPERM = the process exists but belongs to another user — still alive.\n return (err as NodeJS.ErrnoException).code === \"EPERM\";\n }\n}\n\nfunction portAccepts(port: number): Promise<boolean> {\n return new Promise((resolve) => {\n // 127.0.0.1 rather than localhost: this is a raw TCP liveness probe, not an App\n // request, and the server binds 127.0.0.1 (plus ::1) on loopback setups.\n const socket = net.connect({ host: \"127.0.0.1\", port, timeout: PROBE_TIMEOUT_MS });\n const done = (ok: boolean) => {\n socket.destroy();\n resolve(ok);\n };\n socket.once(\"connect\", () => done(true));\n socket.once(\"timeout\", () => done(false));\n socket.once(\"error\", () => done(false));\n });\n}\n\n/** True when the lock's process is alive AND its port accepts connections. */\nexport async function isServerLockAlive(lock: ServerLock): Promise<boolean> {\n return pidAlive(lock.pid) && (await portAccepts(lock.port));\n}\n\n/** Convenience for pre-checks: the live lock on this root, or null (absent or stale). */\nexport async function liveServerLock(root: string): Promise<ServerLock | null> {\n const lock = readServerLock(root);\n if (!lock) return null;\n return (await isServerLockAlive(lock)) ? lock : null;\n}\n\n/** Writes the lock atomically (tmp + rename; the parent directory must already exist). */\nexport function acquireServerLock(root: string, lock: ServerLock): void {\n const target = serverLockPath(root);\n const tmp = `${target}.${process.pid}.tmp`;\n fs.writeFileSync(tmp, JSON.stringify(lock) + \"\\n\");\n fs.renameSync(tmp, target);\n}\n\n/** Removes the lock if it is still ours (best-effort; never throws on shutdown paths). */\nexport function releaseServerLock(root: string): void {\n try {\n const lock = readServerLock(root);\n if (lock && lock.pid === process.pid) fs.rmSync(serverLockPath(root));\n } catch {\n // Best-effort: a stale leftover is overwritten by the next server anyway.\n }\n}\n"],"mappings":";AAeA,OAAO,QAAQ;AACf,OAAO,SAAS;AAChB,OAAO,UAAU;AASjB,IAAM,mBAAmB;AAElB,SAAS,eAAe,MAAsB;AACnD,SAAO,KAAK,KAAK,MAAM,aAAa;AACtC;AASO,SAAS,gBAAgB,KAAgC;AAC9D,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,QACE,OAAO,OAAO,QAAQ,YACtB,CAAC,OAAO,UAAU,OAAO,GAAG,KAC5B,OAAO,OAAO,SAAS,YACvB,CAAC,OAAO,UAAU,OAAO,IAAI,GAC7B;AACA,aAAO;AAAA,IACT;AACA,WAAO,EAAE,KAAK,OAAO,KAAK,MAAM,OAAO,MAAM,WAAW,OAAO,OAAO,aAAa,EAAE,EAAE;AAAA,EACzF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,eAAe,MAAiC;AAC9D,MAAI;AACF,WAAO,gBAAgB,GAAG,aAAa,eAAe,IAAI,GAAG,MAAM,CAAC;AAAA,EACtE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,SAAS,KAAsB;AACtC,MAAI;AACF,YAAQ,KAAK,KAAK,CAAC;AACnB,WAAO;AAAA,EACT,SAAS,KAAK;AAEZ,WAAQ,IAA8B,SAAS;AAAA,EACjD;AACF;AAEA,SAAS,YAAY,MAAgC;AACnD,SAAO,IAAI,QAAQ,CAAC,YAAY;AAG9B,UAAM,SAAS,IAAI,QAAQ,EAAE,MAAM,aAAa,MAAM,SAAS,iBAAiB,CAAC;AACjF,UAAM,OAAO,CAAC,OAAgB;AAC5B,aAAO,QAAQ;AACf,cAAQ,EAAE;AAAA,IACZ;AACA,WAAO,KAAK,WAAW,MAAM,KAAK,IAAI,CAAC;AACvC,WAAO,KAAK,WAAW,MAAM,KAAK,KAAK,CAAC;AACxC,WAAO,KAAK,SAAS,MAAM,KAAK,KAAK,CAAC;AAAA,EACxC,CAAC;AACH;AAGA,eAAsB,kBAAkB,MAAoC;AAC1E,SAAO,SAAS,KAAK,GAAG,KAAM,MAAM,YAAY,KAAK,IAAI;AAC3D;AAGA,eAAsB,eAAe,MAA0C;AAC7E,QAAM,OAAO,eAAe,IAAI;AAChC,MAAI,CAAC,KAAM,QAAO;AAClB,SAAQ,MAAM,kBAAkB,IAAI,IAAK,OAAO;AAClD;AAGO,SAAS,kBAAkB,MAAc,MAAwB;AACtE,QAAM,SAAS,eAAe,IAAI;AAClC,QAAM,MAAM,GAAG,MAAM,IAAI,QAAQ,GAAG;AACpC,KAAG,cAAc,KAAK,KAAK,UAAU,IAAI,IAAI,IAAI;AACjD,KAAG,WAAW,KAAK,MAAM;AAC3B;AAGO,SAAS,kBAAkB,MAAoB;AACpD,MAAI;AACF,UAAM,OAAO,eAAe,IAAI;AAChC,QAAI,QAAQ,KAAK,QAAQ,QAAQ,IAAK,IAAG,OAAO,eAAe,IAAI,CAAC;AAAA,EACtE,QAAQ;AAAA,EAER;AACF;","names":[]}
@@ -0,0 +1,14 @@
1
+ import {
2
+ readHarnessInfo
3
+ } from "./chunk-GO6G445C.js";
4
+
5
+ // src/version-report.ts
6
+ import { buildInfo } from "@adelie/core";
7
+ async function versionReport(root) {
8
+ return { ...buildInfo(), harness: await readHarnessInfo(root) };
9
+ }
10
+
11
+ export {
12
+ versionReport
13
+ };
14
+ //# sourceMappingURL=chunk-C2S2LVQ7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/version-report.ts"],"sourcesContent":["/**\n * The one assembler behind `penguin version --json` and GET /api/version.\n *\n * The report has two halves that no single layer can produce. Core knows the artifact this\n * process is executing and nothing about data roots; the HMR store knows what harness was\n * pushed to a root and nothing about the process reading it. Joining them here — rather\n * than in each caller — is what makes \"the CLI and the API report the same thing\" a\n * structural fact instead of two spreads that have to be kept in step.\n *\n * It lives in the server package because that is where the harness.json format is owned\n * (see ./hmr/manifest.ts), and is exported as its own entry point so the CLI can reach it\n * without pulling in a server: the module graph here is core plus a `node:fs` read.\n */\nimport { buildInfo } from \"@adelie/core\";\nimport type { VersionReport } from \"@adelie/core\";\nimport { readHarnessInfo } from \"./hmr/manifest.js\";\n\n/**\n * The running build's identity plus the harness committed to `root`'s HMR store.\n *\n * Never throws: an unreadable or malformed store reports `harness: null`, which is also\n * what a root with nothing ever pushed to it reports. Version reporting degrades to fewer\n * facts, never to a failure.\n */\nexport async function versionReport(root: string): Promise<VersionReport> {\n return { ...buildInfo(), harness: await readHarnessInfo(root) };\n}\n"],"mappings":";;;;;AAaA,SAAS,iBAAiB;AAW1B,eAAsB,cAAc,MAAsC;AACxE,SAAO,EAAE,GAAG,UAAU,GAAG,SAAS,MAAM,gBAAgB,IAAI,EAAE;AAChE;","names":[]}