beatsaber-bot-core 0.2.0-rc.8 → 0.3.0-rc.1

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 (678) hide show
  1. package/dist/cjs/cmd/bind/bind-beatleader.js +2 -2
  2. package/dist/cjs/cmd/bind/bind-beatleader.js.map +1 -1
  3. package/dist/cjs/cmd/bind/bind-beatsaver.js +2 -2
  4. package/dist/cjs/cmd/bind/bind-beatsaver.js.map +1 -1
  5. package/dist/cjs/cmd/bind/bind-id-beatleader.js +3 -3
  6. package/dist/cjs/cmd/bind/bind-id-beatleader.js.map +1 -1
  7. package/dist/cjs/cmd/bind/bind-id-beatsaver.js +3 -3
  8. package/dist/cjs/cmd/bind/bind-id-beatsaver.js.map +1 -1
  9. package/dist/cjs/cmd/bind/bind-scoresaber.js +3 -3
  10. package/dist/cjs/cmd/bind/bind-scoresaber.js.map +1 -1
  11. package/dist/cjs/cmd/bind/index.js +12 -12
  12. package/dist/cjs/cmd/bind/index.js.map +1 -1
  13. package/dist/cjs/cmd/bsmap/id-search.js +3 -3
  14. package/dist/cjs/cmd/bsmap/id-search.js.map +1 -1
  15. package/dist/cjs/cmd/bsmap/key-search.js +2 -2
  16. package/dist/cjs/cmd/bsmap/key-search.js.map +1 -1
  17. package/dist/cjs/cmd/bsmap/latest.js +2 -2
  18. package/dist/cjs/cmd/bsmap/latest.js.map +1 -1
  19. package/dist/cjs/cmd/deprecated/tmp.js +4 -4
  20. package/dist/cjs/cmd/deprecated/tmp.js.map +1 -1
  21. package/dist/cjs/cmd/index.js +11 -11
  22. package/dist/cjs/cmd/index.js.map +1 -1
  23. package/dist/cjs/cmd/rank.js +8 -8
  24. package/dist/cjs/cmd/rank.js.map +1 -1
  25. package/dist/cjs/cmd/score.js +16 -20
  26. package/dist/cjs/cmd/score.js.map +1 -1
  27. package/dist/cjs/cmd/subscribe/beatleader.js +3 -3
  28. package/dist/cjs/cmd/subscribe/beatleader.js.map +1 -1
  29. package/dist/cjs/cmd/subscribe/beatsaver.js +3 -3
  30. package/dist/cjs/cmd/subscribe/beatsaver.js.map +1 -1
  31. package/dist/cjs/cmd/subscribe/id-beatleader-score.js +4 -4
  32. package/dist/cjs/cmd/subscribe/id-beatleader-score.js.map +1 -1
  33. package/dist/cjs/cmd/subscribe/id-beatsaver-mapper.js +4 -4
  34. package/dist/cjs/cmd/subscribe/id-beatsaver-mapper.js.map +1 -1
  35. package/dist/cjs/cmd/subscribe/index.js +8 -8
  36. package/dist/cjs/cmd/subscribe/index.js.map +1 -1
  37. package/dist/cjs/cmd/subscribe/subjoin.js +6 -6
  38. package/dist/cjs/cmd/subscribe/subjoin.js.map +1 -1
  39. package/dist/cjs/cmd/subscribe/subleave.js +6 -6
  40. package/dist/cjs/cmd/subscribe/subleave.js.map +1 -1
  41. package/dist/cjs/cmd/subscribe/unsubscribe.js +8 -8
  42. package/dist/cjs/cmd/subscribe/unsubscribe.js.map +1 -1
  43. package/dist/cjs/common/cache.js.map +1 -0
  44. package/dist/cjs/common/fetch/error.js.map +1 -0
  45. package/dist/cjs/{infra/support → common}/fetch/index.js +16 -14
  46. package/dist/cjs/common/fetch/index.js.map +1 -0
  47. package/dist/cjs/{infra/support → common}/fetch/ofetch.js +5 -12
  48. package/dist/cjs/common/fetch/ofetch.js.map +1 -0
  49. package/dist/cjs/common/i18n/index.js +55 -0
  50. package/dist/cjs/common/i18n/index.js.map +1 -0
  51. package/dist/cjs/common/i18n/parser.js.map +1 -0
  52. package/dist/cjs/{infra/i18n/index.js → common/i18n/util.js} +10 -71
  53. package/dist/cjs/common/i18n/util.js.map +1 -0
  54. package/dist/cjs/{infra/support → common}/render/index.js +55 -15
  55. package/dist/cjs/common/render/index.js.map +1 -0
  56. package/dist/cjs/common/render/puppeteer.js.map +1 -0
  57. package/dist/cjs/{infra → common}/s3/index.js +34 -13
  58. package/dist/cjs/common/s3/index.js.map +1 -0
  59. package/dist/cjs/components/components/RankDifficulty.js +60 -84
  60. package/dist/cjs/components/components/RankDifficulty.js.map +1 -1
  61. package/dist/cjs/components/components/base/avatar.js +1 -2
  62. package/dist/cjs/components/components/base/avatar.js.map +1 -1
  63. package/dist/cjs/components/components/bl-rank-score-item.js +25 -87
  64. package/dist/cjs/components/components/bl-rank-score-item.js.map +1 -1
  65. package/dist/cjs/components/components/bl-score-item.js +28 -69
  66. package/dist/cjs/components/components/bl-score-item.js.map +1 -1
  67. package/dist/cjs/components/components/characteristic.js +106 -118
  68. package/dist/cjs/components/components/characteristic.js.map +1 -1
  69. package/dist/cjs/components/components/flag.js +6 -14
  70. package/dist/cjs/components/components/flag.js.map +1 -1
  71. package/dist/cjs/components/components/icons/BeatLeader.js +55 -71
  72. package/dist/cjs/components/components/icons/BeatLeader.js.map +1 -1
  73. package/dist/cjs/components/components/icons/RankIcon.js +3 -7
  74. package/dist/cjs/components/components/icons/RankIcon.js.map +1 -1
  75. package/dist/cjs/components/components/icons/ScoreSaberIcon.js +276 -312
  76. package/dist/cjs/components/components/icons/ScoreSaberIcon.js.map +1 -1
  77. package/dist/cjs/components/components/progressbar.js +12 -2
  78. package/dist/cjs/components/components/progressbar.js.map +1 -1
  79. package/dist/cjs/components/components/scoreItem.js +26 -63
  80. package/dist/cjs/components/components/scoreItem.js.map +1 -1
  81. package/dist/cjs/components/components/scoregraph.js +4 -5
  82. package/dist/cjs/components/components/scoregraph.js.map +1 -1
  83. package/dist/cjs/components/components/skill-graph.js +147 -164
  84. package/dist/cjs/components/components/skill-graph.js.map +1 -1
  85. package/dist/cjs/components/components/socre-badge.js +7 -10
  86. package/dist/cjs/components/components/socre-badge.js.map +1 -1
  87. package/dist/cjs/components/components/ss-rank-score-item.js +25 -87
  88. package/dist/cjs/components/components/ss-rank-score-item.js.map +1 -1
  89. package/dist/cjs/components/components/ss-score-item.js +38 -65
  90. package/dist/cjs/components/components/ss-score-item.js.map +1 -1
  91. package/dist/cjs/components/index.js +3 -43
  92. package/dist/cjs/components/index.js.map +1 -1
  93. package/dist/cjs/components/pages/bl-player.js +91 -136
  94. package/dist/cjs/components/pages/bl-player.js.map +1 -1
  95. package/dist/cjs/components/pages/bl-score-with-rank.js +114 -221
  96. package/dist/cjs/components/pages/bl-score-with-rank.js.map +1 -1
  97. package/dist/cjs/components/pages/bl-score.js +67 -169
  98. package/dist/cjs/components/pages/bl-score.js.map +1 -1
  99. package/dist/cjs/components/pages/bs-map.js +95 -166
  100. package/dist/cjs/components/pages/bs-map.js.map +1 -1
  101. package/dist/cjs/components/pages/index.js +26 -26
  102. package/dist/cjs/components/pages/index.js.map +1 -1
  103. package/dist/cjs/components/pages/ss-player.js +48 -77
  104. package/dist/cjs/components/pages/ss-player.js.map +1 -1
  105. package/dist/cjs/components/utils/bl/bsorReplayAcc.js +2 -2
  106. package/dist/cjs/components/utils/bl/bsorReplayAcc.js.map +1 -1
  107. package/dist/cjs/components/utils/bl/getPart.js.map +1 -1
  108. package/dist/cjs/components/utils/bl/stastic.js.map +1 -1
  109. package/dist/cjs/components/utils/format.js +3 -3
  110. package/dist/cjs/components/utils/format.js.map +1 -1
  111. package/dist/cjs/components/utils/getMods.js.map +1 -1
  112. package/dist/cjs/components/utils/index.js +4 -4
  113. package/dist/cjs/config.js +40 -0
  114. package/dist/cjs/config.js.map +1 -1
  115. package/dist/cjs/{interface → core}/cmd/builder.js +5 -5
  116. package/dist/cjs/core/cmd/builder.js.map +1 -0
  117. package/dist/cjs/core/cmd/type.js.map +1 -0
  118. package/dist/cjs/core/domain.js +16 -0
  119. package/dist/cjs/core/domain.js.map +1 -0
  120. package/dist/cjs/core/error.js +38 -0
  121. package/dist/cjs/core/error.js.map +1 -0
  122. package/dist/cjs/{interface/bot.js → core/event.js} +3 -3
  123. package/dist/cjs/core/event.js.map +1 -0
  124. package/dist/cjs/core/index.js +39 -0
  125. package/dist/cjs/core/index.js.map +1 -0
  126. package/dist/cjs/core/logger.js.map +1 -0
  127. package/dist/cjs/core/session.js +16 -0
  128. package/dist/cjs/core/session.js.map +1 -0
  129. package/dist/cjs/{schedules → events/schedules}/index.js +4 -3
  130. package/dist/cjs/events/schedules/index.js.map +1 -0
  131. package/dist/cjs/{schedules → events/schedules}/temp.js +7 -3
  132. package/dist/cjs/events/schedules/temp.js.map +1 -0
  133. package/dist/cjs/{ws → events/ws}/beatleader.js +6 -6
  134. package/dist/cjs/events/ws/beatleader.js.map +1 -0
  135. package/dist/cjs/{ws → events/ws}/beatsaver.js +11 -11
  136. package/dist/cjs/events/ws/beatsaver.js.map +1 -0
  137. package/dist/cjs/events/ws/handler.js.map +1 -0
  138. package/dist/cjs/{ws → events/ws}/index.js +6 -8
  139. package/dist/cjs/events/ws/index.js.map +1 -0
  140. package/dist/cjs/index.js +27 -18
  141. package/dist/cjs/index.js.map +1 -1
  142. package/dist/cjs/interface/db/index.js +0 -6
  143. package/dist/cjs/interface/db/index.js.map +1 -1
  144. package/dist/cjs/interface/db/models.js.map +1 -1
  145. package/dist/cjs/interface/index.js +12 -21
  146. package/dist/cjs/interface/index.js.map +1 -1
  147. package/dist/cjs/{service → services}/api/base/aioclient.js +1 -1
  148. package/dist/cjs/services/api/base/aioclient.js.map +1 -0
  149. package/dist/cjs/{service → services}/api/base/blclient.js +1 -1
  150. package/dist/cjs/services/api/base/blclient.js.map +1 -0
  151. package/dist/cjs/{service → services}/api/base/bsclient.js +2 -2
  152. package/dist/cjs/services/api/base/bsclient.js.map +1 -0
  153. package/dist/cjs/{service → services}/api/base/index.js +8 -8
  154. package/dist/cjs/services/api/base/index.js.map +1 -0
  155. package/dist/cjs/{service → services}/api/base/ssclient.js +2 -2
  156. package/dist/cjs/services/api/base/ssclient.js.map +1 -0
  157. package/dist/cjs/{service → services}/api/index.js +17 -9
  158. package/dist/cjs/services/api/index.js.map +1 -0
  159. package/dist/cjs/services/api/interfaces/aiosaber/index.js.map +1 -0
  160. package/dist/cjs/services/api/interfaces/beatleader/bsor.js.map +1 -0
  161. package/dist/cjs/{service → services}/api/interfaces/beatleader/index.js +10 -10
  162. package/dist/cjs/services/api/interfaces/beatleader/index.js.map +1 -0
  163. package/dist/cjs/services/api/interfaces/beatleader/req.js.map +1 -0
  164. package/dist/cjs/services/api/interfaces/beatleader/score.js.map +1 -0
  165. package/dist/cjs/services/api/interfaces/beatleader/user.js.map +1 -0
  166. package/dist/cjs/services/api/interfaces/beatleader/ws.js.map +1 -0
  167. package/dist/cjs/services/api/interfaces/beatsaver/alert.js.map +1 -0
  168. package/dist/cjs/services/api/interfaces/beatsaver/bsmap.js.map +1 -0
  169. package/dist/cjs/{service → services}/api/interfaces/beatsaver/index.js +10 -10
  170. package/dist/cjs/services/api/interfaces/beatsaver/index.js.map +1 -0
  171. package/dist/cjs/services/api/interfaces/beatsaver/resp.js.map +1 -0
  172. package/dist/cjs/services/api/interfaces/beatsaver/user.js.map +1 -0
  173. package/dist/cjs/services/api/interfaces/beatsaver/ws.js.map +1 -0
  174. package/dist/cjs/services/api/interfaces/index.js.map +1 -0
  175. package/dist/cjs/{service → services}/api/interfaces/scoresaber/index.js +6 -6
  176. package/dist/cjs/services/api/interfaces/scoresaber/index.js.map +1 -0
  177. package/dist/cjs/services/api/interfaces/scoresaber/item.js.map +1 -0
  178. package/dist/cjs/services/api/interfaces/scoresaber/leaderboard.js.map +1 -0
  179. package/dist/cjs/services/api/interfaces/scoresaber/resp.js.map +1 -0
  180. package/dist/cjs/services/api/interfaces/scoresaber/user.js.map +1 -0
  181. package/dist/cjs/services/api/interfaces/scoresaber/ws.js.map +1 -0
  182. package/dist/cjs/services/api/sortScore.js.map +1 -0
  183. package/dist/cjs/{infra → services}/errors/index.js +21 -38
  184. package/dist/cjs/services/errors/index.js.map +1 -0
  185. package/dist/cjs/services/i18n/index.js +43 -0
  186. package/dist/cjs/services/i18n/index.js.map +1 -0
  187. package/dist/cjs/{infra → services}/i18n/zh-cn.json +1 -1
  188. package/dist/cjs/{infra → services}/index.js +12 -9
  189. package/dist/cjs/services/index.js.map +1 -0
  190. package/dist/cjs/services/preference.js.map +1 -0
  191. package/dist/cjs/{service → services}/render/index.js +36 -13
  192. package/dist/cjs/services/render/index.js.map +1 -0
  193. package/dist/cjs/utils/bsorDecoder.js +329 -0
  194. package/dist/cjs/utils/bsorDecoder.js.map +1 -0
  195. package/dist/cjs/utils/index.js +6 -1
  196. package/dist/cjs/utils/index.js.map +1 -1
  197. package/dist/cjs/utils/platform.js +38 -0
  198. package/dist/cjs/utils/platform.js.map +1 -0
  199. package/dist/esm/cmd/bind/bind-beatleader.js +2 -2
  200. package/dist/esm/cmd/bind/bind-beatleader.js.map +1 -1
  201. package/dist/esm/cmd/bind/bind-beatsaver.js +2 -2
  202. package/dist/esm/cmd/bind/bind-beatsaver.js.map +1 -1
  203. package/dist/esm/cmd/bind/bind-id-beatleader.js +3 -3
  204. package/dist/esm/cmd/bind/bind-id-beatleader.js.map +1 -1
  205. package/dist/esm/cmd/bind/bind-id-beatsaver.js +3 -3
  206. package/dist/esm/cmd/bind/bind-id-beatsaver.js.map +1 -1
  207. package/dist/esm/cmd/bind/bind-scoresaber.js +3 -3
  208. package/dist/esm/cmd/bind/bind-scoresaber.js.map +1 -1
  209. package/dist/esm/cmd/bind/index.js +5 -5
  210. package/dist/esm/cmd/bind/index.js.map +1 -1
  211. package/dist/esm/cmd/bsmap/id-search.js +2 -2
  212. package/dist/esm/cmd/bsmap/id-search.js.map +1 -1
  213. package/dist/esm/cmd/bsmap/key-search.js +1 -1
  214. package/dist/esm/cmd/bsmap/key-search.js.map +1 -1
  215. package/dist/esm/cmd/bsmap/latest.js +2 -2
  216. package/dist/esm/cmd/bsmap/latest.js.map +1 -1
  217. package/dist/esm/cmd/deprecated/tmp.js +3 -3
  218. package/dist/esm/cmd/deprecated/tmp.js.map +1 -1
  219. package/dist/esm/cmd/index.js +11 -11
  220. package/dist/esm/cmd/index.js.map +1 -1
  221. package/dist/esm/cmd/rank.js +5 -5
  222. package/dist/esm/cmd/rank.js.map +1 -1
  223. package/dist/esm/cmd/score.js +13 -17
  224. package/dist/esm/cmd/score.js.map +1 -1
  225. package/dist/esm/cmd/subscribe/beatleader.js +3 -3
  226. package/dist/esm/cmd/subscribe/beatleader.js.map +1 -1
  227. package/dist/esm/cmd/subscribe/beatsaver.js +3 -3
  228. package/dist/esm/cmd/subscribe/beatsaver.js.map +1 -1
  229. package/dist/esm/cmd/subscribe/id-beatleader-score.js +4 -4
  230. package/dist/esm/cmd/subscribe/id-beatleader-score.js.map +1 -1
  231. package/dist/esm/cmd/subscribe/id-beatsaver-mapper.js +4 -4
  232. package/dist/esm/cmd/subscribe/id-beatsaver-mapper.js.map +1 -1
  233. package/dist/esm/cmd/subscribe/index.js +7 -7
  234. package/dist/esm/cmd/subscribe/index.js.map +1 -1
  235. package/dist/esm/cmd/subscribe/subjoin.js +5 -5
  236. package/dist/esm/cmd/subscribe/subjoin.js.map +1 -1
  237. package/dist/esm/cmd/subscribe/subleave.js +5 -5
  238. package/dist/esm/cmd/subscribe/subleave.js.map +1 -1
  239. package/dist/esm/cmd/subscribe/unsubscribe.js +7 -7
  240. package/dist/esm/cmd/subscribe/unsubscribe.js.map +1 -1
  241. package/dist/esm/common/cache.js.map +1 -0
  242. package/dist/esm/common/fetch/error.js.map +1 -0
  243. package/dist/esm/common/fetch/index.js +35 -0
  244. package/dist/esm/common/fetch/index.js.map +1 -0
  245. package/dist/esm/{infra/support → common}/fetch/ofetch.js +4 -10
  246. package/dist/esm/common/fetch/ofetch.js.map +1 -0
  247. package/dist/esm/common/i18n/index.js +32 -0
  248. package/dist/esm/common/i18n/index.js.map +1 -0
  249. package/dist/esm/common/i18n/parser.js.map +1 -0
  250. package/dist/esm/{infra/i18n/index.js → common/i18n/util.js} +4 -56
  251. package/dist/esm/common/i18n/util.js.map +1 -0
  252. package/dist/esm/{infra/support → common}/render/index.js +53 -13
  253. package/dist/esm/common/render/index.js.map +1 -0
  254. package/dist/esm/common/render/puppeteer.js.map +1 -0
  255. package/dist/esm/{infra → common}/s3/index.js +32 -12
  256. package/dist/esm/common/s3/index.js.map +1 -0
  257. package/dist/esm/components/components/RankDifficulty.js +60 -84
  258. package/dist/esm/components/components/RankDifficulty.js.map +1 -1
  259. package/dist/esm/components/components/base/avatar.js +1 -2
  260. package/dist/esm/components/components/base/avatar.js.map +1 -1
  261. package/dist/esm/components/components/bl-rank-score-item.js +25 -87
  262. package/dist/esm/components/components/bl-rank-score-item.js.map +1 -1
  263. package/dist/esm/components/components/bl-score-item.js +28 -69
  264. package/dist/esm/components/components/bl-score-item.js.map +1 -1
  265. package/dist/esm/components/components/characteristic.js +106 -118
  266. package/dist/esm/components/components/characteristic.js.map +1 -1
  267. package/dist/esm/components/components/flag.js +6 -14
  268. package/dist/esm/components/components/flag.js.map +1 -1
  269. package/dist/esm/components/components/icons/BeatLeader.js +55 -71
  270. package/dist/esm/components/components/icons/BeatLeader.js.map +1 -1
  271. package/dist/esm/components/components/icons/RankIcon.js +3 -7
  272. package/dist/esm/components/components/icons/RankIcon.js.map +1 -1
  273. package/dist/esm/components/components/icons/ScoreSaberIcon.js +276 -312
  274. package/dist/esm/components/components/icons/ScoreSaberIcon.js.map +1 -1
  275. package/dist/esm/components/components/progressbar.js +2 -2
  276. package/dist/esm/components/components/progressbar.js.map +1 -1
  277. package/dist/esm/components/components/scoreItem.js +26 -63
  278. package/dist/esm/components/components/scoreItem.js.map +1 -1
  279. package/dist/esm/components/components/scoregraph.js +4 -5
  280. package/dist/esm/components/components/scoregraph.js.map +1 -1
  281. package/dist/esm/components/components/skill-graph.js +147 -164
  282. package/dist/esm/components/components/skill-graph.js.map +1 -1
  283. package/dist/esm/components/components/socre-badge.js +7 -10
  284. package/dist/esm/components/components/socre-badge.js.map +1 -1
  285. package/dist/esm/components/components/ss-rank-score-item.js +25 -87
  286. package/dist/esm/components/components/ss-rank-score-item.js.map +1 -1
  287. package/dist/esm/components/components/ss-score-item.js +28 -65
  288. package/dist/esm/components/components/ss-score-item.js.map +1 -1
  289. package/dist/esm/components/index.js +3 -43
  290. package/dist/esm/components/index.js.map +1 -1
  291. package/dist/esm/components/pages/bl-player.js +91 -136
  292. package/dist/esm/components/pages/bl-player.js.map +1 -1
  293. package/dist/esm/components/pages/bl-score-with-rank.js +114 -221
  294. package/dist/esm/components/pages/bl-score-with-rank.js.map +1 -1
  295. package/dist/esm/components/pages/bl-score.js +67 -169
  296. package/dist/esm/components/pages/bl-score.js.map +1 -1
  297. package/dist/esm/components/pages/bs-map.js +95 -166
  298. package/dist/esm/components/pages/bs-map.js.map +1 -1
  299. package/dist/esm/components/pages/index.js +21 -21
  300. package/dist/esm/components/pages/index.js.map +1 -1
  301. package/dist/esm/components/pages/ss-player.js +48 -77
  302. package/dist/esm/components/pages/ss-player.js.map +1 -1
  303. package/dist/esm/components/utils/bl/bsorReplayAcc.js +2 -2
  304. package/dist/esm/components/utils/bl/bsorReplayAcc.js.map +1 -1
  305. package/dist/esm/components/utils/bl/getPart.js.map +1 -1
  306. package/dist/esm/components/utils/bl/stastic.js.map +1 -1
  307. package/dist/esm/components/utils/format.js +3 -3
  308. package/dist/esm/components/utils/format.js.map +1 -1
  309. package/dist/esm/components/utils/getMods.js.map +1 -1
  310. package/dist/esm/components/utils/index.js +2 -2
  311. package/dist/esm/config.js +32 -0
  312. package/dist/esm/config.js.map +1 -1
  313. package/dist/esm/{interface → core}/cmd/builder.js +4 -4
  314. package/dist/esm/core/cmd/builder.js.map +1 -0
  315. package/dist/esm/core/domain.js +1 -0
  316. package/dist/esm/core/error.js +16 -0
  317. package/dist/esm/core/error.js.map +1 -0
  318. package/dist/esm/core/event.js +1 -0
  319. package/dist/esm/core/index.js +10 -0
  320. package/dist/esm/core/index.js.map +1 -0
  321. package/dist/esm/core/session.js +1 -0
  322. package/dist/esm/events/schedules/index.js +16 -0
  323. package/dist/esm/events/schedules/index.js.map +1 -0
  324. package/dist/esm/{schedules → events/schedules}/temp.js +7 -3
  325. package/dist/esm/events/schedules/temp.js.map +1 -0
  326. package/dist/esm/{ws → events/ws}/beatleader.js +6 -6
  327. package/dist/esm/events/ws/beatleader.js.map +1 -0
  328. package/dist/esm/{ws → events/ws}/beatsaver.js +11 -11
  329. package/dist/esm/events/ws/beatsaver.js.map +1 -0
  330. package/dist/esm/events/ws/index.js +4 -0
  331. package/dist/esm/events/ws/index.js.map +1 -0
  332. package/dist/esm/index.js +15 -10
  333. package/dist/esm/index.js.map +1 -1
  334. package/dist/esm/interface/db/index.js +0 -1
  335. package/dist/esm/interface/db/index.js.map +1 -1
  336. package/dist/esm/interface/index.js +9 -15
  337. package/dist/esm/interface/index.js.map +1 -1
  338. package/dist/esm/{service → services}/api/base/aioclient.js +1 -1
  339. package/dist/esm/services/api/base/aioclient.js.map +1 -0
  340. package/dist/esm/{service → services}/api/base/blclient.js +1 -1
  341. package/dist/esm/services/api/base/blclient.js.map +1 -0
  342. package/dist/esm/{service → services}/api/base/bsclient.js +2 -2
  343. package/dist/esm/services/api/base/bsclient.js.map +1 -0
  344. package/dist/esm/services/api/base/index.js +5 -0
  345. package/dist/esm/services/api/base/index.js.map +1 -0
  346. package/dist/esm/{service → services}/api/base/ssclient.js +2 -2
  347. package/dist/esm/services/api/base/ssclient.js.map +1 -0
  348. package/dist/esm/{service → services}/api/index.js +16 -8
  349. package/dist/esm/services/api/index.js.map +1 -0
  350. package/dist/esm/services/api/interfaces/beatleader/index.js +6 -0
  351. package/dist/esm/services/api/interfaces/beatleader/index.js.map +1 -0
  352. package/dist/esm/services/api/interfaces/beatsaver/index.js +6 -0
  353. package/dist/esm/services/api/interfaces/beatsaver/index.js.map +1 -0
  354. package/dist/esm/services/api/interfaces/scoresaber/index.js +4 -0
  355. package/dist/esm/services/api/interfaces/scoresaber/index.js.map +1 -0
  356. package/dist/esm/services/api/sortScore.js.map +1 -0
  357. package/dist/esm/{infra → services}/errors/index.js +1 -17
  358. package/dist/esm/services/errors/index.js.map +1 -0
  359. package/dist/esm/services/i18n/index.js +21 -0
  360. package/dist/esm/services/i18n/index.js.map +1 -0
  361. package/dist/esm/services/index.js +9 -0
  362. package/dist/esm/services/index.js.map +1 -0
  363. package/dist/esm/services/preference.js.map +1 -0
  364. package/dist/esm/{service → services}/render/index.js +34 -11
  365. package/dist/esm/services/render/index.js.map +1 -0
  366. package/dist/esm/utils/bsorDecoder.js +301 -0
  367. package/dist/esm/utils/bsorDecoder.js.map +1 -0
  368. package/dist/esm/utils/index.js +2 -0
  369. package/dist/esm/utils/index.js.map +1 -1
  370. package/dist/esm/utils/platform.js +14 -0
  371. package/dist/esm/utils/platform.js.map +1 -0
  372. package/dist/types/index.d.ts +1376 -48
  373. package/package.json +19 -10
  374. package/dist/cjs/components/utils/canvas.js +0 -2
  375. package/dist/cjs/components/utils/canvas.js.map +0 -1
  376. package/dist/cjs/infra/errors/index.js.map +0 -1
  377. package/dist/cjs/infra/i18n/index.js.map +0 -1
  378. package/dist/cjs/infra/i18n/parser.js.map +0 -1
  379. package/dist/cjs/infra/index.js.map +0 -1
  380. package/dist/cjs/infra/s3/index.js.map +0 -1
  381. package/dist/cjs/infra/support/cache.js.map +0 -1
  382. package/dist/cjs/infra/support/fetch/error.js.map +0 -1
  383. package/dist/cjs/infra/support/fetch/index.js.map +0 -1
  384. package/dist/cjs/infra/support/fetch/ofetch.js.map +0 -1
  385. package/dist/cjs/infra/support/render/index.js.map +0 -1
  386. package/dist/cjs/infra/support/render/puppeteer.js.map +0 -1
  387. package/dist/cjs/interface/bot.js.map +0 -1
  388. package/dist/cjs/interface/cmd/builder.js.map +0 -1
  389. package/dist/cjs/interface/cmd/type.js.map +0 -1
  390. package/dist/cjs/interface/logger.js.map +0 -1
  391. package/dist/cjs/schedules/index.js.map +0 -1
  392. package/dist/cjs/schedules/interface.js +0 -16
  393. package/dist/cjs/schedules/interface.js.map +0 -1
  394. package/dist/cjs/schedules/temp.js.map +0 -1
  395. package/dist/cjs/service/api/base/aioclient.js.map +0 -1
  396. package/dist/cjs/service/api/base/blclient.js.map +0 -1
  397. package/dist/cjs/service/api/base/bsclient.js.map +0 -1
  398. package/dist/cjs/service/api/base/index.js.map +0 -1
  399. package/dist/cjs/service/api/base/ssclient.js.map +0 -1
  400. package/dist/cjs/service/api/index.js.map +0 -1
  401. package/dist/cjs/service/api/interfaces/aiosaber/index.js.map +0 -1
  402. package/dist/cjs/service/api/interfaces/beatleader/bsor.js.map +0 -1
  403. package/dist/cjs/service/api/interfaces/beatleader/index.js.map +0 -1
  404. package/dist/cjs/service/api/interfaces/beatleader/req.js.map +0 -1
  405. package/dist/cjs/service/api/interfaces/beatleader/score.js.map +0 -1
  406. package/dist/cjs/service/api/interfaces/beatleader/user.js.map +0 -1
  407. package/dist/cjs/service/api/interfaces/beatleader/ws.js.map +0 -1
  408. package/dist/cjs/service/api/interfaces/beatsaver/alert.js.map +0 -1
  409. package/dist/cjs/service/api/interfaces/beatsaver/bsmap.js.map +0 -1
  410. package/dist/cjs/service/api/interfaces/beatsaver/index.js.map +0 -1
  411. package/dist/cjs/service/api/interfaces/beatsaver/resp.js.map +0 -1
  412. package/dist/cjs/service/api/interfaces/beatsaver/user.js.map +0 -1
  413. package/dist/cjs/service/api/interfaces/beatsaver/ws.js.map +0 -1
  414. package/dist/cjs/service/api/interfaces/index.js.map +0 -1
  415. package/dist/cjs/service/api/interfaces/scoresaber/index.js.map +0 -1
  416. package/dist/cjs/service/api/interfaces/scoresaber/item.js.map +0 -1
  417. package/dist/cjs/service/api/interfaces/scoresaber/leaderboard.js.map +0 -1
  418. package/dist/cjs/service/api/interfaces/scoresaber/resp.js.map +0 -1
  419. package/dist/cjs/service/api/interfaces/scoresaber/user.js.map +0 -1
  420. package/dist/cjs/service/api/interfaces/scoresaber/ws.js.map +0 -1
  421. package/dist/cjs/service/api/sortScore.js.map +0 -1
  422. package/dist/cjs/service/index.js +0 -16
  423. package/dist/cjs/service/index.js.map +0 -1
  424. package/dist/cjs/service/preference.js.map +0 -1
  425. package/dist/cjs/service/render/index.js.map +0 -1
  426. package/dist/cjs/service/render/interfaces.js +0 -16
  427. package/dist/cjs/service/render/interfaces.js.map +0 -1
  428. package/dist/cjs/ws/beatleader.js.map +0 -1
  429. package/dist/cjs/ws/beatsaver.js.map +0 -1
  430. package/dist/cjs/ws/bl-filter.js +0 -1
  431. package/dist/cjs/ws/handler.js.map +0 -1
  432. package/dist/cjs/ws/index.js.map +0 -1
  433. package/dist/cjs/ws/scoresaber.js +0 -75
  434. package/dist/cjs/ws/scoresaber.js.map +0 -1
  435. package/dist/esm/components/utils/canvas.js +0 -2
  436. package/dist/esm/components/utils/canvas.js.map +0 -1
  437. package/dist/esm/infra/errors/index.js.map +0 -1
  438. package/dist/esm/infra/i18n/index.js.map +0 -1
  439. package/dist/esm/infra/i18n/parser.js.map +0 -1
  440. package/dist/esm/infra/index.js +0 -6
  441. package/dist/esm/infra/index.js.map +0 -1
  442. package/dist/esm/infra/s3/index.js.map +0 -1
  443. package/dist/esm/infra/support/cache.js.map +0 -1
  444. package/dist/esm/infra/support/fetch/error.js.map +0 -1
  445. package/dist/esm/infra/support/fetch/index.js +0 -33
  446. package/dist/esm/infra/support/fetch/index.js.map +0 -1
  447. package/dist/esm/infra/support/fetch/ofetch.js.map +0 -1
  448. package/dist/esm/infra/support/render/index.js.map +0 -1
  449. package/dist/esm/infra/support/render/puppeteer.js.map +0 -1
  450. package/dist/esm/interface/bot.js +0 -1
  451. package/dist/esm/interface/cmd/builder.js.map +0 -1
  452. package/dist/esm/schedules/index.js +0 -15
  453. package/dist/esm/schedules/index.js.map +0 -1
  454. package/dist/esm/schedules/interface.js +0 -1
  455. package/dist/esm/schedules/temp.js.map +0 -1
  456. package/dist/esm/service/api/base/aioclient.js.map +0 -1
  457. package/dist/esm/service/api/base/blclient.js.map +0 -1
  458. package/dist/esm/service/api/base/bsclient.js.map +0 -1
  459. package/dist/esm/service/api/base/index.js +0 -5
  460. package/dist/esm/service/api/base/index.js.map +0 -1
  461. package/dist/esm/service/api/base/ssclient.js.map +0 -1
  462. package/dist/esm/service/api/index.js.map +0 -1
  463. package/dist/esm/service/api/interfaces/beatleader/index.js +0 -6
  464. package/dist/esm/service/api/interfaces/beatleader/index.js.map +0 -1
  465. package/dist/esm/service/api/interfaces/beatsaver/index.js +0 -6
  466. package/dist/esm/service/api/interfaces/beatsaver/index.js.map +0 -1
  467. package/dist/esm/service/api/interfaces/scoresaber/index.js +0 -4
  468. package/dist/esm/service/api/interfaces/scoresaber/index.js.map +0 -1
  469. package/dist/esm/service/api/sortScore.js.map +0 -1
  470. package/dist/esm/service/index.js +0 -1
  471. package/dist/esm/service/index.js.map +0 -1
  472. package/dist/esm/service/preference.js.map +0 -1
  473. package/dist/esm/service/render/index.js.map +0 -1
  474. package/dist/esm/service/render/interfaces.js +0 -1
  475. package/dist/esm/service/render/interfaces.js.map +0 -1
  476. package/dist/esm/ws/beatleader.js.map +0 -1
  477. package/dist/esm/ws/beatsaver.js.map +0 -1
  478. package/dist/esm/ws/bl-filter.js +0 -1
  479. package/dist/esm/ws/bl-filter.js.map +0 -1
  480. package/dist/esm/ws/index.js +0 -5
  481. package/dist/esm/ws/index.js.map +0 -1
  482. package/dist/esm/ws/scoresaber.js +0 -53
  483. package/dist/esm/ws/scoresaber.js.map +0 -1
  484. package/dist/types/cmd/bind/bind-beatleader.d.ts +0 -34
  485. package/dist/types/cmd/bind/bind-beatsaver.d.ts +0 -34
  486. package/dist/types/cmd/bind/bind-id-beatleader.d.ts +0 -34
  487. package/dist/types/cmd/bind/bind-id-beatsaver.d.ts +0 -34
  488. package/dist/types/cmd/bind/bind-scoresaber.d.ts +0 -34
  489. package/dist/types/cmd/bind/index.d.ts +0 -41
  490. package/dist/types/cmd/bsmap/id-search.d.ts +0 -41
  491. package/dist/types/cmd/bsmap/key-search.d.ts +0 -41
  492. package/dist/types/cmd/bsmap/latest.d.ts +0 -41
  493. package/dist/types/cmd/config/index.d.ts +0 -2
  494. package/dist/types/cmd/deprecated/tmp.d.ts +0 -41
  495. package/dist/types/cmd/index.d.ts +0 -34
  496. package/dist/types/cmd/rank.d.ts +0 -41
  497. package/dist/types/cmd/score.d.ts +0 -41
  498. package/dist/types/cmd/subscribe/beatleader.d.ts +0 -34
  499. package/dist/types/cmd/subscribe/beatsaver.d.ts +0 -34
  500. package/dist/types/cmd/subscribe/id-beatleader-score.d.ts +0 -34
  501. package/dist/types/cmd/subscribe/id-beatsaver-mapper.d.ts +0 -34
  502. package/dist/types/cmd/subscribe/index.d.ts +0 -41
  503. package/dist/types/cmd/subscribe/subjoin.d.ts +0 -41
  504. package/dist/types/cmd/subscribe/subleave.d.ts +0 -41
  505. package/dist/types/cmd/subscribe/unsubscribe.d.ts +0 -41
  506. package/dist/types/components/components/RankDifficulty.d.ts +0 -10
  507. package/dist/types/components/components/base/avatar.d.ts +0 -10
  508. package/dist/types/components/components/bl-rank-score-item.d.ts +0 -21
  509. package/dist/types/components/components/bl-score-item.d.ts +0 -10
  510. package/dist/types/components/components/characteristic.d.ts +0 -9
  511. package/dist/types/components/components/flag.d.ts +0 -9
  512. package/dist/types/components/components/icons/BeatLeader.d.ts +0 -6
  513. package/dist/types/components/components/icons/RankIcon.d.ts +0 -8
  514. package/dist/types/components/components/icons/ScoreSaberIcon.d.ts +0 -6
  515. package/dist/types/components/components/progressbar.d.ts +0 -8
  516. package/dist/types/components/components/scoreItem.d.ts +0 -8
  517. package/dist/types/components/components/scoregraph.d.ts +0 -15
  518. package/dist/types/components/components/skill-graph.d.ts +0 -9
  519. package/dist/types/components/components/socre-badge.d.ts +0 -9
  520. package/dist/types/components/components/ss-rank-score-item.d.ts +0 -21
  521. package/dist/types/components/components/ss-score-item.d.ts +0 -8
  522. package/dist/types/components/index.d.ts +0 -5
  523. package/dist/types/components/pages/bl-player.d.ts +0 -11
  524. package/dist/types/components/pages/bl-score-with-rank.d.ts +0 -18
  525. package/dist/types/components/pages/bl-score.d.ts +0 -15
  526. package/dist/types/components/pages/bs-map.d.ts +0 -11
  527. package/dist/types/components/pages/index.d.ts +0 -14
  528. package/dist/types/components/pages/ss-player.d.ts +0 -13
  529. package/dist/types/components/utils/bl/beatleader.d.ts +0 -15
  530. package/dist/types/components/utils/bl/blheadset.d.ts +0 -275
  531. package/dist/types/components/utils/bl/bsorDecoder.d.ts +0 -189
  532. package/dist/types/components/utils/bl/bsorReplayAcc.d.ts +0 -38
  533. package/dist/types/components/utils/bl/getPart.d.ts +0 -9
  534. package/dist/types/components/utils/bl/stastic.d.ts +0 -3
  535. package/dist/types/components/utils/canvas.d.ts +0 -2
  536. package/dist/types/components/utils/format.d.ts +0 -8
  537. package/dist/types/components/utils/getMods.d.ts +0 -5
  538. package/dist/types/components/utils/index.d.ts +0 -6
  539. package/dist/types/components/utils/qrcode.d.ts +0 -3
  540. package/dist/types/components/utils/sleep.d.ts +0 -3
  541. package/dist/types/components/utils/tag-format.d.ts +0 -3
  542. package/dist/types/components/utils/tw-join.d.ts +0 -5
  543. package/dist/types/config.d.ts +0 -30
  544. package/dist/types/index-Dagy_c8G.d.ts +0 -74
  545. package/dist/types/infra/errors/index.d.ts +0 -69
  546. package/dist/types/infra/i18n/index.d.ts +0 -4
  547. package/dist/types/infra/i18n/parser.d.ts +0 -16
  548. package/dist/types/infra/index.d.ts +0 -6
  549. package/dist/types/infra/s3/index.d.ts +0 -20
  550. package/dist/types/infra/support/cache.d.ts +0 -6
  551. package/dist/types/infra/support/fetch/error.d.ts +0 -11
  552. package/dist/types/infra/support/fetch/index.d.ts +0 -7
  553. package/dist/types/infra/support/fetch/ofetch.d.ts +0 -24
  554. package/dist/types/infra/support/render/index.d.ts +0 -38
  555. package/dist/types/infra/support/render/puppeteer.d.ts +0 -43
  556. package/dist/types/interface/bot.d.ts +0 -22
  557. package/dist/types/interface/cmd/builder.d.ts +0 -53
  558. package/dist/types/interface/cmd/type.d.ts +0 -30
  559. package/dist/types/interface/db/index.d.ts +0 -45
  560. package/dist/types/interface/db/models.d.ts +0 -41
  561. package/dist/types/interface/index.d.ts +0 -30
  562. package/dist/types/interface/logger.d.ts +0 -8
  563. package/dist/types/schedules/index.d.ts +0 -40
  564. package/dist/types/schedules/interface.d.ts +0 -45
  565. package/dist/types/schedules/temp.d.ts +0 -35
  566. package/dist/types/service/api/base/aioclient.d.ts +0 -13
  567. package/dist/types/service/api/base/blclient.d.ts +0 -28
  568. package/dist/types/service/api/base/bsclient.d.ts +0 -29
  569. package/dist/types/service/api/base/index.d.ts +0 -19
  570. package/dist/types/service/api/base/ssclient.d.ts +0 -17
  571. package/dist/types/service/api/index.d.ts +0 -59
  572. package/dist/types/service/api/interfaces/aiosaber/index.d.ts +0 -9
  573. package/dist/types/service/api/interfaces/beatleader/bsor.d.ts +0 -113
  574. package/dist/types/service/api/interfaces/beatleader/index.d.ts +0 -5
  575. package/dist/types/service/api/interfaces/beatleader/req.d.ts +0 -22
  576. package/dist/types/service/api/interfaces/beatleader/score.d.ts +0 -164
  577. package/dist/types/service/api/interfaces/beatleader/user.d.ts +0 -173
  578. package/dist/types/service/api/interfaces/beatleader/ws.d.ts +0 -90
  579. package/dist/types/service/api/interfaces/beatsaver/alert.d.ts +0 -20
  580. package/dist/types/service/api/interfaces/beatsaver/bsmap.d.ts +0 -70
  581. package/dist/types/service/api/interfaces/beatsaver/index.d.ts +0 -13
  582. package/dist/types/service/api/interfaces/beatsaver/resp.d.ts +0 -11
  583. package/dist/types/service/api/interfaces/beatsaver/user.d.ts +0 -10
  584. package/dist/types/service/api/interfaces/beatsaver/ws.d.ts +0 -13
  585. package/dist/types/service/api/interfaces/index.d.ts +0 -14
  586. package/dist/types/service/api/interfaces/scoresaber/index.d.ts +0 -3
  587. package/dist/types/service/api/interfaces/scoresaber/item.d.ts +0 -67
  588. package/dist/types/service/api/interfaces/scoresaber/leaderboard.d.ts +0 -13
  589. package/dist/types/service/api/interfaces/scoresaber/resp.d.ts +0 -12
  590. package/dist/types/service/api/interfaces/scoresaber/user.d.ts +0 -35
  591. package/dist/types/service/api/interfaces/scoresaber/ws.d.ts +0 -80
  592. package/dist/types/service/api/sortScore.d.ts +0 -5
  593. package/dist/types/service/index.d.ts +0 -30
  594. package/dist/types/service/preference.d.ts +0 -38
  595. package/dist/types/service/render/index.d.ts +0 -43
  596. package/dist/types/service/render/interfaces.d.ts +0 -30
  597. package/dist/types/utils/index.d.ts +0 -5
  598. package/dist/types/ws/beatleader.d.ts +0 -47
  599. package/dist/types/ws/beatsaver.d.ts +0 -52
  600. package/dist/types/ws/bl-filter.d.ts +0 -2
  601. package/dist/types/ws/handler.d.ts +0 -8
  602. package/dist/types/ws/index.d.ts +0 -36
  603. package/dist/types/ws/scoresaber.d.ts +0 -47
  604. /package/dist/cjs/{infra/support → common}/cache.js +0 -0
  605. /package/dist/cjs/{infra/support → common}/fetch/error.js +0 -0
  606. /package/dist/cjs/{infra → common}/i18n/parser.js +0 -0
  607. /package/dist/cjs/{infra/support → common}/render/puppeteer.js +0 -0
  608. /package/dist/cjs/{interface → core}/cmd/type.js +0 -0
  609. /package/dist/cjs/{interface → core}/logger.js +0 -0
  610. /package/dist/cjs/{ws → events/ws}/handler.js +0 -0
  611. /package/dist/cjs/{service → services}/api/interfaces/aiosaber/index.js +0 -0
  612. /package/dist/cjs/{service → services}/api/interfaces/beatleader/bsor.js +0 -0
  613. /package/dist/cjs/{service → services}/api/interfaces/beatleader/req.js +0 -0
  614. /package/dist/cjs/{service → services}/api/interfaces/beatleader/score.js +0 -0
  615. /package/dist/cjs/{service → services}/api/interfaces/beatleader/user.js +0 -0
  616. /package/dist/cjs/{service → services}/api/interfaces/beatleader/ws.js +0 -0
  617. /package/dist/cjs/{service → services}/api/interfaces/beatsaver/alert.js +0 -0
  618. /package/dist/cjs/{service → services}/api/interfaces/beatsaver/bsmap.js +0 -0
  619. /package/dist/cjs/{service → services}/api/interfaces/beatsaver/resp.js +0 -0
  620. /package/dist/cjs/{service → services}/api/interfaces/beatsaver/user.js +0 -0
  621. /package/dist/cjs/{service → services}/api/interfaces/beatsaver/ws.js +0 -0
  622. /package/dist/cjs/{service → services}/api/interfaces/index.js +0 -0
  623. /package/dist/cjs/{service → services}/api/interfaces/scoresaber/item.js +0 -0
  624. /package/dist/cjs/{service → services}/api/interfaces/scoresaber/leaderboard.js +0 -0
  625. /package/dist/cjs/{service → services}/api/interfaces/scoresaber/resp.js +0 -0
  626. /package/dist/cjs/{service → services}/api/interfaces/scoresaber/user.js +0 -0
  627. /package/dist/cjs/{service → services}/api/interfaces/scoresaber/ws.js +0 -0
  628. /package/dist/cjs/{service → services}/api/sortScore.js +0 -0
  629. /package/dist/cjs/{service → services}/preference.js +0 -0
  630. /package/dist/esm/{infra/support → common}/cache.js +0 -0
  631. /package/dist/esm/{infra/support → common}/fetch/error.js +0 -0
  632. /package/dist/esm/{infra → common}/i18n/parser.js +0 -0
  633. /package/dist/esm/{infra/support → common}/render/puppeteer.js +0 -0
  634. /package/dist/esm/{interface → core}/cmd/type.js +0 -0
  635. /package/dist/esm/{interface → core}/cmd/type.js.map +0 -0
  636. /package/dist/{cjs/ws/bl-filter.js.map → esm/core/domain.js.map} +0 -0
  637. /package/dist/esm/{interface/bot.js.map → core/event.js.map} +0 -0
  638. /package/dist/esm/{interface → core}/logger.js +0 -0
  639. /package/dist/esm/{interface → core}/logger.js.map +0 -0
  640. /package/dist/esm/{schedules/interface.js.map → core/session.js.map} +0 -0
  641. /package/dist/esm/{ws → events/ws}/handler.js +0 -0
  642. /package/dist/esm/{ws → events/ws}/handler.js.map +0 -0
  643. /package/dist/esm/{service → services}/api/interfaces/aiosaber/index.js +0 -0
  644. /package/dist/esm/{service → services}/api/interfaces/aiosaber/index.js.map +0 -0
  645. /package/dist/esm/{service → services}/api/interfaces/beatleader/bsor.js +0 -0
  646. /package/dist/esm/{service → services}/api/interfaces/beatleader/bsor.js.map +0 -0
  647. /package/dist/esm/{service → services}/api/interfaces/beatleader/req.js +0 -0
  648. /package/dist/esm/{service → services}/api/interfaces/beatleader/req.js.map +0 -0
  649. /package/dist/esm/{service → services}/api/interfaces/beatleader/score.js +0 -0
  650. /package/dist/esm/{service → services}/api/interfaces/beatleader/score.js.map +0 -0
  651. /package/dist/esm/{service → services}/api/interfaces/beatleader/user.js +0 -0
  652. /package/dist/esm/{service → services}/api/interfaces/beatleader/user.js.map +0 -0
  653. /package/dist/esm/{service → services}/api/interfaces/beatleader/ws.js +0 -0
  654. /package/dist/esm/{service → services}/api/interfaces/beatleader/ws.js.map +0 -0
  655. /package/dist/esm/{service → services}/api/interfaces/beatsaver/alert.js +0 -0
  656. /package/dist/esm/{service → services}/api/interfaces/beatsaver/alert.js.map +0 -0
  657. /package/dist/esm/{service → services}/api/interfaces/beatsaver/bsmap.js +0 -0
  658. /package/dist/esm/{service → services}/api/interfaces/beatsaver/bsmap.js.map +0 -0
  659. /package/dist/esm/{service → services}/api/interfaces/beatsaver/resp.js +0 -0
  660. /package/dist/esm/{service → services}/api/interfaces/beatsaver/resp.js.map +0 -0
  661. /package/dist/esm/{service → services}/api/interfaces/beatsaver/user.js +0 -0
  662. /package/dist/esm/{service → services}/api/interfaces/beatsaver/user.js.map +0 -0
  663. /package/dist/esm/{service → services}/api/interfaces/beatsaver/ws.js +0 -0
  664. /package/dist/esm/{service → services}/api/interfaces/beatsaver/ws.js.map +0 -0
  665. /package/dist/esm/{service → services}/api/interfaces/index.js +0 -0
  666. /package/dist/esm/{service → services}/api/interfaces/index.js.map +0 -0
  667. /package/dist/esm/{service → services}/api/interfaces/scoresaber/item.js +0 -0
  668. /package/dist/esm/{service → services}/api/interfaces/scoresaber/item.js.map +0 -0
  669. /package/dist/esm/{service → services}/api/interfaces/scoresaber/leaderboard.js +0 -0
  670. /package/dist/esm/{service → services}/api/interfaces/scoresaber/leaderboard.js.map +0 -0
  671. /package/dist/esm/{service → services}/api/interfaces/scoresaber/resp.js +0 -0
  672. /package/dist/esm/{service → services}/api/interfaces/scoresaber/resp.js.map +0 -0
  673. /package/dist/esm/{service → services}/api/interfaces/scoresaber/user.js +0 -0
  674. /package/dist/esm/{service → services}/api/interfaces/scoresaber/user.js.map +0 -0
  675. /package/dist/esm/{service → services}/api/interfaces/scoresaber/ws.js +0 -0
  676. /package/dist/esm/{service → services}/api/interfaces/scoresaber/ws.js.map +0 -0
  677. /package/dist/esm/{service → services}/api/sortScore.js +0 -0
  678. /package/dist/esm/{service → services}/preference.js +0 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "beatsaber-bot-core",
