This repository has been archived on 2023-11-06. You can view files and clone it, but cannot push or open issues or pull requests.
beatsaber-overlay/pages/api/steamavatar.js

60 lines
1.6 KiB
JavaScript
Raw Normal View History

import fetch from "node-fetch";
import sharp from "sharp";
2022-10-20 17:00:27 +00:00
import { isValidSteamId } from "../../src/helpers/validateSteamId";
2022-10-21 16:12:32 +00:00
import { getValue, setValue, valueExists } from "../../src/utils/redisUtils";
2022-10-20 17:00:27 +00:00
const KEY = "STEAM_AVATAR_";
const ext = "jpg";
/**
*
* @param {Request} req
* @param {Response} res
* @returns
*/
export default async function handler(req, res) {
const steamId = req.query.steamid;
2022-10-20 17:00:27 +00:00
const isValid = await isValidSteamId(steamId);
if (isValid == false) {
return res.status(404).json({
status: 404,
message: "Unknown Steam Avatar",
});
}
2022-10-21 16:12:32 +00:00
const exists = await valueExists(`${KEY}${steamId}`);
2022-10-20 17:00:27 +00:00
if (exists) {
2022-10-21 16:12:32 +00:00
const data = await getValue(`${KEY}${steamId}`);
2022-10-20 17:00:27 +00:00
const buffer = Buffer.from(data, "base64");
res.writeHead(200, {
"Content-Type": "image/" + ext,
"Content-Length": buffer.length,
"Cache-Status": "hit",
});
return res.end(buffer);
}
2022-10-20 17:00:27 +00:00
2022-10-21 13:51:29 +00:00
const before = Date.now();
2022-10-20 17:00:27 +00:00
const data = await fetch(
`https://cdn.scoresaber.com/avatars/${steamId}.${ext}`
);
if (data.status === 404) {
return res.status(404).json({
status: 404,
message: "Unknown Steam Avatar",
});
}
let buffer = await data.buffer(); // Change to arrayBuffer at some point to make it shush
2022-10-21 15:42:20 +00:00
buffer = await sharp(buffer).resize(400, 400).toBuffer();
2022-10-20 17:00:27 +00:00
const bytes = buffer.toString("base64");
2022-10-21 16:12:32 +00:00
await setValue(`${KEY}${steamId}`, bytes);
2022-10-21 13:51:29 +00:00
console.log(
`[Cache]: Cached Avatar for id ${steamId} in ${Date.now() - before}ms`
);
2022-10-20 17:00:27 +00:00
res.setHeader("Cache-Status", "miss");
res.setHeader("Content-Type", "image/" + ext);
res.status(200).send(buffer);
}