taevas.xyz/netlify/functions/speedruncom.ts

77 lines
1.9 KiB
TypeScript
Raw Normal View History

2023-05-08 02:31:43 +02:00
import { Handler } from '@netlify/functions'
import { api } from "./shared/api"
2023-05-29 14:47:53 +02:00
import { SpeedruncomInfo } from '../../src/components/infos/Speedruncom'
2023-05-08 02:31:43 +02:00
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}]
2023-05-10 14:16:31 +02:00
let run: SpeedruncomInfo = {
2023-05-08 02:31:43 +02:00
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,
2023-05-10 14:16:31 +02:00
details: details.slice(1).map((d) => d.data.name) || []
2023-05-08 02:31:43 +02:00
}
return {
statusCode: 200,
body: JSON.stringify(run)
}
}
export { handler }