Refactor ad providers to not use normalizeCard
This commit is contained in:
parent
741da92084
commit
81de7c268e
|
@ -6,7 +6,6 @@ import type { Card } from 'soapbox/types/entities';
|
||||||
/** Map of available provider modules. */
|
/** Map of available provider modules. */
|
||||||
const PROVIDERS: Record<string, () => Promise<AdProvider>> = {
|
const PROVIDERS: Record<string, () => Promise<AdProvider>> = {
|
||||||
soapbox: async() => (await import(/* webpackChunkName: "features/ads/soapbox" */'./soapbox-config')).default,
|
soapbox: async() => (await import(/* webpackChunkName: "features/ads/soapbox" */'./soapbox-config')).default,
|
||||||
rumble: async() => (await import(/* webpackChunkName: "features/ads/rumble" */'./rumble')).default,
|
|
||||||
truth: async() => (await import(/* webpackChunkName: "features/ads/truth" */'./truth')).default,
|
truth: async() => (await import(/* webpackChunkName: "features/ads/truth" */'./truth')).default,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,58 +0,0 @@
|
||||||
import axios from 'axios';
|
|
||||||
|
|
||||||
import { getSettings } from 'soapbox/actions/settings';
|
|
||||||
import { getSoapboxConfig } from 'soapbox/actions/soapbox';
|
|
||||||
import { normalizeAd, 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 settings = getSettings(state);
|
|
||||||
const soapboxConfig = getSoapboxConfig(state);
|
|
||||||
const endpoint = soapboxConfig.extensions.getIn(['ads', 'endpoint']) as string | undefined;
|
|
||||||
|
|
||||||
if (endpoint) {
|
|
||||||
try {
|
|
||||||
const { data } = await axios.get<RumbleApiResponse>(endpoint, {
|
|
||||||
headers: {
|
|
||||||
'Accept-Language': settings.get('locale', '*') as string,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return data.ads.map(item => normalizeAd({
|
|
||||||
impression: item.impression,
|
|
||||||
card: normalizeCard({
|
|
||||||
type: item.type === 1 ? 'link' : 'rich',
|
|
||||||
image: item.asset,
|
|
||||||
url: item.click,
|
|
||||||
}),
|
|
||||||
expires_at: new Date(item.expires * 1000),
|
|
||||||
}));
|
|
||||||
} catch (e) {
|
|
||||||
// do nothing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return [];
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
export default RumbleAdProvider;
|
|
|
@ -1,18 +1,19 @@
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
|
import { z } from 'zod';
|
||||||
|
|
||||||
import { getSettings } from 'soapbox/actions/settings';
|
import { getSettings } from 'soapbox/actions/settings';
|
||||||
import { normalizeCard } from 'soapbox/normalizers';
|
import { cardSchema } from 'soapbox/schemas/card';
|
||||||
|
import { filteredArray } from 'soapbox/schemas/utils';
|
||||||
|
|
||||||
import type { AdProvider } from '.';
|
import type { AdProvider } from '.';
|
||||||
import type { Card } from 'soapbox/types/entities';
|
|
||||||
|
|
||||||
/** TruthSocial ad API entity. */
|
/** TruthSocial ad API entity. */
|
||||||
interface TruthAd {
|
const truthAdSchema = z.object({
|
||||||
impression: string
|
impression: z.string(),
|
||||||
card: Card
|
card: cardSchema,
|
||||||
expires_at: string
|
expires_at: z.string(),
|
||||||
reason: string
|
reason: z.string().catch(''),
|
||||||
}
|
});
|
||||||
|
|
||||||
/** Provides ads from the TruthSocial API. */
|
/** Provides ads from the TruthSocial API. */
|
||||||
const TruthAdProvider: AdProvider = {
|
const TruthAdProvider: AdProvider = {
|
||||||
|
@ -21,16 +22,13 @@ const TruthAdProvider: AdProvider = {
|
||||||
const settings = getSettings(state);
|
const settings = getSettings(state);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const { data } = await axios.get<TruthAd[]>('/api/v2/truth/ads?device=desktop', {
|
const { data } = await axios.get('/api/v2/truth/ads?device=desktop', {
|
||||||
headers: {
|
headers: {
|
||||||
'Accept-Language': settings.get('locale', '*') as string,
|
'Accept-Language': z.string().catch('*').parse(settings.get('locale')),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
return data.map(item => ({
|
return filteredArray(truthAdSchema).parse(data);
|
||||||
...item,
|
|
||||||
card: normalizeCard(item.card),
|
|
||||||
}));
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue