sa2kit 2.0.4 → 3.1.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 (354) 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/ai/llm/ui/miniapp/index.d.mts +2 -2
  4. package/dist/ai/llm/ui/miniapp/index.d.ts +2 -2
  5. package/dist/ai/llm/ui/rn/index.d.mts +2 -2
  6. package/dist/ai/llm/ui/rn/index.d.ts +2 -2
  7. package/dist/ai/llm/ui/web/index.d.mts +3 -3
  8. package/dist/ai/llm/ui/web/index.d.ts +3 -3
  9. package/dist/analytics/index.d.mts +1 -1
  10. package/dist/analytics/index.d.ts +1 -1
  11. package/dist/business/index.d.mts +1 -5
  12. package/dist/business/index.d.ts +1 -5
  13. package/dist/business/index.js +34 -1135
  14. package/dist/business/index.js.map +1 -1
  15. package/dist/business/index.mjs +5 -1105
  16. package/dist/business/index.mjs.map +1 -1
  17. package/dist/calendar/routes/index.d.mts +74 -1
  18. package/dist/calendar/routes/index.d.ts +74 -1
  19. package/dist/calendar/routes/index.js +186 -97
  20. package/dist/calendar/routes/index.js.map +1 -1
  21. package/dist/calendar/routes/index.mjs +178 -99
  22. package/dist/calendar/routes/index.mjs.map +1 -1
  23. package/dist/{chunk-RJP2BRJD.mjs → chunk-4OOANEJV.mjs} +2 -2
  24. package/dist/{chunk-RJP2BRJD.mjs.map → chunk-4OOANEJV.mjs.map} +1 -1
  25. package/dist/chunk-5FUAQLGC.mjs +14 -0
  26. package/dist/chunk-5FUAQLGC.mjs.map +1 -0
  27. package/dist/{chunk-IIVNHQEI.mjs → chunk-5GBDDXYL.mjs} +4 -3
  28. package/dist/chunk-5GBDDXYL.mjs.map +1 -0
  29. package/dist/{chunk-S732H246.js → chunk-6PMXAK7F.js} +2 -2
  30. package/dist/{chunk-S732H246.js.map → chunk-6PMXAK7F.js.map} +1 -1
  31. package/dist/chunk-6YLCRWKM.mjs +8 -0
  32. package/dist/chunk-6YLCRWKM.mjs.map +1 -0
  33. package/dist/chunk-CAYOQDBR.js +78 -0
  34. package/dist/chunk-CAYOQDBR.js.map +1 -0
  35. package/dist/{chunk-PTMSDNGO.mjs → chunk-CX2GHCAI.mjs} +4 -75
  36. package/dist/chunk-CX2GHCAI.mjs.map +1 -0
  37. package/dist/chunk-EBHPTFG6.mjs +82 -0
  38. package/dist/chunk-EBHPTFG6.mjs.map +1 -0
  39. package/dist/chunk-HQLKOXG7.js +16 -0
  40. package/dist/chunk-HQLKOXG7.js.map +1 -0
  41. package/dist/chunk-IS7O4LPI.js +146 -0
  42. package/dist/chunk-IS7O4LPI.js.map +1 -0
  43. package/dist/chunk-LGHUCQIU.js +93 -0
  44. package/dist/chunk-LGHUCQIU.js.map +1 -0
  45. package/dist/chunk-LKBIVQBT.mjs +34 -0
  46. package/dist/chunk-LKBIVQBT.mjs.map +1 -0
  47. package/dist/chunk-MIDXG6LS.js +32 -0
  48. package/dist/chunk-MIDXG6LS.js.map +1 -0
  49. package/dist/chunk-NDGHXVGS.js +25 -0
  50. package/dist/chunk-NDGHXVGS.js.map +1 -0
  51. package/dist/chunk-PA4ELVGI.js +20 -0
  52. package/dist/chunk-PA4ELVGI.js.map +1 -0
  53. package/dist/chunk-Q5VFBPMG.mjs +76 -0
  54. package/dist/chunk-Q5VFBPMG.mjs.map +1 -0
  55. package/dist/{chunk-WZDTNDYR.js → chunk-QSKLQX6H.js} +11 -11
  56. package/dist/{chunk-WZDTNDYR.js.map → chunk-QSKLQX6H.js.map} +1 -1
  57. package/dist/{chunk-QQ2WFYOD.js → chunk-S6YSGVWD.js} +4 -76
  58. package/dist/chunk-S6YSGVWD.js.map +1 -0
  59. package/dist/chunk-TNJ6LYX7.mjs +18 -0
  60. package/dist/chunk-TNJ6LYX7.mjs.map +1 -0
  61. package/dist/chunk-TTYCVBIQ.mjs +144 -0
  62. package/dist/chunk-TTYCVBIQ.mjs.map +1 -0
  63. package/dist/chunk-VJNDOYEC.js +41 -0
  64. package/dist/chunk-VJNDOYEC.js.map +1 -0
  65. package/dist/{chunk-J77KR2EV.mjs → chunk-WJ7IMUEJ.mjs} +3 -3
  66. package/dist/{chunk-J77KR2EV.mjs.map → chunk-WJ7IMUEJ.mjs.map} +1 -1
  67. package/dist/chunk-YTGUIRRH.js +10 -0
  68. package/dist/chunk-YTGUIRRH.js.map +1 -0
  69. package/dist/chunk-ZF7DKR5A.mjs +26 -0
  70. package/dist/chunk-ZF7DKR5A.mjs.map +1 -0
  71. package/dist/common/auth/client/index.d.mts +3209 -0
  72. package/dist/common/auth/client/index.d.ts +3209 -0
  73. package/dist/common/auth/client/index.js +13 -0
  74. package/dist/common/auth/client/index.mjs +4 -0
  75. package/dist/common/auth/components/index.d.mts +140 -0
  76. package/dist/common/auth/components/index.d.ts +140 -0
  77. package/dist/common/auth/components/index.js +899 -0
  78. package/dist/common/auth/components/index.js.map +1 -0
  79. package/dist/common/auth/components/index.mjs +875 -0
  80. package/dist/common/auth/components/index.mjs.map +1 -0
  81. package/dist/common/auth/hooks/index.d.mts +48 -0
  82. package/dist/common/auth/hooks/index.d.ts +48 -0
  83. package/dist/common/auth/hooks/index.js +19 -0
  84. package/dist/common/auth/hooks/index.mjs +6 -0
  85. package/dist/common/auth/index.d.mts +11 -7
  86. package/dist/common/auth/index.d.ts +11 -7
  87. package/dist/common/auth/index.js +7 -19
  88. package/dist/common/auth/index.mjs +3 -3
  89. package/dist/common/auth/react/index.d.mts +3056 -0
  90. package/dist/common/auth/react/index.d.ts +3056 -0
  91. package/dist/common/auth/react/index.js +31 -0
  92. package/dist/common/auth/react/index.js.map +1 -0
  93. package/dist/common/auth/react/index.mjs +21 -0
  94. package/dist/common/auth/react/index.mjs.map +1 -0
  95. package/dist/common/auth/rn/index.d.mts +3122 -0
  96. package/dist/common/auth/rn/index.d.ts +3122 -0
  97. package/dist/common/auth/rn/index.js +316 -0
  98. package/dist/common/auth/rn/index.js.map +1 -0
  99. package/dist/common/auth/rn/index.mjs +298 -0
  100. package/dist/common/auth/rn/index.mjs.map +1 -0
  101. package/dist/common/auth/schema/index.d.mts +1479 -0
  102. package/dist/common/auth/schema/index.d.ts +1479 -0
  103. package/dist/common/auth/schema/index.js +49 -0
  104. package/dist/common/auth/schema/index.mjs +4 -0
  105. package/dist/common/auth/server/index.d.mts +81 -25
  106. package/dist/common/auth/server/index.d.ts +81 -25
  107. package/dist/common/auth/server/index.js +146 -98
  108. package/dist/common/auth/server/index.js.map +1 -1
  109. package/dist/common/auth/server/index.mjs +125 -5
  110. package/dist/common/auth/server/index.mjs.map +1 -1
  111. package/dist/common/auth/services/index.d.mts +14 -0
  112. package/dist/common/auth/services/index.d.ts +14 -0
  113. package/dist/common/auth/services/index.js +20 -0
  114. package/dist/common/auth/services/index.js.map +1 -0
  115. package/dist/common/auth/services/index.mjs +13 -0
  116. package/dist/common/auth/services/index.mjs.map +1 -0
  117. package/dist/common/file/server/index.js +32 -32
  118. package/dist/common/file/server/index.mjs +3 -3
  119. package/dist/common/index.d.mts +13 -8
  120. package/dist/common/index.d.ts +13 -8
  121. package/dist/common/index.js +19 -18
  122. package/dist/common/index.mjs +8 -7
  123. package/dist/common/storage/index.js +13 -12
  124. package/dist/common/storage/index.mjs +3 -2
  125. package/dist/festivalCard/index.d.mts +3 -3
  126. package/dist/festivalCard/index.d.ts +3 -3
  127. package/dist/festivalCard/routes/index.d.mts +1 -1
  128. package/dist/festivalCard/routes/index.d.ts +1 -1
  129. package/dist/festivalCard/server/index.d.mts +2 -2
  130. package/dist/festivalCard/server/index.d.ts +2 -2
  131. package/dist/{festivalCardService-BFCRhJrq.d.ts → festivalCardService-B3GsnNpV.d.ts} +1 -1
  132. package/dist/{festivalCardService-GriR2VMc.d.mts → festivalCardService-CWhrLNE9.d.mts} +1 -1
  133. package/dist/i18n/index.d.mts +1 -1
  134. package/dist/i18n/index.d.ts +1 -1
  135. package/dist/imageCrop/index.d.mts +3 -3
  136. package/dist/imageCrop/index.d.ts +3 -3
  137. package/dist/index-Bd7cKF1j.d.mts +50 -0
  138. package/dist/{index-CLB80GCP.d.mts → index-D0cqaQEH.d.mts} +5 -5
  139. package/dist/{index-CLB80GCP.d.ts → index-D0cqaQEH.d.ts} +5 -5
  140. package/dist/index-DRQxtCDw.d.ts +50 -0
  141. package/dist/{index-1Ag7IBXN.d.ts → index-DZ5iJtNO.d.mts} +2 -44
  142. package/dist/{index-DdeZSeTJ.d.mts → index-DZ5iJtNO.d.ts} +2 -44
  143. package/dist/{index-BxZauNN_.d.ts → index-DoUo8IrU.d.mts} +8 -8
  144. package/dist/{index-BxZauNN_.d.mts → index-DoUo8IrU.d.ts} +8 -8
  145. package/dist/index.d.mts +6382 -105
  146. package/dist/index.d.ts +6382 -105
  147. package/dist/index.js +1037 -2616
  148. package/dist/index.js.map +1 -1
  149. package/dist/index.mjs +976 -2555
  150. package/dist/index.mjs.map +1 -1
  151. package/dist/mmd/admin/index.d.mts +1 -1
  152. package/dist/mmd/admin/index.d.ts +1 -1
  153. package/dist/mmd/index.d.mts +1 -1
  154. package/dist/mmd/index.d.ts +1 -1
  155. package/dist/mmd/server/index.d.mts +3 -3
  156. package/dist/mmd/server/index.d.ts +3 -3
  157. package/dist/ossFile/server/index.js +32 -32
  158. package/dist/ossFile/server/index.mjs +3 -3
  159. package/dist/storage/index.js +12 -11
  160. package/dist/storage/index.mjs +2 -1
  161. package/dist/{types-DyG3ZV9V.d.mts → types-B6B210gX.d.mts} +1 -1
  162. package/dist/{types-DyG3ZV9V.d.ts → types-B6B210gX.d.ts} +1 -1
  163. package/dist/{types-BTiaMsBz.d.mts → types-Bdnte5EN.d.mts} +1 -1
  164. package/dist/{types-tQfupO6d.d.ts → types-Cs0CLvrH.d.mts} +1 -1
  165. package/dist/{types-tQfupO6d.d.mts → types-Cs0CLvrH.d.ts} +1 -1
  166. package/dist/{types-ERmJyjx8.d.ts → types-_rFX1atk.d.ts} +1 -1
  167. package/dist/universalExport/index.d.mts +3 -3
  168. package/dist/universalExport/index.d.ts +3 -3
  169. package/dist/universalFile/index.d.mts +5 -5
  170. package/dist/universalFile/index.d.ts +5 -5
  171. package/dist/universalFile/server/index.js +62 -62
  172. package/dist/universalFile/server/index.mjs +2 -2
  173. package/dist/useAuthActions-7S5dL7Oh.d.mts +77 -0
  174. package/dist/useAuthActions-7S5dL7Oh.d.ts +77 -0
  175. package/dist/vocaloidBooth/server/index.d.mts +3 -3
  176. package/dist/vocaloidBooth/server/index.d.ts +3 -3
  177. package/package.json +44 -111
  178. package/dist/auth/client/index.d.mts +0 -32
  179. package/dist/auth/client/index.d.ts +0 -32
  180. package/dist/auth/client/index.js +0 -21
  181. package/dist/auth/client/index.mjs +0 -4
  182. package/dist/auth/components/index.d.mts +0 -227
  183. package/dist/auth/components/index.d.ts +0 -227
  184. package/dist/auth/components/index.js +0 -327
  185. package/dist/auth/components/index.js.map +0 -1
  186. package/dist/auth/components/index.mjs +0 -319
  187. package/dist/auth/components/index.mjs.map +0 -1
  188. package/dist/auth/hooks/index.d.mts +0 -31
  189. package/dist/auth/hooks/index.d.ts +0 -31
  190. package/dist/auth/hooks/index.js +0 -17
  191. package/dist/auth/hooks/index.mjs +0 -4
  192. package/dist/auth/index.d.mts +0 -18
  193. package/dist/auth/index.d.ts +0 -18
  194. package/dist/auth/index.js +0 -151
  195. package/dist/auth/index.mjs +0 -10
  196. package/dist/auth/legacy/core/index.d.mts +0 -42
  197. package/dist/auth/legacy/core/index.d.ts +0 -42
  198. package/dist/auth/legacy/core/index.js +0 -242
  199. package/dist/auth/legacy/core/index.js.map +0 -1
  200. package/dist/auth/legacy/core/index.mjs +0 -226
  201. package/dist/auth/legacy/core/index.mjs.map +0 -1
  202. package/dist/auth/legacy/db/index.d.mts +0 -5
  203. package/dist/auth/legacy/db/index.d.ts +0 -5
  204. package/dist/auth/legacy/db/index.js +0 -261
  205. package/dist/auth/legacy/db/index.js.map +0 -1
  206. package/dist/auth/legacy/db/index.mjs +0 -250
  207. package/dist/auth/legacy/db/index.mjs.map +0 -1
  208. package/dist/auth/legacy/index.d.mts +0 -5
  209. package/dist/auth/legacy/index.d.ts +0 -5
  210. package/dist/auth/legacy/index.js +0 -1107
  211. package/dist/auth/legacy/index.js.map +0 -1
  212. package/dist/auth/legacy/index.mjs +0 -1086
  213. package/dist/auth/legacy/index.mjs.map +0 -1
  214. package/dist/auth/legacy/logic/index.d.mts +0 -9
  215. package/dist/auth/legacy/logic/index.d.ts +0 -9
  216. package/dist/auth/legacy/logic/index.js +0 -194
  217. package/dist/auth/legacy/logic/index.js.map +0 -1
  218. package/dist/auth/legacy/logic/index.mjs +0 -187
  219. package/dist/auth/legacy/logic/index.mjs.map +0 -1
  220. package/dist/auth/legacy/miniapp/index.d.mts +0 -5
  221. package/dist/auth/legacy/miniapp/index.d.ts +0 -5
  222. package/dist/auth/legacy/miniapp/index.js +0 -506
  223. package/dist/auth/legacy/miniapp/index.js.map +0 -1
  224. package/dist/auth/legacy/miniapp/index.mjs +0 -487
  225. package/dist/auth/legacy/miniapp/index.mjs.map +0 -1
  226. package/dist/auth/legacy/routes/index.d.mts +0 -53
  227. package/dist/auth/legacy/routes/index.d.ts +0 -53
  228. package/dist/auth/legacy/routes/index.js +0 -278
  229. package/dist/auth/legacy/routes/index.js.map +0 -1
  230. package/dist/auth/legacy/routes/index.mjs +0 -271
  231. package/dist/auth/legacy/routes/index.mjs.map +0 -1
  232. package/dist/auth/legacy/schema/index.d.mts +0 -401
  233. package/dist/auth/legacy/schema/index.d.ts +0 -401
  234. package/dist/auth/legacy/schema/index.js +0 -50
  235. package/dist/auth/legacy/schema/index.js.map +0 -1
  236. package/dist/auth/legacy/schema/index.mjs +0 -44
  237. package/dist/auth/legacy/schema/index.mjs.map +0 -1
  238. package/dist/auth/legacy/server/index.d.mts +0 -13
  239. package/dist/auth/legacy/server/index.d.ts +0 -13
  240. package/dist/auth/legacy/server/index.js +0 -21
  241. package/dist/auth/legacy/server/index.js.map +0 -1
  242. package/dist/auth/legacy/server/index.mjs +0 -19
  243. package/dist/auth/legacy/server/index.mjs.map +0 -1
  244. package/dist/auth/legacy/services/index.d.mts +0 -40
  245. package/dist/auth/legacy/services/index.d.ts +0 -40
  246. package/dist/auth/legacy/services/index.js +0 -258
  247. package/dist/auth/legacy/services/index.js.map +0 -1
  248. package/dist/auth/legacy/services/index.mjs +0 -252
  249. package/dist/auth/legacy/services/index.mjs.map +0 -1
  250. package/dist/auth/legacy/ui/miniapp/index.d.mts +0 -10
  251. package/dist/auth/legacy/ui/miniapp/index.d.ts +0 -10
  252. package/dist/auth/legacy/ui/miniapp/index.js +0 -298
  253. package/dist/auth/legacy/ui/miniapp/index.js.map +0 -1
  254. package/dist/auth/legacy/ui/miniapp/index.mjs +0 -290
  255. package/dist/auth/legacy/ui/miniapp/index.mjs.map +0 -1
  256. package/dist/auth/legacy/ui/web/index.d.mts +0 -22
  257. package/dist/auth/legacy/ui/web/index.d.ts +0 -22
  258. package/dist/auth/legacy/ui/web/index.js +0 -899
  259. package/dist/auth/legacy/ui/web/index.js.map +0 -1
  260. package/dist/auth/legacy/ui/web/index.mjs +0 -889
  261. package/dist/auth/legacy/ui/web/index.mjs.map +0 -1
  262. package/dist/auth/legacy/web/index.d.mts +0 -5
  263. package/dist/auth/legacy/web/index.d.ts +0 -5
  264. package/dist/auth/legacy/web/index.js +0 -1107
  265. package/dist/auth/legacy/web/index.js.map +0 -1
  266. package/dist/auth/legacy/web/index.mjs +0 -1086
  267. package/dist/auth/legacy/web/index.mjs.map +0 -1
  268. package/dist/auth/middleware/index.d.mts +0 -75
  269. package/dist/auth/middleware/index.d.ts +0 -75
  270. package/dist/auth/middleware/index.js +0 -15
  271. package/dist/auth/middleware/index.js.map +0 -1
  272. package/dist/auth/middleware/index.mjs +0 -6
  273. package/dist/auth/middleware/index.mjs.map +0 -1
  274. package/dist/auth/rn/index.d.mts +0 -64
  275. package/dist/auth/rn/index.d.ts +0 -64
  276. package/dist/auth/rn/index.js +0 -765
  277. package/dist/auth/rn/index.js.map +0 -1
  278. package/dist/auth/rn/index.mjs +0 -754
  279. package/dist/auth/rn/index.mjs.map +0 -1
  280. package/dist/auth/routes/index.d.mts +0 -261
  281. package/dist/auth/routes/index.d.ts +0 -261
  282. package/dist/auth/routes/index.js +0 -59
  283. package/dist/auth/routes/index.js.map +0 -1
  284. package/dist/auth/routes/index.mjs +0 -6
  285. package/dist/auth/routes/index.mjs.map +0 -1
  286. package/dist/auth/schema/index.d.mts +0 -789
  287. package/dist/auth/schema/index.d.ts +0 -789
  288. package/dist/auth/schema/index.js +0 -41
  289. package/dist/auth/schema/index.js.map +0 -1
  290. package/dist/auth/schema/index.mjs +0 -4
  291. package/dist/auth/schema/index.mjs.map +0 -1
  292. package/dist/auth/services/index.d.mts +0 -48
  293. package/dist/auth/services/index.d.ts +0 -48
  294. package/dist/auth/services/index.js +0 -34
  295. package/dist/auth/services/index.js.map +0 -1
  296. package/dist/auth/services/index.mjs +0 -5
  297. package/dist/auth/services/index.mjs.map +0 -1
  298. package/dist/base-api-client-ACKKt13v.d.mts +0 -277
  299. package/dist/base-api-client-ACKKt13v.d.ts +0 -277
  300. package/dist/base-api-client-B3wZZoaH.d.ts +0 -103
  301. package/dist/base-api-client-DrL35Ea2.d.mts +0 -103
  302. package/dist/chunk-37HYTHEC.mjs +0 -90
  303. package/dist/chunk-37HYTHEC.mjs.map +0 -1
  304. package/dist/chunk-5WV35FPV.js +0 -131
  305. package/dist/chunk-5WV35FPV.js.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-HBF4HPRK.js +0 -186
  313. package/dist/chunk-HBF4HPRK.js.map +0 -1
  314. package/dist/chunk-HCI6JQOU.mjs +0 -183
  315. package/dist/chunk-HCI6JQOU.mjs.map +0 -1
  316. package/dist/chunk-I44HXJ3X.mjs +0 -17
  317. package/dist/chunk-I44HXJ3X.mjs.map +0 -1
  318. package/dist/chunk-IIVNHQEI.mjs.map +0 -1
  319. package/dist/chunk-IJ4YYWE3.mjs +0 -122
  320. package/dist/chunk-IJ4YYWE3.mjs.map +0 -1
  321. package/dist/chunk-J4BEIZUC.js +0 -92
  322. package/dist/chunk-J4BEIZUC.js.map +0 -1
  323. package/dist/chunk-OKPWFVXC.js +0 -24
  324. package/dist/chunk-OKPWFVXC.js.map +0 -1
  325. package/dist/chunk-PNOTQAYK.mjs +0 -560
  326. package/dist/chunk-PNOTQAYK.mjs.map +0 -1
  327. package/dist/chunk-PTMSDNGO.mjs.map +0 -1
  328. package/dist/chunk-Q2IAL7YV.js +0 -36
  329. package/dist/chunk-Q2IAL7YV.js.map +0 -1
  330. package/dist/chunk-QQ2WFYOD.js.map +0 -1
  331. package/dist/chunk-VQ54PUQV.js +0 -216
  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 +0 -212
  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-Bnh6VqFv.d.ts +0 -35
  342. package/dist/index-DNKZ7-R_.d.mts +0 -184
  343. package/dist/index-DNKZ7-R_.d.ts +0 -184
  344. package/dist/index-DPYkrKZf.d.mts +0 -35
  345. package/dist/types-C5vUWf9u.d.ts +0 -70
  346. package/dist/types-C_W_CoUD.d.ts +0 -99
  347. package/dist/types-DCRvasyH.d.mts +0 -99
  348. package/dist/types-IYCqCk2g.d.mts +0 -70
  349. /package/dist/{auth → common/auth}/client/index.js.map +0 -0
  350. /package/dist/{auth → common/auth}/client/index.mjs.map +0 -0
  351. /package/dist/{auth → common/auth}/hooks/index.js.map +0 -0
  352. /package/dist/{auth → common/auth}/hooks/index.mjs.map +0 -0
  353. /package/dist/{auth → common/auth/schema}/index.js.map +0 -0
  354. /package/dist/{auth → common/auth/schema}/index.mjs.map +0 -0
