gracefully disable metadata provider when api key is missing

This commit is contained in:
Huskydog9988
2025-03-09 21:24:26 -04:00
parent 793b57a163
commit d2b485456a
3 changed files with 26 additions and 9 deletions

View File

@ -1,5 +1,5 @@
import { Developer, MetadataSource, Publisher } from "@prisma/client";
import { MetadataProvider } from ".";
import { MetadataProvider, MissingMetadataProviderApiKey } from ".";
import {
GameMetadataSearchResult,
_FetchGameMetadataParams,
@ -80,7 +80,7 @@ export class GiantBombProvider implements MetadataProvider {
constructor() {
const apikey = process.env.GIANT_BOMB_API_KEY;
if (!apikey) throw new Error("No GIANT_BOMB_API_KEY in environment");
if (!apikey) throw new MissingMetadataProviderApiKey("GiantBomb");
this.apikey = apikey;

View File

@ -20,6 +20,19 @@ import { PriorityList, PriorityListIndexed } from "../utils/prioritylist";
import { GiantBombProvider } from "./giantbomb";
import { ManualMetadataProvider } from "./manual";
export class MissingMetadataProviderApiKey extends Error {
private providerName: string;
constructor(providerName: string) {
super(`Missing ${providerName} api key`);
this.providerName = providerName;
}
getProviderName() {
return this.providerName;
}
}
export abstract class MetadataProvider {
abstract id(): string;
abstract name(): string;
@ -240,13 +253,17 @@ export default metadataHandler;
export const enabledMedadataProviders: string[] = [];
const metadataProviders = [GiantBombProvider, ManualMetadataProvider];
for(const provider of metadataProviders){
for (const provider of metadataProviders) {
try {
const prov = new provider;
const prov = new provider();
metadataHandler.addProvider(prov);
enabledMedadataProviders.push(prov.id());
console.log(`enabled metadata provider: ${prov.name()}`)
}catch(e){
console.error(`skipping metadata provider setup: ${e}`);
console.log(`enabled metadata provider: ${prov.name()}`);
} catch (e) {
if (e instanceof MissingMetadataProviderApiKey) {
console.warn(`Disabling ${e.getProviderName()} metadata provider`);
} else {
console.error(`skipping metadata provider setup: ${e}`);
}
}
}
}