beatsaber-bot-core 0.2.0-rc.13 → 0.2.0-rc.15

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 (338) hide show
  1. package/dist/cjs/cmd/bind/{bind-beatleader.js → bind-beatleader.cjs} +1 -1
  2. package/dist/cjs/cmd/bind/{bind-beatsaver.js → bind-beatsaver.cjs} +1 -1
  3. package/dist/cjs/cmd/bind/{bind-id-beatleader.js → bind-id-beatleader.cjs} +2 -2
  4. package/dist/cjs/cmd/bind/{bind-id-beatsaver.js → bind-id-beatsaver.cjs} +2 -2
  5. package/dist/cjs/cmd/bind/{bind-scoresaber.js → bind-scoresaber.cjs} +2 -2
  6. package/dist/cjs/cmd/bind/{index.js → index.cjs} +5 -5
  7. package/dist/cjs/cmd/bsmap/{id-search.js → id-search.cjs} +3 -3
  8. package/dist/cjs/cmd/bsmap/{key-search.js → key-search.cjs} +2 -2
  9. package/dist/cjs/cmd/bsmap/{latest.js → latest.cjs} +2 -2
  10. package/dist/cjs/cmd/config/index.cjs +1 -0
  11. package/dist/cjs/cmd/deprecated/{tmp.js → tmp.cjs} +2 -2
  12. package/dist/cjs/cmd/{index.js → index.cjs} +12 -12
  13. package/dist/cjs/cmd/index.cjs.map +1 -0
  14. package/dist/cjs/cmd/{rank.js → rank.cjs} +4 -4
  15. package/dist/cjs/cmd/{score.js → score.cjs} +6 -6
  16. package/dist/cjs/cmd/subscribe/{beatleader.js → beatleader.cjs} +2 -2
  17. package/dist/cjs/cmd/subscribe/{beatsaver.js → beatsaver.cjs} +2 -2
  18. package/dist/cjs/cmd/subscribe/{id-beatleader-score.js → id-beatleader-score.cjs} +2 -2
  19. package/dist/cjs/cmd/subscribe/{id-beatsaver-mapper.js → id-beatsaver-mapper.cjs} +2 -2
  20. package/dist/cjs/cmd/subscribe/{index.js → index.cjs} +6 -6
  21. package/dist/cjs/cmd/subscribe/{subjoin.js → subjoin.cjs} +3 -3
  22. package/dist/cjs/cmd/subscribe/{subleave.js → subleave.cjs} +2 -2
  23. package/dist/cjs/cmd/subscribe/{unsubscribe.js → unsubscribe.cjs} +3 -3
  24. package/dist/cjs/components/components/{RankDifficulty.js → RankDifficulty.cjs} +2 -2
  25. package/dist/cjs/components/components/base/{avatar.js → avatar.cjs} +1 -1
  26. package/dist/cjs/components/components/{bl-rank-score-item.js → bl-rank-score-item.cjs} +4 -4
  27. package/dist/cjs/components/components/{bl-score-item.js → bl-score-item.cjs} +2 -2
  28. package/dist/cjs/components/components/bl-score-item.cjs.map +1 -0
  29. package/dist/cjs/components/components/{characteristic.js → characteristic.cjs} +1 -1
  30. package/dist/cjs/components/components/{flag.js → flag.cjs} +2 -2
  31. package/dist/cjs/components/components/icons/{BeatLeader.js → BeatLeader.cjs} +1 -1
  32. package/dist/cjs/components/components/icons/{RankIcon.js → RankIcon.cjs} +3 -3
  33. package/dist/cjs/components/components/icons/{ScoreSaberIcon.js → ScoreSaberIcon.cjs} +1 -1
  34. package/dist/cjs/components/components/{progressbar.js → progressbar.cjs} +1 -1
  35. package/dist/cjs/components/components/{scoreItem.js → scoreItem.cjs} +2 -2
  36. package/dist/cjs/components/components/scoreItem.cjs.map +1 -0
  37. package/dist/cjs/components/components/{scoregraph.js → scoregraph.cjs} +3 -3
  38. package/dist/cjs/components/components/{skill-graph.js → skill-graph.cjs} +1 -1
  39. package/dist/cjs/components/components/{socre-badge.js → socre-badge.cjs} +1 -1
  40. package/dist/cjs/components/components/{ss-rank-score-item.js → ss-rank-score-item.cjs} +4 -4
  41. package/dist/cjs/components/components/{ss-score-item.js → ss-score-item.cjs} +2 -2
  42. package/dist/cjs/components/components/ss-score-item.cjs.map +1 -0
  43. package/dist/cjs/components/{index.js → index.cjs} +2 -2
  44. package/dist/cjs/components/pages/{bl-player.js → bl-player.cjs} +6 -6
  45. package/dist/cjs/components/pages/{bl-score-with-rank.js → bl-score-with-rank.cjs} +7 -7
  46. package/dist/cjs/components/pages/{bl-score.js → bl-score.cjs} +3 -3
  47. package/dist/cjs/components/pages/{bs-map.js → bs-map.cjs} +4 -4
  48. package/dist/cjs/components/pages/{index.js → index.cjs} +5 -5
  49. package/dist/cjs/components/pages/{ss-player.js → ss-player.cjs} +3 -3
  50. package/dist/cjs/components/utils/bl/{beatleader.js → beatleader.cjs} +1 -1
  51. package/dist/cjs/components/utils/bl/{blheadset.js → blheadset.cjs} +1 -1
  52. package/dist/cjs/components/utils/bl/{bsorDecoder.js → bsorDecoder.cjs} +1 -1
  53. package/dist/cjs/components/utils/bl/{bsorReplayAcc.js → bsorReplayAcc.cjs} +1 -1
  54. package/dist/cjs/components/utils/bl/{getPart.js → getPart.cjs} +1 -1
  55. package/dist/cjs/components/utils/bl/{stastic.js → stastic.cjs} +1 -1
  56. package/dist/cjs/components/utils/{canvas.js → canvas.cjs} +1 -1
  57. package/dist/cjs/components/utils/{format.js → format.cjs} +5 -5
  58. package/dist/cjs/components/utils/format.cjs.map +1 -0
  59. package/dist/cjs/components/utils/{getMods.js → getMods.cjs} +1 -1
  60. package/dist/cjs/components/utils/{index.js → index.cjs} +1 -1
  61. package/dist/cjs/components/utils/{qrcode.js → qrcode.cjs} +1 -1
  62. package/dist/cjs/components/utils/{sleep.js → sleep.cjs} +1 -1
  63. package/dist/cjs/components/utils/{tag-format.js → tag-format.cjs} +1 -1
  64. package/dist/cjs/components/utils/{tw-join.js → tw-join.cjs} +1 -1
  65. package/dist/cjs/config.cjs +55 -0
  66. package/dist/cjs/config.cjs.map +1 -0
  67. package/dist/cjs/{index.js → index.cjs} +1 -1
  68. package/dist/cjs/index.cjs.map +1 -0
  69. package/dist/cjs/infra/errors/{index.js → index.cjs} +1 -1
  70. package/dist/cjs/infra/i18n/{default.js → default.cjs} +1 -1
  71. package/dist/cjs/infra/i18n/{index.js → index.cjs} +1 -1
  72. package/dist/cjs/infra/i18n/{parser.js → parser.cjs} +1 -1
  73. package/dist/cjs/infra/i18n/{util.js → util.cjs} +1 -1
  74. package/dist/cjs/infra/{index.js → index.cjs} +4 -4
  75. package/dist/cjs/infra/index.cjs.map +1 -0
  76. package/dist/cjs/infra/s3/{index.js → index.cjs} +35 -4
  77. package/dist/cjs/infra/s3/index.cjs.map +1 -0
  78. package/dist/cjs/infra/support/{cache.js → cache.cjs} +1 -1
  79. package/dist/cjs/infra/support/fetch/{error.js → error.cjs} +1 -1
  80. package/dist/cjs/infra/support/fetch/{index.js → index.cjs} +14 -5
  81. package/dist/cjs/infra/support/fetch/index.cjs.map +1 -0
  82. package/dist/cjs/infra/support/fetch/{ofetch.js → ofetch.cjs} +6 -13
  83. package/dist/cjs/infra/support/fetch/ofetch.cjs.map +1 -0
  84. package/dist/cjs/infra/support/render/{index.js → index.cjs} +49 -15
  85. package/dist/cjs/infra/support/render/index.cjs.map +1 -0
  86. package/dist/cjs/infra/support/render/{puppeteer.js → puppeteer.cjs} +1 -1
  87. package/dist/cjs/interface/{bot.js → bot.cjs} +1 -1
  88. package/dist/cjs/interface/cmd/{builder.js → builder.cjs} +2 -2
  89. package/dist/cjs/interface/cmd/{type.js → type.cjs} +1 -1
  90. package/dist/cjs/interface/db/{index.js → index.cjs} +1 -1
  91. package/dist/cjs/interface/db/{models.js → models.cjs} +1 -1
  92. package/dist/cjs/interface/{index.js → index.cjs} +1 -1
  93. package/dist/cjs/interface/{logger.js → logger.cjs} +1 -1
  94. package/dist/cjs/schedules/{index.js → index.cjs} +4 -3
  95. package/dist/cjs/schedules/index.cjs.map +1 -0
  96. package/dist/cjs/schedules/{interface.js → interface.cjs} +1 -1
  97. package/dist/cjs/schedules/{temp.js → temp.cjs} +1 -1
  98. package/dist/cjs/service/api/base/{aioclient.js → aioclient.cjs} +2 -2
  99. package/dist/cjs/service/api/base/{blclient.js → blclient.cjs} +2 -2
  100. package/dist/cjs/service/api/base/{bsclient.js → bsclient.cjs} +3 -3
  101. package/dist/cjs/service/api/base/{index.js → index.cjs} +1 -1
  102. package/dist/cjs/service/api/base/{ssclient.js → ssclient.cjs} +3 -3
  103. package/dist/cjs/service/api/{index.js → index.cjs} +15 -6
  104. package/dist/cjs/service/api/index.cjs.map +1 -0
  105. package/dist/cjs/service/api/interfaces/aiosaber/{index.js → index.cjs} +1 -1
  106. package/dist/cjs/service/api/interfaces/beatleader/{bsor.js → bsor.cjs} +1 -1
  107. package/dist/cjs/service/api/interfaces/beatleader/{index.js → index.cjs} +1 -1
  108. package/dist/cjs/service/api/interfaces/beatleader/{req.js → req.cjs} +1 -1
  109. package/dist/cjs/service/api/interfaces/beatleader/{score.js → score.cjs} +1 -1
  110. package/dist/cjs/service/api/interfaces/beatleader/{user.js → user.cjs} +1 -1
  111. package/dist/cjs/service/api/interfaces/{beatsaver/ws.js → beatleader/ws.cjs} +1 -1
  112. package/dist/cjs/service/api/interfaces/beatsaver/{alert.js → alert.cjs} +1 -1
  113. package/dist/cjs/service/api/interfaces/beatsaver/{bsmap.js → bsmap.cjs} +1 -1
  114. package/dist/cjs/service/api/interfaces/beatsaver/{index.js → index.cjs} +1 -1
  115. package/dist/cjs/service/api/interfaces/beatsaver/{resp.js → resp.cjs} +1 -1
  116. package/dist/cjs/service/api/interfaces/beatsaver/{user.js → user.cjs} +1 -1
  117. package/dist/cjs/service/api/interfaces/{scoresaber/ws.js → beatsaver/ws.cjs} +1 -1
  118. package/dist/cjs/service/api/interfaces/{index.js → index.cjs} +1 -1
  119. package/dist/cjs/service/api/interfaces/scoresaber/{index.js → index.cjs} +1 -1
  120. package/dist/cjs/service/api/interfaces/scoresaber/{item.js → item.cjs} +1 -1
  121. package/dist/cjs/service/api/interfaces/scoresaber/{leaderboard.js → leaderboard.cjs} +1 -1
  122. package/dist/cjs/service/api/interfaces/scoresaber/{resp.js → resp.cjs} +1 -1
  123. package/dist/cjs/service/api/interfaces/scoresaber/{user.js → user.cjs} +1 -1
  124. package/dist/cjs/service/api/interfaces/{beatleader/ws.js → scoresaber/ws.cjs} +1 -1
  125. package/dist/cjs/service/api/{sortScore.js → sortScore.cjs} +1 -1
  126. package/dist/cjs/service/{index.js → index.cjs} +1 -1
  127. package/dist/cjs/service/{preference.js → preference.cjs} +1 -1
  128. package/dist/cjs/service/render/{index.js → index.cjs} +22 -9
  129. package/dist/cjs/service/render/index.cjs.map +1 -0
  130. package/dist/cjs/service/render/{interfaces.js → interfaces.cjs} +1 -1
  131. package/dist/cjs/utils/{index.js → index.cjs} +1 -1
  132. package/dist/cjs/ws/{beatleader.js → beatleader.cjs} +1 -1
  133. package/dist/cjs/ws/{beatsaver.js → beatsaver.cjs} +2 -2
  134. package/dist/cjs/ws/bl-filter.cjs +1 -0
  135. package/dist/cjs/ws/{handler.js → handler.cjs} +1 -1
  136. package/dist/cjs/ws/{index.js → index.cjs} +1 -1
  137. package/dist/esm/cmd/bind/bind-id-beatleader.js +1 -1
  138. package/dist/esm/cmd/bind/bind-id-beatsaver.js +1 -1
  139. package/dist/esm/cmd/bind/bind-scoresaber.js +1 -1
  140. package/dist/esm/cmd/bind/index.js +5 -5
  141. package/dist/esm/cmd/bsmap/id-search.js +2 -2
  142. package/dist/esm/cmd/bsmap/key-search.js +1 -1
  143. package/dist/esm/cmd/bsmap/latest.js +1 -1
  144. package/dist/esm/cmd/deprecated/tmp.js +1 -1
  145. package/dist/esm/cmd/index.js +11 -11
  146. package/dist/esm/cmd/index.js.map +1 -1
  147. package/dist/esm/cmd/rank.js +3 -3
  148. package/dist/esm/cmd/score.js +5 -5
  149. package/dist/esm/cmd/subscribe/beatleader.js +1 -1
  150. package/dist/esm/cmd/subscribe/beatsaver.js +1 -1
  151. package/dist/esm/cmd/subscribe/id-beatleader-score.js +1 -1
  152. package/dist/esm/cmd/subscribe/id-beatsaver-mapper.js +1 -1
  153. package/dist/esm/cmd/subscribe/index.js +5 -5
  154. package/dist/esm/cmd/subscribe/subjoin.js +2 -2
  155. package/dist/esm/cmd/subscribe/subleave.js +1 -1
  156. package/dist/esm/cmd/subscribe/unsubscribe.js +2 -2
  157. package/dist/esm/components/components/RankDifficulty.js +1 -1
  158. package/dist/esm/components/components/bl-rank-score-item.js +2 -2
  159. package/dist/esm/components/components/bl-score-item.js +2 -2
  160. package/dist/esm/components/components/bl-score-item.js.map +1 -1
  161. package/dist/esm/components/components/icons/RankIcon.js +2 -2
  162. package/dist/esm/components/components/scoreItem.js +1 -1
  163. package/dist/esm/components/components/scoreItem.js.map +1 -1
  164. package/dist/esm/components/components/scoregraph.js +3 -3
  165. package/dist/esm/components/components/socre-badge.js +1 -1
  166. package/dist/esm/components/components/ss-rank-score-item.js +2 -2
  167. package/dist/esm/components/components/ss-score-item.js +2 -2
  168. package/dist/esm/components/components/ss-score-item.js.map +1 -1
  169. package/dist/esm/components/pages/bl-player.js +7 -7
  170. package/dist/esm/components/pages/bl-score-with-rank.js +6 -6
  171. package/dist/esm/components/pages/bl-score.js +3 -3
  172. package/dist/esm/components/pages/bs-map.js +5 -5
  173. package/dist/esm/components/pages/index.js +5 -5
  174. package/dist/esm/components/pages/ss-player.js +3 -3
  175. package/dist/esm/components/utils/bl/bsorReplayAcc.js +2 -2
  176. package/dist/esm/components/utils/format.js +3 -3
  177. package/dist/esm/components/utils/format.js.map +1 -1
  178. package/dist/esm/components/utils/index.js +2 -2
  179. package/dist/esm/config.js +31 -0
  180. package/dist/esm/config.js.map +1 -1
  181. package/dist/esm/index.js +10 -10
  182. package/dist/esm/index.js.map +1 -1
  183. package/dist/esm/infra/i18n/index.js +2 -2
  184. package/dist/esm/infra/index.js +5 -5
  185. package/dist/esm/infra/index.js.map +1 -1
  186. package/dist/esm/infra/s3/index.js +31 -1
  187. package/dist/esm/infra/s3/index.js.map +1 -1
  188. package/dist/esm/infra/support/fetch/index.js +16 -7
  189. package/dist/esm/infra/support/fetch/index.js.map +1 -1
  190. package/dist/esm/infra/support/fetch/ofetch.js +4 -10
  191. package/dist/esm/infra/support/fetch/ofetch.js.map +1 -1
  192. package/dist/esm/infra/support/render/index.js +47 -13
  193. package/dist/esm/infra/support/render/index.js.map +1 -1
  194. package/dist/esm/interface/cmd/builder.js +1 -1
  195. package/dist/esm/interface/index.js +4 -4
  196. package/dist/esm/schedules/index.js +4 -3
  197. package/dist/esm/schedules/index.js.map +1 -1
  198. package/dist/esm/service/api/base/aioclient.js +1 -1
  199. package/dist/esm/service/api/base/blclient.js +1 -1
  200. package/dist/esm/service/api/base/bsclient.js +2 -2
  201. package/dist/esm/service/api/base/index.js +4 -4
  202. package/dist/esm/service/api/base/ssclient.js +2 -2
  203. package/dist/esm/service/api/index.js +16 -7
  204. package/dist/esm/service/api/index.js.map +1 -1
  205. package/dist/esm/service/api/interfaces/beatleader/index.js +5 -5
  206. package/dist/esm/service/api/interfaces/beatsaver/index.js +5 -5
  207. package/dist/esm/service/api/interfaces/scoresaber/index.js +3 -3
  208. package/dist/esm/service/index.js +2 -2
  209. package/dist/esm/service/render/index.js +22 -9
  210. package/dist/esm/service/render/index.js.map +1 -1
  211. package/dist/esm/ws/beatsaver.js +1 -1
  212. package/dist/esm/ws/index.js +3 -3
  213. package/dist/types/index.d.ts +205 -123
  214. package/package.json +27 -17
  215. package/dist/cjs/cmd/config/index.js +0 -1
  216. package/dist/cjs/cmd/index.js.map +0 -1
  217. package/dist/cjs/components/components/bl-score-item.js.map +0 -1
  218. package/dist/cjs/components/components/scoreItem.js.map +0 -1
  219. package/dist/cjs/components/components/ss-score-item.js.map +0 -1
  220. package/dist/cjs/components/utils/format.js.map +0 -1
  221. package/dist/cjs/config.js +0 -16
  222. package/dist/cjs/config.js.map +0 -1
  223. package/dist/cjs/index.js.map +0 -1
  224. package/dist/cjs/infra/index.js.map +0 -1
  225. package/dist/cjs/infra/s3/index.js.map +0 -1
  226. package/dist/cjs/infra/support/fetch/index.js.map +0 -1
  227. package/dist/cjs/infra/support/fetch/ofetch.js.map +0 -1
  228. package/dist/cjs/infra/support/render/index.js.map +0 -1
  229. package/dist/cjs/schedules/index.js.map +0 -1
  230. package/dist/cjs/service/api/index.js.map +0 -1
  231. package/dist/cjs/service/render/index.js.map +0 -1
  232. package/dist/cjs/ws/bl-filter.js +0 -1
  233. /package/dist/cjs/cmd/bind/{bind-beatleader.js.map → bind-beatleader.cjs.map} +0 -0
  234. /package/dist/cjs/cmd/bind/{bind-beatsaver.js.map → bind-beatsaver.cjs.map} +0 -0
  235. /package/dist/cjs/cmd/bind/{bind-id-beatleader.js.map → bind-id-beatleader.cjs.map} +0 -0
  236. /package/dist/cjs/cmd/bind/{bind-id-beatsaver.js.map → bind-id-beatsaver.cjs.map} +0 -0
  237. /package/dist/cjs/cmd/bind/{bind-scoresaber.js.map → bind-scoresaber.cjs.map} +0 -0
  238. /package/dist/cjs/cmd/bind/{index.js.map → index.cjs.map} +0 -0
  239. /package/dist/cjs/cmd/bsmap/{id-search.js.map → id-search.cjs.map} +0 -0
  240. /package/dist/cjs/cmd/bsmap/{key-search.js.map → key-search.cjs.map} +0 -0
  241. /package/dist/cjs/cmd/bsmap/{latest.js.map → latest.cjs.map} +0 -0
  242. /package/dist/cjs/cmd/config/{index.js.map → index.cjs.map} +0 -0
  243. /package/dist/cjs/cmd/deprecated/{tmp.js.map → tmp.cjs.map} +0 -0
  244. /package/dist/cjs/cmd/{rank.js.map → rank.cjs.map} +0 -0
  245. /package/dist/cjs/cmd/{score.js.map → score.cjs.map} +0 -0
  246. /package/dist/cjs/cmd/subscribe/{beatleader.js.map → beatleader.cjs.map} +0 -0
  247. /package/dist/cjs/cmd/subscribe/{beatsaver.js.map → beatsaver.cjs.map} +0 -0
  248. /package/dist/cjs/cmd/subscribe/{id-beatleader-score.js.map → id-beatleader-score.cjs.map} +0 -0
  249. /package/dist/cjs/cmd/subscribe/{id-beatsaver-mapper.js.map → id-beatsaver-mapper.cjs.map} +0 -0
  250. /package/dist/cjs/cmd/subscribe/{index.js.map → index.cjs.map} +0 -0
  251. /package/dist/cjs/cmd/subscribe/{subjoin.js.map → subjoin.cjs.map} +0 -0
  252. /package/dist/cjs/cmd/subscribe/{subleave.js.map → subleave.cjs.map} +0 -0
  253. /package/dist/cjs/cmd/subscribe/{unsubscribe.js.map → unsubscribe.cjs.map} +0 -0
  254. /package/dist/cjs/components/components/{RankDifficulty.js.map → RankDifficulty.cjs.map} +0 -0
  255. /package/dist/cjs/components/components/base/{avatar.js.map → avatar.cjs.map} +0 -0
  256. /package/dist/cjs/components/components/{bl-rank-score-item.js.map → bl-rank-score-item.cjs.map} +0 -0
  257. /package/dist/cjs/components/components/{characteristic.js.map → characteristic.cjs.map} +0 -0
  258. /package/dist/cjs/components/components/{flag.js.map → flag.cjs.map} +0 -0
  259. /package/dist/cjs/components/components/icons/{BeatLeader.js.map → BeatLeader.cjs.map} +0 -0
  260. /package/dist/cjs/components/components/icons/{RankIcon.js.map → RankIcon.cjs.map} +0 -0
  261. /package/dist/cjs/components/components/icons/{ScoreSaberIcon.js.map → ScoreSaberIcon.cjs.map} +0 -0
  262. /package/dist/cjs/components/components/{progressbar.js.map → progressbar.cjs.map} +0 -0
  263. /package/dist/cjs/components/components/{scoregraph.js.map → scoregraph.cjs.map} +0 -0
  264. /package/dist/cjs/components/components/{skill-graph.js.map → skill-graph.cjs.map} +0 -0
  265. /package/dist/cjs/components/components/{socre-badge.js.map → socre-badge.cjs.map} +0 -0
  266. /package/dist/cjs/components/components/{ss-rank-score-item.js.map → ss-rank-score-item.cjs.map} +0 -0
  267. /package/dist/cjs/components/{index.js.map → index.cjs.map} +0 -0
  268. /package/dist/cjs/components/pages/{bl-player.js.map → bl-player.cjs.map} +0 -0
  269. /package/dist/cjs/components/pages/{bl-score-with-rank.js.map → bl-score-with-rank.cjs.map} +0 -0
  270. /package/dist/cjs/components/pages/{bl-score.js.map → bl-score.cjs.map} +0 -0
  271. /package/dist/cjs/components/pages/{bs-map.js.map → bs-map.cjs.map} +0 -0
  272. /package/dist/cjs/components/pages/{index.js.map → index.cjs.map} +0 -0
  273. /package/dist/cjs/components/pages/{ss-player.js.map → ss-player.cjs.map} +0 -0
  274. /package/dist/cjs/components/utils/bl/{beatleader.js.map → beatleader.cjs.map} +0 -0
  275. /package/dist/cjs/components/utils/bl/{blheadset.js.map → blheadset.cjs.map} +0 -0
  276. /package/dist/cjs/components/utils/bl/{bsorDecoder.js.map → bsorDecoder.cjs.map} +0 -0
  277. /package/dist/cjs/components/utils/bl/{bsorReplayAcc.js.map → bsorReplayAcc.cjs.map} +0 -0
  278. /package/dist/cjs/components/utils/bl/{getPart.js.map → getPart.cjs.map} +0 -0
  279. /package/dist/cjs/components/utils/bl/{stastic.js.map → stastic.cjs.map} +0 -0
  280. /package/dist/cjs/components/utils/{canvas.js.map → canvas.cjs.map} +0 -0
  281. /package/dist/cjs/components/utils/{getMods.js.map → getMods.cjs.map} +0 -0
  282. /package/dist/cjs/components/utils/{index.js.map → index.cjs.map} +0 -0
  283. /package/dist/cjs/components/utils/{qrcode.js.map → qrcode.cjs.map} +0 -0
  284. /package/dist/cjs/components/utils/{sleep.js.map → sleep.cjs.map} +0 -0
  285. /package/dist/cjs/components/utils/{tag-format.js.map → tag-format.cjs.map} +0 -0
  286. /package/dist/cjs/components/utils/{tw-join.js.map → tw-join.cjs.map} +0 -0
  287. /package/dist/cjs/infra/errors/{index.js.map → index.cjs.map} +0 -0
  288. /package/dist/cjs/infra/i18n/{default.js.map → default.cjs.map} +0 -0
  289. /package/dist/cjs/infra/i18n/{index.js.map → index.cjs.map} +0 -0
  290. /package/dist/cjs/infra/i18n/{parser.js.map → parser.cjs.map} +0 -0
  291. /package/dist/cjs/infra/i18n/{util.js.map → util.cjs.map} +0 -0
  292. /package/dist/cjs/infra/support/{cache.js.map → cache.cjs.map} +0 -0
  293. /package/dist/cjs/infra/support/fetch/{error.js.map → error.cjs.map} +0 -0
  294. /package/dist/cjs/infra/support/render/{puppeteer.js.map → puppeteer.cjs.map} +0 -0
  295. /package/dist/cjs/interface/{bot.js.map → bot.cjs.map} +0 -0
  296. /package/dist/cjs/interface/cmd/{builder.js.map → builder.cjs.map} +0 -0
  297. /package/dist/cjs/interface/cmd/{type.js.map → type.cjs.map} +0 -0
  298. /package/dist/cjs/interface/db/{index.js.map → index.cjs.map} +0 -0
  299. /package/dist/cjs/interface/db/{models.js.map → models.cjs.map} +0 -0
  300. /package/dist/cjs/interface/{index.js.map → index.cjs.map} +0 -0
  301. /package/dist/cjs/interface/{logger.js.map → logger.cjs.map} +0 -0
  302. /package/dist/cjs/schedules/{interface.js.map → interface.cjs.map} +0 -0
  303. /package/dist/cjs/schedules/{temp.js.map → temp.cjs.map} +0 -0
  304. /package/dist/cjs/service/api/base/{aioclient.js.map → aioclient.cjs.map} +0 -0
  305. /package/dist/cjs/service/api/base/{blclient.js.map → blclient.cjs.map} +0 -0
  306. /package/dist/cjs/service/api/base/{bsclient.js.map → bsclient.cjs.map} +0 -0
  307. /package/dist/cjs/service/api/base/{index.js.map → index.cjs.map} +0 -0
  308. /package/dist/cjs/service/api/base/{ssclient.js.map → ssclient.cjs.map} +0 -0
  309. /package/dist/cjs/service/api/interfaces/aiosaber/{index.js.map → index.cjs.map} +0 -0
  310. /package/dist/cjs/service/api/interfaces/beatleader/{bsor.js.map → bsor.cjs.map} +0 -0
  311. /package/dist/cjs/service/api/interfaces/beatleader/{index.js.map → index.cjs.map} +0 -0
  312. /package/dist/cjs/service/api/interfaces/beatleader/{req.js.map → req.cjs.map} +0 -0
  313. /package/dist/cjs/service/api/interfaces/beatleader/{score.js.map → score.cjs.map} +0 -0
  314. /package/dist/cjs/service/api/interfaces/beatleader/{user.js.map → user.cjs.map} +0 -0
  315. /package/dist/cjs/service/api/interfaces/beatleader/{ws.js.map → ws.cjs.map} +0 -0
  316. /package/dist/cjs/service/api/interfaces/beatsaver/{alert.js.map → alert.cjs.map} +0 -0
  317. /package/dist/cjs/service/api/interfaces/beatsaver/{bsmap.js.map → bsmap.cjs.map} +0 -0
  318. /package/dist/cjs/service/api/interfaces/beatsaver/{index.js.map → index.cjs.map} +0 -0
  319. /package/dist/cjs/service/api/interfaces/beatsaver/{resp.js.map → resp.cjs.map} +0 -0
  320. /package/dist/cjs/service/api/interfaces/beatsaver/{user.js.map → user.cjs.map} +0 -0
  321. /package/dist/cjs/service/api/interfaces/beatsaver/{ws.js.map → ws.cjs.map} +0 -0
  322. /package/dist/cjs/service/api/interfaces/{index.js.map → index.cjs.map} +0 -0
  323. /package/dist/cjs/service/api/interfaces/scoresaber/{index.js.map → index.cjs.map} +0 -0
  324. /package/dist/cjs/service/api/interfaces/scoresaber/{item.js.map → item.cjs.map} +0 -0
  325. /package/dist/cjs/service/api/interfaces/scoresaber/{leaderboard.js.map → leaderboard.cjs.map} +0 -0
  326. /package/dist/cjs/service/api/interfaces/scoresaber/{resp.js.map → resp.cjs.map} +0 -0
  327. /package/dist/cjs/service/api/interfaces/scoresaber/{user.js.map → user.cjs.map} +0 -0
  328. /package/dist/cjs/service/api/interfaces/scoresaber/{ws.js.map → ws.cjs.map} +0 -0
  329. /package/dist/cjs/service/api/{sortScore.js.map → sortScore.cjs.map} +0 -0
  330. /package/dist/cjs/service/{index.js.map → index.cjs.map} +0 -0
  331. /package/dist/cjs/service/{preference.js.map → preference.cjs.map} +0 -0
  332. /package/dist/cjs/service/render/{interfaces.js.map → interfaces.cjs.map} +0 -0
  333. /package/dist/cjs/utils/{index.js.map → index.cjs.map} +0 -0
  334. /package/dist/cjs/ws/{beatleader.js.map → beatleader.cjs.map} +0 -0
  335. /package/dist/cjs/ws/{beatsaver.js.map → beatsaver.cjs.map} +0 -0
  336. /package/dist/cjs/ws/{bl-filter.js.map → bl-filter.cjs.map} +0 -0
  337. /package/dist/cjs/ws/{handler.js.map → handler.cjs.map} +0 -0
  338. /package/dist/cjs/ws/{index.js.map → index.cjs.map} +0 -0
