maidraw 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/assets/themes/common/finale/achievement/a.png +0 -0
  2. package/assets/themes/common/finale/achievement/aa.png +0 -0
  3. package/assets/themes/common/finale/achievement/aaa.png +0 -0
  4. package/assets/themes/common/finale/achievement/b.png +0 -0
  5. package/assets/themes/common/finale/achievement/c.png +0 -0
  6. package/assets/themes/common/finale/achievement/d.png +0 -0
  7. package/assets/themes/common/finale/achievement/e.png +0 -0
  8. package/assets/themes/common/finale/achievement/f.png +0 -0
  9. package/assets/themes/common/finale/achievement/s.png +0 -0
  10. package/assets/themes/common/finale/achievement/sp.png +0 -0
  11. package/assets/themes/common/finale/achievement/ss.png +0 -0
  12. package/assets/themes/common/finale/achievement/ssp.png +0 -0
  13. package/assets/themes/common/finale/achievement/sss.png +0 -0
  14. package/assets/themes/common/finale/achievement/sssp.png +0 -0
  15. package/assets/themes/common/finale/background.png +0 -0
  16. package/assets/themes/common/finale/background2.png +0 -0
  17. package/assets/themes/common/finale/logo.png +0 -0
  18. package/assets/themes/common/finale/milestone/ap.png +0 -0
  19. package/assets/themes/common/finale/milestone/app.png +0 -0
  20. package/assets/themes/common/finale/milestone/fc.png +0 -0
  21. package/assets/themes/common/finale/milestone/fcp.png +0 -0
  22. package/assets/themes/common/finale/milestone/fdx.png +0 -0
  23. package/assets/themes/common/finale/milestone/fdxp.png +0 -0
  24. package/assets/themes/common/finale/milestone/fsp.png +0 -0
  25. package/assets/themes/common/finale/milestone/sync.png +0 -0
  26. package/assets/themes/common/versionless/void.png +0 -0
  27. package/assets/themes/jp/finaleLandscape/manifest.json +128 -0
  28. package/assets/themes/jp/finalePortrait/manifest.json +128 -0
  29. package/dist/index.d.ts +2 -31
  30. package/dist/index.js +3 -895
  31. package/dist/index.js.map +1 -1
  32. package/dist/mai/best50/index.d.ts +34 -0
  33. package/dist/mai/best50/index.js +890 -0
  34. package/dist/mai/best50/index.js.map +1 -0
  35. package/dist/mai/best50/lib/divingFish/index.d.ts +82 -0
  36. package/dist/{lib → mai/best50/lib}/divingFish/index.js +68 -20
  37. package/dist/mai/best50/lib/divingFish/index.js.map +1 -0
  38. package/dist/{lib → mai/best50/lib}/index.d.ts +3 -3
  39. package/dist/{lib → mai/best50/lib}/index.js +1 -1
  40. package/dist/mai/best50/lib/index.js.map +1 -0
  41. package/dist/mai/best50/lib/kamaiTachi/index.d.ts +170 -0
  42. package/dist/mai/best50/lib/kamaiTachi/index.js +358 -0
  43. package/dist/mai/best50/lib/kamaiTachi/index.js.map +1 -0
  44. package/dist/{lib → mai/best50/lib}/lxns/index.d.ts +15 -7
  45. package/dist/{lib → mai/best50/lib}/lxns/index.js +42 -16
  46. package/dist/mai/best50/lib/lxns/index.js.map +1 -0
  47. package/dist/mai/chart/database.d.ts +11 -0
  48. package/dist/mai/chart/database.js +63 -0
  49. package/dist/mai/chart/database.js.map +1 -0
  50. package/dist/mai/chart/index.d.ts +4 -0
  51. package/dist/mai/chart/index.js +9 -0
  52. package/dist/mai/chart/index.js.map +1 -0
  53. package/dist/mai/index.d.ts +6 -0
  54. package/dist/mai/index.js +11 -0
  55. package/dist/mai/index.js.map +1 -0
  56. package/package.json +1 -1
  57. package/dist/lib/divingFish/index.d.ts +0 -50
  58. package/dist/lib/divingFish/index.js.map +0 -1
  59. package/dist/lib/index.js.map +0 -1
  60. package/dist/lib/kamaiTachi/index.d.ts +0 -111
  61. package/dist/lib/kamaiTachi/index.js +0 -194
  62. package/dist/lib/kamaiTachi/index.js.map +0 -1
  63. package/dist/lib/lxns/index.js.map +0 -1
  64. package/test/cn-2024-landscape.webp +0 -0
  65. package/test/cn-2024-portrait.webp +0 -0
  66. package/test/fetchConvert.js +0 -65
  67. package/test/jp-buddies-landscape.webp +0 -0
  68. package/test/jp-buddies-portrait.webp +0 -0
  69. package/test/jp-buddiesplus-landscape.webp +0 -0
  70. package/test/jp-buddiesplus-portrait.webp +0 -0
  71. package/test/jp-prism-landscape.webp +0 -0
  72. package/test/jp-prism-portrait.webp +0 -0
  73. package/test/jp-prismplus-landscape.webp +0 -0
  74. package/test/jp-prismplus-portrait.webp +0 -0
  75. package/test/testDraw.js +0 -745
