diff --git a/src/api.ts b/src/api.ts index cbefb72..df1b16b 100644 --- a/src/api.ts +++ b/src/api.ts @@ -242,6 +242,34 @@ export class RondevuAPI { return await response.json() } + /** + * Get all answered offers (efficient batch polling for offerer) + */ + async getAnsweredOffers(since?: number): Promise<{ + offers: Array<{ + offerId: string; + serviceId?: string; + answererId: string; + sdp: string; + answeredAt: number; + }>; + }> { + const url = since + ? `${this.baseUrl}/offers/answered?since=${since}` + : `${this.baseUrl}/offers/answered`; + + const response = await fetch(url, { + headers: this.getAuthHeader(), + }) + + if (!response.ok) { + const error = await response.json().catch(() => ({ error: 'Unknown error' })) + throw new Error(`Failed to get answered offers: ${error.error || response.statusText}`) + } + + return await response.json() + } + /** * Get answer for a specific offer (offerer polls this) */ diff --git a/src/rondevu.ts b/src/rondevu.ts index b1d3ff6..f3d6f75 100644 --- a/src/rondevu.ts +++ b/src/rondevu.ts @@ -280,6 +280,22 @@ export class Rondevu { return await this.api.getOfferAnswer(serviceFqn, offerId) } + /** + * Get all answered offers (efficient batch polling for offerer) + * Returns all offers that have been answered since the given timestamp + */ + async getAnsweredOffers(since?: number): Promise<{ + offers: Array<{ + offerId: string + serviceId?: string + answererId: string + sdp: string + answeredAt: number + }> + }> { + return await this.api.getAnsweredOffers(since) + } + /** * Add ICE candidates to specific offer */