package/package.json CHANGED
@@ -1,43 +1,51 @@
1
1
  {
2
2
  "name": "beatsaber-bot-core",
3
3
  "description": "Beatsaber bot",
4
- "version": "0.2.0-rc.13",
4
+ "version": "0.2.0-rc.15",
5
5
  "files": [
6
6
  "dist"
7
7
  ],
8
8
  "license": "MIT",
9
+ "type": "module",
9
10
  "author": {
10
11
  "name": "ktKongTong",
11
12
  "email": "kt@ktlab.io"
12
13
  },
13
14
  "exports": {
14
15
  ".": {
15
- "require": "./dist/cjs/index.js",
16
- "types": "./dist/types/index.d.ts"
16
+ "types": "./dist/types/index.d.ts",
17
+ "require": "./dist/cjs/index.cjs",
18
+ "import": "./dist/esm/index.js"
17
19
  },
18
20
  "./interface": {
19
- "require": "./dist/cjs/interface/index.js",
20
- "types": "./dist/types/index.d.ts"
21
+ "types": "./dist/types/index.d.ts",
22
+ "require": "./dist/cjs/interface/index.cjs",
23
+ "import": "./dist/esm/interface/index.js"
21
24
  },
22
25
  "./interface/*": {
23
- "require": "./dist/cjs/interface/**/*.js",
24
- "types": "./dist/types/index.d.ts"
26
+ "types": "./dist/types/index.d.ts",
27
+ "require": "./dist/cjs/interface/**/*.cjs",
28
+ "import": "./dist/esm/interface/**/*.js"
25
29
  },
26
30
  "./service": {
27
- "require": "./dist/cjs/service/*.js",
28
- "types": "./dist/types/index.d.ts"
31
+ "types": "./dist/types/index.d.ts",
32
+ "require": "./dist/cjs/service/*.cjs",
33
+ "import": "./dist/esm/service/*.js"
29
34
  },
30
35
  "./service/*": {
31
- "require": "./dist/cjs/service/*/index.js",
32
- "types": "./dist/types/index.d.ts"
36
+ "types": "./dist/types/index.d.ts",
37
+ "require": "./dist/cjs/service/*/index.cjs",
38
+ "import": "./dist/esm/service/*/index.js"
33
39
  },
34
40
  "./infra": {
35
- "require": "./dist/cjs/infra/index.js",
36
- "types": "./dist/types/index.d.ts"
41
+ "types": "./dist/types/index.d.ts",
42
+ "require": "./dist/cjs/infra/index.cjs",
43
+ "import": "./dist/esm/infra/index.js"
37
44
  },
38
45
  "./infra/*": {
39
- "require": "./dist/cjs/infra/*/index.js",
40
- "types": "./dist/types/index.d.ts"
46
+ "types": "./dist/types/index.d.ts",
47
+ "require": "./dist/cjs/infra/*/index.cjs",
48
+ "import": "./dist/esm/infra/*/index.js"
41
49
  }
42
50
  },
43
51
  "keywords": [
@@ -60,11 +68,13 @@
60
68
  "puppeteer-core": "^24.11.2",
61
69
  "react": "^19",
62
70
  "react-dom": "^19",
63
- "@napi-rs/canvas": "^0.1.73"
71
+ "@napi-rs/canvas": "^0.1.73",
72
+ "zod": "^3.25.71"
64
73
  },
65
74
  "scripts": {
66
- "fix-path-alias": "tsc-alias --outDir dist/cjs && tsc-alias --outDir dist/esm",
75
+ "fix-path-alias": " tsc-alias --outDir dist/esm",
67
76
  "copy-yml-resource": "node scripts/build.mjs",
77
+ "up": "tsup",
68
78
  "build": "tsup && pnpm run copy-yml-resource && pnpm run fix-path-alias",
69
79
  "pub": "pnpm run build && pnpm publish"
70
80
  }
@@ -1 +0,0 @@
1
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/cmd/index.ts"],"sourcesContent":["\nimport IdSearch from '@/cmd/bsmap/id-search'\nimport KeySearch from '@/cmd/bsmap/key-search'\nimport Latest from '@/cmd/bsmap/latest'\nimport Rank from '@/cmd/rank'\nimport Score from '@/cmd/score'\nimport Subscribe from '@/cmd/subscribe'\nimport Subjoin from '@/cmd/subscribe/subjoin'\nimport Subleave from '@/cmd/subscribe/subleave'\nimport Unsubscribe from '@/cmd/subscribe/unsubscribe'\nimport Bind from '@/cmd/bind'\nimport Tmp from '@/cmd/deprecated/tmp'\nimport {Command} from \"@/interface\";\n\nfunction applyCommand<CHANNEL>(...fns: (() => Command<CHANNEL>)[]) {\n return fns.map((fn) => fn())\n}\n\nexport const botCommands = <CHANNEL>() =>\n applyCommand<CHANNEL>(\n IdSearch,\n KeySearch,\n Latest,\n Rank,\n Score,\n Bind,\n Subscribe,\n Subjoin,\n Subleave,\n Unsubscribe,\n Tmp,\n // Config\n )\n\n//transport\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,uBAAqB;AACrB,wBAAsB;AACtB,oBAAmB;AACnB,kBAAiB;AACjB,mBAAkB;AAClB,uBAAsB;AACtB,qBAAoB;AACpB,sBAAqB;AACrB,yBAAwB;AACxB,kBAAiB;AACjB,iBAAgB;AAGhB,SAAS,gBAAyB,KAAiC;AACjE,SAAO,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC;AAC7B;AAEO,MAAM,cAAc,MACzB;AAAA,EACE,iBAAAA;AAAA,EACA,kBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,WAAAC;AAAA;AAEF;","names":["IdSearch","KeySearch","Latest","Rank","Score","Bind","Subscribe","Subjoin","Subleave","Unsubscribe","Tmp"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/components/bl-score-item.tsx"],"sourcesContent":["import { BarChart, Key, Pin, Star, Wrench } from 'lucide-react'\nimport { diffConv, formatRelativeTimeByDay } from '../utils'\nimport {Score} from \"@/service/api/interfaces/beatleader\";\n\nconst getModifiers = (modifiers: string) => {\n return modifiers ? modifiers.split(',') : []\n}\n\nexport default function BeatLeaderItem({\n item,\n}: {\n item: Score & {\n pinned?: boolean\n }\n}) {\n return (\n <div className=\"relative overflow-hidden\">\n <div\n className={'rounded-lg flex bg-black/[.4] space-x-2 backdrop-blur-md'}\n >\n <img\n loading={'eager'}\n src={item.leaderboard.song.coverImage}\n className={'rounded-md h-20 w-20'}\n alt={'score item cover'}\n />\n <div className={'flex flex-col space-y-1 py-0.5'}>\n <div\n className={\n 'font-semibold text-xs text-ellipsis overflow-hidden line-clamp-1 break-all'\n }\n >\n {item.leaderboard.song.name}\n </div>\n <div\n className={\n 'text-xs flex items-center space-x-2 *:flex *:items-center *:space-x-1 '\n }\n >\n <div>\n <span>\n <BarChart className={'w-3 h-3'} />\n </span>\n <span>\n {diffConv(item.leaderboard.difficulty.difficultyName)}\n </span>\n </div>\n <div>\n <span>\n <Star className={'w-3 h-3'} />\n </span>\n <span>\n {item.leaderboard.difficulty.stars?.toFixed(2) ?? 'none'}{' '}\n </span>\n </div>\n <div>\n <span>\n <Key className={'w-3 h-3'} />\n </span>\n <span>\n {item.leaderboard.song.id.toLowerCase().replaceAll('x', '')}\n </span>\n </div>\n </div>\n <div className={'flex space-x-2 text-xs items-center'}>\n <span>\n {(\n (item.baseScore / item.leaderboard.difficulty.maxScore) *\n 100\n ).toFixed(2)}\n %\n </span>\n <span className={'text-orange-200'}>{item.pp.toFixed(2)}PP</span>\n <span className={'text-xs opacity-70'}>\n {formatRelativeTimeByDay(item.timepost * 1000)}\n </span>\n </div>\n <div className={'flex items-center space-x-2'}>\n {getModifiers(item.modifiers).length > 0 && (\n <div className=\"text-xs flex flex-wrap space-x-2 items-center\">\n <Wrench className=\"h-3 w-3\" />\n {getModifiers(item.modifiers).map((modifier) => (\n <span key={modifier}>{modifier}</span>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n\n <div className=\"absolute right-1 bottom-1 text-white flex text-xs space-x-1 items-center\">\n {item.fullCombo && (\n <span className=\"from-blue-300 to-red-300 bg-gradient-to-r bg-clip-text text-transparent\">\n FC\n </span>\n )}\n {item.pinned && <Pin className=\"rotate-45 h-3 w-3 my-auto\" />}\n </div>\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBQ;AApBR,0BAAiD;AACjD,mBAAkD;AAGlD,MAAM,eAAe,CAAC,cAAsB;AAC1C,SAAO,YAAY,UAAU,MAAM,GAAG,IAAI,CAAC;AAC7C;AAEe,SAAR,eAAgC;AAAA,EACrC;AACF,GAIG;AAdH;AAeE,SACE,6CAAC,SAAI,WAAU,6BACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,QAEX;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS;AAAA,cACT,KAAK,KAAK,YAAY,KAAK;AAAA,cAC3B,WAAW;AAAA,cACX,KAAK;AAAA;AAAA,UACP;AAAA,UACA,6CAAC,SAAI,WAAW,kCACd;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WACE;AAAA,gBAGD,eAAK,YAAY,KAAK;AAAA;AAAA,YACzB;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WACE;AAAA,gBAGF;AAAA,+DAAC,SACC;AAAA,gEAAC,UACC,sDAAC,gCAAS,WAAW,WAAW,GAClC;AAAA,oBACA,4CAAC,UACE,qCAAS,KAAK,YAAY,WAAW,cAAc,GACtD;AAAA,qBACF;AAAA,kBACA,6CAAC,SACC;AAAA,gEAAC,UACC,sDAAC,4BAAK,WAAW,WAAW,GAC9B;AAAA,oBACA,6CAAC,UACE;AAAA,uCAAK,YAAY,WAAW,UAA5B,mBAAmC,QAAQ,OAA3C,YAAiD;AAAA,sBAAQ;AAAA,uBAC5D;AAAA,qBACF;AAAA,kBACA,6CAAC,SACC;AAAA,gEAAC,UACC,sDAAC,2BAAI,WAAW,WAAW,GAC7B;AAAA,oBACA,4CAAC,UACE,eAAK,YAAY,KAAK,GAAG,YAAY,EAAE,WAAW,KAAK,EAAE,GAC5D;AAAA,qBACF;AAAA;AAAA;AAAA,YACF;AAAA,YACA,6CAAC,SAAI,WAAW,uCACd;AAAA,2DAAC,UAEI;AAAA,sBAAK,YAAY,KAAK,YAAY,WAAW,WAC9C,KACA,QAAQ,CAAC;AAAA,gBAAE;AAAA,iBAEf;AAAA,cACA,6CAAC,UAAK,WAAW,mBAAoB;AAAA,qBAAK,GAAG,QAAQ,CAAC;AAAA,gBAAE;AAAA,iBAAE;AAAA,cAC1D,4CAAC,UAAK,WAAW,sBACd,oDAAwB,KAAK,WAAW,GAAI,GAC/C;AAAA,eACF;AAAA,YACA,4CAAC,SAAI,WAAW,+BACb,uBAAa,KAAK,SAAS,EAAE,SAAS,KACrC,6CAAC,SAAI,WAAU,iDACb;AAAA,0DAAC,8BAAO,WAAU,WAAU;AAAA,cAC3B,aAAa,KAAK,SAAS,EAAE,IAAI,CAAC,aACjC,4CAAC,UAAqB,sBAAX,QAAoB,CAChC;AAAA,eACH,GAEJ;AAAA,aACF;AAAA;AAAA;AAAA,IACF;AAAA,IAEA,6CAAC,SAAI,WAAU,4EACZ;AAAA,WAAK,aACJ,4CAAC,UAAK,WAAU,2EAA0E,gBAE1F;AAAA,MAED,KAAK,UAAU,4CAAC,2BAAI,WAAU,6BAA4B;AAAA,OAC7D;AAAA,KACF;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/components/scoreItem.tsx"],"sourcesContent":["/** @jsxImportSource react */\nimport { BarChart, Key, Star, Wrench } from 'lucide-react'\nimport { ScoreSaberItem } from '@/service/api/interfaces/scoresaber'\n\nconst diffConv = (diff: string) => {\n if (diff.includes('ExpertPlus')) {\n return 'E+'\n } else if (diff.includes('Expert')) {\n return 'EX'\n } else if (diff.includes('Hard')) {\n return 'H'\n } else if (diff.includes('Normal')) {\n return 'N'\n }\n return 'E'\n}\nconst getModifiers = (modifiers: string) => {\n return modifiers ? modifiers.split(',') : []\n}\nexport default function ScoreItem({\n scoreItem,\n}: {\n scoreItem: ScoreSaberItem\n}) {\n return (\n <div className={'relative'}>\n <div\n className={\n 'rounded-lg flex bg-black/[.4] space-x-2 backdrop-blur-md overflow-hidden'\n }\n >\n <img\n loading={'eager'}\n src={scoreItem.leaderboard.coverImage}\n className={'rounded-md h-20 w-20'}\n />\n <div className={'flex flex-col space-y-1 py-0.5'}>\n <div\n className={\n 'font-semibold text-xs text-ellipsis overflow-hidden line-clamp-1 break-all'\n }\n >\n {scoreItem.leaderboard.songName}\n </div>\n <div\n className={\n 'text-xs flex items-center space-x-2 *:flex *:items-center *:space-x-1 '\n }\n >\n <div>\n <span>\n <BarChart className={'w-3 h-3'} />\n </span>\n <span>\n {diffConv(scoreItem.leaderboard.difficulty.difficultyRaw)}\n </span>\n </div>\n <div>\n <span>\n <Star className={'w-3 h-3'} />\n </span>\n <span>{scoreItem.leaderboard.stars} </span>\n </div>\n <div>\n <span>\n <Key className={'w-3 h-3'} />\n </span>\n <span>{scoreItem.mapId ?? 'unknown'}</span>\n </div>\n </div>\n <div className={'flex space-x-2 text-xs'}>\n <span>\n {(\n (scoreItem.score.baseScore / scoreItem.leaderboard.maxScore) *\n 100\n ).toFixed(2)}\n %\n </span>\n <span className={'text-orange-200'}>\n {scoreItem.score.pp.toFixed(1)}\n PP\n </span>\n </div>\n {getModifiers(scoreItem.score.modifiers).length > 0 && (\n <div className=\"text-xs flex flex-wrap space-x-2 items-center\">\n <Wrench className=\"h-3 w-3\" />\n {getModifiers(scoreItem.score.modifiers).map((modifier) => (\n <span key={modifier}>{modifier}</span>\n ))}\n </div>\n )}\n </div>\n </div>\n <div className=\"absolute right-1 bottom-1 text-white flex text-xs space-x-1 items-center\">\n {scoreItem.score.fullCombo && (\n <span className=\"from-blue-300 to-red-300 bg-gradient-to-r bg-clip-text text-transparent\">\n FC\n </span>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BQ;AA9BR,0BAA4C;AAG5C,MAAM,WAAW,CAAC,SAAiB;AACjC,MAAI,KAAK,SAAS,YAAY,GAAG;AAC/B,WAAO;AAAA,EACT,WAAW,KAAK,SAAS,QAAQ,GAAG;AAClC,WAAO;AAAA,EACT,WAAW,KAAK,SAAS,MAAM,GAAG;AAChC,WAAO;AAAA,EACT,WAAW,KAAK,SAAS,QAAQ,GAAG;AAClC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AACA,MAAM,eAAe,CAAC,cAAsB;AAC1C,SAAO,YAAY,UAAU,MAAM,GAAG,IAAI,CAAC;AAC7C;AACe,SAAR,UAA2B;AAAA,EAChC;AACF,GAEG;AAvBH;AAwBE,SACE,6CAAC,SAAI,WAAW,YACd;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WACE;AAAA,QAGF;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS;AAAA,cACT,KAAK,UAAU,YAAY;AAAA,cAC3B,WAAW;AAAA;AAAA,UACb;AAAA,UACA,6CAAC,SAAI,WAAW,kCACd;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WACE;AAAA,gBAGD,oBAAU,YAAY;AAAA;AAAA,YACzB;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WACE;AAAA,gBAGF;AAAA,+DAAC,SACC;AAAA,gEAAC,UACC,sDAAC,gCAAS,WAAW,WAAW,GAClC;AAAA,oBACA,4CAAC,UACE,mBAAS,UAAU,YAAY,WAAW,aAAa,GAC1D;AAAA,qBACF;AAAA,kBACA,6CAAC,SACC;AAAA,gEAAC,UACC,sDAAC,4BAAK,WAAW,WAAW,GAC9B;AAAA,oBACA,6CAAC,UAAM;AAAA,gCAAU,YAAY;AAAA,sBAAM;AAAA,uBAAC;AAAA,qBACtC;AAAA,kBACA,6CAAC,SACC;AAAA,gEAAC,UACC,sDAAC,2BAAI,WAAW,WAAW,GAC7B;AAAA,oBACA,4CAAC,UAAM,0BAAU,UAAV,YAAmB,WAAU;AAAA,qBACtC;AAAA;AAAA;AAAA,YACF;AAAA,YACA,6CAAC,SAAI,WAAW,0BACd;AAAA,2DAAC,UAEI;AAAA,2BAAU,MAAM,YAAY,UAAU,YAAY,WACnD,KACA,QAAQ,CAAC;AAAA,gBAAE;AAAA,iBAEf;AAAA,cACA,6CAAC,UAAK,WAAW,mBACd;AAAA,0BAAU,MAAM,GAAG,QAAQ,CAAC;AAAA,gBAAE;AAAA,iBAEjC;AAAA,eACF;AAAA,YACC,aAAa,UAAU,MAAM,SAAS,EAAE,SAAS,KAChD,6CAAC,SAAI,WAAU,iDACb;AAAA,0DAAC,8BAAO,WAAU,WAAU;AAAA,cAC3B,aAAa,UAAU,MAAM,SAAS,EAAE,IAAI,CAAC,aAC5C,4CAAC,UAAqB,sBAAX,QAAoB,CAChC;AAAA,eACH;AAAA,aAEJ;AAAA;AAAA;AAAA,IACF;AAAA,IACA,4CAAC,SAAI,WAAU,4EACZ,oBAAU,MAAM,aACf,4CAAC,UAAK,WAAU,2EAA0E,gBAE1F,GAEJ;AAAA,KACF;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/components/ss-score-item.tsx"],"sourcesContent":["import { BarChart, Key, Star, Wrench } from 'lucide-react'\nimport { diffConv, formatRelativeTimeByDay } from '../utils'\nimport React from 'react'\nimport { ScoreSaberItem } from '@/service/api/interfaces/scoresaber'\n\nconst getModifiers = (modifiers: string) => {\n return modifiers ? modifiers.split(',') : []\n}\nexport default function SsScoreItem({\n scoreItem,\n}: {\n scoreItem: ScoreSaberItem\n}) {\n return (\n <div className={'relative'}>\n <div\n className={\n 'rounded-lg flex bg-black/[.4] space-x-2 backdrop-blur-md overflow-hidden'\n }\n >\n <img\n loading={'eager'}\n src={scoreItem.leaderboard.coverImage}\n className={'rounded-md h-20 w-20'}\n />\n <div className={'flex flex-col space-y-1 py-0.5'}>\n <div\n className={\n 'font-semibold text-xs text-ellipsis overflow-hidden line-clamp-1 break-all'\n }\n >\n {scoreItem.leaderboard.songName}\n </div>\n <div\n className={\n 'text-xs flex items-center space-x-2 *:flex *:items-center *:space-x-1 '\n }\n >\n <div>\n <span>\n <BarChart className={'w-3 h-3'} />\n </span>\n <span>\n {diffConv(scoreItem.leaderboard.difficulty.difficultyRaw)}\n </span>\n </div>\n <div>\n <span>\n <Star className={'w-3 h-3'} />\n </span>\n <span>{scoreItem.leaderboard.stars} </span>\n </div>\n <div>\n <span>\n <Key className={'w-3 h-3'} />\n </span>\n <span>{scoreItem.mapId ?? 'unknown'}</span>\n </div>\n </div>\n <div className={'flex space-x-2 text-xs'}>\n <span>\n {(\n (scoreItem.score.baseScore / scoreItem.leaderboard.maxScore) *\n 100\n ).toFixed(2)}\n %\n </span>\n <span className={'text-orange-200'}>\n {scoreItem.score.pp.toFixed(1)}\n PP\n </span>\n <span className={'opacity-70'}>\n {formatRelativeTimeByDay(scoreItem.score.timeSet)}\n </span>\n </div>\n {getModifiers(scoreItem.score.modifiers).length > 0 && (\n <div className=\"text-xs flex flex-wrap space-x-2 items-center\">\n <Wrench className=\"h-3 w-3\" />\n {getModifiers(scoreItem.score.modifiers).map((modifier) => (\n <span key={modifier}>{modifier}</span>\n ))}\n </div>\n )}\n </div>\n </div>\n <div className=\"absolute right-1 bottom-1 text-white flex text-xs space-x-1 items-center\">\n {scoreItem.score.fullCombo && (\n <span className=\"from-blue-300 to-red-300 bg-gradient-to-r bg-clip-text text-transparent\">\n FC\n </span>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBQ;AApBR,0BAA4C;AAC5C,mBAAkD;AAIlD,MAAM,eAAe,CAAC,cAAsB;AAC1C,SAAO,YAAY,UAAU,MAAM,GAAG,IAAI,CAAC;AAC7C;AACe,SAAR,YAA6B;AAAA,EAClC;AACF,GAEG;AAZH;AAaE,SACE,6CAAC,SAAI,WAAW,YACd;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WACE;AAAA,QAGF;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS;AAAA,cACT,KAAK,UAAU,YAAY;AAAA,cAC3B,WAAW;AAAA;AAAA,UACb;AAAA,UACA,6CAAC,SAAI,WAAW,kCACd;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WACE;AAAA,gBAGD,oBAAU,YAAY;AAAA;AAAA,YACzB;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WACE;AAAA,gBAGF;AAAA,+DAAC,SACC;AAAA,gEAAC,UACC,sDAAC,gCAAS,WAAW,WAAW,GAClC;AAAA,oBACA,4CAAC,UACE,qCAAS,UAAU,YAAY,WAAW,aAAa,GAC1D;AAAA,qBACF;AAAA,kBACA,6CAAC,SACC;AAAA,gEAAC,UACC,sDAAC,4BAAK,WAAW,WAAW,GAC9B;AAAA,oBACA,6CAAC,UAAM;AAAA,gCAAU,YAAY;AAAA,sBAAM;AAAA,uBAAC;AAAA,qBACtC;AAAA,kBACA,6CAAC,SACC;AAAA,gEAAC,UACC,sDAAC,2BAAI,WAAW,WAAW,GAC7B;AAAA,oBACA,4CAAC,UAAM,0BAAU,UAAV,YAAmB,WAAU;AAAA,qBACtC;AAAA;AAAA;AAAA,YACF;AAAA,YACA,6CAAC,SAAI,WAAW,0BACd;AAAA,2DAAC,UAEI;AAAA,2BAAU,MAAM,YAAY,UAAU,YAAY,WACnD,KACA,QAAQ,CAAC;AAAA,gBAAE;AAAA,iBAEf;AAAA,cACA,6CAAC,UAAK,WAAW,mBACd;AAAA,0BAAU,MAAM,GAAG,QAAQ,CAAC;AAAA,gBAAE;AAAA,iBAEjC;AAAA,cACA,4CAAC,UAAK,WAAW,cACd,oDAAwB,UAAU,MAAM,OAAO,GAClD;AAAA,eACF;AAAA,YACC,aAAa,UAAU,MAAM,SAAS,EAAE,SAAS,KAChD,6CAAC,SAAI,WAAU,iDACb;AAAA,0DAAC,8BAAO,WAAU,WAAU;AAAA,cAC3B,aAAa,UAAU,MAAM,SAAS,EAAE,IAAI,CAAC,aAC5C,4CAAC,UAAqB,sBAAX,QAAoB,CAChC;AAAA,eACH;AAAA,aAEJ;AAAA;AAAA;AAAA,IACF;AAAA,IACA,4CAAC,SAAI,WAAU,4EACZ,oBAAU,MAAM,aACf,4CAAC,UAAK,WAAU,2EAA0E,gBAE1F,GAEJ;AAAA,KACF;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/utils/format.ts"],"sourcesContent":["import dayjs from 'dayjs'\nimport duration from 'dayjs/plugin/duration'\nimport relativeTime from 'dayjs/plugin/relativeTime'\nimport zh from 'dayjs/locale/zh-cn'\ndayjs.extend(duration)\ndayjs.extend(relativeTime)\nexport const formatDuration = (duration: number) => {\n const d = dayjs.duration(duration, 'second')\n return d.format('m[m]s[s]')\n}\n\n// export const formatDuration = (duration: number) => {\n// return dayjs.duration(duration,'seconds').format('mm:ss')\n// }\n\nexport const formatTime = (time: string) => {\n return dayjs(time).locale(zh).fromNow()\n}\n\nexport function formatRelativeTimeByDay(time: string | number | Date) {\n let res = dayjs().diff(dayjs(time), 'd')\n let unit = 'd'\n if (res <= 0) {\n res = dayjs().diff(dayjs(time), 'h')\n unit = 'h'\n }\n if (res <= 0) {\n res = dayjs().diff(dayjs(time), 'm')\n unit = 'm'\n }\n return `${res}${unit}`\n}\n\nexport const formatNumber = (number: number) => {\n // 1.11w\n try {\n if (number > 10000) {\n return `${(number / 10000.0).toFixed(2)}w`\n }\n // 1.11k\n if (number > 1000) {\n return `${(number / 1000.0).toFixed(2)}k`\n }\n return number.toString()\n } catch (e) {\n return '0'\n }\n}\n\nexport function numberWithCommas(x: number) {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\n}\nexport const formatDate = (time: Date | undefined, template?: string) => {\n if (!time) return undefined\n return dayjs(time).format(template ?? 'YYYY-MM-DD')\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,sBAAqB;AACrB,0BAAyB;AACzB,mBAAe;AACf,aAAAA,QAAM,OAAO,gBAAAC,OAAQ;AACrB,aAAAD,QAAM,OAAO,oBAAAE,OAAY;AAClB,MAAM,iBAAiB,CAACD,cAAqB;AAClD,QAAM,IAAI,aAAAD,QAAM,SAASC,WAAU,QAAQ;AAC3C,SAAO,EAAE,OAAO,UAAU;AAC5B;AAMO,MAAM,aAAa,CAAC,SAAiB;AAC1C,aAAO,aAAAD,SAAM,IAAI,EAAE,OAAO,aAAAG,OAAE,EAAE,QAAQ;AACxC;AAEO,SAAS,wBAAwB,MAA8B;AACpE,MAAI,UAAM,aAAAH,SAAM,EAAE,SAAK,aAAAA,SAAM,IAAI,GAAG,GAAG;AACvC,MAAI,OAAO;AACX,MAAI,OAAO,GAAG;AACZ,cAAM,aAAAA,SAAM,EAAE,SAAK,aAAAA,SAAM,IAAI,GAAG,GAAG;AACnC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,GAAG;AACZ,cAAM,aAAAA,SAAM,EAAE,SAAK,aAAAA,SAAM,IAAI,GAAG,GAAG;AACnC,WAAO;AAAA,EACT;AACA,SAAO,GAAG,GAAG,GAAG,IAAI;AACtB;AAEO,MAAM,eAAe,CAAC,WAAmB;AAE9C,MAAI;AACF,QAAI,SAAS,KAAO;AAClB,aAAO,IAAI,SAAS,KAAS,QAAQ,CAAC,CAAC;AAAA,IACzC;AAEA,QAAI,SAAS,KAAM;AACjB,aAAO,IAAI,SAAS,KAAQ,QAAQ,CAAC,CAAC;AAAA,IACxC;AACA,WAAO,OAAO,SAAS;AAAA,EACzB,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;AAEO,SAAS,iBAAiB,GAAW;AAC1C,SAAO,EAAE,SAAS,EAAE,QAAQ,yBAAyB,GAAG;AAC1D;AACO,MAAM,aAAa,CAAC,MAAwB,aAAsB;AACvE,MAAI,CAAC,KAAM,QAAO;AAClB,aAAO,aAAAA,SAAM,IAAI,EAAE,OAAO,8BAAY,YAAY;AACpD;","names":["dayjs","duration","relativeTime","zh"]}
@@ -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 config_exports = {};
15
- module.exports = __toCommonJS(config_exports);
16
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/config.ts"],"sourcesContent":["import type { S3Config, RenderConfig } from \"@/infra\";\n\n\nexport interface Config {\n s3: {\n enabled: boolean\n } & S3Config\n render: RenderConfig\n minRawMatchMapIdLength: number\n\n beatSaverHost: string\n beatSaverWSURL: string\n bsOauthClientId: string\n bsOauthClientSecret: string\n\n blOauthClientId: string\n blOauthClientSecret: string\n bsNotifyMonitorCron: ScheduleTaskConfig\n tokenRefreshCron: ScheduleTaskConfig\n tempCron: ScheduleTaskConfig\n}\n\ninterface ScheduleTaskConfig {\n cron: string\n enabled: boolean\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import {botCommands} from \"./cmd\";\nimport {getScheduleTasks} from \"./schedules\";\nimport {Config} from \"./config\";\n\nexport * from './interface'\nexport * from './schedules'\nexport * from './config'\nexport * from './cmd'\nexport * from './ws'\nexport * from './utils'\nexport * from './service'\nexport * from './infra'\n\nexport const getBot = <T>(config: Config) => ({\n commands: botCommands<T>(),\n schedule: getScheduleTasks(config),\n})\n\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAA0B;AAC1B,uBAA+B;AAG/B,0BAAc,wBAJd;AAKA,0BAAc,wBALd;AAMA,0BAAc,qBANd;AAOA,0BAAc,kBAPd;AAQA,0BAAc,iBARd;AASA,0BAAc,oBATd;AAUA,0BAAc,sBAVd;AAWA,0BAAc,oBAXd;AAaO,MAAM,SAAS,CAAI,YAAoB;AAAA,EAC5C,cAAU,wBAAe;AAAA,EACzB,cAAU,mCAAiB,MAAM;AACnC;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/infra/index.ts"],"sourcesContent":["export * from './support/render'\nexport { I18nService } from './i18n'\nexport { S3Service, S3Config } from './s3'\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAc,6BAAd;AACA,kBAA4B;AAC5B,gBAAoC;","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/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' | 'custom'\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(accountId: string, 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 \"screenshotOptions\": {\n quality: 90\n },\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\n\nexport const getImageRender = (cfg: RenderConfig & {render?: ImageRender,browserGetter?: () => Promise<Browser>}) => {\n if(cfg.mode === 'cf') {\n return new CFBrowserRendering(cfg.cfAccountId, cfg.cfAPIKey)\n }\n if(cfg.mode === 'custom') {\n if(!cfg.render) throw new Error(\"please provide custom img render\")\n return cfg.render\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\nexport type CreateImageRenderOption = Parameters<typeof getImageRender>[0]\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAA2D;AAC3D,4BAAiC;AACjC,mBAAoB;AAgBb,MAAM,mBAA0C;AAAA,EAErD,YAAY,WAAmB,UAAkB;AADjD;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;AAAA,QACJ,qBAAqB;AAAA,UACnB,SAAS;AAAA,QACX;AAAA,SACG,OAJC;AAAA,QAKJ,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;AAIO,MAAM,iBAAiB,CAAC,QAAsF;AACnH,MAAG,IAAI,SAAS,MAAM;AACpB,WAAO,IAAI,mBAAmB,IAAI,aAAa,IAAI,QAAQ;AAAA,EAC7D;AACA,MAAG,IAAI,SAAS,UAAU;AACxB,QAAG,CAAC,IAAI,OAAQ,OAAM,IAAI,MAAM,kCAAkC;AAClE,WAAQ,IAAI;AAAA,EACd;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/schedules/index.ts"],"sourcesContent":["import { Config } from '@/config'\nimport { LBScoreMonitor } from './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 enabled: config.tempCron.enabled,\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,SAAS,OAAO,SAAS;AAAA,IAC3B;AAAA,EACF;AACF;","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 \"./interfaces/beatsaver\";\nimport {ScoreSaberItem} from \"./interfaces/scoresaber\";\nimport {Leaderboard} from \"./interfaces/beatleader\";\nimport {NotFoundError} from \"@/infra/support/fetch/error\";\nimport {sortScore} from \"./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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAkF;AAGlF,oBAAuE;AAIvE,mBAA4B;AAC5B,uBAAwB;AACxB,yBAAqB;AAQd,MAAM,WAAW;AAAA,EAKtB,YAAY,KAAa,QAAgB;AAJzC;AACA;AACA;AACA;AAEE,SAAK,YAAY,IAAI,4BAAgB,EAAC,OAAM,CAAC;AAC7C,SAAK,aAAa,IAAI,6BAAiB,EAAC,OAAM,CAAC;AAC/C,SAAK,aAAa,IAAI,6BAAiB,MAAM;AAC7C,SAAK,WAAW,IAAI,2BAAe,MAAM;AAAA,EAC3C;AAAA,EACM,8BAA8B,WAAmB;AAAA;AACrD,YAAM,CAAC,UAAU,cAAc,YAAY,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC/D,KAAK,WAAW,cAAc,SAAS;AAAA,QACvC,KAAK,WAAW,gBAAgB,SAAS;AAAA,QACzC,KAAK,WAAW,sBAAsB,SAAS;AAAA,MACjD,CAAC;AACD,UAAI,EAAE,YAAY,eAAe;AAC/B,cAAM,IAAI,gCAAkB,EAAE,UAAU,CAAC;AAAA,MAC3C;AACA,YAAM,iBAAiB,aAAa,KAAK;AAAA,QACvC,CAAC,SAAS,CAAC,aAAa,KAAK,CAAC,WAAW,OAAO,OAAO,KAAK,EAAE;AAAA,MAChE;AACA,YAAM,SAAS,aAAa,OAAO,cAAc,EAAE,MAAM,GAAG,EAAE;AAC9D,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EACM,8BAA8B,WAAmB;AAAA;AAAA,IAEvD;AAAA;AAAA,EACM,2BACJ,UACA,OACA,QACsB;AAAA;AACtB,YAAM,MAAM,MAAM,KAAK,UAAU,cAAc,KAAK;AACpD,UAAI,CAAC,KAAK;AACR,cAAM,IAAI,iCAAmB;AAAA,MAC/B;AACA,YAAM,OAAO,IAAI,SAAS,CAAC,EAAE;AAC7B,UAAI,OAAO,IAAI,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC,QAAQ;AAAA,QAC5C,MAAM,GAAG;AAAA,QACT,MAAM,GAAG;AAAA,QACT;AAAA,QACA,UAAU;AAAA,QACV,oBAAoB;AAAA,MACtB,EAAE;AACF,UAAI,UAAU,OAAO,YAAY;AAC/B,eAAO,KAAK,OAAO,CAAC,SAAS,KAAK,QAAQ,OAAO,UAAU;AAAA,MAC7D;AACA,UAAI,UAAU,OAAO,MAAM;AACzB,eAAO,KAAK,OAAO,CAAC,SAAS,KAAK,QAAQ,OAAO,IAAI;AAAA,MACvD;AACA,YAAM,MAAM,MAAM,QAAQ,WAAW,KAAK;AAAA,QACxC,CAAC,OAAO,KAAK,WAAW,eAAe,EAAE;AAAA,MAAC,CAAC;AAC7C,YAAM,SAAS,IACZ,OAAO,CAAC,SAAS,KAAK,WAAW,WAAW,EAC5C,IAAI,CAAI,OAAkC,GAAG,KAAK;AACrD,UAAI,OAAO,SAAS,GAAG;AACrB,cAAM,IAAI,2BAAc;AAAA,MAC1B;AACA,aAAO,KAAK,0BAAS;AACrB,aAAO,OAAO,CAAC;AAAA,IACjB;AAAA;AAAA,EAEM,0CACJ,eACA,MACA,YACA;AAAA;AACA,YAAM,OAAO,KAAK,KAAK,OAAO,EAAE;AAChC,YAAM,OAAO,OAAO;AACpB,UAAI,aAAa;AACjB,UAAI,OAAO,GAAG;AACZ,qBAAa;AAAA,MACf;AACA,YAAM,CAAC,aAAa,WAAW,IAAI,MAAM,QAAQ,IAAI;AAAA,QACnD,KAAK,WAAW,eAAe,eAAe;AAAA,UAC5C,oBAAoB;AAAA,UACpB,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,WAAW;AAAA,QACb,CAAC;AAAA,QACD,KAAK,WAAW,eAAe,eAAe;AAAA,UAC5C,oBAAoB;AAAA,UACpB;AAAA,UACA,QAAQ;AAAA,UACR,OAAO;AAAA,QACT,CAAC;AAAA,MACH,CAAC;AACD,YAAM,eAAe,YAAY,KAAK;AACtC,aAAO;AAAA,QACL;AAAA,QACA,cAAc,YAAY,OAAO,MAAM,YAAY,aAAa,CAAC;AAAA,QACjE,iBAAiB,YAAY;AAAA,MAC/B;AAAA,IACF;AAAA;AAAA,EACM,0BAA0B,SAAiB;AAAA;AArHnD;AAsHI,YAAM,MAAM,MAAM,KAAK,WAAW,aAAa,OAAO;AACtD,YAAM,WAAW,IAAI;AACrB,YAAM,cAAc,MAAM,MAAM,QAAQ;AACxC,YAAM,OAAO,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AAClD,oBAAY,YAAY,EAAE,KAAK,CAACA,aAAQ,2BAAOA,MAAK,OAAO,CAAC;AAC5D,mBAAW,MAAM,OAAO,gBAAgB,GAAG,GAAI;AAAA,MACjD,CAAC;AACD,YAAM,YAAY,MAAM;AAAA,QACtB,yCAAyC,OAAO;AAAA,MAClD,EAAE,KAAK,CAACA,SAAQA,KAAI,KAAK,CAAC;AAC1B,YAAM,MAAK,SAAI,KAAK,GAAG,MAAM,GAAG,MAArB,mBAAyB;AACpC,YAAM,QAAQ,MAAM,KAAK,UAAU,cAAc,EAAE;AACnD,aAAO;AAAA,QACL,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EACM,mCAAmC,KAAa;AAAA;AACpD,YAAM,CAAC,UAAU,MAAM,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC3C,KAAK,WAAW,iBAAiB,GAAG;AAAA,QACpC,KAAK,WAAW,kBAAkB,KAAK,GAAG,EAAE,EACzC,KAAK,CAACA,SAAQA,QAAA,gBAAAA,KAAK,YAAY;AAAA,MACpC,CAAC;AACD,UAAI,CAAC,UAAU,CAAC,UAAU;AACxB,cAAM,IAAI,gCAAkB,EAAE,WAAW,IAAI,CAAC;AAAA,MAChD;AACA,YAAM,SAAS,OAAO,IAAI,CAAC,OAAO,GAAG,YAAY,QAAQ;AAEzD,UAAI,WAAW,MAAM,KAAK,UAAU,gBAAgB,MAAM;AAC1D,UAAI,SAAS,IAAI;AACf,cAAM,MAAM;AACZ,mBAAW,CAAC;AACZ,iBAAS,IAAI,SAAS,CAAC,EAAE,IAAI,IAAI;AAAA,MACnC;AACA,YAAM,MAAM,OAAO;AAAA,QACjB,CAAC,OAAI;AA3JX;AA4JS;AAAA,YACC,QAAQ,cACN,GAAG,YAAY,SAAS,YAAY,CACpC,MAFM,mBAEH;AAAA,aACF;AAAA;AAAA,MAET;AACA,aAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA;AACF;","names":["res"]}
@@ -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 \"../preference\";\nimport {ImageRenderError, RequestError} from \"@/infra/errors\";\nimport createQrcode from \"@/components/utils/qrcode\";\nimport {APIService} from \"../api\";\nimport {BSMap} from \"../api/interfaces/beatsaver\";\nimport {CreateImageRenderOption, getImageRender, 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\n static create(imgRenderConfig: CreateImageRenderOption, api: APIService) {\n return new RenderService(api, getImageRender(imgRenderConfig))\n }\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 renderOption.onRenderStart?.()\n try {\n return this.imageRender.url2img(url, renderOption)\n }catch (e) {\n renderOption?.onRenderError?.(e)\n }\n }\n}\n"],"mappings":"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","names":["createQrcode"]}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=bl-filter.js.map
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes