Add Rumble AdProvider

react-query-api
Alex Gleason 2022-08-01 23:03:16 -05:00
rodzic b02141874e
commit 0eeca2be5c
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 7211D1F99744FBB7
2 zmienionych plików z 46 dodań i 0 usunięć

Wyświetl plik

@ -6,6 +6,7 @@ import type { Card } from 'soapbox/types/entities';
/** Map of available provider modules. */
const PROVIDERS: Record<string, () => Promise<AdProvider>> = {
soapbox: async() => (await import(/* webpackChunkName: "features/ads/soapbox" */'./soapbox-config')).default,
rumble: async() => (await import(/* webpackChunkName: "features/ads/rumble" */'./rumble')).default,
};
/** Ad server implementation. */

Wyświetl plik

@ -0,0 +1,45 @@
import { getSoapboxConfig } from 'soapbox/actions/soapbox';
import { normalizeCard } from 'soapbox/normalizers';
import type { AdProvider } from '.';
/** Rumble ad API entity. */
interface RumbleAd {
type: number,
impression: string,
click: string,
asset: string,
expires: number,
}
/** Response from Rumble ad server. */
interface RumbleApiResponse {
count: number,
ads: RumbleAd[],
}
/** Provides ads from Soapbox Config. */
const RumbleAdProvider: AdProvider = {
getAds: async(getState) => {
const state = getState();
const soapboxConfig = getSoapboxConfig(state);
const endpoint = soapboxConfig.extensions.getIn(['ads', 'endpoint']) as string | undefined;
if (endpoint) {
const response = await fetch(endpoint);
const data = await response.json() as RumbleApiResponse;
return data.ads.map(item => ({
impression: item.impression,
card: normalizeCard({
type: item.type === 1 ? 'Link' : 'Rich',
image: item.asset,
url: item.click,
}),
}));
} else {
return [];
}
},
};
export default RumbleAdProvider;