sa2kit 2.0.4 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (347) hide show
  1. package/dist/{UniversalFileService-GsP6D3Rc.d.ts → UniversalFileService-CC4d3wkc.d.ts} +2 -2
  2. package/dist/{UniversalFileService-BpvbZitV.d.mts → UniversalFileService-CzAE_G4V.d.mts} +2 -2
  3. package/dist/auth/client/index.d.mts +8 -27
  4. package/dist/auth/client/index.d.ts +8 -27
  5. package/dist/auth/client/index.js +9 -4
  6. package/dist/auth/client/index.mjs +2 -1
  7. package/dist/auth/components/index.d.mts +8 -225
  8. package/dist/auth/components/index.d.ts +8 -225
  9. package/dist/auth/components/index.js +62 -319
  10. package/dist/auth/components/index.js.map +1 -1
  11. package/dist/auth/components/index.mjs +6 -316
  12. package/dist/auth/components/index.mjs.map +1 -1
  13. package/dist/auth/hooks/index.d.mts +11 -29
  14. package/dist/auth/hooks/index.d.ts +11 -29
  15. package/dist/auth/hooks/index.js +14 -3
  16. package/dist/auth/hooks/index.mjs +4 -1
  17. package/dist/auth/index.d.mts +17 -14
  18. package/dist/auth/index.d.ts +17 -14
  19. package/dist/auth/index.js +51 -90
  20. package/dist/auth/index.mjs +8 -7
  21. package/dist/auth/rn/index.d.mts +3087 -18
  22. package/dist/auth/rn/index.d.ts +3087 -18
  23. package/dist/auth/rn/index.js +396 -477
  24. package/dist/auth/rn/index.js.map +1 -1
  25. package/dist/auth/rn/index.mjs +384 -475
  26. package/dist/auth/rn/index.mjs.map +1 -1
  27. package/dist/auth/schema/index.d.mts +3 -788
  28. package/dist/auth/schema/index.d.ts +3 -788
  29. package/dist/auth/schema/index.js +17 -9
  30. package/dist/auth/schema/index.mjs +1 -1
  31. package/dist/auth/services/index.d.mts +1 -48
  32. package/dist/auth/services/index.d.ts +1 -48
  33. package/dist/auth/services/index.js +3 -20
  34. package/dist/auth/services/index.mjs +1 -2
  35. package/dist/{base-api-client-B3wZZoaH.d.ts → base-api-client-BpmcQt4Q.d.ts} +1 -1
  36. package/dist/{base-api-client-ACKKt13v.d.mts → base-api-client-CFIhZK4C.d.mts} +1 -1
  37. package/dist/{base-api-client-ACKKt13v.d.ts → base-api-client-CFIhZK4C.d.ts} +1 -1
  38. package/dist/{base-api-client-DrL35Ea2.d.mts → base-api-client-DXLsq2yz.d.mts} +1 -1
  39. package/dist/business/index.d.mts +1 -5
  40. package/dist/business/index.d.ts +1 -5
  41. package/dist/business/index.js +34 -1135
  42. package/dist/business/index.js.map +1 -1
  43. package/dist/business/index.mjs +5 -1105
  44. package/dist/business/index.mjs.map +1 -1
  45. package/dist/calendar/routes/index.d.mts +74 -1
  46. package/dist/calendar/routes/index.d.ts +74 -1
  47. package/dist/calendar/routes/index.js +186 -97
  48. package/dist/calendar/routes/index.js.map +1 -1
  49. package/dist/calendar/routes/index.mjs +178 -99
  50. package/dist/calendar/routes/index.mjs.map +1 -1
  51. package/dist/{chunk-IIVNHQEI.mjs → chunk-5GBDDXYL.mjs} +4 -3
  52. package/dist/chunk-5GBDDXYL.mjs.map +1 -0
  53. package/dist/chunk-7E3J7VAD.mjs +3 -0
  54. package/dist/chunk-7E3J7VAD.mjs.map +1 -0
  55. package/dist/chunk-B3CZ3HXJ.mjs +126 -0
  56. package/dist/chunk-B3CZ3HXJ.mjs.map +1 -0
  57. package/dist/chunk-CAYOQDBR.js +78 -0
  58. package/dist/chunk-CAYOQDBR.js.map +1 -0
  59. package/dist/{chunk-PTMSDNGO.mjs → chunk-CX2GHCAI.mjs} +4 -75
  60. package/dist/chunk-CX2GHCAI.mjs.map +1 -0
  61. package/dist/chunk-EBHPTFG6.mjs +82 -0
  62. package/dist/chunk-EBHPTFG6.mjs.map +1 -0
  63. package/dist/chunk-FOQEQWX5.js +4 -0
  64. package/dist/chunk-FOQEQWX5.js.map +1 -0
  65. package/dist/{chunk-YGI7UU2D.mjs → chunk-G4NFB2QA.mjs} +2 -2
  66. package/dist/chunk-G4NFB2QA.mjs.map +1 -0
  67. package/dist/chunk-G5HJGXGC.mjs +39 -0
  68. package/dist/chunk-G5HJGXGC.mjs.map +1 -0
  69. package/dist/{chunk-GSNGCENJ.js → chunk-GQZHGSRR.js} +2 -39
  70. package/dist/chunk-GQZHGSRR.js.map +1 -0
  71. package/dist/chunk-GS7XLKET.js +41 -0
  72. package/dist/chunk-GS7XLKET.js.map +1 -0
  73. package/dist/{chunk-7B5SI4OF.mjs → chunk-IBWDBBX5.mjs} +4 -3
  74. package/dist/chunk-IBWDBBX5.mjs.map +1 -0
  75. package/dist/chunk-IS7O4LPI.js +146 -0
  76. package/dist/chunk-IS7O4LPI.js.map +1 -0
  77. package/dist/chunk-LGHUCQIU.js +93 -0
  78. package/dist/chunk-LGHUCQIU.js.map +1 -0
  79. package/dist/chunk-LHJKLUM7.mjs +18 -0
  80. package/dist/chunk-LHJKLUM7.mjs.map +1 -0
  81. package/dist/chunk-LKBIVQBT.mjs +34 -0
  82. package/dist/chunk-LKBIVQBT.mjs.map +1 -0
  83. package/dist/chunk-MIDXG6LS.js +32 -0
  84. package/dist/chunk-MIDXG6LS.js.map +1 -0
  85. package/dist/chunk-MWSAH7ZG.mjs +42 -0
  86. package/dist/chunk-MWSAH7ZG.mjs.map +1 -0
  87. package/dist/{chunk-HCI6JQOU.mjs → chunk-MZOGYD4N.mjs} +7 -4
  88. package/dist/chunk-MZOGYD4N.mjs.map +1 -0
  89. package/dist/chunk-NDGHXVGS.js +25 -0
  90. package/dist/chunk-NDGHXVGS.js.map +1 -0
  91. package/dist/chunk-Q5VFBPMG.mjs +76 -0
  92. package/dist/chunk-Q5VFBPMG.mjs.map +1 -0
  93. package/dist/chunk-QDUBO567.js +1148 -0
  94. package/dist/chunk-QDUBO567.js.map +1 -0
  95. package/dist/{chunk-3CSCIRQY.js → chunk-QP5N3ER6.js} +6 -5
  96. package/dist/chunk-QP5N3ER6.js.map +1 -0
  97. package/dist/chunk-RWCD2CAD.mjs +1132 -0
  98. package/dist/chunk-RWCD2CAD.mjs.map +1 -0
  99. package/dist/{chunk-VQ54PUQV.js → chunk-S37OK2QG.js} +2 -2
  100. package/dist/chunk-S37OK2QG.js.map +1 -0
  101. package/dist/chunk-S3PUP7N4.js +20 -0
  102. package/dist/chunk-S3PUP7N4.js.map +1 -0
  103. package/dist/{chunk-QQ2WFYOD.js → chunk-S6YSGVWD.js} +4 -76
  104. package/dist/chunk-S6YSGVWD.js.map +1 -0
  105. package/dist/chunk-SFDJNKWC.js +22 -0
  106. package/dist/chunk-SFDJNKWC.js.map +1 -0
  107. package/dist/chunk-TTYCVBIQ.mjs +144 -0
  108. package/dist/chunk-TTYCVBIQ.mjs.map +1 -0
  109. package/dist/{chunk-HBF4HPRK.js → chunk-TXMX6PZR.js} +7 -3
  110. package/dist/chunk-TXMX6PZR.js.map +1 -0
  111. package/dist/chunk-VHN7PF5I.js +20 -0
  112. package/dist/chunk-VHN7PF5I.js.map +1 -0
  113. package/dist/chunk-VJNDOYEC.js +41 -0
  114. package/dist/chunk-VJNDOYEC.js.map +1 -0
  115. package/dist/chunk-XBZIS3MV.mjs +13 -0
  116. package/dist/chunk-XBZIS3MV.mjs.map +1 -0
  117. package/dist/chunk-XFOZ56FB.mjs +20 -0
  118. package/dist/chunk-XFOZ56FB.mjs.map +1 -0
  119. package/dist/chunk-Z23HAXHL.js +136 -0
  120. package/dist/chunk-Z23HAXHL.js.map +1 -0
  121. package/dist/chunk-ZF7DKR5A.mjs +26 -0
  122. package/dist/chunk-ZF7DKR5A.mjs.map +1 -0
  123. package/dist/common/auth/client/index.d.mts +3239 -0
  124. package/dist/common/auth/client/index.d.ts +3239 -0
  125. package/dist/common/auth/client/index.js +26 -0
  126. package/dist/common/auth/client/index.mjs +5 -0
  127. package/dist/common/auth/components/index.d.mts +374 -0
  128. package/dist/common/auth/components/index.d.ts +374 -0
  129. package/dist/common/auth/components/index.js +70 -0
  130. package/dist/common/auth/components/index.mjs +9 -0
  131. package/dist/common/auth/hooks/index.d.mts +75 -0
  132. package/dist/common/auth/hooks/index.d.ts +75 -0
  133. package/dist/common/auth/hooks/index.js +28 -0
  134. package/dist/common/auth/hooks/index.js.map +1 -0
  135. package/dist/common/auth/hooks/index.mjs +7 -0
  136. package/dist/common/auth/hooks/index.mjs.map +1 -0
  137. package/dist/common/auth/index.d.mts +14 -6
  138. package/dist/common/auth/index.d.ts +14 -6
  139. package/dist/common/auth/index.js +17 -8
  140. package/dist/common/auth/index.mjs +4 -3
  141. package/dist/common/auth/react/index.d.mts +3056 -0
  142. package/dist/common/auth/react/index.d.ts +3056 -0
  143. package/dist/common/auth/react/index.js +31 -0
  144. package/dist/common/auth/react/index.js.map +1 -0
  145. package/dist/common/auth/react/index.mjs +21 -0
  146. package/dist/common/auth/react/index.mjs.map +1 -0
  147. package/dist/common/auth/rn/index.d.mts +3138 -0
  148. package/dist/common/auth/rn/index.d.ts +3138 -0
  149. package/dist/common/auth/rn/index.js +348 -0
  150. package/dist/common/auth/rn/index.js.map +1 -0
  151. package/dist/common/auth/rn/index.mjs +327 -0
  152. package/dist/common/auth/rn/index.mjs.map +1 -0
  153. package/dist/common/auth/schema/index.d.mts +1479 -0
  154. package/dist/common/auth/schema/index.d.ts +1479 -0
  155. package/dist/common/auth/schema/index.js +49 -0
  156. package/dist/common/auth/schema/index.js.map +1 -0
  157. package/dist/common/auth/schema/index.mjs +4 -0
  158. package/dist/common/auth/schema/index.mjs.map +1 -0
  159. package/dist/common/auth/server/index.d.mts +7 -30
  160. package/dist/common/auth/server/index.d.ts +7 -30
  161. package/dist/common/auth/server/index.js +36 -79
  162. package/dist/common/auth/server/index.mjs +2 -5
  163. package/dist/common/auth/services/index.d.mts +14 -0
  164. package/dist/common/auth/services/index.d.ts +14 -0
  165. package/dist/common/auth/services/index.js +17 -0
  166. package/dist/common/auth/services/index.js.map +1 -0
  167. package/dist/common/auth/services/index.mjs +4 -0
  168. package/dist/common/auth/services/index.mjs.map +1 -0
  169. package/dist/common/index.d.mts +13 -5
  170. package/dist/common/index.d.ts +13 -5
  171. package/dist/common/index.js +19 -16
  172. package/dist/common/index.mjs +11 -8
  173. package/dist/common/request/index.js +5 -4
  174. package/dist/common/request/index.mjs +3 -2
  175. package/dist/common/storage/index.js +13 -12
  176. package/dist/common/storage/index.mjs +3 -2
  177. package/dist/festivalCard/index.d.mts +3 -3
  178. package/dist/festivalCard/index.d.ts +3 -3
  179. package/dist/festivalCard/routes/index.d.mts +1 -1
  180. package/dist/festivalCard/routes/index.d.ts +1 -1
  181. package/dist/festivalCard/server/index.d.mts +2 -2
  182. package/dist/festivalCard/server/index.d.ts +2 -2
  183. package/dist/{festivalCardService-BFCRhJrq.d.ts → festivalCardService-B3GsnNpV.d.ts} +1 -1
  184. package/dist/{festivalCardService-GriR2VMc.d.mts → festivalCardService-CWhrLNE9.d.mts} +1 -1
  185. package/dist/{index-DPYkrKZf.d.mts → index-BcjDRcKp.d.mts} +11 -6
  186. package/dist/{index-Bnh6VqFv.d.ts → index-BlpXrrTy.d.ts} +11 -6
  187. package/dist/{index-1Ag7IBXN.d.ts → index-DZ5iJtNO.d.mts} +2 -44
  188. package/dist/{index-DdeZSeTJ.d.mts → index-DZ5iJtNO.d.ts} +2 -44
  189. package/dist/index.d.mts +6296 -40
  190. package/dist/index.d.ts +6296 -40
  191. package/dist/index.js +1378 -2508
  192. package/dist/index.js.map +1 -1
  193. package/dist/index.mjs +1073 -2203
  194. package/dist/index.mjs.map +1 -1
  195. package/dist/mmd/admin/index.d.mts +1 -1
  196. package/dist/mmd/admin/index.d.ts +1 -1
  197. package/dist/mmd/index.d.mts +1 -1
  198. package/dist/mmd/index.d.ts +1 -1
  199. package/dist/mmd/server/index.d.mts +3 -3
  200. package/dist/mmd/server/index.d.ts +3 -3
  201. package/dist/request/index.js +4 -3
  202. package/dist/request/index.mjs +2 -1
  203. package/dist/session-BCXvGCnm.d.mts +81 -0
  204. package/dist/session-BCXvGCnm.d.ts +81 -0
  205. package/dist/storage/index.js +12 -11
  206. package/dist/storage/index.mjs +2 -1
  207. package/dist/{types-DyG3ZV9V.d.mts → types-B6B210gX.d.mts} +1 -1
  208. package/dist/{types-DyG3ZV9V.d.ts → types-B6B210gX.d.ts} +1 -1
  209. package/dist/{types-BTiaMsBz.d.mts → types-Bdnte5EN.d.mts} +1 -1
  210. package/dist/{types-tQfupO6d.d.mts → types-Cs0CLvrH.d.mts} +1 -1
  211. package/dist/{types-tQfupO6d.d.ts → types-Cs0CLvrH.d.ts} +1 -1
  212. package/dist/{types-ERmJyjx8.d.ts → types-_rFX1atk.d.ts} +1 -1
  213. package/dist/types.legacy-J-j-_ig_.d.mts +25 -0
  214. package/dist/types.legacy-J-j-_ig_.d.ts +25 -0
  215. package/dist/useAuthActions-7S5dL7Oh.d.mts +77 -0
  216. package/dist/useAuthActions-7S5dL7Oh.d.ts +77 -0
  217. package/dist/vocaloidBooth/server/index.d.mts +3 -3
  218. package/dist/vocaloidBooth/server/index.d.ts +3 -3
  219. package/package.json +44 -76
  220. package/dist/auth/legacy/core/index.d.mts +0 -42
  221. package/dist/auth/legacy/core/index.d.ts +0 -42
  222. package/dist/auth/legacy/core/index.js +0 -242
  223. package/dist/auth/legacy/core/index.js.map +0 -1
  224. package/dist/auth/legacy/core/index.mjs +0 -226
  225. package/dist/auth/legacy/core/index.mjs.map +0 -1
  226. package/dist/auth/legacy/db/index.d.mts +0 -5
  227. package/dist/auth/legacy/db/index.d.ts +0 -5
  228. package/dist/auth/legacy/db/index.js +0 -261
  229. package/dist/auth/legacy/db/index.js.map +0 -1
  230. package/dist/auth/legacy/db/index.mjs +0 -250
  231. package/dist/auth/legacy/db/index.mjs.map +0 -1
  232. package/dist/auth/legacy/index.d.mts +0 -5
  233. package/dist/auth/legacy/index.d.ts +0 -5
  234. package/dist/auth/legacy/index.js +0 -1107
  235. package/dist/auth/legacy/index.js.map +0 -1
  236. package/dist/auth/legacy/index.mjs +0 -1086
  237. package/dist/auth/legacy/index.mjs.map +0 -1
  238. package/dist/auth/legacy/logic/index.d.mts +0 -9
  239. package/dist/auth/legacy/logic/index.d.ts +0 -9
  240. package/dist/auth/legacy/logic/index.js +0 -194
  241. package/dist/auth/legacy/logic/index.js.map +0 -1
  242. package/dist/auth/legacy/logic/index.mjs +0 -187
  243. package/dist/auth/legacy/logic/index.mjs.map +0 -1
  244. package/dist/auth/legacy/miniapp/index.d.mts +0 -5
  245. package/dist/auth/legacy/miniapp/index.d.ts +0 -5
  246. package/dist/auth/legacy/miniapp/index.js +0 -506
  247. package/dist/auth/legacy/miniapp/index.js.map +0 -1
  248. package/dist/auth/legacy/miniapp/index.mjs +0 -487
  249. package/dist/auth/legacy/miniapp/index.mjs.map +0 -1
  250. package/dist/auth/legacy/routes/index.d.mts +0 -53
  251. package/dist/auth/legacy/routes/index.d.ts +0 -53
  252. package/dist/auth/legacy/routes/index.js +0 -278
  253. package/dist/auth/legacy/routes/index.js.map +0 -1
  254. package/dist/auth/legacy/routes/index.mjs +0 -271
  255. package/dist/auth/legacy/routes/index.mjs.map +0 -1
  256. package/dist/auth/legacy/schema/index.d.mts +0 -401
  257. package/dist/auth/legacy/schema/index.d.ts +0 -401
  258. package/dist/auth/legacy/schema/index.js +0 -50
  259. package/dist/auth/legacy/schema/index.js.map +0 -1
  260. package/dist/auth/legacy/schema/index.mjs +0 -44
  261. package/dist/auth/legacy/schema/index.mjs.map +0 -1
  262. package/dist/auth/legacy/server/index.d.mts +0 -13
  263. package/dist/auth/legacy/server/index.d.ts +0 -13
  264. package/dist/auth/legacy/server/index.js +0 -21
  265. package/dist/auth/legacy/server/index.js.map +0 -1
  266. package/dist/auth/legacy/server/index.mjs +0 -19
  267. package/dist/auth/legacy/server/index.mjs.map +0 -1
  268. package/dist/auth/legacy/services/index.d.mts +0 -40
  269. package/dist/auth/legacy/services/index.d.ts +0 -40
  270. package/dist/auth/legacy/services/index.js +0 -258
  271. package/dist/auth/legacy/services/index.js.map +0 -1
  272. package/dist/auth/legacy/services/index.mjs +0 -252
  273. package/dist/auth/legacy/services/index.mjs.map +0 -1
  274. package/dist/auth/legacy/ui/miniapp/index.d.mts +0 -10
  275. package/dist/auth/legacy/ui/miniapp/index.d.ts +0 -10
  276. package/dist/auth/legacy/ui/miniapp/index.js +0 -298
  277. package/dist/auth/legacy/ui/miniapp/index.js.map +0 -1
  278. package/dist/auth/legacy/ui/miniapp/index.mjs +0 -290
  279. package/dist/auth/legacy/ui/miniapp/index.mjs.map +0 -1
  280. package/dist/auth/legacy/ui/web/index.d.mts +0 -22
  281. package/dist/auth/legacy/ui/web/index.d.ts +0 -22
  282. package/dist/auth/legacy/ui/web/index.js +0 -899
  283. package/dist/auth/legacy/ui/web/index.js.map +0 -1
  284. package/dist/auth/legacy/ui/web/index.mjs +0 -889
  285. package/dist/auth/legacy/ui/web/index.mjs.map +0 -1
  286. package/dist/auth/legacy/web/index.d.mts +0 -5
  287. package/dist/auth/legacy/web/index.d.ts +0 -5
  288. package/dist/auth/legacy/web/index.js +0 -1107
  289. package/dist/auth/legacy/web/index.js.map +0 -1
  290. package/dist/auth/legacy/web/index.mjs +0 -1086
  291. package/dist/auth/legacy/web/index.mjs.map +0 -1
  292. package/dist/auth/middleware/index.d.mts +0 -75
  293. package/dist/auth/middleware/index.d.ts +0 -75
  294. package/dist/auth/middleware/index.js +0 -15
  295. package/dist/auth/middleware/index.mjs +0 -6
  296. package/dist/auth/routes/index.d.mts +0 -261
  297. package/dist/auth/routes/index.d.ts +0 -261
  298. package/dist/auth/routes/index.js +0 -59
  299. package/dist/auth/routes/index.mjs +0 -6
  300. package/dist/chunk-37HYTHEC.mjs +0 -90
  301. package/dist/chunk-37HYTHEC.mjs.map +0 -1
  302. package/dist/chunk-3CSCIRQY.js.map +0 -1
  303. package/dist/chunk-5WV35FPV.js +0 -131
  304. package/dist/chunk-5WV35FPV.js.map +0 -1
  305. package/dist/chunk-7B5SI4OF.mjs.map +0 -1
  306. package/dist/chunk-DCRD5CZB.js +0 -573
  307. package/dist/chunk-DCRD5CZB.js.map +0 -1
  308. package/dist/chunk-DDX4JKFS.js +0 -19
  309. package/dist/chunk-DDX4JKFS.js.map +0 -1
  310. package/dist/chunk-DV6M7MFP.js +0 -283
  311. package/dist/chunk-DV6M7MFP.js.map +0 -1
  312. package/dist/chunk-EQXPL7TN.mjs +0 -78
  313. package/dist/chunk-EQXPL7TN.mjs.map +0 -1
  314. package/dist/chunk-GSNGCENJ.js.map +0 -1
  315. package/dist/chunk-HBF4HPRK.js.map +0 -1
  316. package/dist/chunk-HCI6JQOU.mjs.map +0 -1
  317. package/dist/chunk-I44HXJ3X.mjs +0 -17
  318. package/dist/chunk-I44HXJ3X.mjs.map +0 -1
  319. package/dist/chunk-IIVNHQEI.mjs.map +0 -1
  320. package/dist/chunk-IJ4YYWE3.mjs +0 -122
  321. package/dist/chunk-IJ4YYWE3.mjs.map +0 -1
  322. package/dist/chunk-J4BEIZUC.js +0 -92
  323. package/dist/chunk-J4BEIZUC.js.map +0 -1
  324. package/dist/chunk-OKPWFVXC.js +0 -24
  325. package/dist/chunk-OKPWFVXC.js.map +0 -1
  326. package/dist/chunk-PNOTQAYK.mjs +0 -560
  327. package/dist/chunk-PNOTQAYK.mjs.map +0 -1
  328. package/dist/chunk-PTMSDNGO.mjs.map +0 -1
  329. package/dist/chunk-Q2IAL7YV.js +0 -36
  330. package/dist/chunk-Q2IAL7YV.js.map +0 -1
  331. package/dist/chunk-QQ2WFYOD.js.map +0 -1
  332. package/dist/chunk-VQ54PUQV.js.map +0 -1
  333. package/dist/chunk-W5JEGA76.mjs +0 -33
  334. package/dist/chunk-W5JEGA76.mjs.map +0 -1
  335. package/dist/chunk-YGI7UU2D.mjs.map +0 -1
  336. package/dist/chunk-ZCLQSI5F.mjs +0 -271
  337. package/dist/chunk-ZCLQSI5F.mjs.map +0 -1
  338. package/dist/drizzle-auth-service-D-pljzCD.d.mts +0 -145
  339. package/dist/drizzle-auth-service-D3qryE_I.d.ts +0 -145
  340. package/dist/index-DNKZ7-R_.d.mts +0 -184
  341. package/dist/index-DNKZ7-R_.d.ts +0 -184
  342. package/dist/types-C5vUWf9u.d.ts +0 -70
  343. package/dist/types-IYCqCk2g.d.mts +0 -70
  344. /package/dist/{auth/middleware → common/auth/client}/index.js.map +0 -0
  345. /package/dist/{auth/middleware → common/auth/client}/index.mjs.map +0 -0
  346. /package/dist/{auth/routes → common/auth/components}/index.js.map +0 -0
  347. /package/dist/{auth/routes → common/auth/components}/index.mjs.map +0 -0
