bigbuffet-rw/app/soapbox/features/ads/providers/truth.ts
2023-05-02 17:56:25 -05:00

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;