@prismshadow/penguin-server 0.2.2 → 0.2.3
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.
- package/README.md +1 -0
- package/dist/api/types.d.ts +311 -22
- package/dist/chunk-3QINBW3W.js +565 -0
- package/dist/chunk-3QINBW3W.js.map +1 -0
- package/dist/hmr/manifest.d.ts +44 -0
- package/dist/hmr/manifest.js +27 -0
- package/dist/hmr/manifest.js.map +1 -0
- package/dist/index.js +1995 -796
- package/dist/index.js.map +1 -1
- package/dist/reset-admin-password.d.ts +28 -0
- package/dist/reset-admin-password.js +39 -0
- package/dist/reset-admin-password.js.map +1 -0
- package/package.json +11 -3
- package/web-dist/assets/cpp-DIPi6g--.js +1 -0
- package/web-dist/assets/highlighter-Nvj8c0Yw.js +152 -0
- package/web-dist/assets/index--uKtXcEB.js +183 -0
- package/web-dist/assets/index-BqF51KT4.css +1 -0
- package/web-dist/assets/ruby-B13GW9FM.js +1 -0
- package/web-dist/index.html +2 -2
- package/web-dist/assets/abap-BdImnpbu.js +0 -1
- package/web-dist/assets/actionscript-3-CoDkCxhg.js +0 -1
- package/web-dist/assets/ada-bCR0ucgS.js +0 -1
- package/web-dist/assets/andromeeda-C4gqWexZ.js +0 -1
- package/web-dist/assets/angular-html-DA-rfuFy.js +0 -1
- package/web-dist/assets/angular-ts-BrjP3tb8.js +0 -1
- package/web-dist/assets/apache-Pmp26Uib.js +0 -1
- package/web-dist/assets/apex-Dqspr-GT.js +0 -1
- package/web-dist/assets/apl-CORt7UWP.js +0 -1
- package/web-dist/assets/applescript-Co6uUVPk.js +0 -1
- package/web-dist/assets/ara-BRHolxvo.js +0 -1
- package/web-dist/assets/asciidoc-Ve4PFQV2.js +0 -1
- package/web-dist/assets/asm-D_Q5rh1f.js +0 -1
- package/web-dist/assets/astro-HNnZUWAn.js +0 -1
- package/web-dist/assets/aurora-x-D-2ljcwZ.js +0 -1
- package/web-dist/assets/awk-DMzUqQB5.js +0 -1
- package/web-dist/assets/ayu-dark-DYE7WIF3.js +0 -1
- package/web-dist/assets/ayu-light-BA47KaF1.js +0 -1
- package/web-dist/assets/ayu-mirage-32ctXXKs.js +0 -1
- package/web-dist/assets/ballerina-BFfxhgS-.js +0 -1
- package/web-dist/assets/bat-BkioyH1T.js +0 -1
- package/web-dist/assets/beancount-k_qm7-4y.js +0 -1
- package/web-dist/assets/berry-uYugtg8r.js +0 -1
- package/web-dist/assets/bibtex-CHM0blh-.js +0 -1
- package/web-dist/assets/bicep-Bmn6On1c.js +0 -1
- package/web-dist/assets/bird2-BIv1doCn.js +0 -1
- package/web-dist/assets/blade-2xfisSek.js +0 -1
- package/web-dist/assets/bsl-BO_Y6i37.js +0 -1
- package/web-dist/assets/c3-MRO5bC_T.js +0 -1
- package/web-dist/assets/cadence-Bv_4Rxtq.js +0 -1
- package/web-dist/assets/cairo-KRGpt6FW.js +0 -1
- package/web-dist/assets/catppuccin-frappe-DFWUc33u.js +0 -1
- package/web-dist/assets/catppuccin-latte-C9dUb6Cb.js +0 -1
- package/web-dist/assets/catppuccin-macchiato-DQyhUUbL.js +0 -1
- package/web-dist/assets/catppuccin-mocha-D87Tk5Gz.js +0 -1
- package/web-dist/assets/clarity-D53aC0YG.js +0 -1
- package/web-dist/assets/clojure-P80f7IUj.js +0 -1
- package/web-dist/assets/cmake-D1j8_8rp.js +0 -1
- package/web-dist/assets/cobol-nBiQ_Alo.js +0 -1
- package/web-dist/assets/codeowners-Bp6g37R7.js +0 -1
- package/web-dist/assets/codeql-DsOJ9woJ.js +0 -1
- package/web-dist/assets/coffee-Ch7k5sss.js +0 -1
- package/web-dist/assets/common-lisp-Cg-RD9OK.js +0 -1
- package/web-dist/assets/coq-DkFqJrB1.js +0 -1
- package/web-dist/assets/cpp-UfJy6YNI.js +0 -1
- package/web-dist/assets/crystal-DGywbUpC.js +0 -1
- package/web-dist/assets/csharp-DSvCPggb.js +0 -1
- package/web-dist/assets/csv-fuZLfV_i.js +0 -1
- package/web-dist/assets/cue-D82EKSYY.js +0 -1
- package/web-dist/assets/cypher-COkxafJQ.js +0 -1
- package/web-dist/assets/d-85-TOEBH.js +0 -1
- package/web-dist/assets/dark-plus-C3mMm8J8.js +0 -1
- package/web-dist/assets/dart-bE4Kk8sk.js +0 -1
- package/web-dist/assets/dax-CEL-wOlO.js +0 -1
- package/web-dist/assets/desktop-BmXAJ9_W.js +0 -1
- package/web-dist/assets/docker-BcOcwvcX.js +0 -1
- package/web-dist/assets/dotenv-Da5cRb03.js +0 -1
- package/web-dist/assets/dracula-BzJJZx-M.js +0 -1
- package/web-dist/assets/dracula-soft-BXkSAIEj.js +0 -1
- package/web-dist/assets/dream-maker-BtqSS_iP.js +0 -1
- package/web-dist/assets/edge-FbVlp4U3.js +0 -1
- package/web-dist/assets/elixir-CkH2-t6x.js +0 -1
- package/web-dist/assets/elm-DbKCFpqz.js +0 -1
- package/web-dist/assets/emacs-lisp-CXvaQtF9.js +0 -1
- package/web-dist/assets/erb-Dm6A9KJ5.js +0 -1
- package/web-dist/assets/erlang-DsQrWhSR.js +0 -1
- package/web-dist/assets/everforest-dark-BgDCqdQA.js +0 -1
- package/web-dist/assets/everforest-light-C8M2exoo.js +0 -1
- package/web-dist/assets/fennel-BYunw83y.js +0 -1
- package/web-dist/assets/fish-BvzEVeQv.js +0 -1
- package/web-dist/assets/fluent-C4IJs8-o.js +0 -1
- package/web-dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -1
- package/web-dist/assets/fortran-free-form-BxgE0vQu.js +0 -1
- package/web-dist/assets/fsharp-CXgrBDvD.js +0 -1
- package/web-dist/assets/gdresource-BOOCDP_w.js +0 -1
- package/web-dist/assets/gdscript-C5YyOfLZ.js +0 -1
- package/web-dist/assets/gdshader-DkwncUOv.js +0 -1
- package/web-dist/assets/genie-D0YGMca9.js +0 -1
- package/web-dist/assets/gherkin-DyxjwDmM.js +0 -1
- package/web-dist/assets/git-commit-F4YmCXRG.js +0 -1
- package/web-dist/assets/git-rebase-r7XF79zn.js +0 -1
- package/web-dist/assets/github-dark-default-Cuk6v7N8.js +0 -1
- package/web-dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -1
- package/web-dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -1
- package/web-dist/assets/github-light-default-D7oLnXFd.js +0 -1
- package/web-dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -1
- package/web-dist/assets/gleam-BspZqrRM.js +0 -1
- package/web-dist/assets/glimmer-js-ByusRIyA.js +0 -1
- package/web-dist/assets/glimmer-ts-BfAWNZQY.js +0 -1
- package/web-dist/assets/glsl-DplSGwfg.js +0 -1
- package/web-dist/assets/gn-n2N0HUVH.js +0 -1
- package/web-dist/assets/gnuplot-DdkO51Og.js +0 -1
- package/web-dist/assets/graphql-ChdNCCLP.js +0 -1
- package/web-dist/assets/groovy-gcz8RCvz.js +0 -1
- package/web-dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -1
- package/web-dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -1
- package/web-dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -1
- package/web-dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -1
- package/web-dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -1
- package/web-dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -1
- package/web-dist/assets/hack-DbPARsA_.js +0 -1
- package/web-dist/assets/haml-D5jkg6IW.js +0 -1
- package/web-dist/assets/handlebars-BpdQsYii.js +0 -1
- package/web-dist/assets/haskell-Df6bDoY_.js +0 -1
- package/web-dist/assets/haxe-CzTSHFRz.js +0 -1
- package/web-dist/assets/hcl-BWvSN4gD.js +0 -1
- package/web-dist/assets/hjson-D5-asLiD.js +0 -1
- package/web-dist/assets/hlsl-D3lLCCz7.js +0 -1
- package/web-dist/assets/horizon-BUw7H-hv.js +0 -1
- package/web-dist/assets/horizon-bright-CUuTKBJd.js +0 -1
- package/web-dist/assets/houston-DnULxvSX.js +0 -1
- package/web-dist/assets/html-derivative-DlHx6ybY.js +0 -1
- package/web-dist/assets/http-jrhK8wxY.js +0 -1
- package/web-dist/assets/hurl-irOxFIW8.js +0 -1
- package/web-dist/assets/hxml-Bvhsp5Yf.js +0 -1
- package/web-dist/assets/hy-DFXneXwc.js +0 -1
- package/web-dist/assets/imba-DGztddWO.js +0 -1
- package/web-dist/assets/index-B3puu-Hr.js +0 -153
- package/web-dist/assets/index-CaDuyrN0.css +0 -1
- package/web-dist/assets/index-rgHg3m6g.js +0 -181
- package/web-dist/assets/jinja-f2NsQr07.js +0 -1
- package/web-dist/assets/jison-wvAkD_A8.js +0 -1
- package/web-dist/assets/json5-C9tS-k6U.js +0 -1
- package/web-dist/assets/jsonc-Des-eS-w.js +0 -1
- package/web-dist/assets/jsonl-DcaNXYhu.js +0 -1
- package/web-dist/assets/jsonnet-DFQXde-d.js +0 -1
- package/web-dist/assets/jssm-C2t-YnRu.js +0 -1
- package/web-dist/assets/julia-D7OTSIA_.js +0 -1
- package/web-dist/assets/just-CUsbIsdP.js +0 -1
- package/web-dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -1
- package/web-dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -1
- package/web-dist/assets/kanagawa-wave-DWedfzmr.js +0 -1
- package/web-dist/assets/kdl-DV7GczEv.js +0 -1
- package/web-dist/assets/kotlin-BdnUsdx6.js +0 -1
- package/web-dist/assets/kusto-wEQ09or8.js +0 -1
- package/web-dist/assets/laserwave-DUszq2jm.js +0 -1
- package/web-dist/assets/latex-CaSxy8MP.js +0 -1
- package/web-dist/assets/lean-BZvkOJ9d.js +0 -1
- package/web-dist/assets/less-B1dDrJ26.js +0 -1
- package/web-dist/assets/light-plus-B7mTdjB0.js +0 -1
- package/web-dist/assets/liquid-C0sCDyMI.js +0 -1
- package/web-dist/assets/llvm-DjAJT7YJ.js +0 -1
- package/web-dist/assets/logo-BtOb2qkB.js +0 -1
- package/web-dist/assets/lua-BaeVxFsk.js +0 -1
- package/web-dist/assets/luau-KW6xsasC.js +0 -1
- package/web-dist/assets/make-CHLpvVh8.js +0 -1
- package/web-dist/assets/marko-DjSrsDqO.js +0 -1
- package/web-dist/assets/material-theme-D5KoaKCx.js +0 -1
- package/web-dist/assets/material-theme-darker-BfHTSMKl.js +0 -1
- package/web-dist/assets/material-theme-lighter-B0m2ddpp.js +0 -1
- package/web-dist/assets/material-theme-ocean-CyktbL80.js +0 -1
- package/web-dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -1
- package/web-dist/assets/matlab-D7o27uSR.js +0 -1
- package/web-dist/assets/mdc-DTYItulj.js +0 -1
- package/web-dist/assets/mdx-Cmh6b_Ma.js +0 -1
- package/web-dist/assets/mermaid-mWjccvbQ.js +0 -1
- package/web-dist/assets/min-dark-CafNBF8u.js +0 -1
- package/web-dist/assets/min-light-CTRr51gU.js +0 -1
- package/web-dist/assets/mipsasm-CKIfxQSi.js +0 -1
- package/web-dist/assets/mojo-rZm6bMo-.js +0 -1
- package/web-dist/assets/monokai-D4h5O-jR.js +0 -1
- package/web-dist/assets/moonbit-_H4v1dQx.js +0 -1
- package/web-dist/assets/move-IF9eRakj.js +0 -1
- package/web-dist/assets/narrat-DRg8JJMk.js +0 -1
- package/web-dist/assets/nextflow-C-mBbutL.js +0 -1
- package/web-dist/assets/nextflow-groovy-vE_lwT2v.js +0 -1
- package/web-dist/assets/nginx-BpAMiNFr.js +0 -1
- package/web-dist/assets/night-owl-C39BiMTA.js +0 -1
- package/web-dist/assets/night-owl-light-CMTm3GFP.js +0 -1
- package/web-dist/assets/nim-BIad80T-.js +0 -1
- package/web-dist/assets/nix-CwoSXNpI.js +0 -1
- package/web-dist/assets/nord-Ddv68eIx.js +0 -1
- package/web-dist/assets/nushell-Cz2AlsmD.js +0 -1
- package/web-dist/assets/objective-c-DXmwc3jG.js +0 -1
- package/web-dist/assets/objective-cpp-CLxacb5B.js +0 -1
- package/web-dist/assets/ocaml-C0hk2d4L.js +0 -1
- package/web-dist/assets/odin-BBf5iR-q.js +0 -1
- package/web-dist/assets/one-dark-pro-DVMEJ2y_.js +0 -1
- package/web-dist/assets/one-light-C3Wv6jpd.js +0 -1
- package/web-dist/assets/openscad-C4EeE6gA.js +0 -1
- package/web-dist/assets/pascal-D93ZcfNL.js +0 -1
- package/web-dist/assets/perl-B9cMNwum.js +0 -1
- package/web-dist/assets/pkl-u5AG7uiY.js +0 -1
- package/web-dist/assets/plastic-3e1v2bzS.js +0 -1
- package/web-dist/assets/plsql-ChMvpjG-.js +0 -1
- package/web-dist/assets/po-BTJTHyun.js +0 -1
- package/web-dist/assets/poimandres-CS3Unz2-.js +0 -1
- package/web-dist/assets/polar-C0HS_06l.js +0 -1
- package/web-dist/assets/postcss-CXtECtnM.js +0 -1
- package/web-dist/assets/powerquery-CEu0bR-o.js +0 -1
- package/web-dist/assets/powershell-Dpen1YoG.js +0 -1
- package/web-dist/assets/prisma-Dd19v3D-.js +0 -1
- package/web-dist/assets/prolog-CbFg5uaA.js +0 -1
- package/web-dist/assets/proto-C7zT0LnQ.js +0 -1
- package/web-dist/assets/pug-DKIMFp6K.js +0 -1
- package/web-dist/assets/puppet-BMWR74SV.js +0 -1
- package/web-dist/assets/purescript-CklMAg4u.js +0 -1
- package/web-dist/assets/qml-3beO22l8.js +0 -1
- package/web-dist/assets/qmldir-C8lEn-DE.js +0 -1
- package/web-dist/assets/qss-IeuSbFQv.js +0 -1
- package/web-dist/assets/r-Dspwwk_N.js +0 -1
- package/web-dist/assets/racket-BqYA7rlc.js +0 -1
- package/web-dist/assets/raku-DXvB9xmW.js +0 -1
- package/web-dist/assets/razor-BjBPvh-w.js +0 -1
- package/web-dist/assets/red-bN70gL4F.js +0 -1
- package/web-dist/assets/reg-C-SQnVFl.js +0 -1
- package/web-dist/assets/regexp-CDVJQ6XC.js +0 -1
- package/web-dist/assets/rel-C3B-1QV4.js +0 -1
- package/web-dist/assets/riscv-BM1_JUlF.js +0 -1
- package/web-dist/assets/ron-D8l8udqQ.js +0 -1
- package/web-dist/assets/rose-pine-dawn-DHQR4-dF.js +0 -1
- package/web-dist/assets/rose-pine-moon-D4_iv3hh.js +0 -1
- package/web-dist/assets/rose-pine-qdsjHGoJ.js +0 -1
- package/web-dist/assets/rosmsg-BJDFO7_C.js +0 -1
- package/web-dist/assets/rst-CpCqk9r5.js +0 -1
- package/web-dist/assets/ruby-DyJCeAvU.js +0 -1
- package/web-dist/assets/sas-DEy46yEz.js +0 -1
- package/web-dist/assets/sass-Cj5Yp3dK.js +0 -1
- package/web-dist/assets/scala-C151Ov-r.js +0 -1
- package/web-dist/assets/scheme-C98Dy4si.js +0 -1
- package/web-dist/assets/scss-D5BDwBP9.js +0 -1
- package/web-dist/assets/sdbl-DVxCFoDh.js +0 -1
- package/web-dist/assets/shaderlab-Dg9Lc6iA.js +0 -1
- package/web-dist/assets/shellsession-BADoaaVG.js +0 -1
- package/web-dist/assets/slack-dark-BthQWCQV.js +0 -1
- package/web-dist/assets/slack-ochin-DqwNpetd.js +0 -1
- package/web-dist/assets/smalltalk-BERRCDM3.js +0 -1
- package/web-dist/assets/snazzy-light-Bw305WKR.js +0 -1
- package/web-dist/assets/solarized-dark-DXbdFlpD.js +0 -1
- package/web-dist/assets/solarized-light-L9t79GZl.js +0 -1
- package/web-dist/assets/solidity-rGO070M0.js +0 -1
- package/web-dist/assets/soy-8wufbnw4.js +0 -1
- package/web-dist/assets/sparql-rVzFXLq3.js +0 -1
- package/web-dist/assets/splunk-BtCnVYZw.js +0 -1
- package/web-dist/assets/ssh-config-_ykCGR6B.js +0 -1
- package/web-dist/assets/stata-DI20mbqo.js +0 -1
- package/web-dist/assets/stylus-BEDo0Tqx.js +0 -1
- package/web-dist/assets/surrealql-Bq5Q-fJD.js +0 -1
- package/web-dist/assets/svelte-Cy7k_4gC.js +0 -1
- package/web-dist/assets/swift-D82vCrfD.js +0 -1
- package/web-dist/assets/synthwave-84-CbfX1IO0.js +0 -1
- package/web-dist/assets/system-verilog-CnnmHF94.js +0 -1
- package/web-dist/assets/systemd-4A_iFExJ.js +0 -1
- package/web-dist/assets/talonscript-CkByrt1z.js +0 -1
- package/web-dist/assets/tasl-QIJgUcNo.js +0 -1
- package/web-dist/assets/tcl-dwOrl1Do.js +0 -1
- package/web-dist/assets/templ-DhtptRzy.js +0 -1
- package/web-dist/assets/terraform-BETggiCN.js +0 -1
- package/web-dist/assets/tex-idrVyKtj.js +0 -1
- package/web-dist/assets/tokyo-night-hegEt444.js +0 -1
- package/web-dist/assets/ts-tags-D351s5mN.js +0 -1
- package/web-dist/assets/tsv-B_m7g4N7.js +0 -1
- package/web-dist/assets/turtle-BsS91CYL.js +0 -1
- package/web-dist/assets/twig-CW1WmMYd.js +0 -1
- package/web-dist/assets/typespec-CAFt9gP4.js +0 -1
- package/web-dist/assets/typst-DHCkPAjA.js +0 -1
- package/web-dist/assets/v-BcVCzyr7.js +0 -1
- package/web-dist/assets/vala-CsfeWuGM.js +0 -1
- package/web-dist/assets/vb-D17OF-Vu.js +0 -1
- package/web-dist/assets/verilog-BQ8w6xss.js +0 -1
- package/web-dist/assets/vesper-DRje8inN.js +0 -1
- package/web-dist/assets/vhdl-CeAyd5Ju.js +0 -1
- package/web-dist/assets/viml-CJc9bBzg.js +0 -1
- package/web-dist/assets/vitesse-black-Bkuqu6BP.js +0 -1
- package/web-dist/assets/vitesse-dark-D0r3Knsf.js +0 -1
- package/web-dist/assets/vitesse-light-CVO1_9PV.js +0 -1
- package/web-dist/assets/vue-D2xRrEX4.js +0 -1
- package/web-dist/assets/vue-html-AaS7Mt5G.js +0 -1
- package/web-dist/assets/vue-vine-BoDAl6tE.js +0 -1
- package/web-dist/assets/vyper-CDx5xZoG.js +0 -1
- package/web-dist/assets/wasm-CG6Dc4jp.js +0 -1
- package/web-dist/assets/wasm-MzD3tlZU.js +0 -1
- package/web-dist/assets/wenyan-BV7otONQ.js +0 -1
- package/web-dist/assets/wgsl-Dx-B1_4e.js +0 -1
- package/web-dist/assets/wikitext-BhOHFoWU.js +0 -1
- package/web-dist/assets/wit-5i3qLPDT.js +0 -1
- package/web-dist/assets/wolfram-lXgVvXCa.js +0 -1
- package/web-dist/assets/xsl-CtQFsRM5.js +0 -1
- package/web-dist/assets/zenscript-DVFEvuxE.js +0 -1
- package/web-dist/assets/zig-VOosw3JB.js +0 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ServerLock } from './lock.js';
|
|
2
|
+
|
|
3
|
+
type ResetAdminPasswordResult =
|
|
4
|
+
/** Refused: a live server owns this data root (stop it first — web.db is single-writer). */
|
|
5
|
+
{
|
|
6
|
+
outcome: "server_running";
|
|
7
|
+
lock: ServerLock;
|
|
8
|
+
}
|
|
9
|
+
/** Nothing to reset: the root has no Web database (the server has never run here). */
|
|
10
|
+
| {
|
|
11
|
+
outcome: "no_database";
|
|
12
|
+
dbPath: string;
|
|
13
|
+
}
|
|
14
|
+
/** Nothing to reset: the database exists but the admin was never seeded. */
|
|
15
|
+
| {
|
|
16
|
+
outcome: "no_admin";
|
|
17
|
+
} | {
|
|
18
|
+
outcome: "reset";
|
|
19
|
+
password: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Resets the built-in admin to a fresh initial password. `dbPath` defaults to the
|
|
23
|
+
* root's `web.db`; callers honoring PENGUIN_WEB_DB pass the resolved path (the
|
|
24
|
+
* plaintext reminder file always lives in `root`, matching the server's own layout).
|
|
25
|
+
*/
|
|
26
|
+
declare function resetAdminPassword(root: string, dbPath?: string): Promise<ResetAdminPasswordResult>;
|
|
27
|
+
|
|
28
|
+
export { type ResetAdminPasswordResult, resetAdminPassword };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ADMIN_USER_ID,
|
|
3
|
+
AuthSessionsRepo,
|
|
4
|
+
UsersRepo,
|
|
5
|
+
generateInitialAdminPassword,
|
|
6
|
+
hashPassword,
|
|
7
|
+
openDatabase
|
|
8
|
+
} from "./chunk-3QINBW3W.js";
|
|
9
|
+
import {
|
|
10
|
+
liveServerLock
|
|
11
|
+
} from "./chunk-OMBFPEGQ.js";
|
|
12
|
+
import {
|
|
13
|
+
storeInitialAdminPassword
|
|
14
|
+
} from "./chunk-UUJCF46V.js";
|
|
15
|
+
|
|
16
|
+
// src/reset-admin-password.ts
|
|
17
|
+
import fs from "fs";
|
|
18
|
+
import path from "path";
|
|
19
|
+
async function resetAdminPassword(root, dbPath = path.join(root, "web.db")) {
|
|
20
|
+
const lock = await liveServerLock(root);
|
|
21
|
+
if (lock !== null) return { outcome: "server_running", lock };
|
|
22
|
+
if (!fs.existsSync(dbPath)) return { outcome: "no_database", dbPath };
|
|
23
|
+
const db = openDatabase(dbPath);
|
|
24
|
+
try {
|
|
25
|
+
const users = new UsersRepo(db);
|
|
26
|
+
if (users.findById(ADMIN_USER_ID) === null) return { outcome: "no_admin" };
|
|
27
|
+
const password = generateInitialAdminPassword();
|
|
28
|
+
users.updatePassword(ADMIN_USER_ID, await hashPassword(password), true);
|
|
29
|
+
new AuthSessionsRepo(db).deleteByUser(ADMIN_USER_ID);
|
|
30
|
+
storeInitialAdminPassword(root, password);
|
|
31
|
+
return { outcome: "reset", password };
|
|
32
|
+
} finally {
|
|
33
|
+
db.close();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
resetAdminPassword
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=reset-admin-password.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/reset-admin-password.ts"],"sourcesContent":["/**\n * Offline admin-password reset — the rescue path when the Web admin password is\n * forgotten (`penguin server reset-admin-password`).\n *\n * The admin can reset every OTHER user from the user-management page, but nobody can\n * reset the admin itself once its password is lost: the plaintext file in the data root\n * only survives while the password is still the initial one. This module closes that\n * gap from the machine that owns the data root: it re-arms the whole initial-password\n * machinery — a fresh `penguin-<4 digits>` password flagged password_is_initial, the\n * plaintext stored via initial-password.ts so every server start re-prints the framed\n * reminder until the password is changed, and all of the admin's login sessions\n * cleared (matching an admin-initiated reset).\n *\n * web.db is single-process / single-writer (see db/database.ts and lock.ts), so the\n * reset refuses while a live server owns the root: the caller tells the user to stop it\n * first. Requiring local filesystem access is the authorization model — whoever can run\n * this already owns the SQLite database sitting next to the file it writes.\n *\n * Published as `@prismshadow/penguin-server/reset-admin-password` (side-effect-free,\n * like ./lock) so the CLI can run the reset without importing the package entry, which\n * starts listening.\n */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { hashPassword } from \"./auth/password.js\";\nimport { ADMIN_USER_ID, generateInitialAdminPassword } from \"./auth/service.js\";\nimport { openDatabase } from \"./db/database.js\";\nimport { AuthSessionsRepo } from \"./db/repos/auth-sessions.js\";\nimport { UsersRepo } from \"./db/repos/users.js\";\nimport { storeInitialAdminPassword } from \"./initial-password.js\";\nimport { liveServerLock } from \"./lock.js\";\nimport type { ServerLock } from \"./lock.js\";\n\nexport type ResetAdminPasswordResult =\n /** Refused: a live server owns this data root (stop it first — web.db is single-writer). */\n | { outcome: \"server_running\"; lock: ServerLock }\n /** Nothing to reset: the root has no Web database (the server has never run here). */\n | { outcome: \"no_database\"; dbPath: string }\n /** Nothing to reset: the database exists but the admin was never seeded. */\n | { outcome: \"no_admin\" }\n | { outcome: \"reset\"; password: string };\n\n/**\n * Resets the built-in admin to a fresh initial password. `dbPath` defaults to the\n * root's `web.db`; callers honoring PENGUIN_WEB_DB pass the resolved path (the\n * plaintext reminder file always lives in `root`, matching the server's own layout).\n */\nexport async function resetAdminPassword(\n root: string,\n dbPath: string = path.join(root, \"web.db\"),\n): Promise<ResetAdminPasswordResult> {\n const lock = await liveServerLock(root);\n if (lock !== null) return { outcome: \"server_running\", lock };\n // Existence check before openDatabase, which would otherwise CREATE an empty database\n // (and the root directory) on a root the server has never used.\n if (!fs.existsSync(dbPath)) return { outcome: \"no_database\", dbPath };\n const db = openDatabase(dbPath);\n try {\n const users = new UsersRepo(db);\n if (users.findById(ADMIN_USER_ID) === null) return { outcome: \"no_admin\" };\n const password = generateInitialAdminPassword();\n users.updatePassword(ADMIN_USER_ID, await hashPassword(password), true);\n new AuthSessionsRepo(db).deleteByUser(ADMIN_USER_ID);\n storeInitialAdminPassword(root, password);\n return { outcome: \"reset\", password };\n } finally {\n db.close();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAsBA,OAAO,QAAQ;AACf,OAAO,UAAU;AAwBjB,eAAsB,mBACpB,MACA,SAAiB,KAAK,KAAK,MAAM,QAAQ,GACN;AACnC,QAAM,OAAO,MAAM,eAAe,IAAI;AACtC,MAAI,SAAS,KAAM,QAAO,EAAE,SAAS,kBAAkB,KAAK;AAG5D,MAAI,CAAC,GAAG,WAAW,MAAM,EAAG,QAAO,EAAE,SAAS,eAAe,OAAO;AACpE,QAAM,KAAK,aAAa,MAAM;AAC9B,MAAI;AACF,UAAM,QAAQ,IAAI,UAAU,EAAE;AAC9B,QAAI,MAAM,SAAS,aAAa,MAAM,KAAM,QAAO,EAAE,SAAS,WAAW;AACzE,UAAM,WAAW,6BAA6B;AAC9C,UAAM,eAAe,eAAe,MAAM,aAAa,QAAQ,GAAG,IAAI;AACtE,QAAI,iBAAiB,EAAE,EAAE,aAAa,aAAa;AACnD,8BAA0B,MAAM,QAAQ;AACxC,WAAO,EAAE,SAAS,SAAS,SAAS;AAAA,EACtC,UAAE;AACA,OAAG,MAAM;AAAA,EACX;AACF;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prismshadow/penguin-server",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "PenguinHarness web server: multi-user authentication and authorization, Session execution with SSE streaming, and usage accounting, built on @prismshadow/penguin-core.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -25,6 +25,14 @@
|
|
|
25
25
|
"./initial-password": {
|
|
26
26
|
"types": "./dist/initial-password.d.ts",
|
|
27
27
|
"import": "./dist/initial-password.js"
|
|
28
|
+
},
|
|
29
|
+
"./reset-admin-password": {
|
|
30
|
+
"types": "./dist/reset-admin-password.d.ts",
|
|
31
|
+
"import": "./dist/reset-admin-password.js"
|
|
32
|
+
},
|
|
33
|
+
"./hmr/manifest": {
|
|
34
|
+
"types": "./dist/hmr/manifest.d.ts",
|
|
35
|
+
"import": "./dist/hmr/manifest.js"
|
|
28
36
|
}
|
|
29
37
|
},
|
|
30
38
|
"main": "./dist/index.js",
|
|
@@ -41,8 +49,8 @@
|
|
|
41
49
|
"tar": "^7.5.21",
|
|
42
50
|
"undici": "^7.29.0",
|
|
43
51
|
"yaml": "^2.5.0",
|
|
44
|
-
"@prismshadow/penguin-core": "0.2.
|
|
45
|
-
"@prismshadow/penguin-skills": "0.2.
|
|
52
|
+
"@prismshadow/penguin-core": "0.2.3",
|
|
53
|
+
"@prismshadow/penguin-skills": "0.2.3"
|
|
46
54
|
},
|
|
47
55
|
"devDependencies": {
|
|
48
56
|
"@types/node": "^24.0.0",
|