postiz/libraries/nestjs-libraries/src/integrations/integration.manager.ts

157 lines
5.7 KiB
TypeScript

import 'reflect-metadata';
import { Injectable } from '@nestjs/common';
import { XProvider } from '@gitroom/nestjs-libraries/integrations/social/x.provider';
import { SocialProvider } from '@gitroom/nestjs-libraries/integrations/social/social.integrations.interface';
import { LinkedinProvider } from '@gitroom/nestjs-libraries/integrations/social/linkedin.provider';
import { RedditProvider } from '@gitroom/nestjs-libraries/integrations/social/reddit.provider';
import { DevToProvider } from '@gitroom/nestjs-libraries/integrations/social/dev.to.provider';
import { HashnodeProvider } from '@gitroom/nestjs-libraries/integrations/social/hashnode.provider';
import { MediumProvider } from '@gitroom/nestjs-libraries/integrations/social/medium.provider';
import { FacebookProvider } from '@gitroom/nestjs-libraries/integrations/social/facebook.provider';
import { InstagramProvider } from '@gitroom/nestjs-libraries/integrations/social/instagram.provider';
import { YoutubeProvider } from '@gitroom/nestjs-libraries/integrations/social/youtube.provider';
import { TiktokProvider } from '@gitroom/nestjs-libraries/integrations/social/tiktok.provider';
import { PinterestProvider } from '@gitroom/nestjs-libraries/integrations/social/pinterest.provider';
import { DribbbleProvider } from '@gitroom/nestjs-libraries/integrations/social/dribbble.provider';
import { LinkedinPageProvider } from '@gitroom/nestjs-libraries/integrations/social/linkedin.page.provider';
import { ThreadsProvider } from '@gitroom/nestjs-libraries/integrations/social/threads.provider';
import { DiscordProvider } from '@gitroom/nestjs-libraries/integrations/social/discord.provider';
import { SlackProvider } from '@gitroom/nestjs-libraries/integrations/social/slack.provider';
import { MastodonProvider } from '@gitroom/nestjs-libraries/integrations/social/mastodon.provider';
import { BlueskyProvider } from '@gitroom/nestjs-libraries/integrations/social/bluesky.provider';
import { LemmyProvider } from '@gitroom/nestjs-libraries/integrations/social/lemmy.provider';
import { InstagramStandaloneProvider } from '@gitroom/nestjs-libraries/integrations/social/instagram.standalone.provider';
import { FarcasterProvider } from '@gitroom/nestjs-libraries/integrations/social/farcaster.provider';
import { TelegramProvider } from '@gitroom/nestjs-libraries/integrations/social/telegram.provider';
import { NostrProvider } from '@gitroom/nestjs-libraries/integrations/social/nostr.provider';
import { VkProvider } from '@gitroom/nestjs-libraries/integrations/social/vk.provider';
import { WordpressProvider } from '@gitroom/nestjs-libraries/integrations/social/wordpress.provider';
import { ListmonkProvider } from '@gitroom/nestjs-libraries/integrations/social/listmonk.provider';
export const socialIntegrationList: SocialProvider[] = [
new XProvider(),
new LinkedinProvider(),
new LinkedinPageProvider(),
new RedditProvider(),
new InstagramProvider(),
new InstagramStandaloneProvider(),
new FacebookProvider(),
new ThreadsProvider(),
new YoutubeProvider(),
new TiktokProvider(),
new PinterestProvider(),
new DribbbleProvider(),
new DiscordProvider(),
new SlackProvider(),
new MastodonProvider(),
new BlueskyProvider(),
new LemmyProvider(),
new FarcasterProvider(),
new TelegramProvider(),
new NostrProvider(),
new VkProvider(),
new MediumProvider(),
new DevToProvider(),
new HashnodeProvider(),
new WordpressProvider(),
new ListmonkProvider(),
// new MastodonCustomProvider(),
];
@Injectable()
export class IntegrationManager {
async getAllIntegrations() {
return {
social: await Promise.all(
socialIntegrationList.map(async (p) => ({
name: p.name,
identifier: p.identifier,
toolTip: p.toolTip,
editor: p.editor,
isExternal: !!p.externalUrl,
isWeb3: !!p.isWeb3,
...(p.customFields ? { customFields: await p.customFields() } : {}),
}))
),
article: [] as any[],
};
}
getAllTools(): {
[key: string]: {
description: string;
dataSchema: any;
methodName: string;
}[];
} {
return socialIntegrationList.reduce(
(all, current) => ({
...all,
[current.identifier]:
Reflect.getMetadata('custom:tool', current.constructor.prototype) ||
[],
}),
{}
);
}
getAllRulesDescription(): {
[key: string]: string;
} {
return socialIntegrationList.reduce(
(all, current) => ({
...all,
[current.identifier]:
Reflect.getMetadata(
'custom:rules:description',
current.constructor
) || '',
}),
{}
);
}
getAllPlugs() {
return socialIntegrationList
.map((p) => {
return {
name: p.name,
identifier: p.identifier,
plugs: (
Reflect.getMetadata('custom:plug', p.constructor.prototype) || []
)
.filter((f: any) => !f.disabled)
.map((p: any) => ({
...p,
fields: p.fields.map((c: any) => ({
...c,
validation: c?.validation?.toString(),
})),
})),
};
})
.filter((f) => f.plugs.length);
}
getInternalPlugs(providerName: string) {
const p = socialIntegrationList.find((p) => p.identifier === providerName)!;
return {
internalPlugs:
(
Reflect.getMetadata(
'custom:internal_plug',
p.constructor.prototype
) || []
).filter((f: any) => !f.disabled) || [],
};
}
getAllowedSocialsIntegrations() {
return socialIntegrationList.map((p) => p.identifier);
}
getSocialIntegration(integration: string): SocialProvider {
return socialIntegrationList.find((i) => i.identifier === integration)!;
}
}