sa2kit 2.0.4 → 3.0.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 (347) hide show
  1. package/dist/{UniversalFileService-GsP6D3Rc.d.ts → UniversalFileService-CC4d3wkc.d.ts} +2 -2
  2. package/dist/{UniversalFileService-BpvbZitV.d.mts → UniversalFileService-CzAE_G4V.d.mts} +2 -2
  3. package/dist/auth/client/index.d.mts +8 -27
  4. package/dist/auth/client/index.d.ts +8 -27
  5. package/dist/auth/client/index.js +9 -4
  6. package/dist/auth/client/index.mjs +2 -1
  7. package/dist/auth/components/index.d.mts +8 -225
  8. package/dist/auth/components/index.d.ts +8 -225
  9. package/dist/auth/components/index.js +62 -319
  10. package/dist/auth/components/index.js.map +1 -1
  11. package/dist/auth/components/index.mjs +6 -316
  12. package/dist/auth/components/index.mjs.map +1 -1
  13. package/dist/auth/hooks/index.d.mts +11 -29
  14. package/dist/auth/hooks/index.d.ts +11 -29
  15. package/dist/auth/hooks/index.js +14 -3
  16. package/dist/auth/hooks/index.mjs +4 -1
  17. package/dist/auth/index.d.mts +17 -14
  18. package/dist/auth/index.d.ts +17 -14
  19. package/dist/auth/index.js +51 -90
  20. package/dist/auth/index.mjs +8 -7
  21. package/dist/auth/rn/index.d.mts +3087 -18
  22. package/dist/auth/rn/index.d.ts +3087 -18
  23. package/dist/auth/rn/index.js +396 -477
  24. package/dist/auth/rn/index.js.map +1 -1
  25. package/dist/auth/rn/index.mjs +384 -475
  26. package/dist/auth/rn/index.mjs.map +1 -1
  27. package/dist/auth/schema/index.d.mts +3 -788
  28. package/dist/auth/schema/index.d.ts +3 -788
  29. package/dist/auth/schema/index.js +17 -9
  30. package/dist/auth/schema/index.mjs +1 -1
  31. package/dist/auth/services/index.d.mts +1 -48
  32. package/dist/auth/services/index.d.ts +1 -48
  33. package/dist/auth/services/index.js +3 -20
  34. package/dist/auth/services/index.mjs +1 -2
  35. package/dist/{base-api-client-B3wZZoaH.d.ts → base-api-client-BpmcQt4Q.d.ts} +1 -1
  36. package/dist/{base-api-client-ACKKt13v.d.mts → base-api-client-CFIhZK4C.d.mts} +1 -1
  37. package/dist/{base-api-client-ACKKt13v.d.ts → base-api-client-CFIhZK4C.d.ts} +1 -1
  38. package/dist/{base-api-client-DrL35Ea2.d.mts → base-api-client-DXLsq2yz.d.mts} +1 -1
  39. package/dist/business/index.d.mts +1 -5
  40. package/dist/business/index.d.ts +1 -5
  41. package/dist/business/index.js +34 -1135
  42. package/dist/business/index.js.map +1 -1
  43. package/dist/business/index.mjs +5 -1105
  44. package/dist/business/index.mjs.map +1 -1
  45. package/dist/calendar/routes/index.d.mts +74 -1
  46. package/dist/calendar/routes/index.d.ts +74 -1
  47. package/dist/calendar/routes/index.js +186 -97
  48. package/dist/calendar/routes/index.js.map +1 -1
  49. package/dist/calendar/routes/index.mjs +178 -99
  50. package/dist/calendar/routes/index.mjs.map +1 -1
  51. package/dist/{chunk-IIVNHQEI.mjs → chunk-5GBDDXYL.mjs} +4 -3
  52. package/dist/chunk-5GBDDXYL.mjs.map +1 -0
  53. package/dist/chunk-7E3J7VAD.mjs +3 -0
  54. package/dist/chunk-7E3J7VAD.mjs.map +1 -0
  55. package/dist/chunk-B3CZ3HXJ.mjs +126 -0
  56. package/dist/chunk-B3CZ3HXJ.mjs.map +1 -0
  57. package/dist/chunk-CAYOQDBR.js +78 -0
  58. package/dist/chunk-CAYOQDBR.js.map +1 -0
  59. package/dist/{chunk-PTMSDNGO.mjs → chunk-CX2GHCAI.mjs} +4 -75
  60. package/dist/chunk-CX2GHCAI.mjs.map +1 -0
  61. package/dist/chunk-EBHPTFG6.mjs +82 -0
  62. package/dist/chunk-EBHPTFG6.mjs.map +1 -0
  63. package/dist/chunk-FOQEQWX5.js +4 -0
  64. package/dist/chunk-FOQEQWX5.js.map +1 -0
  65. package/dist/{chunk-YGI7UU2D.mjs → chunk-G4NFB2QA.mjs} +2 -2
  66. package/dist/chunk-G4NFB2QA.mjs.map +1 -0
  67. package/dist/chunk-G5HJGXGC.mjs +39 -0
  68. package/dist/chunk-G5HJGXGC.mjs.map +1 -0
  69. package/dist/{chunk-GSNGCENJ.js → chunk-GQZHGSRR.js} +2 -39
  70. package/dist/chunk-GQZHGSRR.js.map +1 -0
  71. package/dist/chunk-GS7XLKET.js +41 -0
  72. package/dist/chunk-GS7XLKET.js.map +1 -0
  73. package/dist/{chunk-7B5SI4OF.mjs → chunk-IBWDBBX5.mjs} +4 -3
  74. package/dist/chunk-IBWDBBX5.mjs.map +1 -0
  75. package/dist/chunk-IS7O4LPI.js +146 -0
  76. package/dist/chunk-IS7O4LPI.js.map +1 -0
  77. package/dist/chunk-LGHUCQIU.js +93 -0
  78. package/dist/chunk-LGHUCQIU.js.map +1 -0
  79. package/dist/chunk-LHJKLUM7.mjs +18 -0
  80. package/dist/chunk-LHJKLUM7.mjs.map +1 -0
  81. package/dist/chunk-LKBIVQBT.mjs +34 -0
  82. package/dist/chunk-LKBIVQBT.mjs.map +1 -0
  83. package/dist/chunk-MIDXG6LS.js +32 -0
  84. package/dist/chunk-MIDXG6LS.js.map +1 -0
  85. package/dist/chunk-MWSAH7ZG.mjs +42 -0
  86. package/dist/chunk-MWSAH7ZG.mjs.map +1 -0
  87. package/dist/{chunk-HCI6JQOU.mjs → chunk-MZOGYD4N.mjs} +7 -4
  88. package/dist/chunk-MZOGYD4N.mjs.map +1 -0
  89. package/dist/chunk-NDGHXVGS.js +25 -0
  90. package/dist/chunk-NDGHXVGS.js.map +1 -0
  91. package/dist/chunk-Q5VFBPMG.mjs +76 -0
  92. package/dist/chunk-Q5VFBPMG.mjs.map +1 -0
  93. package/dist/chunk-QDUBO567.js +1148 -0
  94. package/dist/chunk-QDUBO567.js.map +1 -0
  95. package/dist/{chunk-3CSCIRQY.js → chunk-QP5N3ER6.js} +6 -5
  96. package/dist/chunk-QP5N3ER6.js.map +1 -0
  97. package/dist/chunk-RWCD2CAD.mjs +1132 -0
  98. package/dist/chunk-RWCD2CAD.mjs.map +1 -0
  99. package/dist/{chunk-VQ54PUQV.js → chunk-S37OK2QG.js} +2 -2
  100. package/dist/chunk-S37OK2QG.js.map +1 -0
  101. package/dist/chunk-S3PUP7N4.js +20 -0
  102. package/dist/chunk-S3PUP7N4.js.map +1 -0
  103. package/dist/{chunk-QQ2WFYOD.js → chunk-S6YSGVWD.js} +4 -76
  104. package/dist/chunk-S6YSGVWD.js.map +1 -0
  105. package/dist/chunk-SFDJNKWC.js +22 -0
  106. package/dist/chunk-SFDJNKWC.js.map +1 -0
  107. package/dist/chunk-TTYCVBIQ.mjs +144 -0
  108. package/dist/chunk-TTYCVBIQ.mjs.map +1 -0
  109. package/dist/{chunk-HBF4HPRK.js → chunk-TXMX6PZR.js} +7 -3
  110. package/dist/chunk-TXMX6PZR.js.map +1 -0
  111. package/dist/chunk-VHN7PF5I.js +20 -0
  112. package/dist/chunk-VHN7PF5I.js.map +1 -0
  113. package/dist/chunk-VJNDOYEC.js +41 -0
  114. package/dist/chunk-VJNDOYEC.js.map +1 -0
  115. package/dist/chunk-XBZIS3MV.mjs +13 -0
  116. package/dist/chunk-XBZIS3MV.mjs.map +1 -0
  117. package/dist/chunk-XFOZ56FB.mjs +20 -0
  118. package/dist/chunk-XFOZ56FB.mjs.map +1 -0
  119. package/dist/chunk-Z23HAXHL.js +136 -0
  120. package/dist/chunk-Z23HAXHL.js.map +1 -0
  121. package/dist/chunk-ZF7DKR5A.mjs +26 -0
  122. package/dist/chunk-ZF7DKR5A.mjs.map +1 -0
  123. package/dist/common/auth/client/index.d.mts +3239 -0
  124. package/dist/common/auth/client/index.d.ts +3239 -0
  125. package/dist/common/auth/client/index.js +26 -0
  126. package/dist/common/auth/client/index.mjs +5 -0
  127. package/dist/common/auth/components/index.d.mts +374 -0
  128. package/dist/common/auth/components/index.d.ts +374 -0
  129. package/dist/common/auth/components/index.js +70 -0
  130. package/dist/common/auth/components/index.mjs +9 -0
  131. package/dist/common/auth/hooks/index.d.mts +75 -0
  132. package/dist/common/auth/hooks/index.d.ts +75 -0
  133. package/dist/common/auth/hooks/index.js +28 -0
  134. package/dist/common/auth/hooks/index.js.map +1 -0
  135. package/dist/common/auth/hooks/index.mjs +7 -0
  136. package/dist/common/auth/hooks/index.mjs.map +1 -0
  137. package/dist/common/auth/index.d.mts +14 -6
  138. package/dist/common/auth/index.d.ts +14 -6
  139. package/dist/common/auth/index.js +17 -8
  140. package/dist/common/auth/index.mjs +4 -3
  141. package/dist/common/auth/react/index.d.mts +3056 -0
  142. package/dist/common/auth/react/index.d.ts +3056 -0
  143. package/dist/common/auth/react/index.js +31 -0
  144. package/dist/common/auth/react/index.js.map +1 -0
  145. package/dist/common/auth/react/index.mjs +21 -0
  146. package/dist/common/auth/react/index.mjs.map +1 -0
  147. package/dist/common/auth/rn/index.d.mts +3138 -0
  148. package/dist/common/auth/rn/index.d.ts +3138 -0
  149. package/dist/common/auth/rn/index.js +348 -0
  150. package/dist/common/auth/rn/index.js.map +1 -0
  151. package/dist/common/auth/rn/index.mjs +327 -0
  152. package/dist/common/auth/rn/index.mjs.map +1 -0
  153. package/dist/common/auth/schema/index.d.mts +1479 -0
  154. package/dist/common/auth/schema/index.d.ts +1479 -0
  155. package/dist/common/auth/schema/index.js +49 -0
  156. package/dist/common/auth/schema/index.js.map +1 -0
  157. package/dist/common/auth/schema/index.mjs +4 -0
  158. package/dist/common/auth/schema/index.mjs.map +1 -0
  159. package/dist/common/auth/server/index.d.mts +7 -30
  160. package/dist/common/auth/server/index.d.ts +7 -30
  161. package/dist/common/auth/server/index.js +36 -79
  162. package/dist/common/auth/server/index.mjs +2 -5
  163. package/dist/common/auth/services/index.d.mts +14 -0
  164. package/dist/common/auth/services/index.d.ts +14 -0
  165. package/dist/common/auth/services/index.js +17 -0
  166. package/dist/common/auth/services/index.js.map +1 -0
  167. package/dist/common/auth/services/index.mjs +4 -0
  168. package/dist/common/auth/services/index.mjs.map +1 -0
  169. package/dist/common/index.d.mts +13 -5
  170. package/dist/common/index.d.ts +13 -5
  171. package/dist/common/index.js +19 -16
  172. package/dist/common/index.mjs +11 -8
  173. package/dist/common/request/index.js +5 -4
  174. package/dist/common/request/index.mjs +3 -2
  175. package/dist/common/storage/index.js +13 -12
  176. package/dist/common/storage/index.mjs +3 -2
  177. package/dist/festivalCard/index.d.mts +3 -3
  178. package/dist/festivalCard/index.d.ts +3 -3
  179. package/dist/festivalCard/routes/index.d.mts +1 -1
  180. package/dist/festivalCard/routes/index.d.ts +1 -1
  181. package/dist/festivalCard/server/index.d.mts +2 -2
  182. package/dist/festivalCard/server/index.d.ts +2 -2
  183. package/dist/{festivalCardService-BFCRhJrq.d.ts → festivalCardService-B3GsnNpV.d.ts} +1 -1
  184. package/dist/{festivalCardService-GriR2VMc.d.mts → festivalCardService-CWhrLNE9.d.mts} +1 -1
  185. package/dist/{index-DPYkrKZf.d.mts → index-BcjDRcKp.d.mts} +11 -6
  186. package/dist/{index-Bnh6VqFv.d.ts → index-BlpXrrTy.d.ts} +11 -6
  187. package/dist/{index-1Ag7IBXN.d.ts → index-DZ5iJtNO.d.mts} +2 -44
  188. package/dist/{index-DdeZSeTJ.d.mts → index-DZ5iJtNO.d.ts} +2 -44
  189. package/dist/index.d.mts +6296 -40
  190. package/dist/index.d.ts +6296 -40
  191. package/dist/index.js +1378 -2508
  192. package/dist/index.js.map +1 -1
  193. package/dist/index.mjs +1073 -2203
  194. package/dist/index.mjs.map +1 -1
  195. package/dist/mmd/admin/index.d.mts +1 -1
  196. package/dist/mmd/admin/index.d.ts +1 -1
  197. package/dist/mmd/index.d.mts +1 -1
  198. package/dist/mmd/index.d.ts +1 -1
  199. package/dist/mmd/server/index.d.mts +3 -3
  200. package/dist/mmd/server/index.d.ts +3 -3
  201. package/dist/request/index.js +4 -3
  202. package/dist/request/index.mjs +2 -1
  203. package/dist/session-BCXvGCnm.d.mts +81 -0
  204. package/dist/session-BCXvGCnm.d.ts +81 -0
  205. package/dist/storage/index.js +12 -11
  206. package/dist/storage/index.mjs +2 -1
  207. package/dist/{types-DyG3ZV9V.d.mts → types-B6B210gX.d.mts} +1 -1
  208. package/dist/{types-DyG3ZV9V.d.ts → types-B6B210gX.d.ts} +1 -1
  209. package/dist/{types-BTiaMsBz.d.mts → types-Bdnte5EN.d.mts} +1 -1
  210. package/dist/{types-tQfupO6d.d.mts → types-Cs0CLvrH.d.mts} +1 -1
  211. package/dist/{types-tQfupO6d.d.ts → types-Cs0CLvrH.d.ts} +1 -1
  212. package/dist/{types-ERmJyjx8.d.ts → types-_rFX1atk.d.ts} +1 -1
  213. package/dist/types.legacy-J-j-_ig_.d.mts +25 -0
  214. package/dist/types.legacy-J-j-_ig_.d.ts +25 -0
  215. package/dist/useAuthActions-7S5dL7Oh.d.mts +77 -0
  216. package/dist/useAuthActions-7S5dL7Oh.d.ts +77 -0
  217. package/dist/vocaloidBooth/server/index.d.mts +3 -3
  218. package/dist/vocaloidBooth/server/index.d.ts +3 -3
  219. package/package.json +44 -76
  220. package/dist/auth/legacy/core/index.d.mts +0 -42
  221. package/dist/auth/legacy/core/index.d.ts +0 -42
  222. package/dist/auth/legacy/core/index.js +0 -242
  223. package/dist/auth/legacy/core/index.js.map +0 -1
  224. package/dist/auth/legacy/core/index.mjs +0 -226
  225. package/dist/auth/legacy/core/index.mjs.map +0 -1
  226. package/dist/auth/legacy/db/index.d.mts +0 -5
  227. package/dist/auth/legacy/db/index.d.ts +0 -5
  228. package/dist/auth/legacy/db/index.js +0 -261
  229. package/dist/auth/legacy/db/index.js.map +0 -1
  230. package/dist/auth/legacy/db/index.mjs +0 -250
  231. package/dist/auth/legacy/db/index.mjs.map +0 -1
  232. package/dist/auth/legacy/index.d.mts +0 -5
  233. package/dist/auth/legacy/index.d.ts +0 -5
  234. package/dist/auth/legacy/index.js +0 -1107
  235. package/dist/auth/legacy/index.js.map +0 -1
  236. package/dist/auth/legacy/index.mjs +0 -1086
  237. package/dist/auth/legacy/index.mjs.map +0 -1
  238. package/dist/auth/legacy/logic/index.d.mts +0 -9
  239. package/dist/auth/legacy/logic/index.d.ts +0 -9
  240. package/dist/auth/legacy/logic/index.js +0 -194
  241. package/dist/auth/legacy/logic/index.js.map +0 -1
  242. package/dist/auth/legacy/logic/index.mjs +0 -187
  243. package/dist/auth/legacy/logic/index.mjs.map +0 -1
  244. package/dist/auth/legacy/miniapp/index.d.mts +0 -5
  245. package/dist/auth/legacy/miniapp/index.d.ts +0 -5
  246. package/dist/auth/legacy/miniapp/index.js +0 -506
  247. package/dist/auth/legacy/miniapp/index.js.map +0 -1
  248. package/dist/auth/legacy/miniapp/index.mjs +0 -487
  249. package/dist/auth/legacy/miniapp/index.mjs.map +0 -1
  250. package/dist/auth/legacy/routes/index.d.mts +0 -53
  251. package/dist/auth/legacy/routes/index.d.ts +0 -53
  252. package/dist/auth/legacy/routes/index.js +0 -278
  253. package/dist/auth/legacy/routes/index.js.map +0 -1
  254. package/dist/auth/legacy/routes/index.mjs +0 -271
  255. package/dist/auth/legacy/routes/index.mjs.map +0 -1
  256. package/dist/auth/legacy/schema/index.d.mts +0 -401
  257. package/dist/auth/legacy/schema/index.d.ts +0 -401
  258. package/dist/auth/legacy/schema/index.js +0 -50
  259. package/dist/auth/legacy/schema/index.js.map +0 -1
  260. package/dist/auth/legacy/schema/index.mjs +0 -44
  261. package/dist/auth/legacy/schema/index.mjs.map +0 -1
  262. package/dist/auth/legacy/server/index.d.mts +0 -13
  263. package/dist/auth/legacy/server/index.d.ts +0 -13
  264. package/dist/auth/legacy/server/index.js +0 -21
  265. package/dist/auth/legacy/server/index.js.map +0 -1
  266. package/dist/auth/legacy/server/index.mjs +0 -19
  267. package/dist/auth/legacy/server/index.mjs.map +0 -1
  268. package/dist/auth/legacy/services/index.d.mts +0 -40
  269. package/dist/auth/legacy/services/index.d.ts +0 -40
  270. package/dist/auth/legacy/services/index.js +0 -258
  271. package/dist/auth/legacy/services/index.js.map +0 -1
  272. package/dist/auth/legacy/services/index.mjs +0 -252
  273. package/dist/auth/legacy/services/index.mjs.map +0 -1
  274. package/dist/auth/legacy/ui/miniapp/index.d.mts +0 -10
  275. package/dist/auth/legacy/ui/miniapp/index.d.ts +0 -10
  276. package/dist/auth/legacy/ui/miniapp/index.js +0 -298
  277. package/dist/auth/legacy/ui/miniapp/index.js.map +0 -1
  278. package/dist/auth/legacy/ui/miniapp/index.mjs +0 -290
  279. package/dist/auth/legacy/ui/miniapp/index.mjs.map +0 -1
  280. package/dist/auth/legacy/ui/web/index.d.mts +0 -22
  281. package/dist/auth/legacy/ui/web/index.d.ts +0 -22
  282. package/dist/auth/legacy/ui/web/index.js +0 -899
  283. package/dist/auth/legacy/ui/web/index.js.map +0 -1
  284. package/dist/auth/legacy/ui/web/index.mjs +0 -889
  285. package/dist/auth/legacy/ui/web/index.mjs.map +0 -1
  286. package/dist/auth/legacy/web/index.d.mts +0 -5
  287. package/dist/auth/legacy/web/index.d.ts +0 -5
  288. package/dist/auth/legacy/web/index.js +0 -1107
  289. package/dist/auth/legacy/web/index.js.map +0 -1
  290. package/dist/auth/legacy/web/index.mjs +0 -1086
  291. package/dist/auth/legacy/web/index.mjs.map +0 -1
  292. package/dist/auth/middleware/index.d.mts +0 -75
  293. package/dist/auth/middleware/index.d.ts +0 -75
  294. package/dist/auth/middleware/index.js +0 -15
  295. package/dist/auth/middleware/index.mjs +0 -6
  296. package/dist/auth/routes/index.d.mts +0 -261
  297. package/dist/auth/routes/index.d.ts +0 -261
  298. package/dist/auth/routes/index.js +0 -59
  299. package/dist/auth/routes/index.mjs +0 -6
  300. package/dist/chunk-37HYTHEC.mjs +0 -90
  301. package/dist/chunk-37HYTHEC.mjs.map +0 -1
  302. package/dist/chunk-3CSCIRQY.js.map +0 -1
  303. package/dist/chunk-5WV35FPV.js +0 -131
  304. package/dist/chunk-5WV35FPV.js.map +0 -1
  305. package/dist/chunk-7B5SI4OF.mjs.map +0 -1
  306. package/dist/chunk-DCRD5CZB.js +0 -573
  307. package/dist/chunk-DCRD5CZB.js.map +0 -1
  308. package/dist/chunk-DDX4JKFS.js +0 -19
  309. package/dist/chunk-DDX4JKFS.js.map +0 -1
  310. package/dist/chunk-DV6M7MFP.js +0 -283
  311. package/dist/chunk-DV6M7MFP.js.map +0 -1
  312. package/dist/chunk-EQXPL7TN.mjs +0 -78
  313. package/dist/chunk-EQXPL7TN.mjs.map +0 -1
  314. package/dist/chunk-GSNGCENJ.js.map +0 -1
  315. package/dist/chunk-HBF4HPRK.js.map +0 -1
  316. package/dist/chunk-HCI6JQOU.mjs.map +0 -1
  317. package/dist/chunk-I44HXJ3X.mjs +0 -17
  318. package/dist/chunk-I44HXJ3X.mjs.map +0 -1
  319. package/dist/chunk-IIVNHQEI.mjs.map +0 -1
  320. package/dist/chunk-IJ4YYWE3.mjs +0 -122
  321. package/dist/chunk-IJ4YYWE3.mjs.map +0 -1
  322. package/dist/chunk-J4BEIZUC.js +0 -92
  323. package/dist/chunk-J4BEIZUC.js.map +0 -1
  324. package/dist/chunk-OKPWFVXC.js +0 -24
  325. package/dist/chunk-OKPWFVXC.js.map +0 -1
  326. package/dist/chunk-PNOTQAYK.mjs +0 -560
  327. package/dist/chunk-PNOTQAYK.mjs.map +0 -1
  328. package/dist/chunk-PTMSDNGO.mjs.map +0 -1
  329. package/dist/chunk-Q2IAL7YV.js +0 -36
  330. package/dist/chunk-Q2IAL7YV.js.map +0 -1
  331. package/dist/chunk-QQ2WFYOD.js.map +0 -1
  332. package/dist/chunk-VQ54PUQV.js.map +0 -1
  333. package/dist/chunk-W5JEGA76.mjs +0 -33
  334. package/dist/chunk-W5JEGA76.mjs.map +0 -1
  335. package/dist/chunk-YGI7UU2D.mjs.map +0 -1
  336. package/dist/chunk-ZCLQSI5F.mjs +0 -271
  337. package/dist/chunk-ZCLQSI5F.mjs.map +0 -1
  338. package/dist/drizzle-auth-service-D-pljzCD.d.mts +0 -145
  339. package/dist/drizzle-auth-service-D3qryE_I.d.ts +0 -145
  340. package/dist/index-DNKZ7-R_.d.mts +0 -184
  341. package/dist/index-DNKZ7-R_.d.ts +0 -184
  342. package/dist/types-C5vUWf9u.d.ts +0 -70
  343. package/dist/types-IYCqCk2g.d.mts +0 -70
  344. /package/dist/{auth/middleware → common/auth/client}/index.js.map +0 -0
  345. /package/dist/{auth/middleware → common/auth/client}/index.mjs.map +0 -0
  346. /package/dist/{auth/routes → common/auth/components}/index.js.map +0 -0
  347. /package/dist/{auth/routes → common/auth/components}/index.mjs.map +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sa2kit",
