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
@@ -35,8 +35,8 @@ var __async = (__this, __arguments, generator) => {
35
35
  step((generator = generator.apply(__this, __arguments)).next());
36
36
  });
37
37
  };
38
- import { createFetch } from "../../../infra/support/fetch";
39
- import { NotFoundError } from "../../../infra/support/fetch/error";
38
+ import { createFetch } from "../../../infra/support/fetch/index.js";
39
+ import { NotFoundError } from "../../../infra/support/fetch/error.js";
40
40
  class BeatSaverClient {
41
41
  constructor(opt) {
42
42
  __publicField(this, "f");
@@ -1,5 +1,5 @@
1
- export * from "./ssclient";
2
- export * from "./blclient";
3
- export * from "./aioclient";
4
- export * from "./bsclient";
1
+ export * from "./ssclient.js";
2
+ export * from "./blclient.js";
3
+ export * from "./aioclient.js";
4
+ export * from "./bsclient.js";
5
5
  //# sourceMappingURL=index.js.map
@@ -21,8 +21,8 @@ var __async = (__this, __arguments, generator) => {
21
21
  step((generator = generator.apply(__this, __arguments)).next());
22
22
  });
23
23
  };
24
- import { createFetch } from "../../../infra/support/fetch";
25
- import { NotFoundError } from "../../../infra/support/fetch/error";
24
+ import { createFetch } from "../../../infra/support/fetch/index.js";
25
+ import { NotFoundError } from "../../../infra/support/fetch/error.js";
26
26
  class ScoreSaberClient {
27
27
  constructor(logger) {
28
28
  __publicField(this, "f");
@@ -35,19 +35,28 @@ var __async = (__this, __arguments, generator) => {
35
35
  step((generator = generator.apply(__this, __arguments)).next());
36
36
  });
37
37
  };