@@ -0,0 +1,358 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.KamaiTachi = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const type_1 = require("../../../../type");
9
+ const memory_cache_1 = require("memory-cache");
10
+ class KamaiTachi {
11
+ baseURL;
12
+ CURRENT_VERSION;
13
+ cache = new memory_cache_1.Cache();
14
+ axios;
15
+ constructor(auth, baseURL = "https://kamai.tachi.ac/", CURRENT_VERSION = KamaiTachi
16
+ .EGameVersions.PRISM) {
17
+ this.baseURL = baseURL;
18
+ this.CURRENT_VERSION = CURRENT_VERSION;
19
+ this.axios = axios_1.default.create({
20
+ baseURL: this.baseURL,
21
+ });
22
+ }
23
+ async getRaw(endpoint, data,
24
+ /**
25
+ * Cache TTL in milliseconds. Defaults to 30 minutes.
26
+ */
27
+ cacheTTL = 30 * 60 * 1000, options = {}) {
28
+ const cacheKey = `${endpoint}-${JSON.stringify(data)}`;
29
+ if (cacheTTL > 0) {
30
+ const cacheContent = this.cache.get(cacheKey);
31
+ if (cacheContent)
32
+ return cacheContent;
33
+ }
34
+ return await this.axios
35
+ .get(endpoint, { params: data, ...options })
36
+ .then((r) => {
37
+ if (cacheTTL > 0) {
38
+ this.cache.put(cacheKey, r.data, cacheTTL);
39
+ }
40
+ return r.data;
41
+ })
42
+ .catch((e) => {
43
+ return e.response?.data || e;
44
+ });
45
+ }
46
+ async get(endpoint, data,
47
+ /**
48
+ * Cache TTL in milliseconds. Defaults to 30 minutes.
49
+ */
50
+ cacheTTL = 30 * 60 * 1000, options = {}) {
51
+ return this.getRaw(endpoint, data, cacheTTL, options);
52
+ }
53
+ async post(endpoint, data) {
54
+ return await this.axios
55
+ .post(endpoint, data)
56
+ .then((r) => r.data)
57
+ .catch((e) => e.response?.data);
58
+ }
59
+ async getPlayerPB(userId) {
60
+ return this.get(`/api/v1/users/${userId}/games/maimaidx/Single/pbs/all`, undefined, 60 * 1000);
61
+ }
62
+ toMaiDrawScore(score, chart, song) {
63
+ return {
64
+ chart: (() => {
65
+ return {
66
+ id: chart.data.inGameID,
67
+ name: song.title,
68
+ difficulty: (() => {
69
+ switch (chart.difficulty) {
70
+ case "Re:Master":
71
+ case "DX Re:Master":
72
+ return type_1.EDifficulty.REMASTER;
73
+ case "Master":
74
+ case "DX Master":
75
+ return type_1.EDifficulty.MASTER;
76
+ case "Expert":
77
+ case "DX Expert":
78
+ return type_1.EDifficulty.EXPERT;
79
+ case "Advanced":
80
+ case "DX Advanced":
81
+ return type_1.EDifficulty.ADVANCED;
82
+ case "Basic":
83
+ case "DX Basic":
84
+ default:
85
+ return type_1.EDifficulty.BASIC;
86
+ }
87
+ })(),
88
+ level: chart.levelNum,
89
+ maxDxScore: (() => {
90
+ return ((score.scoreData.judgements.pcrit +
91
+ score.scoreData.judgements.perfect +
92
+ score.scoreData.judgements.great +
93
+ score.scoreData.judgements.good +
94
+ score.scoreData.judgements.miss) *
95
+ 3);
96
+ })(),
97
+ };
98
+ })(),
99
+ combo: (() => {
100
+ switch (score.scoreData.lamp) {
101
+ case "FULL COMBO":
102
+ return type_1.EComboTypes.FULL_COMBO;
103
+ case "FULL COMBO+":
104
+ return type_1.EComboTypes.FULL_COMBO_PLUS;
105
+ case "ALL PERFECT":
106
+ return type_1.EComboTypes.ALL_PERFECT;
107
+ case "ALL PERFECT+":
108
+ return type_1.EComboTypes.ALL_PERFECT_PLUS;
109
+ default:
110
+ return type_1.EComboTypes.NONE;
111
+ }
112
+ })(),
113
+ sync: type_1.ESyncTypes.NONE,
114
+ achievement: score.scoreData.percent,
115
+ achievementRank: (() => {
116
+ switch (score.scoreData.grade) {
117
+ case "C":
118
+ return type_1.EAchievementTypes.C;
119
+ case "B":
120
+ return type_1.EAchievementTypes.B;
121
+ case "BB":
122
+ return type_1.EAchievementTypes.BB;
123
+ case "BBB":
124
+ return type_1.EAchievementTypes.BBB;
125
+ case "A":
126
+ return type_1.EAchievementTypes.A;
127
+ case "AA":
128
+ return type_1.EAchievementTypes.AA;
129
+ case "AAA":
130
+ return type_1.EAchievementTypes.AAA;
131
+ case "S":
132
+ return type_1.EAchievementTypes.S;
133
+ case "S+":
134
+ return type_1.EAchievementTypes.SP;
135
+ case "SS":
136
+ return type_1.EAchievementTypes.SS;
137
+ case "SS+":
138
+ return type_1.EAchievementTypes.SSP;
139
+ case "SSS":
140
+ return type_1.EAchievementTypes.SSS;
141
+ case "SSS+":
142
+ return type_1.EAchievementTypes.SSSP;
143
+ case "D":
144
+ default:
145
+ return type_1.EAchievementTypes.D;
146
+ }
147
+ })(),
148
+ dxRating: score.calculatedData.rate,
149
+ dxScore: (() => {
150
+ return (score.scoreData.judgements.pcrit * 3 +
151
+ score.scoreData.judgements.perfect * 2 +
152
+ score.scoreData.judgements.great);
153
+ })(),
154
+ };
155
+ }
156
+ async getPlayerBest50(userId, currentVersion = this.CURRENT_VERSION, omnimix = true) {
157
+ const rawPBs = await this.getPlayerPB(userId);
158
+ if (!rawPBs?.body)
159
+ return null;
160
+ const pbs = [];
161
+ for (const pb of rawPBs.body.pbs) {
162
+ let chart = rawPBs.body.charts.find((v) => v.chartID == pb.chartID);
163
+ let song = rawPBs.body.songs.find((v) => v.id == pb.songID);
164
+ if (chart && song) {
165
+ pbs.push({ pb, chart, song });
166
+ }
167
+ }
168
+ const newScores = pbs.filter((v) => v.chart.data.displayVersion == currentVersion // Assume new scores does not have omnimix charts.
169
+ );
170
+ const oldScores = pbs.filter((v) =>
171
+ // Chart exists
172
+ v.chart &&
173
+ // Chart version is older than current Version
174
+ KamaiTachi.compareGameVersions(currentVersion, v.chart.data.displayVersion) > 0 &&
175
+ (omnimix || // Omnimix is enabled, all charts are included.
176
+ !((v.chart.versions[0].includes("-omni") && // Alternatively, if omnimix is disabled, check if the chart is included in omnimix folder of the latest version, (which should always happen).
177
+ v.chart.versions[1].includes("-omni")) // Then check if the second last version is a omnimix folder. If two omnimix folders occur in a row, it is a omnimix chart.
178
+ )) // Reject that case.
179
+ );
180
+ return {
181
+ new: newScores
182
+ .sort((a, b) => b.pb.calculatedData.rate - a.pb.calculatedData.rate
183
+ ? b.pb.calculatedData.rate - a.pb.calculatedData.rate
184
+ : b.pb.scoreData.percent - a.pb.scoreData.percent)
185
+ .slice(0, 15)
186
+ .map((v) => this.toMaiDrawScore(v.pb, v.chart, v.song)),
187
+ old: oldScores
188
+ .sort((a, b) => b.pb.calculatedData.rate - a.pb.calculatedData.rate
189
+ ? b.pb.calculatedData.rate - a.pb.calculatedData.rate
190
+ : b.pb.scoreData.percent - a.pb.scoreData.percent)
191
+ .slice(0, 35)
192
+ .map((v) => this.toMaiDrawScore(v.pb, v.chart, v.song)),
193
+ };
194
+ }
195
+ async getPlayerInfo(userId) {
196
+ const profile = await this.getPlayerProfileRaw(userId);
197
+ const scores = await this.getPlayerBest50(userId);
198
+ if (!profile?.body || !scores)
199
+ return null;
200
+ let dxRating = 0;
201
+ [...scores.new, ...scores.old].forEach((v) => (dxRating += v.dxRating));
202
+ return {
203
+ name: profile?.body.username,
204
+ rating: dxRating,
205
+ };
206
+ }
207
+ async getPlayerProfileRaw(userId) {
208
+ return this.get(`/api/v1/users/${userId}`);
209
+ }
210
+ async getPlayerProfilePicture(userId) {
211
+ return ((await this.getRaw(`/api/v1/users/${userId}/pfp`, undefined, 2 * 60 * 60 * 1000, { responseType: "arraybuffer" })) || null);
212
+ }
213
+ maimai() {
214
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.MAIMAI);
215
+ }
216
+ maimaiPlus() {
217
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.MAIMAI_PLUS);
218
+ }
219
+ green() {
220
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.GREEN);
221
+ }
222
+ greenPlus() {
223
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.GREEN_PLUS);
224
+ }
225
+ orange() {
226
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.ORANGE);
227
+ }
228
+ orangePlus() {
229
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.ORANGE_PLUS);
230
+ }
231
+ pink() {
232
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.PINK);
233
+ }
234
+ pinkPlus() {
235
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.PINK_PLUS);
236
+ }
237
+ murasaki() {
238
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.MURASAKI);
239
+ }
240
+ murasakiPlus() {
241
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.MURASAKI_PLUS);
242
+ }
243
+ milk() {
244
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.MILK);
245
+ }
246
+ milkPlus() {
247
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.MILK_PLUS);
248
+ }
249
+ finale() {
250
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.FINALE);
251
+ }
252
+ dx() {
253
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.DX);
254
+ }
255
+ dxPlus() {
256
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.DX_PLUS);
257
+ }
258
+ splash() {
259
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.SPLASH);
260
+ }
261
+ splashPlus() {
262
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.SPLASH_PLUS);
263
+ }
264
+ universe() {
265
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.UNIVERSE);
266
+ }
267
+ universePlus() {
268
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.UNIVERSE_PLUS);
269
+ }
270
+ festival() {
271
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.FESTIVAL);
272
+ }
273
+ festivalPlus() {
274
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.FESTIVAL_PLUS);
275
+ }
276
+ buddies() {
277
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.BUDDIES);
278
+ }
279
+ buddiesPlus() {
280
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.BUDDIES_PLUS);
281
+ }
282
+ prism() {
283
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.PRISM);
284
+ }
285
+ prismPlus() {
286
+ return new KamaiTachi(undefined, this.baseURL, KamaiTachi.EGameVersions.PRISM_PLUS);
287
+ }
288
+ }
289
+ exports.KamaiTachi = KamaiTachi;
290
+ (function (KamaiTachi) {
291
+ let EGameVersions;
292
+ (function (EGameVersions) {
293
+ EGameVersions["PRISM_PLUS"] = "maimai\u3067\u3089\u3063\u304F\u3059 PRiSM PLUS";
294
+ EGameVersions["PRISM"] = "maimai\u3067\u3089\u3063\u304F\u3059 PRiSM";
295
+ EGameVersions["BUDDIES_PLUS"] = "maimai\u3067\u3089\u3063\u304F\u3059 BUDDiES PLUS";
296
+ EGameVersions["BUDDIES"] = "maimai\u3067\u3089\u3063\u304F\u3059 BUDDiES";
297
+ EGameVersions["FESTIVAL_PLUS"] = "maimai\u3067\u3089\u3063\u304F\u3059 FESTiVAL PLUS";
298
+ EGameVersions["FESTIVAL"] = "maimai\u3067\u3089\u3063\u304F\u3059 FESTiVAL";
299
+ EGameVersions["UNIVERSE_PLUS"] = "maimai\u3067\u3089\u3063\u304F\u3059 UNiVERSE PLUS";
300
+ EGameVersions["UNIVERSE"] = "maimai\u3067\u3089\u3063\u304F\u3059 UNiVERSE";
301
+ EGameVersions["SPLASH_PLUS"] = "maimai\u3067\u3089\u3063\u304F\u3059 Splash PLUS";
302
+ EGameVersions["SPLASH"] = "maimai\u3067\u3089\u3063\u304F\u3059 Splash";
303
+ EGameVersions["DX_PLUS"] = "maimai\u3067\u3089\u3063\u304F\u3059 PLUS";
304
+ EGameVersions["DX"] = "maimai\u3067\u3089\u3063\u304F\u3059";
305
+ EGameVersions["FINALE"] = "maimai FiNALE";
306
+ EGameVersions["MILK_PLUS"] = "maimai MiLK PLUS";
307
+ EGameVersions["MILK"] = "maimai MiLK";
308
+ EGameVersions["MURASAKI_PLUS"] = "maimai MURASAKi PLUS";
309
+ EGameVersions["MURASAKI"] = "maimai MURASAKi";
310
+ EGameVersions["PINK_PLUS"] = "maimai PiNK PLUS";
311
+ EGameVersions["PINK"] = "maimai PiNK";
312
+ EGameVersions["ORANGE_PLUS"] = "maimai ORANGE PLUS";
313
+ EGameVersions["ORANGE"] = "maimai ORANGE";
314
+ EGameVersions["GREEN_PLUS"] = "maimai GreeN PLUS";
315
+ EGameVersions["GREEN"] = "maimai GreeN";
316
+ EGameVersions["MAIMAI_PLUS"] = "maimai PLUS";
317
+ EGameVersions["MAIMAI"] = "maimai";
318
+ })(EGameVersions = KamaiTachi.EGameVersions || (KamaiTachi.EGameVersions = {}));
319
+ const GameVersions = [
320
+ EGameVersions.MAIMAI,
321
+ EGameVersions.MAIMAI_PLUS,
322
+ EGameVersions.GREEN,
323
+ EGameVersions.GREEN_PLUS,
324
+ EGameVersions.ORANGE,
325
+ EGameVersions.ORANGE_PLUS,
326
+ EGameVersions.PINK,
327
+ EGameVersions.PINK_PLUS,
328
+ EGameVersions.MURASAKI,
329
+ EGameVersions.MURASAKI_PLUS,
330
+ EGameVersions.MILK,
331
+ EGameVersions.MILK_PLUS,
332
+ EGameVersions.FINALE,
333
+ EGameVersions.DX,
334
+ EGameVersions.DX_PLUS,
335
+ EGameVersions.SPLASH,
336
+ EGameVersions.SPLASH_PLUS,
337
+ EGameVersions.UNIVERSE,
338
+ EGameVersions.UNIVERSE_PLUS,
339
+ EGameVersions.FESTIVAL,
340
+ EGameVersions.FESTIVAL_PLUS,
341
+ EGameVersions.BUDDIES,
342
+ EGameVersions.BUDDIES_PLUS,
343
+ EGameVersions.PRISM,
344
+ EGameVersions.PRISM_PLUS,
345
+ ];
346
+ /**
347
+ * Compare two game versions and calculate which is newer.
348
+ *
349
+ * @param a Game version.
350
+ * @param b Game version.
351
+ * @returns positive if a is newer, negative if b is newer, 0 if they are the same.
352
+ */
353
+ function compareGameVersions(a, b) {
354
+ return GameVersions.indexOf(a) - GameVersions.indexOf(b);
355
+ }
356
+ KamaiTachi.compareGameVersions = compareGameVersions;
357
+ })(KamaiTachi || (exports.KamaiTachi = KamaiTachi = {}));
358
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/mai/best50/lib/kamaiTachi/index.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,12 @@
1
- import { IChart, IScore } from "../../type";
1
+ import { IChart, IScore } from "../../../../type";
2
2
  import ScoreTrackerAdapter from "..";
