export type WebhookProfile = {url?: string | undefined, name?: string | undefined, nickname?: string | undefined, profileId?: string | undefined, profileType?: string | undefined, avatarUrl?: string | undefined, subscribers?: number | undefined, age?: number | undefined}; export type Sentiment = 'positive' | 'neutral' | 'negative' | 'undefined'; export type PostType = 'post' | 'repost' | 'extendedRepost' | 'comment'; export type Reactions = {total?: number | undefined, angry?: (number | null) | undefined, haha?: (number | null) | undefined, love?: (number | null) | undefined, sad?: (number | null) | undefined, wow?: (number | null) | undefined, care?: (number | null) | undefined}; export type SourceSpecificFormat = 'instagramReels' | 'instagramStories' | 'pinterestStoryPins' | 'youTubeShorts' | 'facebookReels' | 'facebookStories' | 'tikTokPhoto' | 'twitterNote' | 'youTubeLive' | 'facebookLive' | 'twitchLive' | 'twitterCommunityNote'; export type WebhookMention = {topicId: number, topicName?: string | undefined, themeId?: number | undefined, themeName?: string | undefined, mentionId: number, sourceName?: string | undefined, author?: WebhookProfile | undefined, channel?: WebhookProfile | undefined, title?: string | undefined, text?: string | undefined, url?: string | undefined, published: string, addedAt?: string | undefined, sentiment?: Sentiment | undefined, imageUrl?: string | undefined, language?: string | undefined, postType: PostType, resourceType: 'social' | 'blog' | 'forum' | 'messenger' | 'news' | 'reviews' | 'other', spam?: boolean | undefined, rating?: number | undefined, tags?: Array | undefined, postId?: string | undefined, parentPostId?: string | undefined, discussionId?: string | undefined, likes?: number | undefined, reposts?: number | undefined, comments?: number | undefined, engagement?: number | undefined, dislikes?: number | undefined, views?: number | undefined, impressions?: number | undefined, reach?: number | undefined, saves?: number | undefined, reactions?: Reactions | undefined, contentTypes?: (Array<'text' | 'link' | 'image' | 'video' | 'poll' | 'subtitles' | 'sticker'>) | undefined, collectionMethods?: (Array<'text' | 'ocrText' | 'imageLogo' | 'imageFeature' | 'imageSimilarity' | 'audio' | 'channel' | 'manual' | 'filter' | 'import'>) | undefined, sourceFormat?: SourceSpecificFormat | undefined, country?: string | undefined, region?: string | undefined, city?: string | undefined, potentialReach?: number | undefined, imageScenes?: Array | undefined, imageObjects?: Array | undefined, imageColors?: Array | undefined, imageActivities?: Array | undefined, imageBrands?: Array | undefined}; export type CreateApiYourWebhookEndpointArgs = {body: WebhookMention}; export type CreateApiYourWebhookEndpointOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; /** * Mention found * * POST /your-webhook-endpoint */ export const createApiYourWebhookEndpoint = async (args: CreateApiYourWebhookEndpointArgs, options?: CreateApiYourWebhookEndpointOptions) => { const {baseUrl = "https://your-app.example", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/your-webhook-endpoint${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return undefined };