38
- import { AIOSaberClient, BeatLeaderClient, BeatSaverClient, ScoreSaberClient } from "./base";
39
- import { BLIDNotFoundError, MapIdNotFoundError, SSIDNotFoundError } from "../../infra/errors";
40
- import { NotFoundError } from "../../infra/support/fetch/error";
41
- import { sortScore } from "./sortScore";
42
- import { decode } from "../../components/utils/bl/bsorDecoder";
38
+ import { AIOSaberClient, BeatLeaderClient, BeatSaverClient, ScoreSaberClient } from "./base/index.js";
39
+ import { BLIDNotFoundError, MapIdNotFoundError, SSIDNotFoundError } from "../../infra/errors/index.js";
40
+ import { NotFoundError } from "../../infra/support/fetch/error.js";
41
+ import { sortScore } from "./sortScore.js";
42
+ import { decode } from "../../components/utils/bl/bsorDecoder.js";
43
43
  class APIService {
44
44
  constructor(cfg, logger) {
45
45
  __publicField(this, "BeatLeader");
46
46
  __publicField(this, "ScoreSaber");
47
47
  __publicField(this, "BeatSaver");
48
48
  __publicField(this, "AIOSaber");
49
- this.BeatSaver = new BeatSaverClient({ logger });
50
- this.BeatLeader = new BeatLeaderClient({ logger });
49
+ this.BeatSaver = new BeatSaverClient({
50
+ logger,
51
+ host: cfg.beatsaver.host,
52
+ client_id: cfg.beatsaver.oauthClientId,
53
+ client_secret: cfg.beatsaver.oauthClientSecret
54
+ });
55
+ this.BeatLeader = new BeatLeaderClient({
56
+ logger,
57
+ client_id: cfg.beatleader.oauthClientId,
58
+ client_secret: cfg.beatleader.oauthClientSecret
59
+ });
51
60
  this.ScoreSaber = new ScoreSaberClient(logger);
52
61
  this.AIOSaber = new AIOSaberClient(logger);
53
62
  }
@@ -1 +1 @@
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":"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","names":["res"]}
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({\n logger,\n host: cfg.beatsaver.host,\n client_id: cfg.beatsaver.oauthClientId,\n client_secret: cfg.beatsaver.oauthClientSecret\n })\n this.BeatLeader = new BeatLeaderClient({\n logger,\n client_id: cfg.beatleader.oauthClientId,\n client_secret: cfg.beatleader.oauthClientSecret\n })\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,SAAQ,gBAAgB,kBAAkB,iBAAiB,wBAAuB;AAGlF,SAAQ,mBAAmB,oBAAoB,yBAAwB;AAIvE,SAAQ,qBAAoB;AAC5B,SAAQ,iBAAgB;AACxB,SAAQ,cAAa;AAQd,MAAM,WAAW;AAAA,EAKtB,YAAY,KAAa,QAAgB;AAJzC;AACA;AACA;AACA;AAEE,SAAK,YAAY,IAAI,gBAAgB;AAAA,MACnC;AAAA,MACA,MAAM,IAAI,UAAU;AAAA,MACpB,WAAW,IAAI,UAAU;AAAA,MACzB,eAAe,IAAI,UAAU;AAAA,IAC/B,CAAC;AACD,SAAK,aAAa,IAAI,iBAAiB;AAAA,MACrC;AAAA,MACA,WAAW,IAAI,WAAW;AAAA,MAC1B,eAAe,IAAI,WAAW;AAAA,IAChC,CAAC;AACD,SAAK,aAAa,IAAI,iBAAiB,MAAM;AAC7C,SAAK,WAAW,IAAI,eAAe,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,kBAAkB,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,mBAAmB;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,cAAc;AAAA,MAC1B;AACA,aAAO,KAAK,SAAS;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;AA9HnD;AA+HI,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,SAAQ,OAAOA,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,kBAAkB,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;AApKX;AAqKS;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,6 +1,6 @@
1
- export * from "./bsor";
2
- export * from "./req";
3
- export * from "./score";
4
- export * from "./user";
5
- export * from "./ws";
1
+ export * from "./bsor.js";
2
+ export * from "./req.js";
3
+ export * from "./score.js";
4
+ export * from "./user.js";
5
+ export * from "./ws.js";
6
6
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
- export * from "./ws";
2
- export * from "./bsmap";
3
- export * from "./resp";
4
- export * from "./user";
5
- export * from "./alert";
1
+ export * from "./ws.js";
2
+ export * from "./bsmap.js";
3
+ export * from "./resp.js";
4
+ export * from "./user.js";
5
+ export * from "./alert.js";
6
6
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- export * from "./item";
2
- export * from "./resp";
3
- export * from "./user";
1
+ export * from "./item.js";
2
+ export * from "./resp.js";
3
+ export * from "./user.js";
4
4
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
- import { APIService } from "./api";
2
- import { RenderService } from "./render";
1
+ import { APIService } from "./api/index.js";
2
+ import { RenderService } from "./render/index.js";
3
3
  export {
4
4
  APIService,
5
5
  RenderService
@@ -14,6 +14,18 @@ var __spreadValues = (a, b) => {
14
14
  }
15
15
  return a;
16
16
  };
17
+ var __objRest = (source, exclude) => {
18
+ var target = {};
19
+ for (var prop in source)
20
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
21
+ target[prop] = source[prop];
22
+ if (source != null && __getOwnPropSymbols)
23
+ for (var prop of __getOwnPropSymbols(source)) {
24
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
25
+ target[prop] = source[prop];
26
+ }
27
+ return target;
28
+ };
17
29
  var __async = (__this, __arguments, generator) => {
18
30
  return new Promise((resolve, reject) => {
19
31
  var fulfilled = (value) => {
@@ -34,14 +46,14 @@ var __async = (__this, __arguments, generator) => {
34
46
  step((generator = generator.apply(__this, __arguments)).next());
35
47
  });
36
48
  };
37
- import { getHtml } from "../../components";
49
+ import { getHtml } from "../../components/index.js";
38
50
  import { PuppeteerError, TimeoutError } from "puppeteer-core";
39
- import { Platform } from "../../interface";
40
- import { getBLPlayerComp, getBLRankScoreComp, getBSMapComp, getSSPlayerComp } from "../../components/pages";
41
- import { preferenceKey } from "../preference";
42
- import { ImageRenderError, RequestError } from "../../infra/errors";
43
- import createQrcode from "../../components/utils/qrcode";
44
- import { getImageRender } from "../../infra/support/render";
51
+ import { Platform } from "../../interface/index.js";
52
+ import { getBLPlayerComp, getBLRankScoreComp, getBSMapComp, getSSPlayerComp } from "../../components/pages/index.js";
53
+ import { preferenceKey } from "../preference.js";
54
+ import { ImageRenderError, RequestError } from "../../infra/errors/index.js";
55
+ import createQrcode from "../../components/utils/qrcode.js";
56
+ import { getImageRender } from "../../infra/support/render/index.js";
45
57
  const getPreferenceKey = (platform) => {
46
58
  return platform == Platform.SS ? preferenceKey.ssProfileRenderImg.key : preferenceKey.blProfileRenderImg.key;
47
59
  };
@@ -50,8 +62,9 @@ class RenderService {
50
62
  this.api = api;
51
63
  this.imageRender = imageRender;
52
64
  }
53
- static create(imgRenderConfig, api) {
54
- return new RenderService(api, getImageRender(imgRenderConfig));
65
+ static create(imgRenderConfig) {
66
+ const _a = imgRenderConfig, { api } = _a, config = __objRest(_a, ["api"]);
67
+ return new RenderService(api, getImageRender(config));
55
68
  }
56
69
  renderRank(accountId, platform, renderOpts) {
57
70
  return __async(this, null, function* () {
@@ -1 +1 @@
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":[]}
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 private constructor(\n private api: APIService,\n private imageRender: ImageRender\n ) {}\n\n static create(imgRenderConfig: CreateImageRenderOption & { api: APIService }) {\n const { api, ...config} = imgRenderConfig\n return new RenderService(api, getImageRender(config))\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":[]}
@@ -21,7 +21,7 @@ var __async = (__this, __arguments, generator) => {
21
21
  step((generator = generator.apply(__this, __arguments)).next());
22
22
  });
23
23
  };
24
- import { handleWSEventWithCache } from "../utils";
24
+ import { handleWSEventWithCache } from "../utils/index.js";
25
25
  class BeatSaverWSHandler {
26
26
  constructor(db, render, logger, config, botService) {
27
27
  __publicField(this, "logger");
@@ -1,4 +1,4 @@
1
- export * from "./beatleader";
2
- export * from "./beatsaver";
3
- export * from "./handler";
1
+ export * from "./beatleader.js";
2
+ export * from "./beatsaver.js";
3
+ export * from "./handler.js";
4
4
  //# sourceMappingURL=index.js.map
@@ -1,46 +1,61 @@
1
- import { ScreenshotOptions, Viewport, Browser } from 'puppeteer-core';
1
+ import { z } from 'zod/v4';
2
2
  import * as ofetch from 'ofetch';
3
3
  import { $Fetch, FetchOptions, ResponseType } from 'ofetch';
4
+ import { ScreenshotOptions, Viewport, Browser } from 'puppeteer-core';
4
5
 
5
- /**
6
- * Extends Puppeteer's ScreenshotOptions to include an optional viewport setting
7
- * and a selector for element-specific screenshots.
8
- */
9
- interface RenderOptions$1 extends ScreenshotOptions {
10
- /**
11
- * Sets the viewport of the page.
12
- */
13
- viewport?: Viewport;
14
- /**
15
- * A CSS selector for an element to screenshot. If provided, the output
16
- * will be a screenshot of just this element.
17
- */
18
- selector?: string;
19
- /**
20
- * The maximum time in milliseconds to wait for the selector to appear.
21
- * If the element is not found within this time, an error will be thrown.
22
- * Defaults to Puppeteer's default (usually 30000ms).
23
- */
24
- timeout?: number;
25
- }
26
-
27
- type ExtendFetchOptions<R extends ResponseType = ResponseType, T = any> = {
28
- form?: Record<string, any>;
29
- } & FetchOptions<R, T>;
30
- declare class Fetch {
31
- private options?;
32
- private ofetchInstance;
33
- constructor(fetchInstance?: $Fetch, options?: FetchOptions);
34
- fetch<T, R extends ResponseType>(request: string, options?: ExtendFetchOptions<R, T>): Promise<ofetch.MappedResponseType<R, T>>;
35
- get<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, T>>;
36
- post<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, T>>;
37
- put<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, any>>;
38
- patch<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, any>>;
39
- delete<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, any>>;
40
- head(request: string, options?: FetchOptions): Promise<any>;
41
- extend(options: FetchOptions): Fetch;
42
- baseUrl(url: string): Fetch;
43
- }
6
+ declare const configSchema: z.ZodObject<{
7
+ s3: z.ZodOptional<z.ZodDefault<z.ZodDiscriminatedUnion<[z.ZodObject<{
8
+ s3AccessKey: z.ZodString;
9
+ s3SecretKey: z.ZodString;
10
+ endpoint: z.ZodString;
11
+ baseURL: z.ZodString;
12
+ bucketName: z.ZodString;
13
+ region: z.ZodOptional<z.ZodString>;
14
+ keyPrefix: z.ZodOptional<z.ZodString>;
15
+ enabled: z.ZodLiteral<true>;
16
+ }, z.core.$strip>, z.ZodObject<{
17
+ enabled: z.ZodLiteral<false>;
18
+ }, z.core.$strip>]>>>;
19
+ render: z.ZodIntersection<z.ZodDiscriminatedUnion<[z.ZodObject<{
20
+ defaultWaitTimeout: z.ZodOptional<z.ZodNumber>;
21
+ waitTimeout: z.ZodOptional<z.ZodNumber>;
22
+ cfAccountId: z.ZodString;
23
+ cfAPIKey: z.ZodString;
24
+ mode: z.ZodLiteral<"cf">;
25
+ }, z.core.$strip>, z.ZodObject<{
26
+ defaultWaitTimeout: z.ZodOptional<z.ZodNumber>;
27
+ waitTimeout: z.ZodOptional<z.ZodNumber>;
28
+ puppeteerURL: z.ZodOptional<z.ZodString>;
29
+ mode: z.ZodLiteral<"puppeteer">;
30
+ }, z.core.$strip>, z.ZodObject<{
31
+ defaultWaitTimeout: z.ZodOptional<z.ZodNumber>;
32
+ waitTimeout: z.ZodOptional<z.ZodNumber>;
33
+ mode: z.ZodLiteral<"custom">;
34
+ }, z.core.$strip>]>, z.ZodObject<{
35
+ defaultWaitTimeout: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
36
+ waitTimeout: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
37
+ puppeteerURL: z.ZodOptional<z.ZodOptional<z.ZodString>>;
38
+ cfAccountId: z.ZodOptional<z.ZodString>;
39
+ cfAPIKey: z.ZodOptional<z.ZodString>;
40
+ }, z.core.$strip>>;
41
+ beatsaver: z.ZodOptional<z.ZodDefault<z.ZodObject<{
42
+ host: z.ZodOptional<z.ZodDefault<z.ZodString>>;
43
+ wsURL: z.ZodOptional<z.ZodDefault<z.ZodString>>;
44
+ oauthClientId: z.ZodOptional<z.ZodString>;
45
+ oauthClientSecret: z.ZodOptional<z.ZodString>;
46
+ }, z.core.$strip>>>;
47
+ beatleader: z.ZodOptional<z.ZodDefault<z.ZodObject<{
48
+ oauthClientId: z.ZodOptional<z.ZodString>;
49
+ oauthClientSecret: z.ZodOptional<z.ZodString>;
50
+ }, z.core.$strip>>>;
51
+ cron: z.ZodOptional<z.ZodDefault<z.ZodObject<{
52
+ temp: z.ZodDefault<z.ZodOptional<z.ZodObject<{
53
+ enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
54
+ cron: z.ZodOptional<z.ZodString>;
55
+ }, z.core.$strip>>>;
56
+ }, z.core.$strip>>>;
57
+ }, z.core.$strip>;
58
+ type Config = z.infer<typeof configSchema>;
44
59
 
45
60
  interface ScoreSaberItem {
46
61
  score: SSScore;
@@ -487,6 +502,24 @@ interface BLSocial {
487
502
  [property: string]: any;
488
503
  }
489
504
 
505
+ type ExtendFetchOptions<R extends ResponseType = ResponseType, T = any> = {
506
+ form?: Record<string, any>;
507
+ } & FetchOptions<R, T>;
508
+ declare class Fetch {
509
+ private options?;
510
+ private ofetchInstance;
511
+ constructor(fetchInstance?: $Fetch, options?: FetchOptions);
512
+ fetch<T, R extends ResponseType>(request: string, options?: ExtendFetchOptions<R, T>): Promise<ofetch.MappedResponseType<R, T>>;
513
+ get<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, T>>;
514
+ post<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, T>>;
515
+ put<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, any>>;
516
+ patch<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, any>>;
517
+ delete<T = any, R extends ResponseType = 'json'>(request: string, options?: ExtendFetchOptions<R>): Promise<ofetch.MappedResponseType<R, any>>;
518
+ head(request: string, options?: FetchOptions): Promise<any>;
519
+ extend(options: FetchOptions): Fetch;
520
+ baseUrl(url: string): Fetch;
521
+ }
522
+
490
523
  interface ScoresaberLeaderboardResp {
491
524
  scores: SSScore[];
492
525
  metadata: Metadata;
@@ -709,6 +742,94 @@ declare class UserPreferenceStore {
709
742
  configEntries(): Promise<Record<string, any>>;
710
743
  }
711
744
 
745
+ /**
746
+ * Extends Puppeteer's ScreenshotOptions to include an optional viewport setting
747
+ * and a selector for element-specific screenshots.
748
+ */
749
+ interface RenderOptions$1 extends ScreenshotOptions {
750
+ /**
751
+ * Sets the viewport of the page.
752
+ */
753
+ viewport?: Viewport;
754
+ /**
755
+ * A CSS selector for an element to screenshot. If provided, the output
756
+ * will be a screenshot of just this element.
757
+ */
758
+ selector?: string;
759
+ /**
760
+ * The maximum time in milliseconds to wait for the selector to appear.
761
+ * If the element is not found within this time, an error will be thrown.
762
+ * Defaults to Puppeteer's default (usually 30000ms).
763
+ */
764
+ timeout?: number;
765
+ }
766
+
767
+ interface ImageRender {
768
+ html2img: (html: string, opt: RenderOptions$1) => Promise<Buffer>;
769
+ url2img: (url: string, opt: RenderOptions$1) => Promise<Buffer>;
770
+ }
771
+ declare const strictRenderConfig: z.ZodDiscriminatedUnion<[z.ZodObject<{
772
+ defaultWaitTimeout: z.ZodOptional<z.ZodNumber>;
773
+ waitTimeout: z.ZodOptional<z.ZodNumber>;
774
+ cfAccountId: z.ZodString;
775
+ cfAPIKey: z.ZodString;
776
+ mode: z.ZodLiteral<"cf">;
777
+ }, z.core.$strip>, z.ZodObject<{
778
+ defaultWaitTimeout: z.ZodOptional<z.ZodNumber>;
779
+ waitTimeout: z.ZodOptional<z.ZodNumber>;
780
+ puppeteerURL: z.ZodOptional<z.ZodString>;
781
+ mode: z.ZodLiteral<"puppeteer">;
782
+ }, z.core.$strip>, z.ZodObject<{
783
+ defaultWaitTimeout: z.ZodOptional<z.ZodNumber>;
784
+ waitTimeout: z.ZodOptional<z.ZodNumber>;
785
+ mode: z.ZodLiteral<"custom">;
786
+ }, z.core.$strip>]>;
787
+ declare const renderSchema: z.ZodIntersection<z.ZodDiscriminatedUnion<[z.ZodObject<{
788
+ defaultWaitTimeout: z.ZodOptional<z.ZodNumber>;
789
+ waitTimeout: z.ZodOptional<z.ZodNumber>;
790
+ cfAccountId: z.ZodString;
791
+ cfAPIKey: z.ZodString;
792
+ mode: z.ZodLiteral<"cf">;
793
+ }, z.core.$strip>, z.ZodObject<{
794
+ defaultWaitTimeout: z.ZodOptional<z.ZodNumber>;
795
+ waitTimeout: z.ZodOptional<z.ZodNumber>;
796
+ puppeteerURL: z.ZodOptional<z.ZodString>;
797
+ mode: z.ZodLiteral<"puppeteer">;
798
+ }, z.core.$strip>, z.ZodObject<{
799
+ defaultWaitTimeout: z.ZodOptional<z.ZodNumber>;
800
+ waitTimeout: z.ZodOptional<z.ZodNumber>;
801
+ mode: z.ZodLiteral<"custom">;
802
+ }, z.core.$strip>]>, z.ZodObject<{
803
+ defaultWaitTimeout: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
804
+ waitTimeout: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
805
+ puppeteerURL: z.ZodOptional<z.ZodOptional<z.ZodString>>;
806
+ cfAccountId: z.ZodOptional<z.ZodString>;
807
+ cfAPIKey: z.ZodOptional<z.ZodString>;
808
+ }, z.core.$strip>>;
809
+ type RenderConfig = z.infer<typeof renderSchema>;
810
+ type StrictRenderConfig = z.infer<typeof strictRenderConfig>;
811
+ declare class CFBrowserRendering implements ImageRender {
812
+ f: Fetch;
813
+ constructor(accountId: string, cfAPIKey: string, logger: Logger);
814
+ private post;
815
+ html2img(html: string, opt: RenderOptions$1): Promise<Buffer>;
816
+ url2img(url: string, opt: RenderOptions$1): Promise<Buffer>;
817
+ }
818
+ declare class PuppeteerRendering implements ImageRender {
819
+ private browserGetter;
820
+ constructor(browserGetter: () => Promise<Browser>);
821
+ html2img(html: string, opt: RenderOptions$1): Promise<Buffer>;
822
+ url2img(html: string, opt: RenderOptions$1): Promise<Buffer>;
823
+ }
824
+ declare const RemoteBrowserGetter: (addr: string) => () => Promise<Browser>;
825
+ type ImageRenderCreateOptions = StrictRenderConfig & {
826
+ logger: Logger;
827
+ render?: ImageRender;
828
+ browserGetter?: () => Promise<Browser>;
829
+ };
830
+ declare const getImageRender: (config: ImageRenderCreateOptions) => ImageRender;
831
+ type CreateImageRenderOption = Parameters<typeof getImageRender>[0];
832
+
712
833
  type RenderOption = RenderOptions & RenderOptions$1;
713
834
  type RenderOptions = {
714
835
  userPreference?: UserPreferenceStore;
@@ -726,8 +847,10 @@ interface IRenderService {
726
847
  declare class RenderService implements IRenderService {
727
848
  private api;
728
849
  private imageRender;
729
- constructor(api: APIService, imageRender: ImageRender);
730
- static create(imgRenderConfig: CreateImageRenderOption, api: APIService): RenderService;
850
+ private constructor();
851
+ static create(imgRenderConfig: CreateImageRenderOption & {
852
+ api: APIService;
853
+ }): RenderService;
731
854
  renderRank(accountId: string, platform: Platform, renderOpts?: RenderOption): Promise<Buffer>;
732
855
  renderScore(scoreId: string, renderOpts?: RenderOption): Promise<Buffer>;
733
856
  renderMapById(mapId: string, renderOption: RenderOption): Promise<Buffer>;
@@ -890,86 +1013,6 @@ type Services<T> = {
890
1013
  db: DB<T>;
891
1014
  };
892
1015
 
893
- interface ImageRender {
894
- html2img: (html: string, opt: RenderOptions$1) => Promise<Buffer>;
895
- url2img: (url: string, opt: RenderOptions$1) => Promise<Buffer>;
896
- }
897
- type RenderConfig = {
898
- mode: 'cf' | 'puppeteer' | 'custom';
899
- puppeteerURL?: string;
900
- defaultWaitTimeout?: number;
901
- waitTimeout?: number;
902
- cfAccountId?: string;
903
- cfAPIKey?: string;
904
- };
905
- declare class CFBrowserRendering implements ImageRender {
906
- f: Fetch;
907
- constructor(accountId: string, cfAPIKey: string);
908
- private post;
909
- html2img(html: string, opt: RenderOptions$1): Promise<Buffer>;
910
- url2img(url: string, opt: RenderOptions$1): Promise<Buffer>;
911
- }
912
- declare class PuppeteerRendering implements ImageRender {
913
- private browserGetter;
914
- constructor(browserGetter: () => Promise<Browser>);
915
- html2img(html: string, opt: RenderOptions$1): Promise<Buffer>;
916
- url2img(html: string, opt: RenderOptions$1): Promise<Buffer>;
917
- }
918
- declare const RemoteBrowserGetter: (addr: string) => () => Promise<Browser>;
919
- declare const getImageRender: (cfg: RenderConfig & {
920
- render?: ImageRender;
921
- browserGetter?: () => Promise<Browser>;
922
- }) => ImageRender;
923
- type CreateImageRenderOption = Parameters<typeof getImageRender>[0];
924
-
925
- declare class I18nService {
926
- obj: any;
927
- constructor(config?: any);
928
- mergeConfig(lang: string, obj: any): void;
929
- loadLang(lang: string): void;
930
- tran(path: string, params?: {}, lang?: string): string;
931
- }
932
-
933
- interface S3Config {
934
- s3AccessKey: string;
935
- s3SecretKey: string;
936
- endpoint: string;
937
- region: string | undefined;
938
- bucketName: string;
939
- keyPrefix: string;
940
- baseURL: string;
941
- }
942
- declare class S3Service {
943
- private s3Client;
944
- private readonly bucket;
945
- private readonly keyPrefix;
946
- private readonly baseURL;
947
- constructor(config: S3Config);
948
- uploadImgWithUrl(url: string, mimeType?: string): Promise<string>;
949
- uploadImg(buffer: Buffer, mimeType?: string): Promise<string>;
950
- }
951
-
952
- interface Config {
953
- s3: {
954
- enabled: boolean;
955
- } & S3Config;
956
- render: RenderConfig;
957
- minRawMatchMapIdLength: number;
958
- beatSaverHost: string;
959
- beatSaverWSURL: string;
960
- bsOauthClientId: string;
961
- bsOauthClientSecret: string;
962
- blOauthClientId: string;
963
- blOauthClientSecret: string;
964
- bsNotifyMonitorCron: ScheduleTaskConfig;
965
- tokenRefreshCron: ScheduleTaskConfig;
966
- tempCron: ScheduleTaskConfig;
967
- }
968
- interface ScheduleTaskConfig {
969
- cron: string;
970
- enabled: boolean;
971
- }
972
-
973
1016
  type ScheduleTaskCtx<T> = {
974
1017
  config: Config;
975
1018
  logger: Logger;
@@ -1027,6 +1070,45 @@ declare const handleWSEventWithCache: (fnThat: any, fn: any, ttl: any, eventPars
1027
1070
  declare const sleep: (millsec?: number) => Promise<void>;
1028
1071
  declare const convertDiff: (diff: string | null) => any;
1029
1072
 
1073
+ declare class I18nService {
1074
+ obj: any;
1075
+ constructor(config?: any);
1076
+ mergeConfig(lang: string, obj: any): void;
1077
+ loadLang(lang: string): void;
1078
+ tran(path: string, params?: {}, lang?: string): string;
1079
+ }
1080
+
1081
+ interface S3Config {
1082
+ s3AccessKey: string;
1083
+ s3SecretKey: string;
1084
+ endpoint: string;
1085
+ region?: string;
1086
+ bucketName: string;
1087
+ keyPrefix?: string;
1088
+ baseURL: string;
1089
+ }
1090
+ declare const s3ConfigSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1091
+ s3AccessKey: z.ZodString;
1092
+ s3SecretKey: z.ZodString;
1093
+ endpoint: z.ZodString;
1094
+ baseURL: z.ZodString;
1095
+ bucketName: z.ZodString;
1096
+ region: z.ZodOptional<z.ZodString>;
1097
+ keyPrefix: z.ZodOptional<z.ZodString>;
1098
+ enabled: z.ZodLiteral<true>;
1099
+ }, z.core.$strip>, z.ZodObject<{
1100
+ enabled: z.ZodLiteral<false>;
1101
+ }, z.core.$strip>]>;
1102
+ declare class S3Service {
1103
+ private s3Client;
1104
+ private readonly bucket;
1105
+ private readonly keyPrefix;
1106
+ private readonly baseURL;
1107
+ constructor(config: S3Config);
1108
+ uploadImgWithUrl(url: string, mimeType?: string): Promise<string>;
1109
+ uploadImg(buffer: Buffer, mimeType?: string): Promise<string>;
1110
+ }
1111
+
1030
1112
  declare const getBot: <T>(config: Config) => {
1031
1113
  commands: Command<T>[];
1032
1114
  schedule: {
@@ -1037,4 +1119,4 @@ declare const getBot: <T>(config: Config) => {
1037
1119
  }[];
1038
1120
  };
1039
1121
 
1040
- export { APIService, BeatSaverWSHandler, BeatleaderWSHandler, type BotService, CFBrowserRendering, type CmdAlias, type CmdContext, type CmdExecutor, type CmdOption, type Command, type Config, type CreateImageRenderOption, type DB, type Extend, I18nService, type ImageRender, type Logger, type OptionType, Platform, type RenderOptions$1 as PuppeteerOptions, PuppeteerRendering, type RelateAccount, type RelateChannelInfo, RemoteBrowserGetter, type RenderConfig, RenderService, type S3Config, S3Service, type Services, type Session, type SubDetailWithGroupRes, type SubInfoRes, type SubWithGroupRes, type Subscribe, type SubscribeMember, type UserPreference, type WSHandler, botCommands, convertDiff, getBot, getImageRender, getScheduleTasks, handleWSEventWithCache, parsePlatform, sleep };
1122
+ export { APIService, BeatSaverWSHandler, BeatleaderWSHandler, type BotService, CFBrowserRendering, type CmdAlias, type CmdContext, type CmdExecutor, type CmdOption, type Command, type Config, type CreateImageRenderOption, type DB, type Extend, I18nService, type ImageRender, type Logger, type OptionType, Platform, type RenderOptions$1 as PuppeteerOptions, PuppeteerRendering, type RelateAccount, type RelateChannelInfo, RemoteBrowserGetter, type RenderConfig, RenderService, type S3Config, S3Service, type Services, type Session, type SubDetailWithGroupRes, type SubInfoRes, type SubWithGroupRes, type Subscribe, type SubscribeMember, type UserPreference, type WSHandler, botCommands, configSchema, convertDiff, getBot, getImageRender, getScheduleTasks, handleWSEventWithCache, parsePlatform, renderSchema, s3ConfigSchema, sleep };