40 lines
983 B
TypeScript
40 lines
983 B
TypeScript
import axios from 'axios';
|
|
import { z } from 'zod';
|
|
|
|
import { getSettings } from 'soapbox/actions/settings';
|
|
import { cardSchema } from 'soapbox/schemas/card';
|
|
import { filteredArray } from 'soapbox/schemas/utils';
|
|
|
|
import type { AdProvider } from '.';
|
|
|
|
/** TruthSocial ad API entity. */
|
|
const truthAdSchema = z.object({
|
|
impression: z.string(),
|
|
card: cardSchema,
|
|
expires_at: z.string(),
|
|
reason: z.string().catch(''),
|
|
});
|
|
|
|
/** Provides ads from the TruthSocial API. */
|
|
const TruthAdProvider: AdProvider = {
|
|
getAds: async(getState) => {
|
|
const state = getState();
|
|
const settings = getSettings(state);
|
|
|
|
try {
|
|
const { data } = await axios.get('/api/v2/truth/ads?device=desktop', {
|
|
headers: {
|
|
'Accept-Language': z.string().catch('*').parse(settings.get('locale')),
|
|
},
|
|
});
|
|
|
|
return filteredArray(truthAdSchema).parse(data);
|
|
} catch (e) {
|
|
// do nothing
|
|
}
|
|
|
|
return [];
|
|
},
|
|
};
|
|
|
|
export default TruthAdProvider;
|