sa2kit 3.0.0 → 3.2.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 (980) hide show
  1. package/README.md +5 -5
  2. package/dist/AliyunOSSProvider-7IOT5U6M.js +15 -0
  3. package/dist/AliyunOSSProvider-7IOT5U6M.js.map +1 -0
  4. package/dist/AliyunOSSProvider-ZXZM7OQA.mjs +6 -0
  5. package/dist/AliyunOSSProvider-ZXZM7OQA.mjs.map +1 -0
  6. package/dist/LocalStorageProvider-KJKRCKBS.js +15 -0
  7. package/dist/LocalStorageProvider-KJKRCKBS.js.map +1 -0
  8. package/dist/LocalStorageProvider-O22465NY.mjs +6 -0
  9. package/dist/LocalStorageProvider-O22465NY.mjs.map +1 -0
  10. package/dist/chunk-2234T4A6.js +303 -0
  11. package/dist/chunk-2234T4A6.js.map +1 -0
  12. package/dist/chunk-36KGNXKW.js +16 -0
  13. package/dist/chunk-36KGNXKW.js.map +1 -0
  14. package/dist/chunk-375C7WL7.js +2695 -0
  15. package/dist/chunk-375C7WL7.js.map +1 -0
  16. package/dist/chunk-3J24Z4MB.js +991 -0
  17. package/dist/chunk-3J24Z4MB.js.map +1 -0
  18. package/dist/chunk-3QCATFQV.js +43 -0
  19. package/dist/chunk-3QCATFQV.js.map +1 -0
  20. package/dist/chunk-3R6JHA6D.js +120 -0
  21. package/dist/chunk-3R6JHA6D.js.map +1 -0
  22. package/dist/chunk-4OXKHV7J.js +43 -0
  23. package/dist/chunk-4OXKHV7J.js.map +1 -0
  24. package/dist/chunk-4PJM4752.js +4 -0
  25. package/dist/chunk-4PJM4752.js.map +1 -0
  26. package/dist/chunk-65JRVC3F.mjs +54 -0
  27. package/dist/chunk-65JRVC3F.mjs.map +1 -0
  28. package/dist/chunk-6HL54I2B.js +336 -0
  29. package/dist/chunk-6HL54I2B.js.map +1 -0
  30. package/dist/chunk-6V2MIQPF.mjs +77 -0
  31. package/dist/chunk-6V2MIQPF.mjs.map +1 -0
  32. package/dist/chunk-6YLCRWKM.mjs +8 -0
  33. package/dist/chunk-6YLCRWKM.mjs.map +1 -0
  34. package/dist/chunk-7CRU2Y5X.mjs +152 -0
  35. package/dist/chunk-7CRU2Y5X.mjs.map +1 -0
  36. package/dist/chunk-7PMT4L4I.js +324 -0
  37. package/dist/chunk-7PMT4L4I.js.map +1 -0
  38. package/dist/chunk-7VVZHFEM.js +88 -0
  39. package/dist/chunk-7VVZHFEM.js.map +1 -0
  40. package/dist/chunk-AWHGIKTQ.js +56 -0
  41. package/dist/chunk-AWHGIKTQ.js.map +1 -0
  42. package/dist/chunk-B3GYF6TY.js +37 -0
  43. package/dist/chunk-B3GYF6TY.js.map +1 -0
  44. package/dist/chunk-BDBJFOXM.mjs +14 -0
  45. package/dist/chunk-BDBJFOXM.mjs.map +1 -0
  46. package/dist/chunk-BTW3SWQN.mjs +25 -0
  47. package/dist/chunk-BTW3SWQN.mjs.map +1 -0
  48. package/dist/chunk-CHYSSZ4E.mjs +734 -0
  49. package/dist/chunk-CHYSSZ4E.mjs.map +1 -0
  50. package/dist/chunk-DO6QYAZV.mjs +298 -0
  51. package/dist/chunk-DO6QYAZV.mjs.map +1 -0
  52. package/dist/chunk-DTR53LQO.mjs +781 -0
  53. package/dist/chunk-DTR53LQO.mjs.map +1 -0
  54. package/dist/chunk-EI2S4XDG.mjs +89 -0
  55. package/dist/chunk-EI2S4XDG.mjs.map +1 -0
  56. package/dist/chunk-EOZHUI46.js +93 -0
  57. package/dist/chunk-EOZHUI46.js.map +1 -0
  58. package/dist/chunk-F2BZIU67.js +184 -0
  59. package/dist/chunk-F2BZIU67.js.map +1 -0
  60. package/dist/chunk-F2TEJSCP.js +756 -0
  61. package/dist/chunk-F2TEJSCP.js.map +1 -0
  62. package/dist/chunk-FCLS5R24.js +148 -0
  63. package/dist/chunk-FCLS5R24.js.map +1 -0
  64. package/dist/chunk-FUA6ZGMI.mjs +376 -0
  65. package/dist/chunk-FUA6ZGMI.mjs.map +1 -0
  66. package/dist/chunk-FY2X3LYR.mjs +3 -0
  67. package/dist/chunk-FY2X3LYR.mjs.map +1 -0
  68. package/dist/chunk-GS4SAW25.mjs +116 -0
  69. package/dist/chunk-GS4SAW25.mjs.map +1 -0
  70. package/dist/chunk-H56ICWUO.js +321 -0
  71. package/dist/chunk-H56ICWUO.js.map +1 -0
  72. package/dist/chunk-HG34SGMN.mjs +546 -0
  73. package/dist/chunk-HG34SGMN.mjs.map +1 -0
  74. package/dist/chunk-HL4H2HF6.js +279 -0
  75. package/dist/chunk-HL4H2HF6.js.map +1 -0
  76. package/dist/chunk-IJIQUMAK.mjs +272 -0
  77. package/dist/chunk-IJIQUMAK.mjs.map +1 -0
  78. package/dist/chunk-KEZFTDZT.mjs +559 -0
  79. package/dist/chunk-KEZFTDZT.mjs.map +1 -0
  80. package/dist/chunk-KHOVC2KL.js +144 -0
  81. package/dist/chunk-KHOVC2KL.js.map +1 -0
  82. package/dist/chunk-KRBSTLKC.js +6154 -0
  83. package/dist/chunk-KRBSTLKC.js.map +1 -0
  84. package/dist/chunk-KVYHCGRY.js +2011 -0
  85. package/dist/chunk-KVYHCGRY.js.map +1 -0
  86. package/dist/chunk-LZ5YTMMP.mjs +41 -0
  87. package/dist/chunk-LZ5YTMMP.mjs.map +1 -0
  88. package/dist/chunk-MJ6XJGAL.js +1551 -0
  89. package/dist/chunk-MJ6XJGAL.js.map +1 -0
  90. package/dist/chunk-MKLXCV4Z.mjs +1510 -0
  91. package/dist/chunk-MKLXCV4Z.mjs.map +1 -0
  92. package/dist/chunk-MMDSZIXD.mjs +286 -0
  93. package/dist/chunk-MMDSZIXD.mjs.map +1 -0
  94. package/dist/chunk-N2O3OX5Y.mjs +243 -0
  95. package/dist/chunk-N2O3OX5Y.mjs.map +1 -0
  96. package/dist/chunk-O6NNSPWD.mjs +35 -0
  97. package/dist/chunk-O6NNSPWD.mjs.map +1 -0
  98. package/dist/chunk-OIRZXSYM.js +80 -0
  99. package/dist/chunk-OIRZXSYM.js.map +1 -0
  100. package/dist/chunk-P7JQRNBJ.mjs +76 -0
  101. package/dist/chunk-P7JQRNBJ.mjs.map +1 -0
  102. package/dist/chunk-PA4ELVGI.js +20 -0
  103. package/dist/chunk-PA4ELVGI.js.map +1 -0
  104. package/dist/chunk-PLIG5257.mjs +2613 -0
  105. package/dist/chunk-PLIG5257.mjs.map +1 -0
  106. package/dist/chunk-QIF4MG5V.mjs +283 -0
  107. package/dist/chunk-QIF4MG5V.mjs.map +1 -0
  108. package/dist/chunk-RHECN4E2.mjs +6077 -0
  109. package/dist/chunk-RHECN4E2.mjs.map +1 -0
  110. package/dist/chunk-RHHTZTIN.mjs +314 -0
  111. package/dist/chunk-RHHTZTIN.mjs.map +1 -0
  112. package/dist/chunk-RRQ2X26Z.js +106 -0
  113. package/dist/chunk-RRQ2X26Z.js.map +1 -0
  114. package/dist/chunk-RST2T54Y.js +836 -0
  115. package/dist/chunk-RST2T54Y.js.map +1 -0
  116. package/dist/chunk-RVNQI6BI.js +249 -0
  117. package/dist/chunk-RVNQI6BI.js.map +1 -0
  118. package/dist/chunk-S3K4LTRI.mjs +226 -0
  119. package/dist/chunk-S3K4LTRI.mjs.map +1 -0
  120. package/dist/chunk-SWZ5XNF6.js +158 -0
  121. package/dist/chunk-SWZ5XNF6.js.map +1 -0
  122. package/dist/chunk-TNJ6LYX7.mjs +18 -0
  123. package/dist/chunk-TNJ6LYX7.mjs.map +1 -0
  124. package/dist/chunk-U7HNBCBS.js +207 -0
  125. package/dist/chunk-U7HNBCBS.js.map +1 -0
  126. package/dist/chunk-UJS3YSD3.mjs +37 -0
  127. package/dist/chunk-UJS3YSD3.mjs.map +1 -0
  128. package/dist/chunk-UJUWDF7M.mjs +336 -0
  129. package/dist/chunk-UJUWDF7M.mjs.map +1 -0
  130. package/dist/chunk-UR5NENGE.js +78 -0
  131. package/dist/chunk-UR5NENGE.js.map +1 -0
  132. package/dist/chunk-V7HGBDCB.mjs +135 -0
  133. package/dist/chunk-V7HGBDCB.mjs.map +1 -0
  134. package/dist/chunk-V7RLIZMN.js +90 -0
  135. package/dist/chunk-V7RLIZMN.js.map +1 -0
  136. package/dist/chunk-VCKXK6V5.js +345 -0
  137. package/dist/chunk-VCKXK6V5.js.map +1 -0
  138. package/dist/chunk-VIEXDTNF.mjs +100 -0
  139. package/dist/chunk-VIEXDTNF.mjs.map +1 -0
  140. package/dist/chunk-VN2DULIA.js +579 -0
  141. package/dist/chunk-VN2DULIA.js.map +1 -0
  142. package/dist/chunk-VNWMRUY6.js +168 -0
  143. package/dist/chunk-VNWMRUY6.js.map +1 -0
  144. package/dist/chunk-VYK4M2D6.mjs +177 -0
  145. package/dist/chunk-VYK4M2D6.mjs.map +1 -0
  146. package/dist/chunk-WB4H6ZUW.mjs +86 -0
  147. package/dist/chunk-WB4H6ZUW.mjs.map +1 -0
  148. package/dist/chunk-WM3AEJ2E.mjs +981 -0
  149. package/dist/chunk-WM3AEJ2E.mjs.map +1 -0
  150. package/dist/chunk-X5GINUGI.mjs +162 -0
  151. package/dist/chunk-X5GINUGI.mjs.map +1 -0
  152. package/dist/chunk-XB7GUEHZ.mjs +82 -0
  153. package/dist/chunk-XB7GUEHZ.mjs.map +1 -0
  154. package/dist/chunk-XE5RGZ3B.js +242 -0
  155. package/dist/chunk-XE5RGZ3B.js.map +1 -0
  156. package/dist/chunk-XNTIMVSL.mjs +193 -0
  157. package/dist/chunk-XNTIMVSL.mjs.map +1 -0
  158. package/dist/chunk-Y7WHUKJF.js +387 -0
  159. package/dist/chunk-Y7WHUKJF.js.map +1 -0
  160. package/dist/chunk-YIRPPMCN.mjs +1916 -0
  161. package/dist/chunk-YIRPPMCN.mjs.map +1 -0
  162. package/dist/chunk-YTGUIRRH.js +10 -0
  163. package/dist/chunk-YTGUIRRH.js.map +1 -0
  164. package/dist/chunk-Z2SNB5LJ.js +28 -0
  165. package/dist/chunk-Z2SNB5LJ.js.map +1 -0
  166. package/dist/chunk-ZOP7YIVX.js +552 -0
  167. package/dist/chunk-ZOP7YIVX.js.map +1 -0
  168. package/dist/chunk-ZUZLWHH5.mjs +146 -0
  169. package/dist/chunk-ZUZLWHH5.mjs.map +1 -0
  170. package/dist/common/ai/llm/core/index.d.mts +70 -0
  171. package/dist/common/ai/llm/core/index.d.ts +70 -0
  172. package/dist/common/ai/llm/core/index.js +54 -0
  173. package/dist/common/ai/llm/core/index.mjs +5 -0
  174. package/dist/common/ai/llm/electron/index.d.mts +6 -0
  175. package/dist/common/ai/llm/electron/index.d.ts +6 -0
  176. package/dist/common/ai/llm/electron/index.js +67 -0
  177. package/dist/common/ai/llm/electron/index.mjs +10 -0
  178. package/dist/common/ai/llm/index.d.mts +3 -0
  179. package/dist/common/ai/llm/index.d.ts +3 -0
  180. package/dist/common/ai/llm/index.js +54 -0
  181. package/dist/common/ai/llm/index.mjs +5 -0
  182. package/dist/common/ai/llm/miniapp/index.d.mts +6 -0
  183. package/dist/common/ai/llm/miniapp/index.d.ts +6 -0
  184. package/dist/common/ai/llm/miniapp/index.js +59 -0
  185. package/dist/common/ai/llm/miniapp/index.mjs +6 -0
  186. package/dist/common/ai/llm/rn/index.d.mts +6 -0
  187. package/dist/common/ai/llm/rn/index.d.ts +6 -0
  188. package/dist/common/ai/llm/rn/index.js +59 -0
  189. package/dist/common/ai/llm/rn/index.mjs +6 -0
  190. package/dist/common/ai/llm/ui/electron/index.d.mts +5 -0
  191. package/dist/common/ai/llm/ui/electron/index.d.ts +5 -0
  192. package/dist/common/ai/llm/ui/electron/index.js +22 -0
  193. package/dist/common/ai/llm/ui/electron/index.mjs +9 -0
  194. package/dist/common/ai/llm/ui/miniapp/index.d.mts +9 -0
  195. package/dist/common/ai/llm/ui/miniapp/index.d.ts +9 -0
  196. package/dist/common/ai/llm/ui/miniapp/index.js +14 -0
  197. package/dist/common/ai/llm/ui/miniapp/index.mjs +5 -0
  198. package/dist/common/ai/llm/ui/rn/index.d.mts +9 -0
  199. package/dist/common/ai/llm/ui/rn/index.d.ts +9 -0
  200. package/dist/common/ai/llm/ui/rn/index.js +14 -0
  201. package/dist/common/ai/llm/ui/rn/index.mjs +5 -0
  202. package/dist/common/ai/llm/ui/web/index.d.mts +15 -0
  203. package/dist/common/ai/llm/ui/web/index.d.ts +15 -0
  204. package/dist/common/ai/llm/ui/web/index.js +21 -0
  205. package/dist/common/ai/llm/ui/web/index.mjs +8 -0
  206. package/dist/common/ai/llm/web/index.d.mts +6 -0
  207. package/dist/common/ai/llm/web/index.d.ts +6 -0
  208. package/dist/common/ai/llm/web/index.js +66 -0
  209. package/dist/common/ai/llm/web/index.mjs +9 -0
  210. package/dist/common/analytics/index.d.mts +2 -0
  211. package/dist/common/analytics/index.d.ts +2 -0
  212. package/dist/common/analytics/index.js +314 -0
  213. package/dist/common/analytics/index.mjs +5 -0
  214. package/dist/common/analytics/server/index.js +529 -0
  215. package/dist/common/analytics/server/index.js.map +1 -0
  216. package/dist/common/analytics/server/index.mjs +525 -0
  217. package/dist/common/analytics/server/index.mjs.map +1 -0
  218. package/dist/common/api/index.d.mts +3 -0
  219. package/dist/common/api/index.d.ts +3 -0
  220. package/dist/common/api/index.js +21 -0
  221. package/dist/common/api/index.mjs +4 -0
  222. package/dist/common/auth/client/index.d.mts +1 -31
  223. package/dist/common/auth/client/index.d.ts +1 -31
  224. package/dist/common/auth/client/index.js +2 -15
  225. package/dist/common/auth/client/index.mjs +1 -2
  226. package/dist/common/auth/components/index.d.mts +5 -239
  227. package/dist/common/auth/components/index.d.ts +5 -239
  228. package/dist/common/auth/components/index.js +878 -49
  229. package/dist/common/auth/components/index.js.map +1 -1
  230. package/dist/common/auth/components/index.mjs +871 -5
  231. package/dist/common/auth/components/index.mjs.map +1 -1
  232. package/dist/common/auth/hooks/index.d.mts +2 -29
  233. package/dist/common/auth/hooks/index.d.ts +2 -29
  234. package/dist/common/auth/hooks/index.js +2 -11
  235. package/dist/common/auth/hooks/index.mjs +1 -2
  236. package/dist/common/auth/index.d.mts +5 -9
  237. package/dist/common/auth/index.d.ts +5 -9
  238. package/dist/common/auth/index.js +5 -26
  239. package/dist/common/auth/index.mjs +3 -4
  240. package/dist/common/auth/rn/index.d.mts +1 -17
  241. package/dist/common/auth/rn/index.d.ts +1 -17
  242. package/dist/common/auth/rn/index.js +2 -34
  243. package/dist/common/auth/rn/index.js.map +1 -1
  244. package/dist/common/auth/rn/index.mjs +2 -31
  245. package/dist/common/auth/rn/index.mjs.map +1 -1
  246. package/dist/common/auth/server/index.d.mts +81 -2
  247. package/dist/common/auth/server/index.d.ts +81 -2
  248. package/dist/common/auth/server/index.js +128 -37
  249. package/dist/common/auth/server/index.js.map +1 -1
  250. package/dist/common/auth/server/index.mjs +124 -1
  251. package/dist/common/auth/server/index.mjs.map +1 -1
  252. package/dist/common/auth/services/index.js +12 -9
  253. package/dist/common/auth/services/index.js.map +1 -1
  254. package/dist/common/auth/services/index.mjs +10 -1
  255. package/dist/common/auth/services/index.mjs.map +1 -1
  256. package/dist/common/components/index.d.mts +4 -0
  257. package/dist/common/components/index.d.ts +4 -0
  258. package/dist/common/components/index.js +414 -0
  259. package/dist/common/components/index.mjs +9 -0
  260. package/dist/common/config/index.d.mts +1 -0
  261. package/dist/common/config/index.d.ts +1 -0
  262. package/dist/common/config/index.js +21 -0
  263. package/dist/common/config/index.mjs +4 -0
  264. package/dist/common/config/server/index.js +1177 -0
  265. package/dist/common/config/server/index.js.map +1 -0
  266. package/dist/common/config/server/index.mjs +1138 -0
  267. package/dist/common/config/server/index.mjs.map +1 -0
  268. package/dist/common/export/index.d.mts +2 -2
  269. package/dist/common/export/index.d.ts +2 -2
  270. package/dist/common/export/index.js +67 -67
  271. package/dist/common/export/index.mjs +3 -3
  272. package/dist/common/export/server/index.d.mts +2 -2
  273. package/dist/common/export/server/index.d.ts +2 -2
  274. package/dist/common/export/server/index.js +76 -48
  275. package/dist/common/export/server/index.mjs +3 -3
  276. package/dist/common/file/index.d.mts +2 -2
  277. package/dist/common/file/index.d.ts +2 -2
  278. package/dist/common/file/index.js +27 -27
  279. package/dist/common/file/index.mjs +5 -5
  280. package/dist/common/file/server/index.d.mts +2 -2
  281. package/dist/common/file/server/index.d.ts +2 -2
  282. package/dist/common/file/server/index.js +58 -50
  283. package/dist/common/file/server/index.mjs +8 -8
  284. package/dist/common/i18n/index.d.mts +2 -0
  285. package/dist/common/i18n/index.d.ts +2 -0
  286. package/dist/common/i18n/index.js +73 -0
  287. package/dist/common/i18n/index.mjs +4 -0
  288. package/dist/common/imageCrop/index.d.mts +2 -0
  289. package/dist/common/imageCrop/index.d.ts +2 -0
  290. package/dist/common/imageCrop/index.js +61 -0
  291. package/dist/common/imageCrop/index.mjs +4 -0
  292. package/dist/common/index.d.mts +17 -20
  293. package/dist/common/index.d.ts +17 -20
  294. package/dist/common/index.js +76 -70
  295. package/dist/common/index.mjs +27 -29
  296. package/dist/common/logger/index.d.mts +1 -1
  297. package/dist/common/logger/index.d.ts +1 -1
  298. package/dist/common/logger/index.js +6 -7
  299. package/dist/common/logger/index.mjs +1 -2
  300. package/dist/common/ossFile/index.d.mts +61 -0
  301. package/dist/common/ossFile/index.d.ts +61 -0
  302. package/dist/common/ossFile/index.js +96 -0
  303. package/dist/common/ossFile/index.mjs +7 -0
  304. package/dist/common/ossFile/server/index.d.mts +94 -0
  305. package/dist/common/ossFile/server/index.d.ts +94 -0
  306. package/dist/common/ossFile/server/index.js +221 -0
  307. package/dist/common/ossFile/server/index.mjs +12 -0
  308. package/dist/common/platform/index.js +8 -8
  309. package/dist/common/platform/index.mjs +4 -4
  310. package/dist/common/request/index.d.mts +1 -1
  311. package/dist/common/request/index.d.ts +1 -1
  312. package/dist/common/request/index.js +5 -7
  313. package/dist/common/request/index.mjs +2 -4
  314. package/dist/common/storage/index.d.mts +1 -1
  315. package/dist/common/storage/index.d.ts +1 -1
  316. package/dist/common/storage/index.js +17 -17
  317. package/dist/common/storage/index.mjs +5 -5
  318. package/dist/common/universalExport/index.d.mts +232 -0
  319. package/dist/common/universalExport/index.d.ts +232 -0
  320. package/dist/common/universalExport/index.js +178 -0
  321. package/dist/common/universalExport/index.mjs +5 -0
  322. package/dist/common/universalExport/server/index.d.mts +1189 -0
  323. package/dist/common/universalExport/server/index.d.ts +1189 -0
  324. package/dist/common/universalExport/server/index.js +151 -0
  325. package/dist/common/universalExport/server/index.mjs +6 -0
  326. package/dist/common/universalFile/index.d.mts +409 -0
  327. package/dist/common/universalFile/index.d.ts +409 -0
  328. package/dist/common/universalFile/index.js +1742 -0
  329. package/dist/common/universalFile/index.js.map +1 -0
  330. package/dist/common/universalFile/index.mjs +1497 -0
  331. package/dist/common/universalFile/index.mjs.map +1 -0
  332. package/dist/common/universalFile/server/index.d.mts +1064 -0
  333. package/dist/common/universalFile/server/index.d.ts +1064 -0
  334. package/dist/common/universalFile/server/index.js +311 -0
  335. package/dist/common/universalFile/server/index.mjs +10 -0
  336. package/dist/common/utils/index.d.mts +1 -1
  337. package/dist/common/utils/index.d.ts +1 -1
  338. package/dist/common/utils/index.js +11 -12
  339. package/dist/common/utils/index.mjs +2 -3
  340. package/dist/index-BRLygK4h.d.ts +67 -0
  341. package/dist/index-BWNK5mH2.d.ts +76 -0
  342. package/dist/index-Bd7cKF1j.d.mts +50 -0
  343. package/dist/index-BiCK6gg6.d.mts +210 -0
  344. package/dist/index-BiCK6gg6.d.ts +210 -0
  345. package/dist/index-C-P2yBTH.d.mts +76 -0
  346. package/dist/index-CT4K2z-O.d.ts +81 -0
  347. package/dist/index-D6RJTGce.d.mts +81 -0
  348. package/dist/index-DA7L9JlE.d.mts +159 -0
  349. package/dist/index-DRQxtCDw.d.ts +50 -0
  350. package/dist/index-DXVph21C.d.mts +201 -0
  351. package/dist/index-DXVph21C.d.ts +201 -0
  352. package/dist/index-DzyK789B.d.mts +67 -0
  353. package/dist/index-FVJZCEtm.d.mts +145 -0
  354. package/dist/index-FVJZCEtm.d.ts +145 -0
  355. package/dist/index-nD9vPCZT.d.ts +159 -0
  356. package/dist/index-nOmIv2BG.d.mts +559 -0
  357. package/dist/index-nOmIv2BG.d.ts +559 -0
  358. package/dist/path-Bzc7hj1N.d.ts +45 -0
  359. package/dist/path-DN_65vhO.d.mts +45 -0
  360. package/dist/utils-Dm3O1rAa.d.mts +366 -0
  361. package/dist/utils-Dm3O1rAa.d.ts +366 -0
  362. package/package.json +293 -348
  363. package/dist/AliyunOSSProvider-4GRL2FJB.js +0 -15
  364. package/dist/AliyunOSSProvider-4GRL2FJB.js.map +0 -1
  365. package/dist/AliyunOSSProvider-QNVFIZ7Q.mjs +0 -6
  366. package/dist/AliyunOSSProvider-QNVFIZ7Q.mjs.map +0 -1
  367. package/dist/CollisionBalls-BpHufX3H.d.mts +0 -41
  368. package/dist/CollisionBalls-BpHufX3H.d.ts +0 -41
  369. package/dist/ConfigService-BxK06xP6.d.mts +0 -262
  370. package/dist/ConfigService-BxK06xP6.d.ts +0 -262
  371. package/dist/LocalStorageProvider-J5RHV37G.mjs +0 -6
  372. package/dist/LocalStorageProvider-J5RHV37G.mjs.map +0 -1
  373. package/dist/LocalStorageProvider-PFA2DMIJ.js +0 -15
  374. package/dist/LocalStorageProvider-PFA2DMIJ.js.map +0 -1
  375. package/dist/UniversalFileService-CC4d3wkc.d.ts +0 -139
  376. package/dist/UniversalFileService-CzAE_G4V.d.mts +0 -139
  377. package/dist/ai/llm/core/index.d.mts +0 -70
  378. package/dist/ai/llm/core/index.d.ts +0 -70
  379. package/dist/ai/llm/core/index.js +0 -54
  380. package/dist/ai/llm/core/index.mjs +0 -5
  381. package/dist/ai/llm/electron/index.d.mts +0 -6
  382. package/dist/ai/llm/electron/index.d.ts +0 -6
  383. package/dist/ai/llm/electron/index.js +0 -66
  384. package/dist/ai/llm/electron/index.mjs +0 -9
  385. package/dist/ai/llm/index.d.mts +0 -3
  386. package/dist/ai/llm/index.d.ts +0 -3
  387. package/dist/ai/llm/index.js +0 -54
  388. package/dist/ai/llm/index.mjs +0 -5
  389. package/dist/ai/llm/miniapp/index.d.mts +0 -6
  390. package/dist/ai/llm/miniapp/index.d.ts +0 -6
  391. package/dist/ai/llm/miniapp/index.js +0 -59
  392. package/dist/ai/llm/miniapp/index.mjs +0 -6
  393. package/dist/ai/llm/rn/index.d.mts +0 -6
  394. package/dist/ai/llm/rn/index.d.ts +0 -6
  395. package/dist/ai/llm/rn/index.js +0 -59
  396. package/dist/ai/llm/rn/index.mjs +0 -6
  397. package/dist/ai/llm/ui/electron/index.d.mts +0 -5
  398. package/dist/ai/llm/ui/electron/index.d.ts +0 -5
  399. package/dist/ai/llm/ui/electron/index.js +0 -21
  400. package/dist/ai/llm/ui/electron/index.mjs +0 -8
  401. package/dist/ai/llm/ui/miniapp/index.d.mts +0 -9
  402. package/dist/ai/llm/ui/miniapp/index.d.ts +0 -9
  403. package/dist/ai/llm/ui/miniapp/index.js +0 -14
  404. package/dist/ai/llm/ui/miniapp/index.mjs +0 -5
  405. package/dist/ai/llm/ui/rn/index.d.mts +0 -9
  406. package/dist/ai/llm/ui/rn/index.d.ts +0 -9
  407. package/dist/ai/llm/ui/rn/index.js +0 -14
  408. package/dist/ai/llm/ui/rn/index.mjs +0 -5
  409. package/dist/ai/llm/ui/web/index.d.mts +0 -15
  410. package/dist/ai/llm/ui/web/index.d.ts +0 -15
  411. package/dist/ai/llm/ui/web/index.js +0 -20
  412. package/dist/ai/llm/ui/web/index.mjs +0 -7
  413. package/dist/ai/llm/web/index.d.mts +0 -6
  414. package/dist/ai/llm/web/index.d.ts +0 -6
  415. package/dist/ai/llm/web/index.js +0 -65
  416. package/dist/ai/llm/web/index.mjs +0 -8
  417. package/dist/analytics/index.d.mts +0 -2
  418. package/dist/analytics/index.d.ts +0 -2
  419. package/dist/analytics/index.js +0 -314
  420. package/dist/analytics/index.mjs +0 -5
  421. package/dist/analytics/server/index.js +0 -529
  422. package/dist/analytics/server/index.js.map +0 -1
  423. package/dist/analytics/server/index.mjs +0 -525
  424. package/dist/analytics/server/index.mjs.map +0 -1
  425. package/dist/api/index.d.mts +0 -3
  426. package/dist/api/index.d.ts +0 -3
  427. package/dist/api/index.js +0 -21
  428. package/dist/api/index.mjs +0 -4
  429. package/dist/audioDetection/index.d.mts +0 -449
  430. package/dist/audioDetection/index.d.ts +0 -449
  431. package/dist/audioDetection/index.js +0 -1244
  432. package/dist/audioDetection/index.js.map +0 -1
  433. package/dist/audioDetection/index.mjs +0 -1227
  434. package/dist/audioDetection/index.mjs.map +0 -1
  435. package/dist/auth/client/index.d.mts +0 -13
  436. package/dist/auth/client/index.d.ts +0 -13
  437. package/dist/auth/client/index.js +0 -26
  438. package/dist/auth/client/index.mjs +0 -5
  439. package/dist/auth/components/index.d.mts +0 -10
  440. package/dist/auth/components/index.d.ts +0 -10
  441. package/dist/auth/components/index.js +0 -70
  442. package/dist/auth/components/index.mjs +0 -9
  443. package/dist/auth/hooks/index.d.mts +0 -13
  444. package/dist/auth/hooks/index.d.ts +0 -13
  445. package/dist/auth/hooks/index.js +0 -28
  446. package/dist/auth/hooks/index.mjs +0 -7
  447. package/dist/auth/index.d.mts +0 -21
  448. package/dist/auth/index.d.ts +0 -21
  449. package/dist/auth/index.js +0 -112
  450. package/dist/auth/index.mjs +0 -11
  451. package/dist/auth/rn/index.d.mts +0 -3133
  452. package/dist/auth/rn/index.d.ts +0 -3133
  453. package/dist/auth/rn/index.js +0 -684
  454. package/dist/auth/rn/index.js.map +0 -1
  455. package/dist/auth/rn/index.mjs +0 -663
  456. package/dist/auth/rn/index.mjs.map +0 -1
  457. package/dist/auth/schema/index.d.mts +0 -4
  458. package/dist/auth/schema/index.d.ts +0 -4
  459. package/dist/auth/schema/index.js +0 -49
  460. package/dist/auth/schema/index.mjs +0 -4
  461. package/dist/auth/services/index.d.mts +0 -1
  462. package/dist/auth/services/index.d.ts +0 -1
  463. package/dist/auth/services/index.js +0 -17
  464. package/dist/auth/services/index.mjs +0 -4
  465. package/dist/base-api-client-BpmcQt4Q.d.ts +0 -103
  466. package/dist/base-api-client-CFIhZK4C.d.mts +0 -277
  467. package/dist/base-api-client-CFIhZK4C.d.ts +0 -277
  468. package/dist/base-api-client-DXLsq2yz.d.mts +0 -103
  469. package/dist/boothVaultService-Cn4WPhjg.d.mts +0 -83
  470. package/dist/boothVaultService-Cn4WPhjg.d.ts +0 -83
  471. package/dist/business/index.d.mts +0 -2
  472. package/dist/business/index.d.ts +0 -2
  473. package/dist/business/index.js +0 -581
  474. package/dist/business/index.js.map +0 -1
  475. package/dist/business/index.mjs +0 -575
  476. package/dist/business/index.mjs.map +0 -1
  477. package/dist/calendar/index.d.mts +0 -1325
  478. package/dist/calendar/index.d.ts +0 -1325
  479. package/dist/calendar/index.js +0 -5964
  480. package/dist/calendar/index.js.map +0 -1
  481. package/dist/calendar/index.mjs +0 -5878
  482. package/dist/calendar/index.mjs.map +0 -1
  483. package/dist/calendar/routes/index.d.mts +0 -191
  484. package/dist/calendar/routes/index.d.ts +0 -191
  485. package/dist/calendar/routes/index.js +0 -844
  486. package/dist/calendar/routes/index.js.map +0 -1
  487. package/dist/calendar/routes/index.mjs +0 -826
  488. package/dist/calendar/routes/index.mjs.map +0 -1
  489. package/dist/chunk-25OFOKNF.js +0 -171
  490. package/dist/chunk-25OFOKNF.js.map +0 -1
  491. package/dist/chunk-2Y7BKFKZ.js +0 -37
  492. package/dist/chunk-2Y7BKFKZ.js.map +0 -1
  493. package/dist/chunk-3DXPQ4YV.mjs +0 -165
  494. package/dist/chunk-3DXPQ4YV.mjs.map +0 -1
  495. package/dist/chunk-3FRAIS4T.mjs +0 -35
  496. package/dist/chunk-3FRAIS4T.mjs.map +0 -1
  497. package/dist/chunk-3NHAT7D4.mjs +0 -361
  498. package/dist/chunk-3NHAT7D4.mjs.map +0 -1
  499. package/dist/chunk-3Z43XGA4.mjs +0 -54
  500. package/dist/chunk-3Z43XGA4.mjs.map +0 -1
  501. package/dist/chunk-4FDUURSD.js +0 -22
  502. package/dist/chunk-4FDUURSD.js.map +0 -1
  503. package/dist/chunk-4WBCWJSN.js +0 -836
  504. package/dist/chunk-4WBCWJSN.js.map +0 -1
  505. package/dist/chunk-5GBDDXYL.mjs +0 -23
  506. package/dist/chunk-5GBDDXYL.mjs.map +0 -1
  507. package/dist/chunk-5USIS3UM.js +0 -4
  508. package/dist/chunk-5USIS3UM.js.map +0 -1
  509. package/dist/chunk-7E3J7VAD.mjs +0 -3
  510. package/dist/chunk-7E3J7VAD.mjs.map +0 -1
  511. package/dist/chunk-ACUFEDVQ.js +0 -345
  512. package/dist/chunk-ACUFEDVQ.js.map +0 -1
  513. package/dist/chunk-AQPU2AXH.js +0 -756
  514. package/dist/chunk-AQPU2AXH.js.map +0 -1
  515. package/dist/chunk-ATUCZXJY.js +0 -80
  516. package/dist/chunk-ATUCZXJY.js.map +0 -1
  517. package/dist/chunk-B3CZ3HXJ.mjs +0 -126
  518. package/dist/chunk-B3CZ3HXJ.mjs.map +0 -1
  519. package/dist/chunk-BCE6RUZV.js +0 -2695
  520. package/dist/chunk-BCE6RUZV.js.map +0 -1
  521. package/dist/chunk-BIHYZA67.mjs +0 -2613
  522. package/dist/chunk-BIHYZA67.mjs.map +0 -1
  523. package/dist/chunk-C6KV7VTZ.mjs +0 -152
  524. package/dist/chunk-C6KV7VTZ.mjs.map +0 -1
  525. package/dist/chunk-CAYOQDBR.js +0 -78
  526. package/dist/chunk-CAYOQDBR.js.map +0 -1
  527. package/dist/chunk-CIVO4R6N.mjs +0 -37
  528. package/dist/chunk-CIVO4R6N.mjs.map +0 -1
  529. package/dist/chunk-CX2GHCAI.mjs +0 -217
  530. package/dist/chunk-CX2GHCAI.mjs.map +0 -1
  531. package/dist/chunk-DIF5VRL3.mjs +0 -73
  532. package/dist/chunk-DIF5VRL3.mjs.map +0 -1
  533. package/dist/chunk-FCEBAWN6.js +0 -18
  534. package/dist/chunk-FCEBAWN6.js.map +0 -1
  535. package/dist/chunk-FHIE5MTC.mjs +0 -541
  536. package/dist/chunk-FHIE5MTC.mjs.map +0 -1
  537. package/dist/chunk-FHLTPXAR.js +0 -56
  538. package/dist/chunk-FHLTPXAR.js.map +0 -1
  539. package/dist/chunk-FIUBFREP.mjs +0 -298
  540. package/dist/chunk-FIUBFREP.mjs.map +0 -1
  541. package/dist/chunk-FOQEQWX5.js +0 -4
  542. package/dist/chunk-FOQEQWX5.js.map +0 -1
  543. package/dist/chunk-FXQOXLDE.js +0 -120
  544. package/dist/chunk-FXQOXLDE.js.map +0 -1
  545. package/dist/chunk-G4NFB2QA.mjs +0 -212
  546. package/dist/chunk-G4NFB2QA.mjs.map +0 -1
  547. package/dist/chunk-G5HJGXGC.mjs +0 -39
  548. package/dist/chunk-G5HJGXGC.mjs.map +0 -1
  549. package/dist/chunk-G6HXNQ2U.mjs +0 -336
  550. package/dist/chunk-G6HXNQ2U.mjs.map +0 -1
  551. package/dist/chunk-G6NSKJMH.js +0 -106
  552. package/dist/chunk-G6NSKJMH.js.map +0 -1
  553. package/dist/chunk-G7UBMCUT.mjs +0 -41
  554. package/dist/chunk-G7UBMCUT.mjs.map +0 -1
  555. package/dist/chunk-GQZHGSRR.js +0 -44
  556. package/dist/chunk-GQZHGSRR.js.map +0 -1
  557. package/dist/chunk-GS7XLKET.js +0 -41
  558. package/dist/chunk-GS7XLKET.js.map +0 -1
  559. package/dist/chunk-GWNBVGDT.mjs +0 -1232
  560. package/dist/chunk-GWNBVGDT.mjs.map +0 -1
  561. package/dist/chunk-HDMIOOZY.mjs +0 -546
  562. package/dist/chunk-HDMIOOZY.mjs.map +0 -1
  563. package/dist/chunk-HJ6MH7J7.js +0 -552
  564. package/dist/chunk-HJ6MH7J7.js.map +0 -1
  565. package/dist/chunk-HJZHQW5R.mjs +0 -146
  566. package/dist/chunk-HJZHQW5R.mjs.map +0 -1
  567. package/dist/chunk-I5ZPEDNR.mjs +0 -734
  568. package/dist/chunk-I5ZPEDNR.mjs.map +0 -1
  569. package/dist/chunk-IBWDBBX5.mjs +0 -16
  570. package/dist/chunk-IBWDBBX5.mjs.map +0 -1
  571. package/dist/chunk-J77KR2EV.mjs +0 -193
  572. package/dist/chunk-J77KR2EV.mjs.map +0 -1
  573. package/dist/chunk-KH6RQ4J5.js +0 -28
  574. package/dist/chunk-KH6RQ4J5.js.map +0 -1
  575. package/dist/chunk-KQ643L7Z.js +0 -144
  576. package/dist/chunk-KQ643L7Z.js.map +0 -1
  577. package/dist/chunk-LFB5EIIM.mjs +0 -31
  578. package/dist/chunk-LFB5EIIM.mjs.map +0 -1
  579. package/dist/chunk-LHJKLUM7.mjs +0 -18
  580. package/dist/chunk-LHJKLUM7.mjs.map +0 -1
  581. package/dist/chunk-MBANGIG3.mjs +0 -781
  582. package/dist/chunk-MBANGIG3.mjs.map +0 -1
  583. package/dist/chunk-MWSAH7ZG.mjs +0 -42
  584. package/dist/chunk-MWSAH7ZG.mjs.map +0 -1
  585. package/dist/chunk-MZOGYD4N.mjs +0 -186
  586. package/dist/chunk-MZOGYD4N.mjs.map +0 -1
  587. package/dist/chunk-NCRP2YHY.mjs +0 -1598
  588. package/dist/chunk-NCRP2YHY.mjs.map +0 -1
  589. package/dist/chunk-NDGHXVGS.js +0 -25
  590. package/dist/chunk-NDGHXVGS.js.map +0 -1
  591. package/dist/chunk-NDPO5OMC.js +0 -563
  592. package/dist/chunk-NDPO5OMC.js.map +0 -1
  593. package/dist/chunk-PBI7FKMB.js +0 -43
  594. package/dist/chunk-PBI7FKMB.js.map +0 -1
  595. package/dist/chunk-Q5EDCKQA.js +0 -336
  596. package/dist/chunk-Q5EDCKQA.js.map +0 -1
  597. package/dist/chunk-Q5VFBPMG.mjs +0 -76
  598. package/dist/chunk-Q5VFBPMG.mjs.map +0 -1
  599. package/dist/chunk-QDUBO567.js +0 -1148
  600. package/dist/chunk-QDUBO567.js.map +0 -1
  601. package/dist/chunk-QP5N3ER6.js +0 -18
  602. package/dist/chunk-QP5N3ER6.js.map +0 -1
  603. package/dist/chunk-QXAOXBVB.mjs +0 -135
  604. package/dist/chunk-QXAOXBVB.mjs.map +0 -1
  605. package/dist/chunk-R2DXTE2L.js +0 -249
  606. package/dist/chunk-R2DXTE2L.js.map +0 -1
  607. package/dist/chunk-RJP2BRJD.mjs +0 -6077
  608. package/dist/chunk-RJP2BRJD.mjs.map +0 -1
  609. package/dist/chunk-RTD2WHQQ.mjs +0 -16
  610. package/dist/chunk-RTD2WHQQ.mjs.map +0 -1
  611. package/dist/chunk-RWCD2CAD.mjs +0 -1132
  612. package/dist/chunk-RWCD2CAD.mjs.map +0 -1
  613. package/dist/chunk-S37OK2QG.js +0 -216
  614. package/dist/chunk-S37OK2QG.js.map +0 -1
  615. package/dist/chunk-S3PUP7N4.js +0 -20
  616. package/dist/chunk-S3PUP7N4.js.map +0 -1
  617. package/dist/chunk-S6YSGVWD.js +0 -224
  618. package/dist/chunk-S6YSGVWD.js.map +0 -1
  619. package/dist/chunk-S732H246.js +0 -6154
  620. package/dist/chunk-S732H246.js.map +0 -1
  621. package/dist/chunk-SFDJNKWC.js +0 -22
  622. package/dist/chunk-SFDJNKWC.js.map +0 -1
  623. package/dist/chunk-SKFEJPMJ.mjs +0 -226
  624. package/dist/chunk-SKFEJPMJ.mjs.map +0 -1
  625. package/dist/chunk-SLKOEYFH.js +0 -303
  626. package/dist/chunk-SLKOEYFH.js.map +0 -1
  627. package/dist/chunk-TC5YU6A4.mjs +0 -243
  628. package/dist/chunk-TC5YU6A4.mjs.map +0 -1
  629. package/dist/chunk-TXMX6PZR.js +0 -190
  630. package/dist/chunk-TXMX6PZR.js.map +0 -1
  631. package/dist/chunk-UCOE6SET.js +0 -148
  632. package/dist/chunk-UCOE6SET.js.map +0 -1
  633. package/dist/chunk-UIYKZ73N.js +0 -36
  634. package/dist/chunk-UIYKZ73N.js.map +0 -1
  635. package/dist/chunk-V7EVKD5G.mjs +0 -116
  636. package/dist/chunk-V7EVKD5G.mjs.map +0 -1
  637. package/dist/chunk-VHN7PF5I.js +0 -20
  638. package/dist/chunk-VHN7PF5I.js.map +0 -1
  639. package/dist/chunk-VMTEDX5H.js +0 -1275
  640. package/dist/chunk-VMTEDX5H.js.map +0 -1
  641. package/dist/chunk-VRN76M56.mjs +0 -3
  642. package/dist/chunk-VRN76M56.mjs.map +0 -1
  643. package/dist/chunk-VXFUXZN5.mjs +0 -20
  644. package/dist/chunk-VXFUXZN5.mjs.map +0 -1
  645. package/dist/chunk-WEEXCPSE.mjs +0 -86
  646. package/dist/chunk-WEEXCPSE.mjs.map +0 -1
  647. package/dist/chunk-WW4GE6CZ.js +0 -1647
  648. package/dist/chunk-WW4GE6CZ.js.map +0 -1
  649. package/dist/chunk-WZDTNDYR.js +0 -207
  650. package/dist/chunk-WZDTNDYR.js.map +0 -1
  651. package/dist/chunk-XBZIS3MV.mjs +0 -13
  652. package/dist/chunk-XBZIS3MV.mjs.map +0 -1
  653. package/dist/chunk-XFOZ56FB.mjs +0 -20
  654. package/dist/chunk-XFOZ56FB.mjs.map +0 -1
  655. package/dist/chunk-XJ7ZAGC5.js +0 -88
  656. package/dist/chunk-XJ7ZAGC5.js.map +0 -1
  657. package/dist/chunk-XUS5ACKR.mjs +0 -100
  658. package/dist/chunk-XUS5ACKR.mjs.map +0 -1
  659. package/dist/chunk-YOTQG4NP.mjs +0 -314
  660. package/dist/chunk-YOTQG4NP.mjs.map +0 -1
  661. package/dist/chunk-Z23HAXHL.js +0 -136
  662. package/dist/chunk-Z23HAXHL.js.map +0 -1
  663. package/dist/chunk-ZGVB35L2.mjs +0 -25
  664. package/dist/chunk-ZGVB35L2.mjs.map +0 -1
  665. package/dist/chunk-ZLYPALF3.js +0 -242
  666. package/dist/chunk-ZLYPALF3.js.map +0 -1
  667. package/dist/chunk-ZM2SZJTZ.js +0 -158
  668. package/dist/chunk-ZM2SZJTZ.js.map +0 -1
  669. package/dist/chunk-ZRAW3HXA.js +0 -43
  670. package/dist/chunk-ZRAW3HXA.js.map +0 -1
  671. package/dist/chunk-ZWQJSZEY.js +0 -371
  672. package/dist/chunk-ZWQJSZEY.js.map +0 -1
  673. package/dist/components/index.d.mts +0 -405
  674. package/dist/components/index.d.ts +0 -405
  675. package/dist/components/index.js +0 -2516
  676. package/dist/components/index.js.map +0 -1
  677. package/dist/components/index.mjs +0 -2396
  678. package/dist/components/index.mjs.map +0 -1
  679. package/dist/config/index.d.mts +0 -1
  680. package/dist/config/index.d.ts +0 -1
  681. package/dist/config/index.js +0 -21
  682. package/dist/config/index.mjs +0 -4
  683. package/dist/config/server/index.js +0 -1177
  684. package/dist/config/server/index.js.map +0 -1
  685. package/dist/config/server/index.mjs +0 -1138
  686. package/dist/config/server/index.mjs.map +0 -1
  687. package/dist/drizzle-schema-BNhqj2AZ.d.mts +0 -1114
  688. package/dist/drizzle-schema-BNhqj2AZ.d.ts +0 -1114
  689. package/dist/festivalCard/index.d.mts +0 -76
  690. package/dist/festivalCard/index.d.ts +0 -76
  691. package/dist/festivalCard/index.js +0 -1492
  692. package/dist/festivalCard/index.js.map +0 -1
  693. package/dist/festivalCard/index.mjs +0 -1475
  694. package/dist/festivalCard/index.mjs.map +0 -1
  695. package/dist/festivalCard/routes/index.d.mts +0 -42
  696. package/dist/festivalCard/routes/index.d.ts +0 -42
  697. package/dist/festivalCard/routes/index.js +0 -361
  698. package/dist/festivalCard/routes/index.js.map +0 -1
  699. package/dist/festivalCard/routes/index.mjs +0 -356
  700. package/dist/festivalCard/routes/index.mjs.map +0 -1
  701. package/dist/festivalCard/server/index.d.mts +0 -120
  702. package/dist/festivalCard/server/index.d.ts +0 -120
  703. package/dist/festivalCard/server/index.js +0 -272
  704. package/dist/festivalCard/server/index.js.map +0 -1
  705. package/dist/festivalCard/server/index.mjs +0 -265
  706. package/dist/festivalCard/server/index.mjs.map +0 -1
  707. package/dist/festivalCardService-B3GsnNpV.d.ts +0 -13
  708. package/dist/festivalCardService-CWhrLNE9.d.mts +0 -13
  709. package/dist/i18n/index.d.mts +0 -2
  710. package/dist/i18n/index.d.ts +0 -2
  711. package/dist/i18n/index.js +0 -73
  712. package/dist/i18n/index.mjs +0 -4
  713. package/dist/imageCrop/index.d.mts +0 -165
  714. package/dist/imageCrop/index.d.ts +0 -165
  715. package/dist/imageCrop/index.js +0 -560
  716. package/dist/imageCrop/index.js.map +0 -1
  717. package/dist/imageCrop/index.mjs +0 -541
  718. package/dist/imageCrop/index.mjs.map +0 -1
  719. package/dist/index-2G9Dxjvt.d.ts +0 -81
  720. package/dist/index-BcjDRcKp.d.mts +0 -40
  721. package/dist/index-Bjem5rWn.d.mts +0 -17
  722. package/dist/index-BlpXrrTy.d.ts +0 -40
  723. package/dist/index-C5U-2hJq.d.ts +0 -23
  724. package/dist/index-CYuUB8aF.d.mts +0 -67
  725. package/dist/index-CifSBBP2.d.ts +0 -17
  726. package/dist/index-D0K4ehme.d.mts +0 -20
  727. package/dist/index-DLnfKN-a.d.mts +0 -23
  728. package/dist/index-DSel44Ke.d.mts +0 -93
  729. package/dist/index-DSel44Ke.d.ts +0 -93
  730. package/dist/index-DZ5iJtNO.d.mts +0 -102
  731. package/dist/index-DZ5iJtNO.d.ts +0 -102
  732. package/dist/index-Da7qdkgW.d.ts +0 -20
  733. package/dist/index-DrPcMJPc.d.mts +0 -250
  734. package/dist/index-DrPcMJPc.d.ts +0 -250
  735. package/dist/index-WrR57hKT.d.ts +0 -67
  736. package/dist/index-oLUvfqT8.d.ts +0 -20
  737. package/dist/index-pe38RDgC.d.mts +0 -20
  738. package/dist/index-qcOvRVuN.d.mts +0 -81
  739. package/dist/index.d.mts +0 -11590
  740. package/dist/index.d.ts +0 -11590
  741. package/dist/index.js +0 -17679
  742. package/dist/index.js.map +0 -1
  743. package/dist/index.mjs +0 -17403
  744. package/dist/index.mjs.map +0 -1
  745. package/dist/logger/index.d.mts +0 -125
  746. package/dist/logger/index.d.ts +0 -125
  747. package/dist/logger/index.js +0 -29
  748. package/dist/logger/index.mjs +0 -4
  749. package/dist/mikuContest/ui/web/index.d.mts +0 -2
  750. package/dist/mikuContest/ui/web/index.d.ts +0 -2
  751. package/dist/mikuContest/ui/web/index.js +0 -353
  752. package/dist/mikuContest/ui/web/index.js.map +0 -1
  753. package/dist/mikuContest/ui/web/index.mjs +0 -343
  754. package/dist/mikuContest/ui/web/index.mjs.map +0 -1
  755. package/dist/mikuFireworks3D/index.d.mts +0 -268
  756. package/dist/mikuFireworks3D/index.d.ts +0 -268
  757. package/dist/mikuFireworks3D/index.js +0 -1267
  758. package/dist/mikuFireworks3D/index.js.map +0 -1
  759. package/dist/mikuFireworks3D/index.mjs +0 -1228
  760. package/dist/mikuFireworks3D/index.mjs.map +0 -1
  761. package/dist/mikuFusionGame/index.d.mts +0 -117
  762. package/dist/mikuFusionGame/index.d.ts +0 -117
  763. package/dist/mikuFusionGame/index.js +0 -1208
  764. package/dist/mikuFusionGame/index.js.map +0 -1
  765. package/dist/mikuFusionGame/index.mjs +0 -1195
  766. package/dist/mikuFusionGame/index.mjs.map +0 -1
  767. package/dist/mmd/admin/index.d.mts +0 -487
  768. package/dist/mmd/admin/index.d.ts +0 -487
  769. package/dist/mmd/admin/index.js +0 -1058
  770. package/dist/mmd/admin/index.js.map +0 -1
  771. package/dist/mmd/admin/index.mjs +0 -1027
  772. package/dist/mmd/admin/index.mjs.map +0 -1
  773. package/dist/mmd/index.d.mts +0 -2467
  774. package/dist/mmd/index.d.ts +0 -2467
  775. package/dist/mmd/index.js +0 -10119
  776. package/dist/mmd/index.js.map +0 -1
  777. package/dist/mmd/index.mjs +0 -10028
  778. package/dist/mmd/index.mjs.map +0 -1
  779. package/dist/mmd/server/index.d.mts +0 -139
  780. package/dist/mmd/server/index.d.ts +0 -139
  781. package/dist/mmd/server/index.js +0 -424
  782. package/dist/mmd/server/index.js.map +0 -1
  783. package/dist/mmd/server/index.mjs +0 -404
  784. package/dist/mmd/server/index.mjs.map +0 -1
  785. package/dist/music/index.d.mts +0 -74
  786. package/dist/music/index.d.ts +0 -74
  787. package/dist/music/index.js +0 -830
  788. package/dist/music/index.js.map +0 -1
  789. package/dist/music/index.mjs +0 -809
  790. package/dist/music/index.mjs.map +0 -1
  791. package/dist/music/server/index.d.mts +0 -1
  792. package/dist/music/server/index.d.ts +0 -1
  793. package/dist/music/server/index.js +0 -194
  794. package/dist/music/server/index.js.map +0 -1
  795. package/dist/music/server/index.mjs +0 -182
  796. package/dist/music/server/index.mjs.map +0 -1
  797. package/dist/navigation/index.d.mts +0 -93
  798. package/dist/navigation/index.d.ts +0 -93
  799. package/dist/navigation/index.js +0 -453
  800. package/dist/navigation/index.js.map +0 -1
  801. package/dist/navigation/index.mjs +0 -443
  802. package/dist/navigation/index.mjs.map +0 -1
  803. package/dist/ossFile/index.d.mts +0 -61
  804. package/dist/ossFile/index.d.ts +0 -61
  805. package/dist/ossFile/index.js +0 -96
  806. package/dist/ossFile/index.js.map +0 -1
  807. package/dist/ossFile/index.mjs +0 -7
  808. package/dist/ossFile/index.mjs.map +0 -1
  809. package/dist/ossFile/server/index.d.mts +0 -94
  810. package/dist/ossFile/server/index.d.ts +0 -94
  811. package/dist/ossFile/server/index.js +0 -213
  812. package/dist/ossFile/server/index.js.map +0 -1
  813. package/dist/ossFile/server/index.mjs +0 -12
  814. package/dist/ossFile/server/index.mjs.map +0 -1
  815. package/dist/path-DkaHQSyW.d.mts +0 -41
  816. package/dist/path-qjVnH8qU.d.ts +0 -41
  817. package/dist/portfolio/index.d.mts +0 -66
  818. package/dist/portfolio/index.d.ts +0 -66
  819. package/dist/portfolio/index.js +0 -736
  820. package/dist/portfolio/index.js.map +0 -1
  821. package/dist/portfolio/index.mjs +0 -724
  822. package/dist/portfolio/index.mjs.map +0 -1
  823. package/dist/qqbot/server/index.d.mts +0 -216
  824. package/dist/qqbot/server/index.d.ts +0 -216
  825. package/dist/qqbot/server/index.js +0 -394
  826. package/dist/qqbot/server/index.js.map +0 -1
  827. package/dist/qqbot/server/index.mjs +0 -385
  828. package/dist/qqbot/server/index.mjs.map +0 -1
  829. package/dist/qqbot/ui/web/index.d.mts +0 -10
  830. package/dist/qqbot/ui/web/index.d.ts +0 -10
  831. package/dist/qqbot/ui/web/index.js +0 -105
  832. package/dist/qqbot/ui/web/index.js.map +0 -1
  833. package/dist/qqbot/ui/web/index.mjs +0 -99
  834. package/dist/qqbot/ui/web/index.mjs.map +0 -1
  835. package/dist/request/index.d.mts +0 -59
  836. package/dist/request/index.d.ts +0 -59
  837. package/dist/request/index.js +0 -23
  838. package/dist/request/index.js.map +0 -1
  839. package/dist/request/index.mjs +0 -6
  840. package/dist/request/index.mjs.map +0 -1
  841. package/dist/screenReceiver/index.d.mts +0 -86
  842. package/dist/screenReceiver/index.d.ts +0 -86
  843. package/dist/screenReceiver/index.js +0 -281
  844. package/dist/screenReceiver/index.js.map +0 -1
  845. package/dist/screenReceiver/index.mjs +0 -273
  846. package/dist/screenReceiver/index.mjs.map +0 -1
  847. package/dist/session-BCXvGCnm.d.mts +0 -81
  848. package/dist/session-BCXvGCnm.d.ts +0 -81
  849. package/dist/storage/index.d.mts +0 -136
  850. package/dist/storage/index.d.ts +0 -136
  851. package/dist/storage/index.js +0 -48
  852. package/dist/storage/index.js.map +0 -1
  853. package/dist/storage/index.mjs +0 -7
  854. package/dist/storage/index.mjs.map +0 -1
  855. package/dist/testYourself/admin/index.d.mts +0 -58
  856. package/dist/testYourself/admin/index.d.ts +0 -58
  857. package/dist/testYourself/admin/index.js +0 -1009
  858. package/dist/testYourself/admin/index.js.map +0 -1
  859. package/dist/testYourself/admin/index.mjs +0 -1002
  860. package/dist/testYourself/admin/index.mjs.map +0 -1
  861. package/dist/testYourself/index.d.mts +0 -53
  862. package/dist/testYourself/index.d.ts +0 -53
  863. package/dist/testYourself/index.js +0 -2551
  864. package/dist/testYourself/index.js.map +0 -1
  865. package/dist/testYourself/index.mjs +0 -2531
  866. package/dist/testYourself/index.mjs.map +0 -1
  867. package/dist/testYourself/server/index.d.mts +0 -1029
  868. package/dist/testYourself/server/index.d.ts +0 -1029
  869. package/dist/testYourself/server/index.js +0 -825
  870. package/dist/testYourself/server/index.js.map +0 -1
  871. package/dist/testYourself/server/index.mjs +0 -816
  872. package/dist/testYourself/server/index.mjs.map +0 -1
  873. package/dist/types-3ujSNAXb.d.mts +0 -286
  874. package/dist/types-3ujSNAXb.d.ts +0 -286
  875. package/dist/types-B6B210gX.d.mts +0 -270
  876. package/dist/types-B6B210gX.d.ts +0 -270
  877. package/dist/types-Bdnte5EN.d.mts +0 -292
  878. package/dist/types-C_W_CoUD.d.ts +0 -99
  879. package/dist/types-Cs0CLvrH.d.mts +0 -70
  880. package/dist/types-Cs0CLvrH.d.ts +0 -70
  881. package/dist/types-DCRvasyH.d.mts +0 -99
  882. package/dist/types-HorDyIRv.d.mts +0 -303
  883. package/dist/types-HorDyIRv.d.ts +0 -303
  884. package/dist/types-_rFX1atk.d.ts +0 -292
  885. package/dist/types.legacy-J-j-_ig_.d.mts +0 -25
  886. package/dist/types.legacy-J-j-_ig_.d.ts +0 -25
  887. package/dist/universalExport/index.d.mts +0 -312
  888. package/dist/universalExport/index.d.ts +0 -312
  889. package/dist/universalExport/index.js +0 -178
  890. package/dist/universalExport/index.js.map +0 -1
  891. package/dist/universalExport/index.mjs +0 -5
  892. package/dist/universalExport/index.mjs.map +0 -1
  893. package/dist/universalExport/server/index.d.mts +0 -1270
  894. package/dist/universalExport/server/index.d.ts +0 -1270
  895. package/dist/universalExport/server/index.js +0 -123
  896. package/dist/universalExport/server/index.js.map +0 -1
  897. package/dist/universalExport/server/index.mjs +0 -6
  898. package/dist/universalExport/server/index.mjs.map +0 -1
  899. package/dist/universalFile/index.d.mts +0 -409
  900. package/dist/universalFile/index.d.ts +0 -409
  901. package/dist/universalFile/index.js +0 -1742
  902. package/dist/universalFile/index.js.map +0 -1
  903. package/dist/universalFile/index.mjs +0 -1497
  904. package/dist/universalFile/index.mjs.map +0 -1
  905. package/dist/universalFile/server/index.d.mts +0 -1064
  906. package/dist/universalFile/server/index.d.ts +0 -1064
  907. package/dist/universalFile/server/index.js +0 -311
  908. package/dist/universalFile/server/index.js.map +0 -1
  909. package/dist/universalFile/server/index.mjs +0 -10
  910. package/dist/universalFile/server/index.mjs.map +0 -1
  911. package/dist/utils/index.d.mts +0 -192
  912. package/dist/utils/index.d.ts +0 -192
  913. package/dist/utils/index.js +0 -46
  914. package/dist/utils/index.js.map +0 -1
  915. package/dist/utils/index.mjs +0 -5
  916. package/dist/utils/index.mjs.map +0 -1
  917. package/dist/vocaloidBooth/index.d.mts +0 -64
  918. package/dist/vocaloidBooth/index.d.ts +0 -64
  919. package/dist/vocaloidBooth/index.js +0 -376
  920. package/dist/vocaloidBooth/index.js.map +0 -1
  921. package/dist/vocaloidBooth/index.mjs +0 -362
  922. package/dist/vocaloidBooth/index.mjs.map +0 -1
  923. package/dist/vocaloidBooth/server/index.d.mts +0 -111
  924. package/dist/vocaloidBooth/server/index.d.ts +0 -111
  925. package/dist/vocaloidBooth/server/index.js +0 -247
  926. package/dist/vocaloidBooth/server/index.js.map +0 -1
  927. package/dist/vocaloidBooth/server/index.mjs +0 -237
  928. package/dist/vocaloidBooth/server/index.mjs.map +0 -1
  929. package/dist/vocaloidBooth/web/index.d.mts +0 -3
  930. package/dist/vocaloidBooth/web/index.d.ts +0 -3
  931. package/dist/vocaloidBooth/web/index.js +0 -376
  932. package/dist/vocaloidBooth/web/index.js.map +0 -1
  933. package/dist/vocaloidBooth/web/index.mjs +0 -362
  934. package/dist/vocaloidBooth/web/index.mjs.map +0 -1
  935. /package/dist/{ai → common/ai}/llm/core/index.js.map +0 -0
  936. /package/dist/{ai → common/ai}/llm/core/index.mjs.map +0 -0
  937. /package/dist/{ai → common/ai}/llm/electron/index.js.map +0 -0
  938. /package/dist/{ai → common/ai}/llm/electron/index.mjs.map +0 -0
  939. /package/dist/{ai → common/ai}/llm/index.js.map +0 -0
  940. /package/dist/{ai → common/ai}/llm/index.mjs.map +0 -0
  941. /package/dist/{ai → common/ai}/llm/miniapp/index.js.map +0 -0
  942. /package/dist/{ai → common/ai}/llm/miniapp/index.mjs.map +0 -0
  943. /package/dist/{ai → common/ai}/llm/rn/index.js.map +0 -0
  944. /package/dist/{ai → common/ai}/llm/rn/index.mjs.map +0 -0
  945. /package/dist/{ai → common/ai}/llm/ui/electron/index.js.map +0 -0
  946. /package/dist/{ai → common/ai}/llm/ui/electron/index.mjs.map +0 -0
  947. /package/dist/{ai → common/ai}/llm/ui/miniapp/index.js.map +0 -0
  948. /package/dist/{ai → common/ai}/llm/ui/miniapp/index.mjs.map +0 -0
  949. /package/dist/{ai → common/ai}/llm/ui/rn/index.js.map +0 -0
  950. /package/dist/{ai → common/ai}/llm/ui/rn/index.mjs.map +0 -0
  951. /package/dist/{ai → common/ai}/llm/ui/web/index.js.map +0 -0
  952. /package/dist/{ai → common/ai}/llm/ui/web/index.mjs.map +0 -0
  953. /package/dist/{ai → common/ai}/llm/web/index.js.map +0 -0
  954. /package/dist/{ai → common/ai}/llm/web/index.mjs.map +0 -0
  955. /package/dist/{analytics → common/analytics}/index.js.map +0 -0
  956. /package/dist/{analytics → common/analytics}/index.mjs.map +0 -0
  957. /package/dist/{analytics → common/analytics}/server/index.d.mts +0 -0
  958. /package/dist/{analytics → common/analytics}/server/index.d.ts +0 -0
  959. /package/dist/{api → common/api}/index.js.map +0 -0
  960. /package/dist/{api → common/api}/index.mjs.map +0 -0
  961. /package/dist/{auth/client → common/components}/index.js.map +0 -0
  962. /package/dist/{auth/client → common/components}/index.mjs.map +0 -0
  963. /package/dist/{auth/components → common/config}/index.js.map +0 -0
  964. /package/dist/{auth/components → common/config}/index.mjs.map +0 -0
  965. /package/dist/{config → common/config}/server/index.d.mts +0 -0
  966. /package/dist/{config → common/config}/server/index.d.ts +0 -0
  967. /package/dist/{auth/hooks → common/i18n}/index.js.map +0 -0
  968. /package/dist/{auth/hooks → common/i18n}/index.mjs.map +0 -0
  969. /package/dist/{auth → common/imageCrop}/index.js.map +0 -0
  970. /package/dist/{auth → common/imageCrop}/index.mjs.map +0 -0
  971. /package/dist/{auth/schema → common/ossFile}/index.js.map +0 -0
  972. /package/dist/{auth/schema → common/ossFile}/index.mjs.map +0 -0
  973. /package/dist/{auth/services → common/ossFile/server}/index.js.map +0 -0
  974. /package/dist/{auth/services → common/ossFile/server}/index.mjs.map +0 -0
  975. /package/dist/{config → common/universalExport}/index.js.map +0 -0
  976. /package/dist/{config → common/universalExport}/index.mjs.map +0 -0
  977. /package/dist/{i18n → common/universalExport/server}/index.js.map +0 -0
  978. /package/dist/{i18n → common/universalExport/server}/index.mjs.map +0 -0
  979. /package/dist/{logger → common/universalFile/server}/index.js.map +0 -0
  980. /package/dist/{logger → common/universalFile/server}/index.mjs.map +0 -0
