diff --git a/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts b/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts index 47fd7d9120..bcdc8187cc 100644 --- a/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/instagram.provider.ts @@ -4,6 +4,7 @@ import { PostDetails, PostResponse, SocialProvider, + SocialProviderCapabilities, } from '@gitroom/nestjs-libraries/integrations/social/social.integrations.interface'; import { makeId } from '@gitroom/nestjs-libraries/services/make.is'; import { timer } from '@gitroom/helpers/utils/timer'; @@ -22,6 +23,14 @@ export class InstagramProvider { identifier = 'instagram'; name = 'Instagram\n(Facebook Business)'; + capabilities: SocialProviderCapabilities = { + supportsThreads: false, + supportsPolling: false, + supportsMedia: true, + maxMediaCount: 10, + supportsComments: false, + supportsAnalytics: true, + }; isBetweenSteps = true; toolTip = 'Instagram must be business and connected to a Facebook page'; scopes = [ diff --git a/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts b/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts index 81b2fdedca..4f559e8322 100644 --- a/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/linkedin.provider.ts @@ -3,6 +3,7 @@ import { PostDetails, PostResponse, SocialProvider, + SocialProviderCapabilities, } from '@gitroom/nestjs-libraries/integrations/social/social.integrations.interface'; import { makeId } from '@gitroom/nestjs-libraries/services/make.is'; import sharp from 'sharp'; @@ -22,6 +23,14 @@ import { Rules } from '@gitroom/nestjs-libraries/chat/rules.description.decorato export class LinkedinProvider extends SocialAbstract implements SocialProvider { identifier = 'linkedin'; name = 'LinkedIn'; + capabilities: SocialProviderCapabilities = { + supportsThreads: false, + supportsPolling: false, + supportsMedia: true, + maxMediaCount: 1, + supportsComments: false, + supportsAnalytics: true, + }; oneTimeToken = true; isBetweenSteps = false; diff --git a/libraries/nestjs-libraries/src/integrations/social/social.integrations.interface.ts b/libraries/nestjs-libraries/src/integrations/social/social.integrations.interface.ts index 29d8356b60..522b123d6d 100644 --- a/libraries/nestjs-libraries/src/integrations/social/social.integrations.interface.ts +++ b/libraries/nestjs-libraries/src/integrations/social/social.integrations.interface.ts @@ -56,6 +56,15 @@ export interface AnalyticsData { percentageChange: number; } +export interface SocialProviderCapabilities { + supportsThreads?: boolean; + supportsPolling?: boolean; + supportsMedia?: boolean; + maxMediaCount?: number; + supportsComments?: boolean; + supportsAnalytics?: boolean; +} + export type GenerateAuthUrlResponse = { url: string; @@ -139,6 +148,7 @@ export interface SocialProvider extends IAuthenticator, ISocialMediaIntegration { identifier: string; + capabilities?: SocialProviderCapabilities; refreshWait?: boolean; convertToJPEG?: boolean; refreshCron?: boolean; diff --git a/libraries/nestjs-libraries/src/integrations/social/x.provider.ts b/libraries/nestjs-libraries/src/integrations/social/x.provider.ts index 6d2151df89..aa6aa92440 100644 --- a/libraries/nestjs-libraries/src/integrations/social/x.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/x.provider.ts @@ -5,6 +5,7 @@ import { PostDetails, PostResponse, SocialProvider, + SocialProviderCapabilities, } from '@gitroom/nestjs-libraries/integrations/social/social.integrations.interface'; import { lookup } from 'mime-types'; import sharp from 'sharp'; @@ -26,6 +27,14 @@ import { Rules } from '@gitroom/nestjs-libraries/chat/rules.description.decorato export class XProvider extends SocialAbstract implements SocialProvider { identifier = 'x'; name = 'X'; + capabilities: SocialProviderCapabilities = { + supportsThreads: true, + supportsPolling: true, + supportsMedia: true, + maxMediaCount: 4, + supportsComments: true, + supportsAnalytics: true, + }; isBetweenSteps = false; scopes = [] as string[]; override maxConcurrentJob = 1; // X has strict rate limits (300 posts per 3 hours)