3
- import { MaiDraw } from "../../index";
4
3
  export declare class LXNS implements ScoreTrackerAdapter {
5
- private maiDraw;
6
4
  private auth;
7
5
  private baseURL;
8
6
  private cache;
9
7
  private axios;
10
- constructor(maiDraw: MaiDraw, auth: string, baseURL?: string);
8
+ constructor(auth: string, baseURL?: string);
9
+ private getRaw;
11
10
  private get;
12
11
  private post;
13
12
  getPlayerBest50(username: string): Promise<{
@@ -24,6 +23,7 @@ export declare class LXNS implements ScoreTrackerAdapter {
24
23
  getSongList(): Promise<LXNS.ISongListResponse>;
25
24
  getMaiDrawChartList(): Promise<IChart[]>;
26
25
  private toMaiDrawScore;
26
+ getPlayerProfilePicture(username: string): Promise<Buffer | null>;
27
27
  }
28
28
  export declare namespace LXNS {
29
29
  /**
@@ -153,11 +153,19 @@ export declare namespace LXNS {
153
153
  course_rank: string;
154
154
  class_rank: string;
155
155
  star: number;
156
- icon: any;
157
- name_plate: any;
158
- frame: any;
156
+ icon: ICollection;
157
+ name_plate: ICollection;
158
+ frame: ICollection;
159
159
  upload_time: any;
160
160
  }
161
+ interface ICollection {
162
+ id: number;
163
+ name: string;
164
+ color: string;
165
+ description: string;
166
+ genre: string;
167
+ required: any;
168
+ }
161
169
  interface IBest50Response {
162
170
  /**
163
171
  * Old versions total rating.
@@ -6,18 +6,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.LXNS = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
8
  const memory_cache_1 = require("memory-cache");
9
- const type_1 = require("../../type");
9
+ const type_1 = require("../../../../type");
10
+ const chart_1 = require("../../../chart");
10
11
  class LXNS {
11
- maiDraw;
12
12
  auth;
13
13
  baseURL;
14
14
  cache = new memory_cache_1.Cache();
15
15
  axios;
16
- constructor(maiDraw, auth, baseURL = "https://maimai.lxns.net/api/v0/maimai") {
17
- this.maiDraw = maiDraw;
16
+ constructor(auth, baseURL = "https://maimai.lxns.net/api/v0/maimai") {
18
17
  this.auth = auth;
19
18
  this.baseURL = baseURL;
20
- this.maiDraw = maiDraw;
21
19
  this.auth = auth;
22
20
  this.axios = axios_1.default.create({
23
21
  baseURL: this.baseURL,
@@ -26,17 +24,32 @@ class LXNS {
26
24
  },
27
25
  });
28
26
  }
29
- async get(endpoint, data) {
27
+ async getRaw(endpoint, data,
28
+ /**
29
+ * Cache TTL in milliseconds. Defaults to 30 minutes.
30
+ */
31
+ cacheTTL = 30 * 60 * 1000, options = {}) {
32
+ const cacheKey = `${endpoint}-${JSON.stringify(data)}`;
33
+ if (cacheTTL > 0) {
34
+ const cacheContent = this.cache.get(cacheKey);
35
+ if (cacheContent)
36
+ return cacheContent;
37
+ }
30
38
  return await this.axios
31
- .get(endpoint, { params: data })
32
- .then((r) => r.data)
39
+ .get(endpoint, { params: data, ...options })
40
+ .then((r) => {
41
+ if (cacheTTL > 0) {
42
+ this.cache.put(cacheKey, r.data, cacheTTL);
43
+ }
44
+ return r.data;
45
+ })
33
46
  .catch((e) => {
34
- e.response?.data
35
- ? console.error(e.response?.data)
36
- : console.error(e);
37
- return e.response?.data;
47
+ return e.response?.data || e;
38
48
  });
39
49
  }
50
+ async get(endpoint, data, cacheTTL = 30 * 60 * 1000, options = {}) {
51
+ return this.getRaw(endpoint, data, cacheTTL, options);
52
+ }
40
53
  async post(endpoint, data) {
41
54
  return await this.axios
42
55
  .post(endpoint, data)
@@ -48,10 +61,10 @@ class LXNS {
48
61
  if (!b50?.data)
49
62
  return null;
50
63
  let chartList;
51
- if (this.maiDraw.hasLocalDatabase()) {
64
+ if (chart_1.Chart.Database.hasLocalDatabase()) {
52
65
  chartList = [...b50.data.dx, ...b50.data.standard]
53
66
  .map((chart) => {
54
- return this.maiDraw.getLocalChart(chart.id +
67
+ return chart_1.Chart.Database.getLocalChart(chart.id +
55
68
  (chart.type == LXNS.ESongTypes.DX ? 10000 : 0), chart.level_index);
56
69
  })
57
70
  .filter((v) => v !== null);
@@ -74,7 +87,7 @@ class LXNS {
74
87
  };
75
88
  }
76
89
  async getPlayerRawBest50(friendCode) {
77
- return await this.get(`/player/${friendCode}/bests`);
90
+ return await this.get(`/player/${friendCode}/bests`, undefined, 60 * 1000);
78
91
  }
79
92
  async getPlayerRawProfile(friendCode) {
80
93
  return await this.get(`/player/${friendCode}`);
@@ -94,7 +107,7 @@ class LXNS {
94
107
  versions: [],
95
108
  };
96
109
  }));
97
- this.cache.put("lxns-songList", res, 1000 * 60 * 60);
110
+ this.cache.put("lxns-songList", res, 24 * 60 * 60 * 1000);
98
111
  return res;
99
112
  }
100
113
  async getMaiDrawChartList() {
@@ -228,6 +241,19 @@ class LXNS {
228
241
  })
229
242
  .filter((v) => v !== null);
230
243
  }
244
+ async getPlayerProfilePicture(username) {
245
+ const player = await this.getPlayerRawProfile(username);
246
+ if (!player?.data)
247
+ return null;
248
+ const iconInfo = player.data.icon;
249
+ const iconImage = await this.getRaw(`/maimai/icon/${iconInfo.id}.png`, undefined, 24 * 60 * 60 * 1000, {
250
+ baseURL: "https://assets2.lxns.net",
251
+ responseType: "arraybuffer",
252
+ });
253
+ if (!iconImage)
254
+ return null;
255
+ return iconImage;
256
+ }
231
257
  }
232
258
  exports.LXNS = LXNS;
233
259
  (function (LXNS) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/mai/best50/lib/lxns/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { EDifficulty, IChart } from "../../type";
2
+ export declare class Database {
3
+ private static localDatabasePath;
4
+ static setLocalDatabasePath(path: string): void;
5
+ static hasLocalDatabase(): boolean;
6
+ private static cache;
7
+ static cacheJackets(ids: number[]): Promise<void>;
8
+ static fecthJacket(id: number): Promise<Buffer | null>;
9
+ static downloadJacket(id: number): Promise<Buffer | null>;
10
+ static getLocalChart(id: number, difficulty: EDifficulty): IChart | null;
11
+ }
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Database = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const upath_1 = __importDefault(require("upath"));
9
+ const axios_1 = __importDefault(require("axios"));
10
+ const memory_cache_1 = require("memory-cache");
11
+ class Database {
12
+ static localDatabasePath = "";
13
+ static setLocalDatabasePath(path) {
14
+ this.localDatabasePath = path;
15
+ }
16
+ static hasLocalDatabase() {
17
+ return fs_1.default.existsSync(this.localDatabasePath);
18
+ }
19
+ static cache = new memory_cache_1.Cache();
20
+ static async cacheJackets(ids) {
21
+ const promises = [];
22
+ for (const id of ids) {
23
+ promises.push(this.fecthJacket(id));
24
+ }
25
+ await Promise.all(promises);
26
+ }
27
+ static async fecthJacket(id) {
28
+ const cached = this.cache.get(`jacket-${id}`);
29
+ if (cached)
30
+ return cached;
31
+ else {
32
+ const jacket = await this.downloadJacket(id);
33
+ if (jacket)
34
+ this.cache.put(`jacket-${id}`, jacket, 1000 * 60 * 60);
35
+ return jacket;
36
+ }
37
+ }
38
+ static async downloadJacket(id) {
39
+ if (id > 10000)
40
+ id -= 10000;
41
+ const localFilePath = upath_1.default.join(this.localDatabasePath, "assets", "jackets", `${id.toString().padStart(6, "0")}.png`);
42
+ if (fs_1.default.existsSync(localFilePath)) {
43
+ return fs_1.default.readFileSync(localFilePath);
44
+ }
45
+ // return null;
46
+ // console.log(`Downloading jacket ${id}`);
47
+ return await axios_1.default
48
+ .get(`https://assets2.lxns.net/maimai/jacket/${id}.png`, {
49
+ responseType: "arraybuffer",
50
+ })
51
+ .then((res) => res.data)
52
+ .catch((e) => null);
53
+ }
54
+ static getLocalChart(id, difficulty) {
55
+ const localFilePath = upath_1.default.join(this.localDatabasePath, "assets", "charts", `${id.toString().padStart(6, "0")}`, `${difficulty}.json`);
56
+ if (fs_1.default.existsSync(localFilePath)) {
57
+ return JSON.parse(fs_1.default.readFileSync(localFilePath, "utf-8"));
58
+ }
59
+ return null;
60
+ }
61
+ }
62
+ exports.Database = Database;
63
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/mai/chart/database.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,kDAA0B;AAC1B,kDAA0B;AAC1B,+CAAqC;AAGrC,MAAa,QAAQ;IACT,MAAM,CAAC,iBAAiB,GAAW,EAAE,CAAC;IAEvC,MAAM,CAAC,oBAAoB,CAAC,IAAY;QAC3C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAClC,CAAC;IAEM,MAAM,CAAC,gBAAgB;QAC1B,OAAO,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACjD,CAAC;IAEO,MAAM,CAAC,KAAK,GAAG,IAAI,oBAAK,EAAkB,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,GAAa;QAC1C,MAAM,QAAQ,GAAmB,EAAE,CAAC;QACpC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IACM,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAU;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;aACrB,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,MAAM;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACnE,OAAO,MAAM,CAAC;QAClB,CAAC;IACL,CAAC;IACM,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAU;QACzC,IAAI,EAAE,GAAG,KAAK;YAAE,EAAE,IAAI,KAAK,CAAC;QAC5B,MAAM,aAAa,GAAG,eAAK,CAAC,IAAI,CAC5B,IAAI,CAAC,iBAAiB,EACtB,QAAQ,EACR,SAAS,EACT,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAC1C,CAAC;QACF,IAAI,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/B,OAAO,YAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAC1C,CAAC;QACD,eAAe;QACf,2CAA2C;QAC3C,OAAO,MAAM,eAAK;aACb,GAAG,CAAC,0CAA0C,EAAE,MAAM,EAAE;YACrD,YAAY,EAAE,aAAa;SAC9B,CAAC;aACD,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;aACvB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACM,MAAM,CAAC,aAAa,CACvB,EAAU,EACV,UAAuB;QAEvB,MAAM,aAAa,GAAG,eAAK,CAAC,IAAI,CAC5B,IAAI,CAAC,iBAAiB,EACtB,QAAQ,EACR,QAAQ,EACR,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EACnC,GAAG,UAAU,OAAO,CACvB,CAAC;QACF,IAAI,YAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;;AA/DL,4BAgEC"}
@@ -0,0 +1,4 @@
1
+ import { Database } from "./database";
2
+ export declare class Chart {
3
+ static Database: typeof Database;
4
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Chart = void 0;
4
+ const database_1 = require("./database");
5
+ class Chart {
6
+ static Database = database_1.Database;
7
+ }
8
+ exports.Chart = Chart;
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mai/chart/index.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AAEtC,MAAa,KAAK;IACd,MAAM,CAAC,QAAQ,GAAG,mBAAQ,CAAC;;AAD/B,sBAEC"}