@@ -0,0 +1,316 @@
1
+ 'use strict';
2
+
3
+ var chunkMIDXG6LS_js = require('../../../chunk-MIDXG6LS.js');
4
+ var chunkCAYOQDBR_js = require('../../../chunk-CAYOQDBR.js');
5
+ var chunkNSBPE2FW_js = require('../../../chunk-NSBPE2FW.js');
6
+ var react = require('better-auth/react');
7
+ var plugins = require('better-auth/client/plugins');
8
+ var React = require('react');
9
+
10
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
+
12
+ var React__default = /*#__PURE__*/_interopDefault(React);
13
+
14
+ // src/common/auth/rn/token-storage.ts
15
+ var RN_BEARER_TOKEN_KEY = "sa2kit_auth_bearer_token";
16
+ var storageOverride = null;
17
+ var defaultStorage = new chunkCAYOQDBR_js.ReactNativeStorageAdapter();
18
+ function storage() {
19
+ return storageOverride ?? defaultStorage;
20
+ }
21
+ function setRnBearerTokenStorage(next) {
22
+ storageOverride = next;
23
+ }
24
+ async function getRnBearerToken() {
25
+ return storage().getItem(RN_BEARER_TOKEN_KEY);
26
+ }
27
+ async function setRnBearerToken(token) {
28
+ await storage().setItem(RN_BEARER_TOKEN_KEY, token);
29
+ }
30
+ async function clearRnBearerToken() {
31
+ await storage().removeItem(RN_BEARER_TOKEN_KEY);
32
+ }
33
+
34
+ // src/common/auth/rn/create-rn-auth-client.ts
35
+ function normalizeRnAuthBaseUrl(authApiBase) {
36
+ const trimmed = authApiBase.replace(/\/+$/, "");
37
+ if (trimmed.endsWith("/api/auth")) {
38
+ return {
39
+ baseURL: trimmed.slice(0, -"/api/auth".length),
40
+ basePath: "/api/auth"
41
+ };
42
+ }
43
+ if (trimmed.endsWith("/api")) {
44
+ return {
45
+ baseURL: trimmed.slice(0, -"/api".length),
46
+ basePath: "/api/auth"
47
+ };
48
+ }
49
+ return {
50
+ baseURL: trimmed,
51
+ basePath: "/api/auth"
52
+ };
53
+ }
54
+ function buildSa2kitRnAuthClient(options) {
55
+ return react.createAuthClient({
56
+ baseURL: options.baseURL.replace(/\/+$/, ""),
57
+ basePath: options.basePath ?? "/api/auth",
58
+ plugins: [plugins.emailOTPClient(), plugins.phoneNumberClient()],
59
+ disableDefaultFetchPlugins: false,
60
+ fetchOptions: {
61
+ credentials: "omit",
62
+ onRequest: async (ctx) => {
63
+ const token = await getRnBearerToken();
64
+ if (token) {
65
+ ctx.headers.set("Authorization", `Bearer ${token}`);
66
+ }
67
+ return ctx;
68
+ },
69
+ onResponse: async (ctx) => {
70
+ const token = ctx.response.headers.get("set-auth-token");
71
+ if (token) {
72
+ await setRnBearerToken(token);
73
+ }
74
+ return ctx;
75
+ }
76
+ }
77
+ });
78
+ }
79
+ var cachedClient = null;
80
+ var cachedKey = "";
81
+ function cacheKey(options) {
82
+ return `${options.baseURL}|${options.basePath ?? "/api/auth"}`;
83
+ }
84
+ function createSa2kitRnAuthClient(options) {
85
+ const key = cacheKey(options);
86
+ if (cachedClient && cachedKey === key) {
87
+ return cachedClient;
88
+ }
89
+ cachedClient = buildSa2kitRnAuthClient(options);
90
+ cachedKey = key;
91
+ return cachedClient;
92
+ }
93
+ function createSa2kitRnAuthClientFromApiBase(authApiBase) {
94
+ const { baseURL, basePath } = normalizeRnAuthBaseUrl(authApiBase);
95
+ return createSa2kitRnAuthClient({ baseURL, basePath });
96
+ }
97
+ async function initSa2kitRnAuthClient(options) {
98
+ const client = typeof options === "string" ? createSa2kitRnAuthClientFromApiBase(options) : createSa2kitRnAuthClient(options);
99
+ const token = await getRnBearerToken();
100
+ if (token) {
101
+ try {
102
+ await client.getSession();
103
+ } catch {
104
+ await clearRnBearerToken();
105
+ }
106
+ }
107
+ return client;
108
+ }
109
+ async function signOutSa2kitRnAuthClient(client) {
110
+ try {
111
+ await client.signOut();
112
+ } finally {
113
+ await clearRnBearerToken();
114
+ }
115
+ }
116
+ function resetSa2kitRnAuthClientCache() {
117
+ cachedClient = null;
118
+ cachedKey = "";
119
+ }
120
+
121
+ // src/common/auth/rn/sign-in.ts
122
+ function clientApi(client) {
123
+ return client;
124
+ }
125
+ async function signInWithRnAuthClient(authClient, account, password) {
126
+ const trimmed = account.trim();
127
+ try {
128
+ if (chunkMIDXG6LS_js.validatePhoneNumber(trimmed)) {
129
+ const result = await clientApi(authClient).signIn.phoneNumber({
130
+ phoneNumber: trimmed,
131
+ password
132
+ });
133
+ const err = chunkMIDXG6LS_js.getAuthClientError(result, "\u767B\u5F55\u5931\u8D25");
134
+ return err ? { success: false, error: err } : { success: true };
135
+ }
136
+ if (chunkMIDXG6LS_js.validateEmail(trimmed)) {
137
+ const result = await clientApi(authClient).signIn.email({
138
+ email: trimmed,
139
+ password
140
+ });
141
+ const err = chunkMIDXG6LS_js.getAuthClientError(result, "\u767B\u5F55\u5931\u8D25");
142
+ return err ? { success: false, error: err } : { success: true };
143
+ }
144
+ return { success: false, error: "\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7\u6216\u90AE\u7BB1" };
145
+ } catch (e) {
146
+ return { success: false, error: chunkMIDXG6LS_js.errorMessage(e, "\u767B\u5F55\u5931\u8D25") };
147
+ }
148
+ }
149
+ var ReactNative = chunkNSBPE2FW_js.__require("react-native");
150
+ var { ActivityIndicator, Pressable, Text, TextInput, View, StyleSheet } = ReactNative;
151
+ var defaultStyles = StyleSheet.create({
152
+ label: { fontSize: 12, color: "#8b98a5", marginBottom: 6, marginTop: 12 },
153
+ input: {
154
+ borderWidth: 1,
155
+ borderColor: "rgba(255,255,255,0.12)",
156
+ borderRadius: 10,
157
+ paddingHorizontal: 12,
158
+ paddingVertical: 10,
159
+ color: "#e8edf2",
160
+ backgroundColor: "rgba(0,0,0,0.2)",
161
+ fontSize: 15
162
+ },
163
+ err: { color: "#f87171", marginTop: 10, fontSize: 14 },
164
+ btn: {
165
+ marginTop: 14,
166
+ paddingVertical: 12,
167
+ borderRadius: 10,
168
+ alignItems: "center",
169
+ borderWidth: 1,
170
+ borderColor: "rgba(255,255,255,0.12)",
171
+ backgroundColor: "rgba(255,255,255,0.08)"
172
+ },
173
+ primary: { backgroundColor: "#3d9eff", borderColor: "transparent" },
174
+ disabled: { opacity: 0.6 },
175
+ btnTextPrimary: { color: "#fff", fontSize: 15, fontWeight: "600" },
176
+ centerInline: { paddingVertical: 24, alignItems: "center" }
177
+ });
178
+ var DEFAULT_LABELS = {
179
+ authApiBase: "\u8BA4\u8BC1 API \u6839\u5730\u5740\uFF08\u542B /api\uFF09",
180
+ account: "\u624B\u673A\u53F7 / \u90AE\u7BB1",
181
+ password: "\u5BC6\u7801",
182
+ submit: "\u767B\u5F55"
183
+ };
184
+ function RnAccountLoginForm({
185
+ authApiBase,
186
+ defaultAuthApiBase = "",
187
+ onAuthApiBaseChange,
188
+ submitting = false,
189
+ error = "",
190
+ onError,
191
+ onSuccess,
192
+ theme,
193
+ labels: labelsProp,
194
+ placeholders
195
+ }) {
196
+ const labels = {
197
+ ...DEFAULT_LABELS,
198
+ account: labelsProp?.account ?? labelsProp?.phone ?? labelsProp?.email ?? DEFAULT_LABELS.account,
199
+ ...labelsProp
200
+ };
201
+ const [authClient, setAuthClient] = React.useState(null);
202
+ const [account, setAccount] = React.useState("");
203
+ const [password, setPassword] = React.useState("");
204
+ const [loading, setLoading] = React.useState(false);
205
+ React.useEffect(() => {
206
+ let cancelled = false;
207
+ const base = authApiBase.trim() || defaultAuthApiBase;
208
+ if (!base) {
209
+ setAuthClient(null);
210
+ return;
211
+ }
212
+ resetSa2kitRnAuthClientCache();
213
+ initSa2kitRnAuthClient(base).then((client) => {
214
+ if (!cancelled) setAuthClient(client);
215
+ });
216
+ return () => {
217
+ cancelled = true;
218
+ };
219
+ }, [authApiBase, defaultAuthApiBase]);
220
+ const handleSubmit = React.useCallback(async () => {
221
+ if (!authClient) return;
222
+ onError?.("");
223
+ setLoading(true);
224
+ try {
225
+ const trimmedAccount = account.trim();
226
+ if (!trimmedAccount || !password) {
227
+ onError?.("\u8BF7\u586B\u5199\u8D26\u53F7\u548C\u5BC6\u7801");
228
+ return;
229
+ }
230
+ const result = await signInWithRnAuthClient(authClient, trimmedAccount, password);
231
+ if (!result.success) {
232
+ onError?.(result.error);
233
+ return;
234
+ }
235
+ const token = await getRnBearerToken();
236
+ if (!token) {
237
+ onError?.("\u767B\u5F55\u6210\u529F\u4F46\u672A\u83B7\u53D6\u5230 Bearer token");
238
+ return;
239
+ }
240
+ await onSuccess(token);
241
+ } finally {
242
+ setLoading(false);
243
+ }
244
+ }, [account, authClient, onError, onSuccess, password]);
245
+ const authApiField = onAuthApiBaseChange ? /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, null, /* @__PURE__ */ React__default.default.createElement(Text, { style: [defaultStyles.label, theme?.label] }, labels.authApiBase), /* @__PURE__ */ React__default.default.createElement(
246
+ TextInput,
247
+ {
248
+ style: [defaultStyles.input, theme?.input, theme?.inputContainer],
249
+ value: authApiBase,
250
+ onChangeText: onAuthApiBaseChange,
251
+ autoCapitalize: "none",
252
+ autoCorrect: false,
253
+ placeholder: placeholders?.authApiBase ?? defaultAuthApiBase,
254
+ placeholderTextColor: "#6b7a8a"
255
+ }
256
+ )) : null;
257
+ if (!authClient) {
258
+ return /* @__PURE__ */ React__default.default.createElement(View, { style: [defaultStyles.centerInline, theme?.loadingContainer] }, /* @__PURE__ */ React__default.default.createElement(ActivityIndicator, null));
259
+ }
260
+ const busy = loading || submitting;
261
+ return /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, null, authApiField, /* @__PURE__ */ React__default.default.createElement(Text, { style: [defaultStyles.label, theme?.label] }, labels.account), /* @__PURE__ */ React__default.default.createElement(
262
+ TextInput,
263
+ {
264
+ style: [defaultStyles.input, theme?.input, theme?.inputContainer],
265
+ value: account,
266
+ onChangeText: setAccount,
267
+ keyboardType: "email-address",
268
+ autoCapitalize: "none",
269
+ autoCorrect: false,
270
+ placeholder: placeholders?.account ?? placeholders?.phone ?? "\u624B\u673A\u53F7\u6216\u90AE\u7BB1",
271
+ placeholderTextColor: "#6b7a8a"
272
+ }
273
+ ), /* @__PURE__ */ React__default.default.createElement(Text, { style: [defaultStyles.label, theme?.label] }, labels.password), /* @__PURE__ */ React__default.default.createElement(
274
+ TextInput,
275
+ {
276
+ style: [defaultStyles.input, theme?.input, theme?.inputContainer],
277
+ value: password,
278
+ onChangeText: setPassword,
279
+ secureTextEntry: true,
280
+ autoCapitalize: "none",
281
+ autoCorrect: false,
282
+ placeholder: placeholders?.password ?? "\u5BC6\u7801",
283
+ placeholderTextColor: "#6b7a8a"
284
+ }
285
+ ), error ? /* @__PURE__ */ React__default.default.createElement(Text, { style: [defaultStyles.err, theme?.error] }, error) : null, /* @__PURE__ */ React__default.default.createElement(
286
+ Pressable,
287
+ {
288
+ style: [
289
+ defaultStyles.btn,
290
+ defaultStyles.primary,
291
+ theme?.button,
292
+ theme?.buttonPrimary,
293
+ busy && (theme?.buttonDisabled ?? defaultStyles.disabled)
294
+ ],
295
+ onPress: () => void handleSubmit(),
296
+ disabled: busy
297
+ },
298
+ busy ? /* @__PURE__ */ React__default.default.createElement(ActivityIndicator, { color: "#fff" }) : /* @__PURE__ */ React__default.default.createElement(Text, { style: [defaultStyles.btnTextPrimary, theme?.buttonTextPrimary] }, labels.submit)
299
+ ));
300
+ }
301
+
302
+ exports.RN_BEARER_TOKEN_KEY = RN_BEARER_TOKEN_KEY;
303
+ exports.RnAccountLoginForm = RnAccountLoginForm;
304
+ exports.clearRnBearerToken = clearRnBearerToken;
305
+ exports.createSa2kitRnAuthClient = createSa2kitRnAuthClient;
306
+ exports.createSa2kitRnAuthClientFromApiBase = createSa2kitRnAuthClientFromApiBase;
307
+ exports.getRnBearerToken = getRnBearerToken;
308
+ exports.initSa2kitRnAuthClient = initSa2kitRnAuthClient;
309
+ exports.normalizeRnAuthBaseUrl = normalizeRnAuthBaseUrl;
310
+ exports.resetSa2kitRnAuthClientCache = resetSa2kitRnAuthClientCache;
311
+ exports.setRnBearerToken = setRnBearerToken;
312
+ exports.setRnBearerTokenStorage = setRnBearerTokenStorage;
313
+ exports.signInWithRnAuthClient = signInWithRnAuthClient;
314
+ exports.signOutSa2kitRnAuthClient = signOutSa2kitRnAuthClient;
315
+ //# sourceMappingURL=index.js.map
316
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/common/auth/rn/token-storage.ts","../../../../src/common/auth/rn/create-rn-auth-client.ts","../../../../src/common/auth/rn/sign-in.ts","../../../../src/common/auth/rn/components/AccountLoginForm.tsx"],"names":["ReactNativeStorageAdapter","createAuthClient","emailOTPClient","phoneNumberClient","validatePhoneNumber","getAuthClientError","validateEmail","errorMessage","__require","useState","useEffect","useCallback","React"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * RN Bearer Token 持久化(AsyncStorage)\n */\nimport { ReactNativeStorageAdapter } from '../../../storage/adapters/react-native-adapter';\n\nexport const RN_BEARER_TOKEN_KEY = 'sa2kit_auth_bearer_token';\n\nexport type RnBearerTokenStorage = {\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n};\n\nlet storageOverride: RnBearerTokenStorage | null = null;\nconst defaultStorage = new ReactNativeStorageAdapter();\n\nfunction storage(): RnBearerTokenStorage {\n return storageOverride ?? defaultStorage;\n}\n\n/** 测试或自定义存储注入 */\nexport function setRnBearerTokenStorage(next: RnBearerTokenStorage | null): void {\n storageOverride = next;\n}\n\nexport async function getRnBearerToken(): Promise<string | null> {\n return storage().getItem(RN_BEARER_TOKEN_KEY);\n}\n\nexport async function setRnBearerToken(token: string): Promise<void> {\n await storage().setItem(RN_BEARER_TOKEN_KEY, token);\n}\n\nexport async function clearRnBearerToken(): Promise<void> {\n await storage().removeItem(RN_BEARER_TOKEN_KEY);\n}\n","/**\n * Better Auth RN 客户端(Bearer + AsyncStorage,无 Cookie)\n */\nimport { createAuthClient } from 'better-auth/react';\nimport { emailOTPClient } from 'better-auth/client/plugins';\nimport { phoneNumberClient } from 'better-auth/client/plugins';\nimport {\n clearRnBearerToken,\n getRnBearerToken,\n setRnBearerToken,\n} from './token-storage';\n\nexport type Sa2kitRnAuthClientOptions = {\n /** 应用根地址,如 http://10.0.2.2:3000 */\n baseURL: string;\n basePath?: string;\n};\n\n/**\n * 兼容 legacy `authApiBase`(含 `/api` 或 `/api/auth` 后缀)\n */\nexport function normalizeRnAuthBaseUrl(authApiBase: string): {\n baseURL: string;\n basePath: string;\n} {\n const trimmed = authApiBase.replace(/\\/+$/, '');\n if (trimmed.endsWith('/api/auth')) {\n return {\n baseURL: trimmed.slice(0, -'/api/auth'.length),\n basePath: '/api/auth',\n };\n }\n if (trimmed.endsWith('/api')) {\n return {\n baseURL: trimmed.slice(0, -'/api'.length),\n basePath: '/api/auth',\n };\n }\n return {\n baseURL: trimmed,\n basePath: '/api/auth',\n };\n}\n\nfunction buildSa2kitRnAuthClient(options: Sa2kitRnAuthClientOptions) {\n return createAuthClient({\n baseURL: options.baseURL.replace(/\\/+$/, ''),\n basePath: options.basePath ?? '/api/auth',\n plugins: [emailOTPClient(), phoneNumberClient()],\n disableDefaultFetchPlugins: false,\n fetchOptions: {\n credentials: 'omit',\n onRequest: async (ctx) => {\n const token = await getRnBearerToken();\n if (token) {\n ctx.headers.set('Authorization', `Bearer ${token}`);\n }\n return ctx;\n },\n onResponse: async (ctx) => {\n const token = ctx.response.headers.get('set-auth-token');\n if (token) {\n await setRnBearerToken(token);\n }\n return ctx;\n },\n },\n });\n}\n\nexport type Sa2kitRnAuthClient = ReturnType<typeof buildSa2kitRnAuthClient>;\n\nlet cachedClient: Sa2kitRnAuthClient | null = null;\nlet cachedKey = '';\n\nfunction cacheKey(options: Sa2kitRnAuthClientOptions): string {\n return `${options.baseURL}|${options.basePath ?? '/api/auth'}`;\n}\n\nexport function createSa2kitRnAuthClient(options: Sa2kitRnAuthClientOptions): Sa2kitRnAuthClient {\n const key = cacheKey(options);\n if (cachedClient && cachedKey === key) {\n return cachedClient;\n }\n cachedClient = buildSa2kitRnAuthClient(options);\n cachedKey = key;\n return cachedClient;\n}\n\n/** 从 legacy authApiBase 创建客户端 */\nexport function createSa2kitRnAuthClientFromApiBase(authApiBase: string): Sa2kitRnAuthClient {\n const { baseURL, basePath } = normalizeRnAuthBaseUrl(authApiBase);\n return createSa2kitRnAuthClient({ baseURL, basePath });\n}\n\nexport async function initSa2kitRnAuthClient(\n options: Sa2kitRnAuthClientOptions | string,\n): Promise<Sa2kitRnAuthClient> {\n const client =\n typeof options === 'string'\n ? createSa2kitRnAuthClientFromApiBase(options)\n : createSa2kitRnAuthClient(options);\n\n const token = await getRnBearerToken();\n if (token) {\n try {\n await client.getSession();\n } catch {\n await clearRnBearerToken();\n }\n }\n return client;\n}\n\nexport async function signOutSa2kitRnAuthClient(client: Sa2kitRnAuthClient): Promise<void> {\n try {\n await client.signOut();\n } finally {\n await clearRnBearerToken();\n }\n}\n\nexport function resetSa2kitRnAuthClientCache(): void {\n cachedClient = null;\n cachedKey = '';\n}\n","import { validateEmail, validatePhoneNumber } from '../components/utils';\nimport { getAuthClientError, errorMessage } from '../components/utils';\nimport type { Sa2kitRnAuthClient } from './create-rn-auth-client';\n\ntype AuthClientLike = Sa2kitRnAuthClient & Record<string, unknown>;\n\nfunction clientApi(client: Sa2kitRnAuthClient): AuthClientLike {\n return client as AuthClientLike;\n}\n\nexport async function signInWithRnAuthClient(\n authClient: Sa2kitRnAuthClient,\n account: string,\n password: string,\n): Promise<{ success: true } | { success: false; error: string }> {\n const trimmed = account.trim();\n try {\n if (validatePhoneNumber(trimmed)) {\n const result = await clientApi(authClient).signIn.phoneNumber({\n phoneNumber: trimmed,\n password,\n });\n const err = getAuthClientError(result, '登录失败');\n return err ? { success: false, error: err } : { success: true };\n }\n\n if (validateEmail(trimmed)) {\n const result = await clientApi(authClient).signIn.email({\n email: trimmed,\n password,\n });\n const err = getAuthClientError(result, '登录失败');\n return err ? { success: false, error: err } : { success: true };\n }\n\n return { success: false, error: '请输入正确的手机号或邮箱' };\n } catch (e) {\n return { success: false, error: errorMessage(e, '登录失败') };\n }\n}\n","/**\n * RN 账密登录(Better Auth 3.0 — 手机/邮箱 + Bearer)\n */\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { validateEmail, validatePhoneNumber } from '../../components/utils';\nimport {\n initSa2kitRnAuthClient,\n resetSa2kitRnAuthClientCache,\n type Sa2kitRnAuthClient,\n} from '../create-rn-auth-client';\nimport { getRnBearerToken } from '../token-storage';\nimport { signInWithRnAuthClient } from '../sign-in';\n\n// @ts-expect-error react-native 由宿主在运行时提供\nconst ReactNative = require('react-native') as typeof import('react-native');\nconst { ActivityIndicator, Pressable, Text, TextInput, View, StyleSheet } = ReactNative;\n\nconst defaultStyles = StyleSheet.create({\n label: { fontSize: 12, color: '#8b98a5', marginBottom: 6, marginTop: 12 },\n input: {\n borderWidth: 1,\n borderColor: 'rgba(255,255,255,0.12)',\n borderRadius: 10,\n paddingHorizontal: 12,\n paddingVertical: 10,\n color: '#e8edf2',\n backgroundColor: 'rgba(0,0,0,0.2)',\n fontSize: 15,\n },\n err: { color: '#f87171', marginTop: 10, fontSize: 14 },\n btn: {\n marginTop: 14,\n paddingVertical: 12,\n borderRadius: 10,\n alignItems: 'center',\n borderWidth: 1,\n borderColor: 'rgba(255,255,255,0.12)',\n backgroundColor: 'rgba(255,255,255,0.08)',\n },\n primary: { backgroundColor: '#3d9eff', borderColor: 'transparent' },\n disabled: { opacity: 0.6 },\n btnTextPrimary: { color: '#fff', fontSize: 15, fontWeight: '600' },\n centerInline: { paddingVertical: 24, alignItems: 'center' },\n});\n\nconst DEFAULT_LABELS = {\n authApiBase: '认证 API 根地址(含 /api)',\n account: '手机号 / 邮箱',\n password: '密码',\n submit: '登录',\n} as const;\n\nexport type RnAccountLoginTheme = Partial<{\n label: object;\n input: object;\n inputContainer: object;\n error: object;\n button: object;\n buttonPrimary: object;\n buttonText: object;\n buttonTextPrimary: object;\n buttonDisabled: object;\n loadingContainer: object;\n}>;\n\nexport type RnAccountLoginLabels = {\n authApiBase?: string;\n account?: string;\n phone?: string;\n email?: string;\n password?: string;\n submit?: string;\n};\n\nexport type RnAccountLoginFormProps = {\n authApiBase: string;\n defaultAuthApiBase?: string;\n onAuthApiBaseChange?: (value: string) => void;\n submitting?: boolean;\n error?: string;\n onError?: (message: string) => void;\n /** 登录成功,返回 Bearer session token */\n onSuccess: (token: string) => void | Promise<void>;\n theme?: RnAccountLoginTheme;\n labels?: RnAccountLoginLabels;\n placeholders?: {\n authApiBase?: string;\n account?: string;\n phone?: string;\n email?: string;\n password?: string;\n };\n};\n\nexport function RnAccountLoginForm({\n authApiBase,\n defaultAuthApiBase = '',\n onAuthApiBaseChange,\n submitting = false,\n error = '',\n onError,\n onSuccess,\n theme,\n labels: labelsProp,\n placeholders,\n}: RnAccountLoginFormProps) {\n const labels = {\n ...DEFAULT_LABELS,\n account: labelsProp?.account ?? labelsProp?.phone ?? labelsProp?.email ?? DEFAULT_LABELS.account,\n ...labelsProp,\n };\n const [authClient, setAuthClient] = useState<Sa2kitRnAuthClient | null>(null);\n const [account, setAccount] = useState('');\n const [password, setPassword] = useState('');\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n let cancelled = false;\n const base = authApiBase.trim() || defaultAuthApiBase;\n if (!base) {\n setAuthClient(null);\n return;\n }\n resetSa2kitRnAuthClientCache();\n initSa2kitRnAuthClient(base).then((client) => {\n if (!cancelled) setAuthClient(client);\n });\n return () => {\n cancelled = true;\n };\n }, [authApiBase, defaultAuthApiBase]);\n\n const handleSubmit = useCallback(async () => {\n if (!authClient) return;\n onError?.('');\n setLoading(true);\n try {\n const trimmedAccount = account.trim();\n if (!trimmedAccount || !password) {\n onError?.('请填写账号和密码');\n return;\n }\n\n const result = await signInWithRnAuthClient(authClient, trimmedAccount, password);\n if (!result.success) {\n onError?.(result.error);\n return;\n }\n\n const token = await getRnBearerToken();\n if (!token) {\n onError?.('登录成功但未获取到 Bearer token');\n return;\n }\n await onSuccess(token);\n } finally {\n setLoading(false);\n }\n }, [account, authClient, onError, onSuccess, password]);\n\n const authApiField = onAuthApiBaseChange ? (\n <>\n <Text style={[defaultStyles.label, theme?.label]}>{labels.authApiBase}</Text>\n <TextInput\n style={[defaultStyles.input, theme?.input, theme?.inputContainer]}\n value={authApiBase}\n onChangeText={onAuthApiBaseChange}\n autoCapitalize=\"none\"\n autoCorrect={false}\n placeholder={placeholders?.authApiBase ?? defaultAuthApiBase}\n placeholderTextColor=\"#6b7a8a\"\n />\n </>\n ) : null;\n\n if (!authClient) {\n return (\n <View style={[defaultStyles.centerInline, theme?.loadingContainer]}>\n <ActivityIndicator />\n </View>\n );\n }\n\n const busy = loading || submitting;\n\n return (\n <>\n {authApiField}\n <Text style={[defaultStyles.label, theme?.label]}>{labels.account}</Text>\n <TextInput\n style={[defaultStyles.input, theme?.input, theme?.inputContainer]}\n value={account}\n onChangeText={setAccount}\n keyboardType=\"email-address\"\n autoCapitalize=\"none\"\n autoCorrect={false}\n placeholder={placeholders?.account ?? placeholders?.phone ?? '手机号或邮箱'}\n placeholderTextColor=\"#6b7a8a\"\n />\n <Text style={[defaultStyles.label, theme?.label]}>{labels.password}</Text>\n <TextInput\n style={[defaultStyles.input, theme?.input, theme?.inputContainer]}\n value={password}\n onChangeText={setPassword}\n secureTextEntry\n autoCapitalize=\"none\"\n autoCorrect={false}\n placeholder={placeholders?.password ?? '密码'}\n placeholderTextColor=\"#6b7a8a\"\n />\n {error ? <Text style={[defaultStyles.err, theme?.error]}>{error}</Text> : null}\n <Pressable\n style={[\n defaultStyles.btn,\n defaultStyles.primary,\n theme?.button,\n theme?.buttonPrimary,\n busy && (theme?.buttonDisabled ?? defaultStyles.disabled),\n ]}\n onPress={() => void handleSubmit()}\n disabled={busy}>\n {busy ? (\n <ActivityIndicator color=\"#fff\" />\n ) : (\n <Text style={[defaultStyles.btnTextPrimary, theme?.buttonTextPrimary]}>{labels.submit}</Text>\n )}\n </Pressable>\n </>\n );\n}\n\n/** @deprecated 使用 validatePhoneNumber */\nexport function isPhoneAccount(account: string): boolean {\n return validatePhoneNumber(account.trim());\n}\n"]}
@@ -0,0 +1,298 @@
1
+ import { validatePhoneNumber, getAuthClientError, validateEmail, errorMessage } from '../../../chunk-ZF7DKR5A.mjs';
2
+ import { ReactNativeStorageAdapter } from '../../../chunk-Q5VFBPMG.mjs';
3
+ import { __require } from '../../../chunk-MAI35PU6.mjs';
4
+ import { createAuthClient } from 'better-auth/react';
5
+ import { emailOTPClient, phoneNumberClient } from 'better-auth/client/plugins';
6
+ import React, { useState, useEffect, useCallback } from 'react';
7
+
8
+ // src/common/auth/rn/token-storage.ts
9
+ var RN_BEARER_TOKEN_KEY = "sa2kit_auth_bearer_token";
10
+ var storageOverride = null;
11
+ var defaultStorage = new ReactNativeStorageAdapter();
12
+ function storage() {
13
+ return storageOverride ?? defaultStorage;
14
+ }
15
+ function setRnBearerTokenStorage(next) {
16
+ storageOverride = next;
17
+ }
18
+ async function getRnBearerToken() {
19
+ return storage().getItem(RN_BEARER_TOKEN_KEY);
20
+ }
21
+ async function setRnBearerToken(token) {
22
+ await storage().setItem(RN_BEARER_TOKEN_KEY, token);
23
+ }
24
+ async function clearRnBearerToken() {
25
+ await storage().removeItem(RN_BEARER_TOKEN_KEY);
26
+ }
27
+
28
+ // src/common/auth/rn/create-rn-auth-client.ts
29
+ function normalizeRnAuthBaseUrl(authApiBase) {
30
+ const trimmed = authApiBase.replace(/\/+$/, "");
31
+ if (trimmed.endsWith("/api/auth")) {
32
+ return {
33
+ baseURL: trimmed.slice(0, -"/api/auth".length),
34
+ basePath: "/api/auth"
35
+ };
36
+ }
37
+ if (trimmed.endsWith("/api")) {
38
+ return {
39
+ baseURL: trimmed.slice(0, -"/api".length),
40
+ basePath: "/api/auth"
41
+ };
42
+ }
43
+ return {
44
+ baseURL: trimmed,
45
+ basePath: "/api/auth"
46
+ };
47
+ }
48
+ function buildSa2kitRnAuthClient(options) {
49
+ return createAuthClient({
50
+ baseURL: options.baseURL.replace(/\/+$/, ""),
51
+ basePath: options.basePath ?? "/api/auth",
52
+ plugins: [emailOTPClient(), phoneNumberClient()],
53
+ disableDefaultFetchPlugins: false,
54
+ fetchOptions: {
55
+ credentials: "omit",
56
+ onRequest: async (ctx) => {
57
+ const token = await getRnBearerToken();
58
+ if (token) {
59
+ ctx.headers.set("Authorization", `Bearer ${token}`);
60
+ }
61
+ return ctx;
62
+ },
63
+ onResponse: async (ctx) => {
64
+ const token = ctx.response.headers.get("set-auth-token");
65
+ if (token) {
66
+ await setRnBearerToken(token);
67
+ }
68
+ return ctx;
69
+ }
70
+ }
71
+ });
72
+ }
73
+ var cachedClient = null;
74
+ var cachedKey = "";
75
+ function cacheKey(options) {
76
+ return `${options.baseURL}|${options.basePath ?? "/api/auth"}`;
77
+ }
78
+ function createSa2kitRnAuthClient(options) {
79
+ const key = cacheKey(options);
80
+ if (cachedClient && cachedKey === key) {
81
+ return cachedClient;
82
+ }
83
+ cachedClient = buildSa2kitRnAuthClient(options);
84
+ cachedKey = key;
85
+ return cachedClient;
86
+ }
87
+ function createSa2kitRnAuthClientFromApiBase(authApiBase) {
88
+ const { baseURL, basePath } = normalizeRnAuthBaseUrl(authApiBase);
89
+ return createSa2kitRnAuthClient({ baseURL, basePath });
90
+ }
91
+ async function initSa2kitRnAuthClient(options) {
92
+ const client = typeof options === "string" ? createSa2kitRnAuthClientFromApiBase(options) : createSa2kitRnAuthClient(options);
93
+ const token = await getRnBearerToken();
94
+ if (token) {
95
+ try {
96
+ await client.getSession();
97
+ } catch {
98
+ await clearRnBearerToken();
99
+ }
100
+ }
101
+ return client;
102
+ }
103
+ async function signOutSa2kitRnAuthClient(client) {
104
+ try {
105
+ await client.signOut();
106
+ } finally {
107
+ await clearRnBearerToken();
108
+ }
109
+ }
110
+ function resetSa2kitRnAuthClientCache() {
111
+ cachedClient = null;
112
+ cachedKey = "";
113
+ }
114
+
115
+ // src/common/auth/rn/sign-in.ts
116
+ function clientApi(client) {
117
+ return client;
118
+ }
119
+ async function signInWithRnAuthClient(authClient, account, password) {
120
+ const trimmed = account.trim();
121
+ try {
122
+ if (validatePhoneNumber(trimmed)) {
123
+ const result = await clientApi(authClient).signIn.phoneNumber({
124
+ phoneNumber: trimmed,
125
+ password
126
+ });
127
+ const err = getAuthClientError(result, "\u767B\u5F55\u5931\u8D25");
128
+ return err ? { success: false, error: err } : { success: true };
129
+ }
130
+ if (validateEmail(trimmed)) {
131
+ const result = await clientApi(authClient).signIn.email({
132
+ email: trimmed,
133
+ password
134
+ });
135
+ const err = getAuthClientError(result, "\u767B\u5F55\u5931\u8D25");
136
+ return err ? { success: false, error: err } : { success: true };
137
+ }
138
+ return { success: false, error: "\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7\u6216\u90AE\u7BB1" };
139
+ } catch (e) {
140
+ return { success: false, error: errorMessage(e, "\u767B\u5F55\u5931\u8D25") };
141
+ }
142
+ }
143
+ var ReactNative = __require("react-native");
144
+ var { ActivityIndicator, Pressable, Text, TextInput, View, StyleSheet } = ReactNative;
145
+ var defaultStyles = StyleSheet.create({
146
+ label: { fontSize: 12, color: "#8b98a5", marginBottom: 6, marginTop: 12 },
147
+ input: {
148
+ borderWidth: 1,
149
+ borderColor: "rgba(255,255,255,0.12)",
150
+ borderRadius: 10,
151
+ paddingHorizontal: 12,
152
+ paddingVertical: 10,
153
+ color: "#e8edf2",
154
+ backgroundColor: "rgba(0,0,0,0.2)",
155
+ fontSize: 15
156
+ },
157
+ err: { color: "#f87171", marginTop: 10, fontSize: 14 },
158
+ btn: {
159
+ marginTop: 14,
160
+ paddingVertical: 12,
161
+ borderRadius: 10,
162
+ alignItems: "center",
163
+ borderWidth: 1,
164
+ borderColor: "rgba(255,255,255,0.12)",
165
+ backgroundColor: "rgba(255,255,255,0.08)"
166
+ },
167
+ primary: { backgroundColor: "#3d9eff", borderColor: "transparent" },
168
+ disabled: { opacity: 0.6 },
169
+ btnTextPrimary: { color: "#fff", fontSize: 15, fontWeight: "600" },
170
+ centerInline: { paddingVertical: 24, alignItems: "center" }
171
+ });
172
+ var DEFAULT_LABELS = {
173
+ authApiBase: "\u8BA4\u8BC1 API \u6839\u5730\u5740\uFF08\u542B /api\uFF09",
174
+ account: "\u624B\u673A\u53F7 / \u90AE\u7BB1",
175
+ password: "\u5BC6\u7801",
176
+ submit: "\u767B\u5F55"
177
+ };
178
+ function RnAccountLoginForm({
179
+ authApiBase,
180
+ defaultAuthApiBase = "",
181
+ onAuthApiBaseChange,
182
+ submitting = false,
183
+ error = "",
184
+ onError,
185
+ onSuccess,
186
+ theme,
187
+ labels: labelsProp,
188
+ placeholders
189
+ }) {
190
+ const labels = {
191
+ ...DEFAULT_LABELS,
192
+ account: labelsProp?.account ?? labelsProp?.phone ?? labelsProp?.email ?? DEFAULT_LABELS.account,
193
+ ...labelsProp
194
+ };
195
+ const [authClient, setAuthClient] = useState(null);
196
+ const [account, setAccount] = useState("");
197
+ const [password, setPassword] = useState("");
198
+ const [loading, setLoading] = useState(false);
199
+ useEffect(() => {
200
+ let cancelled = false;
201
+ const base = authApiBase.trim() || defaultAuthApiBase;
202
+ if (!base) {
203
+ setAuthClient(null);
204
+ return;
205
+ }
206
+ resetSa2kitRnAuthClientCache();
207
+ initSa2kitRnAuthClient(base).then((client) => {
208
+ if (!cancelled) setAuthClient(client);
209
+ });
210
+ return () => {
211
+ cancelled = true;
212
+ };
213
+ }, [authApiBase, defaultAuthApiBase]);
214
+ const handleSubmit = useCallback(async () => {
215
+ if (!authClient) return;
216
+ onError?.("");
217
+ setLoading(true);
218
+ try {
219
+ const trimmedAccount = account.trim();
220
+ if (!trimmedAccount || !password) {
221
+ onError?.("\u8BF7\u586B\u5199\u8D26\u53F7\u548C\u5BC6\u7801");
222
+ return;
223
+ }
224
+ const result = await signInWithRnAuthClient(authClient, trimmedAccount, password);
225
+ if (!result.success) {
226
+ onError?.(result.error);
227
+ return;
228
+ }
229
+ const token = await getRnBearerToken();
230
+ if (!token) {
231
+ onError?.("\u767B\u5F55\u6210\u529F\u4F46\u672A\u83B7\u53D6\u5230 Bearer token");
232
+ return;
233
+ }
234
+ await onSuccess(token);
235
+ } finally {
236
+ setLoading(false);
237
+ }
238
+ }, [account, authClient, onError, onSuccess, password]);
239
+ const authApiField = onAuthApiBaseChange ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Text, { style: [defaultStyles.label, theme?.label] }, labels.authApiBase), /* @__PURE__ */ React.createElement(
240
+ TextInput,
241
+ {
242
+ style: [defaultStyles.input, theme?.input, theme?.inputContainer],
243
+ value: authApiBase,
244
+ onChangeText: onAuthApiBaseChange,
245
+ autoCapitalize: "none",
246
+ autoCorrect: false,
247
+ placeholder: placeholders?.authApiBase ?? defaultAuthApiBase,
248
+ placeholderTextColor: "#6b7a8a"
249
+ }
250
+ )) : null;
251
+ if (!authClient) {
252
+ return /* @__PURE__ */ React.createElement(View, { style: [defaultStyles.centerInline, theme?.loadingContainer] }, /* @__PURE__ */ React.createElement(ActivityIndicator, null));
253
+ }
254
+ const busy = loading || submitting;
255
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, authApiField, /* @__PURE__ */ React.createElement(Text, { style: [defaultStyles.label, theme?.label] }, labels.account), /* @__PURE__ */ React.createElement(
256
+ TextInput,
257
+ {
258
+ style: [defaultStyles.input, theme?.input, theme?.inputContainer],
259
+ value: account,
260
+ onChangeText: setAccount,
261
+ keyboardType: "email-address",
262
+ autoCapitalize: "none",
263
+ autoCorrect: false,
264
+ placeholder: placeholders?.account ?? placeholders?.phone ?? "\u624B\u673A\u53F7\u6216\u90AE\u7BB1",
265
+ placeholderTextColor: "#6b7a8a"
266
+ }
267
+ ), /* @__PURE__ */ React.createElement(Text, { style: [defaultStyles.label, theme?.label] }, labels.password), /* @__PURE__ */ React.createElement(
268
+ TextInput,
269
+ {
270
+ style: [defaultStyles.input, theme?.input, theme?.inputContainer],
271
+ value: password,
272
+ onChangeText: setPassword,
273
+ secureTextEntry: true,
274
+ autoCapitalize: "none",
275
+ autoCorrect: false,
276
+ placeholder: placeholders?.password ?? "\u5BC6\u7801",
277
+ placeholderTextColor: "#6b7a8a"
278
+ }
279
+ ), error ? /* @__PURE__ */ React.createElement(Text, { style: [defaultStyles.err, theme?.error] }, error) : null, /* @__PURE__ */ React.createElement(
280
+ Pressable,
281
+ {
282
+ style: [
283
+ defaultStyles.btn,
284
+ defaultStyles.primary,
285
+ theme?.button,
286
+ theme?.buttonPrimary,
287
+ busy && (theme?.buttonDisabled ?? defaultStyles.disabled)
288
+ ],
289
+ onPress: () => void handleSubmit(),
290
+ disabled: busy
291
+ },
292
+ busy ? /* @__PURE__ */ React.createElement(ActivityIndicator, { color: "#fff" }) : /* @__PURE__ */ React.createElement(Text, { style: [defaultStyles.btnTextPrimary, theme?.buttonTextPrimary] }, labels.submit)
293
+ ));
294
+ }
295
+
296
+ export { RN_BEARER_TOKEN_KEY, RnAccountLoginForm, clearRnBearerToken, createSa2kitRnAuthClient, createSa2kitRnAuthClientFromApiBase, getRnBearerToken, initSa2kitRnAuthClient, normalizeRnAuthBaseUrl, resetSa2kitRnAuthClientCache, setRnBearerToken, setRnBearerTokenStorage, signInWithRnAuthClient, signOutSa2kitRnAuthClient };
297
+ //# sourceMappingURL=index.mjs.map
298
+ //# sourceMappingURL=index.mjs.map