3
3
  "description": "Beatsaber bot",
4
- "version": "0.2.0-rc.8",
4
+ "version": "0.3.0-rc.1",
5
5
  "files": [
6
6
  "dist"
7
7
  ],
@@ -12,32 +12,39 @@
12
12
  },
13
13
  "exports": {
14
14
  ".": {
15
+ "types": "./dist/types/index.d.ts",
15
16
  "require": "./dist/cjs/index.js",
16
- "types": "./dist/types/index.d.ts"
17
+ "import": "./dist/esm/index.js"
17
18
  },
18
19
  "./interface": {
20
+ "types": "./dist/types/index.d.ts",
19
21
  "require": "./dist/cjs/interface/index.js",
20
- "types": "./dist/types/interface/index.d.ts"
22
+ "import": "./dist/esm/interface/index.js"
21
23
  },
22
24
  "./interface/*": {
25
+ "types": "./dist/types/index.d.ts",
23
26
  "require": "./dist/cjs/interface/**/*.js",
24
- "types": "./dist/types/interface/**/*.d.ts"
27
+ "import": "./dist/esm/interface/**/*.js"
25
28
  },
26
29
  "./service": {
30
+ "types": "./dist/types/index.d.ts",
27
31
  "require": "./dist/cjs/service/*.js",
28
- "types": "./dist/types/service/*.d.ts"
32
+ "import": "./dist/esm/service/*.js"
29
33
  },
30
34
  "./service/*": {
35
+ "types": "./dist/types/index.d.ts",
31
36
  "require": "./dist/cjs/service/*/index.js",
32
- "types": "./dist/types/service/*/index.d.ts"
37
+ "import": "./dist/esm/service/*/index.js"
33
38
  },
34
39
  "./infra": {
40
+ "types": "./dist/types/index.d.ts",
35
41
  "require": "./dist/cjs/infra/index.js",
36
- "types": "./dist/types/infra/index.d.ts"
42
+ "import": "./dist/esm/infra/index.js"
37
43
  },
38
44
  "./infra/*": {
45
+ "types": "./dist/types/index.d.ts",
39
46
  "require": "./dist/cjs/infra/*/index.js",
40
- "types": "./dist/types/infra/*/index.d.ts"
47
+ "import": "./dist/esm/infra/*/index.js"
41
48
  }
42
49
  },
