From bf36cb315962e2f252a59cc604f1f39e46c8261b Mon Sep 17 00:00:00 2001 From: TheOnlyMace <0815cracky@gmail.com> Date: Sun, 5 Jul 2026 14:43:52 +0200 Subject: [PATCH] Add '@hexahost/contracts' dependency in package.json, export emailSchema from contracts, and update bootstrap-admin script to validate email input. Update README with example email. Enhance pnpm-lock.yaml for workspace integration. --- .turbo/cache/083c8105a3916fd9-manifest.json | 2 +- .turbo/cache/1b4ddb8b5e9b564a-manifest.json | 1 + .turbo/cache/1b4ddb8b5e9b564a-meta.json | 1 + .turbo/cache/1b4ddb8b5e9b564a.tar.zst | Bin 0 -> 1928 bytes .turbo/cache/8de6070230e6cb7f-manifest.json | 1 + .turbo/cache/8de6070230e6cb7f-meta.json | 1 + .turbo/cache/8de6070230e6cb7f.tar.zst | Bin 0 -> 9513 bytes README.md | 2 +- packages/contracts/src/auth.ts | 2 +- packages/contracts/src/index.ts | 1 + packages/database/package.json | 1 + packages/database/src/cli/bootstrap-admin.ts | 14 +++++++++++++- pnpm-lock.yaml | 3 +++ 13 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 .turbo/cache/1b4ddb8b5e9b564a-manifest.json create mode 100644 .turbo/cache/1b4ddb8b5e9b564a-meta.json create mode 100644 .turbo/cache/1b4ddb8b5e9b564a.tar.zst create mode 100644 .turbo/cache/8de6070230e6cb7f-manifest.json create mode 100644 .turbo/cache/8de6070230e6cb7f-meta.json create mode 100644 .turbo/cache/8de6070230e6cb7f.tar.zst diff --git a/.turbo/cache/083c8105a3916fd9-manifest.json b/.turbo/cache/083c8105a3916fd9-manifest.json index bccbee3..7d44242 100644 --- a/.turbo/cache/083c8105a3916fd9-manifest.json +++ b/.turbo/cache/083c8105a3916fd9-manifest.json @@ -1 +1 @@ -{"files":{"packages/auth/dist/username.d.ts":{"size":442,"mtime_nanos":1783255151494048909,"mode":420,"is_dir":false},"packages/auth/dist/recovery-codes.js":{"size":1089,"mtime_nanos":1783255151493710470,"mode":420,"is_dir":false},"packages/auth/dist/tokens.d.ts.map":{"size":281,"mtime_nanos":1783255151493885819,"mode":420,"is_dir":false},"packages/auth/dist/username.d.ts.map":{"size":430,"mtime_nanos":1783255151494073119,"mode":420,"is_dir":false},"packages/auth/dist/password.d.ts":{"size":200,"mtime_nanos":1783255151493536190,"mode":420,"is_dir":false},"packages/auth/dist/recovery-codes.d.ts.map":{"size":306,"mtime_nanos":1783255151493686290,"mode":420,"is_dir":false},"packages/auth/dist/password.d.ts.map":{"size":266,"mtime_nanos":1783255151493572620,"mode":420,"is_dir":false},"packages/auth/.turbo/turbo-build.log":{"size":102,"mtime_nanos":1783255052127378550,"mode":420,"is_dir":false},"packages/auth/dist/session.js":{"size":672,"mtime_nanos":1783255151493811820,"mode":420,"is_dir":false},"packages/auth/dist/totp.d.ts.map":{"size":303,"mtime_nanos":1783255151493978659,"mode":420,"is_dir":false},"packages/auth/dist/index.js.map":{"size":824,"mtime_nanos":1783255151493485050,"mode":420,"is_dir":false},"packages/auth/dist/totp.js.map":{"size":569,"mtime_nanos":1783255151494024989,"mode":420,"is_dir":false},"packages/auth/dist/username.js":{"size":2787,"mtime_nanos":1783255151494096559,"mode":420,"is_dir":false},"packages/auth/dist/session.d.ts.map":{"size":300,"mtime_nanos":1783255151493784580,"mode":420,"is_dir":false},"packages/auth/dist/index.d.ts":{"size":1570,"mtime_nanos":1783255151493314190,"mode":420,"is_dir":false},"packages/auth/dist/index.d.ts.map":{"size":1443,"mtime_nanos":1783255151493364820,"mode":420,"is_dir":false},"packages/auth/dist/tokens.js.map":{"size":760,"mtime_nanos":1783255151493932809,"mode":420,"is_dir":false},"packages/auth/dist/totp.d.ts":{"size":269,"mtime_nanos":1783255151493955819,"mode":420,"is_dir":false},"packages/auth/dist/index.js":{"size":4135,"mtime_nanos":1783255151493407900,"mode":420,"is_dir":false},"packages/auth/dist/recovery-codes.js.map":{"size":949,"mtime_nanos":1783255151493735800,"mode":420,"is_dir":false},"packages/auth/dist/tokens.d.ts":{"size":244,"mtime_nanos":1783255151493861049,"mode":420,"is_dir":false},"packages/auth/dist/totp.js":{"size":683,"mtime_nanos":1783255151494002079,"mode":420,"is_dir":false},"packages/auth/dist/username.js.map":{"size":2294,"mtime_nanos":1783255151494119969,"mode":420,"is_dir":false},"packages/auth/dist/tokens.js":{"size":864,"mtime_nanos":1783255151493909599,"mode":420,"is_dir":false},"packages/auth/dist/session.js.map":{"size":493,"mtime_nanos":1783255151493836729,"mode":420,"is_dir":false},"packages/auth/dist/password.js":{"size":482,"mtime_nanos":1783255151493603670,"mode":420,"is_dir":false},"packages/auth/dist/password.js.map":{"size":404,"mtime_nanos":1783255151493633310,"mode":420,"is_dir":false},"packages/auth/dist/recovery-codes.d.ts":{"size":264,"mtime_nanos":1783255151493659970,"mode":420,"is_dir":false},"packages/auth/dist/session.d.ts":{"size":334,"mtime_nanos":1783255151493759480,"mode":420,"is_dir":false}},"order":["packages/auth/.turbo/turbo-build.log","packages/auth/dist/index.d.ts","packages/auth/dist/index.d.ts.map","packages/auth/dist/index.js","packages/auth/dist/index.js.map","packages/auth/dist/password.d.ts","packages/auth/dist/password.d.ts.map","packages/auth/dist/password.js","packages/auth/dist/password.js.map","packages/auth/dist/recovery-codes.d.ts","packages/auth/dist/recovery-codes.d.ts.map","packages/auth/dist/recovery-codes.js","packages/auth/dist/recovery-codes.js.map","packages/auth/dist/session.d.ts","packages/auth/dist/session.d.ts.map","packages/auth/dist/session.js","packages/auth/dist/session.js.map","packages/auth/dist/tokens.d.ts","packages/auth/dist/tokens.d.ts.map","packages/auth/dist/tokens.js","packages/auth/dist/tokens.js.map","packages/auth/dist/totp.d.ts","packages/auth/dist/totp.d.ts.map","packages/auth/dist/totp.js","packages/auth/dist/totp.js.map","packages/auth/dist/username.d.ts","packages/auth/dist/username.d.ts.map","packages/auth/dist/username.js","packages/auth/dist/username.js.map"]} \ No newline at end of file +{"files":{"packages/auth/.turbo/turbo-build.log":{"size":102,"mtime_nanos":1783255052127378550,"mode":420,"is_dir":false},"packages/auth/dist/password.d.ts":{"size":200,"mtime_nanos":1783255318234684822,"mode":420,"is_dir":false},"packages/auth/dist/totp.js":{"size":683,"mtime_nanos":1783255318235066252,"mode":420,"is_dir":false},"packages/auth/dist/totp.d.ts":{"size":269,"mtime_nanos":1783255318235033232,"mode":420,"is_dir":false},"packages/auth/dist/session.js":{"size":672,"mtime_nanos":1783255318234925202,"mode":420,"is_dir":false},"packages/auth/dist/recovery-codes.js.map":{"size":949,"mtime_nanos":1783255318234865402,"mode":420,"is_dir":false},"packages/auth/dist/index.d.ts":{"size":1570,"mtime_nanos":1783255318234480642,"mode":420,"is_dir":false},"packages/auth/dist/recovery-codes.d.ts":{"size":264,"mtime_nanos":1783255318234800762,"mode":420,"is_dir":false},"packages/auth/dist/username.js":{"size":2787,"mtime_nanos":1783255318235144382,"mode":420,"is_dir":false},"packages/auth/dist/tokens.js.map":{"size":760,"mtime_nanos":1783255318235017152,"mode":420,"is_dir":false},"packages/auth/dist/username.js.map":{"size":2294,"mtime_nanos":1783255318235160872,"mode":420,"is_dir":false},"packages/auth/dist/password.d.ts.map":{"size":266,"mtime_nanos":1783255318234717722,"mode":420,"is_dir":false},"packages/auth/dist/index.js.map":{"size":824,"mtime_nanos":1783255318234638252,"mode":420,"is_dir":false},"packages/auth/dist/session.js.map":{"size":493,"mtime_nanos":1783255318234944292,"mode":420,"is_dir":false},"packages/auth/dist/index.d.ts.map":{"size":1443,"mtime_nanos":1783255318234518132,"mode":420,"is_dir":false},"packages/auth/dist/session.d.ts":{"size":334,"mtime_nanos":1783255318234883722,"mode":420,"is_dir":false},"packages/auth/dist/password.js":{"size":482,"mtime_nanos":1783255318234755462,"mode":420,"is_dir":false},"packages/auth/dist/recovery-codes.js":{"size":1089,"mtime_nanos":1783255318234843272,"mode":420,"is_dir":false},"packages/auth/dist/recovery-codes.d.ts.map":{"size":306,"mtime_nanos":1783255318234822282,"mode":420,"is_dir":false},"packages/auth/dist/username.d.ts.map":{"size":430,"mtime_nanos":1783255318235123102,"mode":420,"is_dir":false},"packages/auth/dist/password.js.map":{"size":404,"mtime_nanos":1783255318234775572,"mode":420,"is_dir":false},"packages/auth/dist/tokens.d.ts.map":{"size":281,"mtime_nanos":1783255318234984402,"mode":420,"is_dir":false},"packages/auth/dist/username.d.ts":{"size":442,"mtime_nanos":1783255318235106382,"mode":420,"is_dir":false},"packages/auth/dist/index.js":{"size":4135,"mtime_nanos":1783255318234572542,"mode":420,"is_dir":false},"packages/auth/dist/totp.d.ts.map":{"size":303,"mtime_nanos":1783255318235050102,"mode":420,"is_dir":false},"packages/auth/dist/tokens.js":{"size":864,"mtime_nanos":1783255318235000782,"mode":420,"is_dir":false},"packages/auth/dist/session.d.ts.map":{"size":300,"mtime_nanos":1783255318234901542,"mode":420,"is_dir":false},"packages/auth/dist/totp.js.map":{"size":569,"mtime_nanos":1783255318235085572,"mode":420,"is_dir":false},"packages/auth/dist/tokens.d.ts":{"size":244,"mtime_nanos":1783255318234964842,"mode":420,"is_dir":false}},"order":["packages/auth/.turbo/turbo-build.log","packages/auth/dist/index.d.ts","packages/auth/dist/index.d.ts.map","packages/auth/dist/index.js","packages/auth/dist/index.js.map","packages/auth/dist/password.d.ts","packages/auth/dist/password.d.ts.map","packages/auth/dist/password.js","packages/auth/dist/password.js.map","packages/auth/dist/recovery-codes.d.ts","packages/auth/dist/recovery-codes.d.ts.map","packages/auth/dist/recovery-codes.js","packages/auth/dist/recovery-codes.js.map","packages/auth/dist/session.d.ts","packages/auth/dist/session.d.ts.map","packages/auth/dist/session.js","packages/auth/dist/session.js.map","packages/auth/dist/tokens.d.ts","packages/auth/dist/tokens.d.ts.map","packages/auth/dist/tokens.js","packages/auth/dist/tokens.js.map","packages/auth/dist/totp.d.ts","packages/auth/dist/totp.d.ts.map","packages/auth/dist/totp.js","packages/auth/dist/totp.js.map","packages/auth/dist/username.d.ts","packages/auth/dist/username.d.ts.map","packages/auth/dist/username.js","packages/auth/dist/username.js.map"]} \ No newline at end of file diff --git a/.turbo/cache/1b4ddb8b5e9b564a-manifest.json b/.turbo/cache/1b4ddb8b5e9b564a-manifest.json new file mode 100644 index 0000000..28ba932 --- /dev/null +++ b/.turbo/cache/1b4ddb8b5e9b564a-manifest.json @@ -0,0 +1 @@ +{"files":{"packages/database/.turbo/turbo-build.log":{"size":549,"mtime_nanos":1783255321226890055,"mode":420,"is_dir":false},"packages/database/dist":{"size":0,"mtime_nanos":0,"mode":0,"is_dir":true},"packages/database/dist/index.d.ts":{"size":991,"mtime_nanos":1783255321208338929,"mode":420,"is_dir":false},"packages/database/dist/index.d.ts.map":{"size":733,"mtime_nanos":1783255321207890090,"mode":420,"is_dir":false},"packages/database/dist/index.js":{"size":962,"mtime_nanos":1783255321192311503,"mode":420,"is_dir":false},"packages/database/dist/index.js.map":{"size":617,"mtime_nanos":1783255321191890119,"mode":420,"is_dir":false}},"order":["packages/database/.turbo/turbo-build.log","packages/database/dist","packages/database/dist/index.d.ts","packages/database/dist/index.d.ts.map","packages/database/dist/index.js","packages/database/dist/index.js.map"]} \ No newline at end of file diff --git a/.turbo/cache/1b4ddb8b5e9b564a-meta.json b/.turbo/cache/1b4ddb8b5e9b564a-meta.json new file mode 100644 index 0000000..c6cb271 --- /dev/null +++ b/.turbo/cache/1b4ddb8b5e9b564a-meta.json @@ -0,0 +1 @@ +{"hash":"1b4ddb8b5e9b564a","duration":2992,"sha":"2126e7bebf9ff0796ac77f8548cba399f45e759a","dirty_hash":null} \ No newline at end of file diff --git a/.turbo/cache/1b4ddb8b5e9b564a.tar.zst b/.turbo/cache/1b4ddb8b5e9b564a.tar.zst new file mode 100644 index 0000000000000000000000000000000000000000..4e9fa8498bd10584541c61a5396790ede0e417ed GIT binary patch literal 1928 zcmV;32Y2`=wJ-euSp7Qynq%M+JwS;#2g5K7!!QgFOPAroT1EXWMbH+xf*`*;NeEDk zECuud{UK`Q*KWx~t;wWE|FMZAOs31+cZM6ELjfKE7Xcjs07i1Nx#??~_vl*mf#0mw zAlvxsq#fZwEj#0nqw8$0&X6Xx9^L;uy3XD{de=A-R#k)^Oe~nNw}L_CS7M&8x)EFWr4`vyc&LQls6!>0T5N^RgbFh z({Hog#&5P#71cJkghCORP!A%8&h;may={5|g$j~HRh_+{-hPvow(LHn;R#97aBcwt z`m?-WpKICSdA&9uRoiE2{7!BfGPVii$0w++#rKQV=lb2(VKvojva7zcp{m=WEXsn& z*oNfChalR3WOZMe@n~*LDn2f8{`mdzgZy&25&+YSuT%9?;r~8aYo`#&H2>yOqK7xid z`wwHzq*JR}9eL`Dviu#|w6NII@V(CEK3C3bQ*__cQD+3!x=_Y*5?^RCKczAw&+Tt) zIJ&uJ|NTdi<$v;(pMb%3t@ahTYPQX{r&MNKISn^ysdur_Ycm=?{k9Kjp1(HZuW0Cf z9h$@@uJT%Zmf2$|_4}gxp6}%5sjcX)1!YMm8vbVE=)TBmU*TnIksp7>c5MWVNZm zjr#blPRqgr#i25>EX&2JSXPzs+$u?u4U`6N<{MK(%rMILJ$omkP?IIFj|?OF2CJPr)>%Z)pvT>FJ=`%5 zh;dAJY{Ci(cM1r4_y0uCpmdj*gpoTof|zIBF$*!GXYj)P0%D=)*@Fid?Qq9BAeN(N z5X0^mh7F=;FvC3qZqYNSxoc2C^bB&`IS?aia&*6xLh{NP!p-?>8 zQJIK}3$9MjlM=7p&*BbHRnjG4_$>cwT|bZk%w5m)lc3j7l4*41{Y+YYH*@`NH8Ff` zhy$1nfrx(L|@=VcW^}--NCiMeSs!=28vE`MaMiiS9FgU zNAwK^%*aHUU%-v~Mw2rKh+U$^!OYz+ckj6S2E%x9_e+D_;|OXrmHQPl*Kp7^5AN4> zaX45i4-?CTBSg9+3{r@6c`b>2o4sD7GZ_G_5y4=PZDg7b1BM1o>5_y<5JF=#BG=yg zk%p0aWrRq>hy~RdX&8w>=mXu|5$^l^7U@hT(;AV83?qx!*mNQy5JdGUj9;_YYYb;; zcQ*)wLxiv0-O_;rc!n&lML^}pQqCcyuX?}yw?SIMfXUA_q#t>|`|3-kzw`6>+nJth z^pzs%%Cyznw4%=RL}waHLi)d(8}lEPq6TR=N#NfIfh4FQol?vg8j=xFkR(Yukp#pz zry(=)0TMtEu_OzkkaCJBM2L_OfryBR1TrF#hzv<`3~`_ldEE52K(BWoNE`47nr_;& zs8eDGAPN^cOxX6SWLtENTY*6sC_WfVn9r#PZeq`adE40yUq8WrNQfCRcNiiyncjESnBNwC0{hLww>)i1}h%OKw9negn3!dU<&t-1qSVV3NK?z9*K!!I*-Qj zE@|iklAw*t-ed+N(KL?TDjeACOxLB$*2CGlDP>3OrvIF^+$Z-?WQ{D*jgj&-RwjIL zh!u3xulg5SGw5g46@;j({sS>wu5>O@0H#LlRIKzYt1MVn0-ha^kpe54 zIZ|H(l4#;B@!cHIS(^6({1jCO(Hdt&p-=q-55+UIVUc^p$c2Se?obN?OS#Zk&oAHr z8iQyw1A?7DAj2>;w@I?uI6UtTq0z6(-kWX1gOosVv{BcY@$+tLmaowqA zOKL!eZFmu_&LAadfeA{DI2`^Pd{dvEO`QT2kOBbNIRGtbq-pGe3r_Qi*V9lK39g%W O5Hfcwq5=M1)`K4cSh6wz literal 0 HcmV?d00001 diff --git a/.turbo/cache/8de6070230e6cb7f-manifest.json b/.turbo/cache/8de6070230e6cb7f-manifest.json new file mode 100644 index 0000000..7a0c3ba --- /dev/null +++ b/.turbo/cache/8de6070230e6cb7f-manifest.json @@ -0,0 +1 @@ +{"files":{"packages/dns/dist/slug.js.map":{"size":1132,"mtime_nanos":1783255322378871763,"mode":420,"is_dir":false},"packages/dns/dist/sync.d.ts.map":{"size":782,"mtime_nanos":1783255322414887899,"mode":420,"is_dir":false},"packages/dns/dist/providers/types.d.ts.map":{"size":676,"mtime_nanos":1783255322384887953,"mode":420,"is_dir":false},"packages/dns/dist/providers/local.js":{"size":432,"mtime_nanos":1783255322388768830,"mode":420,"is_dir":false},"packages/dns/dist/providers/index.js.map":{"size":513,"mtime_nanos":1783255322403887919,"mode":420,"is_dir":false},"packages/dns/.turbo/turbo-build.log":{"size":96,"mtime_nanos":1783255322435887861,"mode":420,"is_dir":false},"packages/dns/dist/index.js.map":{"size":423,"mtime_nanos":1783255322416887895,"mode":420,"is_dir":false},"packages/dns/dist/providers/types.d.ts":{"size":563,"mtime_nanos":1783255322385701971,"mode":420,"is_dir":false},"packages/dns/dist":{"size":0,"mtime_nanos":0,"mode":0,"is_dir":true},"packages/dns/dist/slug.d.ts":{"size":221,"mtime_nanos":1783255322381887959,"mode":420,"is_dir":false},"packages/dns/dist/providers/local.d.ts.map":{"size":379,"mtime_nanos":1783255322389887944,"mode":420,"is_dir":false},"packages/dns/dist/slug.test.d.ts.map":{"size":112,"mtime_nanos":1783255322418786243,"mode":420,"is_dir":false},"packages/dns/dist/index.d.ts":{"size":419,"mtime_nanos":1783255322417734733,"mode":420,"is_dir":false},"packages/dns/dist/providers/index.d.ts":{"size":318,"mtime_nanos":1783255322404887917,"mode":420,"is_dir":false},"packages/dns/dist/providers/types.js.map":{"size":319,"mtime_nanos":1783255322382887957,"mode":420,"is_dir":false},"packages/dns/dist/providers/local.js.map":{"size":287,"mtime_nanos":1783255322388768830,"mode":420,"is_dir":false},"packages/dns/dist/providers/rfc2136.js.map":{"size":3122,"mtime_nanos":1783255322398887928,"mode":420,"is_dir":false},"packages/dns/dist/slug.test.js.map":{"size":763,"mtime_nanos":1783255322418743643,"mode":420,"is_dir":false},"packages/dns/dist/providers/local.d.ts":{"size":329,"mtime_nanos":1783255322389887944,"mode":420,"is_dir":false},"packages/dns/dist/providers/rfc2136.d.ts":{"size":363,"mtime_nanos":1783255322399887926,"mode":420,"is_dir":false},"packages/dns/dist/sync.js.map":{"size":5357,"mtime_nanos":1783255322411887905,"mode":420,"is_dir":false},"packages/dns/dist/providers/rfc2136.d.ts.map":{"size":407,"mtime_nanos":1783255322399887926,"mode":420,"is_dir":false},"packages/dns/dist/slug.js":{"size":1086,"mtime_nanos":1783255322378986443,"mode":420,"is_dir":false},"packages/dns/dist/providers/index.js":{"size":928,"mtime_nanos":1783255322404521026,"mode":420,"is_dir":false},"packages/dns/dist/index.js":{"size":2177,"mtime_nanos":1783255322417387574,"mode":420,"is_dir":false},"packages/dns/dist/index.d.ts.map":{"size":392,"mtime_nanos":1783255322417734733,"mode":420,"is_dir":false},"packages/dns/dist/sync.d.ts":{"size":774,"mtime_nanos":1783255322415276064,"mode":420,"is_dir":false},"packages/dns/dist/providers":{"size":0,"mtime_nanos":0,"mode":0,"is_dir":true},"packages/dns/dist/providers/index.d.ts.map":{"size":336,"mtime_nanos":1783255322404887917,"mode":420,"is_dir":false},"packages/dns/dist/slug.d.ts.map":{"size":260,"mtime_nanos":1783255322381887959,"mode":420,"is_dir":false},"packages/dns/dist/slug.test.d.ts":{"size":50,"mtime_nanos":1783255322418786243,"mode":420,"is_dir":false},"packages/dns/dist/slug.test.js":{"size":921,"mtime_nanos":1783255322418786243,"mode":420,"is_dir":false},"packages/dns/dist/providers/rfc2136.js":{"size":3012,"mtime_nanos":1783255322399634098,"mode":420,"is_dir":false},"packages/dns/dist/sync.js":{"size":5955,"mtime_nanos":1783255322412413185,"mode":420,"is_dir":false},"packages/dns/dist/providers/types.js":{"size":333,"mtime_nanos":1783255322382887957,"mode":420,"is_dir":false}},"order":["packages/dns/.turbo/turbo-build.log","packages/dns/dist","packages/dns/dist/index.d.ts","packages/dns/dist/index.d.ts.map","packages/dns/dist/index.js","packages/dns/dist/index.js.map","packages/dns/dist/providers","packages/dns/dist/providers/index.d.ts","packages/dns/dist/providers/index.d.ts.map","packages/dns/dist/providers/index.js","packages/dns/dist/providers/index.js.map","packages/dns/dist/providers/local.d.ts","packages/dns/dist/providers/local.d.ts.map","packages/dns/dist/providers/local.js","packages/dns/dist/providers/local.js.map","packages/dns/dist/providers/rfc2136.d.ts","packages/dns/dist/providers/rfc2136.d.ts.map","packages/dns/dist/providers/rfc2136.js","packages/dns/dist/providers/rfc2136.js.map","packages/dns/dist/providers/types.d.ts","packages/dns/dist/providers/types.d.ts.map","packages/dns/dist/providers/types.js","packages/dns/dist/providers/types.js.map","packages/dns/dist/slug.d.ts","packages/dns/dist/slug.d.ts.map","packages/dns/dist/slug.js","packages/dns/dist/slug.js.map","packages/dns/dist/slug.test.d.ts","packages/dns/dist/slug.test.d.ts.map","packages/dns/dist/slug.test.js","packages/dns/dist/slug.test.js.map","packages/dns/dist/sync.d.ts","packages/dns/dist/sync.d.ts.map","packages/dns/dist/sync.js","packages/dns/dist/sync.js.map"]} \ No newline at end of file diff --git a/.turbo/cache/8de6070230e6cb7f-meta.json b/.turbo/cache/8de6070230e6cb7f-meta.json new file mode 100644 index 0000000..ca96182 --- /dev/null +++ b/.turbo/cache/8de6070230e6cb7f-meta.json @@ -0,0 +1 @@ +{"hash":"8de6070230e6cb7f","duration":1207,"sha":"2126e7bebf9ff0796ac77f8548cba399f45e759a","dirty_hash":null} \ No newline at end of file diff --git a/.turbo/cache/8de6070230e6cb7f.tar.zst b/.turbo/cache/8de6070230e6cb7f.tar.zst new file mode 100644 index 0000000000000000000000000000000000000000..7d23115ebfe2b6f7671954e7c7fe3c46763704f3 GIT binary patch literal 9513 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 H{E_h=Xf7FJ literal 0 HcmV?d00001 diff --git a/README.md b/README.md index adb0365..a713237 100644 --- a/README.md +++ b/README.md @@ -137,7 +137,7 @@ pnpm db:migrate pnpm dev # Admin anlegen (keine Default-Zugangsdaten) -pnpm bootstrap:admin -- --email admin@localhost --password 'min-12-chars-here' +pnpm bootstrap:admin -- --email admin@example.com --password 'min-12-chars-here' ``` | Flow | URL | diff --git a/packages/contracts/src/auth.ts b/packages/contracts/src/auth.ts index 6981846..77bbe45 100644 --- a/packages/contracts/src/auth.ts +++ b/packages/contracts/src/auth.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -const emailSchema = z.string().email().max(320); +export const emailSchema = z.string().email().max(320); const passwordSchema = z.string().min(12).max(128); export const registerRequestSchema = z.object({ diff --git a/packages/contracts/src/index.ts b/packages/contracts/src/index.ts index 24800fb..90bcacf 100644 --- a/packages/contracts/src/index.ts +++ b/packages/contracts/src/index.ts @@ -23,6 +23,7 @@ export { } from './pagination'; export { + emailSchema, registerRequestSchema, loginRequestSchema, verifyEmailRequestSchema, diff --git a/packages/database/package.json b/packages/database/package.json index 34ca48c..dc95ce0 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -18,6 +18,7 @@ }, "devDependencies": { "@hexahost/auth": "workspace:*", + "@hexahost/contracts": "workspace:*", "@hexahost/typescript-config": "workspace:*", "@types/node": "^22.10.2", "prisma": "^6.3.1", diff --git a/packages/database/src/cli/bootstrap-admin.ts b/packages/database/src/cli/bootstrap-admin.ts index 0ced4b7..cb1ab32 100644 --- a/packages/database/src/cli/bootstrap-admin.ts +++ b/packages/database/src/cli/bootstrap-admin.ts @@ -1,4 +1,5 @@ import { PrismaClient } from '@prisma/client'; +import { emailSchema } from '@hexahost/contracts'; import { generateUsernameFromEmail, @@ -6,6 +7,8 @@ import { validateUsername, } from '@hexahost/auth'; +const emailSchema = z.string().email().max(320); + const PLATFORM_ROLES = [ 'USER', 'SUPPORT', @@ -48,8 +51,17 @@ function parseArgs(argv: string[]): CliArgs { process.exit(1); } + const email = args['email'].trim().toLowerCase(); + const emailResult = emailSchema.safeParse(email); + if (!emailResult.success) { + console.error( + `Invalid email "${email}". Use a valid address (e.g. admin@example.com).`, + ); + process.exit(1); + } + return { - email: args['email'].trim().toLowerCase(), + email, password: args['password'], username: args['username'], displayName: args['display-name'], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7701ade..b5b0776 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -318,6 +318,9 @@ importers: '@hexahost/auth': specifier: workspace:* version: link:../auth + '@hexahost/contracts': + specifier: workspace:* + version: link:../contracts '@hexahost/typescript-config': specifier: workspace:* version: link:../typescript-config