Files
roblox/lib/thumbnailLoader.ts
2025-02-14 19:43:05 +02:00

54 lines
1.3 KiB
TypeScript

"use client";
import { addThumbnail } from "@/hooks/use-lazy-load";
import { getCookie } from "./roblox";
export type AssetThumbnail = {
requestId: string,
errorCode: number,
errorMessage: string,
targetId: number,
state: "Completed" | string,
imageUrl: string,
version: string
}
export type ThumbnailRequest = {
type: "GameThumbnail",
targetId: number,
format: "webp",
size: string
}
export async function getThumbnails(b: ThumbnailRequest[]): Promise<AssetThumbnail[]> {
const data = await fetch(`${document.baseURI}api/thumbnails/batch`,{
method: "POST",
headers: {
Authorization: `${getCookie()}`
},
body: JSON.stringify(
b.map(a=>{
return {
requestId: `${a.targetId}::${a.type}:${a.size}:${a.format}:regular`,
type: a.type,
targetId: a.targetId,
token: "",
format: a.format,
size: a.size
}
})
)
})
return (await data.json() as any).data as AssetThumbnail[]
}
export async function loadThumbnails(b: ThumbnailRequest[]): Promise<void> {
const th = await getThumbnails(b);
th.forEach(a=>{
// match GameThumbnail from 4972273297::GameThumbnail:384x216:webp:regular and any like- string
const ty = b.find(c=>c.targetId==a.targetId)!
addThumbnail(ty.type+'_'+a.targetId.toString(), a.imageUrl)
})
}
// https://apis.roblox.com/discovery-api/omni-recommendation