@@ -1,529 +0,0 @@
1
- 'use strict';
2
-
3
- require('../../chunk-NSBPE2FW.js');
4
- var pgCore = require('drizzle-orm/pg-core');
5
- var drizzleOrm = require('drizzle-orm');
6
-
7
- var analyticsEvents = pgCore.pgTable(
8
- "analytics_events",
9
- {
10
- id: pgCore.text().primaryKey().notNull(),
11
- eventType: pgCore.text("event_type").notNull(),
12
- eventName: pgCore.text("event_name").notNull(),
13
- timestamp: pgCore.timestamp({ precision: 3, mode: "string" }).notNull(),
14
- priority: pgCore.integer().notNull(),
15
- userId: pgCore.text("user_id"),
16
- sessionId: pgCore.text("session_id").notNull(),
17
- deviceId: pgCore.text("device_id").notNull(),
18
- pageUrl: pgCore.text("page_url"),
19
- pageTitle: pgCore.text("page_title"),
20
- referrer: pgCore.text(),
21
- properties: pgCore.jsonb(),
22
- platform: pgCore.text().notNull(),
23
- appVersion: pgCore.text("app_version").notNull(),
24
- sdkVersion: pgCore.text("sdk_version").notNull(),
25
- createdAt: pgCore.timestamp({ precision: 3, mode: "string" }).default(drizzleOrm.sql`CURRENT_TIMESTAMP`).notNull()
26
- },
27
- (table) => [
28
- pgCore.index("analytics_events_user_id_idx").using(
29
- "btree",
30
- table.userId.asc().nullsLast().op("text_ops")
31
- ),
32
- pgCore.index("analytics_events_event_type_idx").using(
33
- "btree",
34
- table.eventType.asc().nullsLast().op("text_ops")
35
- ),
36
- pgCore.index("analytics_events_platform_idx").using(
37
- "btree",
38
- table.platform.asc().nullsLast().op("text_ops")
39
- ),
40
- pgCore.index("analytics_events_timestamp_idx").using("btree", table.timestamp.desc().nullsLast()),
41
- pgCore.index("analytics_events_session_id_idx").using(
42
- "btree",
43
- table.sessionId.asc().nullsLast().op("text_ops")
44
- )
45
- ]
46
- );
47
- var defaultLogger = {
48
- info: (message, data) => console.log("[Analytics] " + message, data || ""),
49
- error: (message, error) => console.error("[Analytics] " + message, error)
50
- };
51
- function createAnalyticsService(db, analyticsEventsTable, logger = defaultLogger) {
52
- const analyticsEvents2 = analyticsEventsTable;
53
- return {
54
- /**
55
- * 批量插入埋点事件
56
- */
57
- async insertAnalyticsEvents(events) {
58
- try {
59
- if (events.length === 0) return;
60
- await db.insert(analyticsEvents2).values(events).onConflictDoNothing();
61
- logger.info("Analytics events inserted", { count: events.length });
62
- } catch (error) {
63
- logger.error("Failed to insert analytics events", error);
64
- throw error;
65
- }
66
- },
67
- /**
68
- * 查询埋点事件
69
- */
70
- async queryAnalyticsEvents(params) {
71
- try {
72
- const conditions = [];
73
- if (params.startDate) {
74
- conditions.push(drizzleOrm.gte(analyticsEvents2.timestamp, params.startDate));
75
- }
76
- if (params.endDate) {
77
- conditions.push(drizzleOrm.lte(analyticsEvents2.timestamp, params.endDate));
78
- }
79
- if (params.eventType) {
80
- conditions.push(drizzleOrm.eq(analyticsEvents2.eventType, params.eventType));
81
- }
82
- if (params.eventTypes && params.eventTypes.length > 0) {
83
- conditions.push(drizzleOrm.inArray(analyticsEvents2.eventType, params.eventTypes));
84
- }
85
- if (params.userId) {
86
- conditions.push(drizzleOrm.eq(analyticsEvents2.userId, params.userId));
87
- }
88
- if (params.platform) {
89
- conditions.push(drizzleOrm.eq(analyticsEvents2.platform, params.platform));
90
- }
91
- if (params.platforms && params.platforms.length > 0) {
92
- conditions.push(drizzleOrm.inArray(analyticsEvents2.platform, params.platforms));
93
- }
94
- if (params.sessionId) {
95
- conditions.push(drizzleOrm.eq(analyticsEvents2.sessionId, params.sessionId));
96
- }
97
- const whereClause = conditions.length > 0 ? drizzleOrm.and(...conditions) : void 0;
98
- const [{ total }] = await db.select({ total: drizzleOrm.count() }).from(analyticsEvents2).where(whereClause);
99
- const orderByColumn = params.orderBy || "timestamp";
100
- const orderDirection = params.orderDirection || "desc";
101
- const orderFn = orderDirection === "asc" ? drizzleOrm.asc : drizzleOrm.desc;
102
- let orderByField;
103
- switch (orderByColumn) {
104
- case "eventType":
105
- orderByField = analyticsEvents2.eventType;
106
- break;
107
- case "platform":
108
- orderByField = analyticsEvents2.platform;
109
- break;
110
- default:
111
- orderByField = analyticsEvents2.timestamp;
112
- }
113
- const events = await db.select().from(analyticsEvents2).where(whereClause).orderBy(orderFn(orderByField)).limit(params.limit || 100).offset(params.offset || 0);
114
- const formattedEvents = events.map((event) => ({
115
- ...event,
116
- timestamp: event.timestamp.endsWith("Z") ? event.timestamp : event.timestamp + "Z",
117
- createdAt: event.createdAt.endsWith("Z") ? event.createdAt : event.createdAt + "Z"
118
- }));
119
- return {
120
- events: formattedEvents,
121
- total: Number(total)
122
- };
123
- } catch (error) {
124
- logger.error("Failed to query analytics events", error);
125
- throw error;
126
- }
127
- },
128
- /**
129
- * 获取统计数据
130
- */
131
- async getAnalyticsStats(startDate, endDate, platform) {
132
- try {
133
- const conditions = [];
134
- if (startDate) {
135
- conditions.push(drizzleOrm.gte(analyticsEvents2.timestamp, startDate));
136
- }
137
- if (endDate) {
138
- conditions.push(drizzleOrm.lte(analyticsEvents2.timestamp, endDate));
139
- }
140
- if (platform) {
141
- conditions.push(drizzleOrm.eq(analyticsEvents2.platform, platform));
142
- }
143
- const whereClause = conditions.length > 0 ? drizzleOrm.and(...conditions) : void 0;
144
- const [{ totalEvents }] = await db.select({ totalEvents: drizzleOrm.count() }).from(analyticsEvents2).where(whereClause);
145
- const [{ uniqueUsers }] = await db.select({ uniqueUsers: drizzleOrm.sql`COUNT(DISTINCT ${analyticsEvents2.userId})` }).from(analyticsEvents2).where(whereClause);
146
- const [{ uniqueSessions }] = await db.select({ uniqueSessions: drizzleOrm.sql`COUNT(DISTINCT ${analyticsEvents2.sessionId})` }).from(analyticsEvents2).where(whereClause);
147
- const [{ uniqueDevices }] = await db.select({ uniqueDevices: drizzleOrm.sql`COUNT(DISTINCT ${analyticsEvents2.deviceId})` }).from(analyticsEvents2).where(whereClause);
148
- const eventsByType = await db.select({
149
- eventType: analyticsEvents2.eventType,
150
- count: drizzleOrm.count()
151
- }).from(analyticsEvents2).where(whereClause).groupBy(analyticsEvents2.eventType).orderBy(drizzleOrm.desc(drizzleOrm.count())).limit(10);
152
- const eventsByPlatform = await db.select({
153
- platform: analyticsEvents2.platform,
154
- count: drizzleOrm.count()
155
- }).from(analyticsEvents2).where(whereClause).groupBy(analyticsEvents2.platform).orderBy(drizzleOrm.desc(drizzleOrm.count()));
156
- const topPages = await db.select({
157
- pageUrl: analyticsEvents2.pageUrl,
158
- count: drizzleOrm.count()
159
- }).from(analyticsEvents2).where(drizzleOrm.and(whereClause, drizzleOrm.sql`${analyticsEvents2.pageUrl} IS NOT NULL`)).groupBy(analyticsEvents2.pageUrl).orderBy(drizzleOrm.desc(drizzleOrm.count())).limit(10);
160
- return {
161
- totalEvents: Number(totalEvents),
162
- uniqueUsers: Number(uniqueUsers),
163
- uniqueSessions: Number(uniqueSessions),
164
- uniqueDevices: Number(uniqueDevices),
165
- eventsByType: eventsByType.map((e) => ({
166
- eventType: e.eventType,
167
- count: Number(e.count)
168
- })),
169
- eventsByPlatform: eventsByPlatform.map((e) => ({
170
- platform: e.platform,
171
- count: Number(e.count)
172
- })),
173
- topPages: topPages.filter((p) => p.pageUrl).map((p) => ({
174
- pageUrl: p.pageUrl,
175
- count: Number(p.count)
176
- }))
177
- };
178
- } catch (error) {
179
- logger.error("Failed to get analytics stats", error);
180
- throw error;
181
- }
182
- },
183
- /**
184
- * 获取用户行为分析
185
- */
186
- async getUserBehavior(userId, startDate, endDate) {
187
- try {
188
- const conditions = [drizzleOrm.eq(analyticsEvents2.userId, userId)];
189
- if (startDate) {
190
- conditions.push(drizzleOrm.gte(analyticsEvents2.timestamp, startDate));
191
- }
192
- if (endDate) {
193
- conditions.push(drizzleOrm.lte(analyticsEvents2.timestamp, endDate));
194
- }
195
- const whereClause = drizzleOrm.and(...conditions);
196
- const [{ eventCount }] = await db.select({ eventCount: drizzleOrm.count() }).from(analyticsEvents2).where(whereClause);
197
- if (eventCount === 0) return null;
198
- const [{ lastActive }] = await db.select({ lastActive: drizzleOrm.sql`MAX(${analyticsEvents2.timestamp})` }).from(analyticsEvents2).where(whereClause);
199
- const platformsResult = await db.select({ platform: analyticsEvents2.platform }).from(analyticsEvents2).where(whereClause).groupBy(analyticsEvents2.platform);
200
- const topEvents = await db.select({
201
- eventType: analyticsEvents2.eventType,
202
- count: drizzleOrm.count()
203
- }).from(analyticsEvents2).where(whereClause).groupBy(analyticsEvents2.eventType).orderBy(drizzleOrm.desc(drizzleOrm.count())).limit(5);
204
- return {
205
- userId,
206
- eventCount: Number(eventCount),
207
- lastActive,
208
- platforms: platformsResult.map((p) => p.platform),
209
- topEvents: topEvents.map((e) => ({
210
- eventType: e.eventType,
211
- count: Number(e.count)
212
- }))
213
- };
214
- } catch (error) {
215
- logger.error("Failed to get user behavior", error);
216
- throw error;
217
- }
218
- },
219
- /**
220
- * 获取会话分析
221
- */
222
- async getSessionAnalytics(sessionId) {
223
- try {
224
- const events = await db.select().from(analyticsEvents2).where(drizzleOrm.eq(analyticsEvents2.sessionId, sessionId)).orderBy(drizzleOrm.asc(analyticsEvents2.timestamp));
225
- if (events.length === 0) return null;
226
- const firstEvent = events[0];
227
- const lastEvent = events[events.length - 1];
228
- const startTime = new Date(firstEvent.timestamp).getTime();
229
- const endTime = new Date(lastEvent.timestamp).getTime();
230
- const duration = endTime - startTime;
231
- return {
232
- sessionId,
233
- userId: firstEvent.userId || void 0,
234
- deviceId: firstEvent.deviceId,
235
- platform: firstEvent.platform,
236
- startTime: firstEvent.timestamp,
237
- endTime: lastEvent.timestamp,
238
- duration,
239
- eventCount: events.length,
240
- events
241
- };
242
- } catch (error) {
243
- logger.error("Failed to get session analytics", error);
244
- throw error;
245
- }
246
- },
247
- /**
248
- * 获取漏斗分析
249
- */
250
- async getFunnelAnalysis(steps, startDate, endDate) {
251
- try {
252
- const results = [];
253
- let previousCount = 0;
254
- for (let i = 0; i < steps.length; i++) {
255
- const conditions = [drizzleOrm.eq(analyticsEvents2.eventType, steps[i])];
256
- if (startDate) {
257
- conditions.push(drizzleOrm.gte(analyticsEvents2.timestamp, startDate));
258
- }
259
- if (endDate) {
260
- conditions.push(drizzleOrm.lte(analyticsEvents2.timestamp, endDate));
261
- }
262
- const whereClause = drizzleOrm.and(...conditions);
263
- const [{ count: stepCount }] = await db.select({ count: drizzleOrm.sql`COUNT(DISTINCT ${analyticsEvents2.userId})` }).from(analyticsEvents2).where(whereClause);
264
- const conversionRate = i === 0 ? 100 : Number(stepCount) / previousCount * 100;
265
- results.push({
266
- step: steps[i] || "unknown",
267
- count: Number(stepCount),
268
- conversionRate: Math.round(conversionRate * 100) / 100
269
- });
270
- previousCount = Number(stepCount);
271
- }
272
- return results;
273
- } catch (error) {
274
- logger.error("Failed to get funnel analysis", error);
275
- throw error;
276
- }
277
- },
278
- /**
279
- * 删除旧数据(数据清理)
280
- */
281
- async cleanOldAnalyticsEvents(daysToKeep = 90) {
282
- try {
283
- const cutoffDate = /* @__PURE__ */ new Date();
284
- cutoffDate.setDate(cutoffDate.getDate() - daysToKeep);
285
- await db.delete(analyticsEvents2).where(drizzleOrm.lte(analyticsEvents2.timestamp, cutoffDate.toISOString()));
286
- logger.info("Old analytics events cleaned", { daysToKeep });
287
- return 0;
288
- } catch (error) {
289
- logger.error("Failed to clean old analytics events", error);
290
- throw error;
291
- }
292
- }
293
- };
294
- }
295
-
296
- // src/analytics/server/handlers.ts
297
- function createAnalyticsHandlers(service, ResponseClass) {
298
- const createResponse = ResponseClass ? (data, init) => ResponseClass.json(data, init) : (data, init) => ({ body: data, status: init?.status || 200 });
299
- return {
300
- /**
301
- * POST /api/analytics/events
302
- * 处理事件上报
303
- */
304
- async handleEventsPost(request) {
305
- try {
306
- const body = await request.json();
307
- const { events } = body;
308
- if (!Array.isArray(events)) {
309
- return createResponse(
310
- { success: false, message: "Invalid events format" },
311
- { status: 400 }
312
- );
313
- }
314
- if (events.length === 0) {
315
- return createResponse(
316
- { success: true, message: "No events to process" },
317
- { status: 200 }
318
- );
319
- }
320
- for (const event of events) {
321
- if (!event.event_id || !event.event_type || !event.event_name) {
322
- return createResponse(
323
- { success: false, message: "Missing required event fields" },
324
- { status: 400 }
325
- );
326
- }
327
- }
328
- const formattedEvents = events.map((event) => ({
329
- id: event.event_id,
330
- eventType: event.event_type,
331
- eventName: event.event_name,
332
- timestamp: new Date(event.timestamp).toISOString(),
333
- priority: event.priority,
334
- userId: event.user_id || null,
335
- sessionId: event.session_id,
336
- deviceId: event.device_id,
337
- pageUrl: event.page_url || null,
338
- pageTitle: event.page_title || null,
339
- referrer: event.referrer || null,
340
- properties: event.properties || {},
341
- platform: event.platform,
342
- appVersion: event.app_version,
343
- sdkVersion: event.sdk_version
344
- }));
345
- await service.insertAnalyticsEvents(formattedEvents);
346
- return createResponse({
347
- success: true,
348
- message: "Events received successfully",
349
- count: events.length
350
- });
351
- } catch (error) {
352
- console.error("Failed to process analytics events", error);
353
- return createResponse(
354
- {
355
- success: false,
356
- message: "Internal server error",
357
- error: process.env.NODE_ENV === "development" ? error.message : void 0
358
- },
359
- { status: 500 }
360
- );
361
- }
362
- },
363
- /**
364
- * GET /api/analytics/query
365
- * 查询埋点事件
366
- */
367
- async handleQueryGet(request) {
368
- try {
369
- const searchParams = request.nextUrl?.searchParams || new URLSearchParams(request.url?.split("?")[1]);
370
- const params = {
371
- startDate: searchParams.get("startDate") || void 0,
372
- endDate: searchParams.get("endDate") || void 0,
373
- eventType: searchParams.get("eventType") || void 0,
374
- eventTypes: searchParams.get("eventTypes")?.split(",") || void 0,
375
- userId: searchParams.get("userId") || void 0,
376
- platform: searchParams.get("platform") || void 0,
377
- platforms: searchParams.get("platforms")?.split(",") || void 0,
378
- sessionId: searchParams.get("sessionId") || void 0,
379
- limit: parseInt(searchParams.get("limit") || "100"),
380
- offset: parseInt(searchParams.get("offset") || "0"),
381
- orderBy: searchParams.get("orderBy") || "timestamp",
382
- orderDirection: searchParams.get("orderDirection") || "desc"
383
- };
384
- const result = await service.queryAnalyticsEvents(params);
385
- return createResponse({
386
- success: true,
387
- data: result.events,
388
- total: result.total,
389
- limit: params.limit,
390
- offset: params.offset
391
- });
392
- } catch (error) {
393
- console.error("Failed to query analytics events", error);
394
- return createResponse(
395
- {
396
- success: false,
397
- message: "Internal server error",
398
- error: process.env.NODE_ENV === "development" ? error.message : void 0
399
- },
400
- { status: 500 }
401
- );
402
- }
403
- },
404
- /**
405
- * GET /api/analytics/stats
406
- * 获取统计数据
407
- */
408
- async handleStatsGet(request) {
409
- try {
410
- const searchParams = request.nextUrl?.searchParams || new URLSearchParams(request.url?.split("?")[1]);
411
- const startDate = searchParams.get("startDate") || void 0;
412
- const endDate = searchParams.get("endDate") || void 0;
413
- const platform = searchParams.get("platform") || void 0;
414
- const stats = await service.getAnalyticsStats(startDate, endDate, platform);
415
- return createResponse({
416
- success: true,
417
- data: stats
418
- });
419
- } catch (error) {
420
- console.error("Failed to get analytics stats", error);
421
- return createResponse(
422
- {
423
- success: false,
424
- message: "Internal server error",
425
- error: process.env.NODE_ENV === "development" ? error.message : void 0
426
- },
427
- { status: 500 }
428
- );
429
- }
430
- },
431
- /**
432
- * GET /api/analytics/user/[userId]
433
- * 获取用户行为分析
434
- */
435
- async handleUserBehaviorGet(request, params) {
436
- try {
437
- const { userId } = params;
438
- const searchParams = request.nextUrl?.searchParams || new URLSearchParams(request.url?.split("?")[1]);
439
- const startDate = searchParams.get("startDate") || void 0;
440
- const endDate = searchParams.get("endDate") || void 0;
441
- const behavior = await service.getUserBehavior(userId, startDate, endDate);
442
- if (!behavior) {
443
- return createResponse(
444
- { success: false, message: "No data found for this user" },
445
- { status: 404 }
446
- );
447
- }
448
- return createResponse({
449
- success: true,
450
- data: behavior
451
- });
452
- } catch (error) {
453
- console.error("Failed to get user behavior", error);
454
- return createResponse(
455
- {
456
- success: false,
457
- message: "Internal server error",
458
- error: process.env.NODE_ENV === "development" ? error.message : void 0
459
- },
460
- { status: 500 }
461
- );
462
- }
463
- },
464
- /**
465
- * GET /api/analytics/session/[sessionId]
466
- * 获取会话分析
467
- */
468
- async handleSessionAnalyticsGet(_request, params) {
469
- try {
470
- const { sessionId } = params;
471
- const session = await service.getSessionAnalytics(sessionId);
472
- if (!session) {
473
- return createResponse({ success: false, message: "Session not found" }, { status: 404 });
474
- }
475
- return createResponse({
476
- success: true,
477
- data: session
478
- });
479
- } catch (error) {
480
- console.error("Failed to get session analytics", error);
481
- return createResponse(
482
- {
483
- success: false,
484
- message: "Internal server error",
485
- error: process.env.NODE_ENV === "development" ? error.message : void 0
486
- },
487
- { status: 500 }
488
- );
489
- }
490
- },
491
- /**
492
- * POST /api/analytics/funnel
493
- * 漏斗分析
494
- */
495
- async handleFunnelPost(request) {
496
- try {
497
- const body = await request.json();
498
- const { steps, startDate, endDate } = body;
499
- if (!Array.isArray(steps) || steps.length === 0) {
500
- return createResponse(
501
- { success: false, message: "Invalid steps format" },
502
- { status: 400 }
503
- );
504
- }
505
- const funnel = await service.getFunnelAnalysis(steps, startDate, endDate);
506
- return createResponse({
507
- success: true,
508
- data: funnel
509
- });
510
- } catch (error) {
511
- console.error("Failed to get funnel analysis", error);
512
- return createResponse(
513
- {
514
- success: false,
515
- message: "Internal server error",
516
- error: process.env.NODE_ENV === "development" ? error.message : void 0
517
- },
518
- { status: 500 }
519
- );
520
- }
521
- }
522
- };
523
- }
524
-
525
- exports.analyticsEvents = analyticsEvents;
526
- exports.createAnalyticsHandlers = createAnalyticsHandlers;
527
- exports.createAnalyticsService = createAnalyticsService;
528
- //# sourceMappingURL=index.js.map
529
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/analytics/server/schema.ts","../../../src/analytics/server/service.ts","../../../src/analytics/server/handlers.ts"],"names":["pgTable","text","timestamp","integer","jsonb","sql","index","analyticsEvents","gte","lte","eq","inArray","and","count","asc","desc"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 埋点系统数据库 Schema\n * Analytics Database Schema\n *\n * 使用方式:\n * 在 backend/drizzle/migrations/schema.ts 中导入并导出:\n * export { analyticsEvents } from '@lyricnote/shared/analytics/server/schema'\n */\n\nimport { pgTable, text, timestamp, integer, jsonb, index } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\n\n/**\n * 埋点事件表\n */\nexport const analyticsEvents = pgTable(\n 'analytics_events',\n {\n id: text().primaryKey().notNull(),\n eventType: text('event_type').notNull(),\n eventName: text('event_name').notNull(),\n timestamp: timestamp({ precision: 3, mode: 'string' }).notNull(),\n priority: integer().notNull(),\n\n userId: text('user_id'),\n sessionId: text('session_id').notNull(),\n deviceId: text('device_id').notNull(),\n\n pageUrl: text('page_url'),\n pageTitle: text('page_title'),\n referrer: text(),\n\n properties: jsonb(),\n\n platform: text().notNull(),\n appVersion: text('app_version').notNull(),\n sdkVersion: text('sdk_version').notNull(),\n\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n },\n (table) => [\n index('analytics_events_user_id_idx').using(\n 'btree',\n table.userId.asc().nullsLast().op('text_ops')\n ),\n index('analytics_events_event_type_idx').using(\n 'btree',\n table.eventType.asc().nullsLast().op('text_ops')\n ),\n index('analytics_events_platform_idx').using(\n 'btree',\n table.platform.asc().nullsLast().op('text_ops')\n ),\n index('analytics_events_timestamp_idx').using('btree', table.timestamp.desc().nullsLast()),\n index('analytics_events_session_id_idx').using(\n 'btree',\n table.sessionId.asc().nullsLast().op('text_ops')\n ),\n ]\n);\n\n/**\n * 创建外键关系(需要在使用时手动添加)\n *\n * 在你的 schema.ts 中添加:\n *\n * foreignKey({\n * columns: [analyticsEvents.userId],\n * foreignColumns: [user.id],\n * name: \"analytics_events_userId_fkey\"\n * }).onUpdate(\"cascade\").onDelete(\"set null\")\n */\n","/**\n * 埋点分析服务\n * Analytics Service\n *\n * 使用方式:\n * import { createAnalyticsService } from '@lyricnote/shared/analytics/server'\n * const service = createAnalyticsService(db, analyticsEvents, logger)\n */\n\nimport { eq, and, gte, lte, sql, desc, asc, count, inArray } from 'drizzle-orm';\n\n// 导出类型\nexport * from './types';\nimport type {\n AnalyticsEvent,\n AnalyticsQueryParams,\n AnalyticsStats,\n UserBehavior,\n SessionAnalytics,\n DatabaseInstance,\n} from './types';\n\n// Logger 接口\ninterface Logger {\n info: (message: string, data?: any) => void;\n error: (message: string, error: Error) => void;\n}\n\n// 默认 logger(如果未提供)\nconst defaultLogger: Logger = {\n info: (message, data) => console.log('[Analytics] ' + (message), data || ''),\n error: (message, error) => console.error('[Analytics] ' + (message), error),\n};\n\n/**\n * 创建埋点服务实例\n * @param db - Drizzle 数据库实例\n * @param analyticsEventsTable - analytics_events 表定义\n * @param logger - 日志实例(可选)\n */\nexport function createAnalyticsService(\n db: DatabaseInstance,\n analyticsEventsTable: any,\n logger: Logger = defaultLogger\n) {\n const analyticsEvents = analyticsEventsTable;\n\n return {\n /**\n * 批量插入埋点事件\n */\n async insertAnalyticsEvents(events: AnalyticsEvent[]): Promise<void> {\n try {\n if (events.length === 0) return;\n\n // 使用 onConflictDoNothing 来忽略重复的事件 ID\n // 这样可以避免前端重试或离线队列导致的重复插入\n await db.insert(analyticsEvents).values(events).onConflictDoNothing();\n\n logger.info('Analytics events inserted', { count: events.length });\n } catch (error) {\n logger.error('Failed to insert analytics events', error as Error);\n throw error;\n }\n },\n\n /**\n * 查询埋点事件\n */\n async queryAnalyticsEvents(\n params: AnalyticsQueryParams\n ): Promise<{ events: AnalyticsEvent[]; total: number }> {\n try {\n const conditions: any[] = [];\n\n // 时间范围过滤\n if (params.startDate) {\n conditions.push(gte(analyticsEvents.timestamp, params.startDate));\n }\n if (params.endDate) {\n conditions.push(lte(analyticsEvents.timestamp, params.endDate));\n }\n\n // 事件类型过滤\n if (params.eventType) {\n conditions.push(eq(analyticsEvents.eventType, params.eventType));\n }\n if (params.eventTypes && params.eventTypes.length > 0) {\n conditions.push(inArray(analyticsEvents.eventType, params.eventTypes));\n }\n\n // 用户过滤\n if (params.userId) {\n conditions.push(eq(analyticsEvents.userId, params.userId));\n }\n\n // 平台过滤\n if (params.platform) {\n conditions.push(eq(analyticsEvents.platform, params.platform));\n }\n if (params.platforms && params.platforms.length > 0) {\n conditions.push(inArray(analyticsEvents.platform, params.platforms));\n }\n\n // 会话过滤\n if (params.sessionId) {\n conditions.push(eq(analyticsEvents.sessionId, params.sessionId));\n }\n\n const whereClause = conditions.length > 0 ? and(...conditions) : undefined;\n\n // 查询总数\n const [{ total }] = await db\n .select({ total: count() })\n .from(analyticsEvents)\n .where(whereClause);\n\n // 排序\n const orderByColumn = params.orderBy || 'timestamp';\n const orderDirection = params.orderDirection || 'desc';\n const orderFn = orderDirection === 'asc' ? asc : desc;\n\n let orderByField;\n switch (orderByColumn) {\n case 'eventType':\n orderByField = analyticsEvents.eventType;\n break;\n case 'platform':\n orderByField = analyticsEvents.platform;\n break;\n default:\n orderByField = analyticsEvents.timestamp;\n }\n\n // 查询数据\n const events = await db\n .select()\n .from(analyticsEvents)\n .where(whereClause)\n .orderBy(orderFn(orderByField))\n .limit(params.limit || 100)\n .offset(params.offset || 0);\n\n // 修复时间戳格式:添加 'Z' 后缀表示 UTC 时间\n const formattedEvents = events.map((event: any) => ({\n ...event,\n timestamp: event.timestamp.endsWith('Z') ? event.timestamp : (event.timestamp) + 'Z',\n createdAt: event.createdAt.endsWith('Z') ? event.createdAt : (event.createdAt) + 'Z',\n }));\n\n return {\n events: formattedEvents as AnalyticsEvent[],\n total: Number(total),\n };\n } catch (error) {\n logger.error('Failed to query analytics events', error as Error);\n throw error;\n }\n },\n\n /**\n * 获取统计数据\n */\n async getAnalyticsStats(\n startDate?: string,\n endDate?: string,\n platform?: string\n ): Promise<AnalyticsStats> {\n try {\n const conditions: any[] = [];\n\n if (startDate) {\n conditions.push(gte(analyticsEvents.timestamp, startDate));\n }\n if (endDate) {\n conditions.push(lte(analyticsEvents.timestamp, endDate));\n }\n if (platform) {\n conditions.push(eq(analyticsEvents.platform, platform));\n }\n\n const whereClause = conditions.length > 0 ? and(...conditions) : undefined;\n\n // 总事件数\n const [{ totalEvents }] = await db\n .select({ totalEvents: count() })\n .from(analyticsEvents)\n .where(whereClause);\n\n // 唯一用户数\n const [{ uniqueUsers }] = await db\n .select({ uniqueUsers: sql<number>`COUNT(DISTINCT ${analyticsEvents.userId})` })\n .from(analyticsEvents)\n .where(whereClause);\n\n // 唯一会话数\n const [{ uniqueSessions }] = await db\n .select({ uniqueSessions: sql<number>`COUNT(DISTINCT ${analyticsEvents.sessionId})` })\n .from(analyticsEvents)\n .where(whereClause);\n\n // 唯一设备数\n const [{ uniqueDevices }] = await db\n .select({ uniqueDevices: sql<number>`COUNT(DISTINCT ${analyticsEvents.deviceId})` })\n .from(analyticsEvents)\n .where(whereClause);\n\n // 按事件类型统计\n const eventsByType = await db\n .select({\n eventType: analyticsEvents.eventType,\n count: count(),\n })\n .from(analyticsEvents)\n .where(whereClause)\n .groupBy(analyticsEvents.eventType)\n .orderBy(desc(count()))\n .limit(10);\n\n // 按平台统计\n const eventsByPlatform = await db\n .select({\n platform: analyticsEvents.platform,\n count: count(),\n })\n .from(analyticsEvents)\n .where(whereClause)\n .groupBy(analyticsEvents.platform)\n .orderBy(desc(count()));\n\n // 热门页面\n const topPages = await db\n .select({\n pageUrl: analyticsEvents.pageUrl,\n count: count(),\n })\n .from(analyticsEvents)\n .where(and(whereClause, sql`${analyticsEvents.pageUrl} IS NOT NULL`))\n .groupBy(analyticsEvents.pageUrl)\n .orderBy(desc(count()))\n .limit(10);\n\n return {\n totalEvents: Number(totalEvents),\n uniqueUsers: Number(uniqueUsers),\n uniqueSessions: Number(uniqueSessions),\n uniqueDevices: Number(uniqueDevices),\n eventsByType: eventsByType.map((e: any) => ({\n eventType: e.eventType,\n count: Number(e.count),\n })),\n eventsByPlatform: eventsByPlatform.map((e: any) => ({\n platform: e.platform,\n count: Number(e.count),\n })),\n topPages: topPages\n .filter((p: any) => p.pageUrl)\n .map((p: any) => ({\n pageUrl: p.pageUrl!,\n count: Number(p.count),\n })),\n };\n } catch (error) {\n logger.error('Failed to get analytics stats', error as Error);\n throw error;\n }\n },\n\n /**\n * 获取用户行为分析\n */\n async getUserBehavior(\n userId: string,\n startDate?: string,\n endDate?: string\n ): Promise<UserBehavior | null> {\n try {\n const conditions: any[] = [eq(analyticsEvents.userId, userId)];\n\n if (startDate) {\n conditions.push(gte(analyticsEvents.timestamp, startDate));\n }\n if (endDate) {\n conditions.push(lte(analyticsEvents.timestamp, endDate));\n }\n\n const whereClause = and(...conditions);\n\n // 事件总数\n const [{ eventCount }] = await db\n .select({ eventCount: count() })\n .from(analyticsEvents)\n .where(whereClause);\n\n if (eventCount === 0) return null;\n\n // 最后活跃时间\n const [{ lastActive }] = await db\n .select({ lastActive: sql<string>`MAX(${analyticsEvents.timestamp})` })\n .from(analyticsEvents)\n .where(whereClause);\n\n // 使用的平台\n const platformsResult = await db\n .select({ platform: analyticsEvents.platform })\n .from(analyticsEvents)\n .where(whereClause)\n .groupBy(analyticsEvents.platform);\n\n // 热门事件\n const topEvents = await db\n .select({\n eventType: analyticsEvents.eventType,\n count: count(),\n })\n .from(analyticsEvents)\n .where(whereClause)\n .groupBy(analyticsEvents.eventType)\n .orderBy(desc(count()))\n .limit(5);\n\n return {\n userId,\n eventCount: Number(eventCount),\n lastActive,\n platforms: platformsResult.map((p: any) => p.platform),\n topEvents: topEvents.map((e: any) => ({\n eventType: e.eventType,\n count: Number(e.count),\n })),\n };\n } catch (error) {\n logger.error('Failed to get user behavior', error as Error);\n throw error;\n }\n },\n\n /**\n * 获取会话分析\n */\n async getSessionAnalytics(sessionId: string): Promise<SessionAnalytics | null> {\n try {\n const events = await db\n .select()\n .from(analyticsEvents)\n .where(eq(analyticsEvents.sessionId, sessionId))\n .orderBy(asc(analyticsEvents.timestamp));\n\n if (events.length === 0) return null;\n\n const firstEvent = events[0];\n const lastEvent = events[events.length - 1];\n\n const startTime = new Date(firstEvent.timestamp).getTime();\n const endTime = new Date(lastEvent.timestamp).getTime();\n const duration = endTime - startTime;\n\n return {\n sessionId,\n userId: firstEvent.userId || undefined,\n deviceId: firstEvent.deviceId,\n platform: firstEvent.platform,\n startTime: firstEvent.timestamp,\n endTime: lastEvent.timestamp,\n duration,\n eventCount: events.length,\n events: events as AnalyticsEvent[],\n };\n } catch (error) {\n logger.error('Failed to get session analytics', error as Error);\n throw error;\n }\n },\n\n /**\n * 获取漏斗分析\n */\n async getFunnelAnalysis(\n steps: string[],\n startDate?: string,\n endDate?: string\n ): Promise<{ step: string; count: number; conversionRate: number }[]> {\n try {\n const results = [];\n let previousCount = 0;\n\n for (let i = 0; i < steps.length; i++) {\n const conditions: any[] = [eq(analyticsEvents.eventType, steps[i])];\n\n if (startDate) {\n conditions.push(gte(analyticsEvents.timestamp, startDate));\n }\n if (endDate) {\n conditions.push(lte(analyticsEvents.timestamp, endDate));\n }\n\n const whereClause = and(...conditions);\n\n const [{ count: stepCount }] = await db\n .select({ count: sql<number>`COUNT(DISTINCT ${analyticsEvents.userId})` })\n .from(analyticsEvents)\n .where(whereClause);\n\n const conversionRate = i === 0 ? 100 : (Number(stepCount) / previousCount) * 100;\n\n results.push({\n step: steps[i] || 'unknown',\n count: Number(stepCount),\n conversionRate: Math.round(conversionRate * 100) / 100,\n });\n\n previousCount = Number(stepCount);\n }\n\n return results;\n } catch (error) {\n logger.error('Failed to get funnel analysis', error as Error);\n throw error;\n }\n },\n\n /**\n * 删除旧数据(数据清理)\n */\n async cleanOldAnalyticsEvents(daysToKeep: number = 90): Promise<number> {\n try {\n const cutoffDate = new Date();\n cutoffDate.setDate(cutoffDate.getDate() - daysToKeep);\n\n await db\n .delete(analyticsEvents)\n .where(lte(analyticsEvents.timestamp, cutoffDate.toISOString()));\n\n logger.info('Old analytics events cleaned', { daysToKeep });\n\n return 0; // Drizzle doesn't return affected rows count in delete\n } catch (error) {\n logger.error('Failed to clean old analytics events', error as Error);\n throw error;\n }\n },\n };\n}\n","/**\n * 埋点 API 路由处理器\n * Analytics API Route Handlers\n *\n * 使用方式(Next.js):\n * import { createAnalyticsHandlers } from '@lyricnote/shared/analytics/server'\n * const handlers = createAnalyticsHandlers(analyticsService)\n * export const POST = handlers.handleEventsPost\n */\n\nimport type { AnalyticsEvent, AnalyticsQueryParams } from './types';\n\n// 服务接口类型\ninterface AnalyticsService {\n insertAnalyticsEvents: (events: AnalyticsEvent[]) => Promise<void>;\n queryAnalyticsEvents: (\n params: AnalyticsQueryParams\n ) => Promise<{ events: AnalyticsEvent[]; total: number }>;\n getAnalyticsStats: (startDate?: string, endDate?: string, platform?: string) => Promise<any>;\n getUserBehavior: (userId: string, startDate?: string, endDate?: string) => Promise<any>;\n getSessionAnalytics: (sessionId: string) => Promise<any>;\n getFunnelAnalysis: (steps: string[], startDate?: string, endDate?: string) => Promise<any>;\n}\n\n// Request/Response 接口(兼容多种框架)\ninterface Request {\n json: () => Promise<any>;\n url?: string;\n nextUrl?: { searchParams: URLSearchParams };\n}\n\ninterface ResponseInit {\n status?: number;\n headers?: Record<string, string>;\n}\n\n/**\n * 创建埋点 API 处理器\n */\nexport function createAnalyticsHandlers(\n service: AnalyticsService,\n ResponseClass?: any // Next.js NextResponse 或其他响应类\n) {\n // 默认使用标准响应格式\n const createResponse = ResponseClass\n ? (data: any, init?: ResponseInit) => ResponseClass.json(data, init)\n : (data: any, init?: ResponseInit) => ({ body: data, status: init?.status || 200 });\n\n return {\n /**\n * POST /api/analytics/events\n * 处理事件上报\n */\n async handleEventsPost(request: Request) {\n try {\n const body = await request.json();\n const { events } = body;\n\n // 验证数据\n if (!Array.isArray(events)) {\n return createResponse(\n { success: false, message: 'Invalid events format' },\n { status: 400 }\n );\n }\n\n if (events.length === 0) {\n return createResponse(\n { success: true, message: 'No events to process' },\n { status: 200 }\n );\n }\n\n // 验证每个事件的必填字段\n for (const event of events) {\n if (!event.event_id || !event.event_type || !event.event_name) {\n return createResponse(\n { success: false, message: 'Missing required event fields' },\n { status: 400 }\n );\n }\n }\n\n // 转换字段名(前端使用 snake_case,数据库使用 camelCase)\n const formattedEvents = events.map((event) => ({\n id: event.event_id,\n eventType: event.event_type,\n eventName: event.event_name,\n timestamp: new Date(event.timestamp).toISOString(),\n priority: event.priority,\n userId: event.user_id || null,\n sessionId: event.session_id,\n deviceId: event.device_id,\n pageUrl: event.page_url || null,\n pageTitle: event.page_title || null,\n referrer: event.referrer || null,\n properties: event.properties || {},\n platform: event.platform,\n appVersion: event.app_version,\n sdkVersion: event.sdk_version,\n }));\n\n // 插入数据库\n await service.insertAnalyticsEvents(formattedEvents);\n\n return createResponse({\n success: true,\n message: 'Events received successfully',\n count: events.length,\n });\n } catch (error) {\n console.error('Failed to process analytics events', error);\n\n return createResponse(\n {\n success: false,\n message: 'Internal server error',\n error: process.env.NODE_ENV === 'development' ? (error as Error).message : undefined,\n },\n { status: 500 }\n );\n }\n },\n\n /**\n * GET /api/analytics/query\n * 查询埋点事件\n */\n async handleQueryGet(request: Request) {\n try {\n // 解析查询参数\n const searchParams =\n request.nextUrl?.searchParams || new URLSearchParams(request.url?.split('?')[1]);\n\n const params: AnalyticsQueryParams = {\n startDate: searchParams.get('startDate') || undefined,\n endDate: searchParams.get('endDate') || undefined,\n eventType: searchParams.get('eventType') || undefined,\n eventTypes: searchParams.get('eventTypes')?.split(',') || undefined,\n userId: searchParams.get('userId') || undefined,\n platform: searchParams.get('platform') || undefined,\n platforms: searchParams.get('platforms')?.split(',') || undefined,\n sessionId: searchParams.get('sessionId') || undefined,\n limit: parseInt(searchParams.get('limit') || '100'),\n offset: parseInt(searchParams.get('offset') || '0'),\n orderBy: (searchParams.get('orderBy') || 'timestamp') as any,\n orderDirection: (searchParams.get('orderDirection') || 'desc') as any,\n };\n\n // 查询数据\n const result = await service.queryAnalyticsEvents(params);\n\n return createResponse({\n success: true,\n data: result.events,\n total: result.total,\n limit: params.limit,\n offset: params.offset,\n });\n } catch (error) {\n console.error('Failed to query analytics events', error);\n\n return createResponse(\n {\n success: false,\n message: 'Internal server error',\n error: process.env.NODE_ENV === 'development' ? (error as Error).message : undefined,\n },\n { status: 500 }\n );\n }\n },\n\n /**\n * GET /api/analytics/stats\n * 获取统计数据\n */\n async handleStatsGet(request: Request) {\n try {\n const searchParams =\n request.nextUrl?.searchParams || new URLSearchParams(request.url?.split('?')[1]);\n\n const startDate = searchParams.get('startDate') || undefined;\n const endDate = searchParams.get('endDate') || undefined;\n const platform = searchParams.get('platform') || undefined;\n\n // 获取统计数据\n const stats = await service.getAnalyticsStats(startDate, endDate, platform);\n\n return createResponse({\n success: true,\n data: stats,\n });\n } catch (error) {\n console.error('Failed to get analytics stats', error);\n\n return createResponse(\n {\n success: false,\n message: 'Internal server error',\n error: process.env.NODE_ENV === 'development' ? (error as Error).message : undefined,\n },\n { status: 500 }\n );\n }\n },\n\n /**\n * GET /api/analytics/user/[userId]\n * 获取用户行为分析\n */\n async handleUserBehaviorGet(request: Request, params: { userId: string }) {\n try {\n const { userId } = params;\n const searchParams =\n request.nextUrl?.searchParams || new URLSearchParams(request.url?.split('?')[1]);\n\n const startDate = searchParams.get('startDate') || undefined;\n const endDate = searchParams.get('endDate') || undefined;\n\n // 获取用户行为数据\n const behavior = await service.getUserBehavior(userId, startDate, endDate);\n\n if (!behavior) {\n return createResponse(\n { success: false, message: 'No data found for this user' },\n { status: 404 }\n );\n }\n\n return createResponse({\n success: true,\n data: behavior,\n });\n } catch (error) {\n console.error('Failed to get user behavior', error);\n\n return createResponse(\n {\n success: false,\n message: 'Internal server error',\n error: process.env.NODE_ENV === 'development' ? (error as Error).message : undefined,\n },\n { status: 500 }\n );\n }\n },\n\n /**\n * GET /api/analytics/session/[sessionId]\n * 获取会话分析\n */\n async handleSessionAnalyticsGet(_request: Request, params: { sessionId: string }) {\n try {\n const { sessionId } = params;\n\n // 获取会话分析数据\n const session = await service.getSessionAnalytics(sessionId);\n\n if (!session) {\n return createResponse({ success: false, message: 'Session not found' }, { status: 404 });\n }\n\n return createResponse({\n success: true,\n data: session,\n });\n } catch (error) {\n console.error('Failed to get session analytics', error);\n\n return createResponse(\n {\n success: false,\n message: 'Internal server error',\n error: process.env.NODE_ENV === 'development' ? (error as Error).message : undefined,\n },\n { status: 500 }\n );\n }\n },\n\n /**\n * POST /api/analytics/funnel\n * 漏斗分析\n */\n async handleFunnelPost(request: Request) {\n try {\n const body = await request.json();\n const { steps, startDate, endDate } = body;\n\n // 验证数据\n if (!Array.isArray(steps) || steps.length === 0) {\n return createResponse(\n { success: false, message: 'Invalid steps format' },\n { status: 400 }\n );\n }\n\n // 获取漏斗分析数据\n const funnel = await service.getFunnelAnalysis(steps, startDate, endDate);\n\n return createResponse({\n success: true,\n data: funnel,\n });\n } catch (error) {\n console.error('Failed to get funnel analysis', error);\n\n return createResponse(\n {\n success: false,\n message: 'Internal server error',\n error: process.env.NODE_ENV === 'development' ? (error as Error).message : undefined,\n },\n { status: 500 }\n );\n }\n },\n };\n}\n"]}