3
- "version": "2.0.4",
3
+ "version": "3.0.0",
4
4
  "description": "SA2Kit 2.0 — common API 稳定;business 实验田模块逐步迁出 profile-v1",
5
5
  "keywords": [
6
6
  "react",
@@ -249,81 +249,11 @@
249
249
  "import": "./dist/auth/index.mjs",
250
250
  "require": "./dist/auth/index.js"
251
251
  },
252
- "./auth/legacy/core": {
253
- "types": "./dist/auth/legacy/core/index.d.ts",
254
- "import": "./dist/auth/legacy/core/index.mjs",
255
- "require": "./dist/auth/legacy/core/index.js"
256
- },
257
- "./auth/legacy/db": {
258
- "types": "./dist/auth/legacy/db/index.d.ts",
259
- "import": "./dist/auth/legacy/db/index.mjs",
260
- "require": "./dist/auth/legacy/db/index.js"
261
- },
262
- "./auth/legacy": {
263
- "types": "./dist/auth/legacy/index.d.ts",
264
- "import": "./dist/auth/legacy/index.mjs",
265
- "require": "./dist/auth/legacy/index.js"
266
- },
267
- "./auth/legacy/logic": {
268
- "types": "./dist/auth/legacy/logic/index.d.ts",
269
- "import": "./dist/auth/legacy/logic/index.mjs",
270
- "require": "./dist/auth/legacy/logic/index.js"
271
- },
272
- "./auth/legacy/miniapp": {
273
- "types": "./dist/auth/legacy/miniapp/index.d.ts",
274
- "import": "./dist/auth/legacy/miniapp/index.mjs",
275
- "require": "./dist/auth/legacy/miniapp/index.js"
276
- },
277
- "./auth/legacy/routes": {
278
- "types": "./dist/auth/legacy/routes/index.d.ts",
279
- "import": "./dist/auth/legacy/routes/index.mjs",
280
- "require": "./dist/auth/legacy/routes/index.js"
281
- },
282
- "./auth/legacy/schema": {
283
- "types": "./dist/auth/legacy/schema/index.d.ts",
284
- "import": "./dist/auth/legacy/schema/index.mjs",
285
- "require": "./dist/auth/legacy/schema/index.js"
286
- },
287
- "./auth/legacy/server": {
288
- "types": "./dist/auth/legacy/server/index.d.ts",
289
- "import": "./dist/auth/legacy/server/index.mjs",
290
- "require": "./dist/auth/legacy/server/index.js"
291
- },
292
- "./auth/legacy/services": {
293
- "types": "./dist/auth/legacy/services/index.d.ts",
294
- "import": "./dist/auth/legacy/services/index.mjs",
295
- "require": "./dist/auth/legacy/services/index.js"
296
- },
297
- "./auth/legacy/ui/miniapp": {
298
- "types": "./dist/auth/legacy/ui/miniapp/index.d.ts",
299
- "import": "./dist/auth/legacy/ui/miniapp/index.mjs",
300
- "require": "./dist/auth/legacy/ui/miniapp/index.js"
301
- },
302
- "./auth/legacy/ui/web": {
303
- "types": "./dist/auth/legacy/ui/web/index.d.ts",
304
- "import": "./dist/auth/legacy/ui/web/index.mjs",
305
- "require": "./dist/auth/legacy/ui/web/index.js"
306
- },
307
- "./auth/legacy/web": {
308
- "types": "./dist/auth/legacy/web/index.d.ts",
309
- "import": "./dist/auth/legacy/web/index.mjs",
310
- "require": "./dist/auth/legacy/web/index.js"
311
- },
312
- "./auth/middleware": {
313
- "types": "./dist/auth/middleware/index.d.ts",
314
- "import": "./dist/auth/middleware/index.mjs",
315
- "require": "./dist/auth/middleware/index.js"
316
- },
317
252
  "./auth/rn": {
318
253
  "types": "./dist/auth/rn/index.d.ts",
319
254
  "import": "./dist/auth/rn/index.mjs",
320
255
  "require": "./dist/auth/rn/index.js"
321
256
  },
