add index route info, make it fetch per hour instead of every user, add health route, update to latest biome config aswell as logger
All checks were successful
Code quality checks / biome (push) Successful in 15s

This commit is contained in:
creations 2025-06-04 15:47:51 -04:00
parent 8cfa75ec57
commit 75d3dab85e
Signed by: creations
GPG key ID: 8F553AA4320FC711
21 changed files with 943 additions and 364 deletions

View file

@ -1,4 +1,4 @@
export const discordBadges = {
const discordBadges = {
// User badges
STAFF: 1 << 0,
PARTNER: 1 << 1,
@ -23,7 +23,7 @@ export const discordBadges = {
USES_AUTOMOD: 1 << 24,
};
export const discordBadgeDetails = {
const discordBadgeDetails = {
HYPESQUAD: {
tooltip: "HypeSquad Events",
icon: "/public/badges/discord/HYPESQUAD.svg",
@ -86,3 +86,57 @@ export const discordBadgeDetails = {
icon: "/public/badges/discord/USES_AUTOMOD.svg",
},
};
const badgeServices: badgeURLMap[] = [
{
service: "Vencord",
url: "https://badges.vencord.dev/badges.json",
},
{
service: "Equicord", // Ekwekord ! WOOP
url: "https://raw.githubusercontent.com/Equicord/Equibored/refs/heads/main/badges.json",
},
{
service: "Nekocord",
url: "https://nekocord.dev/assets/badges.json",
},
{
service: "ReviewDb",
url: "https://manti.vendicated.dev/api/reviewdb/badges",
},
{
service: "Enmity",
url: (userId: string) => ({
user: `https://raw.githubusercontent.com/enmity-mod/badges/main/${userId}.json`,
badge: (id: string) =>
`https://raw.githubusercontent.com/enmity-mod/badges/main/data/${id}.json`,
}),
},
{
service: "Discord",
url: (userId: string) => `https://discord.com/api/v10/users/${userId}`,
},
];
function getServiceDescription(service: string): string {
const descriptions: Record<string, string> = {
Vencord: "Custom badges from Vencord Discord client",
Equicord: "Custom badges from Equicord Discord client",
Nekocord: "Custom badges from Nekocord Discord client",
ReviewDb: "Badges from ReviewDB service",
Enmity: "Custom badges from Enmity mobile Discord client",
Discord: "Official Discord badges (staff, partner, hypesquad, etc.)",
};
return descriptions[service] || "Custom badge service";
}
const gitUrl = "https://git.creations.works/creations/badgeAPI";
export {
badgeServices,
discordBadges,
discordBadgeDetails,
getServiceDescription,
gitUrl,
};

View file

@ -1,43 +0,0 @@
export const environment: Environment = {
port: Number.parseInt(process.env.PORT || "8080", 10),
host: process.env.HOST || "0.0.0.0",
development:
process.env.NODE_ENV === "development" || process.argv.includes("--dev"),
};
export const redisTtl: number = process.env.REDIS_TTL
? Number.parseInt(process.env.REDIS_TTL, 10)
: 60 * 60 * 1; // 1 hour
export const badgeServices: badgeURLMap[] = [
{
service: "Vencord",
url: "https://badges.vencord.dev/badges.json",
},
{
service: "Equicord", // Ekwekord ! WOOP
url: "https://raw.githubusercontent.com/Equicord/Equibored/refs/heads/main/badges.json",
},
{
service: "Nekocord",
url: "https://nekocord.dev/assets/badges.json",
},
{
service: "ReviewDb",
url: "https://manti.vendicated.dev/api/reviewdb/badges",
},
{
service: "Enmity",
url: (userId: string) => ({
user: `https://raw.githubusercontent.com/enmity-mod/badges/main/${userId}.json`,
badge: (id: string) =>
`https://raw.githubusercontent.com/enmity-mod/badges/main/data/${id}.json`,
}),
},
{
service: "Discord",
url: (userId: string) => `https://discord.com/api/v10/users/${userId}`,
},
];
export const botToken: string | undefined = process.env.DISCORD_TOKEN;

45
config/index.ts Normal file
View file

@ -0,0 +1,45 @@
import { echo } from "@atums/echo";
const environment: Environment = {
port: Number.parseInt(process.env.PORT || "8080", 10),
host: process.env.HOST || "0.0.0.0",
development:
process.env.NODE_ENV === "development" || process.argv.includes("--dev"),
};
const redisTtl: number = process.env.REDIS_TTL
? Number.parseInt(process.env.REDIS_TTL, 10)
: 60 * 60 * 1; // 1 hour
const badgeFetchInterval: number = process.env.BADGE_FETCH_INTERVAL
? Number.parseInt(process.env.BADGE_FETCH_INTERVAL, 10)
: 60 * 60 * 1000; // 1 hour
const botToken: string | undefined = process.env.DISCORD_TOKEN;
function verifyRequiredVariables(): void {
const requiredVariables = ["HOST", "PORT", "DISCORD_TOKEN"];
let hasError = false;
for (const key of requiredVariables) {
const value = process.env[key];
if (value === undefined || value.trim() === "") {
echo.error(`Missing or empty environment variable: ${key}`);
hasError = true;
}
}
if (hasError) {
process.exit(1);
}
}
export * from "@config/constants";
export {
environment,
redisTtl,
badgeFetchInterval,
botToken,
verifyRequiredVariables,
};