返回 AiToEarn
twitter.module.ts
1 import type { DynamicModule } from '@nestjs/common'
2 import type { PlatformConfigWithStatus } from '../platforms.config'
3 import { Module } from '@nestjs/common'
4 import { isAvailablePlatformConfig, isVisiblePlatformConfig } from '../platforms.config'
5 import { PlatformIntegrationRegistry } from '../platforms.registry'
6 import { PlatformRegistryModule } from '../platforms.registry.module'
7 import { TwitterAnalyticsProvider } from './twitter-analytics.provider'
8 import { TwitterAuthProvider } from './twitter-auth.provider'
9 import { TwitterEngagementProvider } from './twitter-engagement.provider'
10 import { TwitterPublishProvider } from './twitter-publish.provider'
11 import { TwitterWorkProvider } from './twitter-work.provider'
12 import { TwitterConfig } from './twitter.config'
13 import { TWITTER_METADATA } from './twitter.constants'
14 import { TwitterService } from './twitter.service'
15
16 @Module({})
17 export class TwitterModule {
18 static forRoot(config: PlatformConfigWithStatus | undefined): DynamicModule {
19 if (!isVisiblePlatformConfig(config)) {
20 return { module: TwitterModule }
21 }
22
23 const metadata = { ...TWITTER_METADATA, logoUrl: config.logoUrl }
24
25 if (!isAvailablePlatformConfig(config)) {
26 return {
27 module: TwitterModule,
28 imports: [PlatformRegistryModule],
29 providers: [
30 {
31 provide: 'TWITTER_INTEGRATION',
32 inject: [PlatformIntegrationRegistry],
33 useFactory: (registry: PlatformIntegrationRegistry) => {
34 registry.register({
35 platform: TWITTER_METADATA.platform,
36 status: config.status,
37 metadata,
38 runtime: {},
39 })
40 },
41 },
42 ],
43 }
44 }
45
46 const availableConfig = config as TwitterConfig
47
48 return {
49 module: TwitterModule,
50 imports: [PlatformRegistryModule],
51 providers: [
52 { provide: TwitterConfig, useValue: availableConfig },
53 TwitterService,
54 TwitterAuthProvider,
55 TwitterPublishProvider,
56 TwitterAnalyticsProvider,
57 TwitterEngagementProvider,
58 TwitterWorkProvider,
59 {
60 provide: 'TWITTER_INTEGRATION',
61 inject: [
62 PlatformIntegrationRegistry,
63 TwitterAuthProvider,
64 TwitterPublishProvider,
65 TwitterAnalyticsProvider,
66 TwitterEngagementProvider,
67 TwitterWorkProvider,
68 ],
69 useFactory: (
70 registry: PlatformIntegrationRegistry,
71 auth: TwitterAuthProvider,
72 publish: TwitterPublishProvider,
73 analytics: TwitterAnalyticsProvider,
74 engagement: TwitterEngagementProvider,
75 work: TwitterWorkProvider,
76 ) => {
77 registry.register({
78 platform: TWITTER_METADATA.platform,
79 status: availableConfig.status,
80 metadata,
81 runtime: {},
82 auth,
83 publish,
84 analytics,
85 engagement,
86 work,
87 })
88 },
89 },
90 ],
91 exports: [
92 TwitterService,
93 TwitterAuthProvider,
94 TwitterPublishProvider,
95 TwitterAnalyticsProvider,
96 TwitterEngagementProvider,
97 TwitterWorkProvider,
98 ],
99 }
100 }
101 }
102
102 lines TYPESCRIPT