/** * Internal dependencies */ import type { SocialMessage } from './social-messages'; import type { Maybe } from './utils'; import type { MediaItem } from './wordpress-entities'; export type SocialNetwork = { readonly id: SocialNetworkName; readonly active: boolean; readonly automationFreqs: { readonly reshare: number; readonly publication: number; }; readonly labels: { readonly add: string; readonly name: string; readonly settings: string; }; readonly icon: JSX.Element; readonly limit: number; readonly tagsLimit?: number; readonly supports: ReadonlyArray< SocialNetworkSupport >; readonly supportedImageTypes?: ReadonlyArray< string >; readonly supportedVideoTypes?: ReadonlyArray< string >; readonly requires: OrArray< AndArray< SocialNetworkSupport > >; readonly validators?: { readonly image?: ( item: Maybe< MediaItem > ) => Maybe< ErrorDesc >; readonly images?: ( item: ReadonlyArray< MediaItem > ) => Maybe< ErrorDesc >; readonly video?: ( item: Maybe< MediaItem > ) => Maybe< ErrorDesc >; readonly general?: ( attrs: RequirementsErrorAttributes ) => Maybe< ErrorDesc >; }; readonly kinds?: ReadonlyArray< SocialKind >; }; export type SocialKind = { readonly id: SocialKindName; readonly label: string; }; export type SocialNetworkName = | 'band' | 'blogger' | 'bluesky' | 'discord' | 'facebook' | 'gmb' | 'instagram' | 'linkedin' | 'mastodon' | 'medium' | 'ok' | 'pinterest' | 'plurk' | 'reddit' | 'slack' | 'telegram' | 'threads' | 'tiktok' | 'tumblr' | 'twitter' | 'vk' | 'webhook'; export type SocialKindName = | 'single' | 'page' // Facebook | 'company' // LinkedIn | 'location' // GMB | 'blog' // Blogger | 'group' // VK, OK | 'subreddit' // Reddit | 'publication'; // Medium export type SocialNetworkSupport = | 'automations' | 'buffer-connection' | 'hootsuite-connection' | 'image' | 'link-shortener' | 'medium-tags' | 'multi-image' | 'multi-media' | 'multi-target' | 'network-image' | 'network-template' | 'preview' | 'profile-template' | 'recurrence' | 'related-post' | 'reusability' | 'text' | 'video'; export type RequirementsErrorAttributes = Pick< SocialMessage, | 'network' | 'postId' | 'targetName' | 'textComputed' | 'type' | 'tiktokSettings' | 'webhookSettings' > & { readonly image: Maybe< MediaItem | ReadonlyArray< MediaItem > >; readonly video: Maybe< MediaItem | ReadonlyArray< MediaItem > >; }; export type AndArray< T > = ReadonlyArray< T >; export type OrArray< T > = ReadonlyArray< T >; // ============ // HELPER TYPES // ============ type ErrorDesc = string;