322
- "./auth/routes": {
323
- "types": "./dist/auth/routes/index.d.ts",
324
- "import": "./dist/auth/routes/index.mjs",
325
- "require": "./dist/auth/routes/index.js"
326
- },
327
257
  "./auth/schema": {
328
258
  "types": "./dist/auth/schema/index.d.ts",
329
259
  "import": "./dist/auth/schema/index.mjs",
@@ -349,6 +279,36 @@
349
279
  "import": "./dist/calendar/routes/index.mjs",
350
280
  "require": "./dist/calendar/routes/index.js"
351
281
  },
282
+ "./common/auth/client": {
283
+ "types": "./dist/common/auth/client/index.d.ts",
284
+ "import": "./dist/common/auth/client/index.mjs",
285
+ "require": "./dist/common/auth/client/index.js"
286
+ },
287
+ "./common/auth/components": {
288
+ "types": "./dist/common/auth/components/index.d.ts",
289
+ "import": "./dist/common/auth/components/index.mjs",
290
+ "require": "./dist/common/auth/components/index.js"
291
+ },
292
+ "./common/auth/hooks": {
293
+ "types": "./dist/common/auth/hooks/index.d.ts",
294
+ "import": "./dist/common/auth/hooks/index.mjs",
295
+ "require": "./dist/common/auth/hooks/index.js"
296
+ },
297
+ "./common/auth/react": {
298
+ "types": "./dist/common/auth/react/index.d.ts",
299
+ "import": "./dist/common/auth/react/index.mjs",
300
+ "require": "./dist/common/auth/react/index.js"
301
+ },
302
+ "./common/auth/rn": {
303
+ "types": "./dist/common/auth/rn/index.d.ts",
304
+ "import": "./dist/common/auth/rn/index.mjs",
305
+ "require": "./dist/common/auth/rn/index.js"
306
+ },
307
+ "./common/auth/schema": {
308
+ "types": "./dist/common/auth/schema/index.d.ts",
309
+ "import": "./dist/common/auth/schema/index.mjs",
310
+ "require": "./dist/common/auth/schema/index.js"
311
+ },
352
312
  "./common/auth/server": {
353
313
  "types": "./dist/common/auth/server/index.d.ts",
354
314
  "node": {
@@ -360,6 +320,11 @@
360
320
  "require": "./dist/common/auth/server/index.js"
361
321
  }
362
322
  },
