76 lines
1.9 KiB
TypeScript
76 lines
1.9 KiB
TypeScript
import { Handler } from '@netlify/functions'
|
|
import { api } from "./shared/api"
|
|
import { SpeedruncomInfo } from '../../src/components/infos/Speedruncom'
|
|
|
|
const handler: Handler = async (event, context) => {
|
|
// embedding would be stupid here, as that'd create lag due to irrelevant runs
|
|
let speedruncom = await api<{
|
|
data: {
|
|
place: number,
|
|
run: {
|
|
weblink: string
|
|
game: string
|
|
level: string | null
|
|
category: string | null
|
|
date: string
|
|
}
|
|
}[]
|
|
}>
|
|
(`https://www.speedrun.com/api/v1/users/j03v45mj/personal-bests`)
|
|
|
|
let details_to_request = [new Promise((resolve, reject) => {
|
|
resolve(api<{
|
|
data: {
|
|
names: {
|
|
international: string
|
|
}
|
|
assets: {
|
|
"cover-tiny": {
|
|
uri: string
|
|
}
|
|
}
|
|
}
|
|
}>
|
|
(`https://www.speedrun.com/api/v1/games/${speedruncom.data[0].run.game}`))
|
|
})]
|
|
|
|
if (speedruncom.data[0].run.level) {
|
|
details_to_request.push(new Promise((resolve, reject) => {
|
|
resolve(api<{
|
|
data: {
|
|
name: string
|
|
}
|
|
}>
|
|
(`https://www.speedrun.com/api/v1/levels/${speedruncom.data[0].run.level}`))
|
|
}))
|
|
}
|
|
|
|
if (speedruncom.data[0].run.category) {
|
|
details_to_request.push(new Promise((resolve, reject) => {
|
|
resolve(api<{
|
|
data: {
|
|
name: string
|
|
}
|
|
}>
|
|
(`https://www.speedrun.com/api/v1/categories/${speedruncom.data[0].run.category}`))
|
|
}))
|
|
}
|
|
|
|
let details = await Promise.all(details_to_request) as [{[key: string]: any}]
|
|
|
|
let run: SpeedruncomInfo = {
|
|
place: speedruncom.data[0].place,
|
|
link: speedruncom.data[0].run.weblink,
|
|
date: speedruncom.data[0].run.date,
|
|
thumbnail: details[0].data.assets["cover-tiny"].uri,
|
|
game: details[0].data.names.international,
|
|
details: details.slice(1).map((d) => d.data.name) || []
|
|
}
|
|
|
|
return {
|
|
statusCode: 200,
|
|
body: JSON.stringify(run)
|
|
}
|
|
}
|
|
|
|
export { handler }
|