Previously, the MusicBrainzClient had no proactive rate limiter — it relied on the musicbrainzws2 library's retry-on-429 backoff. When the background indexer was resolving artist images (hitting MB at 1.5 req/sec) and a user search fired 3+ concurrent MB calls, the combined burst triggered 429s with cascading retries up to 60s. Now a single shared RateLimiter (1 req/sec) gates all MB API calls: - MusicBrainzClient search/lookup/browse methods - ArtistImageProvider fetchMBRels (was on a separate 1.5 req/sec limiter) The limiter serializes access proactively, preventing 429s entirely. The musicbrainzws2 retry logic remains as a safety net. Also split the old shared limiter into separate lbLimiter (for ListenBrainz + CoverArt) and mbLimiter (for MusicBrainz) so the two APIs don't block each other.
51 lines
1.8 KiB
TypeScript
Executable File
51 lines
1.8 KiB
TypeScript
Executable File
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
|
// This file is automatically generated. DO NOT EDIT
|
|
import {explore} from '../models';
|
|
import {context} from '../models';
|
|
|
|
export function BrowseReleaseGroups(arg1:string):Promise<Array<explore.MBReleaseGroup>>;
|
|
|
|
export function BrowseReleases(arg1:string):Promise<Array<explore.MBRelease>>;
|
|
|
|
export function CheckLibraryMBIDs(arg1:Array<string>):Promise<Record<string, string>>;
|
|
|
|
export function CoverArtGroupURL(arg1:string):Promise<string>;
|
|
|
|
export function CoverArtURL(arg1:string):Promise<string>;
|
|
|
|
export function GetArtistImageURL(arg1:string):Promise<string>;
|
|
|
|
export function GetArtistImages(arg1:Array<string>):Promise<Record<string, string>>;
|
|
|
|
export function GetArtistMBID(arg1:string):Promise<string>;
|
|
|
|
export function GetThumbnail(arg1:string,arg2:string,arg3:string):Promise<string>;
|
|
|
|
export function GetThumbnails(arg1:Array<explore.ThumbnailRequest>):Promise<Record<string, string>>;
|
|
|
|
export function IndexNewArtists():Promise<void>;
|
|
|
|
export function InvalidateIndexDiscographies():Promise<void>;
|
|
|
|
export function LookupArtist(arg1:string):Promise<explore.MBArtist>;
|
|
|
|
export function LookupReleaseGroup(arg1:string):Promise<explore.MBReleaseGroup>;
|
|
|
|
export function Search(arg1:string):Promise<explore.MBSearchResult>;
|
|
|
|
export function SearchArtists(arg1:string):Promise<Array<explore.MBArtist>>;
|
|
|
|
export function SearchRecordings(arg1:string):Promise<Array<explore.MBRecording>>;
|
|
|
|
export function SearchReleaseGroups(arg1:string):Promise<Array<explore.MBReleaseGroup>>;
|
|
|
|
export function SetContext(arg1:context.Context):Promise<void>;
|
|
|
|
export function SimilarArtists(arg1:string):Promise<Array<explore.LBSimilarArtist>>;
|
|
|
|
export function StartIndexBuild():Promise<void>;
|
|
|
|
export function StopIndexBuild():Promise<void>;
|
|
|
|
export function TopRecordingsForArtist(arg1:string):Promise<Array<explore.LBTopRecording>>;
|