323
+ "./common/auth/services": {
324
+ "types": "./dist/common/auth/services/index.d.ts",
325
+ "import": "./dist/common/auth/services/index.mjs",
326
+ "require": "./dist/common/auth/services/index.js"
327
+ },
363
328
  "./common/export/server": {
364
329
  "types": "./dist/common/export/server/index.d.ts",
365
330
  "node": {
@@ -662,9 +627,9 @@
662
627
  },
663
628
  "peerDependencies": {
664
629
  "@imgly/background-removal": "^1.7.0",
665
- "@xenova/transformers": "^2.17.2",
666
630
  "@tarojs/components": "^4.1.1",
667
631
  "@tarojs/taro": "^4.1.1",
632
+ "@xenova/transformers": "^2.17.2",
668
633
  "lucide-react": "^0.263.0 || ^0.300.0 || ^0.400.0 || ^0.500.0",
669
634
  "react": ">=18.0.0",
670
635
  "react-dom": ">=18.0.0",
@@ -706,6 +671,8 @@
706
671
  },
707
672
  "devDependencies": {
708
673
  "@imgly/background-removal": "^1.7.0",
674
+ "@tarojs/components": "^4.1.1",
675
+ "@tarojs/taro": "^4.1.1",
709
676
  "@testing-library/react": "^14.0.0",
710
677
  "@types/adm-zip": "^0.5.7",
711
678
  "@types/ali-oss": "^6.16.13",
@@ -717,15 +684,13 @@
717
684
  "@types/three": "^0.181.0",
718
685
  "@types/uuid": "^11.0.0",
719
686
  "@types/ws": "^8.18.1",
720
- "@tarojs/components": "^4.1.1",
721
- "@tarojs/taro": "^4.1.1",
722
687
  "@typescript-eslint/eslint-plugin": "^6.19.0",
723
688
  "@typescript-eslint/parser": "^6.19.0",
724
689
  "@vitest/ui": "^1.2.0",
725
690
  "@xenova/transformers": "^2.17.2",
726
691
  "class-variance-authority": "^0.7.1",
727
692
  "clsx": "^2.1.1",
728
- "drizzle-orm": "^0.44.7",
693
+ "drizzle-orm": "^0.45.2",
729
694
  "eslint": "^8.56.0",
730
695
  "eslint-config-prettier": "^9.1.0",
731
696
  "eslint-plugin-react": "^7.33.2",
@@ -750,6 +715,7 @@
750
715
  "packageManager": "pnpm@9.15.2",
751
716
  "dependencies": {
752
717
  "@ar-js-org/ar.js": "3.4.7",
718
+ "@better-auth/drizzle-adapter": "^1.6.15",
753
719
  "@dnd-kit/core": "^6.3.1",
754
720
  "@dnd-kit/sortable": "^10.0.0",
755
721
  "@dnd-kit/utilities": "^3.2.2",
@@ -757,6 +723,7 @@
757
723
  "adm-zip": "^0.5.16",
758
724
  "ali-oss": "^6.23.0",
759
725
  "bcryptjs": "^3.0.3",
726
+ "better-auth": "^1.6.15",
760
727
  "framer-motion": "^12.23.24",
761
728
  "jsonwebtoken": "^9.0.2",
762
729
  "jszip": "^3.10.1",
@@ -766,6 +733,7 @@
766
733
  "three": "^0.181.2",
767
734
  "three-stdlib": "^2.36.0",
768
735
  "uuid": "^13.0.0",
769
- "xlsx": "^0.18.5"
736
+ "xlsx": "^0.18.5",
737
+ "zod": "^4.4.3"
770
738
  }
771
739
  }
@@ -1,42 +0,0 @@
1
- export { AuthProvider, useAuth } from '../logic/index.mjs';
2
- import { U as User } from '../../../index-DNKZ7-R_.mjs';
3
- export { A as AuthGuardProps, i as AuthService, C as CustomMenuItem, F as ForgotPasswordModalProps, e as LoginModalProps, L as LoginRequest, b as LoginResponse, f as RegisterModalProps, R as RegisterRequest, c as RegisterResponse, k as SessionConfig, d as SessionValidation, S as SessionValidationResponse, h as UseAuthReturn, g as UserMenuProps, j as UserRole, a as UserSession, V as ValidateApiAuth } from '../../../index-DNKZ7-R_.mjs';
4
- import 'react';
5
-
6
- /**
7
- * 验证手机号格式
8
- */
9
- declare function validatePhoneNumber(phone: string): boolean;
10
- /**
11
- * 验证密码强度(可扩展)
12
- */
13
- declare function validatePassword(password: string): {
14
- valid: boolean;
15
- message?: string;
16
- };
17
- /**
18
- * 生成安全的会话令牌
19
- */
20
- declare function generateSessionToken(): string;
21
- /**
22
- * 检查用户是否为管理员
23
- */
24
- declare function isAdmin(user: User | null): boolean;
25
- /**
26
- * 检查用户是否处于活跃状态
27
- */
28
- declare function isActiveUser(user: User | null): boolean;
29
- /**
30
- * 格式化用户显示名称
31
- */
32
- declare function getUserDisplayName(user: User): string;
33
- /**
34
- * 计算会话过期时间
35
- */
36
- declare function calculateSessionExpiry(days?: number): Date;
37
- /**
38
- * 检查会话是否过期
39
- */
40
- declare function isSessionExpired(expiresAt: Date): boolean;
41
-
42
- export { User, calculateSessionExpiry, generateSessionToken, getUserDisplayName, isActiveUser, isAdmin, isSessionExpired, validatePassword, validatePhoneNumber };
@@ -1,42 +0,0 @@
1
- export { AuthProvider, useAuth } from '../logic/index.js';
2
- import { U as User } from '../../../index-DNKZ7-R_.js';
3
- export { A as AuthGuardProps, i as AuthService, C as CustomMenuItem, F as ForgotPasswordModalProps, e as LoginModalProps, L as LoginRequest, b as LoginResponse, f as RegisterModalProps, R as RegisterRequest, c as RegisterResponse, k as SessionConfig, d as SessionValidation, S as SessionValidationResponse, h as UseAuthReturn, g as UserMenuProps, j as UserRole, a as UserSession, V as ValidateApiAuth } from '../../../index-DNKZ7-R_.js';
4
- import 'react';
5
-
6
- /**
7
- * 验证手机号格式
8
- */
9
- declare function validatePhoneNumber(phone: string): boolean;
10
- /**
11
- * 验证密码强度(可扩展)
12
- */
13
- declare function validatePassword(password: string): {
14
- valid: boolean;
15
- message?: string;
16
- };
17
- /**
18
- * 生成安全的会话令牌
19
- */
20
- declare function generateSessionToken(): string;
21
- /**
22
- * 检查用户是否为管理员
23
- */
24
- declare function isAdmin(user: User | null): boolean;
25
- /**
26
- * 检查用户是否处于活跃状态
27
- */
28
- declare function isActiveUser(user: User | null): boolean;
29
- /**
30
- * 格式化用户显示名称
31
- */
32
- declare function getUserDisplayName(user: User): string;
33
- /**
34
- * 计算会话过期时间
35
- */
36
- declare function calculateSessionExpiry(days?: number): Date;
37
- /**
38
- * 检查会话是否过期
39
- */
40
- declare function isSessionExpired(expiresAt: Date): boolean;
41
-
42
- export { User, calculateSessionExpiry, generateSessionToken, getUserDisplayName, isActiveUser, isAdmin, isSessionExpired, validatePassword, validatePhoneNumber };
@@ -1,242 +0,0 @@
1
- 'use strict';
2
-
3
- var React = require('react');
4
-
5
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
6
-
7
- var React__default = /*#__PURE__*/_interopDefault(React);
8
-
9
- // src/business/auth-legacy/contexts/AuthContext.tsx
10
- var AuthContext = React.createContext(void 0);
11
- function extractUser(data) {
12
- return data?.user ?? data?.data?.user ?? null;
13
- }
14
- function extractValid(data) {
15
- if (typeof data?.valid === "boolean") return data.valid;
16
- if (typeof data?.data?.valid === "boolean") return data.data.valid;
17
- return false;
18
- }
19
- function AuthProvider({ children }) {
20
- const [user, setUser] = React.useState(null);
21
- const [loading, setLoading] = React.useState(true);
22
- const [isAuthenticated, setIsAuthenticated] = React.useState(false);
23
- const isMountedRef = React.useRef(true);
24
- const safeSetState = React.useCallback((updater) => {
25
- if (isMountedRef.current) {
26
- updater();
27
- }
28
- }, []);
29
- const validateSession = React.useCallback(async () => {
30
- console.log("\u{1F50D} [AuthContext] \u5F00\u59CB\u9A8C\u8BC1\u4F1A\u8BDD...");
31
- try {
32
- const response = await fetch("/api/auth/validate");
33
- console.log("\u{1F4E1} [AuthContext] \u4F1A\u8BDD\u9A8C\u8BC1\u54CD\u5E94\u72B6\u6001:", response.status);
34
- const data = await response.json();
35
- console.log("\u{1F4C4} [AuthContext] \u4F1A\u8BDD\u9A8C\u8BC1\u54CD\u5E94\u6570\u636E:", data);
36
- const resolvedUser = extractUser(data);
37
- const resolvedValid = extractValid(data);
38
- safeSetState(() => {
39
- if (resolvedValid && resolvedUser) {
40
- console.log("\u2705 [AuthContext] \u4F1A\u8BDD\u9A8C\u8BC1\u6210\u529F, \u7528\u6237:", resolvedUser);
41
- setUser(resolvedUser);
42
- setIsAuthenticated(true);
43
- } else {
44
- console.log("\u274C [AuthContext] \u4F1A\u8BDD\u9A8C\u8BC1\u5931\u8D25:", data.message);
45
- setUser(null);
46
- setIsAuthenticated(false);
47
- }
48
- setLoading(false);
49
- });
50
- } catch (error) {
51
- console.error("\u{1F4A5} [AuthContext] \u4F1A\u8BDD\u9A8C\u8BC1\u5F02\u5E38:", error);
52
- safeSetState(() => {
53
- setUser(null);
54
- setIsAuthenticated(false);
55
- setLoading(false);
56
- });
57
- }
58
- }, [safeSetState]);
59
- const login = React.useCallback(async (credentials) => {
60
- console.log("\u{1F511} [AuthContext] \u5F00\u59CB\u767B\u5F55...");
61
- console.log("\u{1F4DD} [AuthContext] \u767B\u5F55\u51ED\u636E:", { phone: credentials.phone, password: "***" });
62
- try {
63
- console.log("\u{1F4E4} [AuthContext] \u53D1\u9001\u767B\u5F55\u8BF7\u6C42\u5230 /api/auth/login");
64
- const response = await fetch("/api/auth/login", {
65
- method: "POST",
66
- headers: { "Content-Type": "application/json" },
67
- body: JSON.stringify(credentials)
68
- });
69
- console.log("\u{1F4E1} [AuthContext] \u6536\u5230\u54CD\u5E94\uFF0C\u72B6\u6001\u7801:", response.status);
70
- const data = await response.json();
71
- console.log("\u{1F4C4} [AuthContext] \u54CD\u5E94\u6570\u636E:", data);
72
- const resolvedUser = extractUser(data);
73
- if (data.success && resolvedUser) {
74
- console.log("\u2705 [AuthContext] \u767B\u5F55\u6210\u529F, \u5F00\u59CB\u66F4\u65B0\u5168\u5C40\u72B6\u6001");
75
- console.log("\u{1F464} [AuthContext] \u7528\u6237\u6570\u636E:", resolvedUser);
76
- console.log("\u{1F4CA} [AuthContext] \u66F4\u65B0\u524D\u72B6\u6001:", {
77
- currentUser: user ? `${user.name || "\u672A\u8BBE\u7F6E"} (${user.phone})` : null,
78
- currentIsAuthenticated: isAuthenticated,
79
- currentLoading: loading
80
- });
81
- console.log("\u{1F504} [AuthContext] \u6267\u884C\u5168\u5C40\u72B6\u6001\u66F4\u65B0...");
82
- safeSetState(() => {
83
- console.log("\u{1F504} [AuthContext] \u6B63\u5728\u8BBE\u7F6E\u7528\u6237:", resolvedUser);
84
- setUser(resolvedUser);
85
- console.log("\u{1F504} [AuthContext] \u6B63\u5728\u8BBE\u7F6E\u8BA4\u8BC1\u72B6\u6001: true");
86
- setIsAuthenticated(true);
87
- console.log("\u{1F504} [AuthContext] \u6B63\u5728\u8BBE\u7F6E\u52A0\u8F7D\u72B6\u6001: false");
88
- setLoading(false);
89
- console.log("\u2705 [AuthContext] \u5168\u5C40\u72B6\u6001\u66F4\u65B0\u5B8C\u6210");
90
- });
91
- setTimeout(() => {
92
- console.log("\u{1F389} [AuthContext] \u5EF6\u8FDF\u786E\u8BA4 - \u5168\u5C40\u767B\u5F55\u72B6\u6001\u5E94\u8BE5\u5DF2\u66F4\u65B0:", {
93
- user: resolvedUser,
94
- isAuthenticated: true
95
- });
96
- }, 0);
97
- console.log("\u{1F680} [AuthContext] \u8FD4\u56DE\u6210\u529F\u7ED3\u679C");
98
- return { success: true, user: resolvedUser };
99
- } else {
100
- console.log("\u274C [AuthContext] \u767B\u5F55\u5931\u8D25:", data.message);
101
- return { success: false, message: data.message };
102
- }
103
- } catch (error) {
104
- console.error("\u{1F4A5} [AuthContext] \u767B\u5F55\u5F02\u5E38:", error);
105
- return { success: false, message: "\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5" };
106
- }
107
- }, [safeSetState, user, isAuthenticated, loading]);
108
- const register = React.useCallback(async (userData) => {
109
- console.log("\u{1F4DD} [AuthContext] \u5F00\u59CB\u6CE8\u518C...");
110
- try {
111
- const response = await fetch("/api/auth/register", {
112
- method: "POST",
113
- headers: { "Content-Type": "application/json" },
114
- body: JSON.stringify(userData)
115
- });
116
- const data = await response.json();
117
- console.log("\u{1F4E1} [AuthContext] \u6CE8\u518C\u54CD\u5E94:", data);
118
- const resolvedUser = extractUser(data);
119
- if (data.success && resolvedUser) {
120
- console.log("\u2705 [AuthContext] \u6CE8\u518C\u6210\u529F, \u7ACB\u5373\u66F4\u65B0\u5168\u5C40\u72B6\u6001");
121
- safeSetState(() => {
122
- setUser(resolvedUser);
123
- setIsAuthenticated(true);
124
- setLoading(false);
125
- });
126
- console.log("\u{1F680} [AuthContext] \u8FD4\u56DE\u6CE8\u518C\u6210\u529F\u7ED3\u679C");
127
- return { success: true, user: resolvedUser };
128
- } else {
129
- console.log("\u274C [AuthContext] \u6CE8\u518C\u5931\u8D25:", data.message);
130
- return { success: false, message: data.message };
131
- }
132
- } catch (error) {
133
- console.error("\u{1F4A5} [AuthContext] \u6CE8\u518C\u5F02\u5E38:", error);
134
- return { success: false, message: "\u6CE8\u518C\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5" };
135
- }
136
- }, [safeSetState]);
137
- const logout = React.useCallback(async () => {
138
- console.log("\u{1F6AA} [AuthContext] \u5F00\u59CB\u767B\u51FA...");
139
- try {
140
- await fetch("/api/auth/logout", { method: "POST" });
141
- safeSetState(() => {
142
- setUser(null);
143
- setIsAuthenticated(false);
144
- });
145
- console.log("\u2705 [AuthContext] \u767B\u51FA\u6210\u529F, \u5168\u5C40\u72B6\u6001\u5DF2\u6E05\u9664");
146
- } catch (error) {
147
- console.error("\u{1F4A5} [AuthContext] \u767B\u51FA\u5931\u8D25:", error);
148
- }
149
- }, [safeSetState]);
150
- const refreshUser = React.useCallback(() => {
151
- console.log("\u{1F504} [AuthContext] \u5237\u65B0\u7528\u6237\u4FE1\u606F...");
152
- setLoading(true);
153
- validateSession();
154
- }, [validateSession]);
155
- React.useEffect(() => {
156
- isMountedRef.current = true;
157
- return () => {
158
- isMountedRef.current = false;
159
- };
160
- }, []);
161
- React.useEffect(() => {
162
- console.log("\u{1F680} [AuthContext] \u521D\u59CB\u5316, \u5F00\u59CB\u9A8C\u8BC1\u4F1A\u8BDD");
163
- validateSession();
164
- }, [validateSession]);
165
- React.useEffect(() => {
166
- console.log("\u{1F4CA} [AuthContext] \u5168\u5C40\u72B6\u6001\u53D8\u5316:", {
167
- isAuthenticated,
168
- user: user ? `${user.name || "\u672A\u8BBE\u7F6E"} (${user.phone})` : null,
169
- loading
170
- });
171
- }, [isAuthenticated, user, loading]);
172
- const value = {
173
- user,
174
- loading,
175
- isAuthenticated,
176
- login,
177
- register,
178
- logout,
179
- refreshUser
180
- };
181
- return /* @__PURE__ */ React__default.default.createElement(AuthContext.Provider, { value }, children);
182
- }
183
- function useAuth() {
184
- const context = React.useContext(AuthContext);
185
- if (context === void 0) {
186
- throw new Error("useAuth must be used within an AuthProvider");
187
- }
188
- return context;
189
- }
190
-
191
- // src/business/auth-legacy/types/index.ts
192
- var UserRole = /* @__PURE__ */ ((UserRole2) => {
193
- UserRole2["USER"] = "user";
194
- UserRole2["ADMIN"] = "admin";
195
- return UserRole2;
196
- })(UserRole || {});
197
-
198
- // src/business/auth-legacy/utils/authUtils.ts
199
- function validatePhoneNumber(phone) {
200
- return /^1[3-9]\d{9}$/.test(phone);
201
- }
202
- function validatePassword(password) {
203
- if (!password) {
204
- return { valid: false, message: "\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A" };
205
- }
206
- if (password.length < 6) {
207
- return { valid: false, message: "\u5BC6\u7801\u957F\u5EA6\u81F3\u5C116\u4F4D" };
208
- }
209
- return { valid: true };
210
- }
211
- function generateSessionToken() {
212
- return Math.random().toString(36).substring(2) + Date.now().toString(36) + Math.random().toString(36).substring(2);
213
- }
214
- function isAdmin(user) {
215
- return user?.role === "admin";
216
- }
217
- function isActiveUser(user) {
218
- return user?.isActive === true;
219
- }
220
- function getUserDisplayName(user) {
221
- return user.name || user.phone || "\u672A\u77E5\u7528\u6237";
222
- }
223
- function calculateSessionExpiry(days = 30) {
224
- return new Date(Date.now() + days * 24 * 60 * 60 * 1e3);
225
- }
226
- function isSessionExpired(expiresAt) {
227
- return /* @__PURE__ */ new Date() > new Date(expiresAt);
228
- }
229
-
230
- exports.AuthProvider = AuthProvider;
231
- exports.UserRole = UserRole;
232
- exports.calculateSessionExpiry = calculateSessionExpiry;
233
- exports.generateSessionToken = generateSessionToken;
234
- exports.getUserDisplayName = getUserDisplayName;
235
- exports.isActiveUser = isActiveUser;
236
- exports.isAdmin = isAdmin;
237
- exports.isSessionExpired = isSessionExpired;
238
- exports.useAuth = useAuth;
239
- exports.validatePassword = validatePassword;
240
- exports.validatePhoneNumber = validatePhoneNumber;
241
- //# sourceMappingURL=index.js.map
242
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/business/auth-legacy/contexts/AuthContext.tsx","../../../../src/business/auth-legacy/types/index.ts","../../../../src/business/auth-legacy/utils/authUtils.ts"],"names":["createContext","useState","useRef","useCallback","useEffect","React","useContext","UserRole"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport React, { createContext, useContext, useState, useEffect, useCallback, useRef } from 'react';\nimport type { User, UseAuthReturn, LoginRequest, RegisterRequest } from '../types';\n\ninterface AuthContextType extends UseAuthReturn {}\n\nconst AuthContext = createContext<AuthContextType | undefined>(undefined);\n\nfunction extractUser(data: any): User | null {\n return data?.user ?? data?.data?.user ?? null;\n}\n\nfunction extractValid(data: any): boolean {\n if (typeof data?.valid === 'boolean') return data.valid;\n if (typeof data?.data?.valid === 'boolean') return data.data.valid;\n return false;\n}\n\nexport function AuthProvider({ children }: { children: React.ReactNode }) {\n const [user, setUser] = useState<User | null>(null);\n const [loading, setLoading] = useState(true);\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const isMountedRef = useRef(true);\n\n // 安全的状态更新函数\n const safeSetState = useCallback((updater: () => void) => {\n if (isMountedRef.current) {\n updater();\n }\n }, []);\n\n // 验证会话\n const validateSession = useCallback(async () => {\n console.log('🔍 [AuthContext] 开始验证会话...');\n try {\n const response = await fetch('/api/auth/validate');\n console.log('📡 [AuthContext] 会话验证响应状态:', response.status);\n \n const data = await response.json();\n console.log('📄 [AuthContext] 会话验证响应数据:', data);\n const resolvedUser = extractUser(data);\n const resolvedValid = extractValid(data);\n \n safeSetState(() => {\n if (resolvedValid && resolvedUser) {\n console.log('✅ [AuthContext] 会话验证成功, 用户:', resolvedUser);\n setUser(resolvedUser);\n setIsAuthenticated(true);\n } else {\n console.log('❌ [AuthContext] 会话验证失败:', data.message);\n setUser(null);\n setIsAuthenticated(false);\n }\n setLoading(false);\n });\n } catch (error) {\n console.error('💥 [AuthContext] 会话验证异常:', error);\n safeSetState(() => {\n setUser(null);\n setIsAuthenticated(false);\n setLoading(false);\n });\n }\n }, [safeSetState]);\n\n // 登录\n const login = useCallback(async (credentials: LoginRequest) => {\n console.log('🔑 [AuthContext] 开始登录...');\n console.log('📝 [AuthContext] 登录凭据:', { phone: credentials.phone, password: '***' });\n \n try {\n console.log('📤 [AuthContext] 发送登录请求到 /api/auth/login');\n const response = await fetch('/api/auth/login', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(credentials),\n });\n\n console.log('📡 [AuthContext] 收到响应,状态码:', response.status);\n const data = await response.json();\n console.log('📄 [AuthContext] 响应数据:', data);\n const resolvedUser = extractUser(data);\n\n if (data.success && resolvedUser) {\n console.log('✅ [AuthContext] 登录成功, 开始更新全局状态');\n console.log('👤 [AuthContext] 用户数据:', resolvedUser);\n \n // 记录当前状态\n console.log('📊 [AuthContext] 更新前状态:', {\n currentUser: user ? `${user.name || '未设置'} (${user.phone})` : null,\n currentIsAuthenticated: isAuthenticated,\n currentLoading: loading\n });\n \n // 使用同步的状态更新确保立即生效\n console.log('🔄 [AuthContext] 执行全局状态更新...');\n safeSetState(() => {\n console.log('🔄 [AuthContext] 正在设置用户:', resolvedUser);\n setUser(resolvedUser);\n console.log('🔄 [AuthContext] 正在设置认证状态: true');\n setIsAuthenticated(true);\n console.log('🔄 [AuthContext] 正在设置加载状态: false');\n setLoading(false);\n console.log('✅ [AuthContext] 全局状态更新完成');\n });\n \n // 等待下一个事件循环后输出确认日志\n setTimeout(() => {\n console.log('🎉 [AuthContext] 延迟确认 - 全局登录状态应该已更新:', {\n user: resolvedUser,\n isAuthenticated: true\n });\n }, 0);\n \n console.log('🚀 [AuthContext] 返回成功结果');\n return { success: true, user: resolvedUser };\n } else {\n console.log('❌ [AuthContext] 登录失败:', data.message);\n return { success: false, message: data.message };\n }\n } catch (error) {\n console.error('💥 [AuthContext] 登录异常:', error);\n return { success: false, message: '登录失败,请稍后重试' };\n }\n }, [safeSetState, user, isAuthenticated, loading]);\n\n // 注册\n const register = useCallback(async (userData: RegisterRequest) => {\n console.log('📝 [AuthContext] 开始注册...');\n try {\n const response = await fetch('/api/auth/register', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(userData),\n });\n\n const data = await response.json();\n console.log('📡 [AuthContext] 注册响应:', data);\n const resolvedUser = extractUser(data);\n\n if (data.success && resolvedUser) {\n console.log('✅ [AuthContext] 注册成功, 立即更新全局状态');\n \n // 使用同步的状态更新确保立即生效\n safeSetState(() => {\n setUser(resolvedUser);\n setIsAuthenticated(true);\n setLoading(false);\n });\n \n console.log('🚀 [AuthContext] 返回注册成功结果');\n return { success: true, user: resolvedUser };\n } else {\n console.log('❌ [AuthContext] 注册失败:', data.message);\n return { success: false, message: data.message };\n }\n } catch (error) {\n console.error('💥 [AuthContext] 注册异常:', error);\n return { success: false, message: '注册失败,请稍后重试' };\n }\n }, [safeSetState]);\n\n // 登出\n const logout = useCallback(async () => {\n console.log('🚪 [AuthContext] 开始登出...');\n try {\n await fetch('/api/auth/logout', { method: 'POST' });\n safeSetState(() => {\n setUser(null);\n setIsAuthenticated(false);\n });\n console.log('✅ [AuthContext] 登出成功, 全局状态已清除');\n } catch (error) {\n console.error('💥 [AuthContext] 登出失败:', error);\n }\n }, [safeSetState]);\n\n // 刷新用户信息\n const refreshUser = useCallback(() => {\n console.log('🔄 [AuthContext] 刷新用户信息...');\n setLoading(true);\n validateSession();\n }, [validateSession]);\n\n // 组件挂载/卸载管理\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n // 初始化时验证会话\n useEffect(() => {\n console.log('🚀 [AuthContext] 初始化, 开始验证会话');\n validateSession();\n }, [validateSession]);\n\n // 状态变化监控(用于调试)\n useEffect(() => {\n console.log('📊 [AuthContext] 全局状态变化:', {\n isAuthenticated,\n user: user ? `${user.name || '未设置'} (${user.phone})` : null,\n loading\n });\n }, [isAuthenticated, user, loading]);\n\n const value: AuthContextType = {\n user,\n loading,\n isAuthenticated,\n login,\n register,\n logout,\n refreshUser,\n };\n\n return (\n <AuthContext.Provider value={value}>\n {children}\n </AuthContext.Provider>\n );\n}\n\nexport function useAuth(): UseAuthReturn {\n const context = useContext(AuthContext);\n if (context === undefined) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n return context;\n} \n","// ===== 用户相关类型 =====\n\n/**\n * 用户信息接口\n */\nexport interface User {\n id: number;\n phone: string;\n name?: string | null;\n email?: string | null;\n role: string;\n isActive: boolean;\n lastLoginAt?: Date | null;\n createdAt: Date;\n updatedAt: Date;\n}\n\n/**\n * 用户会话接口\n */\nexport interface UserSession {\n id: number;\n userId: number;\n sessionToken: string;\n expiresAt: Date;\n createdAt: Date;\n}\n\n// ===== 请求/响应类型 =====\n\n/**\n * 登录请求接口\n */\nexport interface LoginRequest {\n phone: string;\n password: string;\n}\n\n/**\n * 注册请求接口\n */\nexport interface RegisterRequest {\n phone: string;\n password: string;\n name?: string;\n}\n\n/**\n * 登录响应接口\n */\nexport interface LoginResponse {\n success: boolean;\n message: string;\n user?: User;\n sessionToken?: string;\n}\n\n/**\n * 注册响应接口\n */\nexport interface RegisterResponse {\n success: boolean;\n message: string;\n user?: User;\n sessionToken?: string;\n}\n\n/**\n * 会话验证响应接口\n */\nexport interface SessionValidationResponse {\n valid: boolean;\n user?: User;\n message?: string;\n}\n\n/**\n * 会话验证结果接口\n */\nexport interface SessionValidation {\n valid: boolean;\n user?: User;\n}\n\n// ===== 组件Props类型 =====\n\n/**\n * 登录模态框Props\n */\nexport interface LoginModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSuccess: () => void;\n onSwitchToRegister?: () => void;\n}\n\n/**\n * 注册模态框Props\n */\nexport interface RegisterModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSuccess: () => void;\n onSwitchToLogin?: () => void;\n}\n\n/**\n * 认证守卫Props\n */\nexport interface AuthGuardProps {\n children: React.ReactNode;\n fallback?: React.ReactNode;\n requireAuth?: boolean;\n}\n\n/**\n * 自定义菜单项接口\n */\nexport interface CustomMenuItem {\n id: string;\n label: string;\n icon?: React.ComponentType<any>;\n onClick: () => void;\n requireAuth?: boolean; // 是否需要登录才显示\n}\n\n/**\n * 用户菜单Props\n */\nexport interface UserMenuProps {\n customMenuItems?: CustomMenuItem[]; // 自定义菜单项\n className?: string; // 自定义样式类名\n}\n\n/**\n * 忘记密码模态框Props\n */\nexport interface ForgotPasswordModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSuccess: () => void;\n}\n\n// ===== Hook返回类型 =====\n\n/**\n * useAuth Hook返回值类型\n */\nexport interface UseAuthReturn {\n user: User | null;\n loading: boolean;\n isAuthenticated: boolean;\n login: (credentials: LoginRequest) => Promise<{ success: boolean; user?: User; message?: string }>;\n register: (userData: RegisterRequest) => Promise<{ success: boolean; user?: User; message?: string }>;\n logout: () => Promise<void>;\n refreshUser: () => void;\n}\n\n// ===== 服务相关类型 =====\n\n/**\n * 认证服务接口\n */\nexport interface AuthService {\n verifyPassword(phone: string, password: string): Promise<User | null>;\n createUser(phone: string, password: string, name?: string): Promise<User>;\n createSession(userId: number): Promise<UserSession>;\n validateSession(sessionToken: string): Promise<SessionValidation>;\n deleteSession(sessionToken: string): Promise<void>;\n deleteUserSessions(userId: number): Promise<void>;\n updateLastLogin(userId: number): Promise<void>;\n cleanupExpiredSessions(): Promise<void>;\n getUserByPhone(phone: string): Promise<User | null>;\n sendVerificationCode(phone: string): Promise<string>;\n verifyCode(phone: string, code: string): Promise<boolean>;\n resetPassword(phone: string, newPassword: string): Promise<void>;\n cleanupExpiredVerificationCodes(): Promise<void>;\n}\n\n// ===== 工具函数类型 =====\n\n/**\n * API权限验证函数类型\n */\nexport type ValidateApiAuth = (request: Request) => Promise<User | null>;\n\n// ===== 常量类型 =====\n\n/**\n * 用户角色枚举\n */\nexport enum UserRole {\n USER = 'user',\n ADMIN = 'admin'\n}\n\n/**\n * 会话配置\n */\nexport interface SessionConfig {\n maxAge: number; // 会话最大存活时间(秒)\n cookieName: string; // Cookie名称\n secure: boolean; // 是否使用安全Cookie\n httpOnly: boolean; // 是否仅HTTP访问\n sameSite: 'strict' | 'lax' | 'none'; // SameSite策略\n} ","import type { User } from '../types';\n\n/**\n * 验证手机号格式\n */\nexport function validatePhoneNumber(phone: string): boolean {\n return /^1[3-9]\\d{9}$/.test(phone);\n}\n\n/**\n * 验证密码强度(可扩展)\n */\nexport function validatePassword(password: string): { valid: boolean; message?: string } {\n if (!password) {\n return { valid: false, message: '密码不能为空' };\n }\n \n if (password.length < 6) {\n return { valid: false, message: '密码长度至少6位' };\n }\n \n return { valid: true };\n}\n\n/**\n * 生成安全的会话令牌\n */\nexport function generateSessionToken(): string {\n // 在实际环境中,应该使用更安全的随机数生成\n return Math.random().toString(36).substring(2) + \n Date.now().toString(36) + \n Math.random().toString(36).substring(2);\n}\n\n/**\n * 检查用户是否为管理员\n */\nexport function isAdmin(user: User | null): boolean {\n return user?.role === 'admin';\n}\n\n/**\n * 检查用户是否处于活跃状态\n */\nexport function isActiveUser(user: User | null): boolean {\n return user?.isActive === true;\n}\n\n/**\n * 格式化用户显示名称\n */\nexport function getUserDisplayName(user: User): string {\n return user.name || user.phone || '未知用户';\n}\n\n/**\n * 计算会话过期时间\n */\nexport function calculateSessionExpiry(days: number = 30): Date {\n return new Date(Date.now() + days * 24 * 60 * 60 * 1000);\n}\n\n/**\n * 检查会话是否过期\n */\nexport function isSessionExpired(expiresAt: Date): boolean {\n return new Date() > new Date(expiresAt);\n} "]}