sa2kit 2.0.3 → 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 (348) hide show
  1. package/README.md +1 -1
  2. package/dist/{UniversalFileService-GsP6D3Rc.d.ts → UniversalFileService-CC4d3wkc.d.ts} +2 -2
  3. package/dist/{UniversalFileService-BpvbZitV.d.mts → UniversalFileService-CzAE_G4V.d.mts} +2 -2
  4. package/dist/auth/client/index.d.mts +8 -27
  5. package/dist/auth/client/index.d.ts +8 -27
  6. package/dist/auth/client/index.js +9 -4
  7. package/dist/auth/client/index.mjs +2 -1
  8. package/dist/auth/components/index.d.mts +8 -225
  9. package/dist/auth/components/index.d.ts +8 -225
  10. package/dist/auth/components/index.js +62 -319
  11. package/dist/auth/components/index.js.map +1 -1
  12. package/dist/auth/components/index.mjs +6 -316
  13. package/dist/auth/components/index.mjs.map +1 -1
  14. package/dist/auth/hooks/index.d.mts +11 -29
  15. package/dist/auth/hooks/index.d.ts +11 -29
  16. package/dist/auth/hooks/index.js +14 -3
  17. package/dist/auth/hooks/index.mjs +4 -1
  18. package/dist/auth/index.d.mts +17 -14
  19. package/dist/auth/index.d.ts +17 -14
  20. package/dist/auth/index.js +51 -90
  21. package/dist/auth/index.mjs +8 -7
  22. package/dist/auth/rn/index.d.mts +3087 -18
  23. package/dist/auth/rn/index.d.ts +3087 -18
  24. package/dist/auth/rn/index.js +396 -477
  25. package/dist/auth/rn/index.js.map +1 -1
  26. package/dist/auth/rn/index.mjs +384 -475
  27. package/dist/auth/rn/index.mjs.map +1 -1
  28. package/dist/auth/schema/index.d.mts +3 -788
  29. package/dist/auth/schema/index.d.ts +3 -788
  30. package/dist/auth/schema/index.js +17 -9
  31. package/dist/auth/schema/index.mjs +1 -1
  32. package/dist/auth/services/index.d.mts +1 -48
  33. package/dist/auth/services/index.d.ts +1 -48
  34. package/dist/auth/services/index.js +3 -20
  35. package/dist/auth/services/index.mjs +1 -2
  36. package/dist/{base-api-client-B3wZZoaH.d.ts → base-api-client-BpmcQt4Q.d.ts} +1 -1
  37. package/dist/{base-api-client-ACKKt13v.d.mts → base-api-client-CFIhZK4C.d.mts} +1 -1
  38. package/dist/{base-api-client-ACKKt13v.d.ts → base-api-client-CFIhZK4C.d.ts} +1 -1
  39. package/dist/{base-api-client-DrL35Ea2.d.mts → base-api-client-DXLsq2yz.d.mts} +1 -1
  40. package/dist/business/index.d.mts +1 -5
  41. package/dist/business/index.d.ts +1 -5
  42. package/dist/business/index.js +34 -1135
  43. package/dist/business/index.js.map +1 -1
  44. package/dist/business/index.mjs +5 -1105
  45. package/dist/business/index.mjs.map +1 -1
  46. package/dist/calendar/routes/index.d.mts +74 -1
  47. package/dist/calendar/routes/index.d.ts +74 -1
  48. package/dist/calendar/routes/index.js +186 -97
  49. package/dist/calendar/routes/index.js.map +1 -1
  50. package/dist/calendar/routes/index.mjs +178 -99
  51. package/dist/calendar/routes/index.mjs.map +1 -1
  52. package/dist/{chunk-IIVNHQEI.mjs → chunk-5GBDDXYL.mjs} +4 -3
  53. package/dist/chunk-5GBDDXYL.mjs.map +1 -0
  54. package/dist/chunk-7E3J7VAD.mjs +3 -0
  55. package/dist/chunk-7E3J7VAD.mjs.map +1 -0
  56. package/dist/chunk-B3CZ3HXJ.mjs +126 -0
  57. package/dist/chunk-B3CZ3HXJ.mjs.map +1 -0
  58. package/dist/chunk-CAYOQDBR.js +78 -0
  59. package/dist/chunk-CAYOQDBR.js.map +1 -0
  60. package/dist/{chunk-PTMSDNGO.mjs → chunk-CX2GHCAI.mjs} +4 -75
  61. package/dist/chunk-CX2GHCAI.mjs.map +1 -0
  62. package/dist/chunk-EBHPTFG6.mjs +82 -0
  63. package/dist/chunk-EBHPTFG6.mjs.map +1 -0
  64. package/dist/chunk-FOQEQWX5.js +4 -0
  65. package/dist/chunk-FOQEQWX5.js.map +1 -0
  66. package/dist/{chunk-YGI7UU2D.mjs → chunk-G4NFB2QA.mjs} +2 -2
  67. package/dist/chunk-G4NFB2QA.mjs.map +1 -0
  68. package/dist/chunk-G5HJGXGC.mjs +39 -0
  69. package/dist/chunk-G5HJGXGC.mjs.map +1 -0
  70. package/dist/{chunk-GSNGCENJ.js → chunk-GQZHGSRR.js} +2 -39
  71. package/dist/chunk-GQZHGSRR.js.map +1 -0
  72. package/dist/chunk-GS7XLKET.js +41 -0
  73. package/dist/chunk-GS7XLKET.js.map +1 -0
  74. package/dist/{chunk-7B5SI4OF.mjs → chunk-IBWDBBX5.mjs} +4 -3
  75. package/dist/chunk-IBWDBBX5.mjs.map +1 -0
  76. package/dist/chunk-IS7O4LPI.js +146 -0
  77. package/dist/chunk-IS7O4LPI.js.map +1 -0
  78. package/dist/chunk-LGHUCQIU.js +93 -0
  79. package/dist/chunk-LGHUCQIU.js.map +1 -0
  80. package/dist/chunk-LHJKLUM7.mjs +18 -0
  81. package/dist/chunk-LHJKLUM7.mjs.map +1 -0
  82. package/dist/chunk-LKBIVQBT.mjs +34 -0
  83. package/dist/chunk-LKBIVQBT.mjs.map +1 -0
  84. package/dist/chunk-MIDXG6LS.js +32 -0
  85. package/dist/chunk-MIDXG6LS.js.map +1 -0
  86. package/dist/chunk-MWSAH7ZG.mjs +42 -0
  87. package/dist/chunk-MWSAH7ZG.mjs.map +1 -0
  88. package/dist/{chunk-HCI6JQOU.mjs → chunk-MZOGYD4N.mjs} +7 -4
  89. package/dist/chunk-MZOGYD4N.mjs.map +1 -0
  90. package/dist/chunk-NDGHXVGS.js +25 -0
  91. package/dist/chunk-NDGHXVGS.js.map +1 -0
  92. package/dist/chunk-Q5VFBPMG.mjs +76 -0
  93. package/dist/chunk-Q5VFBPMG.mjs.map +1 -0
  94. package/dist/chunk-QDUBO567.js +1148 -0
  95. package/dist/chunk-QDUBO567.js.map +1 -0
  96. package/dist/{chunk-3CSCIRQY.js → chunk-QP5N3ER6.js} +6 -5
  97. package/dist/chunk-QP5N3ER6.js.map +1 -0
  98. package/dist/chunk-RWCD2CAD.mjs +1132 -0
  99. package/dist/chunk-RWCD2CAD.mjs.map +1 -0
  100. package/dist/{chunk-VQ54PUQV.js → chunk-S37OK2QG.js} +2 -2
  101. package/dist/chunk-S37OK2QG.js.map +1 -0
  102. package/dist/chunk-S3PUP7N4.js +20 -0
  103. package/dist/chunk-S3PUP7N4.js.map +1 -0
  104. package/dist/{chunk-QQ2WFYOD.js → chunk-S6YSGVWD.js} +4 -76
  105. package/dist/chunk-S6YSGVWD.js.map +1 -0
  106. package/dist/chunk-SFDJNKWC.js +22 -0
  107. package/dist/chunk-SFDJNKWC.js.map +1 -0
  108. package/dist/chunk-TTYCVBIQ.mjs +144 -0
  109. package/dist/chunk-TTYCVBIQ.mjs.map +1 -0
  110. package/dist/{chunk-HBF4HPRK.js → chunk-TXMX6PZR.js} +7 -3
  111. package/dist/chunk-TXMX6PZR.js.map +1 -0
  112. package/dist/chunk-VHN7PF5I.js +20 -0
  113. package/dist/chunk-VHN7PF5I.js.map +1 -0
  114. package/dist/chunk-VJNDOYEC.js +41 -0
  115. package/dist/chunk-VJNDOYEC.js.map +1 -0
  116. package/dist/chunk-XBZIS3MV.mjs +13 -0
  117. package/dist/chunk-XBZIS3MV.mjs.map +1 -0
  118. package/dist/chunk-XFOZ56FB.mjs +20 -0
  119. package/dist/chunk-XFOZ56FB.mjs.map +1 -0
  120. package/dist/chunk-Z23HAXHL.js +136 -0
  121. package/dist/chunk-Z23HAXHL.js.map +1 -0
  122. package/dist/chunk-ZF7DKR5A.mjs +26 -0
  123. package/dist/chunk-ZF7DKR5A.mjs.map +1 -0
  124. package/dist/common/auth/client/index.d.mts +3239 -0
  125. package/dist/common/auth/client/index.d.ts +3239 -0
  126. package/dist/common/auth/client/index.js +26 -0
  127. package/dist/common/auth/client/index.mjs +5 -0
  128. package/dist/common/auth/components/index.d.mts +374 -0
  129. package/dist/common/auth/components/index.d.ts +374 -0
  130. package/dist/common/auth/components/index.js +70 -0
  131. package/dist/common/auth/components/index.mjs +9 -0
  132. package/dist/common/auth/hooks/index.d.mts +75 -0
  133. package/dist/common/auth/hooks/index.d.ts +75 -0
  134. package/dist/common/auth/hooks/index.js +28 -0
  135. package/dist/common/auth/hooks/index.js.map +1 -0
  136. package/dist/common/auth/hooks/index.mjs +7 -0
  137. package/dist/common/auth/hooks/index.mjs.map +1 -0
  138. package/dist/common/auth/index.d.mts +14 -6
  139. package/dist/common/auth/index.d.ts +14 -6
  140. package/dist/common/auth/index.js +17 -8
  141. package/dist/common/auth/index.mjs +4 -3
  142. package/dist/common/auth/react/index.d.mts +3056 -0
  143. package/dist/common/auth/react/index.d.ts +3056 -0
  144. package/dist/common/auth/react/index.js +31 -0
  145. package/dist/common/auth/react/index.js.map +1 -0
  146. package/dist/common/auth/react/index.mjs +21 -0
  147. package/dist/common/auth/react/index.mjs.map +1 -0
  148. package/dist/common/auth/rn/index.d.mts +3138 -0
  149. package/dist/common/auth/rn/index.d.ts +3138 -0
  150. package/dist/common/auth/rn/index.js +348 -0
  151. package/dist/common/auth/rn/index.js.map +1 -0
  152. package/dist/common/auth/rn/index.mjs +327 -0
  153. package/dist/common/auth/rn/index.mjs.map +1 -0
  154. package/dist/common/auth/schema/index.d.mts +1479 -0
  155. package/dist/common/auth/schema/index.d.ts +1479 -0
  156. package/dist/common/auth/schema/index.js +49 -0
  157. package/dist/common/auth/schema/index.js.map +1 -0
  158. package/dist/common/auth/schema/index.mjs +4 -0
  159. package/dist/common/auth/schema/index.mjs.map +1 -0
  160. package/dist/common/auth/server/index.d.mts +7 -30
  161. package/dist/common/auth/server/index.d.ts +7 -30
  162. package/dist/common/auth/server/index.js +36 -79
  163. package/dist/common/auth/server/index.mjs +2 -5
  164. package/dist/common/auth/services/index.d.mts +14 -0
  165. package/dist/common/auth/services/index.d.ts +14 -0
  166. package/dist/common/auth/services/index.js +17 -0
  167. package/dist/common/auth/services/index.js.map +1 -0
  168. package/dist/common/auth/services/index.mjs +4 -0
  169. package/dist/common/auth/services/index.mjs.map +1 -0
  170. package/dist/common/index.d.mts +13 -5
  171. package/dist/common/index.d.ts +13 -5
  172. package/dist/common/index.js +19 -16
  173. package/dist/common/index.mjs +11 -8
  174. package/dist/common/request/index.js +5 -4
  175. package/dist/common/request/index.mjs +3 -2
  176. package/dist/common/storage/index.js +13 -12
  177. package/dist/common/storage/index.mjs +3 -2
  178. package/dist/festivalCard/index.d.mts +3 -3
  179. package/dist/festivalCard/index.d.ts +3 -3
  180. package/dist/festivalCard/routes/index.d.mts +1 -1
  181. package/dist/festivalCard/routes/index.d.ts +1 -1
  182. package/dist/festivalCard/server/index.d.mts +2 -2
  183. package/dist/festivalCard/server/index.d.ts +2 -2
  184. package/dist/{festivalCardService-BFCRhJrq.d.ts → festivalCardService-B3GsnNpV.d.ts} +1 -1
  185. package/dist/{festivalCardService-GriR2VMc.d.mts → festivalCardService-CWhrLNE9.d.mts} +1 -1
  186. package/dist/{index-DPYkrKZf.d.mts → index-BcjDRcKp.d.mts} +11 -6
  187. package/dist/{index-Bnh6VqFv.d.ts → index-BlpXrrTy.d.ts} +11 -6
  188. package/dist/{index-1Ag7IBXN.d.ts → index-DZ5iJtNO.d.mts} +2 -44
  189. package/dist/{index-DdeZSeTJ.d.mts → index-DZ5iJtNO.d.ts} +2 -44
  190. package/dist/index.d.mts +6296 -40
  191. package/dist/index.d.ts +6296 -40
  192. package/dist/index.js +1378 -2508
  193. package/dist/index.js.map +1 -1
  194. package/dist/index.mjs +1073 -2203
  195. package/dist/index.mjs.map +1 -1
  196. package/dist/mmd/admin/index.d.mts +1 -1
  197. package/dist/mmd/admin/index.d.ts +1 -1
  198. package/dist/mmd/index.d.mts +1 -1
  199. package/dist/mmd/index.d.ts +1 -1
  200. package/dist/mmd/server/index.d.mts +3 -3
  201. package/dist/mmd/server/index.d.ts +3 -3
  202. package/dist/request/index.js +4 -3
  203. package/dist/request/index.mjs +2 -1
  204. package/dist/session-BCXvGCnm.d.mts +81 -0
  205. package/dist/session-BCXvGCnm.d.ts +81 -0
  206. package/dist/storage/index.js +12 -11
  207. package/dist/storage/index.mjs +2 -1
  208. package/dist/{types-DyG3ZV9V.d.mts → types-B6B210gX.d.mts} +1 -1
  209. package/dist/{types-DyG3ZV9V.d.ts → types-B6B210gX.d.ts} +1 -1
  210. package/dist/{types-BTiaMsBz.d.mts → types-Bdnte5EN.d.mts} +1 -1
  211. package/dist/{types-tQfupO6d.d.mts → types-Cs0CLvrH.d.mts} +1 -1
  212. package/dist/{types-tQfupO6d.d.ts → types-Cs0CLvrH.d.ts} +1 -1
  213. package/dist/{types-ERmJyjx8.d.ts → types-_rFX1atk.d.ts} +1 -1
  214. package/dist/types.legacy-J-j-_ig_.d.mts +25 -0
  215. package/dist/types.legacy-J-j-_ig_.d.ts +25 -0
  216. package/dist/useAuthActions-7S5dL7Oh.d.mts +77 -0
  217. package/dist/useAuthActions-7S5dL7Oh.d.ts +77 -0
  218. package/dist/vocaloidBooth/server/index.d.mts +3 -3
  219. package/dist/vocaloidBooth/server/index.d.ts +3 -3
  220. package/package.json +59 -76
  221. package/dist/auth/legacy/core/index.d.mts +0 -42
  222. package/dist/auth/legacy/core/index.d.ts +0 -42
  223. package/dist/auth/legacy/core/index.js +0 -242
  224. package/dist/auth/legacy/core/index.js.map +0 -1
  225. package/dist/auth/legacy/core/index.mjs +0 -226
  226. package/dist/auth/legacy/core/index.mjs.map +0 -1
  227. package/dist/auth/legacy/db/index.d.mts +0 -5
  228. package/dist/auth/legacy/db/index.d.ts +0 -5
  229. package/dist/auth/legacy/db/index.js +0 -261
  230. package/dist/auth/legacy/db/index.js.map +0 -1
  231. package/dist/auth/legacy/db/index.mjs +0 -250
  232. package/dist/auth/legacy/db/index.mjs.map +0 -1
  233. package/dist/auth/legacy/index.d.mts +0 -5
  234. package/dist/auth/legacy/index.d.ts +0 -5
  235. package/dist/auth/legacy/index.js +0 -1107
  236. package/dist/auth/legacy/index.js.map +0 -1
  237. package/dist/auth/legacy/index.mjs +0 -1086
  238. package/dist/auth/legacy/index.mjs.map +0 -1
  239. package/dist/auth/legacy/logic/index.d.mts +0 -9
  240. package/dist/auth/legacy/logic/index.d.ts +0 -9
  241. package/dist/auth/legacy/logic/index.js +0 -194
  242. package/dist/auth/legacy/logic/index.js.map +0 -1
  243. package/dist/auth/legacy/logic/index.mjs +0 -187
  244. package/dist/auth/legacy/logic/index.mjs.map +0 -1
  245. package/dist/auth/legacy/miniapp/index.d.mts +0 -5
  246. package/dist/auth/legacy/miniapp/index.d.ts +0 -5
  247. package/dist/auth/legacy/miniapp/index.js +0 -506
  248. package/dist/auth/legacy/miniapp/index.js.map +0 -1
  249. package/dist/auth/legacy/miniapp/index.mjs +0 -487
  250. package/dist/auth/legacy/miniapp/index.mjs.map +0 -1
  251. package/dist/auth/legacy/routes/index.d.mts +0 -53
  252. package/dist/auth/legacy/routes/index.d.ts +0 -53
  253. package/dist/auth/legacy/routes/index.js +0 -278
  254. package/dist/auth/legacy/routes/index.js.map +0 -1
  255. package/dist/auth/legacy/routes/index.mjs +0 -271
  256. package/dist/auth/legacy/routes/index.mjs.map +0 -1
  257. package/dist/auth/legacy/schema/index.d.mts +0 -401
  258. package/dist/auth/legacy/schema/index.d.ts +0 -401
  259. package/dist/auth/legacy/schema/index.js +0 -50
  260. package/dist/auth/legacy/schema/index.js.map +0 -1
  261. package/dist/auth/legacy/schema/index.mjs +0 -44
  262. package/dist/auth/legacy/schema/index.mjs.map +0 -1
  263. package/dist/auth/legacy/server/index.d.mts +0 -13
  264. package/dist/auth/legacy/server/index.d.ts +0 -13
  265. package/dist/auth/legacy/server/index.js +0 -21
  266. package/dist/auth/legacy/server/index.js.map +0 -1
  267. package/dist/auth/legacy/server/index.mjs +0 -19
  268. package/dist/auth/legacy/server/index.mjs.map +0 -1
  269. package/dist/auth/legacy/services/index.d.mts +0 -40
  270. package/dist/auth/legacy/services/index.d.ts +0 -40
  271. package/dist/auth/legacy/services/index.js +0 -258
  272. package/dist/auth/legacy/services/index.js.map +0 -1
  273. package/dist/auth/legacy/services/index.mjs +0 -252
  274. package/dist/auth/legacy/services/index.mjs.map +0 -1
  275. package/dist/auth/legacy/ui/miniapp/index.d.mts +0 -10
  276. package/dist/auth/legacy/ui/miniapp/index.d.ts +0 -10
  277. package/dist/auth/legacy/ui/miniapp/index.js +0 -298
  278. package/dist/auth/legacy/ui/miniapp/index.js.map +0 -1
  279. package/dist/auth/legacy/ui/miniapp/index.mjs +0 -290
  280. package/dist/auth/legacy/ui/miniapp/index.mjs.map +0 -1
  281. package/dist/auth/legacy/ui/web/index.d.mts +0 -22
  282. package/dist/auth/legacy/ui/web/index.d.ts +0 -22
  283. package/dist/auth/legacy/ui/web/index.js +0 -899
  284. package/dist/auth/legacy/ui/web/index.js.map +0 -1
  285. package/dist/auth/legacy/ui/web/index.mjs +0 -889
  286. package/dist/auth/legacy/ui/web/index.mjs.map +0 -1
  287. package/dist/auth/legacy/web/index.d.mts +0 -5
  288. package/dist/auth/legacy/web/index.d.ts +0 -5
  289. package/dist/auth/legacy/web/index.js +0 -1107
  290. package/dist/auth/legacy/web/index.js.map +0 -1
  291. package/dist/auth/legacy/web/index.mjs +0 -1086
  292. package/dist/auth/legacy/web/index.mjs.map +0 -1
  293. package/dist/auth/middleware/index.d.mts +0 -75
  294. package/dist/auth/middleware/index.d.ts +0 -75
  295. package/dist/auth/middleware/index.js +0 -15
  296. package/dist/auth/middleware/index.mjs +0 -6
  297. package/dist/auth/routes/index.d.mts +0 -261
  298. package/dist/auth/routes/index.d.ts +0 -261
  299. package/dist/auth/routes/index.js +0 -59
  300. package/dist/auth/routes/index.mjs +0 -6
  301. package/dist/chunk-37HYTHEC.mjs +0 -90
  302. package/dist/chunk-37HYTHEC.mjs.map +0 -1
  303. package/dist/chunk-3CSCIRQY.js.map +0 -1
  304. package/dist/chunk-5WV35FPV.js +0 -131
  305. package/dist/chunk-5WV35FPV.js.map +0 -1
  306. package/dist/chunk-7B5SI4OF.mjs.map +0 -1
  307. package/dist/chunk-DCRD5CZB.js +0 -573
  308. package/dist/chunk-DCRD5CZB.js.map +0 -1
  309. package/dist/chunk-DDX4JKFS.js +0 -19
  310. package/dist/chunk-DDX4JKFS.js.map +0 -1
  311. package/dist/chunk-DV6M7MFP.js +0 -283
  312. package/dist/chunk-DV6M7MFP.js.map +0 -1
  313. package/dist/chunk-EQXPL7TN.mjs +0 -78
  314. package/dist/chunk-EQXPL7TN.mjs.map +0 -1
  315. package/dist/chunk-GSNGCENJ.js.map +0 -1
  316. package/dist/chunk-HBF4HPRK.js.map +0 -1
  317. package/dist/chunk-HCI6JQOU.mjs.map +0 -1
  318. package/dist/chunk-I44HXJ3X.mjs +0 -17
  319. package/dist/chunk-I44HXJ3X.mjs.map +0 -1
  320. package/dist/chunk-IIVNHQEI.mjs.map +0 -1
  321. package/dist/chunk-IJ4YYWE3.mjs +0 -122
  322. package/dist/chunk-IJ4YYWE3.mjs.map +0 -1
  323. package/dist/chunk-J4BEIZUC.js +0 -92
  324. package/dist/chunk-J4BEIZUC.js.map +0 -1
  325. package/dist/chunk-OKPWFVXC.js +0 -24
  326. package/dist/chunk-OKPWFVXC.js.map +0 -1
  327. package/dist/chunk-PNOTQAYK.mjs +0 -560
  328. package/dist/chunk-PNOTQAYK.mjs.map +0 -1
  329. package/dist/chunk-PTMSDNGO.mjs.map +0 -1
  330. package/dist/chunk-Q2IAL7YV.js +0 -36
  331. package/dist/chunk-Q2IAL7YV.js.map +0 -1
  332. package/dist/chunk-QQ2WFYOD.js.map +0 -1
  333. package/dist/chunk-VQ54PUQV.js.map +0 -1
  334. package/dist/chunk-W5JEGA76.mjs +0 -33
  335. package/dist/chunk-W5JEGA76.mjs.map +0 -1
  336. package/dist/chunk-YGI7UU2D.mjs.map +0 -1
  337. package/dist/chunk-ZCLQSI5F.mjs +0 -271
  338. package/dist/chunk-ZCLQSI5F.mjs.map +0 -1
  339. package/dist/drizzle-auth-service-D-pljzCD.d.mts +0 -145
  340. package/dist/drizzle-auth-service-D3qryE_I.d.ts +0 -145
  341. package/dist/index-DNKZ7-R_.d.mts +0 -184
  342. package/dist/index-DNKZ7-R_.d.ts +0 -184
  343. package/dist/types-C5vUWf9u.d.ts +0 -70
  344. package/dist/types-IYCqCk2g.d.mts +0 -70
  345. /package/dist/{auth/middleware → common/auth/client}/index.js.map +0 -0
  346. /package/dist/{auth/middleware → common/auth/client}/index.mjs.map +0 -0
  347. /package/dist/{auth/routes → common/auth/components}/index.js.map +0 -0
  348. /package/dist/{auth/routes → common/auth/components}/index.mjs.map +0 -0
