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 @@
1
+ {"version":3,"sources":["../src/common/auth/schema/enums.ts","../src/common/auth/schema/user.ts","../src/common/auth/schema/session.ts","../src/common/auth/schema/account.ts","../src/common/auth/schema/verification.ts","../src/common/auth/schema/relations.ts","../src/common/auth/schema/index.ts"],"names":["pgEnum","pgTable","text","boolean","timestamp","sql","relations"],"mappings":"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","file":"chunk-LGHUCQIU.js","sourcesContent":["/**\n * Auth Schema - Enums\n * 认证相关的枚举类型定义\n */\n\nimport { pgEnum } from 'drizzle-orm/pg-core';\n\n/**\n * 用户角色枚举\n */\nexport const userRole = pgEnum('UserRole', ['USER', 'ADMIN', 'SUPER_ADMIN']);\n\n/**\n * 类型定义\n */\nexport type UserRole = 'USER' | 'ADMIN' | 'SUPER_ADMIN';\n\n","/**\n * Better Auth — user 表(3.0 SSOT)\n */\nimport { boolean, pgTable, text, timestamp } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { userRole } from './enums';\n\nexport const user = pgTable('user', {\n id: text('id').primaryKey().notNull(),\n name: text('name').notNull(),\n email: text('email').notNull(),\n emailVerified: boolean('emailVerified').default(false).notNull(),\n image: text('image'),\n phoneNumber: text('phoneNumber'),\n phoneNumberVerified: boolean('phoneNumberVerified').default(false),\n role: userRole('role').default('USER').notNull(),\n createdAt: timestamp('createdAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n});\n\nexport type User = typeof user.$inferSelect;\nexport type NewUser = typeof user.$inferInsert;\n","/**\n * Better Auth — session 表(3.0 SSOT)\n */\nimport { pgTable, text, timestamp } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { user } from './user';\n\nexport const session = pgTable('session', {\n id: text('id').primaryKey().notNull(),\n userId: text('userId')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n token: text('token').notNull(),\n expiresAt: timestamp('expiresAt', { precision: 3, mode: 'date' }).notNull(),\n ipAddress: text('ipAddress'),\n userAgent: text('userAgent'),\n createdAt: timestamp('createdAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n});\n\nexport type Session = typeof session.$inferSelect;\nexport type NewSession = typeof session.$inferInsert;\n","/**\n * Better Auth — account 表(credential / OAuth,3.0 SSOT)\n */\nimport { pgTable, text, timestamp } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { user } from './user';\n\nexport const account = pgTable('account', {\n id: text('id').primaryKey().notNull(),\n accountId: text('accountId').notNull(),\n providerId: text('providerId').notNull(),\n userId: text('userId')\n .notNull()\n .references(() => user.id, { onDelete: 'cascade' }),\n accessToken: text('accessToken'),\n refreshToken: text('refreshToken'),\n idToken: text('idToken'),\n accessTokenExpiresAt: timestamp('accessTokenExpiresAt', { precision: 3, mode: 'date' }),\n refreshTokenExpiresAt: timestamp('refreshTokenExpiresAt', { precision: 3, mode: 'date' }),\n scope: text('scope'),\n password: text('password'),\n createdAt: timestamp('createdAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n});\n\nexport type Account = typeof account.$inferSelect;\nexport type NewAccount = typeof account.$inferInsert;\n","/**\n * Better Auth — verification 表(OTP / magic link,3.0 SSOT)\n */\nimport { pgTable, text, timestamp } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\n\nexport const verification = pgTable('verification', {\n id: text('id').primaryKey().notNull(),\n identifier: text('identifier').notNull(),\n value: text('value').notNull(),\n expiresAt: timestamp('expiresAt', { precision: 3, mode: 'date' }).notNull(),\n createdAt: timestamp('createdAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp('updatedAt', { precision: 3, mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n});\n\nexport type Verification = typeof verification.$inferSelect;\nexport type NewVerification = typeof verification.$inferInsert;\n\n/** @deprecated 3.0 使用 `verification` */\nexport const verifications = verification;\n","/**\n * Auth Schema - Relations\n * 表关系定义\n */\n\nimport { relations } from 'drizzle-orm';\nimport { user } from './user';\nimport { session } from './session';\nimport { account } from './account';\n\n/**\n * User 表关系\n */\nexport const userRelations = relations(user, ({ many }) => ({\n sessions: many(session),\n accounts: many(account),\n}));\n\n/**\n * Session 表关系\n */\nexport const sessionRelations = relations(session, ({ one }) => ({\n user: one(user, {\n fields: [session.userId],\n references: [user.id],\n }),\n}));\n\n/**\n * Account 表关系\n */\nexport const accountRelations = relations(account, ({ one }) => ({\n user: one(user, {\n fields: [account.userId],\n references: [user.id],\n }),\n}));\n\n","/**\n * Better Auth Drizzle Schema(sa2kit/common/auth/schema)\n */\nexport { userRole, type UserRole } from './enums';\nexport { user, type User, type NewUser } from './user';\nexport { session, type Session, type NewSession } from './session';\nexport { account, type Account, type NewAccount } from './account';\nexport { verification, verifications, type Verification, type NewVerification } from './verification';\nexport { userRelations, sessionRelations, accountRelations } from './relations';\n\nimport { user } from './user';\nimport { session } from './session';\nimport { account } from './account';\nimport { verification } from './verification';\nimport { userRelations, sessionRelations, accountRelations } from './relations';\n\n/** drizzleAdapter 传入的 schema 对象 */\nexport const authDrizzleSchema = {\n user,\n session,\n account,\n verification,\n userRelations,\n sessionRelations,\n accountRelations,\n};\n"]}
@@ -0,0 +1,34 @@
1
+ import { useAuthActions } from './chunk-TTYCVBIQ.mjs';
2
+ import React, { createContext, useMemo, useContext } from 'react';
3
+
4
+ var AuthContext = createContext(null);
5
+ function AuthProvider({ authClient, children }) {
6
+ const session = authClient.useSession();
7
+ const actions = useAuthActions(authClient);
8
+ const user = session.data?.user ?? null;
9
+ const value = useMemo(
10
+ () => ({
11
+ authClient,
12
+ user,
13
+ isAuthenticated: !!user,
14
+ loading: session.isPending,
15
+ refreshSession: async () => {
16
+ await session.refetch();
17
+ },
18
+ ...actions
19
+ }),
20
+ [authClient, user, session.isPending, session.refetch, actions]
21
+ );
22
+ return /* @__PURE__ */ React.createElement(AuthContext.Provider, { value }, children);
23
+ }
24
+ function useAuthContext() {
25
+ const ctx = useContext(AuthContext);
26
+ if (!ctx) {
27
+ throw new Error("useAuthContext \u5FC5\u987B\u5728 AuthProvider \u5185\u4F7F\u7528");
28
+ }
29
+ return ctx;
30
+ }
31
+
32
+ export { AuthProvider, useAuthContext };
33
+ //# sourceMappingURL=chunk-LKBIVQBT.mjs.map
34
+ //# sourceMappingURL=chunk-LKBIVQBT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/auth/context/AuthProvider.tsx"],"names":[],"mappings":";;;AAwBA,IAAM,WAAA,GAAc,cAAuC,IAAI,CAAA;AAOxD,SAAS,YAAA,CAAa,EAAE,UAAA,EAAY,QAAA,EAAS,EAAsB;AACxE,EAAA,MAAM,OAAA,GAAU,WAAW,UAAA,EAAW;AACtC,EAAA,MAAM,OAAA,GAAU,eAAe,UAAU,CAAA;AAEzC,EAAA,MAAM,IAAA,GAAQ,OAAA,CAAQ,IAAA,EAAM,IAAA,IAAiC,IAAA;AAE7D,EAAA,MAAM,KAAA,GAAQ,OAAA;AAAA,IACZ,OAAO;AAAA,MACL,UAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA,EAAiB,CAAC,CAAC,IAAA;AAAA,MACnB,SAAS,OAAA,CAAQ,SAAA;AAAA,MACjB,gBAAgB,YAAY;AAC1B,QAAA,MAAM,QAAQ,OAAA,EAAQ;AAAA,MACxB,CAAA;AAAA,MACA,GAAG;AAAA,KACL,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,IAAA,EAAM,QAAQ,SAAA,EAAW,OAAA,CAAQ,SAAS,OAAO;AAAA,GAChE;AAEA,EAAA,uBAAO,KAAA,CAAA,aAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,SAAe,QAAS,CAAA;AACvD;AAEO,SAAS,cAAA,GAAmC;AACjD,EAAA,MAAM,GAAA,GAAM,WAAW,WAAW,CAAA;AAClC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,mEAAqC,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,GAAA;AACT","file":"chunk-LKBIVQBT.mjs","sourcesContent":["'use client';\n\nimport React, { createContext, useContext, useMemo } from 'react';\nimport type { Sa2kitAuthClient } from '../react';\nimport { useAuthActions, type UseAuthActionsReturn } from '../hooks/useAuthActions';\n\nexport type AuthUser = {\n id: string;\n email?: string;\n name?: string;\n phoneNumber?: string | null;\n role?: string;\n image?: string | null;\n [key: string]: unknown;\n};\n\nexport type AuthContextValue = UseAuthActionsReturn & {\n authClient: Sa2kitAuthClient;\n user: AuthUser | null;\n isAuthenticated: boolean;\n loading: boolean;\n refreshSession: () => Promise<void>;\n};\n\nconst AuthContext = createContext<AuthContextValue | null>(null);\n\nexport type AuthProviderProps = {\n authClient: Sa2kitAuthClient;\n children: React.ReactNode;\n};\n\nexport function AuthProvider({ authClient, children }: AuthProviderProps) {\n const session = authClient.useSession();\n const actions = useAuthActions(authClient);\n\n const user = (session.data?.user as AuthUser | undefined) ?? null;\n\n const value = useMemo<AuthContextValue>(\n () => ({\n authClient,\n user,\n isAuthenticated: !!user,\n loading: session.isPending,\n refreshSession: async () => {\n await session.refetch();\n },\n ...actions,\n }),\n [authClient, user, session.isPending, session.refetch, actions],\n );\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n\nexport function useAuthContext(): AuthContextValue {\n const ctx = useContext(AuthContext);\n if (!ctx) {\n throw new Error('useAuthContext 必须在 AuthProvider 内使用');\n }\n return ctx;\n}\n"]}
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ // src/common/auth/components/utils.ts
4
+ function validatePhoneNumber(phone) {
5
+ return /^1[3-9]\d{9}$/.test(phone.trim());
6
+ }
7
+ function validatePassword(password) {
8
+ if (!password) return { valid: false, message: "\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A" };
9
+ if (password.length < 6) return { valid: false, message: "\u5BC6\u7801\u957F\u5EA6\u81F3\u5C11 6 \u4F4D" };
10
+ return { valid: true };
11
+ }
12
+ function validateEmail(email) {
13
+ return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.trim());
14
+ }
15
+ function getAuthClientError(result, fallback) {
16
+ const r = result;
17
+ if (!r?.error) return null;
18
+ return r.error.message ?? r.error.statusText ?? fallback;
19
+ }
20
+ function errorMessage(error, fallback) {
21
+ if (error instanceof Error && error.message) return error.message;
22
+ if (typeof error === "string") return error;
23
+ return fallback;
24
+ }
25
+
26
+ exports.errorMessage = errorMessage;
27
+ exports.getAuthClientError = getAuthClientError;
28
+ exports.validateEmail = validateEmail;
29
+ exports.validatePassword = validatePassword;
30
+ exports.validatePhoneNumber = validatePhoneNumber;
31
+ //# sourceMappingURL=chunk-MIDXG6LS.js.map
32
+ //# sourceMappingURL=chunk-MIDXG6LS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/auth/components/utils.ts"],"names":[],"mappings":";;;AACO,SAAS,oBAAoB,KAAA,EAAwB;AAC1D,EAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA;AAC1C;AAEO,SAAS,iBAAiB,QAAA,EAAwD;AACvF,EAAA,IAAI,CAAC,QAAA,EAAU,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,SAAS,sCAAA,EAAS;AACxD,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,SAAS,+CAAA,EAAa;AACtE,EAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AACvB;AAEO,SAAS,cAAc,KAAA,EAAwB;AACpD,EAAA,OAAO,4BAAA,CAA6B,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA;AACvD;AAOO,SAAS,kBAAA,CAAmB,QAAiB,QAAA,EAAiC;AACnF,EAAA,MAAM,CAAA,GAAI,MAAA;AACV,EAAA,IAAI,CAAC,CAAA,EAAG,KAAA,EAAO,OAAO,IAAA;AACtB,EAAA,OAAO,CAAA,CAAE,KAAA,CAAM,OAAA,IAAW,CAAA,CAAE,MAAM,UAAA,IAAc,QAAA;AAClD;AAEO,SAAS,YAAA,CAAa,OAAgB,QAAA,EAA0B;AACrE,EAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,SAAgB,KAAA,CAAM,OAAA;AAC1D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,OAAO,QAAA;AACT","file":"chunk-MIDXG6LS.js","sourcesContent":["/** 中国大陆手机号 */\nexport function validatePhoneNumber(phone: string): boolean {\n return /^1[3-9]\\d{9}$/.test(phone.trim());\n}\n\nexport function validatePassword(password: string): { valid: boolean; message?: string } {\n if (!password) return { valid: false, message: '密码不能为空' };\n if (password.length < 6) return { valid: false, message: '密码长度至少 6 位' };\n return { valid: true };\n}\n\nexport function validateEmail(email: string): boolean {\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email.trim());\n}\n\ntype AuthClientResult = {\n error?: { message?: string; statusText?: string } | null;\n data?: unknown;\n};\n\nexport function getAuthClientError(result: unknown, fallback: string): string | null {\n const r = result as AuthClientResult | null | undefined;\n if (!r?.error) return null;\n return r.error.message ?? r.error.statusText ?? fallback;\n}\n\nexport function errorMessage(error: unknown, fallback: string): string {\n if (error instanceof Error && error.message) return error.message;\n if (typeof error === 'string') return error;\n return fallback;\n}\n"]}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var chunkS6YSGVWD_js = require('./chunk-S6YSGVWD.js');
4
+ var chunkCAYOQDBR_js = require('./chunk-CAYOQDBR.js');
5
+ var chunkUCOE6SET_js = require('./chunk-UCOE6SET.js');
6
+ var chunkXJ7ZAGC5_js = require('./chunk-XJ7ZAGC5.js');
7
+ var chunkNSBPE2FW_js = require('./chunk-NSBPE2FW.js');
8
+
9
+ // src/common/storage/index.ts
10
+ var storage_exports = {};
11
+ chunkNSBPE2FW_js.__export(storage_exports, {
12
+ ElectronStorageAdapter: () => chunkUCOE6SET_js.ElectronStorageAdapter,
13
+ MiniAppStorageAdapter: () => chunkS6YSGVWD_js.MiniAppStorageAdapter,
14
+ ReactNativeStorageAdapter: () => chunkCAYOQDBR_js.ReactNativeStorageAdapter,
15
+ WebStorageAdapter: () => chunkXJ7ZAGC5_js.WebStorageAdapter,
16
+ useAsyncStorage: () => chunkS6YSGVWD_js.useAsyncStorage,
17
+ useElectronStorage: () => chunkS6YSGVWD_js.useElectronStorage,
18
+ useLocalStorage: () => chunkS6YSGVWD_js.useLocalStorage,
19
+ useStorage: () => chunkS6YSGVWD_js.useStorage,
20
+ useTaroStorage: () => chunkS6YSGVWD_js.useTaroStorage
21
+ });
22
+
23
+ exports.storage_exports = storage_exports;
24
+ //# sourceMappingURL=chunk-NDGHXVGS.js.map
25
+ //# sourceMappingURL=chunk-NDGHXVGS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/storage/index.ts"],"names":["__export","ElectronStorageAdapter","MiniAppStorageAdapter","ReactNativeStorageAdapter","WebStorageAdapter","useAsyncStorage","useElectronStorage","useLocalStorage","useStorage","useTaroStorage"],"mappings":";;;;;;;;;AAAA,IAAA,eAAA,GAAA;AAAAA,yBAAA,CAAA,eAAA,EAAA;AAAA,EAAA,sBAAA,EAAA,MAAAC,uCAAA;AAAA,EAAA,qBAAA,EAAA,MAAAC,sCAAA;AAAA,EAAA,yBAAA,EAAA,MAAAC,0CAAA;AAAA,EAAA,iBAAA,EAAA,MAAAC,kCAAA;AAAA,EAAA,eAAA,EAAA,MAAAC,gCAAA;AAAA,EAAA,kBAAA,EAAA,MAAAC,mCAAA;AAAA,EAAA,eAAA,EAAA,MAAAC,gCAAA;AAAA,EAAA,UAAA,EAAA,MAAAC,2BAAA;AAAA,EAAA,cAAA,EAAA,MAAAC;AAAA,CAAA,CAAA","file":"chunk-NDGHXVGS.js","sourcesContent":["/**\n * @package sa2kit/common/storage\n */\nexport * from '../../storage';\n"]}
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var client = require('better-auth/client');
4
+ var plugins = require('better-auth/client/plugins');
5
+
6
+ // src/common/auth/client/create-auth-client.ts
7
+ function buildSa2kitAuthClient(options) {
8
+ return client.createAuthClient({
9
+ baseURL: options.baseURL.replace(/\/+$/, ""),
10
+ basePath: options.basePath ?? "/api/auth",
11
+ plugins: [plugins.emailOTPClient(), plugins.phoneNumberClient()]
12
+ });
13
+ }
14
+ function createSa2kitAuthClient(options) {
15
+ return buildSa2kitAuthClient(options);
16
+ }
17
+
18
+ exports.createSa2kitAuthClient = createSa2kitAuthClient;
19
+ //# sourceMappingURL=chunk-PA4ELVGI.js.map
20
+ //# sourceMappingURL=chunk-PA4ELVGI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/auth/client/create-auth-client.ts"],"names":["createAuthClient","emailOTPClient","phoneNumberClient"],"mappings":";;;;;;AAYA,SAAS,sBAAsB,OAAA,EAAkC;AAC/D,EAAA,OAAOA,uBAAA,CAAiB;AAAA,IACtB,OAAA,EAAS,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAAA,IAC3C,QAAA,EAAU,QAAQ,QAAA,IAAY,WAAA;AAAA,IAC9B,OAAA,EAAS,CAACC,sBAAA,EAAe,EAAGC,2BAAmB;AAAA,GAChD,CAAA;AACH;AAIO,SAAS,uBAAuB,OAAA,EAAoD;AACzF,EAAA,OAAO,sBAAsB,OAAO,CAAA;AACtC","file":"chunk-PA4ELVGI.js","sourcesContent":["/**\n * Better Auth 客户端(vanilla — RN / 小程序 / Node fetch)\n */\nimport { createAuthClient } from 'better-auth/client';\nimport { emailOTPClient } from 'better-auth/client/plugins';\nimport { phoneNumberClient } from 'better-auth/client/plugins';\n\nexport type Sa2kitAuthClientOptions = {\n baseURL: string;\n basePath?: string;\n};\n\nfunction buildSa2kitAuthClient(options: Sa2kitAuthClientOptions) {\n return createAuthClient({\n baseURL: options.baseURL.replace(/\\/+$/, ''),\n basePath: options.basePath ?? '/api/auth',\n plugins: [emailOTPClient(), phoneNumberClient()],\n });\n}\n\nexport type Sa2kitAuthClient = ReturnType<typeof buildSa2kitAuthClient>;\n\nexport function createSa2kitAuthClient(options: Sa2kitAuthClientOptions): Sa2kitAuthClient {\n return buildSa2kitAuthClient(options);\n}\n"]}
@@ -0,0 +1,76 @@
1
+ import { __require } from './chunk-MAI35PU6.mjs';
2
+
3
+ // src/storage/adapters/react-native-adapter.ts
4
+ var AsyncStorage = null;
5
+ try {
6
+ AsyncStorage = __require("@react-native-async-storage/async-storage").default;
7
+ } catch (e) {
8
+ }
9
+ var ReactNativeStorageAdapter = class {
10
+ constructor() {
11
+ this.listeners = /* @__PURE__ */ new Map();
12
+ }
13
+ async getItem(key) {
14
+ if (!AsyncStorage) return null;
15
+ try {
16
+ return await AsyncStorage.getItem(key);
17
+ } catch (error) {
18
+ console.error('[ReactNativeStorage] Error getting item "' + key + '":', error);
19
+ return null;
20
+ }
21
+ }
22
+ async setItem(key, value) {
23
+ if (!AsyncStorage) {
24
+ throw new Error("AsyncStorage is not available");
25
+ }
26
+ try {
27
+ await AsyncStorage.setItem(key, value);
28
+ this.notifyListeners(key, value);
29
+ } catch (error) {
30
+ console.error('[ReactNativeStorage] Error setting item "' + key + '":', error);
31
+ throw error;
32
+ }
33
+ }
34
+ async removeItem(key) {
35
+ if (!AsyncStorage) {
36
+ throw new Error("AsyncStorage is not available");
37
+ }
38
+ try {
39
+ await AsyncStorage.removeItem(key);
40
+ this.notifyListeners(key, null);
41
+ } catch (error) {
42
+ console.error('[ReactNativeStorage] Error removing item "' + key + '":', error);
43
+ throw error;
44
+ }
45
+ }
46
+ async clear() {
47
+ if (!AsyncStorage) {
48
+ throw new Error("AsyncStorage is not available");
49
+ }
50
+ try {
51
+ await AsyncStorage.clear();
52
+ } catch (error) {
53
+ console.error("[ReactNativeStorage] Error clearing storage:", error);
54
+ throw error;
55
+ }
56
+ }
57
+ addChangeListener(callback) {
58
+ if (!this.listeners.has("*")) {
59
+ this.listeners.set("*", /* @__PURE__ */ new Set());
60
+ }
61
+ this.listeners.get("*").add(callback);
62
+ return () => {
63
+ this.listeners.get("*")?.delete(callback);
64
+ };
65
+ }
66
+ notifyListeners(key, value) {
67
+ const globalListeners = this.listeners.get("*");
68
+ if (globalListeners) {
69
+ globalListeners.forEach((callback) => callback(key, value));
70
+ }
71
+ }
72
+ };
73
+
74
+ export { ReactNativeStorageAdapter };
75
+ //# sourceMappingURL=chunk-Q5VFBPMG.mjs.map
76
+ //# sourceMappingURL=chunk-Q5VFBPMG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/storage/adapters/react-native-adapter.ts"],"names":[],"mappings":"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","file":"chunk-Q5VFBPMG.mjs","sourcesContent":["/**\n * React Native 平台存储适配器 (AsyncStorage)\n */\n\nimport type { StorageAdapter } from '../types';\n\n// 动态导入 AsyncStorage(避免在非 RN 环境报错)\nlet AsyncStorage: any = null;\n\ntry {\n AsyncStorage = require('@react-native-async-storage/async-storage').default;\n} catch (e) {\n // AsyncStorage 不可用(非 React Native 环境)\n // 这是正常的,不需要警告\n}\n\nexport class ReactNativeStorageAdapter implements StorageAdapter {\n private listeners: Map<string, Set<(key: string, value: string | null) => void>> = new Map();\n\n async getItem(key: string): Promise<string | null> {\n if (!AsyncStorage) return null;\n\n try {\n return await AsyncStorage.getItem(key);\n } catch (error) {\n console.error('[ReactNativeStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n if (!AsyncStorage) {\n throw new Error('AsyncStorage is not available');\n }\n\n try {\n await AsyncStorage.setItem(key, value);\n this.notifyListeners(key, value);\n } catch (error) {\n console.error('[ReactNativeStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n if (!AsyncStorage) {\n throw new Error('AsyncStorage is not available');\n }\n\n try {\n await AsyncStorage.removeItem(key);\n this.notifyListeners(key, null);\n } catch (error) {\n console.error('[ReactNativeStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n if (!AsyncStorage) {\n throw new Error('AsyncStorage is not available');\n }\n\n try {\n await AsyncStorage.clear();\n } catch (error) {\n console.error('[ReactNativeStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n addChangeListener(callback: (key: string, value: string | null) => void): () => void {\n // React Native 没有原生的跨实例存储监听,我们使用内存中的监听器\n if (!this.listeners.has('*')) {\n this.listeners.set('*', new Set());\n }\n\n this.listeners.get('*')!.add(callback);\n\n // 返回清理函数\n return () => {\n this.listeners.get('*')?.delete(callback);\n };\n }\n\n private notifyListeners(key: string, value: string | null): void {\n const globalListeners = this.listeners.get('*');\n if (globalListeners) {\n globalListeners.forEach((callback) => callback(key, value));\n }\n }\n}\n\n"]}
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkS732H246_js = require('./chunk-S732H246.js');
3
+ var chunk6PMXAK7F_js = require('./chunk-6PMXAK7F.js');
4
4
  var chunkATUCZXJY_js = require('./chunk-ATUCZXJY.js');