@@ -0,0 +1,327 @@
1
+ import { validatePhoneNumber, getAuthClientError, validateEmail, errorMessage } from '../../../chunk-ZF7DKR5A.mjs';
2
+ import { BaseApiClient } from '../../../chunk-G4NFB2QA.mjs';
3
+ import { ReactNativeStorageAdapter } from '../../../chunk-Q5VFBPMG.mjs';
4
+ import { ReactNativeRequestAdapter } from '../../../chunk-G5HJGXGC.mjs';
5
+ import { __require } from '../../../chunk-MAI35PU6.mjs';
6
+ import { createAuthClient } from 'better-auth/react';
7
+ import { emailOTPClient, phoneNumberClient } from 'better-auth/client/plugins';
8
+ import React, { useState, useEffect, useCallback } from 'react';
9
+
10
+ // src/common/auth/rn/token-storage.ts
11
+ var RN_BEARER_TOKEN_KEY = "sa2kit_auth_bearer_token";
12
+ var storageOverride = null;
13
+ var defaultStorage = new ReactNativeStorageAdapter();
14
+ function storage() {
15
+ return storageOverride ?? defaultStorage;
16
+ }
17
+ function setRnBearerTokenStorage(next) {
18
+ storageOverride = next;
19
+ }
20
+ async function getRnBearerToken() {
21
+ return storage().getItem(RN_BEARER_TOKEN_KEY);
22
+ }
23
+ async function setRnBearerToken(token) {
24
+ await storage().setItem(RN_BEARER_TOKEN_KEY, token);
25
+ }
26
+ async function clearRnBearerToken() {
27
+ await storage().removeItem(RN_BEARER_TOKEN_KEY);
28
+ }
29
+
30
+ // src/common/auth/rn/create-rn-auth-client.ts
31
+ function normalizeRnAuthBaseUrl(authApiBase) {
32
+ const trimmed = authApiBase.replace(/\/+$/, "");
33
+ if (trimmed.endsWith("/api/auth")) {
34
+ return {
35
+ baseURL: trimmed.slice(0, -"/api/auth".length),
36
+ basePath: "/api/auth"
37
+ };
38
+ }
39
+ if (trimmed.endsWith("/api")) {
40
+ return {
41
+ baseURL: trimmed.slice(0, -"/api".length),
42
+ basePath: "/api/auth"
43
+ };
44
+ }
45
+ return {
46
+ baseURL: trimmed,
47
+ basePath: "/api/auth"
48
+ };
49
+ }
50
+ function buildSa2kitRnAuthClient(options) {
51
+ return createAuthClient({
52
+ baseURL: options.baseURL.replace(/\/+$/, ""),
53
+ basePath: options.basePath ?? "/api/auth",
54
+ plugins: [emailOTPClient(), phoneNumberClient()],
55
+ disableDefaultFetchPlugins: false,
56
+ fetchOptions: {
57
+ credentials: "omit",
58
+ onRequest: async (ctx) => {
59
+ const token = await getRnBearerToken();
60
+ if (token) {
61
+ ctx.headers.set("Authorization", `Bearer ${token}`);
62
+ }
63
+ return ctx;
64
+ },
65
+ onResponse: async (ctx) => {
66
+ const token = ctx.response.headers.get("set-auth-token");
67
+ if (token) {
68
+ await setRnBearerToken(token);
69
+ }
70
+ return ctx;
71
+ }
72
+ }
73
+ });
74
+ }
75
+ var cachedClient = null;
76
+ var cachedKey = "";
77
+ function cacheKey(options) {
78
+ return `${options.baseURL}|${options.basePath ?? "/api/auth"}`;
79
+ }
80
+ function createSa2kitRnAuthClient(options) {
81
+ const key = cacheKey(options);
82
+ if (cachedClient && cachedKey === key) {
83
+ return cachedClient;
84
+ }
85
+ cachedClient = buildSa2kitRnAuthClient(options);
86
+ cachedKey = key;
87
+ return cachedClient;
88
+ }
89
+ function createSa2kitRnAuthClientFromApiBase(authApiBase) {
90
+ const { baseURL, basePath } = normalizeRnAuthBaseUrl(authApiBase);
91
+ return createSa2kitRnAuthClient({ baseURL, basePath });
92
+ }
93
+ async function initSa2kitRnAuthClient(options) {
94
+ const client = typeof options === "string" ? createSa2kitRnAuthClientFromApiBase(options) : createSa2kitRnAuthClient(options);
95
+ const token = await getRnBearerToken();
96
+ if (token) {
97
+ try {
98
+ await client.getSession();
99
+ } catch {
100
+ await clearRnBearerToken();
101
+ }
102
+ }
103
+ return client;
104
+ }
105
+ async function signOutSa2kitRnAuthClient(client) {
106
+ try {
107
+ await client.signOut();
108
+ } finally {
109
+ await clearRnBearerToken();
110
+ }
111
+ }
112
+ function resetSa2kitRnAuthClientCache() {
113
+ cachedClient = null;
114
+ cachedKey = "";
115
+ }
116
+
117
+ // src/common/auth/rn/sign-in.ts
118
+ function clientApi(client) {
119
+ return client;
120
+ }
121
+ async function signInWithRnAuthClient(authClient, account, password) {
122
+ const trimmed = account.trim();
123
+ try {
124
+ if (validatePhoneNumber(trimmed)) {
125
+ const result = await clientApi(authClient).signIn.phoneNumber({
126
+ phoneNumber: trimmed,
127
+ password
128
+ });
129
+ const err = getAuthClientError(result, "\u767B\u5F55\u5931\u8D25");
130
+ return err ? { success: false, error: err } : { success: true };
131
+ }
132
+ if (validateEmail(trimmed)) {
133
+ const result = await clientApi(authClient).signIn.email({
134
+ email: trimmed,
135
+ password
136
+ });
137
+ const err = getAuthClientError(result, "\u767B\u5F55\u5931\u8D25");
138
+ return err ? { success: false, error: err } : { success: true };
139
+ }
140
+ return { success: false, error: "\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7\u6216\u90AE\u7BB1" };
141
+ } catch (e) {
142
+ return { success: false, error: errorMessage(e, "\u767B\u5F55\u5931\u8D25") };
143
+ }
144
+ }
145
+ var ReactNative = __require("react-native");
146
+ var { ActivityIndicator, Pressable, Text, TextInput, View, StyleSheet } = ReactNative;
147
+ var defaultStyles = StyleSheet.create({
148
+ label: { fontSize: 12, color: "#8b98a5", marginBottom: 6, marginTop: 12 },
149
+ input: {
150
+ borderWidth: 1,
151
+ borderColor: "rgba(255,255,255,0.12)",
152
+ borderRadius: 10,
153
+ paddingHorizontal: 12,
154
+ paddingVertical: 10,
155
+ color: "#e8edf2",
156
+ backgroundColor: "rgba(0,0,0,0.2)",
157
+ fontSize: 15
158
+ },
159
+ err: { color: "#f87171", marginTop: 10, fontSize: 14 },
160
+ btn: {
161
+ marginTop: 14,
162
+ paddingVertical: 12,
163
+ borderRadius: 10,
164
+ alignItems: "center",
165
+ borderWidth: 1,
166
+ borderColor: "rgba(255,255,255,0.12)",
167
+ backgroundColor: "rgba(255,255,255,0.08)"
168
+ },
169
+ primary: { backgroundColor: "#3d9eff", borderColor: "transparent" },
170
+ disabled: { opacity: 0.6 },
171
+ btnTextPrimary: { color: "#fff", fontSize: 15, fontWeight: "600" },
172
+ centerInline: { paddingVertical: 24, alignItems: "center" }
173
+ });
174
+ var DEFAULT_LABELS = {
175
+ authApiBase: "\u8BA4\u8BC1 API \u6839\u5730\u5740\uFF08\u542B /api\uFF09",
176
+ account: "\u624B\u673A\u53F7 / \u90AE\u7BB1",
177
+ password: "\u5BC6\u7801",
178
+ submit: "\u767B\u5F55"
179
+ };
180
+ function RnAccountLoginForm({
181
+ authApiBase,
182
+ defaultAuthApiBase = "",
183
+ onAuthApiBaseChange,
184
+ submitting = false,
185
+ error = "",
186
+ onError,
187
+ onSuccess,
188
+ theme,
189
+ labels: labelsProp,
190
+ placeholders
191
+ }) {
192
+ const labels = {
193
+ ...DEFAULT_LABELS,
194
+ account: labelsProp?.account ?? labelsProp?.phone ?? labelsProp?.email ?? DEFAULT_LABELS.account,
195
+ ...labelsProp
196
+ };
197
+ const [authClient, setAuthClient] = useState(null);
198
+ const [account, setAccount] = useState("");
199
+ const [password, setPassword] = useState("");
200
+ const [loading, setLoading] = useState(false);
201
+ useEffect(() => {
202
+ let cancelled = false;
203
+ const base = authApiBase.trim() || defaultAuthApiBase;
204
+ if (!base) {
205
+ setAuthClient(null);
206
+ return;
207
+ }
208
+ resetSa2kitRnAuthClientCache();
209
+ initSa2kitRnAuthClient(base).then((client) => {
210
+ if (!cancelled) setAuthClient(client);
211
+ });
212
+ return () => {
213
+ cancelled = true;
214
+ };
215
+ }, [authApiBase, defaultAuthApiBase]);
216
+ const handleSubmit = useCallback(async () => {
217
+ if (!authClient) return;
218
+ onError?.("");
219
+ setLoading(true);
220
+ try {
221
+ const trimmedAccount = account.trim();
222
+ if (!trimmedAccount || !password) {
223
+ onError?.("\u8BF7\u586B\u5199\u8D26\u53F7\u548C\u5BC6\u7801");
224
+ return;
225
+ }
226
+ const result = await signInWithRnAuthClient(authClient, trimmedAccount, password);
227
+ if (!result.success) {
228
+ onError?.(result.error);
229
+ return;
230
+ }
231
+ const token = await getRnBearerToken();
232
+ if (!token) {
233
+ onError?.("\u767B\u5F55\u6210\u529F\u4F46\u672A\u83B7\u53D6\u5230 Bearer token");
234
+ return;
235
+ }
236
+ await onSuccess(token);
237
+ } finally {
238
+ setLoading(false);
239
+ }
240
+ }, [account, authClient, onError, onSuccess, password]);
241
+ const authApiField = onAuthApiBaseChange ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Text, { style: [defaultStyles.label, theme?.label] }, labels.authApiBase), /* @__PURE__ */ React.createElement(
242
+ TextInput,
243
+ {
244
+ style: [defaultStyles.input, theme?.input, theme?.inputContainer],
245
+ value: authApiBase,
246
+ onChangeText: onAuthApiBaseChange,
247
+ autoCapitalize: "none",
248
+ autoCorrect: false,
249
+ placeholder: placeholders?.authApiBase ?? defaultAuthApiBase,
250
+ placeholderTextColor: "#6b7a8a"
251
+ }
252
+ )) : null;
253
+ if (!authClient) {
254
+ return /* @__PURE__ */ React.createElement(View, { style: [defaultStyles.centerInline, theme?.loadingContainer] }, /* @__PURE__ */ React.createElement(ActivityIndicator, null));
255
+ }
256
+ const busy = loading || submitting;
257
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, authApiField, /* @__PURE__ */ React.createElement(Text, { style: [defaultStyles.label, theme?.label] }, labels.account), /* @__PURE__ */ React.createElement(
258
+ TextInput,
259
+ {
260
+ style: [defaultStyles.input, theme?.input, theme?.inputContainer],
261
+ value: account,
262
+ onChangeText: setAccount,
263
+ keyboardType: "email-address",
264
+ autoCapitalize: "none",
265
+ autoCorrect: false,
266
+ placeholder: placeholders?.account ?? placeholders?.phone ?? "\u624B\u673A\u53F7\u6216\u90AE\u7BB1",
267
+ placeholderTextColor: "#6b7a8a"
268
+ }
269
+ ), /* @__PURE__ */ React.createElement(Text, { style: [defaultStyles.label, theme?.label] }, labels.password), /* @__PURE__ */ React.createElement(
270
+ TextInput,
271
+ {
272
+ style: [defaultStyles.input, theme?.input, theme?.inputContainer],
273
+ value: password,
274
+ onChangeText: setPassword,
275
+ secureTextEntry: true,
276
+ autoCapitalize: "none",
277
+ autoCorrect: false,
278
+ placeholder: placeholders?.password ?? "\u5BC6\u7801",
279
+ placeholderTextColor: "#6b7a8a"
280
+ }
281
+ ), error ? /* @__PURE__ */ React.createElement(Text, { style: [defaultStyles.err, theme?.error] }, error) : null, /* @__PURE__ */ React.createElement(
282
+ Pressable,
283
+ {
284
+ style: [
285
+ defaultStyles.btn,
286
+ defaultStyles.primary,
287
+ theme?.button,
288
+ theme?.buttonPrimary,
289
+ busy && (theme?.buttonDisabled ?? defaultStyles.disabled)
290
+ ],
291
+ onPress: () => void handleSubmit(),
292
+ disabled: busy
293
+ },
294
+ busy ? /* @__PURE__ */ React.createElement(ActivityIndicator, { color: "#fff" }) : /* @__PURE__ */ React.createElement(Text, { style: [defaultStyles.btnTextPrimary, theme?.buttonTextPrimary] }, labels.submit)
295
+ ));
296
+ }
297
+
298
+ // src/common/auth/rn/legacy-client.ts
299
+ var cached = null;
300
+ var cachedBase = "";
301
+ function createRnAuthClient(authApiBase) {
302
+ const base = authApiBase.replace(/\/+$/, "");
303
+ if (cached && cachedBase === base) {
304
+ return cached;
305
+ }
306
+ const client = new BaseApiClient(
307
+ new ReactNativeStorageAdapter(),
308
+ new ReactNativeRequestAdapter(),
309
+ base
310
+ );
311
+ cached = client;
312
+ cachedBase = base;
313
+ return client;
314
+ }
315
+ async function initRnAuthClient(authApiBase) {
316
+ const client = createRnAuthClient(authApiBase);
317
+ await client.init();
318
+ return client;
319
+ }
320
+ function resetRnAuthClientCache() {
321
+ cached = null;
322
+ cachedBase = "";
323
+ }
324
+
325
+ export { RN_BEARER_TOKEN_KEY, RnAccountLoginForm, clearRnBearerToken, createRnAuthClient, createSa2kitRnAuthClient, createSa2kitRnAuthClientFromApiBase, getRnBearerToken, initRnAuthClient, initSa2kitRnAuthClient, normalizeRnAuthBaseUrl, resetRnAuthClientCache, resetSa2kitRnAuthClientCache, setRnBearerToken, setRnBearerTokenStorage, signInWithRnAuthClient, signOutSa2kitRnAuthClient };
326
+ //# sourceMappingURL=index.mjs.map
327
+ //# sourceMappingURL=index.mjs.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","../../../../src/common/auth/rn/legacy-client.ts"],"names":[],"mappings":"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","file":"index.mjs","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","/**\n * @deprecated 2.x BaseApiClient,请改用 initSa2kitRnAuthClient\n */\nimport { BaseApiClient } from '../client/base-api-client';\nimport { ReactNativeStorageAdapter } from '../../../storage/adapters/react-native-adapter';\nimport { ReactNativeRequestAdapter } from '../../../request/adapters/react-native-adapter';\n\nlet cached: BaseApiClient | null = null;\nlet cachedBase = '';\n\n/** 创建 RN 用 BaseApiClient(AsyncStorage + fetch,无 Cookie) */\nexport function createRnAuthClient(authApiBase: string): BaseApiClient {\n const base = authApiBase.replace(/\\/+$/, '');\n if (cached && cachedBase === base) {\n return cached;\n }\n const client = new BaseApiClient(\n new ReactNativeStorageAdapter(),\n new ReactNativeRequestAdapter(),\n base,\n );\n cached = client;\n cachedBase = base;\n return client;\n}\n\nexport async function initRnAuthClient(authApiBase: string): Promise<BaseApiClient> {\n const client = createRnAuthClient(authApiBase);\n await client.init();\n return client;\n}\n\n/** 切换认证根地址时清空单例缓存 */\nexport function resetRnAuthClientCache(): void {\n cached = null;\n cachedBase = '';\n}\n"]}