@@ -1,573 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkDV6M7MFP_js = require('./chunk-DV6M7MFP.js');
4
-
5
- // src/common/auth/routes/login.ts
6
- function addCorsHeaders(response, config, request) {
7
- if (!config.cors?.enabled) return response;
8
- const origin = request.headers.get("origin");
9
- const allowedOrigins = config.cors.origin;
10
- if (allowedOrigins) {
11
- if (typeof allowedOrigins === "string") {
12
- response.headers.set("Access-Control-Allow-Origin", allowedOrigins);
13
- } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {
14
- response.headers.set("Access-Control-Allow-Origin", origin);
15
- }
16
- } else {
17
- response.headers.set("Access-Control-Allow-Origin", origin || "*");
18
- }
19
- if (config.cors.credentials) {
20
- response.headers.set("Access-Control-Allow-Credentials", "true");
21
- }
22
- const methods = config.cors.methods || ["GET", "POST", "PUT", "DELETE", "OPTIONS"];
23
- response.headers.set("Access-Control-Allow-Methods", methods.join(", "));
24
- const headers = config.cors.allowedHeaders || ["Content-Type", "Authorization"];
25
- response.headers.set("Access-Control-Allow-Headers", headers.join(", "));
26
- return response;
27
- }
28
- function createLoginHandler(config) {
29
- return async (request) => {
30
- let requestBody = {};
31
- try {
32
- requestBody = await request.json();
33
- const { email, password } = requestBody;
34
- if (!email || !password) {
35
- const response2 = new Response(
36
- JSON.stringify({
37
- success: false,
38
- error: "\u90AE\u7BB1\u548C\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A"
39
- }),
40
- {
41
- status: 400,
42
- headers: { "Content-Type": "application/json" }
43
- }
44
- );
45
- return addCorsHeaders(response2, config, request);
46
- }
47
- const result = await config.authService.signIn(email, password);
48
- if (config.analytics) {
49
- try {
50
- await config.analytics.track("user_login_success", {
51
- userId: result.user.id,
52
- userRole: result.user.role,
53
- email: result.user.email,
54
- loginMethod: "email_password",
55
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
56
- });
57
- } catch (analyticsError) {
58
- console.error("Failed to track login analytics:", analyticsError);
59
- }
60
- }
61
- const response = new Response(
62
- JSON.stringify({
63
- success: true,
64
- data: {
65
- user: result.user,
66
- token: result.token
67
- },
68
- message: "\u767B\u5F55\u6210\u529F"
69
- }),
70
- {
71
- status: 200,
72
- headers: { "Content-Type": "application/json" }
73
- }
74
- );
75
- if (config.cookieOptions) {
76
- const cookieOptions = {
77
- name: config.cookieOptions?.name || "auth_token",
78
- httpOnly: config.cookieOptions?.httpOnly !== false,
79
- secure: config.cookieOptions?.secure !== false && process.env.NODE_ENV === "production",
80
- sameSite: config.cookieOptions?.sameSite || "lax",
81
- maxAge: config.cookieOptions?.maxAge || 60 * 60 * 24 * 7,
82
- // 7天
83
- path: config.cookieOptions?.path || "/"
84
- };
85
- const cookieValue = cookieOptions.name + "=" + result.token + "; HttpOnly=" + cookieOptions.httpOnly + "; Secure=" + cookieOptions.secure + "; SameSite=" + cookieOptions.sameSite + "; Max-Age=" + cookieOptions.maxAge + "; Path=" + cookieOptions.path;
86
- response.headers.set("Set-Cookie", cookieValue);
87
- }
88
- return addCorsHeaders(response, config, request);
89
- } catch (error) {
90
- console.error("Login error:", error);
91
- if (config.analytics) {
92
- try {
93
- await config.analytics.track("user_login_failed", {
94
- errorMessage: error.message || "\u767B\u5F55\u5931\u8D25",
95
- email: requestBody.email,
96
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
97
- });
98
- } catch (analyticsError) {
99
- console.error("Failed to track login failure analytics:", analyticsError);
100
- }
101
- }
102
- const response = new Response(
103
- JSON.stringify({
104
- success: false,
105
- error: error.message || "\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u90AE\u7BB1\u548C\u5BC6\u7801"
106
- }),
107
- {
108
- status: 401,
109
- headers: { "Content-Type": "application/json" }
110
- }
111
- );
112
- return addCorsHeaders(response, config, request);
113
- }
114
- };
115
- }
116
- function createLoginOptionsHandler(config) {
117
- return async (request) => {
118
- const response = new Response(null, {
119
- status: 204,
120
- headers: {
121
- "Content-Length": "0"
122
- }
123
- });
124
- return addCorsHeaders(response, config, request);
125
- };
126
- }
127
-
128
- // src/common/auth/routes/register.ts
129
- function addCorsHeaders2(response, config, request) {
130
- if (!config.cors?.enabled) return response;
131
- const origin = request.headers.get("origin");
132
- const allowedOrigins = config.cors.origin;
133
- if (allowedOrigins) {
134
- if (typeof allowedOrigins === "string") {
135
- response.headers.set("Access-Control-Allow-Origin", allowedOrigins);
136
- } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {
137
- response.headers.set("Access-Control-Allow-Origin", origin);
138
- }
139
- } else {
140
- response.headers.set("Access-Control-Allow-Origin", origin || "*");
141
- }
142
- if (config.cors.credentials) {
143
- response.headers.set("Access-Control-Allow-Credentials", "true");
144
- }
145
- const methods = config.cors.methods || ["GET", "POST", "PUT", "DELETE", "OPTIONS"];
146
- response.headers.set("Access-Control-Allow-Methods", methods.join(", "));
147
- const headers = config.cors.allowedHeaders || ["Content-Type", "Authorization"];
148
- response.headers.set("Access-Control-Allow-Headers", headers.join(", "));
149
- return response;
150
- }
151
- function createRegisterHandler(config) {
152
- return async (request) => {
153
- try {
154
- const { email, password, username } = await request.json();
155
- if (!email || !password) {
156
- const response2 = new Response(
157
- JSON.stringify({
158
- success: false,
159
- error: "\u90AE\u7BB1\u548C\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A"
160
- }),
161
- {
162
- status: 400,
163
- headers: { "Content-Type": "application/json" }
164
- }
165
- );
166
- return addCorsHeaders2(response2, config, request);
167
- }
168
- if (password.length < 6) {
169
- const response2 = new Response(
170
- JSON.stringify({
171
- success: false,
172
- error: "\u5BC6\u7801\u957F\u5EA6\u81F3\u5C11\u4E3A 6 \u4F4D"
173
- }),
174
- {
175
- status: 400,
176
- headers: { "Content-Type": "application/json" }
177
- }
178
- );
179
- return addCorsHeaders2(response2, config, request);
180
- }
181
- const result = await config.authService.signUp(
182
- email,
183
- password,
184
- username,
185
- config.defaultRole || "USER"
186
- );
187
- if (config.analytics) {
188
- try {
189
- await config.analytics.track("user_register_success", {
190
- userId: result.user.id,
191
- email: result.user.email,
192
- username: result.user.username,
193
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
194
- });
195
- } catch (analyticsError) {
196
- console.error("Failed to track register analytics:", analyticsError);
197
- }
198
- }
199
- const response = new Response(
200
- JSON.stringify({
201
- success: true,
202
- data: {
203
- user: result.user,
204
- token: result.token
205
- },
206
- message: "\u6CE8\u518C\u6210\u529F"
207
- }),
208
- {
209
- status: 201,
210
- headers: { "Content-Type": "application/json" }
211
- }
212
- );
213
- if (config.cookieOptions) {
214
- const cookieOptions = {
215
- name: config.cookieOptions?.name || "auth_token",
216
- httpOnly: config.cookieOptions?.httpOnly !== false,
217
- secure: config.cookieOptions?.secure !== false && process.env.NODE_ENV === "production",
218
- sameSite: config.cookieOptions?.sameSite || "lax",
219
- maxAge: config.cookieOptions?.maxAge || 60 * 60 * 24 * 7,
220
- path: config.cookieOptions?.path || "/"
221
- };
222
- const cookieValue = cookieOptions.name + "=" + result.token + "; HttpOnly=" + cookieOptions.httpOnly + "; Secure=" + cookieOptions.secure + "; SameSite=" + cookieOptions.sameSite + "; Max-Age=" + cookieOptions.maxAge + "; Path=" + cookieOptions.path;
223
- response.headers.set("Set-Cookie", cookieValue);
224
- }
225
- return addCorsHeaders2(response, config, request);
226
- } catch (error) {
227
- console.error("Register error:", error);
228
- if (config.analytics) {
229
- try {
230
- await config.analytics.track("user_register_failed", {
231
- errorMessage: error.message || "\u6CE8\u518C\u5931\u8D25",
232
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
233
- });
234
- } catch (analyticsError) {
235
- console.error("Failed to track register failure analytics:", analyticsError);
236
- }
237
- }
238
- const response = new Response(
239
- JSON.stringify({
240
- success: false,
241
- error: error.message || "\u6CE8\u518C\u5931\u8D25"
242
- }),
243
- {
244
- status: 400,
245
- headers: { "Content-Type": "application/json" }
246
- }
247
- );
248
- return addCorsHeaders2(response, config, request);
249
- }
250
- };
251
- }
252
- function createRegisterOptionsHandler(config) {
253
- return async (request) => {
254
- const response = new Response(null, {
255
- status: 204,
256
- headers: {
257
- "Content-Length": "0"
258
- }
259
- });
260
- if (config.cors?.enabled) {
261
- const origin = request.headers.get("origin");
262
- const allowedOrigins = config.cors.origin;
263
- if (allowedOrigins) {
264
- if (typeof allowedOrigins === "string") {
265
- response.headers.set("Access-Control-Allow-Origin", allowedOrigins);
266
- } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {
267
- response.headers.set("Access-Control-Allow-Origin", origin);
268
- }
269
- } else {
270
- response.headers.set("Access-Control-Allow-Origin", origin || "*");
271
- }
272
- if (config.cors.credentials) {
273
- response.headers.set("Access-Control-Allow-Credentials", "true");
274
- }
275
- const methods = config.cors.methods || ["GET", "POST", "PUT", "DELETE", "OPTIONS"];
276
- response.headers.set("Access-Control-Allow-Methods", methods.join(", "));
277
- const headers = config.cors.allowedHeaders || ["Content-Type", "Authorization"];
278
- response.headers.set("Access-Control-Allow-Headers", headers.join(", "));
279
- }
280
- return response;
281
- };
282
- }
283
-
284
- // src/common/auth/routes/me.ts
285
- function addCorsHeaders3(response, config, request) {
286
- if (!config.cors?.enabled) return response;
287
- const origin = request.headers.get("origin");
288
- const allowedOrigins = config.cors.origin;
289
- if (allowedOrigins) {
290
- if (typeof allowedOrigins === "string") {
291
- response.headers.set("Access-Control-Allow-Origin", allowedOrigins);
292
- } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {
293
- response.headers.set("Access-Control-Allow-Origin", origin);
294
- }
295
- } else {
296
- response.headers.set("Access-Control-Allow-Origin", origin || "*");
297
- }
298
- if (config.cors.credentials) {
299
- response.headers.set("Access-Control-Allow-Credentials", "true");
300
- }
301
- const methods = config.cors.methods || ["GET", "POST", "PUT", "DELETE", "OPTIONS"];
302
- response.headers.set("Access-Control-Allow-Methods", methods.join(", "));
303
- const headers = config.cors.allowedHeaders || ["Content-Type", "Authorization"];
304
- response.headers.set("Access-Control-Allow-Headers", headers.join(", "));
305
- return response;
306
- }
307
- function createMeHandler(config) {
308
- return async (request) => {
309
- try {
310
- const token = chunkDV6M7MFP_js.getTokenFromRequest(request);
311
- if (!token) {
312
- const response2 = new Response(
313
- JSON.stringify({
314
- success: false,
315
- error: "\u672A\u63D0\u4F9B\u8BA4\u8BC1\u4EE4\u724C"
316
- }),
317
- {
318
- status: 401,
319
- headers: { "Content-Type": "application/json" }
320
- }
321
- );
322
- return addCorsHeaders3(response2, config, request);
323
- }
324
- const result = await config.authService.verifyToken(token);
325
- const response = new Response(
326
- JSON.stringify({
327
- success: true,
328
- data: result.user
329
- }),
330
- {
331
- status: 200,
332
- headers: { "Content-Type": "application/json" }
333
- }
334
- );
335
- return addCorsHeaders3(response, config, request);
336
- } catch (error) {
337
- console.error("Get user info error:", error);
338
- const response = new Response(
339
- JSON.stringify({
340
- success: false,
341
- error: "\u8BA4\u8BC1\u5931\u8D25"
342
- }),
343
- {
344
- status: 401,
345
- headers: { "Content-Type": "application/json" }
346
- }
347
- );
348
- return addCorsHeaders3(response, config, request);
349
- }
350
- };
351
- }
352
- function createMeOptionsHandler(config) {
353
- return async (request) => {
354
- const response = new Response(null, {
355
- status: 204,
356
- headers: {
357
- "Content-Length": "0"
358
- }
359
- });
360
- return addCorsHeaders3(response, config, request);
361
- };
362
- }
363
-
364
- // src/common/auth/routes/logout.ts
365
- function addCorsHeaders4(response, config, request) {
366
- if (!config.cors?.enabled) return response;
367
- const origin = request.headers.get("origin");
368
- const allowedOrigins = config.cors.origin;
369
- if (allowedOrigins) {
370
- if (typeof allowedOrigins === "string") {
371
- response.headers.set("Access-Control-Allow-Origin", allowedOrigins);
372
- } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {
373
- response.headers.set("Access-Control-Allow-Origin", origin);
374
- }
375
- } else {
376
- response.headers.set("Access-Control-Allow-Origin", origin || "*");
377
- }
378
- if (config.cors.credentials) {
379
- response.headers.set("Access-Control-Allow-Credentials", "true");
380
- }
381
- const methods = config.cors.methods || ["GET", "POST", "PUT", "DELETE", "OPTIONS"];
382
- response.headers.set("Access-Control-Allow-Methods", methods.join(", "));
383
- const headers = config.cors.allowedHeaders || ["Content-Type", "Authorization"];
384
- response.headers.set("Access-Control-Allow-Headers", headers.join(", "));
385
- return response;
386
- }
387
- function createLogoutHandler(config) {
388
- return async (request) => {
389
- try {
390
- const token = chunkDV6M7MFP_js.getTokenFromRequest(request);
391
- if (!token) {
392
- const response2 = new Response(
393
- JSON.stringify({
394
- success: false,
395
- error: "\u672A\u63D0\u4F9B\u8BA4\u8BC1\u4EE4\u724C"
396
- }),
397
- {
398
- status: 401,
399
- headers: { "Content-Type": "application/json" }
400
- }
401
- );
402
- return addCorsHeaders4(response2, config, request);
403
- }
404
- await config.authService.signOut(token);
405
- if (config.analytics) {
406
- try {
407
- await config.analytics.track("user_logout", {
408
- timestamp: (/* @__PURE__ */ new Date()).toISOString()
409
- });
410
- } catch (analyticsError) {
411
- console.error("Failed to track logout analytics:", analyticsError);
412
- }
413
- }
414
- const response = new Response(
415
- JSON.stringify({
416
- success: true,
417
- message: "\u767B\u51FA\u6210\u529F"
418
- }),
419
- {
420
- status: 200,
421
- headers: { "Content-Type": "application/json" }
422
- }
423
- );
424
- response.headers.set(
425
- "Set-Cookie",
426
- "auth_token=; HttpOnly; Secure; SameSite=Lax; Max-Age=0; Path=/"
427
- );
428
- return addCorsHeaders4(response, config, request);
429
- } catch (error) {
430
- console.error("Logout error:", error);
431
- const response = new Response(
432
- JSON.stringify({
433
- success: false,
434
- error: "\u767B\u51FA\u5931\u8D25"
435
- }),
436
- {
437
- status: 500,
438
- headers: { "Content-Type": "application/json" }
439
- }
440
- );
441
- return addCorsHeaders4(response, config, request);
442
- }
443
- };
444
- }
445
- function createLogoutOptionsHandler(config) {
446
- return async (request) => {
447
- const response = new Response(null, {
448
- status: 204,
449
- headers: {
450
- "Content-Length": "0"
451
- }
452
- });
453
- return addCorsHeaders4(response, config, request);
454
- };
455
- }
456
-
457
- // src/common/auth/routes/defaults.ts
458
- function createDefaultBaseConfig(authService, overrides) {
459
- return {
460
- authService,
461
- cors: {
462
- enabled: true,
463
- credentials: true,
464
- ...overrides?.cors
465
- },
466
- analytics: overrides?.analytics
467
- };
468
- }
469
- function createDefaultLoginConfig(authService, overrides) {
470
- return {
471
- authService,
472
- cors: {
473
- enabled: true,
474
- credentials: true,
475
- ...overrides?.cors
476
- },
477
- cookieOptions: {
478
- name: "auth_token",
479
- httpOnly: true,
480
- secure: process.env.NODE_ENV === "production",
481
- sameSite: "lax",
482
- maxAge: 60 * 60 * 24 * 7,
483
- // 7天
484
- path: "/",
485
- ...overrides?.cookieOptions
486
- },
487
- analytics: overrides?.analytics
488
- };
489
- }
490
- function createDefaultRegisterConfig(authService, overrides) {
491
- return {
492
- authService,
493
- defaultRole: overrides?.defaultRole || "USER",
494
- cors: {
495
- enabled: true,
496
- credentials: true,
497
- ...overrides?.cors
498
- },
499
- cookieOptions: overrides?.cookieOptions !== void 0 ? {
500
- name: "auth_token",
501
- httpOnly: true,
502
- secure: process.env.NODE_ENV === "production",
503
- sameSite: "lax",
504
- maxAge: 60 * 60 * 24 * 7,
505
- // 7天
506
- path: "/",
507
- ...overrides.cookieOptions
508
- } : void 0,
509
- analytics: overrides?.analytics,
510
- emailVerificationRequired: overrides?.emailVerificationRequired
511
- };
512
- }
513
-
514
- // src/common/auth/routes/analytics-adapter.ts
515
- function createAnalyticsAdapter(analyticsService, options) {
516
- const config = {
517
- platform: options?.platform || "backend",
518
- appVersion: options?.appVersion || "1.0.0",
519
- sdkVersion: options?.sdkVersion || "1.0.0",
520
- deviceId: options?.deviceId || "server",
521
- generateId: options?.generateId || (() => {
522
- return Date.now() + "_" + Math.random().toString(36).substring(2, 15);
523
- })
524
- };
525
- return {
526
- track: async (eventName, properties) => {
527
- try {
528
- let eventType = "event";
529
- if (eventName.includes("login_success")) {
530
- eventType = "login";
531
- } else if (eventName.includes("register_success")) {
532
- eventType = "register";
533
- } else if (eventName.includes("logout")) {
534
- eventType = "logout";
535
- } else if (eventName.includes("failed") || eventName.includes("error")) {
536
- eventType = "error";
537
- }
538
- const event = {
539
- id: config.generateId(),
540
- eventType,
541
- eventName,
542
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
543
- priority: 1,
544
- userId: properties.userId || "anonymous",
545
- sessionId: properties.sessionId || "session_" + Date.now() + "_" + (properties.userId || "anonymous"),
546
- deviceId: config.deviceId,
547
- platform: config.platform,
548
- appVersion: config.appVersion,
549
- sdkVersion: config.sdkVersion,
550
- properties
551
- };
552
- await analyticsService.insertAnalyticsEvents([event]);
553
- } catch (error) {
554
- console.error("Failed to track analytics:", error);
555
- }
556
- }
557
- };
558
- }
559
-
560
- exports.createAnalyticsAdapter = createAnalyticsAdapter;
561
- exports.createDefaultBaseConfig = createDefaultBaseConfig;
562
- exports.createDefaultLoginConfig = createDefaultLoginConfig;
563
- exports.createDefaultRegisterConfig = createDefaultRegisterConfig;
564
- exports.createLoginHandler = createLoginHandler;
565
- exports.createLoginOptionsHandler = createLoginOptionsHandler;
566
- exports.createLogoutHandler = createLogoutHandler;
567
- exports.createLogoutOptionsHandler = createLogoutOptionsHandler;
568
- exports.createMeHandler = createMeHandler;
569
- exports.createMeOptionsHandler = createMeOptionsHandler;
570
- exports.createRegisterHandler = createRegisterHandler;
571
- exports.createRegisterOptionsHandler = createRegisterOptionsHandler;
572
- //# sourceMappingURL=chunk-DCRD5CZB.js.map
573
- //# sourceMappingURL=chunk-DCRD5CZB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/common/auth/routes/login.ts","../src/common/auth/routes/register.ts","../src/common/auth/routes/me.ts","../src/common/auth/routes/logout.ts","../src/common/auth/routes/defaults.ts","../src/common/auth/routes/analytics-adapter.ts"],"names":["response","addCorsHeaders","getTokenFromRequest"],"mappings":"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","file":"chunk-DCRD5CZB.js","sourcesContent":["/**\n * Auth Routes - Login\n * 登录路由处理器\n */\n\nimport type { LoginRouteConfig, ApiResponse } from './types';\n\n/**\n * 添加 CORS 头到响应\n */\nfunction addCorsHeaders(response: Response, config: LoginRouteConfig, request: Request): Response {\n if (!config.cors?.enabled) return response;\n\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n // 处理允许的源\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n // 默认允许所有源\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n\n return response;\n}\n\n/**\n * 创建登录路由处理器\n *\n * @example\n * ```typescript\n * import { createLoginHandler } from 'sa2kit/auth/routes';\n *\n * export const POST = createLoginHandler({\n * authService: myAuthService,\n * analytics: myAnalytics,\n * cors: { enabled: true },\n * });\n * ```\n */\nexport function createLoginHandler(config: LoginRouteConfig) {\n return async (request: Request) => {\n let requestBody: any = {};\n\n try {\n // 解析请求体\n requestBody = await request.json();\n const { email, password } = requestBody;\n\n // 验证必填字段\n if (!email || !password) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '邮箱和密码不能为空',\n } as ApiResponse),\n {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 执行登录\n const result = await config.authService.signIn(email, password);\n\n // 记录登录成功埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_login_success', {\n userId: result.user.id,\n userRole: result.user.role,\n email: result.user.email,\n loginMethod: 'email_password',\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track login analytics:', analyticsError);\n }\n }\n\n // 创建响应\n const response = new Response(\n JSON.stringify({\n success: true,\n data: {\n user: result.user,\n token: result.token,\n },\n message: '登录成功',\n } as ApiResponse),\n {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n // 设置 Cookie(如果有配置)\n if (config.cookieOptions) {\n const cookieOptions = {\n name: config.cookieOptions?.name || 'auth_token',\n httpOnly: config.cookieOptions?.httpOnly !== false,\n secure: config.cookieOptions?.secure !== false && process.env.NODE_ENV === 'production',\n sameSite: config.cookieOptions?.sameSite || 'lax',\n maxAge: config.cookieOptions?.maxAge || 60 * 60 * 24 * 7, // 7天\n path: config.cookieOptions?.path || '/',\n };\n\n // 设置 Set-Cookie header\n const cookieValue = (cookieOptions.name) + '=' + (result.token) + '; HttpOnly=' + (cookieOptions.httpOnly) + '; Secure=' + (cookieOptions.secure) + '; SameSite=' + (cookieOptions.sameSite) + '; Max-Age=' + (cookieOptions.maxAge) + '; Path=' + (cookieOptions.path);\n response.headers.set('Set-Cookie', cookieValue);\n }\n\n return addCorsHeaders(response, config, request);\n } catch (error) {\n console.error('Login error:', error);\n\n // 记录登录失败埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_login_failed', {\n errorMessage: (error as any).message || '登录失败',\n email: requestBody.email,\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track login failure analytics:', analyticsError);\n }\n }\n\n const response = new Response(\n JSON.stringify({\n success: false,\n error: (error as any).message || '登录失败,请检查邮箱和密码',\n } as ApiResponse),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n }\n };\n}\n\n/**\n * 创建 CORS 预检请求处理器\n */\nexport function createLoginOptionsHandler(config: LoginRouteConfig) {\n return async (request: Request) => {\n const response = new Response(null, {\n status: 204,\n headers: {\n 'Content-Length': '0',\n },\n });\n\n return addCorsHeaders(response, config, request);\n };\n}\n\n","/**\n * Auth Routes - Register\n * 注册路由处理器\n */\n\nimport type { RegisterRouteConfig, ApiResponse } from './types';\n\n/**\n * 添加 CORS 头到响应\n */\nfunction addCorsHeaders(response: Response, config: RegisterRouteConfig, request: Request): Response {\n if (!config.cors?.enabled) return response;\n\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n // 处理允许的源\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n // 默认允许所有源\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n\n return response;\n}\n\n/**\n * 创建注册路由处理器\n *\n * @example\n * ```typescript\n * import { createRegisterHandler } from 'sa2kit/auth/routes';\n *\n * export const POST = createRegisterHandler({\n * authService: myAuthService,\n * defaultRole: 'USER',\n * cors: { enabled: true },\n * });\n * ```\n */\nexport function createRegisterHandler(config: RegisterRouteConfig) {\n return async (request: Request) => {\n try {\n // 解析请求体\n const { email, password, username } = await request.json();\n\n // 验证必填字段\n if (!email || !password) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '邮箱和密码不能为空',\n } as ApiResponse),\n {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 密码强度验证\n if (password.length < 6) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '密码长度至少为 6 位',\n } as ApiResponse),\n {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 执行注册\n const result = await config.authService.signUp(\n email,\n password,\n username,\n config.defaultRole || 'USER'\n );\n\n // 记录注册成功埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_register_success', {\n userId: result.user.id,\n email: result.user.email,\n username: result.user.username,\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track register analytics:', analyticsError);\n }\n }\n\n // 创建响应\n const response = new Response(\n JSON.stringify({\n success: true,\n data: {\n user: result.user,\n token: result.token,\n },\n message: '注册成功',\n } as ApiResponse),\n {\n status: 201,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n // 设置 Cookie(如果有配置)\n if (config.cookieOptions) {\n const cookieOptions = {\n name: config.cookieOptions?.name || 'auth_token',\n httpOnly: config.cookieOptions?.httpOnly !== false,\n secure: config.cookieOptions?.secure !== false && process.env.NODE_ENV === 'production',\n sameSite: config.cookieOptions?.sameSite || 'lax',\n maxAge: config.cookieOptions?.maxAge || 60 * 60 * 24 * 7,\n path: config.cookieOptions?.path || '/',\n };\n\n const cookieValue = (cookieOptions.name) + '=' + (result.token) + '; HttpOnly=' + (cookieOptions.httpOnly) + '; Secure=' + (cookieOptions.secure) + '; SameSite=' + (cookieOptions.sameSite) + '; Max-Age=' + (cookieOptions.maxAge) + '; Path=' + (cookieOptions.path);\n response.headers.set('Set-Cookie', cookieValue);\n }\n\n return addCorsHeaders(response, config, request);\n } catch (error) {\n console.error('Register error:', error);\n\n // 记录注册失败埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_register_failed', {\n errorMessage: (error as any).message || '注册失败',\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track register failure analytics:', analyticsError);\n }\n }\n\n const response = new Response(\n JSON.stringify({\n success: false,\n error: (error as any).message || '注册失败',\n } as ApiResponse),\n {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n }\n };\n}\n\n/**\n * 创建 CORS 预检请求处理器\n */\nexport function createRegisterOptionsHandler(config: RegisterRouteConfig) {\n return async (request: Request) => {\n const response = new Response(null, {\n status: 204,\n headers: {\n 'Content-Length': '0',\n },\n });\n\n // 复用 addCorsHeaders 函数\n if (config.cors?.enabled) {\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n }\n\n return response;\n };\n}\n\n","/**\n * Auth Routes - Me\n * 获取当前用户信息路由处理器\n */\n\nimport { getTokenFromRequest } from '../services';\nimport type { BaseRouteConfig, ApiResponse } from './types';\n\n/**\n * 添加 CORS 头到响应\n */\nfunction addCorsHeaders(response: Response, config: BaseRouteConfig, request: Request): Response {\n if (!config.cors?.enabled) return response;\n\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n // 处理允许的源\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n // 默认允许所有源\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n\n return response;\n}\n\n/**\n * 创建获取当前用户信息路由处理器\n *\n * @example\n * ```typescript\n * import { createMeHandler } from 'sa2kit/auth/routes';\n *\n * export const GET = createMeHandler({\n * authService: myAuthService,\n * cors: { enabled: true },\n * });\n * ```\n */\nexport function createMeHandler(config: BaseRouteConfig) {\n return async (request: Request) => {\n try {\n // 获取 token\n const token = getTokenFromRequest(request);\n\n if (!token) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '未提供认证令牌',\n } as ApiResponse),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 验证 token 并获取用户信息\n const result = await config.authService.verifyToken(token);\n\n const response = new Response(\n JSON.stringify({\n success: true,\n data: result.user,\n } as ApiResponse),\n {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n } catch (error) {\n console.error('Get user info error:', error);\n\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '认证失败',\n } as ApiResponse),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n }\n };\n}\n\n/**\n * 创建 CORS 预检请求处理器\n */\nexport function createMeOptionsHandler(config: BaseRouteConfig) {\n return async (request: Request) => {\n const response = new Response(null, {\n status: 204,\n headers: {\n 'Content-Length': '0',\n },\n });\n\n return addCorsHeaders(response, config, request);\n };\n}\n","/**\n * Auth Routes - Logout\n * 登出路由处理器\n */\n\nimport { getTokenFromRequest } from '../services';\nimport type { BaseRouteConfig, ApiResponse } from './types';\n\n/**\n * 添加 CORS 头到响应\n */\nfunction addCorsHeaders(response: Response, config: BaseRouteConfig, request: Request): Response {\n if (!config.cors?.enabled) return response;\n\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n // 处理允许的源\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n // 默认允许所有源\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n\n return response;\n}\n\n/**\n * 创建登出路由处理器\n *\n * @example\n * ```typescript\n * import { createLogoutHandler } from 'sa2kit/auth/routes';\n *\n * export const POST = createLogoutHandler({\n * authService: myAuthService,\n * cors: { enabled: true },\n * });\n * ```\n */\nexport function createLogoutHandler(config: BaseRouteConfig) {\n return async (request: Request) => {\n try {\n // 获取 token\n const token = getTokenFromRequest(request);\n\n if (!token) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '未提供认证令牌',\n } as ApiResponse),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 删除会话\n await config.authService.signOut(token);\n\n // 记录登出埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_logout', {\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track logout analytics:', analyticsError);\n }\n }\n\n // 创建响应并清除 Cookie\n const response = new Response(\n JSON.stringify({\n success: true,\n message: '登出成功',\n } as ApiResponse),\n {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n // 清除 auth_token cookie\n response.headers.set(\n 'Set-Cookie',\n 'auth_token=; HttpOnly; Secure; SameSite=Lax; Max-Age=0; Path=/'\n );\n\n return addCorsHeaders(response, config, request);\n } catch (error) {\n console.error('Logout error:', error);\n\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '登出失败',\n } as ApiResponse),\n {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n }\n };\n}\n\n/**\n * 创建 CORS 预检请求处理器\n */\nexport function createLogoutOptionsHandler(config: BaseRouteConfig) {\n return async (request: Request) => {\n const response = new Response(null, {\n status: 204,\n headers: {\n 'Content-Length': '0',\n },\n });\n\n return addCorsHeaders(response, config, request);\n };\n}\n","/**\n * Auth Routes - Default Configurations\n * 默认路由配置\n */\n\nimport type { \n BaseRouteConfig, \n LoginRouteConfig, \n RegisterRouteConfig \n} from './types';\nimport type { DrizzleAuthService } from '../services';\n\n/**\n * 创建默认的基础路由配置\n */\nexport function createDefaultBaseConfig(\n authService: DrizzleAuthService,\n overrides?: Partial<BaseRouteConfig>\n): BaseRouteConfig {\n return {\n authService,\n cors: {\n enabled: true,\n credentials: true,\n ...overrides?.cors,\n },\n analytics: overrides?.analytics,\n };\n}\n\n/**\n * 创建默认的登录路由配置\n */\nexport function createDefaultLoginConfig(\n authService: DrizzleAuthService,\n overrides?: Partial<LoginRouteConfig>\n): LoginRouteConfig {\n return {\n authService,\n cors: {\n enabled: true,\n credentials: true,\n ...overrides?.cors,\n },\n cookieOptions: {\n name: 'auth_token',\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'lax',\n maxAge: 60 * 60 * 24 * 7, // 7天\n path: '/',\n ...overrides?.cookieOptions,\n },\n analytics: overrides?.analytics,\n };\n}\n\n/**\n * 创建默认的注册路由配置\n */\nexport function createDefaultRegisterConfig(\n authService: DrizzleAuthService,\n overrides?: Partial<RegisterRouteConfig>\n): RegisterRouteConfig {\n return {\n authService,\n defaultRole: overrides?.defaultRole || 'USER',\n cors: {\n enabled: true,\n credentials: true,\n ...overrides?.cors,\n },\n cookieOptions: overrides?.cookieOptions !== undefined ? {\n name: 'auth_token',\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'lax',\n maxAge: 60 * 60 * 24 * 7, // 7天\n path: '/',\n ...overrides.cookieOptions,\n } : undefined,\n analytics: overrides?.analytics,\n emailVerificationRequired: overrides?.emailVerificationRequired,\n };\n}\n\n","/**\n * Auth Routes - Analytics Adapter\n * 埋点适配器,用于适配不同的埋点服务\n */\n\n/**\n * 埋点事件接口\n */\nexport interface AnalyticsEvent {\n id: string;\n eventType: string;\n eventName: string;\n timestamp: string;\n priority: number;\n userId: string;\n sessionId: string;\n deviceId: string;\n platform: string;\n appVersion: string;\n sdkVersion: string;\n properties: Record<string, any>;\n}\n\n/**\n * 埋点服务接口\n */\nexport interface AnalyticsService {\n insertAnalyticsEvents(events: AnalyticsEvent[]): Promise<void>;\n}\n\n/**\n * 创建埋点适配器\n *\n * @param analyticsService 埋点服务实例\n * @param options 可选配置\n * @returns 符合 sa2kit 格式的埋点函数\n *\n * @example\n * ```typescript\n * import { createAnalyticsAdapter } from 'sa2kit/auth/routes';\n * import { analyticsService } from '@/lib/analytics';\n *\n * const analytics = createAnalyticsAdapter(analyticsService, {\n * platform: 'backend',\n * appVersion: '1.0.0',\n * });\n *\n * // 在路由配置中使用\n * const config = createDefaultLoginConfig(authService, {\n * analytics,\n * });\n * ```\n */\nexport function createAnalyticsAdapter(\n analyticsService: AnalyticsService,\n options?: {\n platform?: string;\n appVersion?: string;\n sdkVersion?: string;\n deviceId?: string;\n generateId?: () => string;\n }\n): {\n track: (eventName: string, properties: any) => Promise<void>;\n} {\n // 默认配置\n const config = {\n platform: options?.platform || 'backend',\n appVersion: options?.appVersion || '1.0.0',\n sdkVersion: options?.sdkVersion || '1.0.0',\n deviceId: options?.deviceId || 'server',\n generateId: options?.generateId || (() => {\n // 简单的 ID 生成器(仅用于浏览器环境)\n return (Date.now()) + '_' + (Math.random().toString(36).substring(2, 15));\n }),\n };\n\n return {\n track: async (eventName: string, properties: any) => {\n try {\n // 推断事件类型\n let eventType = 'event';\n if (eventName.includes('login_success')) {\n eventType = 'login';\n } else if (eventName.includes('register_success')) {\n eventType = 'register';\n } else if (eventName.includes('logout')) {\n eventType = 'logout';\n } else if (eventName.includes('failed') || eventName.includes('error')) {\n eventType = 'error';\n }\n\n // 构建埋点事件\n const event: AnalyticsEvent = {\n id: config.generateId(),\n eventType,\n eventName,\n timestamp: new Date().toISOString(),\n priority: 1,\n userId: properties.userId || 'anonymous',\n sessionId: properties.sessionId || 'session_' + (Date.now()) + '_' + (properties.userId || 'anonymous'),\n deviceId: config.deviceId,\n platform: config.platform,\n appVersion: config.appVersion,\n sdkVersion: config.sdkVersion,\n properties,\n };\n\n // 插入埋点事件\n await analyticsService.insertAnalyticsEvents([event]);\n } catch (error) {\n console.error('Failed to track analytics:', error);\n }\n },\n };\n}\n\n"]}