beatsaber-bot-core 0.2.0-rc.6 → 0.2.0-rc.8
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.
- package/dist/cjs/cmd/bind/bind-id-beatleader.js +1 -1
- package/dist/cjs/cmd/bind/bind-id-beatsaver.js +1 -1
- package/dist/cjs/cmd/bind/bind-scoresaber.js +1 -1
- package/dist/cjs/cmd/bind/index.js +4 -4
- package/dist/cjs/cmd/bsmap/id-search.js +2 -2
- package/dist/cjs/cmd/bsmap/key-search.js +1 -1
- package/dist/cjs/cmd/bsmap/latest.js +1 -1
- package/dist/cjs/cmd/deprecated/tmp.js +8 -4
- package/dist/cjs/cmd/deprecated/tmp.js.map +1 -1
- package/dist/cjs/cmd/index.js +11 -11
- package/dist/cjs/cmd/rank.js +3 -3
- package/dist/cjs/cmd/score.js +5 -5
- package/dist/cjs/cmd/subscribe/beatleader.js +1 -1
- package/dist/cjs/cmd/subscribe/beatsaver.js +1 -1
- package/dist/cjs/cmd/subscribe/id-beatleader-score.js +1 -1
- package/dist/cjs/cmd/subscribe/id-beatsaver-mapper.js +1 -1
- package/dist/cjs/cmd/subscribe/index.js +5 -5
- package/dist/cjs/cmd/subscribe/subjoin.js +2 -2
- package/dist/cjs/cmd/subscribe/subleave.js +1 -1
- package/dist/cjs/cmd/subscribe/unsubscribe.js +2 -2
- package/dist/cjs/components/components/RankDifficulty.js +1 -1
- package/dist/cjs/components/components/bl-rank-score-item.js +2 -2
- package/dist/cjs/components/components/ss-rank-score-item.js +2 -2
- package/dist/cjs/components/pages/bl-score-with-rank.js +5 -5
- package/dist/cjs/components/pages/index.js +1 -1
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/infra/support/render/index.js +6 -7
- package/dist/cjs/infra/support/render/index.js.map +1 -1
- package/dist/cjs/infra/support/render/puppeteer.js +2 -2
- package/dist/cjs/infra/support/render/puppeteer.js.map +1 -1
- package/dist/cjs/interface/cmd/builder.js +1 -1
- package/dist/cjs/schedules/index.js +1 -1
- package/dist/cjs/service/api/base/aioclient.js +1 -1
- package/dist/cjs/service/api/base/blclient.js +1 -1
- package/dist/cjs/service/api/base/bsclient.js +2 -2
- package/dist/cjs/service/api/base/ssclient.js +2 -2
- package/dist/cjs/service/api/index.js +4 -4
- package/dist/cjs/service/render/index.js +7 -7
- package/dist/cjs/service/render/index.js.map +1 -1
- package/dist/cjs/service/render/interfaces.js.map +1 -1
- package/dist/cjs/ws/beatsaver.js +1 -1
- package/dist/esm/cmd/bind/bind-id-beatleader.js +1 -1
- package/dist/esm/cmd/bind/bind-id-beatsaver.js +1 -1
- package/dist/esm/cmd/bind/bind-scoresaber.js +1 -1
- package/dist/esm/cmd/bind/index.js +4 -4
- package/dist/esm/cmd/bsmap/id-search.js +2 -2
- package/dist/esm/cmd/bsmap/key-search.js +1 -1
- package/dist/esm/cmd/bsmap/latest.js +1 -1
- package/dist/esm/cmd/deprecated/tmp.js +8 -4
- package/dist/esm/cmd/deprecated/tmp.js.map +1 -1
- package/dist/esm/cmd/index.js +11 -11
- package/dist/esm/cmd/rank.js +3 -3
- package/dist/esm/cmd/score.js +5 -5
- package/dist/esm/cmd/subscribe/beatleader.js +1 -1
- package/dist/esm/cmd/subscribe/beatsaver.js +1 -1
- package/dist/esm/cmd/subscribe/id-beatleader-score.js +1 -1
- package/dist/esm/cmd/subscribe/id-beatsaver-mapper.js +1 -1
- package/dist/esm/cmd/subscribe/index.js +5 -5
- package/dist/esm/cmd/subscribe/subjoin.js +2 -2
- package/dist/esm/cmd/subscribe/subleave.js +1 -1
- package/dist/esm/cmd/subscribe/unsubscribe.js +2 -2
- package/dist/esm/components/components/RankDifficulty.js +1 -1
- package/dist/esm/components/components/bl-rank-score-item.js +2 -2
- package/dist/esm/components/components/ss-rank-score-item.js +2 -2
- package/dist/esm/components/pages/bl-score-with-rank.js +5 -5
- package/dist/esm/components/pages/index.js +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/infra/support/render/index.js +6 -8
- package/dist/esm/infra/support/render/index.js.map +1 -1
- package/dist/esm/infra/support/render/puppeteer.js +2 -2
- package/dist/esm/infra/support/render/puppeteer.js.map +1 -1
- package/dist/esm/interface/cmd/builder.js +1 -1
- package/dist/esm/schedules/index.js +1 -1
- package/dist/esm/service/api/base/aioclient.js +1 -1
- package/dist/esm/service/api/base/blclient.js +1 -1
- package/dist/esm/service/api/base/bsclient.js +2 -2
- package/dist/esm/service/api/base/ssclient.js +2 -2
- package/dist/esm/service/api/index.js +4 -4
- package/dist/esm/service/render/index.js +7 -7
- package/dist/esm/service/render/index.js.map +1 -1
- package/dist/esm/ws/beatsaver.js +1 -1
- package/dist/types/cmd/bind/bind-beatleader.d.ts +1 -1
- package/dist/types/cmd/bind/bind-beatsaver.d.ts +1 -1
- package/dist/types/cmd/bind/bind-id-beatleader.d.ts +1 -1
- package/dist/types/cmd/bind/bind-id-beatsaver.d.ts +1 -1
- package/dist/types/cmd/bind/bind-scoresaber.d.ts +1 -1
- package/dist/types/cmd/bind/index.d.ts +1 -1
- package/dist/types/cmd/bsmap/id-search.d.ts +1 -1
- package/dist/types/cmd/bsmap/key-search.d.ts +1 -1
- package/dist/types/cmd/bsmap/latest.d.ts +1 -1
- package/dist/types/cmd/deprecated/tmp.d.ts +1 -1
- package/dist/types/cmd/index.d.ts +1 -1
- package/dist/types/cmd/rank.d.ts +1 -1
- package/dist/types/cmd/score.d.ts +1 -1
- package/dist/types/cmd/subscribe/beatleader.d.ts +1 -1
- package/dist/types/cmd/subscribe/beatsaver.d.ts +1 -1
- package/dist/types/cmd/subscribe/id-beatleader-score.d.ts +1 -1
- package/dist/types/cmd/subscribe/id-beatsaver-mapper.d.ts +1 -1
- package/dist/types/cmd/subscribe/index.d.ts +1 -1
- package/dist/types/cmd/subscribe/subjoin.d.ts +1 -1
- package/dist/types/cmd/subscribe/subleave.d.ts +1 -1
- package/dist/types/cmd/subscribe/unsubscribe.d.ts +1 -1
- package/dist/types/{index-BwvAwgCV.d.ts → index-Dagy_c8G.d.ts} +7 -6
- package/dist/types/index.d.ts +3 -3
- package/dist/types/infra/index.d.ts +1 -1
- package/dist/types/infra/support/render/index.d.ts +1 -1
- package/dist/types/interface/cmd/builder.d.ts +1 -1
- package/dist/types/interface/cmd/type.d.ts +1 -1
- package/dist/types/interface/index.d.ts +1 -1
- package/dist/types/schedules/index.d.ts +3 -3
- package/dist/types/schedules/interface.d.ts +1 -1
- package/dist/types/schedules/temp.d.ts +1 -1
- package/dist/types/service/index.d.ts +1 -1
- package/dist/types/service/render/index.d.ts +1 -1
- package/dist/types/service/render/interfaces.d.ts +2 -2
- package/dist/types/ws/beatleader.d.ts +1 -1
- package/dist/types/ws/beatsaver.d.ts +1 -1
- package/dist/types/ws/index.d.ts +1 -1
- package/dist/types/ws/scoresaber.d.ts +1 -1
- package/package.json +3 -2
@@ -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 \"@/service/preference\";\nimport {ImageRenderError, RequestError} from \"@/infra/errors\";\nimport createQrcode from \"@/components/utils/qrcode\";\nimport {APIService} from \"@/service/api\";\nimport {BSMap} from \"@/service/api/interfaces/beatsaver\";\nimport {ImageRender} from \"@/infra/support/render\";\n\n\nconst getPreferenceKey = (platform: string) => {\n return platform == Platform.SS\n ? preferenceKey.ssProfileRenderImg.key\n : preferenceKey.blProfileRenderImg.key\n}\n\nexport class RenderService implements IRenderService {\n constructor(\n private api: APIService,\n private imageRender: ImageRender\n ) {}\n async renderRank(\n accountId: string,\n platform: Platform,\n renderOpts?: RenderOption\n ) {\n try {\n let bg = (await renderOpts?.userPreference?.get<string>(getPreferenceKey(platform)))\n bg = bg || 'https://www.loliapi.com/acg/pc/'\n let html: string\n if (platform == Platform.BL) {\n const { scores, userInfo } = await this.api.getBLPlayerScoresWithUserInfo(accountId)\n html = getHtml(getBLPlayerComp(scores, userInfo, bg))\n } else {\n const { scores, userInfo } = await this.api.getSSPlayerRecentScoreWithUserInfo(accountId)\n html = getHtml(getSSPlayerComp(scores, userInfo, bg))\n }\n return this.imageRender.html2img(html, {selector: '#render-result', ...renderOpts})\n }catch (e) {\n if (e instanceof TimeoutError || e instanceof PuppeteerError) {\n throw new ImageRenderError()\n }\n throw e\n }\n }\n\n async renderScore(\n scoreId: string,\n renderOpts?: RenderOption\n ) {\n const bg = (await renderOpts?.userPreference?.get<string>(preferenceKey.blScoreImg.key))\n ?? 'https://www.loliapi.com/acg/pc/'\n try {\n const { score, statistic, bsor, bsMap } =\n await this.api.getScoreAndBSMapByScoreId(scoreId)\n\n const { aroundScores, regionTopScores, difficulties } =\n await this.api.getAroundScoreAndRegionScoreByRankAndPage(\n score.leaderboardId,\n score.rank,\n score.player.country\n )\n return this.imageRender.html2img(\n getHtml(getBLRankScoreComp(score, aroundScores, regionTopScores, difficulties, bsMap, statistic, bsor, bg)),\n {selector: '#render-result', ...renderOpts}\n )\n }catch (e) {\n if (e instanceof RequestError) {\n throw e\n }\n throw new ImageRenderError()\n }\n }\n\n async renderMapById(\n mapId: string,\n renderOption: RenderOption\n ) {\n const map = await this.api.BeatSaver.searchMapById(mapId)\n return this.renderMap(map, renderOption)\n }\n\n async renderMap(\n bsMap: BSMap,\n renderOption?: RenderOption\n ) {\n const previewQrUrl = await createQrcode(`https://allpoland.github.io/ArcViewer/?id=${bsMap.id}`)\n const bsMapQrUrl = await createQrcode(`https://beatsaver.com/maps/${bsMap.id}`)\n return this.imageRender.html2img(\n getHtml(getBSMapComp(bsMap, bsMapQrUrl, previewQrUrl)), {selector: '#render-result', ...renderOption}\n )\n }\n\n async renderUrl(url: string, renderOption?: RenderOption) {\n return this.imageRender.url2img(url,
|
1
|
+
{"version":3,"sources":["../../../../src/service/render/index.ts"],"sourcesContent":["import {IRenderService, RenderOption} from './interfaces'\nimport { getHtml } from '@/components'\nimport { PuppeteerError, TimeoutError } from 'puppeteer-core'\nimport { Platform } from '@/interface'\nimport {getBLPlayerComp, getBLRankScoreComp, getBSMapComp, getSSPlayerComp} from '@/components/pages'\nimport {preferenceKey} from \"@/service/preference\";\nimport {ImageRenderError, RequestError} from \"@/infra/errors\";\nimport createQrcode from \"@/components/utils/qrcode\";\nimport {APIService} from \"@/service/api\";\nimport {BSMap} from \"@/service/api/interfaces/beatsaver\";\nimport {ImageRender} from \"@/infra/support/render\";\n\n\nconst getPreferenceKey = (platform: string) => {\n return platform == Platform.SS\n ? preferenceKey.ssProfileRenderImg.key\n : preferenceKey.blProfileRenderImg.key\n}\n\nexport class RenderService implements IRenderService {\n constructor(\n private api: APIService,\n private imageRender: ImageRender\n ) {}\n async renderRank(\n accountId: string,\n platform: Platform,\n renderOpts?: RenderOption\n ) {\n try {\n let bg = (await renderOpts?.userPreference?.get<string>(getPreferenceKey(platform)))\n bg = bg || 'https://www.loliapi.com/acg/pc/'\n let html: string\n if (platform == Platform.BL) {\n const { scores, userInfo } = await this.api.getBLPlayerScoresWithUserInfo(accountId)\n html = getHtml(getBLPlayerComp(scores, userInfo, bg))\n } else {\n const { scores, userInfo } = await this.api.getSSPlayerRecentScoreWithUserInfo(accountId)\n html = getHtml(getSSPlayerComp(scores, userInfo, bg))\n }\n return this.imageRender.html2img(html, {selector: '#render-result', ...renderOpts})\n }catch (e) {\n if (e instanceof TimeoutError || e instanceof PuppeteerError) {\n throw new ImageRenderError()\n }\n throw e\n }\n }\n\n async renderScore(\n scoreId: string,\n renderOpts?: RenderOption\n ) {\n const bg = (await renderOpts?.userPreference?.get<string>(preferenceKey.blScoreImg.key))\n ?? 'https://www.loliapi.com/acg/pc/'\n try {\n const { score, statistic, bsor, bsMap } =\n await this.api.getScoreAndBSMapByScoreId(scoreId)\n\n const { aroundScores, regionTopScores, difficulties } =\n await this.api.getAroundScoreAndRegionScoreByRankAndPage(\n score.leaderboardId,\n score.rank,\n score.player.country\n )\n return this.imageRender.html2img(\n getHtml(getBLRankScoreComp(score, aroundScores, regionTopScores, difficulties, bsMap, statistic, bsor, bg)),\n {selector: '#render-result', ...renderOpts}\n )\n }catch (e) {\n if (e instanceof RequestError) {\n throw e\n }\n throw new ImageRenderError()\n }\n }\n\n async renderMapById(\n mapId: string,\n renderOption: RenderOption\n ) {\n const map = await this.api.BeatSaver.searchMapById(mapId)\n return this.renderMap(map, renderOption)\n }\n\n async renderMap(\n bsMap: BSMap,\n renderOption?: RenderOption\n ) {\n const previewQrUrl = await createQrcode(`https://allpoland.github.io/ArcViewer/?id=${bsMap.id}`)\n const bsMapQrUrl = await createQrcode(`https://beatsaver.com/maps/${bsMap.id}`)\n return this.imageRender.html2img(\n getHtml(getBSMapComp(bsMap, bsMapQrUrl, previewQrUrl)), {selector: '#render-result', ...renderOption}\n )\n }\n\n async renderUrl(url: string, renderOption?: RenderOption) {\n return this.imageRender.url2img(url, renderOption)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,wBAAwB;AACxB,4BAA6C;AAC7C,uBAAyB;AACzB,mBAAiF;AACjF,wBAA4B;AAC5B,oBAA6C;AAC7C,oBAAyB;AAMzB,MAAM,mBAAmB,CAAC,aAAqB;AAC7C,SAAO,YAAY,0BAAS,KACxB,gCAAc,mBAAmB,MACjC,gCAAc,mBAAmB;AACvC;AAEO,MAAM,cAAwC;AAAA,EACnD,YACU,KACA,aACR;AAFQ;AACA;AAAA,EACP;AAAA,EACG,WACJ,WACA,UACA,YACA;AAAA;AA5BJ;AA6BI,UAAI;AACF,YAAI,KAAM,OAAM,8CAAY,mBAAZ,mBAA4B,IAAY,iBAAiB,QAAQ;AACjF,aAAK,MAAM;AACX,YAAI;AACJ,YAAI,YAAY,0BAAS,IAAI;AAC3B,gBAAM,EAAE,QAAQ,SAAS,IAAI,MAAM,KAAK,IAAI,8BAA8B,SAAS;AACnF,qBAAO,+BAAQ,8BAAgB,QAAQ,UAAU,EAAE,CAAC;AAAA,QACtD,OAAO;AACL,gBAAM,EAAE,QAAQ,SAAS,IAAI,MAAM,KAAK,IAAI,mCAAmC,SAAS;AACxF,qBAAO,+BAAQ,8BAAgB,QAAQ,UAAU,EAAE,CAAC;AAAA,QACtD;AACA,eAAO,KAAK,YAAY,SAAS,MAAM,iBAAC,UAAU,oBAAqB,WAAW;AAAA,MACpF,SAAQ,GAAG;AACT,YAAI,aAAa,sCAAgB,aAAa,sCAAgB;AAC5D,gBAAM,IAAI,+BAAiB;AAAA,QAC7B;AACA,cAAM;AAAA,MACR;AAAA,IACF;AAAA;AAAA,EAEM,YACJ,SACA,YACA;AAAA;AApDJ;AAqDI,YAAM,MAAM,YAAM,8CAAY,mBAAZ,mBAA4B,IAAY,gCAAc,WAAW,SAAvE,YACP;AACL,UAAI;AACF,cAAM,EAAE,OAAO,WAAW,MAAM,MAAM,IACpC,MAAM,KAAK,IAAI,0BAA0B,OAAO;AAElD,cAAM,EAAE,cAAc,iBAAiB,aAAa,IAClD,MAAM,KAAK,IAAI;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM,OAAO;AAAA,QACf;AACF,eAAO,KAAK,YAAY;AAAA,cACtB,+BAAQ,iCAAmB,OAAO,cAAc,iBAAiB,cAAc,OAAO,WAAW,MAAM,EAAE,CAAC;AAAA,UAC1G,iBAAC,UAAU,oBAAqB;AAAA,QAClC;AAAA,MACF,SAAQ,GAAG;AACT,YAAI,aAAa,4BAAc;AAC7B,gBAAM;AAAA,QACR;AACA,cAAM,IAAI,+BAAiB;AAAA,MAC7B;AAAA,IACF;AAAA;AAAA,EAEM,cACJ,OACA,cACA;AAAA;AACA,YAAM,MAAM,MAAM,KAAK,IAAI,UAAU,cAAc,KAAK;AACxD,aAAO,KAAK,UAAU,KAAK,YAAY;AAAA,IACzC;AAAA;AAAA,EAEM,UACJ,OACA,cACA;AAAA;AACA,YAAM,eAAe,UAAM,cAAAA,SAAa,6CAA6C,MAAM,EAAE,EAAE;AAC/F,YAAM,aAAa,UAAM,cAAAA,SAAa,8BAA8B,MAAM,EAAE,EAAE;AAC9E,aAAO,KAAK,YAAY;AAAA,YACtB,+BAAQ,2BAAa,OAAO,YAAY,YAAY,CAAC;AAAA,QAAG,iBAAC,UAAU,oBAAqB;AAAA,MAC1F;AAAA,IACF;AAAA;AAAA,EAEM,UAAU,KAAa,cAA6B;AAAA;AACxD,aAAO,KAAK,YAAY,QAAQ,KAAK,YAAY;AAAA,IACnD;AAAA;AACF;","names":["createQrcode"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/service/render/interfaces.ts"],"sourcesContent":["import type { Platform } from '@/interface'\nimport {UserPreferenceStore} from \"@/service/preference\";\nimport {BSMap} from \"@/service/api/interfaces/beatsaver\";\
|
1
|
+
{"version":3,"sources":["../../../../src/service/render/interfaces.ts"],"sourcesContent":["import type { Platform } from '@/interface'\nimport {UserPreferenceStore} from \"@/service/preference\";\nimport {BSMap} from \"@/service/api/interfaces/beatsaver\";\nimport { PuppeteerOptions } from '@/infra/support/render'\nexport type RenderOption = RenderOptions & PuppeteerOptions\n\ntype RenderOptions = {\n userPreference?: UserPreferenceStore,\n onRenderStart?: () => void,\n onRenderError?: (e) => void\n}\n\nexport interface IRenderService {\n renderRank(accountId: string, platform: Platform, renderOpts?: RenderOption): Promise<Buffer>\n renderScore(scoreId: string, renderOpts?: RenderOption): Promise<Buffer>\n renderMapById(mapId: string, renderOpts?: RenderOption): Promise<Buffer>\n renderMap(bsMap: BSMap, renderOpts?: RenderOption): Promise<Buffer>\n renderUrl(url: string, renderOpts?: RenderOption): Promise<Buffer>\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
package/dist/cjs/ws/beatsaver.js
CHANGED
@@ -42,7 +42,7 @@ __export(beatsaver_exports, {
|
|
42
42
|
BeatSaverWSHandler: () => BeatSaverWSHandler
|
43
43
|
});
|
44
44
|
module.exports = __toCommonJS(beatsaver_exports);
|
45
|
-
var import_utils = require("
|
45
|
+
var import_utils = require("../utils");
|
46
46
|
class BeatSaverWSHandler {
|
47
47
|
constructor(db, render, logger, config, botService) {
|
48
48
|
__publicField(this, "logger");
|
@@ -22,7 +22,7 @@ import {
|
|
22
22
|
BLIDNotFoundError,
|
23
23
|
SessionPromotionCancelError,
|
24
24
|
SessionPromotionTimeoutError
|
25
|
-
} from "
|
25
|
+
} from "../../infra/errors";
|
26
26
|
const handleBeatLeaderIDBind = (c) => __async(null, null, function* () {
|
27
27
|
const player = yield c.services.api.BeatLeader.getPlayerInfo(c.input);
|
28
28
|
if (!player) {
|
@@ -22,7 +22,7 @@ import {
|
|
22
22
|
BSIDNotFoundError,
|
23
23
|
SessionPromotionCancelError,
|
24
24
|
SessionPromotionTimeoutError
|
25
|
-
} from "
|
25
|
+
} from "../../infra/errors";
|
26
26
|
const handleBeatSaverIDBind = (c) => __async(null, null, function* () {
|
27
27
|
const mapper = yield c.services.api.BeatSaver.getBSMapperById(c.input);
|
28
28
|
if (!mapper) {
|
@@ -22,7 +22,7 @@ import {
|
|
22
22
|
SessionPromotionCancelError,
|
23
23
|
SessionPromotionTimeoutError,
|
24
24
|
SSIDNotFoundError
|
25
|
-
} from "
|
25
|
+
} from "../../infra/errors";
|
26
26
|
const handleScoreSaberBind = (c) => __async(null, null, function* () {
|
27
27
|
const scoreSaberUser = yield c.services.api.ScoreSaber.getScoreUserById(c.input);
|
28
28
|
if (!scoreSaberUser) {
|
@@ -19,10 +19,10 @@ var __async = (__this, __arguments, generator) => {
|
|
19
19
|
});
|
20
20
|
};
|
21
21
|
import { handleScoreSaberBind } from "./bind-scoresaber";
|
22
|
-
import { Platform } from "
|
23
|
-
import { handleBeatLeaderIDBind } from "
|
24
|
-
import { handleBeatSaverIDBind } from "
|
25
|
-
import { CommandBuilder } from "
|
22
|
+
import { Platform } from "../../interface";
|
23
|
+
import { handleBeatLeaderIDBind } from "../../cmd/bind/bind-id-beatleader";
|
24
|
+
import { handleBeatSaverIDBind } from "../../cmd/bind/bind-id-beatsaver";
|
25
|
+
import { CommandBuilder } from "../../interface/cmd/builder";
|
26
26
|
var bind_default = () => new CommandBuilder().setName("bind").addOption("p", "platform:string").addAlias("bbbind").addAlias("bindbs", { options: { p: "bs" } }).addAlias("bindbl", { options: { p: "bl" } }).addAlias("bindss", { options: { p: "ss" } }).addAlias("bbbindbs", { options: { p: "bs" } }).addAlias("bbbindbl", { options: { p: "bl" } }).addAlias("bbbindss", { options: { p: "ss" } }).addAlias("ssbind", { options: { p: "ss" } }).addAlias("blbind", { options: { p: "bl" } }).addAlias("bsbind", { options: { p: "bs" } }).setDescription("clear an auth account relate info").setExecutor((c) => __async(null, null, function* () {
|
27
27
|
if (!c.options.p) {
|
28
28
|
c.options.p = "ss";
|
@@ -18,8 +18,8 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { InvalidMapIdError, MapIdNotFoundError } from "
|
22
|
-
import { CommandBuilder } from "
|
21
|
+
import { InvalidMapIdError, MapIdNotFoundError } from "../../infra/errors";
|
22
|
+
import { CommandBuilder } from "../../interface/cmd/builder";
|
23
23
|
const mapIdReg = /^[a-fA-F0-9]{1,6}$/;
|
24
24
|
var id_search_default = () => new CommandBuilder().setName("id").addAlias("/id").addAlias("bbid").addAlias("/bbid").addAlias("!bsr").setDescription("clear an auth account relate info").setExecutor((c) => __async(null, null, function* () {
|
25
25
|
if (!c.input || c.input && c.input.length < 1) {
|
@@ -18,7 +18,7 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "
|
21
|
+
import { CommandBuilder } from "../../interface/cmd/builder";
|
22
22
|
var key_search_default = () => new CommandBuilder().setName("search").addAlias("bbsou").addAlias("bbsearch").addAlias("bbmap").setDescription("search beatmap by keyword").setExecutor((c) => __async(null, null, function* () {
|
23
23
|
let key = c.input;
|
24
24
|
if (key.length > 15) {
|
@@ -18,7 +18,7 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "
|
21
|
+
import { CommandBuilder } from "../../interface/cmd/builder";
|
22
22
|
var latest_default = () => new CommandBuilder().setName("latest").addAlias("bbnew").addAlias("blnew").addAlias("ssnew").addAlias("bsnew").addAlias("/blnew").addAlias("/ssnew").addAlias("/bsnew").setDescription("get latest 3 beatmap").setExecutor((c) => __async(null, null, function* () {
|
23
23
|
const res = yield c.services.api.BeatSaver.getLatestMaps(3);
|
24
24
|
const text = c.session.text("commands.bsbot.latest.info");
|
@@ -18,17 +18,21 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "
|
21
|
+
import { CommandBuilder } from "../../interface/cmd/builder";
|
22
22
|
var tmp_default = () => new CommandBuilder().setName("lb").addAlias("/lb").addAlias("bblb").addAlias("\u4E50\u56E2\u65B0\u8D5B\u5B63").addAlias("\u4E50\u56E2\u699C\u5355").setExecutor((c) => __async(null, null, function* () {
|
23
23
|
const [hit, score] = yield Promise.all([
|
24
24
|
c.services.render.renderUrl("https://aiobs.ktlab.io/tmp/lb/hitcnt", {
|
25
|
+
selector: "#render-result",
|
25
26
|
onRenderStart: () => {
|
26
27
|
c.session.sendQueued("\u5F00\u59CB\u6E32\u67D3\u780D\u51FB\u699C\u4E86\uFF0C\u8BF7\u8010\u5FC3\u7B49\u5F85 10s");
|
27
28
|
}
|
28
29
|
}),
|
29
|
-
c.services.render.renderUrl("https://aiobs.ktlab.io/tmp/lb/score", {
|
30
|
-
|
31
|
-
|
30
|
+
c.services.render.renderUrl("https://aiobs.ktlab.io/tmp/lb/score", {
|
31
|
+
selector: "#render-result",
|
32
|
+
onRenderStart: () => {
|
33
|
+
c.session.sendQueued("\u5F00\u59CB\u6E32\u67D3\u5206\u6570\u699C\u4E86\uFF0C\u8BF7\u8010\u5FC3\u7B49\u5F85 10s");
|
34
|
+
}
|
35
|
+
})
|
32
36
|
]);
|
33
37
|
c.session.sendImgBuffer(hit, "image/png");
|
34
38
|
c.session.sendImgBuffer(score, "image/png");
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/cmd/deprecated/tmp.ts"],"sourcesContent":["import {CommandBuilder} from \"@/interface/cmd/builder\";\n\nexport default () =>\n new CommandBuilder()\n .setName('lb')\n .addAlias('/lb')\n .addAlias('bblb')\n .addAlias('乐团新赛季')\n .addAlias('乐团榜单')\n .setExecutor(async (c) => {\n const [hit, score] = await Promise.all([\n c.services.render.renderUrl('https://aiobs.ktlab.io/tmp/lb/hitcnt', {\n onRenderStart:() => {\n c.session.sendQueued('开始渲染砍击榜了,请耐心等待 10s')\n }
|
1
|
+
{"version":3,"sources":["../../../../src/cmd/deprecated/tmp.ts"],"sourcesContent":["import {CommandBuilder} from \"@/interface/cmd/builder\";\n\nexport default () =>\n new CommandBuilder()\n .setName('lb')\n .addAlias('/lb')\n .addAlias('bblb')\n .addAlias('乐团新赛季')\n .addAlias('乐团榜单')\n .setExecutor(async (c) => {\n const [hit, score] = await Promise.all([\n c.services.render.renderUrl('https://aiobs.ktlab.io/tmp/lb/hitcnt', {\n selector: '#render-result',\n onRenderStart:() => {\n c.session.sendQueued('开始渲染砍击榜了,请耐心等待 10s')\n },\n }),\n c.services.render.renderUrl('https://aiobs.ktlab.io/tmp/lb/score', {\n selector: '#render-result',\n onRenderStart: () => {\n c.session.sendQueued('开始渲染分数榜了,请耐心等待 10s')\n }\n }),\n ])\n c.session.sendImgBuffer(hit, 'image/png')\n c.session.sendImgBuffer(score, 'image/png')\n })\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,SAAQ,sBAAqB;AAE7B,IAAO,cAAQ,MACb,IAAI,eAAe,EAChB,QAAQ,IAAI,EACZ,SAAS,KAAK,EACd,SAAS,MAAM,EACf,SAAS,gCAAO,EAChB,SAAS,0BAAM,EACf,YAAY,CAAO,MAAM;AACxB,QAAM,CAAC,KAAK,KAAK,IAAI,MAAM,QAAQ,IAAI;AAAA,IACrC,EAAE,SAAS,OAAO,UAAU,wCAAwC;AAAA,MAClE,UAAU;AAAA,MACV,eAAc,MAAM;AAClB,UAAE,QAAQ,WAAW,0FAAoB;AAAA,MAC3C;AAAA,IACF,CAAC;AAAA,IACD,EAAE,SAAS,OAAO,UAAU,uCAAuC;AAAA,MACjE,UAAU;AAAA,MACV,eAAe,MAAM;AACnB,UAAE,QAAQ,WAAW,0FAAoB;AAAA,MAC3C;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACD,IAAE,QAAQ,cAAc,KAAK,WAAW;AACxC,IAAE,QAAQ,cAAc,OAAO,WAAW;AAC5C,EAAC;","names":[]}
|
package/dist/esm/cmd/index.js
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
import IdSearch from "
|
2
|
-
import KeySearch from "
|
3
|
-
import Latest from "
|
4
|
-
import Rank from "
|
5
|
-
import Score from "
|
6
|
-
import Subscribe from "
|
7
|
-
import Subjoin from "
|
8
|
-
import Subleave from "
|
9
|
-
import Unsubscribe from "
|
10
|
-
import Bind from "
|
11
|
-
import Tmp from "
|
1
|
+
import IdSearch from "../cmd/bsmap/id-search";
|
2
|
+
import KeySearch from "../cmd/bsmap/key-search";
|
3
|
+
import Latest from "../cmd/bsmap/latest";
|
4
|
+
import Rank from "../cmd/rank";
|
5
|
+
import Score from "../cmd/score";
|
6
|
+
import Subscribe from "../cmd/subscribe";
|
7
|
+
import Subjoin from "../cmd/subscribe/subjoin";
|
8
|
+
import Subleave from "../cmd/subscribe/subleave";
|
9
|
+
import Unsubscribe from "../cmd/subscribe/unsubscribe";
|
10
|
+
import Bind from "../cmd/bind";
|
11
|
+
import Tmp from "../cmd/deprecated/tmp";
|
12
12
|
function applyCommand(...fns) {
|
13
13
|
return fns.map((fn) => fn());
|
14
14
|
}
|
package/dist/esm/cmd/rank.js
CHANGED
@@ -18,9 +18,9 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "
|
22
|
-
import { parsePlatform, Platform } from "
|
23
|
-
import { UnknownUserIDError } from "
|
21
|
+
import { CommandBuilder } from "../interface/cmd/builder";
|
22
|
+
import { parsePlatform, Platform } from "../interface";
|
23
|
+
import { UnknownUserIDError } from "../infra/errors";
|
24
24
|
var rank_default = () => CommandBuilder.create("rank").addOption("p", "platform:string").setDescription("clear an auth account relate info").setExecutor((c) => __async(null, null, function* () {
|
25
25
|
let uid = c.session.u.id;
|
26
26
|
if (c.session.mentions && c.session.mentions.length > 0) {
|
package/dist/esm/cmd/score.js
CHANGED
@@ -18,14 +18,14 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "
|
22
|
-
import { Platform } from "
|
23
|
-
import { convertDiff } from "
|
21
|
+
import { CommandBuilder } from "../interface/cmd/builder";
|
22
|
+
import { Platform } from "../interface";
|
23
|
+
import { convertDiff } from "../utils";
|
24
24
|
import {
|
25
25
|
AccountBindingNotFoundError,
|
26
26
|
ScoreNotFoundError
|
27
|
-
} from "
|
28
|
-
import { NotFoundError } from "
|
27
|
+
} from "../infra/errors";
|
28
|
+
import { NotFoundError } from "../infra/support/fetch/error";
|
29
29
|
var score_default = () => new CommandBuilder().setName("score").addOption("d", "difficulty:string").addOption("m", "mode:string").addAlias("bbscore").addAlias("/score").setExecutor((c) => __async(null, null, function* () {
|
30
30
|
var _a;
|
31
31
|
let uid = c.session.u.id;
|
@@ -37,7 +37,7 @@ var __async = (__this, __arguments, generator) => {
|
|
37
37
|
step((generator = generator.apply(__this, __arguments)).next());
|
38
38
|
});
|
39
39
|
};
|
40
|
-
import { SubscriptionExistError } from "
|
40
|
+
import { SubscriptionExistError } from "../../infra/errors";
|
41
41
|
const beatleader = (c) => __async(null, null, function* () {
|
42
42
|
const { blSub } = yield c.services.db.getSubscriptionsByGID(c.session.g.id);
|
43
43
|
if (blSub) {
|
@@ -37,7 +37,7 @@ var __async = (__this, __arguments, generator) => {
|
|
37
37
|
step((generator = generator.apply(__this, __arguments)).next());
|
38
38
|
});
|
39
39
|
};
|
40
|
-
import { SubscriptionExistError } from "
|
40
|
+
import { SubscriptionExistError } from "../../infra/errors";
|
41
41
|
const beatsaver = (c) => __async(null, null, function* () {
|
42
42
|
const { bsMapSub } = yield c.services.db.getSubscriptionsByGID(c.session.g.id);
|
43
43
|
if (bsMapSub) {
|
@@ -37,7 +37,7 @@ var __async = (__this, __arguments, generator) => {
|
|
37
37
|
step((generator = generator.apply(__this, __arguments)).next());
|
38
38
|
});
|
39
39
|
};
|
40
|
-
import { BLIDNotFoundError, SubscriptionExistError } from "
|
40
|
+
import { BLIDNotFoundError, SubscriptionExistError } from "../../infra/errors";
|
41
41
|
const idBeatleaderScore = (c) => __async(null, null, function* () {
|
42
42
|
if (!c.input) {
|
43
43
|
return;
|
@@ -37,7 +37,7 @@ var __async = (__this, __arguments, generator) => {
|
|
37
37
|
step((generator = generator.apply(__this, __arguments)).next());
|
38
38
|
});
|
39
39
|
};
|
40
|
-
import { BSIDNotFoundError, SubscriptionExistError } from "
|
40
|
+
import { BSIDNotFoundError, SubscriptionExistError } from "../../infra/errors";
|
41
41
|
const idBeatsaverMapper = (c) => __async(null, null, function* () {
|
42
42
|
if (!c.input) {
|
43
43
|
return;
|
@@ -18,11 +18,11 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "
|
22
|
-
import { beatleader } from "
|
23
|
-
import { beatsaver } from "
|
24
|
-
import { NoneSubscriptionExistError } from "
|
25
|
-
import { idBeatsaverMapper } from "
|
21
|
+
import { CommandBuilder } from "../../interface/cmd/builder";
|
22
|
+
import { beatleader } from "../../cmd/subscribe/beatleader";
|
23
|
+
import { beatsaver } from "../../cmd/subscribe/beatsaver";
|
24
|
+
import { NoneSubscriptionExistError } from "../../infra/errors";
|
25
|
+
import { idBeatsaverMapper } from "../../cmd/subscribe/id-beatsaver-mapper";
|
26
26
|
var subscribe_default = () => new CommandBuilder().setName("subscribe").addAlias("bbsub").addAlias("/subbl", { options: { type: "beatleader" } }).addAlias("/subbs", { options: { type: "beatsaver" } }).addAlias("blsub", { options: { type: "beatleader" } }).addAlias("bssub", { options: { type: "beatsaver" } }).addAlias("subbl", { options: { type: "beatleader" } }).addAlias("subbs", { options: { type: "beatsaver" } }).addAlias("subbl", { options: { type: "beatleader" } }).addAlias("submapper", { options: { type: "bsmapper" } }).addOption("type", "type:string").setDescription("clear an auth account relate info").setExecutor((c) => __async(null, null, function* () {
|
27
27
|
var _a, _b;
|
28
28
|
if (c.options.type === "beatsaver") {
|
@@ -18,8 +18,8 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "
|
22
|
-
import { SubscriptionNotExistError } from "
|
21
|
+
import { CommandBuilder } from "../../interface/cmd/builder";
|
22
|
+
import { SubscriptionNotExistError } from "../../infra/errors";
|
23
23
|
var subjoin_default = () => new CommandBuilder().setName("subjoin").addAlias("bbjoin").addAlias("/joinbl", { options: { type: "beatleader" } }).addAlias("/joinbs", { options: { type: "beatsaver" } }).addAlias("bljoin", { options: { type: "beatleader" } }).addAlias("bsjoin", { options: { type: "beatsaver" } }).addOption("type", "type:string").setDescription("").setExecutor((c) => __async(null, null, function* () {
|
24
24
|
const { blSub, bsMapSub } = yield c.services.db.getSubscriptionsByGID(
|
25
25
|
c.session.g.id
|
@@ -18,7 +18,7 @@ var __async = (__this, __arguments, generator) => {
|
|
18
18
|
step((generator = generator.apply(__this, __arguments)).next());
|
19
19
|
});
|
20
20
|
};
|
21
|
-
import { CommandBuilder } from "
|
21
|
+
import { CommandBuilder } from "../../interface/cmd/builder";
|
22
22
|
var subleave_default = () => new CommandBuilder().setName("subleave").addAlias("bbleave").addAlias("/leavebl", { options: { type: "beatleader" } }).addAlias("/leavebs", { options: { type: "beatsaver" } }).addAlias("leavebl", { options: { type: "beatleader" } }).addAlias("leavebs", { options: { type: "beatsaver" } }).addOption("type", "type:string").setDescription("").setExecutor((c) => __async(null, null, function* () {
|
23
23
|
const subs = yield c.services.db.getSubscriptionInfoByUGID(
|
24
24
|
c.session.g.id,
|
@@ -37,11 +37,11 @@ var __async = (__this, __arguments, generator) => {
|
|
37
37
|
step((generator = generator.apply(__this, __arguments)).next());
|
38
38
|
});
|
39
39
|
};
|
40
|
-
import { CommandBuilder } from "
|
40
|
+
import { CommandBuilder } from "../../interface/cmd/builder";
|
41
41
|
import {
|
42
42
|
BSMapperSubscriptionNotExistError,
|
43
43
|
SubscriptionNotExistError
|
44
|
-
} from "
|
44
|
+
} from "../../infra/errors";
|
45
45
|
var unsubscribe_default = () => new CommandBuilder().setName("unsubscribe").addAlias("bbunsub").addAlias("/unsubbl", { options: { type: "beatleader" } }).addAlias("/unsubbs", { options: { type: "beatsaver" } }).addAlias("unsubbl", { options: { type: "beatleader" } }).addAlias("unsubbs", { options: { type: "beatsaver" } }).addOption("type", "type:string").setDescription("").setExecutor((c) => __async(null, null, function* () {
|
46
46
|
const { blSub, bsMapSub, bsAlertSub } = yield c.services.db.getSubscriptionsByGID(
|
47
47
|
c.session.g.id
|
@@ -19,7 +19,7 @@ var __spreadValues = (a, b) => {
|
|
19
19
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
20
20
|
import { jsx, jsxs } from "react/jsx-runtime";
|
21
21
|
import { BarChart } from "lucide-react";
|
22
|
-
import { diffConv } from "
|
22
|
+
import { diffConv } from "../../components/utils";
|
23
23
|
function RankDifficulty({
|
24
24
|
difficulty,
|
25
25
|
star,
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
2
2
|
import dayjs from "dayjs";
|
3
|
-
import Flags, { EarchIcon } from "
|
4
|
-
import { formatDate, numberWithCommas } from "
|
3
|
+
import Flags, { EarchIcon } from "../../components/components/flag";
|
4
|
+
import { formatDate, numberWithCommas } from "../../components/utils";
|
5
5
|
function BlRankScoreItem(props) {
|
6
6
|
return /* @__PURE__ */ jsx(
|
7
7
|
"div",
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
2
2
|
import dayjs from "dayjs";
|
3
|
-
import Flags, { EarchIcon } from "
|
4
|
-
import { formatDate, numberWithCommas } from "
|
3
|
+
import Flags, { EarchIcon } from "../../components/components/flag";
|
4
|
+
import { formatDate, numberWithCommas } from "../../components/utils";
|
5
5
|
function SSRankScoreItem(props) {
|
6
6
|
return /* @__PURE__ */ jsx(
|
7
7
|
"div",
|
@@ -31,11 +31,11 @@ import ScoreGraph from "../components/scoregraph";
|
|
31
31
|
import {
|
32
32
|
BlRankScoreItem,
|
33
33
|
ScoreItemSkeleton
|
34
|
-
} from "
|
35
|
-
import { RankDifficulty } from "
|
36
|
-
import { Avatar } from "
|
37
|
-
import { formatDuration, formatTime } from "
|
38
|
-
import Progressbar from "
|
34
|
+
} from "../../components/components/bl-rank-score-item";
|
35
|
+
import { RankDifficulty } from "../../components/components/RankDifficulty";
|
36
|
+
import { Avatar } from "../../components/components/base/avatar";
|
37
|
+
import { formatDuration, formatTime } from "../../components/utils";
|
38
|
+
import Progressbar from "../../components/components/progressbar";
|
39
39
|
function BLRankScore({
|
40
40
|
score,
|
41
41
|
aroundScores,
|
@@ -3,7 +3,7 @@ import BSMapShare from "./bs-map";
|
|
3
3
|
import SSPlayerPage from "./ss-player";
|
4
4
|
import BLPlayerPage from "./bl-player";
|
5
5
|
import { BLScore } from "./bl-score";
|
6
|
-
import BLRankScore from "
|
6
|
+
import BLRankScore from "../../components/pages/bl-score-with-rank";
|
7
7
|
const getBSMapComp = (bsMap, bsMapQrUrl, previewQrUrl) => {
|
8
8
|
return /* @__PURE__ */ jsx(
|
9
9
|
BSMapShare,
|
package/dist/esm/index.js
CHANGED
@@ -38,9 +38,9 @@ var __async = (__this, __arguments, generator) => {
|
|
38
38
|
step((generator = generator.apply(__this, __arguments)).next());
|
39
39
|
});
|
40
40
|
};
|
41
|
-
import { html2imgBuffer } from "./puppeteer";
|
41
|
+
import { html2imgBuffer, RenderOptions, url2imgBuffer } from "./puppeteer";
|
42
42
|
import { Puppeteer } from "puppeteer-core";
|
43
|
-
import { Fetch } from "
|
43
|
+
import { Fetch } from "../../../infra/support/fetch";
|
44
44
|
class CFBrowserRendering {
|
45
45
|
constructor(accountId, cfAPIKey) {
|
46
46
|
this.accountId = accountId;
|
@@ -56,12 +56,9 @@ class CFBrowserRendering {
|
|
56
56
|
return this.f.post("/browser-rendering/screenshot", {
|
57
57
|
responseType: "arrayBuffer",
|
58
58
|
body: __spreadProps(__spreadValues({}, body), {
|
59
|
-
"screenshotOptions": {
|
60
|
-
"omitBackground": true
|
61
|
-
},
|
62
59
|
"viewport": {
|
63
|
-
"width":
|
64
|
-
"height":
|
60
|
+
"width": 3840,
|
61
|
+
"height": 2160,
|
65
62
|
"deviceScaleFactor": 2
|
66
63
|
},
|
67
64
|
"gotoOptions": {
|
@@ -95,7 +92,7 @@ class PuppeteerRendering {
|
|
95
92
|
}
|
96
93
|
url2img(html, opt) {
|
97
94
|
return __async(this, null, function* () {
|
98
|
-
return
|
95
|
+
return url2imgBuffer(this.browserGetter, html, opt);
|
99
96
|
});
|
100
97
|
}
|
101
98
|
}
|
@@ -122,6 +119,7 @@ const getImageRender = (cfg) => {
|
|
122
119
|
};
|
123
120
|
export {
|
124
121
|
CFBrowserRendering,
|
122
|
+
RenderOptions as PuppeteerOptions,
|
125
123
|
PuppeteerRendering,
|
126
124
|
RemoteBrowserGetter,
|
127
125
|
getImageRender
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../../src/infra/support/render/index.ts"],"sourcesContent":["import {html2imgBuffer, RenderOptions} from \"./puppeteer\";\nimport {Browser, Puppeteer} from \"puppeteer-core\";\nimport {Fetch} from \"@/infra/support/fetch\";\
|
1
|
+
{"version":3,"sources":["../../../../../src/infra/support/render/index.ts"],"sourcesContent":["import {html2imgBuffer, RenderOptions, url2imgBuffer} from \"./puppeteer\";\nimport {Browser, Puppeteer} from \"puppeteer-core\";\nimport {Fetch} from \"@/infra/support/fetch\";\nexport {RenderOptions as PuppeteerOptions}\nexport interface ImageRender {\n html2img: (html: string, opt: RenderOptions) => Promise<Buffer>\n url2img: (url: string, opt: RenderOptions) => Promise<Buffer>\n}\n\nexport type RenderConfig = {\n mode: 'cf' | 'puppeteer'\n puppeteerURL?: string\n defaultWaitTimeout?: number\n waitTimeout?: number\n cfAccountId?: string,\n cfAPIKey?: string,\n}\n\nexport class CFBrowserRendering implements ImageRender {\n f: Fetch\n constructor(private accountId: string, private cfAPIKey: string) {\n this.f = new Fetch()\n .baseUrl(`https://api.cloudflare.com/client/v4/accounts/${accountId}`)\n .extend({\n headers: {\n Authorization: `Bearer ${cfAPIKey}`\n },\n })\n }\n private post(body) {\n return this.f.post('/browser-rendering/screenshot', {\n responseType: 'arrayBuffer',\n body: {\n ...body,\n \"viewport\": {\n \"width\": 3840,\n \"height\": 2160,\n \"deviceScaleFactor\": 2,\n },\n \"gotoOptions\": {\n \"waitUntil\": \"networkidle0\",\n \"timeout\": 30000\n },\n }\n })\n }\n\n\n\n async html2img (html: string, opt: RenderOptions) {\n const buf = await this.post({html: html, ...opt})\n return Buffer.from(buf)\n }\n async url2img (url: string, opt: RenderOptions) {\n const buf = await this.post({url: url, ...opt})\n return Buffer.from(buf)\n }\n}\n\nexport class PuppeteerRendering implements ImageRender {\n constructor(private browserGetter: () => Promise<Browser>) {\n }\n async html2img (html: string, opt: RenderOptions) {\n return html2imgBuffer(this.browserGetter, html, opt)\n }\n async url2img (html: string, opt: RenderOptions) {\n return url2imgBuffer(this.browserGetter, html, opt)\n }\n}\n\n\nexport const RemoteBrowserGetter = (addr: string) => {\n const p = new Puppeteer()\n let opt = {}\n if(addr.startsWith('ws')) {\n opt = { browserWSEndpoint: addr }\n }else if(addr.startsWith('http')) {\n opt = { browserURL: addr }\n }\n return () => p.connect(opt)\n}\n\n\nexport const getImageRender = (cfg: RenderConfig & {browserGetter?: () => Promise<Browser>}) => {\n if(cfg.mode === 'cf') {\n return new CFBrowserRendering(cfg.cfAccountId, cfg.cfAPIKey)\n }\n if(cfg.puppeteerURL) {\n return new PuppeteerRendering(RemoteBrowserGetter(cfg.puppeteerURL))\n }\n if(cfg.browserGetter) {\n return new PuppeteerRendering(cfg.browserGetter)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAQ,gBAAgB,eAAe,qBAAoB;AAC3D,SAAiB,iBAAgB;AACjC,SAAQ,aAAY;AAgBb,MAAM,mBAA0C;AAAA,EAErD,YAAoB,WAA2B,UAAkB;AAA7C;AAA2B;AAD/C;AAEE,SAAK,IAAI,IAAI,MAAM,EAChB,QAAQ,iDAAiD,SAAS,EAAE,EACpE,OAAO;AAAA,MACN,SAAS;AAAA,QACP,eAAe,UAAU,QAAQ;AAAA,MACnC;AAAA,IACF,CAAC;AAAA,EACL;AAAA,EACQ,KAAK,MAAM;AACjB,WAAO,KAAK,EAAE,KAAK,iCAAiC;AAAA,MAClD,cAAc;AAAA,MACd,MAAM,iCACD,OADC;AAAA,QAEJ,YAAY;AAAA,UACV,SAAS;AAAA,UACT,UAAU;AAAA,UACV,qBAAqB;AAAA,QACvB;AAAA,QACA,eAAe;AAAA,UACb,aAAa;AAAA,UACb,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAIM,SAAU,MAAc,KAAoB;AAAA;AAChD,YAAM,MAAM,MAAM,KAAK,KAAK,iBAAC,QAAe,IAAI;AAChD,aAAO,OAAO,KAAK,GAAG;AAAA,IACxB;AAAA;AAAA,EACM,QAAS,KAAa,KAAoB;AAAA;AAC9C,YAAM,MAAM,MAAM,KAAK,KAAK,iBAAC,OAAa,IAAI;AAC9C,aAAO,OAAO,KAAK,GAAG;AAAA,IACxB;AAAA;AACF;AAEO,MAAM,mBAA0C;AAAA,EACrD,YAAoB,eAAuC;AAAvC;AAAA,EACpB;AAAA,EACM,SAAU,MAAc,KAAoB;AAAA;AAChD,aAAO,eAAe,KAAK,eAAe,MAAM,GAAG;AAAA,IACrD;AAAA;AAAA,EACM,QAAS,MAAc,KAAoB;AAAA;AAC/C,aAAO,cAAc,KAAK,eAAe,MAAM,GAAG;AAAA,IACpD;AAAA;AACF;AAGO,MAAM,sBAAsB,CAAC,SAAiB;AACnD,QAAM,IAAI,IAAI,UAAU;AACxB,MAAI,MAAM,CAAC;AACX,MAAG,KAAK,WAAW,IAAI,GAAG;AACxB,UAAM,EAAE,mBAAmB,KAAK;AAAA,EAClC,WAAS,KAAK,WAAW,MAAM,GAAG;AAChC,UAAM,EAAE,YAAY,KAAK;AAAA,EAC3B;AACA,SAAO,MAAM,EAAE,QAAQ,GAAG;AAC5B;AAGO,MAAM,iBAAiB,CAAC,QAAiE;AAC9F,MAAG,IAAI,SAAS,MAAM;AACpB,WAAO,IAAI,mBAAmB,IAAI,aAAa,IAAI,QAAQ;AAAA,EAC7D;AACA,MAAG,IAAI,cAAc;AACnB,WAAO,IAAI,mBAAmB,oBAAoB,IAAI,YAAY,CAAC;AAAA,EACrE;AACA,MAAG,IAAI,eAAe;AACpB,WAAO,IAAI,mBAAmB,IAAI,aAAa;AAAA,EACjD;AACF;","names":[]}
|
@@ -84,7 +84,7 @@ function html2imgBuffer(browser, html, options) {
|
|
84
84
|
options,
|
85
85
|
(page) => page.setContent(html, { waitUntil: "networkidle0" }),
|
86
86
|
{ fullPage: true },
|
87
|
-
{ width:
|
87
|
+
{ width: 3840, height: 2160, deviceScaleFactor: 2 }
|
88
88
|
);
|
89
89
|
});
|
90
90
|
}
|
@@ -95,7 +95,7 @@ function url2imgBuffer(browser, url, options) {
|
|
95
95
|
options,
|
96
96
|
(page) => page.goto(url, { waitUntil: "networkidle0" }),
|
97
97
|
{ fullPage: false },
|
98
|
-
{ width:
|
98
|
+
{ width: 3840, height: 2160, deviceScaleFactor: 2 },
|
99
99
|
`page: ${url}`
|
100
100
|
);
|
101
101
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../../../src/infra/support/render/puppeteer.ts"],"sourcesContent":["import type {Browser, Page, ScreenshotOptions, Viewport} from 'puppeteer-core';\n\n/**\n * Extends Puppeteer's ScreenshotOptions to include an optional viewport setting\n * and a selector for element-specific screenshots.\n */\nexport interface RenderOptions extends ScreenshotOptions {\n /**\n * Sets the viewport of the page.\n */\n viewport?: Viewport;\n /**\n * A CSS selector for an element to screenshot. If provided, the output\n * will be a screenshot of just this element.\n */\n selector?: string;\n /**\n * The maximum time in milliseconds to wait for the selector to appear.\n * If the element is not found within this time, an error will be thrown.\n * Defaults to Puppeteer's default (usually 30000ms).\n */\n timeout?: number;\n}\n\n/**\n * Core rendering function that handles the common logic for taking a screenshot.\n * It's designed to be called by the public-facing wrapper functions.\n * @private\n */\nasync function _renderPageToBuffer(\n browser: Browser | (() => Promise<Browser>),\n options: RenderOptions | undefined,\n loadContent: (page: Page) => Promise<any>,\n defaultScreenshotOptions: ScreenshotOptions,\n defaultViewport: Viewport,\n errorContext?: string,\n): Promise<Buffer> {\n let page: Page | undefined;\n try {\n let b : Browser\n if(typeof browser === \"function\") {\n b = await browser()\n }\n page = await b.newPage();\n\n const viewport = options?.viewport ?? defaultViewport;\n await page.setViewport(viewport);\n\n // The content loading strategy is passed in as a callback.\n await loadContent(page);\n\n const {viewport: _, selector, timeout, ...screenshotOptions} = options || {};\n\n if (selector) {\n const element = await page.waitForSelector(selector, {timeout});\n if (!element) {\n const timeoutMsg = `within the ${timeout || 'default'}ms timeout.`;\n const contextMsg = errorContext ? ` on ${errorContext}` : '';\n throw new Error(`Could not find element with selector: \"${selector}\"${contextMsg} ${timeoutMsg}`);\n }\n return Buffer.from(await element.screenshot(screenshotOptions));\n }\n\n return Buffer.from(await page.screenshot({\n ...defaultScreenshotOptions,\n ...screenshotOptions,\n }))\n } finally {\n if (page) {\n await page.close();\n }\n }\n}\n\n/**\n * Renders an HTML string into an image buffer using a provided Puppeteer browser instance.\n *\n * @param browser The active Puppeteer Browser instance.\n * @param html The HTML content to render.\n * @param options Configuration for the rendering process.\n * @returns A Promise that resolves to a Buffer containing the screenshot image.\n */\nexport async function html2imgBuffer(\n browser: Browser | (() => Promise<Browser>),\n html: string,\n options?: RenderOptions,\n): Promise<Buffer> {\n return _renderPageToBuffer(\n browser,\n options,\n (page) => page.setContent(html, {waitUntil: 'networkidle0'}),\n {fullPage: true},\n {width:
|
1
|
+
{"version":3,"sources":["../../../../../src/infra/support/render/puppeteer.ts"],"sourcesContent":["import type {Browser, Page, ScreenshotOptions, Viewport} from 'puppeteer-core';\n\n/**\n * Extends Puppeteer's ScreenshotOptions to include an optional viewport setting\n * and a selector for element-specific screenshots.\n */\nexport interface RenderOptions extends ScreenshotOptions {\n /**\n * Sets the viewport of the page.\n */\n viewport?: Viewport;\n /**\n * A CSS selector for an element to screenshot. If provided, the output\n * will be a screenshot of just this element.\n */\n selector?: string;\n /**\n * The maximum time in milliseconds to wait for the selector to appear.\n * If the element is not found within this time, an error will be thrown.\n * Defaults to Puppeteer's default (usually 30000ms).\n */\n timeout?: number;\n}\n\n/**\n * Core rendering function that handles the common logic for taking a screenshot.\n * It's designed to be called by the public-facing wrapper functions.\n * @private\n */\nasync function _renderPageToBuffer(\n browser: Browser | (() => Promise<Browser>),\n options: RenderOptions | undefined,\n loadContent: (page: Page) => Promise<any>,\n defaultScreenshotOptions: ScreenshotOptions,\n defaultViewport: Viewport,\n errorContext?: string,\n): Promise<Buffer> {\n let page: Page | undefined;\n try {\n let b : Browser\n if(typeof browser === \"function\") {\n b = await browser()\n }\n page = await b.newPage();\n\n const viewport = options?.viewport ?? defaultViewport;\n await page.setViewport(viewport);\n\n // The content loading strategy is passed in as a callback.\n await loadContent(page);\n\n const {viewport: _, selector, timeout, ...screenshotOptions} = options || {};\n\n if (selector) {\n const element = await page.waitForSelector(selector, {timeout});\n if (!element) {\n const timeoutMsg = `within the ${timeout || 'default'}ms timeout.`;\n const contextMsg = errorContext ? ` on ${errorContext}` : '';\n throw new Error(`Could not find element with selector: \"${selector}\"${contextMsg} ${timeoutMsg}`);\n }\n return Buffer.from(await element.screenshot(screenshotOptions));\n }\n\n return Buffer.from(await page.screenshot({\n ...defaultScreenshotOptions,\n ...screenshotOptions,\n }))\n } finally {\n if (page) {\n await page.close();\n }\n }\n}\n\n/**\n * Renders an HTML string into an image buffer using a provided Puppeteer browser instance.\n *\n * @param browser The active Puppeteer Browser instance.\n * @param html The HTML content to render.\n * @param options Configuration for the rendering process.\n * @returns A Promise that resolves to a Buffer containing the screenshot image.\n */\nexport async function html2imgBuffer(\n browser: Browser | (() => Promise<Browser>),\n html: string,\n options?: RenderOptions,\n): Promise<Buffer> {\n return _renderPageToBuffer(\n browser,\n options,\n (page) => page.setContent(html, {waitUntil: 'networkidle0'}),\n {fullPage: true},\n {width: 3840, height: 2160, deviceScaleFactor: 2},\n );\n}\n\n/**\n * Captures a screenshot of a given URL and returns it as an image buffer.\n *\n * @param browser The active Puppeteer Browser instance.\n * @param url The URL of the webpage to capture.\n * @param options Configuration for the rendering process.\n * @returns A Promise that resolves to a Buffer containing the screenshot image.\n */\nexport async function url2imgBuffer(\n browser: Browser | (() => Promise<Browser>),\n url: string,\n options?: RenderOptions,\n): Promise<Buffer> {\n return _renderPageToBuffer(\n browser,\n options,\n (page) => page.goto(url, {waitUntil: 'networkidle0'}),\n {fullPage: false},\n {width: 3840, height: 2160, deviceScaleFactor: 2},\n `page: ${url}`,\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAe,oBACb,SACA,SACA,aACA,0BACA,iBACA,cACiB;AAAA;AApCnB;AAqCE,QAAI;AACJ,QAAI;AACF,UAAI;AACJ,UAAG,OAAO,YAAY,YAAY;AAChC,YAAI,MAAM,QAAQ;AAAA,MACpB;AACA,aAAO,MAAM,EAAE,QAAQ;AAEvB,YAAM,YAAW,wCAAS,aAAT,YAAqB;AACtC,YAAM,KAAK,YAAY,QAAQ;AAG/B,YAAM,YAAY,IAAI;AAEtB,YAA+D,gBAAW,CAAC,GAApE,YAAU,GAAG,UAAU,QAnDlC,IAmDmE,IAArB,8BAAqB,IAArB,CAAnC,YAAa,YAAU;AAE9B,UAAI,UAAU;AACZ,cAAM,UAAU,MAAM,KAAK,gBAAgB,UAAU,EAAC,QAAO,CAAC;AAC9D,YAAI,CAAC,SAAS;AACZ,gBAAM,aAAa,cAAc,WAAW,SAAS;AACrD,gBAAM,aAAa,eAAe,OAAO,YAAY,KAAK;AAC1D,gBAAM,IAAI,MAAM,0CAA0C,QAAQ,IAAI,UAAU,IAAI,UAAU,EAAE;AAAA,QAClG;AACA,eAAO,OAAO,KAAK,MAAM,QAAQ,WAAW,iBAAiB,CAAC;AAAA,MAChE;AAEA,aAAO,OAAO,KAAK,MAAM,KAAK,WAAW,kCACpC,2BACA,kBACJ,CAAC;AAAA,IACJ,UAAE;AACA,UAAI,MAAM;AACR,cAAM,KAAK,MAAM;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA;AAUA,SAAsB,eACpB,SACA,MACA,SACiB;AAAA;AACjB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,CAAC,SAAS,KAAK,WAAW,MAAM,EAAC,WAAW,eAAc,CAAC;AAAA,MAC3D,EAAC,UAAU,KAAI;AAAA,MACf,EAAC,OAAO,MAAM,QAAQ,MAAM,mBAAmB,EAAC;AAAA,IAClD;AAAA,EACF;AAAA;AAUA,SAAsB,cACpB,SACA,KACA,SACiB;AAAA;AACjB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,CAAC,SAAS,KAAK,KAAK,KAAK,EAAC,WAAW,eAAc,CAAC;AAAA,MACpD,EAAC,UAAU,MAAK;AAAA,MAChB,EAAC,OAAO,MAAM,QAAQ,MAAM,mBAAmB,EAAC;AAAA,MAChD,SAAS,GAAG;AAAA,IACd;AAAA,EACF;AAAA;","names":[]}
|
@@ -21,7 +21,7 @@ var __async = (__this, __arguments, generator) => {
|
|
21
21
|
step((generator = generator.apply(__this, __arguments)).next());
|
22
22
|
});
|
23
23
|
};
|
24
|
-
import { BizError } from "
|
24
|
+
import { BizError } from "../../infra/errors";
|
25
25
|
class CommandBuilder {
|
26
26
|
constructor() {
|
27
27
|
__publicField(this, "name");
|
@@ -21,7 +21,7 @@ var __async = (__this, __arguments, generator) => {
|
|
21
21
|
step((generator = generator.apply(__this, __arguments)).next());
|
22
22
|
});
|
23
23
|
};
|
24
|
-
import { createFetch } from "
|
24
|
+
import { createFetch } from "../../../infra/support/fetch";
|
25
25
|
class AIOSaberClient {
|
26
26
|
constructor(logger) {
|
27
27
|
__publicField(this, "f");
|
@@ -21,7 +21,7 @@ var __async = (__this, __arguments, generator) => {
|
|
21
21
|
step((generator = generator.apply(__this, __arguments)).next());
|
22
22
|
});
|
23
23
|
};
|
24
|
-
import { createFetch } from "
|
24
|
+
import { createFetch } from "../../../infra/support/fetch";
|
25
25
|
class BeatLeaderClient {
|
26
26
|
constructor(opt) {
|
27
27
|
__publicField(this, "f");
|
@@ -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 "
|
39
|
-
import { NotFoundError } from "
|
38
|
+
import { createFetch } from "../../../infra/support/fetch";
|
39
|
+
import { NotFoundError } from "../../../infra/support/fetch/error";
|
40
40
|
class BeatSaverClient {
|
41
41
|
constructor(opt) {
|
42
42
|
__publicField(this, "f");
|
@@ -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 "
|
25
|
-
import { NotFoundError } from "
|
24
|
+
import { createFetch } from "../../../infra/support/fetch";
|
25
|
+
import { NotFoundError } from "../../../infra/support/fetch/error";
|
26
26
|
class ScoreSaberClient {
|
27
27
|
constructor(logger) {
|
28
28
|
__publicField(this, "f");
|
@@ -36,10 +36,10 @@ var __async = (__this, __arguments, generator) => {
|
|
36
36
|
});
|
37
37
|
};
|
38
38
|
import { AIOSaberClient, BeatLeaderClient, BeatSaverClient, ScoreSaberClient } from "./base";
|
39
|
-
import { BLIDNotFoundError, MapIdNotFoundError, SSIDNotFoundError } from "
|
40
|
-
import { NotFoundError } from "
|
41
|
-
import { sortScore } from "
|
42
|
-
import { decode } from "
|
39
|
+
import { BLIDNotFoundError, MapIdNotFoundError, SSIDNotFoundError } from "../../infra/errors";
|
40
|
+
import { NotFoundError } from "../../infra/support/fetch/error";
|
41
|
+
import { sortScore } from "../../service/api/sortScore";
|
42
|
+
import { decode } from "../../components/utils/bl/bsorDecoder";
|
43
43
|
class APIService {
|
44
44
|
constructor(cfg, logger) {
|
45
45
|
__publicField(this, "BeatLeader");
|