src / image_search / providers / ImageProviderRegistry.ts
export interface ImageProviderSpec {
id: number;
name: string;
displayName: string;
envVar: string | null;
requiresKey: boolean;
}
/**
* Metadata-only declarative registry for image search providers.
* Pure metadata container with ZERO dependencies on Config to prevent circular imports.
* Mapped from Python `image_search/providers/provider_registry.py` ImageProviderRegistry.
*/
export class ImageProviderRegistry {
private static readonly SPECS: Record<string, ImageProviderSpec> = {
duckduckgo: {
id: 1,
name: "duckduckgo",
displayName: "DuckDuckGo",
envVar: null,
requiresKey: false,
},
bing: {
id: 2,
name: "bing",
displayName: "Bing",
envVar: null,
requiresKey: false,
},
serpapi: {
id: 3,
name: "serpapi",
displayName: "SerpApi",
envVar: "SERPAPI_KEYS",
requiresKey: true,
},
pexels: {
id: 4,
name: "pexels",
displayName: "Pexels",
envVar: "PEXELS_KEYS",
requiresKey: true,
},
};
/**
* Retrieve list of all registered ImageProviderSpec objects.
*/
public static getAllSpecs(): ImageProviderSpec[] {
return Object.values(this.SPECS);
}
/**
* Compatibility alias for Python parity.
*/
public static get_all_specs(): ImageProviderSpec[] {
return ImageProviderRegistry.getAllSpecs();
}
/**
* Static lookup for ImageProviderSpec by numeric ID.
*/
public static getById(id: number): ImageProviderSpec | undefined {
return Object.values(this.SPECS).find((s) => s.id === id);
}
public static get_by_id(id: number): ImageProviderSpec | undefined {
return ImageProviderRegistry.getById(id);
}
/**
* Retrieve ImageProviderSpec by case-insensitive provider name.
*/
public static getSpec(name: string): ImageProviderSpec | undefined {
return this.SPECS[name.toLowerCase().trim()];
}
}
src / image_search / providers / ImageProviderRegistry.ts
export interface ImageProviderSpec {
id: number;
name: string;
displayName: string;
envVar: string | null;
requiresKey: boolean;
}
/**
* Metadata-only declarative registry for image search providers.
* Pure metadata container with ZERO dependencies on Config to prevent circular imports.
* Mapped from Python `image_search/providers/provider_registry.py` ImageProviderRegistry.
*/
export class ImageProviderRegistry {
private static readonly SPECS: Record<string, ImageProviderSpec> = {
duckduckgo: {
id: 1,
name: "duckduckgo",
displayName: "DuckDuckGo",
envVar: null,
requiresKey: false,
},
bing: {
id: 2,
name: "bing",
displayName: "Bing",
envVar: null,
requiresKey: false,
},
serpapi: {
id: 3,
name: "serpapi",
displayName: "SerpApi",
envVar: "SERPAPI_KEYS",
requiresKey: true,
},
pexels: {
id: 4,
name: "pexels",
displayName: "Pexels",
envVar: "PEXELS_KEYS",
requiresKey: true,
},
};
/**
* Retrieve list of all registered ImageProviderSpec objects.
*/
public static getAllSpecs(): ImageProviderSpec[] {
return Object.values(this.SPECS);
}
/**
* Compatibility alias for Python parity.
*/
public static get_all_specs(): ImageProviderSpec[] {
return ImageProviderRegistry.getAllSpecs();
}
/**
* Static lookup for ImageProviderSpec by numeric ID.
*/
public static getById(id: number): ImageProviderSpec | undefined {
return Object.values(this.SPECS).find((s) => s.id === id);
}
public static get_by_id(id: number): ImageProviderSpec | undefined {
return ImageProviderRegistry.getById(id);
}
/**
* Retrieve ImageProviderSpec by case-insensitive provider name.
*/
public static getSpec(name: string): ImageProviderSpec | undefined {
return this.SPECS[name.toLowerCase().trim()];
}
}