5
5
 
6
6
  // src/ossFile/server/config.ts
7
7
  function createOssFileConfigManager(options = {}) {
8
8
  const { ossConfig, fallbackToLocal = true, customConfig } = options;
9
- const manager = new chunkS732H246_js.FileServiceConfigManager(customConfig);
10
- const resolvedOss = ossConfig ?? chunkS732H246_js.loadOSSConfigFromEnv();
9
+ const manager = new chunk6PMXAK7F_js.FileServiceConfigManager(customConfig);
10
+ const resolvedOss = ossConfig ?? chunk6PMXAK7F_js.loadOSSConfigFromEnv();
11
11
  if (chunkATUCZXJY_js.isCompleteOssConfig(resolvedOss)) {
12
12
  manager.enableStorageProvider("aliyun-oss", resolvedOss);
13
13
  manager.updateConfig({ defaultStorage: "aliyun-oss" });
@@ -20,7 +20,7 @@ function createOssFileConfigManager(options = {}) {
20
20
  return manager;
21
21
  }
22
22
  async function createOssFileConfigManagerFromEnv(customConfig) {
23
- return chunkS732H246_js.createFileServiceConfigWithConfigManager(customConfig);
23
+ return chunk6PMXAK7F_js.createFileServiceConfigWithConfigManager(customConfig);
24
24
  }
25
25
  function getOssStorageModeLabel(config) {
26
26
  const oss = config.storageProviders["aliyun-oss"];
@@ -37,7 +37,7 @@ function isOssEnabledInConfig(config) {
37
37
  // src/ossFile/server/service.ts
38
38
  async function createOssFileServiceWithDrizzlePersistence(options) {
39
39
  const configManager = options.configManager ?? await createOssFileConfigManagerFromEnv();
40
- const repository = chunkS732H246_js.createDrizzleFileRepository({
40
+ const repository = chunk6PMXAK7F_js.createDrizzleFileRepository({
41
41
  db: options.persistence.db,
42
42
  fileMetadata: options.persistence.fileMetadata,
43
43
  fileStorageProviders: options.persistence.fileStorageProviders
@@ -91,7 +91,7 @@ async function createUniversalFileServiceFromConfigManager(configManager, reposi
91
91
  }
92
92
  } : {}
93
93
  };
94
- const service = new chunkS732H246_js.UniversalFileService(serviceConfig);
94
+ const service = new chunk6PMXAK7F_js.UniversalFileService(serviceConfig);
95
95
  await service.initialize();
96
96
  return service;
97
97
  }
@@ -106,7 +106,7 @@ async function getFileUrlByFileId(fileId, options) {
106
106
  );
107
107
  return await service2.getFileUrl(fileId, options.userId);
108
108
  }
109
- const service = await chunkS732H246_js.createUniversalFileServiceWithConfigManager();
109
+ const service = await chunk6PMXAK7F_js.createUniversalFileServiceWithConfigManager();
110
110
  return await service.getFileUrl(fileId, options?.userId);
111
111
  } catch {
112
112
  return null;
@@ -152,8 +152,8 @@ function createFileUrlResolver(options = {}) {
152
152
  });
153
153
  }
154
154
  async function createOssFileService(options = {}) {
155
- return chunkS732H246_js.createFileServiceWithFactory({
156
- configLoaders: [() => Promise.resolve(chunkS732H246_js.loadConfigFromEnv())],
155
+ return chunk6PMXAK7F_js.createFileServiceWithFactory({
156
+ configLoaders: [() => Promise.resolve(chunk6PMXAK7F_js.loadConfigFromEnv())],
157
157
  autoInitialize: true,
158
158
  ...options
159
159
  });
@@ -203,5 +203,5 @@ exports.isOssEnabledInConfig = isOssEnabledInConfig;
203
203
  exports.resolveFileUrlMap = resolveFileUrlMap;
204
204
  exports.resolveUploadAccessUrl = resolveUploadAccessUrl;
205
205
  exports.uploadFileAndResolveAccessUrl = uploadFileAndResolveAccessUrl;
206
- //# sourceMappingURL=chunk-WZDTNDYR.js.map
207
- //# sourceMappingURL=chunk-WZDTNDYR.js.map
206
+ //# sourceMappingURL=chunk-QSKLQX6H.js.map
207
+ //# sourceMappingURL=chunk-QSKLQX6H.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ossFile/server/config.ts","../src/ossFile/server/service.ts","../src/ossFile/server/bootstrap.ts"],"names":["FileServiceConfigManager","loadOSSConfigFromEnv","isCompleteOssConfig","createFileServiceConfigWithConfigManager","createDrizzleFileRepository","UniversalFileService","service","createUniversalFileServiceWithConfigManager","createFileServiceWithFactory","loadConfigFromEnv"],"mappings":";;;;;;AA0BO,SAAS,0BAAA,CACd,OAAA,GAA6C,EAAC,EACpB;AAC1B,EAAA,MAAM,EAAE,SAAA,EAAW,eAAA,GAAkB,IAAA,EAAM,cAAa,GAAI,OAAA;AAC5D,EAAA,MAAM,OAAA,GAAU,IAAIA,yCAAA,CAAyB,YAAY,CAAA;AAEzD,EAAA,MAAM,WAAA,GAAc,aAAaC,qCAAA,EAAqB;AACtD,EAAA,IAAIC,oCAAA,CAAoB,WAAW,CAAA,EAAG;AACpC,IAAA,OAAA,CAAQ,qBAAA,CAAsB,cAAc,WAAW,CAAA;AACvD,IAAA,OAAA,CAAQ,YAAA,CAAa,EAAE,cAAA,EAAgB,YAAA,EAAc,CAAA;AACrD,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,OAAA,CAAQ,sBAAsB,OAAO,CAAA;AACrC,IAAA,OAAA,CAAQ,YAAA,CAAa,EAAE,cAAA,EAAgB,OAAA,EAAS,CAAA;AAAA,EAClD;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,eAAsB,kCACpB,YAAA,EACmC;AACnC,EAAA,OAAOC,0DAAyC,YAAY,CAAA;AAC9D;AAEO,SAAS,uBAAuB,MAAA,EAAmC;AACxE,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,gBAAA,CAAiB,YAAY,CAAA;AAChD,EAAA,IAAI,KAAK,OAAA,EAAS;AAChB,IAAA,OAAO,GAAA,CAAI,eACP,yDAAA,GACA,wBAAA;AAAA,EACN;AACA,EAAA,OAAO,0BAAA;AACT;AAEO,SAAS,qBAAqB,MAAA,EAAoC;AACvE,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,gBAAA,CAAiB,YAAY,CAAA;AAChD,EAAA,OAAO,OAAA,CAAQ,KAAK,OAAO,CAAA;AAC7B;;;AC3CA,eAAsB,2CAA2C,OAAA,EAG/B;AAChC,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,aAAA,IACzB,MAAM,iCAAA,EAAkC;AAC7C,EAAA,MAAM,aAAaC,4CAAA,CAA4B;AAAA,IAC7C,EAAA,EAAI,QAAQ,WAAA,CAAY,EAAA;AAAA,IACxB,YAAA,EAAc,QAAQ,WAAA,CAAY,YAAA;AAAA,IAClC,oBAAA,EAAsB,QAAQ,WAAA,CAAY;AAAA,GAC3C,CAAA;AACD,EAAA,OAAO,2CAAA,CAA4C,eAAe,UAAU,CAAA;AAC9E;AAEA,eAAsB,sBAAA,CACpB,OAAA,EACA,MAAA,EACA,OAAA,EACiB;AACjB,EAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,IAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,EACjB;AACA,EAAA,IAAI;AACF,IAAA,MAAM,MAAM,MAAM,OAAA,CAAQ,UAAA,CAAW,MAAA,EAAQ,SAAS,MAAM,CAAA;AAC5D,IAAA,IAAI,KAAK,OAAO,GAAA;AAAA,EAClB,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,OAAA,EAAS,YAAA,IAAgB,CAAA,SAAA,EAAY,MAAM,CAAA,CAAA;AACpD;AAEA,eAAsB,6BAAA,CACpB,OAAA,EACA,UAAA,EACA,MAAA,EACuH;AACvH,EAAA,MAAM,YAAA,GAAe,MAAM,OAAA,CAAQ,UAAA,CAAW,UAAU,CAAA;AACxD,EAAA,MAAM,SAAA,GAAY,MAAM,sBAAA,CAAuB,OAAA,EAAS,aAAa,EAAA,EAAI;AAAA,IACvE,QAAQ,YAAA,CAAa,MAAA;AAAA,IACrB,MAAA;AAAA,IACA,YAAA,EAAc,CAAA,SAAA,EAAY,YAAA,CAAa,WAAW,CAAA;AAAA,GACnD,CAAA;AACD,EAAA,OAAO;AAAA,IACL,QAAQ,YAAA,CAAa,EAAA;AAAA,IACrB,SAAA;AAAA,IACA;AAAA,GACF;AACF;AAKA,eAAsB,2CAAA,CACpB,eACA,UAAA,EAC+B;AAC/B,EAAA,MAAM,MAAA,GAAS,cAAc,SAAA,EAAU;AACvC,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,OAAA,EAAS,MAAA,CAAO,gBAAA,CAAiB,MAAA,CAAO,cAAc,CAAA;AAAA,IACtD,gBAAgB,MAAA,CAAO,cAAA;AAAA,IACvB,YAAY,MAAA,CAAO,UAAA;AAAA,IACnB,kBAAkB,MAAA,CAAO,gBAAA;AAAA,IACzB,cAAc,MAAA,CAAO,YAAA;AAAA,IACrB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,kBAAkB,MAAA,CAAO,gBAAA;AAAA,IACzB,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,WAAA,EAAa,OAAO,KAAA,CAAM,WAAA;AAAA,MAC1B,MAAA,EAAQ,OAAO,KAAA,CAAM;AAAA,KACvB;AAAA,IACA,GAAI,UAAA,GACA;AAAA,MACE,WAAA,EAAa;AAAA,QACX,OAAA,EAAS,IAAA;AAAA,QACT,UAAA;AAAA,QACA,WAAA,EAAa;AAAA;AACf,QAEF;AAAC,GACP;AAEA,EAAA,MAAM,OAAA,GAAU,IAAIC,qCAAA,CAAqB,aAAoB,CAAA;AAC7D,EAAA,MAAM,QAAQ,UAAA,EAAW;AACzB,EAAA,OAAO,OAAA;AACT;AAKA,eAAsB,kBAAA,CACpB,QACA,OAAA,EAKwB;AACxB,EAAA,IAAI;AACF,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,OAAO,MAAM,OAAA,CAAQ,OAAA,CAAQ,UAAA,CAAW,MAAA,EAAQ,QAAQ,MAAM,CAAA;AAAA,IAChE;AACA,IAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,MAAA,MAAMC,WAAU,MAAM,2CAAA;AAAA,QACpB,OAAA,CAAQ;AAAA,OACV;AACA,MAAA,OAAO,MAAMA,QAAAA,CAAQ,UAAA,CAAW,MAAA,EAAQ,QAAQ,MAAM,CAAA;AAAA,IACxD;AACA,IAAA,MAAM,OAAA,GAAU,MAAMC,4DAAA,EAA4C;AAClE,IAAA,OAAO,MAAM,OAAA,CAAQ,UAAA,CAAW,MAAA,EAAQ,SAAS,MAAM,CAAA;AAAA,EACzD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAKA,eAAsB,iBAAA,CACpB,SACA,OAAA,EAK8B;AAC9B,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAoB;AACpC,EAAA,MAAM,SAAA,GAAY,CAAC,GAAG,IAAI,IAAI,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAC,CAAC,CAAA;AAEtD,EAAA,MAAM,OAAA,CAAQ,GAAA;AAAA,IACZ,SAAA,CAAU,GAAA,CAAI,OAAO,MAAA,KAAW;AAC9B,MAAA,IAAI,GAAA;AACJ,MAAA,IAAI,SAAS,QAAA,EAAU;AACrB,QAAA,GAAA,GAAM,MAAM,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA;AAAA,MACrC,CAAA,MAAO;AACL,QAAA,GAAA,GAAM,MAAM,mBAAmB,MAAA,EAAQ;AAAA,UACrC,eAAe,OAAA,EAAS,aAAA;AAAA,UACxB,QAAQ,OAAA,EAAS;AAAA,SAClB,CAAA;AAAA,MACH;AACA,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,GAAA,CAAI,GAAA,CAAI,QAAQ,GAAG,CAAA;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,GACH;AAEA,EAAA,OAAO,GAAA;AACT;AAgBO,SAAS,qBAAA,CACd,OAAA,GAAwC,EAAC,EACxB;AACjB,EAAA,IAAI,oBAAA,GAAiE,IAAA;AAErE,EAAA,eAAe,gBAAA,GAAsD;AACnE,IAAA,IAAI,QAAQ,aAAA,EAAe;AACzB,MAAA,OAAO,OAAA,CAAQ,aAAA;AAAA,IACjB;AACA,IAAA,IAAI,QAAQ,iBAAA,EAAmB;AAC7B,MAAA,oBAAA,KAAA,oBAAA,GAAyB,QAAQ,iBAAA,EAAkB,CAAA;AACnD,MAAA,OAAO,oBAAA;AAAA,IACT;AACA,IAAA,oBAAA,KAAA,oBAAA,GAAyB,iCAAA,EAAkC,CAAA;AAC3D,IAAA,OAAO,oBAAA;AAAA,EACT;AAEA,EAAA,OAAO,OAAO,MAAA,EAAgB,MAAA,KAC5B,kBAAA,CAAmB,MAAA,EAAQ;AAAA,IACzB,aAAA,EAAe,MAAM,gBAAA,EAAiB;AAAA,IACtC,MAAA,EAAQ,UAAU,OAAA,CAAQ;AAAA,GAC3B,CAAA;AACL;AAEA,eAAsB,oBAAA,CACpB,OAAA,GAAqC,EAAC,EACP;AAC/B,EAAA,OAAOC,6CAAA,CAA6B;AAAA,IAClC,eAAe,CAAC,MAAM,QAAQ,OAAA,CAAQC,kCAAA,EAAmB,CAAC,CAAA;AAAA,IAC1D,cAAA,EAAgB,IAAA;AAAA,IAChB,GAAG;AAAA,GACJ,CAAA;AACH;;;AC1LO,SAAS,sBAAA,CACd,OAAA,GAAmC,EAAC,EAClB;AAClB,EAAA,IAAI,oBAAA,GAAiE,IAAA;AAErE,EAAA,MAAM,mBAAmB,YAA+C;AACtE,IAAA,oBAAA,KAAA,oBAAA,GACE,OAAA,CAAQ,iBAAA,IAAoB,IAAK,iCAAA,EAAkC,CAAA;AACrE,IAAA,OAAO,oBAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,gBAAA;AAAA,IACA,mBAAmB,YAAY;AAC7B,MAAA,MAAM,aAAA,GAAgB,MAAM,gBAAA,EAAiB;AAC7C,MAAA,OAAO,4CAA4C,aAAa,CAAA;AAAA,IAClE,CAAA;AAAA,IACA,6BAA6B,YAAY;AACvC,MAAA,MAAM,aAAA,GAAgB,MAAM,gBAAA,EAAiB;AAC7C,MAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,QAAA,OAAO,0CAAA,CAA2C;AAAA,UAChD,aAAA;AAAA,UACA,aAAa,OAAA,CAAQ;AAAA,SACtB,CAAA;AAAA,MACH;AACA,MAAA,OAAO,4CAA4C,aAAa,CAAA;AAAA,IAClE,CAAA;AAAA,IACA,uBAAuB,MACrB,qBAAA,CAAsB,EAAE,iBAAA,EAAmB,kBAAkB,CAAA;AAAA,IAC/D,UAAA,EAAY,OAAO,MAAA,EAAQ,MAAA,KAAW;AACpC,MAAA,MAAM,aAAA,GAAgB,MAAM,gBAAA,EAAiB;AAC7C,MAAA,OAAO,kBAAA,CAAmB,MAAA,EAAQ,EAAE,aAAA,EAAe,QAAQ,CAAA;AAAA,IAC7D;AAAA,GACF;AACF","file":"chunk-WZDTNDYR.js","sourcesContent":["import type { AliyunOSSConfig } from '../../universalFile/server/types';\nimport type { FileServiceConfig } from '../../universalFile/server/config-manager';\nimport {\n FileServiceConfigManager,\n createFileServiceConfigWithConfigManager,\n} from '../../universalFile/server/config-manager';\nimport { loadOSSConfigFromEnv } from '../../universalFile/server/config-helpers';\nimport {\n parseAliyunOssConfigFromMap,\n isCompleteOssConfig,\n STANDARD_ALIYUN_OSS_KEYS,\n type OssConfigKeyMap,\n} from '../shared/ossConfig';\n\nexport {\n STANDARD_ALIYUN_OSS_KEYS,\n parseAliyunOssConfigFromMap,\n type OssConfigKeyMap,\n};\n\nexport interface CreateOssFileConfigManagerOptions {\n ossConfig?: AliyunOSSConfig | null;\n fallbackToLocal?: boolean;\n customConfig?: Partial<FileServiceConfig>;\n}\n\nexport function createOssFileConfigManager(\n options: CreateOssFileConfigManagerOptions = {},\n): FileServiceConfigManager {\n const { ossConfig, fallbackToLocal = true, customConfig } = options;\n const manager = new FileServiceConfigManager(customConfig);\n\n const resolvedOss = ossConfig ?? loadOSSConfigFromEnv();\n if (isCompleteOssConfig(resolvedOss)) {\n manager.enableStorageProvider('aliyun-oss', resolvedOss);\n manager.updateConfig({ defaultStorage: 'aliyun-oss' });\n return manager;\n }\n\n if (fallbackToLocal) {\n manager.enableStorageProvider('local');\n manager.updateConfig({ defaultStorage: 'local' });\n }\n\n return manager;\n}\n\nexport async function createOssFileConfigManagerFromEnv(\n customConfig?: Partial<FileServiceConfig>,\n): Promise<FileServiceConfigManager> {\n return createFileServiceConfigWithConfigManager(customConfig);\n}\n\nexport function getOssStorageModeLabel(config: FileServiceConfig): string {\n const oss = config.storageProviders['aliyun-oss'] as AliyunOSSConfig | undefined;\n if (oss?.enabled) {\n return oss.customDomain\n ? '阿里云 OSS + 自定义域名'\n : '阿里云 OSS';\n }\n return '本地存储';\n}\n\nexport function isOssEnabledInConfig(config: FileServiceConfig): boolean {\n const oss = config.storageProviders['aliyun-oss'];\n return Boolean(oss?.enabled);\n}\n\n/** @deprecated 使用 createOssFileConfigManagerFromEnv */\nexport async function getShowMasterpieceFileConfig(): Promise<FileServiceConfigManager> {\n return createOssFileConfigManagerFromEnv();\n}\n","import {\n UniversalFileService,\n createFileServiceWithFactory,\n loadConfigFromEnv,\n createDrizzleFileRepository,\n} from '../../universalFile/server';\nimport type { FileServiceFactoryOptions } from '../../universalFile/server/config-helpers';\nimport type { UploadFileInfo } from '../../universalFile/types';\nimport {\n FileServiceConfigManager,\n type FileServiceConfig,\n} from '../../universalFile/server/config-manager';\nimport { createUniversalFileServiceWithConfigManager } from '../../universalFile/server/service-helpers';\nimport { createOssFileConfigManagerFromEnv } from './config';\n\nexport { UniversalFileService, createUniversalFileServiceWithConfigManager };\n\nexport interface DrizzlePersistenceOptions {\n db: unknown;\n fileMetadata: unknown;\n fileStorageProviders: unknown;\n}\n\nexport async function createOssFileServiceWithDrizzlePersistence(options: {\n configManager?: FileServiceConfigManager;\n persistence: DrizzlePersistenceOptions;\n}): Promise<UniversalFileService> {\n const configManager = options.configManager\n ?? await createOssFileConfigManagerFromEnv();\n const repository = createDrizzleFileRepository({\n db: options.persistence.db,\n fileMetadata: options.persistence.fileMetadata,\n fileStorageProviders: options.persistence.fileStorageProviders,\n });\n return createUniversalFileServiceFromConfigManager(configManager, repository);\n}\n\nexport async function resolveUploadAccessUrl(\n service: UniversalFileService,\n fileId: string,\n options?: { cdnUrl?: string | null; userId?: string; fallbackPath?: string },\n): Promise<string> {\n if (options?.cdnUrl) {\n return options.cdnUrl;\n }\n try {\n const url = await service.getFileUrl(fileId, options?.userId);\n if (url) return url;\n } catch {\n // fall through\n }\n return options?.fallbackPath ?? `/uploads/${fileId}`;\n}\n\nexport async function uploadFileAndResolveAccessUrl(\n service: UniversalFileService,\n uploadInfo: UploadFileInfo,\n userId?: string,\n): Promise<{ fileId: string; accessUrl: string; uploadResult: Awaited<ReturnType<UniversalFileService['uploadFile']>> }> {\n const uploadResult = await service.uploadFile(uploadInfo);\n const accessUrl = await resolveUploadAccessUrl(service, uploadResult.id, {\n cdnUrl: uploadResult.cdnUrl,\n userId,\n fallbackPath: `/uploads/${uploadResult.storagePath}`,\n });\n return {\n fileId: uploadResult.id,\n accessUrl,\n uploadResult,\n };\n}\n\n/**\n * 基于配置管理器创建并初始化 UniversalFileService。\n */\nexport async function createUniversalFileServiceFromConfigManager(\n configManager: FileServiceConfigManager,\n repository?: unknown,\n): Promise<UniversalFileService> {\n const config = configManager.getConfig();\n const serviceConfig = {\n storage: config.storageProviders[config.defaultStorage],\n defaultStorage: config.defaultStorage,\n defaultCDN: config.defaultCDN,\n storageProviders: config.storageProviders,\n cdnProviders: config.cdnProviders,\n maxFileSize: config.maxFileSize,\n allowedMimeTypes: config.allowedMimeTypes,\n cache: {\n enabled: true,\n metadataTTL: config.cache.metadataTTL,\n urlTTL: config.cache.urlTTL,\n },\n ...(repository\n ? {\n persistence: {\n enabled: true,\n repository,\n autoPersist: true,\n },\n }\n : {}),\n };\n\n const service = new UniversalFileService(serviceConfig as any);\n await service.initialize();\n return service;\n}\n\n/**\n * 通过 fileId 解析访问 URL(需已初始化的 UniversalFileService 或全局 ConfigManager)。\n */\nexport async function getFileUrlByFileId(\n fileId: string,\n options?: {\n configManager?: FileServiceConfigManager;\n service?: UniversalFileService;\n userId?: string;\n },\n): Promise<string | null> {\n try {\n if (options?.service) {\n return await options.service.getFileUrl(fileId, options.userId);\n }\n if (options?.configManager) {\n const service = await createUniversalFileServiceFromConfigManager(\n options.configManager,\n );\n return await service.getFileUrl(fileId, options.userId);\n }\n const service = await createUniversalFileServiceWithConfigManager();\n return await service.getFileUrl(fileId, options?.userId);\n } catch {\n return null;\n }\n}\n\n/**\n * 批量解析 fileId → URL。\n */\nexport async function resolveFileUrlMap(\n fileIds: string[],\n options?: {\n resolver?: (fileId: string) => Promise<string | null | undefined>;\n configManager?: FileServiceConfigManager;\n userId?: string;\n },\n): Promise<Map<string, string>> {\n const map = new Map<string, string>();\n const uniqueIds = [...new Set(fileIds.filter(Boolean))];\n\n await Promise.all(\n uniqueIds.map(async (fileId) => {\n let url: string | null | undefined;\n if (options?.resolver) {\n url = await options.resolver(fileId);\n } else {\n url = await getFileUrlByFileId(fileId, {\n configManager: options?.configManager,\n userId: options?.userId,\n });\n }\n if (url) {\n map.set(fileId, url);\n }\n }),\n );\n\n return map;\n}\n\nexport type FileUrlResolver = (\n fileId: string,\n userId?: string,\n) => Promise<string | null | undefined>;\n\nexport interface CreateFileUrlResolverOptions {\n configManager?: FileServiceConfigManager;\n loadConfigManager?: () => Promise<FileServiceConfigManager>;\n userId?: string;\n}\n\n/**\n * 显式创建 fileId → URL 解析器(替代 globalThis 单例,R2-203)。\n */\nexport function createFileUrlResolver(\n options: CreateFileUrlResolverOptions = {},\n): FileUrlResolver {\n let configManagerPromise: Promise<FileServiceConfigManager> | null = null;\n\n async function getConfigManager(): Promise<FileServiceConfigManager> {\n if (options.configManager) {\n return options.configManager;\n }\n if (options.loadConfigManager) {\n configManagerPromise ??= options.loadConfigManager();\n return configManagerPromise;\n }\n configManagerPromise ??= createOssFileConfigManagerFromEnv();\n return configManagerPromise;\n }\n\n return async (fileId: string, userId?: string) =>\n getFileUrlByFileId(fileId, {\n configManager: await getConfigManager(),\n userId: userId ?? options.userId,\n });\n}\n\nexport async function createOssFileService(\n options: FileServiceFactoryOptions = {},\n): Promise<UniversalFileService> {\n return createFileServiceWithFactory({\n configLoaders: [() => Promise.resolve(loadConfigFromEnv())],\n autoInitialize: true,\n ...options,\n });\n}\n\nexport type { FileServiceConfig, FileServiceConfigManager };\n","import type { FileServiceConfigManager } from '../../universalFile/server/config-manager';\nimport type { UniversalFileService } from '../../universalFile/server';\nimport { createOssFileConfigManagerFromEnv } from './config';\nimport {\n createOssFileServiceWithDrizzlePersistence,\n createUniversalFileServiceFromConfigManager,\n createFileUrlResolver,\n getFileUrlByFileId,\n type DrizzlePersistenceOptions,\n type FileUrlResolver,\n} from './service';\n\nexport interface OssFileBootstrapOptions {\n /** 自定义配置加载(如从 DB 注入 env 后再 createOssFileConfigManagerFromEnv) */\n loadConfigManager?: () => Promise<FileServiceConfigManager>;\n /** Drizzle 持久化;传入后 createPersistentFileService 会写入 file_metadata */\n persistence?: DrizzlePersistenceOptions;\n}\n\nexport interface OssFileBootstrap {\n getConfigManager(): Promise<FileServiceConfigManager>;\n /** 无 Drizzle 持久化的 UniversalFileService(如 skill-manager 自行写 metadata) */\n createFileService(): Promise<UniversalFileService>;\n createPersistentFileService(): Promise<UniversalFileService>;\n createFileUrlResolver(): FileUrlResolver;\n getFileUrl(fileId: string, userId?: string): Promise<string | null>;\n}\n\n/**\n * 一站式 OSS / universal-file 服务端 bootstrap(R2-205)。\n */\nexport function createOssFileBootstrap(\n options: OssFileBootstrapOptions = {},\n): OssFileBootstrap {\n let configManagerPromise: Promise<FileServiceConfigManager> | null = null;\n\n const getConfigManager = async (): Promise<FileServiceConfigManager> => {\n configManagerPromise ??=\n options.loadConfigManager?.() ?? createOssFileConfigManagerFromEnv();\n return configManagerPromise;\n };\n\n return {\n getConfigManager,\n createFileService: async () => {\n const configManager = await getConfigManager();\n return createUniversalFileServiceFromConfigManager(configManager);\n },\n createPersistentFileService: async () => {\n const configManager = await getConfigManager();\n if (options.persistence) {\n return createOssFileServiceWithDrizzlePersistence({\n configManager,\n persistence: options.persistence,\n });\n }\n return createUniversalFileServiceFromConfigManager(configManager);\n },\n createFileUrlResolver: () =>\n createFileUrlResolver({ loadConfigManager: getConfigManager }),\n getFileUrl: async (fileId, userId) => {\n const configManager = await getConfigManager();\n return getFileUrlByFileId(fileId, { configManager, userId });\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/ossFile/server/config.ts","../src/ossFile/server/service.ts","../src/ossFile/server/bootstrap.ts"],"names":["FileServiceConfigManager","loadOSSConfigFromEnv","isCompleteOssConfig","createFileServiceConfigWithConfigManager","createDrizzleFileRepository","UniversalFileService","service","createUniversalFileServiceWithConfigManager","createFileServiceWithFactory","loadConfigFromEnv"],"mappings":"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","file":"chunk-QSKLQX6H.js","sourcesContent":["import type { AliyunOSSConfig } from '../../universalFile/server/types';\nimport type { FileServiceConfig } from '../../universalFile/server/config-manager';\nimport {\n FileServiceConfigManager,\n createFileServiceConfigWithConfigManager,\n} from '../../universalFile/server/config-manager';\nimport { loadOSSConfigFromEnv } from '../../universalFile/server/config-helpers';\nimport {\n parseAliyunOssConfigFromMap,\n isCompleteOssConfig,\n STANDARD_ALIYUN_OSS_KEYS,\n type OssConfigKeyMap,\n} from '../shared/ossConfig';\n\nexport {\n STANDARD_ALIYUN_OSS_KEYS,\n parseAliyunOssConfigFromMap,\n type OssConfigKeyMap,\n};\n\nexport interface CreateOssFileConfigManagerOptions {\n ossConfig?: AliyunOSSConfig | null;\n fallbackToLocal?: boolean;\n customConfig?: Partial<FileServiceConfig>;\n}\n\nexport function createOssFileConfigManager(\n options: CreateOssFileConfigManagerOptions = {},\n): FileServiceConfigManager {\n const { ossConfig, fallbackToLocal = true, customConfig } = options;\n const manager = new FileServiceConfigManager(customConfig);\n\n const resolvedOss = ossConfig ?? loadOSSConfigFromEnv();\n if (isCompleteOssConfig(resolvedOss)) {\n manager.enableStorageProvider('aliyun-oss', resolvedOss);\n manager.updateConfig({ defaultStorage: 'aliyun-oss' });\n return manager;\n }\n\n if (fallbackToLocal) {\n manager.enableStorageProvider('local');\n manager.updateConfig({ defaultStorage: 'local' });\n }\n\n return manager;\n}\n\nexport async function createOssFileConfigManagerFromEnv(\n customConfig?: Partial<FileServiceConfig>,\n): Promise<FileServiceConfigManager> {\n return createFileServiceConfigWithConfigManager(customConfig);\n}\n\nexport function getOssStorageModeLabel(config: FileServiceConfig): string {\n const oss = config.storageProviders['aliyun-oss'] as AliyunOSSConfig | undefined;\n if (oss?.enabled) {\n return oss.customDomain\n ? '阿里云 OSS + 自定义域名'\n : '阿里云 OSS';\n }\n return '本地存储';\n}\n\nexport function isOssEnabledInConfig(config: FileServiceConfig): boolean {\n const oss = config.storageProviders['aliyun-oss'];\n return Boolean(oss?.enabled);\n}\n\n/** @deprecated 使用 createOssFileConfigManagerFromEnv */\nexport async function getShowMasterpieceFileConfig(): Promise<FileServiceConfigManager> {\n return createOssFileConfigManagerFromEnv();\n}\n","import {\n UniversalFileService,\n createFileServiceWithFactory,\n loadConfigFromEnv,\n createDrizzleFileRepository,\n} from '../../universalFile/server';\nimport type { FileServiceFactoryOptions } from '../../universalFile/server/config-helpers';\nimport type { UploadFileInfo } from '../../universalFile/types';\nimport {\n FileServiceConfigManager,\n type FileServiceConfig,\n} from '../../universalFile/server/config-manager';\nimport { createUniversalFileServiceWithConfigManager } from '../../universalFile/server/service-helpers';\nimport { createOssFileConfigManagerFromEnv } from './config';\n\nexport { UniversalFileService, createUniversalFileServiceWithConfigManager };\n\nexport interface DrizzlePersistenceOptions {\n db: unknown;\n fileMetadata: unknown;\n fileStorageProviders: unknown;\n}\n\nexport async function createOssFileServiceWithDrizzlePersistence(options: {\n configManager?: FileServiceConfigManager;\n persistence: DrizzlePersistenceOptions;\n}): Promise<UniversalFileService> {\n const configManager = options.configManager\n ?? await createOssFileConfigManagerFromEnv();\n const repository = createDrizzleFileRepository({\n db: options.persistence.db,\n fileMetadata: options.persistence.fileMetadata,\n fileStorageProviders: options.persistence.fileStorageProviders,\n });\n return createUniversalFileServiceFromConfigManager(configManager, repository);\n}\n\nexport async function resolveUploadAccessUrl(\n service: UniversalFileService,\n fileId: string,\n options?: { cdnUrl?: string | null; userId?: string; fallbackPath?: string },\n): Promise<string> {\n if (options?.cdnUrl) {\n return options.cdnUrl;\n }\n try {\n const url = await service.getFileUrl(fileId, options?.userId);\n if (url) return url;\n } catch {\n // fall through\n }\n return options?.fallbackPath ?? `/uploads/${fileId}`;\n}\n\nexport async function uploadFileAndResolveAccessUrl(\n service: UniversalFileService,\n uploadInfo: UploadFileInfo,\n userId?: string,\n): Promise<{ fileId: string; accessUrl: string; uploadResult: Awaited<ReturnType<UniversalFileService['uploadFile']>> }> {\n const uploadResult = await service.uploadFile(uploadInfo);\n const accessUrl = await resolveUploadAccessUrl(service, uploadResult.id, {\n cdnUrl: uploadResult.cdnUrl,\n userId,\n fallbackPath: `/uploads/${uploadResult.storagePath}`,\n });\n return {\n fileId: uploadResult.id,\n accessUrl,\n uploadResult,\n };\n}\n\n/**\n * 基于配置管理器创建并初始化 UniversalFileService。\n */\nexport async function createUniversalFileServiceFromConfigManager(\n configManager: FileServiceConfigManager,\n repository?: unknown,\n): Promise<UniversalFileService> {\n const config = configManager.getConfig();\n const serviceConfig = {\n storage: config.storageProviders[config.defaultStorage],\n defaultStorage: config.defaultStorage,\n defaultCDN: config.defaultCDN,\n storageProviders: config.storageProviders,\n cdnProviders: config.cdnProviders,\n maxFileSize: config.maxFileSize,\n allowedMimeTypes: config.allowedMimeTypes,\n cache: {\n enabled: true,\n metadataTTL: config.cache.metadataTTL,\n urlTTL: config.cache.urlTTL,\n },\n ...(repository\n ? {\n persistence: {\n enabled: true,\n repository,\n autoPersist: true,\n },\n }\n : {}),\n };\n\n const service = new UniversalFileService(serviceConfig as any);\n await service.initialize();\n return service;\n}\n\n/**\n * 通过 fileId 解析访问 URL(需已初始化的 UniversalFileService 或全局 ConfigManager)。\n */\nexport async function getFileUrlByFileId(\n fileId: string,\n options?: {\n configManager?: FileServiceConfigManager;\n service?: UniversalFileService;\n userId?: string;\n },\n): Promise<string | null> {\n try {\n if (options?.service) {\n return await options.service.getFileUrl(fileId, options.userId);\n }\n if (options?.configManager) {\n const service = await createUniversalFileServiceFromConfigManager(\n options.configManager,\n );\n return await service.getFileUrl(fileId, options.userId);\n }\n const service = await createUniversalFileServiceWithConfigManager();\n return await service.getFileUrl(fileId, options?.userId);\n } catch {\n return null;\n }\n}\n\n/**\n * 批量解析 fileId → URL。\n */\nexport async function resolveFileUrlMap(\n fileIds: string[],\n options?: {\n resolver?: (fileId: string) => Promise<string | null | undefined>;\n configManager?: FileServiceConfigManager;\n userId?: string;\n },\n): Promise<Map<string, string>> {\n const map = new Map<string, string>();\n const uniqueIds = [...new Set(fileIds.filter(Boolean))];\n\n await Promise.all(\n uniqueIds.map(async (fileId) => {\n let url: string | null | undefined;\n if (options?.resolver) {\n url = await options.resolver(fileId);\n } else {\n url = await getFileUrlByFileId(fileId, {\n configManager: options?.configManager,\n userId: options?.userId,\n });\n }\n if (url) {\n map.set(fileId, url);\n }\n }),\n );\n\n return map;\n}\n\nexport type FileUrlResolver = (\n fileId: string,\n userId?: string,\n) => Promise<string | null | undefined>;\n\nexport interface CreateFileUrlResolverOptions {\n configManager?: FileServiceConfigManager;\n loadConfigManager?: () => Promise<FileServiceConfigManager>;\n userId?: string;\n}\n\n/**\n * 显式创建 fileId → URL 解析器(替代 globalThis 单例,R2-203)。\n */\nexport function createFileUrlResolver(\n options: CreateFileUrlResolverOptions = {},\n): FileUrlResolver {\n let configManagerPromise: Promise<FileServiceConfigManager> | null = null;\n\n async function getConfigManager(): Promise<FileServiceConfigManager> {\n if (options.configManager) {\n return options.configManager;\n }\n if (options.loadConfigManager) {\n configManagerPromise ??= options.loadConfigManager();\n return configManagerPromise;\n }\n configManagerPromise ??= createOssFileConfigManagerFromEnv();\n return configManagerPromise;\n }\n\n return async (fileId: string, userId?: string) =>\n getFileUrlByFileId(fileId, {\n configManager: await getConfigManager(),\n userId: userId ?? options.userId,\n });\n}\n\nexport async function createOssFileService(\n options: FileServiceFactoryOptions = {},\n): Promise<UniversalFileService> {\n return createFileServiceWithFactory({\n configLoaders: [() => Promise.resolve(loadConfigFromEnv())],\n autoInitialize: true,\n ...options,\n });\n}\n\nexport type { FileServiceConfig, FileServiceConfigManager };\n","import type { FileServiceConfigManager } from '../../universalFile/server/config-manager';\nimport type { UniversalFileService } from '../../universalFile/server';\nimport { createOssFileConfigManagerFromEnv } from './config';\nimport {\n createOssFileServiceWithDrizzlePersistence,\n createUniversalFileServiceFromConfigManager,\n createFileUrlResolver,\n getFileUrlByFileId,\n type DrizzlePersistenceOptions,\n type FileUrlResolver,\n} from './service';\n\nexport interface OssFileBootstrapOptions {\n /** 自定义配置加载(如从 DB 注入 env 后再 createOssFileConfigManagerFromEnv) */\n loadConfigManager?: () => Promise<FileServiceConfigManager>;\n /** Drizzle 持久化;传入后 createPersistentFileService 会写入 file_metadata */\n persistence?: DrizzlePersistenceOptions;\n}\n\nexport interface OssFileBootstrap {\n getConfigManager(): Promise<FileServiceConfigManager>;\n /** 无 Drizzle 持久化的 UniversalFileService(如 skill-manager 自行写 metadata) */\n createFileService(): Promise<UniversalFileService>;\n createPersistentFileService(): Promise<UniversalFileService>;\n createFileUrlResolver(): FileUrlResolver;\n getFileUrl(fileId: string, userId?: string): Promise<string | null>;\n}\n\n/**\n * 一站式 OSS / universal-file 服务端 bootstrap(R2-205)。\n */\nexport function createOssFileBootstrap(\n options: OssFileBootstrapOptions = {},\n): OssFileBootstrap {\n let configManagerPromise: Promise<FileServiceConfigManager> | null = null;\n\n const getConfigManager = async (): Promise<FileServiceConfigManager> => {\n configManagerPromise ??=\n options.loadConfigManager?.() ?? createOssFileConfigManagerFromEnv();\n return configManagerPromise;\n };\n\n return {\n getConfigManager,\n createFileService: async () => {\n const configManager = await getConfigManager();\n return createUniversalFileServiceFromConfigManager(configManager);\n },\n createPersistentFileService: async () => {\n const configManager = await getConfigManager();\n if (options.persistence) {\n return createOssFileServiceWithDrizzlePersistence({\n configManager,\n persistence: options.persistence,\n });\n }\n return createUniversalFileServiceFromConfigManager(configManager);\n },\n createFileUrlResolver: () =>\n createFileUrlResolver({ loadConfigManager: getConfigManager }),\n getFileUrl: async (fileId, userId) => {\n const configManager = await getConfigManager();\n return getFileUrlByFileId(fileId, { configManager, userId });\n },\n };\n}\n"]}
@@ -1,81 +1,10 @@
1
1
  'use strict';
2
2
 
3
+ var chunkCAYOQDBR_js = require('./chunk-CAYOQDBR.js');
3
4
  var chunkUCOE6SET_js = require('./chunk-UCOE6SET.js');
4
5
  var chunkXJ7ZAGC5_js = require('./chunk-XJ7ZAGC5.js');
5
- var chunkNSBPE2FW_js = require('./chunk-NSBPE2FW.js');
6
6
  var react = require('react');
7
7
 
8
- // src/storage/adapters/react-native-adapter.ts
9
- var AsyncStorage = null;
10
- try {
11
- AsyncStorage = chunkNSBPE2FW_js.__require("@react-native-async-storage/async-storage").default;
12
- } catch (e) {
13
- }
14
- var ReactNativeStorageAdapter = class {
15
- constructor() {
16
- this.listeners = /* @__PURE__ */ new Map();
17
- }
18
- async getItem(key) {
19
- if (!AsyncStorage) return null;
20
- try {
21
- return await AsyncStorage.getItem(key);
22
- } catch (error) {
23
- console.error('[ReactNativeStorage] Error getting item "' + key + '":', error);
24
- return null;
25
- }
26
- }
27
- async setItem(key, value) {
28
- if (!AsyncStorage) {
29
- throw new Error("AsyncStorage is not available");
30
- }
31
- try {
32
- await AsyncStorage.setItem(key, value);
33
- this.notifyListeners(key, value);
34
- } catch (error) {
35
- console.error('[ReactNativeStorage] Error setting item "' + key + '":', error);
36
- throw error;
37
- }
38
- }
39
- async removeItem(key) {
40
- if (!AsyncStorage) {
41
- throw new Error("AsyncStorage is not available");
42
- }
43
- try {
44
- await AsyncStorage.removeItem(key);
45
- this.notifyListeners(key, null);
46
- } catch (error) {
47
- console.error('[ReactNativeStorage] Error removing item "' + key + '":', error);
48
- throw error;
49
- }
50
- }
51
- async clear() {
52
- if (!AsyncStorage) {
53
- throw new Error("AsyncStorage is not available");
54
- }
55
- try {
56
- await AsyncStorage.clear();
57
- } catch (error) {
58
- console.error("[ReactNativeStorage] Error clearing storage:", error);
59
- throw error;
60
- }
61
- }
62
- addChangeListener(callback) {
63
- if (!this.listeners.has("*")) {
64
- this.listeners.set("*", /* @__PURE__ */ new Set());
65
- }
66
- this.listeners.get("*").add(callback);
67
- return () => {
68
- this.listeners.get("*")?.delete(callback);
69
- };
70
- }
71
- notifyListeners(key, value) {
72
- const globalListeners = this.listeners.get("*");
73
- if (globalListeners) {
74
- globalListeners.forEach((callback) => callback(key, value));
75
- }
76
- }
77
- };
78
-
79
8
  // src/storage/adapters/miniapp-adapter.ts
80
9
  var Taro = null;
81
10
  var taroLoadPromise = null;
@@ -268,7 +197,7 @@ function useLocalStorage(key, defaultValue) {
268
197
  }
269
198
 
270
199
  // src/storage/hooks/useAsyncStorage.ts
271
- var asyncStorage = new ReactNativeStorageAdapter();
200
+ var asyncStorage = new chunkCAYOQDBR_js.ReactNativeStorageAdapter();
272
201
  function useAsyncStorage(key, defaultValue) {
273
202
  return useStorage(asyncStorage, key, defaultValue);
274
203
  }
@@ -286,11 +215,10 @@ function useElectronStorage(key, defaultValue) {
286
215
  }
287
216
 
288
217
  exports.MiniAppStorageAdapter = MiniAppStorageAdapter;
289
- exports.ReactNativeStorageAdapter = ReactNativeStorageAdapter;
290
218
  exports.useAsyncStorage = useAsyncStorage;
291
219
  exports.useElectronStorage = useElectronStorage;
292
220
  exports.useLocalStorage = useLocalStorage;
293
221
  exports.useStorage = useStorage;
294
222
  exports.useTaroStorage = useTaroStorage;
295
- //# sourceMappingURL=chunk-QQ2WFYOD.js.map
296
- //# sourceMappingURL=chunk-QQ2WFYOD.js.map
223
+ //# sourceMappingURL=chunk-S6YSGVWD.js.map
224
+ //# sourceMappingURL=chunk-S6YSGVWD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/storage/adapters/miniapp-adapter.ts","../src/storage/hooks/useStorage.ts","../src/storage/hooks/useLocalStorage.ts","../src/storage/hooks/useAsyncStorage.ts","../src/storage/hooks/useTaroStorage.ts","../src/storage/hooks/useElectronStorage.ts"],"names":["useState","useEffect","useCallback","WebStorageAdapter","ReactNativeStorageAdapter","ElectronStorageAdapter"],"mappings":"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","file":"chunk-S6YSGVWD.js","sourcesContent":["/**\n * 小程序平台存储适配器 (wx.storage / Taro.storage)\n * 仅在小程序环境下加载和使用\n */\n\nimport type { StorageAdapter } from '../types';\n\n// 延迟加载 Taro(仅在小程序环境)\nlet Taro: any = null;\nlet taroLoadPromise: Promise<void> | null = null;\nlet isMiniAppEnvironment: boolean | null = null;\n\n/**\n * 检测是否是小程序环境\n */\nfunction checkIsMiniApp(): boolean {\n if (isMiniAppEnvironment !== null) return isMiniAppEnvironment;\n\n // 服务端环境,不是小程序\n if (typeof window === 'undefined') {\n isMiniAppEnvironment = false;\n return false;\n }\n\n // 检测是否有小程序全局对象\n const globalObj = window as any;\n isMiniAppEnvironment = !!(\n globalObj.wx || // 微信小程序\n globalObj.my || // 支付宝小程序\n globalObj.swan || // 百度小程序\n globalObj.tt || // 抖音小程序\n globalObj.qq || // QQ 小程序\n globalObj.Taro // Taro 环境\n );\n\n return isMiniAppEnvironment;\n}\n\n/**\n * 加载 Taro(仅在小程序环境)\n */\nasync function loadTaro() {\n // 如果不是小程序环境,直接返回\n if (!checkIsMiniApp()) {\n return;\n }\n\n if (Taro) return;\n if (taroLoadPromise) return taroLoadPromise;\n\n taroLoadPromise = (async () => {\n try {\n // 使用动态导入,仅在小程序环境加载\n // 使用 Function 构造器来避免 TypeScript 在编译时解析模块\n const importTaro = new Function('return import(\"@tarojs/taro\")');\n const taroModule = await importTaro();\n Taro = taroModule.default || taroModule;\n } catch (e) {\n // Taro 不可用(非小程序环境或未安装)\n console.warn('[MiniAppStorage] Taro is not available. This is expected in non-MiniApp environments.');\n }\n })();\n\n return taroLoadPromise;\n}\n\nexport class MiniAppStorageAdapter implements StorageAdapter {\n private listeners: Map<string, Set<(key: string, value: string | null) => void>> = new Map();\n\n async getItem(key: string): Promise<string | null> {\n // 非小程序环境,直接返回 null\n if (!checkIsMiniApp()) {\n return null;\n }\n\n await loadTaro();\n if (!Taro) return null;\n\n try {\n const result = await Taro.getStorage({ key });\n return result.data;\n } catch (error: any) {\n // 如果 key 不存在,Taro 会抛出错误\n if (error.errMsg?.includes('data not found')) {\n return null;\n }\n console.error('[MiniAppStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.setStorage({ key, data: value });\n this.notifyListeners(key, value);\n } catch (error) {\n console.error('[MiniAppStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.removeStorage({ key });\n this.notifyListeners(key, null);\n } catch (error) {\n console.error('[MiniAppStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.clearStorage();\n } catch (error) {\n console.error('[MiniAppStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n addChangeListener(callback: (key: string, value: string | null) => void): () => void {\n // 小程序没有原生的存储监听,我们使用内存中的监听器\n if (!this.listeners.has('*')) {\n this.listeners.set('*', new Set());\n }\n\n this.listeners.get('*')!.add(callback);\n\n // 返回清理函数\n return () => {\n this.listeners.get('*')?.delete(callback);\n };\n }\n\n private notifyListeners(key: string, value: string | null): void {\n const globalListeners = this.listeners.get('*');\n if (globalListeners) {\n globalListeners.forEach((callback) => callback(key, value));\n }\n }\n}\n\n","/**\n * 通用存储 Hook\n * 支持多平台:Web、React Native、小程序\n *\n * 优点:\n * 1. 异步读取,不阻塞渲染\n * 2. 统一的错误处理\n * 3. 类型安全\n * 4. 跨平台支持\n * 5. 自动同步(支持的平台)\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport type { StorageAdapter } from '../types';\n\nexport function useStorage<T>(\n storage: StorageAdapter,\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n const [value, setValue] = useState<T>(defaultValue);\n const [loading, setLoading] = useState(true);\n\n // 初始化时从存储读取\n useEffect(() => {\n const loadValue = async () => {\n try {\n const stored = await storage.getItem(key);\n if (stored !== null) {\n setValue(JSON.parse(stored));\n }\n } catch (error) {\n console.error('Error reading storage key \"' + (key) + '\":', error);\n } finally {\n setLoading(false);\n }\n };\n\n void loadValue();\n }, [storage, key]);\n\n // 更新值并同步到存储\n const updateValue = useCallback(\n async (newValue: T) => {\n try {\n setValue(newValue);\n await storage.setItem(key, JSON.stringify(newValue));\n\n // 如果是 Web 适配器,触发自定义事件\n if ('dispatchChange' in storage && typeof storage.dispatchChange === 'function') {\n (storage as any).dispatchChange(key, JSON.stringify(newValue));\n }\n } catch (error) {\n console.error('Error setting storage key \"' + (key) + '\":', error);\n }\n },\n [storage, key]\n );\n\n // 删除值\n const removeValue = useCallback(async () => {\n try {\n setValue(defaultValue);\n await storage.removeItem(key);\n\n // 如果是 Web 适配器,触发自定义事件\n if ('dispatchChange' in storage && typeof storage.dispatchChange === 'function') {\n (storage as any).dispatchChange(key, null);\n }\n } catch (error) {\n console.error('Error removing storage key \"' + (key) + '\":', error);\n }\n }, [storage, key, defaultValue]);\n\n // 监听存储变化\n useEffect(() => {\n if (!storage.addChangeListener) {\n return;\n }\n\n const cleanup = storage.addChangeListener((changedKey: string, newValue: string | null) => {\n if (changedKey === key) {\n try {\n if (newValue === null) {\n setValue(defaultValue);\n } else {\n setValue(JSON.parse(newValue));\n }\n } catch (error) {\n console.error('Error parsing storage change event:', error);\n }\n }\n });\n\n return cleanup;\n }, [storage, key, defaultValue]);\n\n return [value, updateValue, removeValue, loading];\n}\n\n","/**\n * Web 平台 localStorage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { WebStorageAdapter } from '../adapters/web-adapter';\n\n// 创建单例适配器\nconst webStorage = new WebStorageAdapter();\n\n/**\n * Web 平台的 localStorage Hook\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n */\nexport function useLocalStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(webStorage, key, defaultValue);\n}\n\n","'use client';\n\n/**\n * React Native AsyncStorage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { ReactNativeStorageAdapter } from '../adapters/react-native-adapter';\n\n// 创建单例适配器\nconst asyncStorage = new ReactNativeStorageAdapter();\n\n/**\n * React Native 的 AsyncStorage Hook\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n */\nexport function useAsyncStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(asyncStorage, key, defaultValue);\n}\n\n","'use client';\n\n/**\n * 小程序 Taro Storage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { MiniAppStorageAdapter } from '../adapters/miniapp-adapter';\n\n// 创建单例适配器\nconst taroStorage = new MiniAppStorageAdapter();\n\n/**\n * 小程序的 Taro Storage Hook\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n */\nexport function useTaroStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(taroStorage, key, defaultValue);\n}\n\n","'use client';\n\n/**\n * Electron 桌面端 Storage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { ElectronStorageAdapter } from '../adapters/electron-adapter';\n\n// 创建单例适配器\nconst electronStorage = new ElectronStorageAdapter();\n\n/**\n * Electron 桌面端的 Storage Hook\n *\n * 在 Electron 渲染进程中使用 localStorage\n * 支持跨窗口同步\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n *\n * @example\n * ```tsx\n * const [token, setToken, removeToken] = useElectronStorage('auth-token', '')\n * ```\n */\nexport function useElectronStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(electronStorage, key, defaultValue);\n}\n\n"]}
@@ -0,0 +1,18 @@
1
+ import { createAuthClient } from 'better-auth/client';
2
+ import { emailOTPClient, phoneNumberClient } from 'better-auth/client/plugins';
3
+
4
+ // src/common/auth/client/create-auth-client.ts
5
+ function buildSa2kitAuthClient(options) {
6
+ return createAuthClient({
7
+ baseURL: options.baseURL.replace(/\/+$/, ""),
8
+ basePath: options.basePath ?? "/api/auth",
9
+ plugins: [emailOTPClient(), phoneNumberClient()]
10
+ });
11
+ }
12
+ function createSa2kitAuthClient(options) {
13
+ return buildSa2kitAuthClient(options);
14
+ }
15
+
16
+ export { createSa2kitAuthClient };
17
+ //# sourceMappingURL=chunk-TNJ6LYX7.mjs.map
18
+ //# sourceMappingURL=chunk-TNJ6LYX7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/auth/client/create-auth-client.ts"],"names":[],"mappings":";;;;AAYA,SAAS,sBAAsB,OAAA,EAAkC;AAC/D,EAAA,OAAO,gBAAA,CAAiB;AAAA,IACtB,OAAA,EAAS,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAAA,IAC3C,QAAA,EAAU,QAAQ,QAAA,IAAY,WAAA;AAAA,IAC9B,OAAA,EAAS,CAAC,cAAA,EAAe,EAAG,mBAAmB;AAAA,GAChD,CAAA;AACH;AAIO,SAAS,uBAAuB,OAAA,EAAoD;AACzF,EAAA,OAAO,sBAAsB,OAAO,CAAA;AACtC","file":"chunk-TNJ6LYX7.mjs","sourcesContent":["/**\n * Better Auth 客户端(vanilla — RN / 小程序 / Node fetch)\n */\nimport { createAuthClient } from 'better-auth/client';\nimport { emailOTPClient } from 'better-auth/client/plugins';\nimport { phoneNumberClient } from 'better-auth/client/plugins';\n\nexport type Sa2kitAuthClientOptions = {\n baseURL: string;\n basePath?: string;\n};\n\nfunction buildSa2kitAuthClient(options: Sa2kitAuthClientOptions) {\n return createAuthClient({\n baseURL: options.baseURL.replace(/\\/+$/, ''),\n basePath: options.basePath ?? '/api/auth',\n plugins: [emailOTPClient(), phoneNumberClient()],\n });\n}\n\nexport type Sa2kitAuthClient = ReturnType<typeof buildSa2kitAuthClient>;\n\nexport function createSa2kitAuthClient(options: Sa2kitAuthClientOptions): Sa2kitAuthClient {\n return buildSa2kitAuthClient(options);\n}\n"]}