Add daily/weekly level endpoint

This commit is contained in:
Lncvrt committed 2026-02-20 21:16:24 -07:00
1 parent 0a391543d2
commit 4292f8137a
5 files changed
+70 -3

No files matched your search

+2 -1
View File
@@ -13,6 +13,8 @@ This is very early in development and will not be finished for a long time likel
- [x] Get leaderboards
- [x] Get classic level scores
- [x] Get plat level scores
- [x] Get daily/weekly level
- [ ] Get event level
- [ ] Get Levels List
- [ ] Get save data
- [ ] Get level lists (same as map packs?)
@@ -27,7 +29,6 @@ This is very early in development and will not be finished for a long time likel
- [ ] Get user list (friends list?)
- [ ] Get rewards (chests?)
- [ ] Get secret reward (new 2.2 vault?)
- [ ] Get daily level
- [ ] Get challenges (unknown)
- [ ] Get account URL (unknown)
- [ ] Get song info
+14
View File
@@ -3,6 +3,8 @@ import { jsonResponse } from './lib/util'
import dotenv from 'dotenv'
import swagger from '@elysiajs/swagger'
import { handler as eventLevelGetHandler } from './routes/event-level/get'
import { handler as gauntletsGetHandler } from './routes/gauntlets/get'
import { handler as leaderboardsGetHandler } from './routes/leaderboards/get'
@@ -106,6 +108,18 @@ app.get(
})
}
)
app.get('/daily-level', () => eventLevelGetHandler('0'), {
detail: {
description: 'The endpoint for getting the daily level',
tags: ['Levels']
}
})
app.get('/weekly-level', () => eventLevelGetHandler('1'), {
detail: {
description: 'The endpoint for getting the weekly level',
tags: ['Levels']
}
})
app.get(
'/',
() =>
+23
View File
@@ -21,6 +21,7 @@ export const encodeGJP2 = async (password = '', salt = 'mI29fmAnxgTs') => {
.map(b => b.toString(16).padStart(2, '0'))
.join('')
}
export const generateTimeLength = (ms: number): string => {
const minutes = Math.floor(ms / 60000)
const seconds = Math.floor((ms % 60000) / 1000)
@@ -31,3 +32,25 @@ export const generateTimeLength = (ms: number): string => {
return `${minutes}:${secStr}.${msStr}`
}
export const formatTime = (seconds: number): string => {
const units = [
{ label: 'y', value: 365 * 24 * 3600 },
{ label: 'mo', value: 30 * 24 * 3600 },
{ label: 'd', value: 24 * 3600 },
{ label: 'h', value: 3600 },
{ label: 'm', value: 60 },
{ label: 's', value: 1 }
]
const parts = []
for (const { label, value } of units) {
const amount = Math.floor(seconds / value)
if (amount) {
parts.push(`${amount}${label}`)
seconds %= value
}
}
return parts.join(' ') || '0s'
}
+31
View File
@@ -0,0 +1,31 @@
import axios from 'axios'
import { formatTime, jsonResponse } from '../../lib/util'
export const handler = async (type: string) => {
const request = await axios.post(
'https://www.boomlings.com/database/getGJDailyLevel.php',
new URLSearchParams({
gameVersion: '22',
binaryVersion: '45',
secret: 'Wmfd2893gb7',
type
}),
{
headers: {
'User-Agent': ' ',
Cookie: 'gd=1'
}
}
)
const responseText = request.data as string
const responseSplit = responseText.split('|')
return jsonResponse({
...(type === '0'
? { dailyId: +responseSplit[0] }
: { weeklyId: +responseSplit[0] }),
remaining: formatTime(Number(responseSplit[1])),
remainingSeconds: +responseSplit[1]
})
}
-2
View File
@@ -7,8 +7,6 @@ export const handler = async () => {
new URLSearchParams({
gameVersion: '22',
binaryVersion: '45',
udid: 'BEA53432-326F-4D39-91D7-2B51B849825E',
uuid: '329348841',
count: '250',
page: '0',
secret: 'Wmfd2893gb7'