rhythia-api 183.0.0 → 184.0.0
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/.prettierrc.json +6 -6
- package/api/addCollectionMap.ts +82 -82
- package/api/approveMap.ts +78 -78
- package/api/chartPublicStats.ts +32 -32
- package/api/createBeatmap.ts +168 -168
- package/api/createBeatmapPage.ts +64 -64
- package/api/createClan.ts +81 -81
- package/api/createCollection.ts +58 -58
- package/api/deleteBeatmapPage.ts +77 -77
- package/api/deleteCollection.ts +59 -59
- package/api/deleteCollectionMap.ts +71 -71
- package/api/editAboutMe.ts +91 -91
- package/api/editClan.ts +90 -90
- package/api/editCollection.ts +77 -77
- package/api/editProfile.ts +123 -123
- package/api/getAvatarUploadUrl.ts +85 -85
- package/api/getBadgedUsers.ts +56 -56
- package/api/getBeatmapComments.ts +57 -57
- package/api/getBeatmapPage.ts +106 -106
- package/api/getBeatmapPageById.ts +99 -99
- package/api/getBeatmapStarRating.ts +53 -53
- package/api/getBeatmaps.ts +159 -159
- package/api/getClan.ts +77 -77
- package/api/getCollection.ts +130 -130
- package/api/getCollections.ts +126 -128
- package/api/getLeaderboard.ts +136 -136
- package/api/getMapUploadUrl.ts +93 -93
- package/api/getPassToken.ts +55 -55
- package/api/getProfile.ts +146 -146
- package/api/getPublicStats.ts +180 -180
- package/api/getRawStarRating.ts +57 -57
- package/api/getScore.ts +85 -85
- package/api/getTimestamp.ts +23 -23
- package/api/getUserScores.ts +175 -175
- package/api/nominateMap.ts +82 -82
- package/api/postBeatmapComment.ts +59 -59
- package/api/rankMapsArchive.ts +64 -64
- package/api/searchUsers.ts +56 -56
- package/api/setPasskey.ts +59 -59
- package/api/submitScore.ts +433 -433
- package/api/updateBeatmapPage.ts +229 -229
- package/handleApi.ts +22 -20
- package/index.html +2 -2
- package/index.ts +864 -865
- package/package-lock.json +8913 -0
- package/package.json +2 -2
- package/types/database.ts +0 -39
- package/utils/getUserBySession.ts +48 -48
- package/utils/requestUtils.ts +87 -87
- package/utils/security.ts +20 -20
- package/utils/star-calc/index.ts +72 -72
- package/utils/star-calc/osuUtils.ts +53 -53
- package/utils/star-calc/sspmParser.ts +398 -398
- package/utils/star-calc/sspmv1Parser.ts +165 -165
- package/utils/supabase.ts +13 -13
- package/utils/test +4 -4
- package/utils/validateToken.ts +7 -7
- package/vercel.json +12 -12
|
@@ -1,165 +1,165 @@
|
|
|
1
|
-
enum Difficulty {
|
|
2
|
-
NA = 0x00,
|
|
3
|
-
Easy = 0x01,
|
|
4
|
-
Medium = 0x02,
|
|
5
|
-
Hard = 0x03,
|
|
6
|
-
Logic = 0x04,
|
|
7
|
-
Tasukete = 0x05,
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
enum CoverStorageType {
|
|
11
|
-
None = 0x00,
|
|
12
|
-
PNG = 0x02,
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
enum AudioStorageType {
|
|
16
|
-
None = 0x00,
|
|
17
|
-
StoredAudioFile = 0x01,
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
enum NoteStorageType {
|
|
21
|
-
Integer = 0x00,
|
|
22
|
-
Quantum = 0x01,
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
interface Note {
|
|
26
|
-
position: number;
|
|
27
|
-
x: number;
|
|
28
|
-
y: number;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export interface SSPMMap {
|
|
32
|
-
id: string;
|
|
33
|
-
name: string;
|
|
34
|
-
creator: string;
|
|
35
|
-
lastNotePosition: number;
|
|
36
|
-
noteCount: number;
|
|
37
|
-
difficulty: Difficulty;
|
|
38
|
-
cover: Buffer | null;
|
|
39
|
-
audio: Buffer | null;
|
|
40
|
-
notes: Note[];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export class V1SSPMParser {
|
|
44
|
-
private buffer: Buffer;
|
|
45
|
-
private offset: number = 0;
|
|
46
|
-
|
|
47
|
-
constructor(buffer: Buffer) {
|
|
48
|
-
this.buffer = buffer;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
parse(): SSPMMap {
|
|
52
|
-
this.validateHeader();
|
|
53
|
-
const metadata = this.parseMetadata();
|
|
54
|
-
const cover = this.parseCover();
|
|
55
|
-
const audio = this.parseAudio();
|
|
56
|
-
const notes = this.parseNotes(metadata.noteCount);
|
|
57
|
-
|
|
58
|
-
return {
|
|
59
|
-
...metadata,
|
|
60
|
-
cover,
|
|
61
|
-
audio,
|
|
62
|
-
notes,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
private validateHeader() {
|
|
67
|
-
const signature = this.buffer.slice(0, 4).toString("hex");
|
|
68
|
-
if (signature !== "53532b6d") {
|
|
69
|
-
throw new Error("Invalid SSPM file signature");
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const version = this.buffer.readUInt16LE(4);
|
|
73
|
-
if (version !== 1) {
|
|
74
|
-
throw new Error(`Unsupported SSPM version: ${version}`);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
this.offset = 8; // Skip reserved space
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
private parseMetadata(): Omit<SSPMMap, "cover" | "audio" | "notes"> {
|
|
81
|
-
const id = this.readString();
|
|
82
|
-
const name = this.readString();
|
|
83
|
-
const creator = this.readString();
|
|
84
|
-
const lastNotePosition = this.buffer.readUInt32LE(this.offset);
|
|
85
|
-
this.offset += 4;
|
|
86
|
-
const noteCount = this.buffer.readUInt32LE(this.offset);
|
|
87
|
-
this.offset += 4;
|
|
88
|
-
const difficulty = this.buffer.readUInt8(this.offset++) as Difficulty;
|
|
89
|
-
|
|
90
|
-
return { id, name, creator, lastNotePosition, noteCount, difficulty };
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
private parseCover(): Buffer | null {
|
|
94
|
-
const coverType = this.buffer.readUInt8(this.offset++) as CoverStorageType;
|
|
95
|
-
if (coverType === CoverStorageType.None) {
|
|
96
|
-
return null;
|
|
97
|
-
} else if (coverType === CoverStorageType.PNG) {
|
|
98
|
-
const length = this.buffer.readBigUInt64LE(this.offset);
|
|
99
|
-
this.offset += 8;
|
|
100
|
-
const cover = this.buffer.slice(
|
|
101
|
-
this.offset,
|
|
102
|
-
this.offset + Number(length)
|
|
103
|
-
);
|
|
104
|
-
this.offset += Number(length);
|
|
105
|
-
return cover;
|
|
106
|
-
} else {
|
|
107
|
-
throw new Error(`Unsupported cover storage type: ${coverType}`);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
private parseAudio(): Buffer | null {
|
|
112
|
-
const audioType = this.buffer.readUInt8(this.offset++) as AudioStorageType;
|
|
113
|
-
if (audioType === AudioStorageType.None) {
|
|
114
|
-
return null;
|
|
115
|
-
} else if (audioType === AudioStorageType.StoredAudioFile) {
|
|
116
|
-
const length = this.buffer.readBigUInt64LE(this.offset);
|
|
117
|
-
this.offset += 8;
|
|
118
|
-
const audio = this.buffer.slice(
|
|
119
|
-
this.offset,
|
|
120
|
-
this.offset + Number(length)
|
|
121
|
-
);
|
|
122
|
-
this.offset += Number(length);
|
|
123
|
-
return audio;
|
|
124
|
-
} else {
|
|
125
|
-
throw new Error(`Unsupported audio storage type: ${audioType}`);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
private parseNotes(count: number): Note[] {
|
|
130
|
-
const notes: Note[] = [];
|
|
131
|
-
for (let i = 0; i < count; i++) {
|
|
132
|
-
const position = this.buffer.readUInt32LE(this.offset);
|
|
133
|
-
this.offset += 4;
|
|
134
|
-
const storageType = this.buffer.readUInt8(
|
|
135
|
-
this.offset++
|
|
136
|
-
) as NoteStorageType;
|
|
137
|
-
|
|
138
|
-
let x: number, y: number;
|
|
139
|
-
if (storageType === NoteStorageType.Integer) {
|
|
140
|
-
x = this.buffer.readUInt8(this.offset++);
|
|
141
|
-
y = this.buffer.readUInt8(this.offset++);
|
|
142
|
-
} else if (storageType === NoteStorageType.Quantum) {
|
|
143
|
-
x = this.buffer.readFloatLE(this.offset);
|
|
144
|
-
this.offset += 4;
|
|
145
|
-
y = this.buffer.readFloatLE(this.offset);
|
|
146
|
-
this.offset += 4;
|
|
147
|
-
} else {
|
|
148
|
-
throw new Error(`Unsupported note storage type: ${storageType}`);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
notes.push({ position, x, y });
|
|
152
|
-
}
|
|
153
|
-
return notes;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
private readString(): string {
|
|
157
|
-
let end = this.offset;
|
|
158
|
-
while (this.buffer[end] !== 0x0a) {
|
|
159
|
-
end++;
|
|
160
|
-
}
|
|
161
|
-
const str = this.buffer.slice(this.offset, end).toString("utf-8");
|
|
162
|
-
this.offset = end + 1;
|
|
163
|
-
return str;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
1
|
+
enum Difficulty {
|
|
2
|
+
NA = 0x00,
|
|
3
|
+
Easy = 0x01,
|
|
4
|
+
Medium = 0x02,
|
|
5
|
+
Hard = 0x03,
|
|
6
|
+
Logic = 0x04,
|
|
7
|
+
Tasukete = 0x05,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
enum CoverStorageType {
|
|
11
|
+
None = 0x00,
|
|
12
|
+
PNG = 0x02,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
enum AudioStorageType {
|
|
16
|
+
None = 0x00,
|
|
17
|
+
StoredAudioFile = 0x01,
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
enum NoteStorageType {
|
|
21
|
+
Integer = 0x00,
|
|
22
|
+
Quantum = 0x01,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
interface Note {
|
|
26
|
+
position: number;
|
|
27
|
+
x: number;
|
|
28
|
+
y: number;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface SSPMMap {
|
|
32
|
+
id: string;
|
|
33
|
+
name: string;
|
|
34
|
+
creator: string;
|
|
35
|
+
lastNotePosition: number;
|
|
36
|
+
noteCount: number;
|
|
37
|
+
difficulty: Difficulty;
|
|
38
|
+
cover: Buffer | null;
|
|
39
|
+
audio: Buffer | null;
|
|
40
|
+
notes: Note[];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export class V1SSPMParser {
|
|
44
|
+
private buffer: Buffer;
|
|
45
|
+
private offset: number = 0;
|
|
46
|
+
|
|
47
|
+
constructor(buffer: Buffer) {
|
|
48
|
+
this.buffer = buffer;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
parse(): SSPMMap {
|
|
52
|
+
this.validateHeader();
|
|
53
|
+
const metadata = this.parseMetadata();
|
|
54
|
+
const cover = this.parseCover();
|
|
55
|
+
const audio = this.parseAudio();
|
|
56
|
+
const notes = this.parseNotes(metadata.noteCount);
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
...metadata,
|
|
60
|
+
cover,
|
|
61
|
+
audio,
|
|
62
|
+
notes,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private validateHeader() {
|
|
67
|
+
const signature = this.buffer.slice(0, 4).toString("hex");
|
|
68
|
+
if (signature !== "53532b6d") {
|
|
69
|
+
throw new Error("Invalid SSPM file signature");
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const version = this.buffer.readUInt16LE(4);
|
|
73
|
+
if (version !== 1) {
|
|
74
|
+
throw new Error(`Unsupported SSPM version: ${version}`);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
this.offset = 8; // Skip reserved space
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private parseMetadata(): Omit<SSPMMap, "cover" | "audio" | "notes"> {
|
|
81
|
+
const id = this.readString();
|
|
82
|
+
const name = this.readString();
|
|
83
|
+
const creator = this.readString();
|
|
84
|
+
const lastNotePosition = this.buffer.readUInt32LE(this.offset);
|
|
85
|
+
this.offset += 4;
|
|
86
|
+
const noteCount = this.buffer.readUInt32LE(this.offset);
|
|
87
|
+
this.offset += 4;
|
|
88
|
+
const difficulty = this.buffer.readUInt8(this.offset++) as Difficulty;
|
|
89
|
+
|
|
90
|
+
return { id, name, creator, lastNotePosition, noteCount, difficulty };
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
private parseCover(): Buffer | null {
|
|
94
|
+
const coverType = this.buffer.readUInt8(this.offset++) as CoverStorageType;
|
|
95
|
+
if (coverType === CoverStorageType.None) {
|
|
96
|
+
return null;
|
|
97
|
+
} else if (coverType === CoverStorageType.PNG) {
|
|
98
|
+
const length = this.buffer.readBigUInt64LE(this.offset);
|
|
99
|
+
this.offset += 8;
|
|
100
|
+
const cover = this.buffer.slice(
|
|
101
|
+
this.offset,
|
|
102
|
+
this.offset + Number(length)
|
|
103
|
+
);
|
|
104
|
+
this.offset += Number(length);
|
|
105
|
+
return cover;
|
|
106
|
+
} else {
|
|
107
|
+
throw new Error(`Unsupported cover storage type: ${coverType}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
private parseAudio(): Buffer | null {
|
|
112
|
+
const audioType = this.buffer.readUInt8(this.offset++) as AudioStorageType;
|
|
113
|
+
if (audioType === AudioStorageType.None) {
|
|
114
|
+
return null;
|
|
115
|
+
} else if (audioType === AudioStorageType.StoredAudioFile) {
|
|
116
|
+
const length = this.buffer.readBigUInt64LE(this.offset);
|
|
117
|
+
this.offset += 8;
|
|
118
|
+
const audio = this.buffer.slice(
|
|
119
|
+
this.offset,
|
|
120
|
+
this.offset + Number(length)
|
|
121
|
+
);
|
|
122
|
+
this.offset += Number(length);
|
|
123
|
+
return audio;
|
|
124
|
+
} else {
|
|
125
|
+
throw new Error(`Unsupported audio storage type: ${audioType}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
private parseNotes(count: number): Note[] {
|
|
130
|
+
const notes: Note[] = [];
|
|
131
|
+
for (let i = 0; i < count; i++) {
|
|
132
|
+
const position = this.buffer.readUInt32LE(this.offset);
|
|
133
|
+
this.offset += 4;
|
|
134
|
+
const storageType = this.buffer.readUInt8(
|
|
135
|
+
this.offset++
|
|
136
|
+
) as NoteStorageType;
|
|
137
|
+
|
|
138
|
+
let x: number, y: number;
|
|
139
|
+
if (storageType === NoteStorageType.Integer) {
|
|
140
|
+
x = this.buffer.readUInt8(this.offset++);
|
|
141
|
+
y = this.buffer.readUInt8(this.offset++);
|
|
142
|
+
} else if (storageType === NoteStorageType.Quantum) {
|
|
143
|
+
x = this.buffer.readFloatLE(this.offset);
|
|
144
|
+
this.offset += 4;
|
|
145
|
+
y = this.buffer.readFloatLE(this.offset);
|
|
146
|
+
this.offset += 4;
|
|
147
|
+
} else {
|
|
148
|
+
throw new Error(`Unsupported note storage type: ${storageType}`);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
notes.push({ position, x, y });
|
|
152
|
+
}
|
|
153
|
+
return notes;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
private readString(): string {
|
|
157
|
+
let end = this.offset;
|
|
158
|
+
while (this.buffer[end] !== 0x0a) {
|
|
159
|
+
end++;
|
|
160
|
+
}
|
|
161
|
+
const str = this.buffer.slice(this.offset, end).toString("utf-8");
|
|
162
|
+
this.offset = end + 1;
|
|
163
|
+
return str;
|
|
164
|
+
}
|
|
165
|
+
}
|
package/utils/supabase.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { createClient } from "@supabase/supabase-js";
|
|
2
|
-
import { Database } from "../types/database";
|
|
3
|
-
|
|
4
|
-
export const supabase = createClient<Database>(
|
|
5
|
-
`https://pfkajngbllcbdzoylrvp.supabase.co`,
|
|
6
|
-
process.env.ADMIN_KEY || "key",
|
|
7
|
-
{
|
|
8
|
-
auth: {
|
|
9
|
-
autoRefreshToken: false,
|
|
10
|
-
persistSession: false,
|
|
11
|
-
},
|
|
12
|
-
}
|
|
13
|
-
);
|
|
1
|
+
import { createClient } from "@supabase/supabase-js";
|
|
2
|
+
import { Database } from "../types/database";
|
|
3
|
+
|
|
4
|
+
export const supabase = createClient<Database>(
|
|
5
|
+
`https://pfkajngbllcbdzoylrvp.supabase.co`,
|
|
6
|
+
process.env.ADMIN_KEY || "key",
|
|
7
|
+
{
|
|
8
|
+
auth: {
|
|
9
|
+
autoRefreshToken: false,
|
|
10
|
+
persistSession: false,
|
|
11
|
+
},
|
|
12
|
+
}
|
|
13
|
+
);
|
package/utils/test
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
(()=>{
|
|
2
|
-
var MD5 = function(d){var r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};function M(d){for(var _,m="0123456789ABCDEF",f="",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}function X(d){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}function V(d){for(var _="",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}function Y(d,_){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}function md5_cmn(d,_,m,f,r,i){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}function md5_ff(d,_,m,f,r,i,n){return md5_cmn(_&m|~_&f,d,_,r,i,n)}function md5_gg(d,_,m,f,r,i,n){return md5_cmn(_&f|m&~f,d,_,r,i,n)}function md5_hh(d,_,m,f,r,i,n){return md5_cmn(_^m^f,d,_,r,i,n)}function md5_ii(d,_,m,f,r,i,n){return md5_cmn(m^(_|~f),d,_,r,i,n)}function safe_add(d,_){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}function bit_rol(d,_){return d<<_|d>>>32-_};
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
(()=>{
|
|
2
|
+
var MD5 = function(d){var r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};function M(d){for(var _,m="0123456789ABCDEF",f="",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}function X(d){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}function V(d){for(var _="",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}function Y(d,_){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}function md5_cmn(d,_,m,f,r,i){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}function md5_ff(d,_,m,f,r,i,n){return md5_cmn(_&m|~_&f,d,_,r,i,n)}function md5_gg(d,_,m,f,r,i,n){return md5_cmn(_&f|m&~f,d,_,r,i,n)}function md5_hh(d,_,m,f,r,i,n){return md5_cmn(_^m^f,d,_,r,i,n)}function md5_ii(d,_,m,f,r,i,n){return md5_cmn(m^(_|~f),d,_,r,i,n)}function safe_add(d,_){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}function bit_rol(d,_){return d<<_|d>>>32-_};
|
|
3
|
+
|
|
4
|
+
|
|
5
5
|
return MD5((new Date(Date.now())).getHours()+`/`+(new Date(Date.now())).getDate()+`/`+(new Date(Date.now())).getMonth()+`/`+(new Date(Date.now())).getFullYear()+`Rhythia`)})()
|
package/utils/validateToken.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export function validateIntrinsicToken(token: string) {
|
|
2
|
-
return true;
|
|
3
|
-
// if (!process.env.validationCode) return true;
|
|
4
|
-
// const generatedValidationCode = eval(process.env.validationCode);
|
|
5
|
-
// console.log(generatedValidationCode, token);
|
|
6
|
-
// return generatedValidationCode == token;
|
|
7
|
-
}
|
|
1
|
+
export function validateIntrinsicToken(token: string) {
|
|
2
|
+
return true;
|
|
3
|
+
// if (!process.env.validationCode) return true;
|
|
4
|
+
// const generatedValidationCode = eval(process.env.validationCode);
|
|
5
|
+
// console.log(generatedValidationCode, token);
|
|
6
|
+
// return generatedValidationCode == token;
|
|
7
|
+
}
|
package/vercel.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
{
|
|
2
|
-
"headers": [
|
|
3
|
-
{
|
|
4
|
-
"source": "/api/(.*)",
|
|
5
|
-
"headers": [
|
|
6
|
-
{ "key": "Access-Control-Allow-Credentials", "value": "true" },
|
|
7
|
-
{ "key": "Access-Control-Allow-Origin", "value": "*" },
|
|
8
|
-
{ "key": "Access-Control-Allow-Methods", "value": "GET,OPTIONS,PATCH,DELETE,POST,PUT" },
|
|
9
|
-
{ "key": "Access-Control-Allow-Headers", "value": "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version" }
|
|
10
|
-
]
|
|
11
|
-
}
|
|
12
|
-
]
|
|
1
|
+
{
|
|
2
|
+
"headers": [
|
|
3
|
+
{
|
|
4
|
+
"source": "/api/(.*)",
|
|
5
|
+
"headers": [
|
|
6
|
+
{ "key": "Access-Control-Allow-Credentials", "value": "true" },
|
|
7
|
+
{ "key": "Access-Control-Allow-Origin", "value": "*" },
|
|
8
|
+
{ "key": "Access-Control-Allow-Methods", "value": "GET,OPTIONS,PATCH,DELETE,POST,PUT" },
|
|
9
|
+
{ "key": "Access-Control-Allow-Headers", "value": "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version" }
|
|
10
|
+
]
|
|
11
|
+
}
|
|
12
|
+
]
|
|
13
13
|
}
|