43
50
  "keywords": [
@@ -60,11 +67,13 @@
60
67
  "puppeteer-core": "^24.11.2",
61
68
  "react": "^19",
62
69
  "react-dom": "^19",
63
- "@napi-rs/canvas": "^0.1.73"
70
+ "@napi-rs/canvas": "^0.1.73",
71
+ "zod": "^3.25.71"
64
72
  },
65
73
  "scripts": {
66
- "fix-path-alias": "tsc-alias --outDir dist/cjs && tsc-alias --outDir dist/esm",
74
+ "fix-path-alias": " tsc-alias --outDir dist/cjs && tsc-alias --outDir dist/esm",
67
75
  "copy-yml-resource": "node scripts/build.mjs",
76
+ "up": "tsup",
68
77
  "build": "tsup && pnpm run copy-yml-resource && pnpm run fix-path-alias",
69
78
  "pub": "pnpm run build && pnpm publish"
70
79
  }
@@ -1,2 +0,0 @@
1
- var import_canvas = require("@napi-rs/canvas");
2
- //# sourceMappingURL=canvas.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/utils/canvas.js"],"sourcesContent":["import { createCanvas } from '@napi-rs/canvas'\n// import {Canvas} from \"skia-canvas\";\n// export const createCanvas = (widht: number, height: number) => {\n// // createCanvas\n// // return new Canvas(widht, height);\n// return _createCanvas(widht, height)\n// }\n//\n// export const canvasToDataURL = (canvas: any) => {\n// //node canvas canvasRes.toDataURL('image/png');\n// // return canvas.toDataURLSync('png')\n// return canvas.toDataURL('image/png')\n// }\n\n\n// export const canvasHelper = {\n// createCanvas: (h,w)=>{return \"\"},\n// enable: false,\n// canvasToDataURL: (canvas)=> \"\"\n// }\n//\n// const canvasBuilder = async ()=> {\n// try {\n//\n// const { createCanvas: _createCanvas } = await import('@napi-rs/canvas')\n// canvasHelper.createCanvas = _createCanvas\n// canvasHelper.canvasToDataURL = (canvas)=> {\n// return canvas.toDataURL('image/png')\n// }\n// canvasHelper.enable = true\n//\n// }catch(err) {\n// try {\n// const {createCanvas: _createCanvas} = await import('canvas')\n// canvasHelper.createCanvas = _createCanvas\n// canvasHelper.canvasToDataURL = (canvas)=> {\n// return canvas.toDataURL('image/png')\n// }\n// canvasHelper.enable = true\n//\n// }catch(err) {\n// const {Canvas} = await import('skia-canvas')\n// canvasHelper.createCanvas = (h,w)=> {\n// return new Canvas(h,w)\n// }\n// canvasHelper.canvasToDataURL = (canvas)=> {\n// return canvas.toDataURLSync('image/png')\n// }\n// canvasHelper.enable = true\n// }\n// }\n// }\n//\n// canvasBuilder().then(()=>console.log(`canvas init over: enable: ${canvasHelper.enable}`))\n"],"mappings":"AAAA,oBAA6B;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/infra/errors/index.ts"],"sourcesContent":["export class UnexpectedError extends Error {\n constructor() {\n super('UnexpectedError')\n }\n}\n\nexport class BizError extends Error {\n id: string\n params?: any\n}\n\nexport class ScoreNotFoundError extends BizError {\n constructor(params?: any) {\n super('ScoreNotFoundError')\n this.name = 'ScoreNotFoundError'\n this.id = 'commands.bsbot.me.score-not-found'\n this.params = params\n }\n}\n\nexport class AccountBindingNotFoundError extends BizError {\n constructor(params?: any) {\n super('AccountBindingNotFoundError')\n this.name = 'AccountBindingNotFoundError'\n this.id = 'commands.bsbot.score.not-bind'\n this.params = params\n }\n}\nexport class UnknownUserIDError extends BizError {\n constructor(params?: any) {\n super('UnknownUserIDError')\n this.name = 'UnknownUserIDError'\n this.id = 'commands.bsbot.me.not-found'\n this.params = params\n }\n}\nexport class InvalidMapIdError extends BizError {\n constructor(params?: any) {\n super('InvalidMapIdError')\n this.name = 'InvalidMapIdError'\n this.id = 'commands.bsbot.id.error-map-id'\n this.params = params\n }\n}\n\nexport class MapIdNotFoundError extends BizError {\n constructor(params?: any) {\n super('MapIdNotFoundError')\n this.name = 'MapIdNotFoundError'\n this.id = 'commands.bsbot.id.not-found'\n this.params = params\n }\n}\n\nexport class BLIDNotFoundError extends BizError {\n constructor(params?: any) {\n super('BLIDNotFoundError')\n this.name = 'BLIDNotFoundError'\n this.id = 'commands.bsbot.bl.account.not-found'\n this.params = params\n this.params = params\n }\n}\nexport class SSIDNotFoundError extends BizError {\n constructor(params?: any) {\n super('SSIDNotFoundError')\n this.name = 'SSIDNotFoundError'\n this.id = 'commands.bsbot.ss.account.not-found'\n this.params = params\n this.params = params\n }\n}\nexport class BSIDNotFoundError extends BizError {\n constructor(params?: any) {\n super('BSIDNotFoundError')\n this.name = 'BSIDNotFoundError'\n this.id = 'commands.bsbot.bs.account.not-found'\n this.params = params\n this.params = params\n }\n}\n\nexport class ScoreSaberIDNotFoundError extends BizError {\n constructor(params?: any) {\n super('ScoreSaberIdNotFoundError')\n this.name = 'ScoreSaberIdNotFoundError'\n this.id = 'commands.bsbot.bind.not-found'\n this.params = params\n this.params = params\n }\n}\n\nexport class SessionPromotionTimeoutError extends BizError {\n constructor(params?: any) {\n super('SessionPromotionTimeoutError')\n this.name = 'SessionPromotionTimeoutError'\n this.id = 'commands.bsbot.session-promotion-timeout'\n this.params = params\n }\n}\n\nexport class SessionPromotionCancelError extends BizError {\n constructor(params?: any) {\n const name = 'SessionPromotionCancelError'\n super(name)\n this.name = name\n this.id = 'commands.bsbot.bind.cancel'\n this.params = params\n }\n}\n\nexport class SubscriptionExistError extends BizError {\n constructor(params?: any) {\n super('SubscriptionExistError')\n this.params = params\n this.name = 'SubscriptionExistError'\n this.id = 'commands.bsbot.subscribe.exist'\n this.params = params\n }\n}\nexport class NoneSubscriptionExistError extends BizError {\n constructor(params?: any) {\n super('NoneSubscriptionExistError')\n this.name = 'NoneSubscriptionExistError'\n this.id = 'commands.bsbot.subscribe.info.none'\n this.params = params\n }\n}\n\nexport class SubscriptionNotExistError extends BizError {\n constructor(params?: any) {\n super('SubscriptionNotExistError')\n this.name = 'SubscriptionNotExistError'\n this.id = 'commands.bsbot.unsubscribe.nosub'\n this.params = params\n }\n}\n\nexport class BSMapperSubscriptionNotExistError extends BizError {\n constructor(params?: any) {\n super('BSMapperSubscriptionNotExistError')\n this.name = 'BSMapperSubscriptionNotExistError'\n this.id = 'commands.bsbot.unsubscribe.nosub.beatsaver-mapper'\n this.params = params\n }\n}\n\nexport class ImageRenderError extends BizError {\n constructor(params?: any) {\n super('ImageRenderError')\n this.name = 'ImageRenderError'\n this.id = 'commands.bsbot.render.error'\n this.params = params\n }\n}\nexport class RequestError extends BizError {\n constructor(params?: any) {\n super('RequestError')\n this.name = 'RequestError'\n this.id = 'commands.bsbot.request.error'\n this.params = params\n }\n}\n\nexport class ReachNetworkRetryLimitError extends BizError {\n constructor(params?: any) {\n super('ReachNetworkRetryLimitError')\n this.name = 'ReachNetworkRetryLimitError'\n this.id = 'commands.bsbot.common.error.reach-request-retry-limit'\n this.params = params\n }\n}\n\nexport class NotImplementedError extends BizError {\n constructor(params?: any) {\n super('NotImplementedError')\n this.name = 'NotImplementedError'\n this.id = 'commands.bsbot.common.error.not-implemented'\n this.params = params\n }\n}\n\nexport class EmptyPromptError extends BizError {\n constructor(params?: any) {\n super('EmptyPromptError')\n this.name = 'EmptyPromptError'\n this.id = 'commands.bsbot.common.error.empty-prompt'\n this.params = params\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/infra/i18n/index.ts"],"sourcesContent":["import { interpolate } from './parser'\n\nconst i18nObj = {}\n\ninit().then((_) => console.log('i18n loaded'))\n\nasync function init() {\n // @ts-expect-error\n const zh = await import('./zh-cn.json')\n i18nObj['zh-cn'] = zh\n}\n\n// export async function loadI18N() {\n// const zh = await import('./zh-cn.json')\n// }\n\nfunction isObject(item) {\n return item && typeof item === 'object' && !Array.isArray(item)\n}\n\nfunction merge(target, ...sources) {\n if (!sources.length) return target\n const source = sources.shift()\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) Object.assign(target, { [key]: {} })\n merge(target[key], source[key])\n } else {\n Object.assign(target, { [key]: source[key] })\n }\n }\n }\n return merge(target, ...sources)\n}\n\nexport function loadI18nConfig(lang: string, obj: any) {\n const raw = i18nObj[lang]\n i18nObj[lang] = merge(raw, obj)\n console.log(`overwrite i18n ${lang} `)\n}\n\nexport function tran(path: string, params = {}, lang = 'zh-cn'): string {\n const keys = path.split('.')\n let result = i18nObj[lang]\n\n for (const key of keys) {\n if (result[key] !== undefined) {\n result = result[key]\n } else {\n return null\n }\n }\n try {\n if (typeof result === 'string') {\n return interpolate(result, params)\n }\n } catch (e) {\n return interpolateString(result, params)\n }\n\n return null\n}\n\nfunction interpolateString(str, context) {\n // 正则表达式匹配三元表达式\n const regex = /\\{\\{(.*?)\\?\\s*'(.*?)'\\s*:\\s*'(.*?)'\\s*\\}\\}/\n let match\n\n // 递归解析\n while ((match = regex.exec(str)) !== null) {\n const [fullMatch, condition, trueValue, falseValue] = match\n\n // 递归解析 trueValue 和 falseValue 以处理嵌套情况\n const resolvedTrueValue = interpolateString(trueValue, context)\n const resolvedFalseValue = interpolateString(falseValue, context)\n\n // 计算条件表达式\n let result = safeEval(condition, context)\n if (typeof result === 'string') {\n result = false\n }\n const replacement = result ? resolvedTrueValue : resolvedFalseValue\n\n // 替换匹配到的三元表达式\n str = str.replace(fullMatch, replacement)\n }\n\n // 替换变量插值\n const variableRegex = /\\{\\{(.*?)\\}\\}/g\n str = str.replace(variableRegex, (match, expr) => safeEval(expr, context))\n\n return str\n}\nfunction safeEval(expr, context) {\n try {\n const fn = new Function(...Object.keys(context), `return ${expr}`)\n return fn(...Object.values(context))\n } catch (e) {\n console.error(expr, context, e)\n return expr\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA4B;AAE5B,MAAM,UAAU,CAAC;AAEjB,KAAK,EAAE,KAAK,CAAC,MAAM,QAAQ,IAAI,aAAa,CAAC;AAE7C,SAAe,OAAO;AAAA;AAEpB,UAAM,KAAK,MAAM,OAAO,cAAc;AACtC,YAAQ,OAAO,IAAI;AAAA,EACrB;AAAA;AAMA,SAAS,SAAS,MAAM;AACtB,SAAO,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI;AAChE;AAEA,SAAS,MAAM,WAAW,SAAS;AACjC,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAC5B,QAAM,SAAS,QAAQ,MAAM;AAC7B,MAAI,SAAS,MAAM,KAAK,SAAS,MAAM,GAAG;AACxC,eAAW,OAAO,QAAQ;AACxB,UAAI,SAAS,OAAO,GAAG,CAAC,GAAG;AACzB,YAAI,CAAC,OAAO,GAAG,EAAG,QAAO,OAAO,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;AACrD,cAAM,OAAO,GAAG,GAAG,OAAO,GAAG,CAAC;AAAA,MAChC,OAAO;AACL,eAAO,OAAO,QAAQ,EAAE,CAAC,GAAG,GAAG,OAAO,GAAG,EAAE,CAAC;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AACA,SAAO,MAAM,QAAQ,GAAG,OAAO;AACjC;AAEO,SAAS,eAAe,MAAc,KAAU;AACrD,QAAM,MAAM,QAAQ,IAAI;AACxB,UAAQ,IAAI,IAAI,MAAM,KAAK,GAAG;AAC9B,UAAQ,IAAI,kBAAkB,IAAI,GAAG;AACvC;AAEO,SAAS,KAAK,MAAc,SAAS,CAAC,GAAG,OAAO,SAAiB;AACtE,QAAM,OAAO,KAAK,MAAM,GAAG;AAC3B,MAAI,SAAS,QAAQ,IAAI;AAEzB,aAAW,OAAO,MAAM;AACtB,QAAI,OAAO,GAAG,MAAM,QAAW;AAC7B,eAAS,OAAO,GAAG;AAAA,IACrB,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI;AACF,QAAI,OAAO,WAAW,UAAU;AAC9B,iBAAO,2BAAY,QAAQ,MAAM;AAAA,IACnC;AAAA,EACF,SAAS,GAAG;AACV,WAAO,kBAAkB,QAAQ,MAAM;AAAA,EACzC;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB,KAAK,SAAS;AAEvC,QAAM,QAAQ;AACd,MAAI;AAGJ,UAAQ,QAAQ,MAAM,KAAK,GAAG,OAAO,MAAM;AACzC,UAAM,CAAC,WAAW,WAAW,WAAW,UAAU,IAAI;AAGtD,UAAM,oBAAoB,kBAAkB,WAAW,OAAO;AAC9D,UAAM,qBAAqB,kBAAkB,YAAY,OAAO;AAGhE,QAAI,SAAS,SAAS,WAAW,OAAO;AACxC,QAAI,OAAO,WAAW,UAAU;AAC9B,eAAS;AAAA,IACX;AACA,UAAM,cAAc,SAAS,oBAAoB;AAGjD,UAAM,IAAI,QAAQ,WAAW,WAAW;AAAA,EAC1C;AAGA,QAAM,gBAAgB;AACtB,QAAM,IAAI,QAAQ,eAAe,CAACA,QAAO,SAAS,SAAS,MAAM,OAAO,CAAC;AAEzE,SAAO;AACT;AACA,SAAS,SAAS,MAAM,SAAS;AAC/B,MAAI;AACF,UAAM,KAAK,IAAI,SAAS,GAAG,OAAO,KAAK,OAAO,GAAG,UAAU,IAAI,EAAE;AACjE,WAAO,GAAG,GAAG,OAAO,OAAO,OAAO,CAAC;AAAA,EACrC,SAAS,GAAG;AACV,YAAQ,MAAM,MAAM,SAAS,CAAC;AAC9B,WAAO;AAAA,EACT;AACF;","names":["match"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/infra/i18n/parser.ts"],"sourcesContent":["enum TokenType {\n TEXT,\n OPEN_BRACE,\n CLOSE_BRACE,\n IDENTIFIER,\n QUESTION,\n COLON,\n STRING,\n}\n\ninterface Token {\n type: TokenType\n value: string\n}\n\n// 插值解析Parser {{}},暂时没转义支持\n// \"😯,没有找到用户「{{user}}」的谱面「{{id}} ({{mode ? '{{mode}}' : '' }} {{diff ? '-{{diff}}' : '' }})」的打分数据\"\nexport class Parser {\n private tokens: Token[] = []\n private current = 0\n\n constructor(\n private template: string,\n private data: any\n ) {\n this.tokenize()\n }\n\n private tokenize(): void {\n let current = 0\n while (current < this.template.length) {\n let char = this.template[current]\n if (char === '\\\\' && current + 1 < this.template.length) {\n // 处理转义字符\n const nextChar = this.template[current + 1]\n if (\n nextChar === '{' ||\n nextChar === '}' ||\n nextChar === '?' ||\n nextChar === ':' ||\n nextChar === \"'\" ||\n nextChar === '\\\\'\n ) {\n this.tokens.push({ type: TokenType.TEXT, value: nextChar })\n current += 2\n continue\n }\n }\n if (char === '{' && this.template[current + 1] === '{') {\n this.tokens.push({ type: TokenType.OPEN_BRACE, value: '{{' })\n current += 2\n continue\n }\n\n if (char === '}' && this.template[current + 1] === '}') {\n this.tokens.push({ type: TokenType.CLOSE_BRACE, value: '}}' })\n current += 2\n continue\n }\n\n if (char === '?') {\n this.tokens.push({ type: TokenType.QUESTION, value: '?' })\n current++\n continue\n }\n\n if (char === ':') {\n this.tokens.push({ type: TokenType.COLON, value: ':' })\n current++\n continue\n }\n\n if (char === \"'\") {\n let value = ''\n char = this.template[++current]\n while (char !== \"'\" && current < this.template.length) {\n if (char === '\\\\' && current + 1 < this.template.length) {\n char = this.template[++current]\n }\n value += char\n char = this.template[++current]\n }\n if (char === \"'\") current++\n this.tokens.push({ type: TokenType.STRING, value })\n continue\n }\n\n if (/[a-zA-Z0-9_]/.test(char)) {\n let value = ''\n while (/[a-zA-Z0-9_]/.test(char)) {\n value += char\n char = this.template[++current]\n }\n this.tokens.push({ type: TokenType.IDENTIFIER, value })\n continue\n }\n\n if (/\\s/.test(char)) {\n current++\n continue\n }\n\n let value = ''\n while (\n current < this.template.length &&\n char !== '{' &&\n char !== '}' &&\n char !== '?' &&\n char !== ':' &&\n char !== \"'\"\n // &&\n // !/[a-zA-Z0-9_]/.test(char)\n ) {\n if (char === '\\\\' && current + 1 < this.template.length) {\n value += this.template[++current]\n } else {\n value += char\n }\n char = this.template[++current]\n }\n if (value) {\n this.tokens.push({ type: TokenType.TEXT, value })\n }\n }\n }\n\n private match(...types: TokenType[]): boolean {\n if (this.current >= this.tokens.length) return false\n return types.includes(this.tokens[this.current].type)\n }\n\n private consume(type: TokenType): Token {\n if (this.match(type)) {\n return this.tokens[this.current++]\n }\n throw new Error(\n `Expected token type ${type}, but got ${this.tokens[this.current].type}`\n )\n }\n\n private parseExpression(): string {\n if (this.match(TokenType.OPEN_BRACE)) {\n this.consume(TokenType.OPEN_BRACE)\n const result = this.parseInterpolation()\n this.consume(TokenType.CLOSE_BRACE)\n return result\n }\n if (this.match(TokenType.STRING)) {\n const tmp = this.consume(TokenType.STRING).value\n return interpolate(tmp, this.data)\n }\n return this.consume(TokenType.TEXT).value\n }\n\n private parseInterpolation(): string {\n const identifier = this.consume(TokenType.IDENTIFIER).value\n if (this.match(TokenType.QUESTION)) {\n this.consume(TokenType.QUESTION)\n const truePart = this.parseExpression()\n this.consume(TokenType.COLON)\n const falsePart = this.parseExpression()\n return this.data[identifier] ? truePart : falsePart\n }\n return this.data[identifier]?.toString() || ''\n }\n\n parse(): string {\n // console.log(this.current, this.tokens)\n let result = ''\n while (this.current < this.tokens.length) {\n result += this.parseExpression()\n }\n return result\n }\n}\n\nexport function interpolate(template: string, data): string {\n const parser = new Parser(template, data)\n return parser.parse()\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAK,YAAL,kBAAKA,eAAL;AACE,EAAAA,sBAAA;AACA,EAAAA,sBAAA;AACA,EAAAA,sBAAA;AACA,EAAAA,sBAAA;AACA,EAAAA,sBAAA;AACA,EAAAA,sBAAA;AACA,EAAAA,sBAAA;AAPG,SAAAA;AAAA,GAAA;AAiBE,MAAM,OAAO;AAAA,EAIlB,YACU,UACA,MACR;AAFQ;AACA;AALV,wBAAQ,UAAkB,CAAC;AAC3B,wBAAQ,WAAU;AAMhB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEQ,WAAiB;AACvB,QAAI,UAAU;AACd,WAAO,UAAU,KAAK,SAAS,QAAQ;AACrC,UAAI,OAAO,KAAK,SAAS,OAAO;AAChC,UAAI,SAAS,QAAQ,UAAU,IAAI,KAAK,SAAS,QAAQ;AAEvD,cAAM,WAAW,KAAK,SAAS,UAAU,CAAC;AAC1C,YACE,aAAa,OACb,aAAa,OACb,aAAa,OACb,aAAa,OACb,aAAa,OACb,aAAa,MACb;AACA,eAAK,OAAO,KAAK,EAAE,MAAM,cAAgB,OAAO,SAAS,CAAC;AAC1D,qBAAW;AACX;AAAA,QACF;AAAA,MACF;AACA,UAAI,SAAS,OAAO,KAAK,SAAS,UAAU,CAAC,MAAM,KAAK;AACtD,aAAK,OAAO,KAAK,EAAE,MAAM,oBAAsB,OAAO,KAAK,CAAC;AAC5D,mBAAW;AACX;AAAA,MACF;AAEA,UAAI,SAAS,OAAO,KAAK,SAAS,UAAU,CAAC,MAAM,KAAK;AACtD,aAAK,OAAO,KAAK,EAAE,MAAM,qBAAuB,OAAO,KAAK,CAAC;AAC7D,mBAAW;AACX;AAAA,MACF;AAEA,UAAI,SAAS,KAAK;AAChB,aAAK,OAAO,KAAK,EAAE,MAAM,kBAAoB,OAAO,IAAI,CAAC;AACzD;AACA;AAAA,MACF;AAEA,UAAI,SAAS,KAAK;AAChB,aAAK,OAAO,KAAK,EAAE,MAAM,eAAiB,OAAO,IAAI,CAAC;AACtD;AACA;AAAA,MACF;AAEA,UAAI,SAAS,KAAK;AAChB,YAAIC,SAAQ;AACZ,eAAO,KAAK,SAAS,EAAE,OAAO;AAC9B,eAAO,SAAS,OAAO,UAAU,KAAK,SAAS,QAAQ;AACrD,cAAI,SAAS,QAAQ,UAAU,IAAI,KAAK,SAAS,QAAQ;AACvD,mBAAO,KAAK,SAAS,EAAE,OAAO;AAAA,UAChC;AACA,UAAAA,UAAS;AACT,iBAAO,KAAK,SAAS,EAAE,OAAO;AAAA,QAChC;AACA,YAAI,SAAS,IAAK;AAClB,aAAK,OAAO,KAAK,EAAE,MAAM,gBAAkB,OAAAA,OAAM,CAAC;AAClD;AAAA,MACF;AAEA,UAAI,eAAe,KAAK,IAAI,GAAG;AAC7B,YAAIA,SAAQ;AACZ,eAAO,eAAe,KAAK,IAAI,GAAG;AAChC,UAAAA,UAAS;AACT,iBAAO,KAAK,SAAS,EAAE,OAAO;AAAA,QAChC;AACA,aAAK,OAAO,KAAK,EAAE,MAAM,oBAAsB,OAAAA,OAAM,CAAC;AACtD;AAAA,MACF;AAEA,UAAI,KAAK,KAAK,IAAI,GAAG;AACnB;AACA;AAAA,MACF;AAEA,UAAI,QAAQ;AACZ,aACE,UAAU,KAAK,SAAS,UACxB,SAAS,OACT,SAAS,OACT,SAAS,OACT,SAAS,OACT,SAAS,KAGT;AACA,YAAI,SAAS,QAAQ,UAAU,IAAI,KAAK,SAAS,QAAQ;AACvD,mBAAS,KAAK,SAAS,EAAE,OAAO;AAAA,QAClC,OAAO;AACL,mBAAS;AAAA,QACX;AACA,eAAO,KAAK,SAAS,EAAE,OAAO;AAAA,MAChC;AACA,UAAI,OAAO;AACT,aAAK,OAAO,KAAK,EAAE,MAAM,cAAgB,MAAM,CAAC;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,SAAS,OAA6B;AAC5C,QAAI,KAAK,WAAW,KAAK,OAAO,OAAQ,QAAO;AAC/C,WAAO,MAAM,SAAS,KAAK,OAAO,KAAK,OAAO,EAAE,IAAI;AAAA,EACtD;AAAA,EAEQ,QAAQ,MAAwB;AACtC,QAAI,KAAK,MAAM,IAAI,GAAG;AACpB,aAAO,KAAK,OAAO,KAAK,SAAS;AAAA,IACnC;AACA,UAAM,IAAI;AAAA,MACR,uBAAuB,IAAI,aAAa,KAAK,OAAO,KAAK,OAAO,EAAE,IAAI;AAAA,IACxE;AAAA,EACF;AAAA,EAEQ,kBAA0B;AAChC,QAAI,KAAK,MAAM,kBAAoB,GAAG;AACpC,WAAK,QAAQ,kBAAoB;AACjC,YAAM,SAAS,KAAK,mBAAmB;AACvC,WAAK,QAAQ,mBAAqB;AAClC,aAAO;AAAA,IACT;AACA,QAAI,KAAK,MAAM,cAAgB,GAAG;AAChC,YAAM,MAAM,KAAK,QAAQ,cAAgB,EAAE;AAC3C,aAAO,YAAY,KAAK,KAAK,IAAI;AAAA,IACnC;AACA,WAAO,KAAK,QAAQ,YAAc,EAAE;AAAA,EACtC;AAAA,EAEQ,qBAA6B;AA1JvC;AA2JI,UAAM,aAAa,KAAK,QAAQ,kBAAoB,EAAE;AACtD,QAAI,KAAK,MAAM,gBAAkB,GAAG;AAClC,WAAK,QAAQ,gBAAkB;AAC/B,YAAM,WAAW,KAAK,gBAAgB;AACtC,WAAK,QAAQ,aAAe;AAC5B,YAAM,YAAY,KAAK,gBAAgB;AACvC,aAAO,KAAK,KAAK,UAAU,IAAI,WAAW;AAAA,IAC5C;AACA,aAAO,UAAK,KAAK,UAAU,MAApB,mBAAuB,eAAc;AAAA,EAC9C;AAAA,EAEA,QAAgB;AAEd,QAAI,SAAS;AACb,WAAO,KAAK,UAAU,KAAK,OAAO,QAAQ;AACxC,gBAAU,KAAK,gBAAgB;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,YAAY,UAAkB,MAAc;AAC1D,QAAM,SAAS,IAAI,OAAO,UAAU,IAAI;AACxC,SAAO,OAAO,MAAM;AACtB;","names":["TokenType","value"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/infra/index.ts"],"sourcesContent":["export * from './support/render'\nexport { tran } from './i18n/index'\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAc,6BAAd;AACA,kBAAqB;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/infra/s3/index.ts"],"sourcesContent":["import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'\nimport crypto from 'crypto'\n\nexport interface S3Config {\n s3AccessKey: string\n s3SecretKey: string\n endpoint: string\n region: string | undefined\n bucketName: string\n keyPrefix: string\n baseURL: string\n}\n\nexport class S3Service {\n private s3Client: S3Client\n private readonly bucket: string\n private readonly keyPrefix: string = ''\n private readonly baseURL: string = ''\n constructor(config: S3Config) {\n const s3 = new S3Client({\n region: config.region ?? 'auto',\n endpoint: config.endpoint,\n credentials: {\n accessKeyId: config.s3AccessKey,\n secretAccessKey: config.s3SecretKey,\n },\n })\n this.bucket = config.bucketName\n this.keyPrefix = config.keyPrefix\n this.baseURL = config.baseURL\n this.s3Client = s3\n }\n async uploadImgWithUrl(url: string, mimeType?: string): Promise<string> {\n const res = await fetch(url).then((it) => it.arrayBuffer())\n const buf = Buffer.from(res)\n // @ts-ignore\n const md5 = crypto.createHash('md5').update(buf).digest('hex')\n const key = this.keyPrefix ? `${this.keyPrefix}-${md5}` : md5\n const params = {\n Bucket: this.bucket,\n Key: key,\n Body: buf,\n ContentType: mimeType ?? 'image/png',\n }\n const command = new PutObjectCommand(params)\n const data = await this.s3Client.send(command)\n return `${this.baseURL}${key}`\n }\n async uploadImg(buffer: Buffer, mimeType?: string): Promise<string> {\n // md5 digest\n // @ts-ignore\n const md5 = crypto.createHash('md5').update(buffer).digest('hex')\n const key = this.keyPrefix ? `${this.keyPrefix}-${md5}` : md5\n const params = {\n Bucket: this.bucket,\n Key: key,\n Body: buffer,\n ContentType: mimeType ?? 'image/png',\n }\n const command = new PutObjectCommand(params)\n const data = await this.s3Client.send(command)\n return `${this.baseURL}${key}`\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAA2C;AAC3C,oBAAmB;AAYZ,MAAM,UAAU;AAAA,EAKrB,YAAY,QAAkB;AAJ9B,wBAAQ;AACR,wBAAiB;AACjB,wBAAiB,aAAoB;AACrC,wBAAiB,WAAkB;AAjBrC;AAmBI,UAAM,KAAK,IAAI,0BAAS;AAAA,MACtB,SAAQ,YAAO,WAAP,YAAiB;AAAA,MACzB,UAAU,OAAO;AAAA,MACjB,aAAa;AAAA,QACX,aAAa,OAAO;AAAA,QACpB,iBAAiB,OAAO;AAAA,MAC1B;AAAA,IACF,CAAC;AACD,SAAK,SAAS,OAAO;AACrB,SAAK,YAAY,OAAO;AACxB,SAAK,UAAU,OAAO;AACtB,SAAK,WAAW;AAAA,EAClB;AAAA,EACM,iBAAiB,KAAa,UAAoC;AAAA;AACtE,YAAM,MAAM,MAAM,MAAM,GAAG,EAAE,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC;AAC1D,YAAM,MAAM,OAAO,KAAK,GAAG;AAE3B,YAAM,MAAM,cAAAA,QAAO,WAAW,KAAK,EAAE,OAAO,GAAG,EAAE,OAAO,KAAK;AAC7D,YAAM,MAAM,KAAK,YAAY,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK;AAC1D,YAAM,SAAS;AAAA,QACb,QAAQ,KAAK;AAAA,QACb,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa,8BAAY;AAAA,MAC3B;AACA,YAAM,UAAU,IAAI,kCAAiB,MAAM;AAC3C,YAAM,OAAO,MAAM,KAAK,SAAS,KAAK,OAAO;AAC7C,aAAO,GAAG,KAAK,OAAO,GAAG,GAAG;AAAA,IAC9B;AAAA;AAAA,EACM,UAAU,QAAgB,UAAoC;AAAA;AAGlE,YAAM,MAAM,cAAAA,QAAO,WAAW,KAAK,EAAE,OAAO,MAAM,EAAE,OAAO,KAAK;AAChE,YAAM,MAAM,KAAK,YAAY,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK;AAC1D,YAAM,SAAS;AAAA,QACb,QAAQ,KAAK;AAAA,QACb,KAAK;AAAA,QACL,MAAM;AAAA,QACN,aAAa,8BAAY;AAAA,MAC3B;AACA,YAAM,UAAU,IAAI,kCAAiB,MAAM;AAC3C,YAAM,OAAO,MAAM,KAAK,SAAS,KAAK,OAAO;AAC7C,aAAO,GAAG,KAAK,OAAO,GAAG,GAAG;AAAA,IAC9B;AAAA;AACF;","names":["crypto"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/infra/support/cache.ts"],"sourcesContent":["import { LRUCache } from 'lru-cache'\n\nconst options = {\n max: 500,\n maxSize: 5000,\n ttl: 1000 * 60 * 5,\n allowStale: false,\n updateAgeOnGet: true,\n updateAgeOnHas: true,\n}\n\nexport const cache = new LRUCache(options)\n\nexport const createCache = <K extends {}, V extends {}, FC = unknown>(opt) =>\n new LRUCache<K, V, FC>(opt)\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAyB;AAEzB,MAAM,UAAU;AAAA,EACd,KAAK;AAAA,EACL,SAAS;AAAA,EACT,KAAK,MAAO,KAAK;AAAA,EACjB,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,gBAAgB;AAClB;AAEO,MAAM,QAAQ,IAAI,0BAAS,OAAO;AAElC,MAAM,cAAc,CAA2C,QACpE,IAAI,0BAAmB,GAAG;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/infra/support/fetch/error.ts"],"sourcesContent":["export class RequestError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'RequestError'\n }\n}\n\nexport class NotFoundError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'NotFoundError'\n }\n}\n\nexport class RateLimitError extends Error {\n constructor(message?: string) {\n super(message)\n this.name = 'RateLimitError'\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,qBAAqB,MAAM;AAAA,EACtC,YAAY,SAAkB;AAC5B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,MAAM,sBAAsB,MAAM;AAAA,EACvC,YAAY,SAAkB;AAC5B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,MAAM,uBAAuB,MAAM;AAAA,EACxC,YAAY,SAAkB;AAC5B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/infra/support/fetch/index.ts"],"sourcesContent":["import { createFetch as c, Fetch } from './ofetch'\nimport { Logger } from '@/interface'\nimport { NotFoundError } from './error'\n\nconst rofetch = c({\n defaults: {\n retryStatusCodes: [400, 408, 409, 425, 429, 502, 503, 504],\n retry: 2,\n retryDelay: 400,\n },\n})\n\nconst ofetch = new Fetch(rofetch)\n\nexport const createFetch = (logger: Logger) => {\n return ofetch.extend({\n onRequest: (context) => {\n logger.debug(`[fetch -->] ${context.options.baseURL}${context.request}`)\n },\n onResponse: (context) => {\n logger.debug(`[fetch <--] ${context.request} ${context.response.status}`)\n },\n onResponseError: (context) => {\n if (context.response.status === 404) {\n throw new NotFoundError()\n }\n throw context.error\n },\n ignoreResponseError: false,\n })\n}\n\nexport { Fetch } from './ofetch'\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAwC;AAExC,mBAA8B;AA8B9B,IAAAA,iBAAsB;AA5BtB,MAAM,cAAU,cAAAC,aAAE;AAAA,EAChB,UAAU;AAAA,IACR,kBAAkB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,IACzD,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AACF,CAAC;AAED,MAAM,SAAS,IAAI,oBAAM,OAAO;AAEzB,MAAM,cAAc,CAAC,WAAmB;AAC7C,SAAO,OAAO,OAAO;AAAA,IACnB,WAAW,CAAC,YAAY;AACtB,aAAO,MAAM,eAAe,QAAQ,QAAQ,OAAO,GAAG,QAAQ,OAAO,EAAE;AAAA,IACzE;AAAA,IACA,YAAY,CAAC,YAAY;AACvB,aAAO,MAAM,eAAe,QAAQ,OAAO,IAAI,QAAQ,SAAS,MAAM,EAAE;AAAA,IAC1E;AAAA,IACA,iBAAiB,CAAC,YAAY;AAC5B,UAAI,QAAQ,SAAS,WAAW,KAAK;AACnC,cAAM,IAAI,2BAAc;AAAA,MAC1B;AACA,YAAM,QAAQ;AAAA,IAChB;AAAA,IACA,qBAAqB;AAAA,EACvB,CAAC;AACH;","names":["import_ofetch","c"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/infra/support/fetch/ofetch.ts"],"sourcesContent":["import { $Fetch, createFetch, FetchOptions, ResponseType } from 'ofetch'\nimport { NotFoundError } from './error'\n\nexport const rofetch = createFetch({\n defaults: {\n retryStatusCodes: [400, 408, 409, 425, 429, 500, 502, 503, 504],\n retry: 3,\n retryDelay: 800,\n },\n}).create({\n onResponseError({ request, response, options }) {\n if (response.status === 404) {\n throw new NotFoundError()\n }\n },\n onRequestError({ request, error }) {},\n})\n\nexport type ExtendFetchOptions<R extends ResponseType = ResponseType, T = any> = {\n form?: Record<string, any>\n} & FetchOptions<R, T>\n\nexport class Fetch {\n private options?: FetchOptions\n private ofetchInstance: $Fetch\n constructor(fetchInstance?: $Fetch, options?: FetchOptions) {\n this.options = options\n this.ofetchInstance = fetchInstance ?? rofetch\n }\n async fetch<T, R extends ResponseType>(request: string, options?: ExtendFetchOptions<R, T>) {\n let opt = {\n ...options,\n ...this.options\n } as ExtendFetchOptions<R, T>\n if(opt.form) {\n const form = new FormData()\n let f = opt.form\n Object.entries(form).forEach(([key, value]) => form.append(key, value))\n opt = {\n ...opt,\n headers: {\n ...opt.headers,\n 'Content-Type': 'multipart/form-data'\n },\n body: f\n }\n }\n\n const res = await this.ofetchInstance<T, R>(request, opt)\n return res\n }\n get<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch<T, R>(request, { ...options, method: 'GET' })\n }\n post<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch<T, R>(request, { ...options, method: 'POST' })\n }\n put<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch(request, { ...options, method: 'PUT' })\n }\n patch<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch(request, { ...options, method: 'PATCH' })\n }\n delete<T = any, R extends ResponseType = 'json'>(\n request: string,\n options?: ExtendFetchOptions<R>\n ) {\n return this.fetch(request, { ...options, method: 'DELETE' })\n }\n head(request: string, options?: FetchOptions) {\n return this.fetch(request, { ...options, method: 'HEAD' })\n }\n\n extend(options: FetchOptions) {\n return new Fetch(this.ofetchInstance, { ...this.options, ...options })\n }\n baseUrl(url: string) {\n return this.extend({ baseURL: url })\n }\n}\n\nexport { createFetch } from 'ofetch'\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAgE;AAChE,mBAA8B;AA4F9B,IAAAA,iBAA4B;AA1FrB,MAAM,cAAU,2BAAY;AAAA,EACjC,UAAU;AAAA,IACR,kBAAkB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,IAC9D,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AACF,CAAC,EAAE,OAAO;AAAA,EACR,gBAAgB,EAAE,SAAS,UAAU,QAAQ,GAAG;AAC9C,QAAI,SAAS,WAAW,KAAK;AAC3B,YAAM,IAAI,2BAAc;AAAA,IAC1B;AAAA,EACF;AAAA,EACA,eAAe,EAAE,SAAS,MAAM,GAAG;AAAA,EAAC;AACtC,CAAC;AAMM,MAAM,MAAM;AAAA,EAGjB,YAAY,eAAwB,SAAwB;AAF5D,wBAAQ;AACR,wBAAQ;AAEN,SAAK,UAAU;AACf,SAAK,iBAAiB,wCAAiB;AAAA,EACzC;AAAA,EACO,MAAiC,SAAiB,SAAoC;AAAA;AAC3F,UAAI,MAAM,kCACL,UACA,KAAK;AAEV,UAAG,IAAI,MAAM;AACX,cAAM,OAAO,IAAI,SAAS;AAC1B,YAAI,IAAI,IAAI;AACZ,eAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,KAAK,CAAC;AACtE,cAAM,iCACD,MADC;AAAA,UAEJ,SAAS,iCACJ,IAAI,UADA;AAAA,YAEP,gBAAgB;AAAA,UAClB;AAAA,UACA,MAAM;AAAA,QACR;AAAA,MACF;AAEA,YAAM,MAAM,MAAM,KAAK,eAAqB,SAAS,GAAG;AACxD,aAAO;AAAA,IACT;AAAA;AAAA,EACA,IACE,SACA,SACA;AACA,WAAO,KAAK,MAAY,SAAS,iCAAK,UAAL,EAAc,QAAQ,MAAM,EAAC;AAAA,EAChE;AAAA,EACA,KACE,SACA,SACA;AACA,WAAO,KAAK,MAAY,SAAS,iCAAK,UAAL,EAAc,QAAQ,OAAO,EAAC;AAAA,EACjE;AAAA,EACA,IACE,SACA,SACA;AACA,WAAO,KAAK,MAAM,SAAS,iCAAK,UAAL,EAAc,QAAQ,MAAM,EAAC;AAAA,EAC1D;AAAA,EACA,MACE,SACA,SACA;AACA,WAAO,KAAK,MAAM,SAAS,iCAAK,UAAL,EAAc,QAAQ,QAAQ,EAAC;AAAA,EAC5D;AAAA,EACA,OACE,SACA,SACA;AACA,WAAO,KAAK,MAAM,SAAS,iCAAK,UAAL,EAAc,QAAQ,SAAS,EAAC;AAAA,EAC7D;AAAA,EACA,KAAK,SAAiB,SAAwB;AAC5C,WAAO,KAAK,MAAM,SAAS,iCAAK,UAAL,EAAc,QAAQ,OAAO,EAAC;AAAA,EAC3D;AAAA,EAEA,OAAO,SAAuB;AAC5B,WAAO,IAAI,MAAM,KAAK,gBAAgB,kCAAK,KAAK,UAAY,QAAS;AAAA,EACvE;AAAA,EACA,QAAQ,KAAa;AACnB,WAAO,KAAK,OAAO,EAAE,SAAS,IAAI,CAAC;AAAA,EACrC;AACF;","names":["import_ofetch"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/infra/support/render/index.ts"],"sourcesContent":["import {html2imgBuffer, RenderOptions, url2imgBuffer} from \"./puppeteer\";\nimport {Browser, Puppeteer} from \"puppeteer-core\";\nimport {Fetch} from \"@/infra/support/fetch\";\nexport {RenderOptions as PuppeteerOptions}\nexport interface ImageRender {\n html2img: (html: string, opt: RenderOptions) => Promise<Buffer>\n url2img: (url: string, opt: RenderOptions) => Promise<Buffer>\n}\n\nexport type RenderConfig = {\n mode: 'cf' | 'puppeteer'\n puppeteerURL?: string\n defaultWaitTimeout?: number\n waitTimeout?: number\n cfAccountId?: string,\n cfAPIKey?: string,\n}\n\nexport class CFBrowserRendering implements ImageRender {\n f: Fetch\n constructor(private accountId: string, private cfAPIKey: string) {\n this.f = new Fetch()\n .baseUrl(`https://api.cloudflare.com/client/v4/accounts/${accountId}`)\n .extend({\n headers: {\n Authorization: `Bearer ${cfAPIKey}`\n },\n })\n }\n private post(body) {\n return this.f.post('/browser-rendering/screenshot', {\n responseType: 'arrayBuffer',\n body: {\n ...body,\n \"viewport\": {\n \"width\": 3840,\n \"height\": 2160,\n \"deviceScaleFactor\": 2,\n },\n \"gotoOptions\": {\n \"waitUntil\": \"networkidle0\",\n \"timeout\": 30000\n },\n }\n })\n }\n\n\n\n async html2img (html: string, opt: RenderOptions) {\n const buf = await this.post({html: html, ...opt})\n return Buffer.from(buf)\n }\n async url2img (url: string, opt: RenderOptions) {\n const buf = await this.post({url: url, ...opt})\n return Buffer.from(buf)\n }\n}\n\nexport class PuppeteerRendering implements ImageRender {\n constructor(private browserGetter: () => Promise<Browser>) {\n }\n async html2img (html: string, opt: RenderOptions) {\n return html2imgBuffer(this.browserGetter, html, opt)\n }\n async url2img (html: string, opt: RenderOptions) {\n return url2imgBuffer(this.browserGetter, html, opt)\n }\n}\n\n\nexport const RemoteBrowserGetter = (addr: string) => {\n const p = new Puppeteer()\n let opt = {}\n if(addr.startsWith('ws')) {\n opt = { browserWSEndpoint: addr }\n }else if(addr.startsWith('http')) {\n opt = { browserURL: addr }\n }\n return () => p.connect(opt)\n}\n\n\nexport const getImageRender = (cfg: RenderConfig & {browserGetter?: () => Promise<Browser>}) => {\n if(cfg.mode === 'cf') {\n return new CFBrowserRendering(cfg.cfAccountId, cfg.cfAPIKey)\n }\n if(cfg.puppeteerURL) {\n return new PuppeteerRendering(RemoteBrowserGetter(cfg.puppeteerURL))\n }\n if(cfg.browserGetter) {\n return new PuppeteerRendering(cfg.browserGetter)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAA2D;AAC3D,4BAAiC;AACjC,mBAAoB;AAgBb,MAAM,mBAA0C;AAAA,EAErD,YAAoB,WAA2B,UAAkB;AAA7C;AAA2B;AAD/C;AAEE,SAAK,IAAI,IAAI,mBAAM,EAChB,QAAQ,iDAAiD,SAAS,EAAE,EACpE,OAAO;AAAA,MACN,SAAS;AAAA,QACP,eAAe,UAAU,QAAQ;AAAA,MACnC;AAAA,IACF,CAAC;AAAA,EACL;AAAA,EACQ,KAAK,MAAM;AACjB,WAAO,KAAK,EAAE,KAAK,iCAAiC;AAAA,MAClD,cAAc;AAAA,MACd,MAAM,iCACD,OADC;AAAA,QAEJ,YAAY;AAAA,UACV,SAAS;AAAA,UACT,UAAU;AAAA,UACV,qBAAqB;AAAA,QACvB;AAAA,QACA,eAAe;AAAA,UACb,aAAa;AAAA,UACb,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAIM,SAAU,MAAc,KAAoB;AAAA;AAChD,YAAM,MAAM,MAAM,KAAK,KAAK,iBAAC,QAAe,IAAI;AAChD,aAAO,OAAO,KAAK,GAAG;AAAA,IACxB;AAAA;AAAA,EACM,QAAS,KAAa,KAAoB;AAAA;AAC9C,YAAM,MAAM,MAAM,KAAK,KAAK,iBAAC,OAAa,IAAI;AAC9C,aAAO,OAAO,KAAK,GAAG;AAAA,IACxB;AAAA;AACF;AAEO,MAAM,mBAA0C;AAAA,EACrD,YAAoB,eAAuC;AAAvC;AAAA,EACpB;AAAA,EACM,SAAU,MAAc,KAAoB;AAAA;AAChD,iBAAO,iCAAe,KAAK,eAAe,MAAM,GAAG;AAAA,IACrD;AAAA;AAAA,EACM,QAAS,MAAc,KAAoB;AAAA;AAC/C,iBAAO,gCAAc,KAAK,eAAe,MAAM,GAAG;AAAA,IACpD;AAAA;AACF;AAGO,MAAM,sBAAsB,CAAC,SAAiB;AACnD,QAAM,IAAI,IAAI,gCAAU;AACxB,MAAI,MAAM,CAAC;AACX,MAAG,KAAK,WAAW,IAAI,GAAG;AACxB,UAAM,EAAE,mBAAmB,KAAK;AAAA,EAClC,WAAS,KAAK,WAAW,MAAM,GAAG;AAChC,UAAM,EAAE,YAAY,KAAK;AAAA,EAC3B;AACA,SAAO,MAAM,EAAE,QAAQ,GAAG;AAC5B;AAGO,MAAM,iBAAiB,CAAC,QAAiE;AAC9F,MAAG,IAAI,SAAS,MAAM;AACpB,WAAO,IAAI,mBAAmB,IAAI,aAAa,IAAI,QAAQ;AAAA,EAC7D;AACA,MAAG,IAAI,cAAc;AACnB,WAAO,IAAI,mBAAmB,oBAAoB,IAAI,YAAY,CAAC;AAAA,EACrE;AACA,MAAG,IAAI,eAAe;AACpB,WAAO,IAAI,mBAAmB,IAAI,aAAa;AAAA,EACjD;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/infra/support/render/puppeteer.ts"],"sourcesContent":["import type {Browser, Page, ScreenshotOptions, Viewport} from 'puppeteer-core';\n\n/**\n * Extends Puppeteer's ScreenshotOptions to include an optional viewport setting\n * and a selector for element-specific screenshots.\n */\nexport interface RenderOptions extends ScreenshotOptions {\n /**\n * Sets the viewport of the page.\n */\n viewport?: Viewport;\n /**\n * A CSS selector for an element to screenshot. If provided, the output\n * will be a screenshot of just this element.\n */\n selector?: string;\n /**\n * The maximum time in milliseconds to wait for the selector to appear.\n * If the element is not found within this time, an error will be thrown.\n * Defaults to Puppeteer's default (usually 30000ms).\n */\n timeout?: number;\n}\n\n/**\n * Core rendering function that handles the common logic for taking a screenshot.\n * It's designed to be called by the public-facing wrapper functions.\n * @private\n */\nasync function _renderPageToBuffer(\n browser: Browser | (() => Promise<Browser>),\n options: RenderOptions | undefined,\n loadContent: (page: Page) => Promise<any>,\n defaultScreenshotOptions: ScreenshotOptions,\n defaultViewport: Viewport,\n errorContext?: string,\n): Promise<Buffer> {\n let page: Page | undefined;\n try {\n let b : Browser\n if(typeof browser === \"function\") {\n b = await browser()\n }\n page = await b.newPage();\n\n const viewport = options?.viewport ?? defaultViewport;\n await page.setViewport(viewport);\n\n // The content loading strategy is passed in as a callback.\n await loadContent(page);\n\n const {viewport: _, selector, timeout, ...screenshotOptions} = options || {};\n\n if (selector) {\n const element = await page.waitForSelector(selector, {timeout});\n if (!element) {\n const timeoutMsg = `within the ${timeout || 'default'}ms timeout.`;\n const contextMsg = errorContext ? ` on ${errorContext}` : '';\n throw new Error(`Could not find element with selector: \"${selector}\"${contextMsg} ${timeoutMsg}`);\n }\n return Buffer.from(await element.screenshot(screenshotOptions));\n }\n\n return Buffer.from(await page.screenshot({\n ...defaultScreenshotOptions,\n ...screenshotOptions,\n }))\n } finally {\n if (page) {\n await page.close();\n }\n }\n}\n\n/**\n * Renders an HTML string into an image buffer using a provided Puppeteer browser instance.\n *\n * @param browser The active Puppeteer Browser instance.\n * @param html The HTML content to render.\n * @param options Configuration for the rendering process.\n * @returns A Promise that resolves to a Buffer containing the screenshot image.\n */\nexport async function html2imgBuffer(\n browser: Browser | (() => Promise<Browser>),\n html: string,\n options?: RenderOptions,\n): Promise<Buffer> {\n return _renderPageToBuffer(\n browser,\n options,\n (page) => page.setContent(html, {waitUntil: 'networkidle0'}),\n {fullPage: true},\n {width: 3840, height: 2160, deviceScaleFactor: 2},\n );\n}\n\n/**\n * Captures a screenshot of a given URL and returns it as an image buffer.\n *\n * @param browser The active Puppeteer Browser instance.\n * @param url The URL of the webpage to capture.\n * @param options Configuration for the rendering process.\n * @returns A Promise that resolves to a Buffer containing the screenshot image.\n */\nexport async function url2imgBuffer(\n browser: Browser | (() => Promise<Browser>),\n url: string,\n options?: RenderOptions,\n): Promise<Buffer> {\n return _renderPageToBuffer(\n browser,\n options,\n (page) => page.goto(url, {waitUntil: 'networkidle0'}),\n {fullPage: false},\n {width: 3840, height: 2160, deviceScaleFactor: 2},\n `page: ${url}`,\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BA,SAAe,oBACb,SACA,SACA,aACA,0BACA,iBACA,cACiB;AAAA;AApCnB;AAqCE,QAAI;AACJ,QAAI;AACF,UAAI;AACJ,UAAG,OAAO,YAAY,YAAY;AAChC,YAAI,MAAM,QAAQ;AAAA,MACpB;AACA,aAAO,MAAM,EAAE,QAAQ;AAEvB,YAAM,YAAW,wCAAS,aAAT,YAAqB;AACtC,YAAM,KAAK,YAAY,QAAQ;AAG/B,YAAM,YAAY,IAAI;AAEtB,YAA+D,gBAAW,CAAC,GAApE,YAAU,GAAG,UAAU,QAnDlC,IAmDmE,IAArB,8BAAqB,IAArB,CAAnC,YAAa,YAAU;AAE9B,UAAI,UAAU;AACZ,cAAM,UAAU,MAAM,KAAK,gBAAgB,UAAU,EAAC,QAAO,CAAC;AAC9D,YAAI,CAAC,SAAS;AACZ,gBAAM,aAAa,cAAc,WAAW,SAAS;AACrD,gBAAM,aAAa,eAAe,OAAO,YAAY,KAAK;AAC1D,gBAAM,IAAI,MAAM,0CAA0C,QAAQ,IAAI,UAAU,IAAI,UAAU,EAAE;AAAA,QAClG;AACA,eAAO,OAAO,KAAK,MAAM,QAAQ,WAAW,iBAAiB,CAAC;AAAA,MAChE;AAEA,aAAO,OAAO,KAAK,MAAM,KAAK,WAAW,kCACpC,2BACA,kBACJ,CAAC;AAAA,IACJ,UAAE;AACA,UAAI,MAAM;AACR,cAAM,KAAK,MAAM;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA;AAUA,SAAsB,eACpB,SACA,MACA,SACiB;AAAA;AACjB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,CAAC,SAAS,KAAK,WAAW,MAAM,EAAC,WAAW,eAAc,CAAC;AAAA,MAC3D,EAAC,UAAU,KAAI;AAAA,MACf,EAAC,OAAO,MAAM,QAAQ,MAAM,mBAAmB,EAAC;AAAA,IAClD;AAAA,EACF;AAAA;AAUA,SAAsB,cACpB,SACA,KACA,SACiB;AAAA;AACjB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,CAAC,SAAS,KAAK,KAAK,KAAK,EAAC,WAAW,eAAc,CAAC;AAAA,MACpD,EAAC,UAAU,MAAK;AAAA,MAChB,EAAC,OAAO,MAAM,QAAQ,MAAM,mBAAmB,EAAC;AAAA,MAChD,SAAS,GAAG;AAAA,IACd;AAAA,EACF;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/interface/bot.ts"],"sourcesContent":["import {RelateChannelInfo, UserPreference} from '@/interface/db'\n\ntype ChannelInfo = any\n\n// now it's only for initiative message\nexport interface BotService<T extends ChannelInfo, S extends Session<T>> {\n getSessionByChannelInfo(channelInfo: T): S\n}\n\nexport interface Session<T extends any = any> {\n u: RelateChannelInfo<T>\n g: RelateChannelInfo<T>\n mentions: (RelateChannelInfo<T> | undefined)[]\n getSessionInfo(): T\n sendImgBuffer(content: any, mimeType?: string): Promise<void>\n sendImgByUrl(url: string): Promise<void>\n sendAudioByUrl(url: string): Promise<void>\n send(msg: string): Promise<void>\n sendQueued(msg: string): Promise<void>\n sendQuote(msg: string): Promise<void>\n text(path: string, args?): string\n prompt(timeout?: number): Promise<string | undefined>\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/interface/cmd/builder.ts"],"sourcesContent":["import { CmdAlias, CmdContext, CmdExecutor, CmdOption } from './type'\nimport { BizError } from '@/infra/errors'\nimport { OptionType, Extend } from './type'\n\nexport class CommandBuilder<CHANNEL, OPT extends {} = {}> {\n private name: string\n private description: string\n private options: CmdOption[] = []\n private aliases: CmdAlias[] = []\n\n constructor() {}\n static create(name: string) {\n return new CommandBuilder().setName(name)\n }\n\n addOption<N extends string, D extends string>(name: N, description: D) {\n this.options.push({\n name: name,\n description: description,\n type: 'string',\n })\n return this as CommandBuilder<CHANNEL, Extend<OPT, N, OptionType<D>>>\n }\n\n addAlias(alias: string, option?: object) {\n this.aliases.push({ alias, option })\n return this\n }\n\n setName<T extends string>(name: T) {\n this.name = name\n return this\n }\n setDescription(description: string) {\n this.description = description\n return this\n }\n setExecutor(executor: CmdExecutor<CHANNEL, OPT>) {\n const that = this\n const errorHandler = (executor: CmdExecutor<CHANNEL, OPT>) => {\n return async (c: CmdContext<CHANNEL, OPT>) => {\n try {\n await executor(c)\n } catch (e: any) {\n if (e instanceof BizError) {\n await c.session.send(c.session.text(e.id, e.params))\n } else {\n c.logger.error(\n `unexpectError occur during cmd 「${that.name}」executing`,\n e\n )\n c.session.send(\n 'An unexpected error occurs, reporting it may help to fix it.'\n )\n }\n }\n }\n }\n\n return {\n name: this.name,\n description: this.description,\n aliases: this.aliases,\n options: this.options,\n callback: errorHandler(executor),\n children: [],\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAAyB;AAGlB,MAAM,eAA6C;AAAA,EAMxD,cAAc;AALd,wBAAQ;AACR,wBAAQ;AACR,wBAAQ,WAAuB,CAAC;AAChC,wBAAQ,WAAsB,CAAC;AAAA,EAEhB;AAAA,EACf,OAAO,OAAO,MAAc;AAC1B,WAAO,IAAI,eAAe,EAAE,QAAQ,IAAI;AAAA,EAC1C;AAAA,EAEA,UAA8C,MAAS,aAAgB;AACrE,SAAK,QAAQ,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,OAAe,QAAiB;AACvC,SAAK,QAAQ,KAAK,EAAE,OAAO,OAAO,CAAC;AACnC,WAAO;AAAA,EACT;AAAA,EAEA,QAA0B,MAAS;AACjC,SAAK,OAAO;AACZ,WAAO;AAAA,EACT;AAAA,EACA,eAAe,aAAqB;AAClC,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EACA,YAAY,UAAqC;AAC/C,UAAM,OAAO;AACb,UAAM,eAAe,CAACA,cAAwC;AAC5D,aAAO,CAAO,MAAgC;AAC5C,YAAI;AACF,gBAAMA,UAAS,CAAC;AAAA,QAClB,SAAS,GAAQ;AACf,cAAI,aAAa,wBAAU;AACzB,kBAAM,EAAE,QAAQ,KAAK,EAAE,QAAQ,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;AAAA,UACrD,OAAO;AACL,cAAE,OAAO;AAAA,cACP,wCAAmC,KAAK,IAAI;AAAA,cAC5C;AAAA,YACF;AACA,cAAE,QAAQ;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,SAAS,KAAK;AAAA,MACd,SAAS,KAAK;AAAA,MACd,UAAU,aAAa,QAAQ;AAAA,MAC/B,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AACF;","names":["executor"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/interface/cmd/type.ts"],"sourcesContent":["// import { ImgRender } from './render'\n// import { Session } from './bot'\n\nimport { DB } from '@/interface/db'\nimport { Config } from '@/config'\nimport {Logger, Session} from \"@/interface\";\nimport {Services} from \"@/service\";\n\nexport interface CmdContext<CHANNEL, OPT> {\n logger: Logger\n config: Config\n session: Session\n options: OPT\n services: Services<CHANNEL>\n input: string\n}\n\ntype SessionContext<OPT> = {\n session: any\n user: any\n input: {\n options: OPT\n text?: string\n }\n}\n\n// di framework\n\nexport type CmdExecutor<CHANNEL, OPT extends object = object> = (\n c: CmdContext<CHANNEL, OPT>\n) => Promise<void>\n\nexport interface CmdOption {\n type: 'boolean' | 'number' | 'string'\n name: string\n short?: string\n description?: string\n required?: boolean\n}\n\nexport type CmdAlias = {\n alias: string\n option?: object\n}\n\nexport interface Command<CHANNEL> {\n name: string\n description: string\n aliases: CmdAlias[]\n options: CmdOption[]\n callback: CmdExecutor<CHANNEL>\n children: Command<CHANNEL>[]\n}\n\nexport type Extend<BASE extends {}, N extends string, D> = {\n [P in N | keyof BASE]?: (P extends keyof BASE ? BASE[P] : unknown) &\n (P extends N ? D : unknown)\n}\n\ntype ExtractType<T extends string> = T extends 'string'\n ? string\n : T extends 'boolean'\n ? boolean\n : T extends 'number'\n ? number\n : any\n\ntype Nullable<T> = T | null\n\ntype ExtractNullSafeType<T extends string> = T extends `${infer Type}?`\n ? Nullable<ExtractType<Type>>\n : ExtractType<T>\n// paramName:typename?\n// eg: online:boolean?\nexport type OptionType<T extends string> = T extends `${infer L}:${infer R}`\n ? ExtractNullSafeType<R>\n : unknown\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/interface/logger.ts"],"sourcesContent":["export interface Logger {\n info(msg: string, ...args): void\n warn(msg: string, ...args): void\n error(msg: string, ...args): void\n // trace(msg: string): void;\n debug(msg: string, ...args): void\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/schedules/index.ts"],"sourcesContent":["import { Config } from '@/config'\nimport { LBScoreMonitor } from '@/schedules/temp'\n\n\nexport const getScheduleTasks = (config: Config) => {\n return [\n {\n name: 'lb-rank-notifier',\n handler: LBScoreMonitor,\n cron: config.tempCron.cron,\n enable: config.tempCron.enable,\n },\n ]\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAA+B;AAGxB,MAAM,mBAAmB,CAAC,WAAmB;AAClD,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM,OAAO,SAAS;AAAA,MACtB,QAAQ,OAAO,SAAS;AAAA,IAC1B;AAAA,EACF;AACF;","names":[]}
@@ -1,16 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __copyProps = (to, from, except, desc) => {
6
- if (from && typeof from === "object" || typeof from === "function") {
7
- for (let key of __getOwnPropNames(from))
8
- if (!__hasOwnProp.call(to, key) && key !== except)
9
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
- }
11
- return to;
12
- };
13
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
14
- var interface_exports = {};
15
- module.exports = __toCommonJS(interface_exports);
16
- //# sourceMappingURL=interface.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/schedules/interface.ts"],"sourcesContent":["import { Config } from '@/config'\nimport {BotService, DB, Logger, Session} from '@/interface'\nimport {Services} from \"@/service\";\n\nexport type ScheduleTaskCtx<T> = {\n config: Config\n logger: Logger\n services: Services<T>\n botService: BotService<T, Session<T>>\n}\n\nexport type ScheduleTask = {\n name: string\n cron: string\n handler: <T>(c: ScheduleTaskCtx<T>) => Promise<void>\n enable: boolean\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/schedules/temp.ts"],"sourcesContent":["import { ScheduleTaskCtx } from '@/schedules/interface'\n\nexport const LBScoreMonitor = async <T>(c: ScheduleTaskCtx<T>) => {\n const channels = await c.services.db.getSubscriptionsByType('lb-rank')\n if (channels.length <= 0) {\n return\n }\n const [hitbuf, scorebuf] = await Promise.all([\n c.services.render.renderUrl('https://aiobs.ktlab.io/tmp/lb/hitcnt'),\n c.services.render.renderUrl('https://aiobs.ktlab.io/tmp/lb/score'),\n ])\n for (const group of channels) {\n const session = c.botService.getSessionByChannelInfo(group.groupChannel)\n if (!session) {\n continue\n }\n await session.sendImgBuffer(hitbuf, 'image/png')\n await session.sendImgBuffer(scorebuf, 'image/png')\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,iBAAiB,CAAU,MAA0B;AAChE,QAAM,WAAW,MAAM,EAAE,SAAS,GAAG,uBAAuB,SAAS;AACrE,MAAI,SAAS,UAAU,GAAG;AACxB;AAAA,EACF;AACA,QAAM,CAAC,QAAQ,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC3C,EAAE,SAAS,OAAO,UAAU,sCAAsC;AAAA,IAClE,EAAE,SAAS,OAAO,UAAU,qCAAqC;AAAA,EACnE,CAAC;AACD,aAAW,SAAS,UAAU;AAC5B,UAAM,UAAU,EAAE,WAAW,wBAAwB,MAAM,YAAY;AACvE,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AACA,UAAM,QAAQ,cAAc,QAAQ,WAAW;AAC/C,UAAM,QAAQ,cAAc,UAAU,WAAW;AAAA,EACnD;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/service/api/base/aioclient.ts"],"sourcesContent":["import { AioOauthTokenResponse } from '../interfaces/aiosaber'\nimport { Fetch } from '@/infra/support/fetch/ofetch'\nimport { createFetch } from '@/infra/support/fetch'\nimport { Logger } from '@/interface'\n\nexport class AIOSaberClient {\n f: Fetch\n constructor(logger: Logger) {\n this.f = createFetch(logger).baseUrl('https://abs.ktlab.io')\n }\n async getBSOAuthToken(key: string) {\n return this.f.get<AioOauthTokenResponse>(\n `/api/oauth/beatsaver/token/${key}`\n )\n }\n async getBLOAuthToken(key: string) {\n return this.f.get<AioOauthTokenResponse>(\n `/api/oauth/beatleader/token/${key}`\n )\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAA4B;AAGrB,MAAM,eAAe;AAAA,EAE1B,YAAY,QAAgB;AAD5B;AAEE,SAAK,QAAI,0BAAY,MAAM,EAAE,QAAQ,sBAAsB;AAAA,EAC7D;AAAA,EACM,gBAAgB,KAAa;AAAA;AACjC,aAAO,KAAK,EAAE;AAAA,QACZ,8BAA8B,GAAG;AAAA,MACnC;AAAA,IACF;AAAA;AAAA,EACM,gBAAgB,KAAa;AAAA;AACjC,aAAO,KAAK,EAAE;AAAA,QACZ,+BAA+B,GAAG;AAAA,MACpC;AAAA,IACF;AAAA;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/service/api/base/blclient.ts"],"sourcesContent":["import { OAuthTokenInfoResponse, OAuthTokenResponse } from '../interfaces'\nimport { createFetch, Fetch } from '@/infra/support/fetch'\nimport {\n BeadLeaderScoresResponse,\n BeatLeaderPlayerScoreRequest,\n BeatLeaderUser,\n Leaderboard,\n Score,\n} from '../interfaces/beatleader'\nimport { Logger } from '@/interface'\n\ntype ClientOptions = {\n client_id?: string\n client_secret?: string\n logger?: Logger\n}\n\nexport class BeatLeaderClient {\n f: Fetch\n opt?: ClientOptions\n constructor(opt?: ClientOptions) {\n this.f = createFetch(opt?.logger).baseUrl('https://api.beatleader.xyz').extend({\n ignoreResponseError: false,\n })\n }\n async getPlayerScore(req: BeatLeaderPlayerScoreRequest) {\n const res = await this.f.get<Leaderboard>(\n `/score/${req.leaderboardContext}/${req.playerID}/${req.hash}/${req.diff}/${req.mode}`\n )\n return res\n }\n\n async getTokenInfo(accessToken: string) {\n return this.f.get<OAuthTokenInfoResponse>(`/oauth2/identity`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n }\n\n async refreshOAuthToken(refreshToken: string) {\n return this.f.post<OAuthTokenResponse>(\n 'https://beatsaver.com/api/oauth2/token',\n {\n form: {\n client_id: this.opt.client_id,\n client_secret: this.opt.client_secret,\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n },\n }\n )\n }\n\n async getPlayerInfo(accountId: string) {\n return this.f.get<BeatLeaderUser>(`/player/${accountId}`)\n }\n\n async getPlayerScores(accountId: string) {\n return this.f.get<BeadLeaderScoresResponse>(\n `/player/${accountId}/scores?count=24&sortBy=pp`\n )\n }\n async getPlayerPinnedScores(accountId: string) {\n return this.f.get<Score[]>(`/player/${accountId}/pinnedScores`)\n }\n\n async getBeatScore(scoreId: string) {\n return this.f.get<Score>(`/score/${scoreId}`)\n }\n\n async getLeaderboard(leaderboardId: string, params?: Record<string, any>) {\n return this.f.get(`/leaderboard/${leaderboardId}`, { query: params })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAmC;AAgB5B,MAAM,iBAAiB;AAAA,EAG5B,YAAY,KAAqB;AAFjC;AACA;AAEE,SAAK,QAAI,0BAAY,2BAAK,MAAM,EAAE,QAAQ,4BAA4B,EAAE,OAAO;AAAA,MAC7E,qBAAqB;AAAA,IACvB,CAAC;AAAA,EACH;AAAA,EACM,eAAe,KAAmC;AAAA;AACtD,YAAM,MAAM,MAAM,KAAK,EAAE;AAAA,QACvB,UAAU,IAAI,kBAAkB,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,MACtF;AACA,aAAO;AAAA,IACT;AAAA;AAAA,EAEM,aAAa,aAAqB;AAAA;AACtC,aAAO,KAAK,EAAE,IAA4B,oBAAoB;AAAA,QAC5D,SAAS;AAAA,UACP,eAAe,UAAU,WAAW;AAAA,QACtC;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA,EAEM,kBAAkB,cAAsB;AAAA;AAC5C,aAAO,KAAK,EAAE;AAAA,QACZ;AAAA,QACA;AAAA,UACE,MAAM;AAAA,YACJ,WAAW,KAAK,IAAI;AAAA,YACpB,eAAe,KAAK,IAAI;AAAA,YACxB,YAAY;AAAA,YACZ,eAAe;AAAA,UACjB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EAEM,cAAc,WAAmB;AAAA;AACrC,aAAO,KAAK,EAAE,IAAoB,WAAW,SAAS,EAAE;AAAA,IAC1D;AAAA;AAAA,EAEM,gBAAgB,WAAmB;AAAA;AACvC,aAAO,KAAK,EAAE;AAAA,QACZ,WAAW,SAAS;AAAA,MACtB;AAAA,IACF;AAAA;AAAA,EACM,sBAAsB,WAAmB;AAAA;AAC7C,aAAO,KAAK,EAAE,IAAa,WAAW,SAAS,eAAe;AAAA,IAChE;AAAA;AAAA,EAEM,aAAa,SAAiB;AAAA;AAClC,aAAO,KAAK,EAAE,IAAW,UAAU,OAAO,EAAE;AAAA,IAC9C;AAAA;AAAA,EAEM,eAAe,eAAuB,QAA8B;AAAA;AACxE,aAAO,KAAK,EAAE,IAAI,gBAAgB,aAAa,IAAI,EAAE,OAAO,OAAO,CAAC;AAAA,IACtE;AAAA;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/service/api/base/bsclient.ts"],"sourcesContent":["import { OAuthTokenInfoResponse, OAuthTokenResponse } from '../interfaces'\nimport { createFetch, Fetch } from '@/infra/support/fetch'\nimport {\n BSMap,\n BSMapLatestResponse,\n BSUserResponse,\n HashReqResponse,\n} from '../interfaces/beatsaver'\nimport { Logger } from '@/interface'\nimport {NotFoundError} from \"@/infra/support/fetch/error\";\n\ntype ClientOptions = {\n logger?: Logger,\n host?: string,\n client_id?: string,\n client_secret?: string\n f?: Fetch\n}\n\nexport class BeatSaverClient {\n f: Fetch\n opt?: ClientOptions\n constructor(opt?: ClientOptions) {\n this.opt = opt\n this.f = opt.f || createFetch(opt.logger)\n .baseUrl(opt.host ?? 'https://api.beatsaver.com')\n .extend({\n ignoreResponseError: false,\n onResponseError: (context) => {\n if (\n context.response.status === 404 ||\n context.response.status === 400\n ) {\n throw new NotFoundError()\n }\n },\n })\n }\n async getBSMapperById(userId: string) {\n return this.f.get<BSUserResponse>(`/users/id/${userId}`)\n }\n\n async getLatestMaps(pageSize: number = 5) {\n return this.f\n .get<BSMapLatestResponse>(`/maps/latest`, {\n query: {\n sort: 'FIRST_PUBLISHED',\n pageSize,\n },\n })\n .then((res) => res.docs)\n }\n\n async searchMapByKeyword(\n key: string,\n params?: Record<string, boolean | number | string>\n ) {\n return this.f\n .get<BSMapLatestResponse>(`/search/text/0`, {\n query: {\n q: key,\n ...params,\n },\n })\n .then((res) => res.docs)\n }\n\n async searchMapById(id: string) {\n return this.f.get<BSMap>(`/maps/id/${id}`)\n }\n async getTokenInfo(ak: string) {\n return this.f.get<OAuthTokenInfoResponse>(`/oauth2/identity`, {\n headers: {\n Authorization: `Bearer ${ak}`,\n },\n })\n }\n\n async getMapsByHashes(hashes: string[]) {\n return this.f.get<HashReqResponse>(`/maps/hash/${hashes.join(',')}`)\n }\n\n async refreshOAuthToken(rk: string) {\n return this.f.post<OAuthTokenResponse>(\n 'https://beatsaver.com/api/oauth2/token',\n {\n form: {\n client_id: this.opt.client_id,\n client_secret: this.opt.client_secret,\n grant_type: 'refresh_token',\n refresh_token: rk,\n },\n }\n )\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAmC;AAQnC,mBAA4B;AAUrB,MAAM,gBAAgB;AAAA,EAG3B,YAAY,KAAqB;AAFjC;AACA;AArBF;AAuBI,SAAK,MAAM;AACX,SAAK,IAAI,IAAI,SAAK,0BAAY,IAAI,MAAM,EACrC,SAAQ,SAAI,SAAJ,YAAY,2BAA2B,EAC/C,OAAO;AAAA,MACN,qBAAqB;AAAA,MACrB,iBAAiB,CAAC,YAAY;AAC5B,YACE,QAAQ,SAAS,WAAW,OAC5B,QAAQ,SAAS,WAAW,KAC5B;AACA,gBAAM,IAAI,2BAAc;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACL;AAAA,EACM,gBAAgB,QAAgB;AAAA;AACpC,aAAO,KAAK,EAAE,IAAoB,aAAa,MAAM,EAAE;AAAA,IACzD;AAAA;AAAA,EAEM,cAAc,WAAmB,GAAG;AAAA;AACxC,aAAO,KAAK,EACT,IAAyB,gBAAgB;AAAA,QACxC,OAAO;AAAA,UACL,MAAM;AAAA,UACN;AAAA,QACF;AAAA,MACF,CAAC,EACA,KAAK,CAAC,QAAQ,IAAI,IAAI;AAAA,IAC3B;AAAA;AAAA,EAEM,mBACJ,KACA,QACA;AAAA;AACA,aAAO,KAAK,EACT,IAAyB,kBAAkB;AAAA,QAC1C,OAAO;AAAA,UACL,GAAG;AAAA,WACA;AAAA,MAEP,CAAC,EACA,KAAK,CAAC,QAAQ,IAAI,IAAI;AAAA,IAC3B;AAAA;AAAA,EAEM,cAAc,IAAY;AAAA;AAC9B,aAAO,KAAK,EAAE,IAAW,YAAY,EAAE,EAAE;AAAA,IAC3C;AAAA;AAAA,EACM,aAAa,IAAY;AAAA;AAC7B,aAAO,KAAK,EAAE,IAA4B,oBAAoB;AAAA,QAC5D,SAAS;AAAA,UACP,eAAe,UAAU,EAAE;AAAA,QAC7B;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA,EAEM,gBAAgB,QAAkB;AAAA;AACtC,aAAO,KAAK,EAAE,IAAqB,cAAc,OAAO,KAAK,GAAG,CAAC,EAAE;AAAA,IACrE;AAAA;AAAA,EAEM,kBAAkB,IAAY;AAAA;AAClC,aAAO,KAAK,EAAE;AAAA,QACZ;AAAA,QACA;AAAA,UACE,MAAM;AAAA,YACJ,WAAW,KAAK,IAAI;AAAA,YACpB,eAAe,KAAK,IAAI;AAAA,YACxB,YAAY;AAAA,YACZ,eAAe;AAAA,UACjB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/service/api/base/index.ts"],"sourcesContent":["export * from './ssclient'\nexport * from './blclient'\nexport * from './aioclient'\nexport * from './bsclient'\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;AAAA,yBAAc,uBAAd;AACA,yBAAc,uBADd;AAEA,yBAAc,wBAFd;AAGA,yBAAc,uBAHd;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/service/api/base/ssclient.ts"],"sourcesContent":["import { createFetch, Fetch } from '@/infra/support/fetch'\nimport {\n ScoreSaberUser,\n ScoreSaberUserResponse,\n} from '../interfaces/scoresaber'\nimport { ScoresaberLeaderboardResp } from '../interfaces/scoresaber/leaderboard'\nimport { Logger } from '@/interface'\nimport { NotFoundError } from '@/infra/support/fetch/error'\n\nexport class ScoreSaberClient {\n f: Fetch\n constructor(logger: Logger) {\n this.f = createFetch(logger).extend({\n baseURL: 'https://scoresaber.com',\n ignoreResponseError: false,\n onResponseError: (context) => {\n if (\n context.response.status === 500 ||\n context.response.status === 404\n ) {\n throw new NotFoundError()\n }\n },\n })\n }\n async getScoreUserById(userId: string) {\n return this.f.get<ScoreSaberUser>(`/api/player/${userId}/full`)\n }\n\n async getScoreItemsById(userId: string, page: number, pageSize: number = 8) {\n return this.f.get<ScoreSaberUserResponse>(`/api/player/${userId}/scores`, {\n query: {\n sort: 'top',\n page: page,\n limit: pageSize,\n },\n })\n }\n async getScoreItemsByMapId(\n mapId: string,\n diff: string,\n mode: string,\n page: number,\n pageSize: number = 8\n ): Promise<ScoresaberLeaderboardResp> {\n const id = convertToLeaderboardId(mapId, diff, mode)\n return this.f.get(`/api/leaderboard/by-id/${id}/scores`, {\n query: {\n page: page,\n limit: pageSize,\n },\n })\n }\n}\n\nconst convertToLeaderboardId = (mapid: string, diff: string, mode: string) => {\n return mapid\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAmC;AAOnC,mBAA8B;AAEvB,MAAM,iBAAiB;AAAA,EAE5B,YAAY,QAAgB;AAD5B;AAEE,SAAK,QAAI,0BAAY,MAAM,EAAE,OAAO;AAAA,MAClC,SAAS;AAAA,MACT,qBAAqB;AAAA,MACrB,iBAAiB,CAAC,YAAY;AAC5B,YACE,QAAQ,SAAS,WAAW,OAC5B,QAAQ,SAAS,WAAW,KAC5B;AACA,gBAAM,IAAI,2BAAc;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACM,iBAAiB,QAAgB;AAAA;AACrC,aAAO,KAAK,EAAE,IAAoB,eAAe,MAAM,OAAO;AAAA,IAChE;AAAA;AAAA,EAEM,kBAAkB,QAAgB,MAAc,WAAmB,GAAG;AAAA;AAC1E,aAAO,KAAK,EAAE,IAA4B,eAAe,MAAM,WAAW;AAAA,QACxE,OAAO;AAAA,UACL,MAAM;AAAA,UACN;AAAA,UACA,OAAO;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA,EACM,qBACJ,OACA,MACA,MACA,MACA,WAAmB,GACiB;AAAA;AACpC,YAAM,KAAK,uBAAuB,OAAO,MAAM,IAAI;AACnD,aAAO,KAAK,EAAE,IAAI,0BAA0B,EAAE,WAAW;AAAA,QACvD,OAAO;AAAA,UACL;AAAA,UACA,OAAO;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AACF;AAEA,MAAM,yBAAyB,CAAC,OAAe,MAAc,SAAiB;AAC5E,SAAO;AACT;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/service/api/index.ts"],"sourcesContent":["import {AIOSaberClient, BeatLeaderClient, BeatSaverClient, ScoreSaberClient} from \"./base\";\nimport {Config} from \"@/config\";\nimport {Logger} from \"@/interface\";\nimport {BLIDNotFoundError, MapIdNotFoundError, SSIDNotFoundError} from \"@/infra/errors\";\nimport {BSMap, HashResponse} from \"@/service/api/interfaces/beatsaver\";\nimport {ScoreSaberItem} from \"@/service/api/interfaces/scoresaber\";\nimport {Leaderboard} from \"@/service/api/interfaces/beatleader\";\nimport {NotFoundError} from \"@/infra/support/fetch/error\";\nimport {sortScore} from \"@/service/api/sortScore\";\nimport {decode} from \"@/components/utils/bl/bsorDecoder\";\n\ntype MapDiffOption = {\n difficulty?: string\n mode?: string\n}\n\n\nexport class APIService {\n BeatLeader: BeatLeaderClient\n ScoreSaber: ScoreSaberClient\n BeatSaver: BeatSaverClient\n AIOSaber: AIOSaberClient\n constructor(cfg: Config, logger: Logger) {\n this.BeatSaver = new BeatSaverClient({logger})\n this.BeatLeader = new BeatLeaderClient({logger})\n this.ScoreSaber = new ScoreSaberClient(logger)\n this.AIOSaber = new AIOSaberClient(logger)\n }\n async getBLPlayerScoresWithUserInfo(accountId: string) {\n const [userInfo, playerScores, pinnedScores] = await Promise.all([\n this.BeatLeader.getPlayerInfo(accountId),\n this.BeatLeader.getPlayerScores(accountId),\n this.BeatLeader.getPlayerPinnedScores(accountId),\n ])\n if (!(userInfo && playerScores)) {\n throw new BLIDNotFoundError({ accountId })\n }\n const filteredScores = playerScores.data.filter(\n (item) => !pinnedScores.some((pinned) => pinned.id === item.id)\n )\n const scores = pinnedScores.concat(filteredScores).slice(0, 24)\n return {\n scores: scores,\n userInfo: userInfo,\n }\n }\n async getSSPlayerScoresWithUserInfo(accountId: string) {\n\n }\n async getScoreByPlayerIdAndMapId(\n playerId: string,\n mapId: string,\n option?: MapDiffOption\n ): Promise<Leaderboard> {\n const map = await this.BeatSaver.searchMapById(mapId)\n if (!map) {\n throw new MapIdNotFoundError()\n }\n const hash = map.versions[0].hash\n let reqs = map.versions[0].diffs.map((it) => ({\n diff: it.difficulty,\n mode: it.characteristic,\n hash: hash,\n playerID: playerId,\n leaderboardContext: 'general',\n }))\n if (option && option.difficulty) {\n reqs = reqs.filter((item) => item.diff == option.difficulty)\n }\n if (option && option.mode) {\n reqs = reqs.filter((item) => item.mode == option.mode)\n }\n const res = await Promise.allSettled(reqs.map(\n (it) => this.BeatLeader.getPlayerScore(it)))\n const scores = res\n .filter((item) => item.status === 'fulfilled')\n .map(<T>(it: PromiseFulfilledResult<T>) => it.value)\n if (scores.length < 1) {\n throw new NotFoundError()\n }\n scores.sort(sortScore)\n return scores[0]\n }\n\n async getAroundScoreAndRegionScoreByRankAndPage(\n leaderboardId: string,\n rank: number,\n regionCode: string\n ) {\n const page = Math.ceil(rank / 10)\n const rest = rank % 10\n let startIndex = 0\n if (rest > 7) {\n startIndex = 2\n }\n const [regionScore, aroundScore] = await Promise.all([\n this.BeatLeader.getLeaderboard(leaderboardId, {\n leaderboardContext: 'general',\n page: 1,\n sortBy: 'rank',\n order: 'desc',\n countries: regionCode,\n }),\n this.BeatLeader.getLeaderboard(leaderboardId, {\n leaderboardContext: 'general',\n page: page,\n sortBy: 'rank',\n order: 'desc',\n }),\n ])\n const difficulties = regionScore.song.difficulties\n return {\n difficulties: difficulties,\n aroundScores: aroundScore.scores.slice(startIndex, startIndex + 7),\n regionTopScores: regionScore.scores,\n }\n }\n async getScoreAndBSMapByScoreId(scoreId: string) {\n const res = await this.BeatLeader.getBeatScore(scoreId)\n const bsorLink = res.replay\n const bsorContent = await fetch(bsorLink)\n const bsor = await new Promise((resolve, reject) => {\n bsorContent.arrayBuffer().then((res) => decode(res, resolve))\n setTimeout(() => reject('timeout exceed'), 5000)\n })\n const statistic = await fetch(\n `https://cdn.scorestats.beatleader.xyz/${scoreId}.json`\n ).then((res) => res.json())\n const id = res.song.id.split('x')?.[0]\n const bsMap = await this.BeatSaver.searchMapById(id)\n return {\n score: res,\n bsMap: bsMap,\n statistic: statistic,\n bsor: bsor,\n }\n }\n async getSSPlayerRecentScoreWithUserInfo(uid: string) {\n const [userInfo, scores] = await Promise.all([\n this.ScoreSaber.getScoreUserById(uid),\n this.ScoreSaber.getScoreItemsById(uid, 1, 24)\n .then((res) => res?.playerScores),\n ])\n if (!scores || !userInfo) {\n throw new SSIDNotFoundError({ accountId: uid })\n }\n const hashes = scores.map((it) => it.leaderboard.songHash)\n\n let hashInfo = await this.BeatSaver.getMapsByHashes(hashes)\n if (hashInfo.id) {\n const map = hashInfo as BSMap\n hashInfo = {} as HashResponse\n hashInfo[map.versions[0].hash] = map\n }\n const res = scores.map(\n (it) =>\n ({\n mapId: (hashInfo as HashResponse)[\n it.leaderboard.songHash.toLowerCase()\n ]?.id,\n ...it,\n }) as ScoreSaberItem\n )\n return {\n scores: res,\n userInfo: userInfo,\n }\n }\n}\n"],"mappings":"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","names":["res"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/aiosaber/index.ts"],"sourcesContent":["export interface AioOauthTokenResponse {\n access_token: string\n token_type: string\n expires_in: number\n refresh_token: string\n scope?: string\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/beatleader/bsor.ts"],"sourcesContent":["export interface BSOR {\n frames: BSORFrame[]\n heights: BSORHeight[]\n info: BSORInfo\n notes: BSORNote[]\n pauses: BSORPauses[]\n walls: BSORWall[]\n}\n\ninterface position {\n x: number\n y: number\n z: number\n}\ninterface rotation {\n w: number\n x: number\n y: number\n z: number\n}\n\ninterface Pos {\n position: position\n rotation: rotation\n}\n\ninterface BSORFrame {\n fps: number\n head: Pos\n left: Pos\n right: Pos\n time: number\n}\n\ntype BSORHeight = {\n [key: string]: any\n}\n\ninterface BSORInfo {\n controller: string\n difficulty: string\n environment: string\n failTime: number\n gameVersion: string\n hash: string\n height: number\n hmd: string\n jumpDistance: string\n leftHanded: boolean\n mapper: string\n mode: string\n modifiers: string\n platform: string\n playerID: string\n playerName: string\n score: number\n songName: string\n speed: number\n startTime: number\n timestamp: string\n trackingSysytem: string\n version: string\n [key: string]: any\n}\n\nexport interface BSORNote {\n eventTime: number\n eventType: number\n noteCutInfo: NoteCutInfo\n noteID: number\n spawnTime: number\n [key: string]: any\n}\n\ninterface BSORPauses {\n duration: any\n time: number\n [key: string]: any\n}\n\ninterface BSORWall {\n [key: string]: any\n}\n\nexport interface NoteCutInfo {\n afterCutRating: number\n beforeCutRating: number\n cutAngle: number\n cutDirDeviation: number\n cutDistanceToCenter: number\n cutNormal: CutNormal\n cutPoint: CutPoint\n directionOK: boolean\n saberDir: SaberDir\n saberSpeed: number\n saberType: number\n saberTypeOK: boolean\n speedOK: boolean\n timeDeviation: number\n wasCutTooSoon: boolean\n [property: string]: any\n}\n\nexport interface CutNormal {\n x: number\n y: number\n z: number\n [property: string]: any\n}\n\nexport interface CutPoint {\n x: number\n y: number\n z: number\n [property: string]: any\n}\n\nexport interface SaberDir {\n x: number\n y: number\n z: number\n [property: string]: any\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/beatleader/index.ts"],"sourcesContent":["export * from './bsor'\nexport * from './req'\nexport * from './score'\nexport * from './user'\nexport * from './ws'\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;AAAA,+BAAc,mBAAd;AACA,+BAAc,kBADd;AAEA,+BAAc,oBAFd;AAGA,+BAAc,mBAHd;AAIA,+BAAc,iBAJd;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/beatleader/req.ts"],"sourcesContent":["import { Score } from './score'\n\nexport interface BeatLeaderPlayerScoreRequest {\n diff: string\n mode: string\n hash: string\n playerID: string\n leaderboardContext: string\n}\n\nexport interface Metadata {\n itemsPerPage: number\n page: number\n total: number\n [property: string]: any\n}\n\nexport interface BeadLeaderScoresResponse {\n data: Score[]\n metadata: Metadata\n [property: string]: any\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/beatleader/score.ts"],"sourcesContent":["export interface Score {\n accLeft: number\n accPP: number\n accRight: number\n accuracy: number\n badCuts: number\n baseScore: number\n bombCuts: number\n bonusPp: number\n contextExtensions: null\n controller: number\n country: null | string\n fcAccuracy: number\n fcPp: number\n fullCombo: boolean\n hmd: number\n id: number\n leaderboard: Leaderboard\n leaderboardId: string\n maxCombo: number\n maxStreak: number | null\n metadata: null\n missedNotes: number\n modifiedScore: number\n modifiers: string\n myScore: null\n offsets: Offsets\n passPP: number\n pauses: number\n platform: string\n playCount: number\n player: any\n playerId: string\n pp: number\n priority: number\n rank: number\n rankVoting: null\n replay: string\n replaysWatched: number\n scoreImprovement: ScoreImprovement\n techPP: number\n timepost: number\n timeset: string\n validContexts: number\n wallsHit: number\n weight: number\n [property: string]: any\n}\n\nexport interface Leaderboard {\n difficulty: Difficulty\n id: string\n song: Song\n [property: string]: any\n}\n\nexport interface Difficulty {\n accRating: number | null\n bombs: number\n difficultyName: string\n duration: number\n id: number\n maxScore: number\n mode: number\n modeName: string\n modifiersRating: null | ModifiersRating\n modifierValues: ModifierValues\n njs: number\n nominatedTime: number\n notes: number\n nps: number\n passRating: number | null\n predictedAcc: number\n qualifiedTime: number\n rankedTime: number\n requirements: number\n stars: number | null\n status: number\n techRating: number | null\n type: number\n value: number\n walls: number\n [property: string]: any\n}\n\nexport interface ModifierValues {\n da: number\n fs: number\n gn: number\n modifierId: number\n na: number\n nb: number\n nf: number\n no: number\n op: number\n pm: number\n sa: number\n sc: number\n sf: number\n ss: number\n [property: string]: any\n}\n\nexport interface ModifiersRating {\n fsAccRating: number\n fsPassRating: number\n fsPredictedAcc: number\n fsStars: number\n fsTechRating: number\n id: number\n sfAccRating: number\n sfPassRating: number\n sfPredictedAcc: number\n sfStars: number\n sfTechRating: number\n ssAccRating: number\n ssPassRating: number\n ssPredictedAcc: number\n ssStars: number\n ssTechRating: number\n [property: string]: any\n}\n\nexport interface Song {\n author: string\n bpm: number\n collaboratorIds: null\n coverImage: string\n duration: number\n fullCoverImage: string\n hash: string\n id: string\n mapper: string\n mapperId: number\n name: string\n subName: string\n [property: string]: any\n}\n\nexport interface Offsets {\n frames: number\n heights: number\n id: number\n notes: number\n pauses: number\n walls: number\n [property: string]: any\n}\n\nexport interface ScoreImprovement {\n accLeft: number\n accRight: number\n accuracy: number\n averageRankedAccuracy: number\n badCuts: number\n bombCuts: number\n bonusPp: number\n id: number\n missedNotes: number\n pauses: number\n pp: number\n rank: number\n score: number\n timeset: string\n totalPp: number\n totalRank: number\n wallsHit: number\n [property: string]: any\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/beatleader/user.ts"],"sourcesContent":["export interface BeatLeaderUser {\n accPp: number\n avatar: string\n badges: BLBadge[]\n banDescription: null\n banned: boolean\n bot: boolean\n changes: BLChange[]\n clanOrder: string\n clans: BLClan[]\n contextExtensions: null\n country: string\n countryRank: number\n eventsParticipating: null\n externalProfileUrl: string\n history: null\n id: string\n inactive: boolean\n lastWeekCountryRank: number\n lastWeekPp: number\n lastWeekRank: number\n mapperId: number\n name: string\n passPp: number\n patreonFeatures: null\n pinnedScores: null\n platform: string\n pp: number\n profileSettings: BLProfileSettings\n rank: number\n role: string\n scoreStats: BLScoreStats\n socials: BLSocial[]\n techPp: number\n topHMD: number\n sspPlays: number\n ssPlays: number\n spPlays: number\n sPlays: number\n aPlays: number\n [property: string]: any\n}\n\nexport interface BLBadge {\n description: string\n hidden: boolean\n id: number\n image: string\n link: string\n timeset: number\n [property: string]: any\n}\n\nexport interface BLChange {\n changer: null | string\n id: number\n newCountry: null | string\n newName: null | string\n oldCountry: string\n oldName: null | string\n playerId: string\n timestamp: number\n [property: string]: any\n}\n\nexport interface BLClan {\n color: string\n id: number\n name: null\n tag: string\n [property: string]: any\n}\n\nexport interface BLProfileSettings {\n bio: null\n effectName: string\n hue: number\n id: number\n leftSaberColor: string\n message: null\n profileAppearance: string\n profileCover: string\n rightSaberColor: string\n saturation: number\n showAllRatings: boolean\n showBots: boolean\n starredFriends: string\n [property: string]: any\n}\n\nexport interface BLScoreStats {\n anonimusReplayWatched: number\n aPlays: number\n authorizedReplayWatched: number\n averageAccuracy: number\n averageLeftTiming: number\n averageRank: number\n averageRankedAccuracy: number\n averageRankedRank: number\n averageRightTiming: number\n averageUnrankedAccuracy: number\n averageUnrankedRank: number\n averageWeightedRankedAccuracy: number\n averageWeightedRankedRank: number\n countryTopPercentile: number\n dailyImprovements: number\n id: number\n lastRankedScoreTime: number\n lastScoreTime: number\n lastUnrankedScoreTime: number\n maxStreak: number\n medianAccuracy: number\n medianRankedAccuracy: number\n peakRank: number\n rankedImprovementsCount: number\n rankedMaxStreak: number\n rankedPlayCount: number\n rankedTop1Count: number\n rankedTop1Score: number\n sPlays: number\n spPlays: number\n ssPlays: number\n sspPlays: number\n top1Count: number\n top1Score: number\n topAccPP: number\n topAccuracy: number\n topBonusPP: number\n topHMD: number\n topPassPP: number\n topPercentile: number\n topPlatform: string\n topPp: number\n topRankedAccuracy: number\n topTechPP: number\n topUnrankedAccuracy: number\n totalImprovementsCount: number\n totalPlayCount: number\n totalRankedScore: number\n totalScore: number\n totalUnrankedScore: number\n unrankedImprovementsCount: number\n unrankedMaxStreak: number\n unrankedPlayCount: number\n unrankedTop1Count: number\n unrankedTop1Score: number\n watchedReplays: number\n [property: string]: any\n}\n\nexport interface BLSocial {\n id: number\n link: string\n playerId: string\n service: string\n user: string\n userId: string\n [property: string]: any\n}\n\nexport interface BLPlayer {\n avatar: string\n bot: boolean\n clans: string[]\n contextExtensions: null\n country: string\n countryRank: number\n id: string\n name: string\n patreonFeatures: null\n platform: string\n pp: number\n profileSettings: null\n rank: number\n role: string\n socials: null\n [property: string]: any\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/beatleader/ws.ts"],"sourcesContent":["import { Leaderboard, Offsets, ScoreImprovement } from './score'\nimport { BLPlayer } from './user'\n\nexport interface BeatLeaderWSEvent {\n accLeft: number\n accPP: number\n accRight: number\n accuracy: number\n badCuts: number\n baseScore: number\n bombCuts: number\n bonusPp: number\n contextExtensions: ContextExtension[]\n controller: number\n country: string\n fcAccuracy: number\n fcPp: number\n fullCombo: boolean\n hmd: number\n id: number\n leaderboard: Leaderboard\n leaderboardId: string\n maxCombo: number\n maxStreak: number\n metadata: null\n missedNotes: number\n modifiedScore: number\n modifiers: string\n myScore: null\n offsets: Offsets\n passPP: number\n pauses: number\n platform: string\n playCount: number\n player: BLPlayer\n playerId: string\n pp: number\n rank: number\n rankVoting: null\n replay: string\n replaysWatched: number\n scoreImprovement: ScoreImprovement\n techPP: number\n timepost: number\n timeset: string\n validContexts: number\n wallsHit: number\n weight: number\n [property: string]: any\n}\n\nexport interface ContextExtension {\n accPP?: number\n accuracy?: number\n baseScore?: number\n bonusPp?: number\n context?: number\n id?: number\n modifiedScore?: number\n modifiers?: string\n passPP?: number\n playerId?: string\n pp?: number\n rank?: number\n scoreImprovement?: ContextExtensionScoreImprovement\n techPP?: number\n weight?: number\n [property: string]: any\n}\n\nexport interface ContextExtensionScoreImprovement {\n accLeft: number\n accRight: number\n accuracy: number\n averageRankedAccuracy: number\n badCuts: number\n bombCuts: number\n bonusPp: number\n id: number\n missedNotes: number\n pauses: number\n pp: number\n rank: number\n score: number\n timeset: string\n totalPp: number\n totalRank: number\n wallsHit: number\n [property: string]: any\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/beatsaver/alert.ts"],"sourcesContent":["export interface BeatsaverAlertStats {\n unread: number\n read: number\n byTape: {\n MapRelease: number\n MapCurated: number\n }\n curationAlerts: boolean\n reviewAlerts: boolean\n followAlerts: boolean\n}\n\nexport interface BeatsaverAlert {\n id: number\n head: string\n body: string\n time: string\n type: string\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/beatsaver/bsmap.ts"],"sourcesContent":["export interface BSMap {\n id: string\n name: string\n description: string\n declaredAi: string\n\n uploader: {\n id: number\n name: string\n avatar: string\n type: string\n [key: string]: any\n }\n metadata: {\n bpm: number\n duration: number\n songName: string\n songSubName: string\n songAuthorName: string\n levelAuthorName: string\n }\n stats: {\n plays: number\n downloads: number\n upvotes: number\n downvotes: number\n score: number\n reviews?: number\n [key: string]: any\n }\n automapper: boolean\n versions: {\n hash: string\n state: string\n createdAt: string\n downloadURL: string\n coverURL: string\n previewURL: string\n sageScore?: number\n diffs: {\n notes: number\n bombs: number\n offset: number\n obstacles: number\n nps: number\n length: number\n characteristic: string\n difficulty: string\n events: number\n chroma: boolean\n me: boolean\n ne: boolean\n cinema: boolean\n seconds: number\n maxScore: number\n paritySummary: any\n star?: number\n blStar?: number\n [key: string]: any\n }[]\n }[]\n lastPublishedAt: string\n updatedAt: string\n createdAt: string\n tags: string[]\n ranked?: boolean\n blRanked?: boolean\n [key: string]: any\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/beatsaver/index.ts"],"sourcesContent":["export * from './ws'\nexport * from './bsmap'\nexport * from './resp'\nexport * from './user'\nexport * from './alert'\n\nimport { BSUserResponse } from './user'\n\nexport type BSUserResp = BSUserResponse | BSErrorResponse\n\nexport interface BSErrorResponse {\n success?: boolean\n errors?: string\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;AAAA,8BAAc,iBAAd;AACA,8BAAc,oBADd;AAEA,8BAAc,mBAFd;AAGA,8BAAc,mBAHd;AAIA,8BAAc,oBAJd;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/beatsaver/resp.ts"],"sourcesContent":["import { BSMap } from './bsmap'\n\nexport interface HashResponse {\n [hash: string]: BSMap\n}\n\nexport type HashReqResponse = BSMap | HashResponse\n\nexport interface BSMapLatestResponse {\n docs: BSMap[]\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/beatsaver/user.ts"],"sourcesContent":["export interface BSUserResponse {\n id: number\n name: string\n admin: boolean\n avatar: boolean\n curator: boolean\n description: string\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/beatsaver/ws.ts"],"sourcesContent":["import { BSMap } from './bsmap'\n\n// export interface BeatSaverWSEvent {\n// type: 'MAP_UPDATE' | 'MAP_DELETE'\n// msg: BSMap\n// }\n\ninterface DeleteEvent {\n type: 'MAP_DELETE'\n msg: string\n}\n\ninterface UpdateEvent {\n type: 'MAP_UPDATE'\n msg: BSMap\n}\n\nexport type BeatSaverWSEvent = DeleteEvent | UpdateEvent\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/service/api/interfaces/index.ts"],"sourcesContent":["export interface OAuthTokenResponse {\n access_token: string\n token_type: string\n expires_in: number\n refresh_token: string\n scope?: string\n}\nexport interface OAuthTokenInfoResponse {\n scope?: string[]\n id: string\n name: string\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/scoresaber/index.ts"],"sourcesContent":["export * from './item'\nexport * from './resp'\nexport * from './user'\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;AAAA,+BAAc,mBAAd;AACA,+BAAc,mBADd;AAEA,+BAAc,mBAFd;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/scoresaber/item.ts"],"sourcesContent":["export interface ScoreSaberItem {\n score: SSScore\n leaderboard: LeaderBoard\n mapId?: string\n}\n\nexport interface SSScore {\n id: number\n leaderboardPlayerInfo: LeaderboardPlayerInfo\n rank: number\n baseScore: number\n modifiedScore: number\n pp: number\n weight: number\n modifiers: string\n multiplier: number\n badCuts: number\n missedNotes: number\n maxCombo: number\n fullCombo: boolean\n hmd: number\n timeSet: string\n hasReplay: boolean\n deviceHmd: string\n deviceControllerLeft: string\n deviceControllerRight: string\n}\n\nexport interface LeaderboardPlayerInfo {\n id: string\n name: string\n profilePicture: string\n country: string\n permissions: number\n badges?: string\n role?: string\n}\ninterface LeaderBoard {\n id: number\n songHash: string\n songName: string\n songSubName: string\n songAuthorName: string\n levelAuthorName: string\n difficulty: {\n leaderboardId: number\n difficulty: number\n gameMode: string\n difficultyRaw: string\n }\n maxScore: number\n createdDate: string\n rankedDate: string\n qualifiedDate: string\n lovedDate: any\n ranked: boolean\n qualified: boolean\n loved: boolean\n maxPP: number\n stars: number\n plays: number\n dailyPlays: number\n positiveModifiers: boolean\n playerScore: any\n coverImage: string\n difficulties: any\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/scoresaber/leaderboard.ts"],"sourcesContent":["import { SSScore } from '@/service/api/interfaces/scoresaber/item'\n\nexport interface ScoresaberLeaderboardResp {\n scores: SSScore[]\n metadata: Metadata\n}\n\nexport interface Metadata {\n total: number\n page: number\n itemsPerPage: number\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/scoresaber/resp.ts"],"sourcesContent":["import { ScoreSaberItem } from './item'\n\nexport interface ScoreSaberUserResponse {\n playerScores: ScoreSaberItem[]\n metadata: {\n total: number\n page: number\n itemsPerPage: number\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/scoresaber/user.ts"],"sourcesContent":["export interface ScoreSaberUser {\n badges: Badge[]\n banned: boolean\n bio: string\n country: string\n countryRank: number\n firstSeen: string\n histories: string\n id: string\n inactive: boolean\n name: string\n permissions: number\n pp: number\n profilePicture: string\n rank: number\n role: null\n scoreStats: ScoreStats\n [property: string]: any\n}\n\nexport interface Badge {\n description?: string\n image?: string\n [property: string]: any\n}\n\nexport interface ScoreStats {\n averageRankedAccuracy: number\n rankedPlayCount: number\n replaysWatched: number\n totalPlayCount: number\n totalRankedScore: number\n totalScore: number\n [property: string]: any\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/service/api/interfaces/scoresaber/ws.ts"],"sourcesContent":["/**\n * ApifoxModel\n */\nexport interface ScoreWSEvent {\n commandData: CommandData\n commandName: string\n [property: string]: any\n}\n\nexport interface CommandData {\n leaderboard: Leaderboard\n score: Score\n [property: string]: any\n}\n\nexport interface Leaderboard {\n coverImage: string\n createdDate: string\n dailyPlays: number\n difficulties: null\n difficulty: Difficulty\n id: number\n levelAuthorName: string\n loved: boolean\n lovedDate: null\n maxPP: number\n maxScore: number\n playerScore: null\n plays: number\n positiveModifiers: boolean\n qualified: boolean\n qualifiedDate: string\n ranked: boolean\n rankedDate: string\n songAuthorName: string\n songHash: string\n songName: string\n songSubName: string\n stars: number\n [property: string]: any\n}\n\nexport interface Difficulty {\n difficulty: number\n difficultyRaw: string\n gameMode: string\n leaderboardId: number\n [property: string]: any\n}\n\nexport interface Score {\n badCuts: number\n baseScore: number\n deviceControllerLeft: string\n deviceControllerRight: string\n deviceHmd: string\n fullCombo: boolean\n hasReplay: boolean\n hmd: number\n id: number\n leaderboardPlayerInfo: LeaderboardPlayerInfo\n maxCombo: number\n missedNotes: number\n modifiedScore: number\n modifiers: string\n multiplier: number\n pp: number\n rank: number\n timeSet: string\n weight: number\n [property: string]: any\n}\n\nexport interface LeaderboardPlayerInfo {\n badges: string\n country: string\n id: string\n name: string\n permissions: number\n profilePicture: string\n role: null\n [property: string]: any\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/service/api/sortScore.ts"],"sourcesContent":["import { Leaderboard } from './interfaces/beatleader'\n\nconst difficulties = {\n Easy: 0,\n Normal: 1,\n Hard: 2,\n Expert: 3,\n ExpertPlus: 4,\n}\n\nconst modes = {\n Legacy: 0,\n Lawless: 1,\n Lightshow: 2,\n '360Degree': 3,\n '90Degree': 4,\n NoArrows: 5,\n OneSaber: 6,\n Standard: 7,\n}\n\nexport function sortScore(a: Leaderboard, b: Leaderboard) {\n let res = modes[b.difficulty.modeName] - modes[a.difficulty.modeName]\n if (res == 0) {\n res =\n difficulties[b.difficulty.difficultyName] -\n difficulties[a.difficulty.difficultyName]\n }\n return res\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,MAAM,eAAe;AAAA,EACnB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,YAAY;AACd;AAEA,MAAM,QAAQ;AAAA,EACZ,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AACZ;AAEO,SAAS,UAAU,GAAgB,GAAgB;AACxD,MAAI,MAAM,MAAM,EAAE,WAAW,QAAQ,IAAI,MAAM,EAAE,WAAW,QAAQ;AACpE,MAAI,OAAO,GAAG;AACZ,UACE,aAAa,EAAE,WAAW,cAAc,IACxC,aAAa,EAAE,WAAW,cAAc;AAAA,EAC5C;AACA,SAAO;AACT;","names":[]}
@@ -1,16 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __copyProps = (to, from, except, desc) => {
6
- if (from && typeof from === "object" || typeof from === "function") {
7
- for (let key of __getOwnPropNames(from))
8
- if (!__hasOwnProp.call(to, key) && key !== except)
9
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
- }
11
- return to;
12
- };
13
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
14
- var service_exports = {};
15
- module.exports = __toCommonJS(service_exports);
16
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/service/index.ts"],"sourcesContent":["import {APIService} from \"@/service/api\";\nimport { DB } from \"@/interface\";\nimport {IRenderService} from \"@/service/render/interfaces\";\n\nexport type Services<T> = {\n render: IRenderService,\n api: APIService,\n db: DB<T>\n}\n\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/service/preference.ts"],"sourcesContent":["import { DB } from '@/interface'\nimport { LRUCache } from 'lru-cache'\n\n// uid is key currently\n\nconst cache = new LRUCache({\n max: 500,\n maxSize: 500,\n sizeCalculation: () => 1,\n ttl: 1000 * 60 * 60 * 24 * 7,\n allowStale: false,\n updateAgeOnGet: true,\n updateAgeOnHas: true,\n})\n\nexport class UserPreferenceStore {\n v: any = undefined\n constructor(\n private db: DB<any>,\n private uid: number\n ) {}\n async getUserPreference(uid: number) {\n return new UserPreferenceStore(this.db, uid)\n }\n async set<T extends string | number | boolean>(\n key: string,\n value: T\n ): Promise<boolean> {\n if (!this.v) {\n this.v = (await this.db.getUserPreference(this.uid)) ?? {}\n }\n const cacheKey = `${this.uid}`\n const v = {\n ...this.v,\n [key]: value,\n }\n await this.db.storeUserPreference(this.uid, v)\n cache.set(cacheKey, v)\n this.v = v\n return true\n }\n async get<T extends string | number | boolean>(\n key: string\n ): Promise<T | undefined> {\n const cacheKey = `${this.uid}`\n const has = cache.has(cacheKey)\n if (has) {\n const v = cache.get(cacheKey) as T\n return v?.[key] ?? preferenceSchema[key]?.default\n }\n const value = (await this.db.getUserPreference(this.uid)) ?? {}\n cache.set(cacheKey, value)\n return (value?.[key] as T) ?? preferenceSchema[key]?.default\n }\n async configEntries(): Promise<Record<string, any>> {\n await this.get('')\n return cache.get(this.uid) as Record<string, any>\n }\n}\n\ntype PreferenceItem = {\n key: string\n i18nName: string\n valueType: 'img-url' | 'string' | 'number' | 'boolean'\n default: any\n}\nexport const preferenceKey = {\n blProfileRenderImg: {\n key: 'bl::profile::render::img',\n i18nName: 'BLProfile背景图片',\n },\n ssProfileRenderImg: {\n key: 'ss::profile::render::img',\n i18nName: 'SSProfile背景图片',\n },\n blScoreImg: {\n key: 'bl::score::render::img',\n i18nName: 'BLScore背景图片',\n },\n}\n\nexport const preferenceSchema: Record<string, PreferenceItem> = {\n 'bl::profile::render::img': {\n key: 'bl::profile::render::img',\n i18nName: 'BLProfile背景图片',\n valueType: 'img-url',\n default: 'https://www.loliapi.com/acg/pc/',\n },\n 'ss::profile::render::img': {\n key: 'ss::profile::render::img',\n i18nName: 'SSProfile背景图片',\n valueType: 'img-url',\n default: 'https://www.loliapi.com/acg/pc/',\n },\n 'bl::score::render::img': {\n key: 'bl::score::render::img',\n i18nName: 'BLScore背景图片',\n valueType: 'img-url',\n default: 'https://www.loliapi.com/acg/pc/',\n },\n}\n\nconst preferenceMap = new Map<string, PreferenceItem>()\n\nObject.entries(preferenceSchema).forEach(([key, value]) => {\n preferenceMap.set(value.i18nName, value)\n})\n\nexport const hasPreferenceSchemaByKeyOrName = (key: string) => {\n if (key in preferenceSchema) {\n return true\n }\n return preferenceMap.has(key)\n}\nexport const getPreferenceSchemaByKeyOrName = (key: string) => {\n if (key in preferenceSchema) {\n return preferenceSchema[key]\n }\n return preferenceMap.get(key)\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/service/render/index.ts"],"sourcesContent":["import {IRenderService, RenderOption} from './interfaces'\nimport { getHtml } from '@/components'\nimport { PuppeteerError, TimeoutError } from 'puppeteer-core'\nimport { Platform } from '@/interface'\nimport {getBLPlayerComp, getBLRankScoreComp, getBSMapComp, getSSPlayerComp} from '@/components/pages'\nimport {preferenceKey} from \"@/service/preference\";\nimport {ImageRenderError, RequestError} from \"@/infra/errors\";\nimport createQrcode from \"@/components/utils/qrcode\";\nimport {APIService} from \"@/service/api\";\nimport {BSMap} from \"@/service/api/interfaces/beatsaver\";\nimport {ImageRender} from \"@/infra/support/render\";\n\n\nconst getPreferenceKey = (platform: string) => {\n return platform == Platform.SS\n ? preferenceKey.ssProfileRenderImg.key\n : preferenceKey.blProfileRenderImg.key\n}\n\nexport class RenderService implements IRenderService {\n constructor(\n private api: APIService,\n private imageRender: ImageRender\n ) {}\n async renderRank(\n accountId: string,\n platform: Platform,\n renderOpts?: RenderOption\n ) {\n try {\n let bg = (await renderOpts?.userPreference?.get<string>(getPreferenceKey(platform)))\n bg = bg || 'https://www.loliapi.com/acg/pc/'\n let html: string\n if (platform == Platform.BL) {\n const { scores, userInfo } = await this.api.getBLPlayerScoresWithUserInfo(accountId)\n html = getHtml(getBLPlayerComp(scores, userInfo, bg))\n } else {\n const { scores, userInfo } = await this.api.getSSPlayerRecentScoreWithUserInfo(accountId)\n html = getHtml(getSSPlayerComp(scores, userInfo, bg))\n }\n return this.imageRender.html2img(html, {selector: '#render-result', ...renderOpts})\n }catch (e) {\n if (e instanceof TimeoutError || e instanceof PuppeteerError) {\n throw new ImageRenderError()\n }\n throw e\n }\n }\n\n async renderScore(\n scoreId: string,\n renderOpts?: RenderOption\n ) {\n const bg = (await renderOpts?.userPreference?.get<string>(preferenceKey.blScoreImg.key))\n ?? 'https://www.loliapi.com/acg/pc/'\n try {\n const { score, statistic, bsor, bsMap } =\n await this.api.getScoreAndBSMapByScoreId(scoreId)\n\n const { aroundScores, regionTopScores, difficulties } =\n await this.api.getAroundScoreAndRegionScoreByRankAndPage(\n score.leaderboardId,\n score.rank,\n score.player.country\n )\n return this.imageRender.html2img(\n getHtml(getBLRankScoreComp(score, aroundScores, regionTopScores, difficulties, bsMap, statistic, bsor, bg)),\n {selector: '#render-result', ...renderOpts}\n )\n }catch (e) {\n if (e instanceof RequestError) {\n throw e\n }\n throw new ImageRenderError()\n }\n }\n\n async renderMapById(\n mapId: string,\n renderOption: RenderOption\n ) {\n const map = await this.api.BeatSaver.searchMapById(mapId)\n return this.renderMap(map, renderOption)\n }\n\n async renderMap(\n bsMap: BSMap,\n renderOption?: RenderOption\n ) {\n const previewQrUrl = await createQrcode(`https://allpoland.github.io/ArcViewer/?id=${bsMap.id}`)\n const bsMapQrUrl = await createQrcode(`https://beatsaver.com/maps/${bsMap.id}`)\n return this.imageRender.html2img(\n getHtml(getBSMapComp(bsMap, bsMapQrUrl, previewQrUrl)), {selector: '#render-result', ...renderOption}\n )\n }\n\n async renderUrl(url: string, renderOption?: RenderOption) {\n return this.imageRender.url2img(url, renderOption)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,wBAAwB;AACxB,4BAA6C;AAC7C,uBAAyB;AACzB,mBAAiF;AACjF,wBAA4B;AAC5B,oBAA6C;AAC7C,oBAAyB;AAMzB,MAAM,mBAAmB,CAAC,aAAqB;AAC7C,SAAO,YAAY,0BAAS,KACxB,gCAAc,mBAAmB,MACjC,gCAAc,mBAAmB;AACvC;AAEO,MAAM,cAAwC;AAAA,EACnD,YACU,KACA,aACR;AAFQ;AACA;AAAA,EACP;AAAA,EACG,WACJ,WACA,UACA,YACA;AAAA;AA5BJ;AA6BI,UAAI;AACF,YAAI,KAAM,OAAM,8CAAY,mBAAZ,mBAA4B,IAAY,iBAAiB,QAAQ;AACjF,aAAK,MAAM;AACX,YAAI;AACJ,YAAI,YAAY,0BAAS,IAAI;AAC3B,gBAAM,EAAE,QAAQ,SAAS,IAAI,MAAM,KAAK,IAAI,8BAA8B,SAAS;AACnF,qBAAO,+BAAQ,8BAAgB,QAAQ,UAAU,EAAE,CAAC;AAAA,QACtD,OAAO;AACL,gBAAM,EAAE,QAAQ,SAAS,IAAI,MAAM,KAAK,IAAI,mCAAmC,SAAS;AACxF,qBAAO,+BAAQ,8BAAgB,QAAQ,UAAU,EAAE,CAAC;AAAA,QACtD;AACA,eAAO,KAAK,YAAY,SAAS,MAAM,iBAAC,UAAU,oBAAqB,WAAW;AAAA,MACpF,SAAQ,GAAG;AACT,YAAI,aAAa,sCAAgB,aAAa,sCAAgB;AAC5D,gBAAM,IAAI,+BAAiB;AAAA,QAC7B;AACA,cAAM;AAAA,MACR;AAAA,IACF;AAAA;AAAA,EAEM,YACJ,SACA,YACA;AAAA;AApDJ;AAqDI,YAAM,MAAM,YAAM,8CAAY,mBAAZ,mBAA4B,IAAY,gCAAc,WAAW,SAAvE,YACP;AACL,UAAI;AACF,cAAM,EAAE,OAAO,WAAW,MAAM,MAAM,IACpC,MAAM,KAAK,IAAI,0BAA0B,OAAO;AAElD,cAAM,EAAE,cAAc,iBAAiB,aAAa,IAClD,MAAM,KAAK,IAAI;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM,OAAO;AAAA,QACf;AACF,eAAO,KAAK,YAAY;AAAA,cACtB,+BAAQ,iCAAmB,OAAO,cAAc,iBAAiB,cAAc,OAAO,WAAW,MAAM,EAAE,CAAC;AAAA,UAC1G,iBAAC,UAAU,oBAAqB;AAAA,QAClC;AAAA,MACF,SAAQ,GAAG;AACT,YAAI,aAAa,4BAAc;AAC7B,gBAAM;AAAA,QACR;AACA,cAAM,IAAI,+BAAiB;AAAA,MAC7B;AAAA,IACF;AAAA;AAAA,EAEM,cACJ,OACA,cACA;AAAA;AACA,YAAM,MAAM,MAAM,KAAK,IAAI,UAAU,cAAc,KAAK;AACxD,aAAO,KAAK,UAAU,KAAK,YAAY;AAAA,IACzC;AAAA;AAAA,EAEM,UACJ,OACA,cACA;AAAA;AACA,YAAM,eAAe,UAAM,cAAAA,SAAa,6CAA6C,MAAM,EAAE,EAAE;AAC/F,YAAM,aAAa,UAAM,cAAAA,SAAa,8BAA8B,MAAM,EAAE,EAAE;AAC9E,aAAO,KAAK,YAAY;AAAA,YACtB,+BAAQ,2BAAa,OAAO,YAAY,YAAY,CAAC;AAAA,QAAG,iBAAC,UAAU,oBAAqB;AAAA,MAC1F;AAAA,IACF;AAAA;AAAA,EAEM,UAAU,KAAa,cAA6B;AAAA;AACxD,aAAO,KAAK,YAAY,QAAQ,KAAK,YAAY;AAAA,IACnD;AAAA;AACF;","names":["createQrcode"]}
@@ -1,16 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __copyProps = (to, from, except, desc) => {
6
- if (from && typeof from === "object" || typeof from === "function") {
7
- for (let key of __getOwnPropNames(from))
8
- if (!__hasOwnProp.call(to, key) && key !== except)
9
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
- }
11
- return to;
12
- };
13
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
14
- var interfaces_exports = {};
15
- module.exports = __toCommonJS(interfaces_exports);
16
- //# sourceMappingURL=interfaces.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/service/render/interfaces.ts"],"sourcesContent":["import type { Platform } from '@/interface'\nimport {UserPreferenceStore} from \"@/service/preference\";\nimport {BSMap} from \"@/service/api/interfaces/beatsaver\";\nimport { PuppeteerOptions } from '@/infra/support/render'\nexport type RenderOption = RenderOptions & PuppeteerOptions\n\ntype RenderOptions = {\n userPreference?: UserPreferenceStore,\n onRenderStart?: () => void,\n onRenderError?: (e) => void\n}\n\nexport interface IRenderService {\n renderRank(accountId: string, platform: Platform, renderOpts?: RenderOption): Promise<Buffer>\n renderScore(scoreId: string, renderOpts?: RenderOption): Promise<Buffer>\n renderMapById(mapId: string, renderOpts?: RenderOption): Promise<Buffer>\n renderMap(bsMap: BSMap, renderOpts?: RenderOption): Promise<Buffer>\n renderUrl(url: string, renderOpts?: RenderOption): Promise<Buffer>\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/ws/beatleader.ts"],"sourcesContent":["import { WSHandler } from '@/ws/handler'\nimport { Logger } from '@/interface/logger'\nimport { Config } from '@/config'\nimport { DB } from '@/interface/db'\nimport { BotService, Session } from '@/interface'\nimport {RenderService} from \"@/service/render\";\nimport {BeatLeaderWSEvent} from \"@/service/api/interfaces/beatleader\";\n\nexport class BeatleaderWSHandler<T> implements WSHandler {\n private readonly logger: Logger\n private render: RenderService\n private botService: BotService<T, Session<T>>\n wsUrl: string = 'wss://sockets.api.beatleader.xyz/scores'\n private db: DB<T>\n config: Config\n constructor(\n db: DB<T>,\n render: RenderService,\n logger: Logger,\n config: Config,\n botService: BotService<T, Session<T>>\n ) {\n this.logger = logger\n this.render = render\n this.botService = botService\n this.config = config\n this.db = db\n }\n\n onOpen() {\n this.logger.info('BeatleaderWS opened')\n }\n\n onClose() {\n this.logger.info('BeatleaderWS closed')\n }\n\n async onEvent(event: any) {\n const data = JSON.parse(event.toString()) as BeatLeaderWSEvent\n const playerId = data.player.id\n // const ok = BeatLeaderFilter(data, ...this.config.BLScoreFilters)\n // if (!ok) {\n // return\n // }\n // logger.info('Received beatleader message',data.id, data.player.id);\n // cache all playerId\n const subscriptions = await this.db.getAllSubscriptionByUIDAndPlatform(playerId, 'beatleader')\n // .filter(item=> {\n // const channelFilters = item.sub.data as BLScoreFilter[]\n // const memberFilters = item.member.subscribeData\n // return BeatLeaderFilter(data, ...channelFilters, ...memberFilters)\n // })\n const restSub = subscriptions.filter((it) =>\n it.subscribe.type == 'beatleader-score' && it.subscribe.enable == true\n )\n // cacheService\n if (restSub.length === 0) return\n const img = await this.render.renderScore(data.id.toString())\n for (const item of restSub) {\n const session = this.botService.getSessionByChannelInfo(item.groupChannel)\n if (!session) {\n continue\n }\n await session.send(\n `恭喜 <at id=\"${item.account.uid}\"/> 刚刚在谱面「${data.leaderboard.song.name}」中打出了 ${(data.accuracy * 100).toFixed(2)}% 的好成绩`\n )\n await session.sendImgBuffer(img)\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQO,MAAM,oBAA4C;AAAA,EAOvD,YACE,IACA,QACA,QACA,QACA,YACA;AAZF,wBAAiB;AACjB,wBAAQ;AACR,wBAAQ;AACR,iCAAgB;AAChB,wBAAQ;AACR;AAQE,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,SAAK,SAAS;AACd,SAAK,KAAK;AAAA,EACZ;AAAA,EAEA,SAAS;AACP,SAAK,OAAO,KAAK,qBAAqB;AAAA,EACxC;AAAA,EAEA,UAAU;AACR,SAAK,OAAO,KAAK,qBAAqB;AAAA,EACxC;AAAA,EAEM,QAAQ,OAAY;AAAA;AACxB,YAAM,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AACxC,YAAM,WAAW,KAAK,OAAO;AAO7B,YAAM,gBAAgB,MAAM,KAAK,GAAG,mCAAmC,UAAU,YAAY;AAM7F,YAAM,UAAU,cAAc;AAAA,QAAO,CAAC,OACpC,GAAG,UAAU,QAAQ,sBAAsB,GAAG,UAAU,UAAU;AAAA,MACpE;AAEA,UAAI,QAAQ,WAAW,EAAG;AAC1B,YAAM,MAAM,MAAM,KAAK,OAAO,YAAY,KAAK,GAAG,SAAS,CAAC;AAC5D,iBAAW,QAAQ,SAAS;AAC1B,cAAM,UAAU,KAAK,WAAW,wBAAwB,KAAK,YAAY;AACzE,YAAI,CAAC,SAAS;AACZ;AAAA,QACF;AACA,cAAM,QAAQ;AAAA,UACZ,wBAAc,KAAK,QAAQ,GAAG,2CAAa,KAAK,YAAY,KAAK,IAAI,mCAAU,KAAK,WAAW,KAAK,QAAQ,CAAC,CAAC;AAAA,QAChH;AACA,cAAM,QAAQ,cAAc,GAAG;AAAA,MACjC;AAAA,IACF;AAAA;AACF;","names":[]}