返回 AiToEarn
youtube.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 { YoutubeAnalyticsProvider } from './youtube-analytics.provider'
8 import { YoutubeAuthProvider } from './youtube-auth.provider'
9 import { YoutubeEngagementProvider } from './youtube-engagement.provider'
10 import { YoutubePublishOptionsProvider } from './youtube-publish-options.provider'
11 import { YoutubePublishProvider } from './youtube-publish.provider'
12 import { YoutubeWebhookProvider } from './youtube-webhook.provider'
13 import { YoutubeWorkProvider } from './youtube-work.provider'
14 import { YoutubeConfig } from './youtube.config'
15 import { YOUTUBE_METADATA } from './youtube.constants'
16 import { YoutubeService } from './youtube.service'
17
18 @Module({})
19 export class YoutubeModule {
20 static forRoot(config: PlatformConfigWithStatus | undefined): DynamicModule {
21 if (!isVisiblePlatformConfig(config)) {
22 return { module: YoutubeModule }
23 }
24
25 const metadata = { ...YOUTUBE_METADATA, logoUrl: config.logoUrl }
26
27 if (!isAvailablePlatformConfig(config)) {
28 return {
29 module: YoutubeModule,
30 imports: [PlatformRegistryModule],
31 providers: [
32 {
33 provide: 'YOUTUBE_INTEGRATION',
34 inject: [PlatformIntegrationRegistry],
35 useFactory: (registry: PlatformIntegrationRegistry) => {
36 registry.register({
37 platform: YOUTUBE_METADATA.platform,
38 status: config.status,
39 metadata,
40 runtime: {},
41 })
42 },
43 },
44 ],
45 }
46 }
47
48 const availableConfig = config as YoutubeConfig
49
50 return {
51 module: YoutubeModule,
52 imports: [PlatformRegistryModule],
53 providers: [
54 { provide: YoutubeConfig, useValue: availableConfig },
55 YoutubeService,
56 YoutubeAuthProvider,
57 YoutubePublishProvider,
58 YoutubePublishOptionsProvider,
59 YoutubeAnalyticsProvider,
60 YoutubeEngagementProvider,
61 YoutubeWorkProvider,
62 YoutubeWebhookProvider,
63 {
64 provide: 'YOUTUBE_INTEGRATION',
65 inject: [
66 PlatformIntegrationRegistry,
67 YoutubeAuthProvider,
68 YoutubePublishProvider,
69 YoutubePublishOptionsProvider,
70 YoutubeAnalyticsProvider,
71 YoutubeEngagementProvider,
72 YoutubeWorkProvider,
73 YoutubeWebhookProvider,
74 ],
75 useFactory: (
76 registry: PlatformIntegrationRegistry,
77 auth: YoutubeAuthProvider,
78 publish: YoutubePublishProvider,
79 publishOptions: YoutubePublishOptionsProvider,
80 analytics: YoutubeAnalyticsProvider,
81 engagement: YoutubeEngagementProvider,
82 work: YoutubeWorkProvider,
83 webhook: YoutubeWebhookProvider,
84 ) => {
85 registry.register({
86 platform: YOUTUBE_METADATA.platform,
87 status: availableConfig.status,
88 metadata,
89 runtime: {},
90 auth,
91 publish,
92 publishOptions,
93 analytics,
94 engagement,
95 work,
96 webhook,
97 })
98 },
99 },
100 ],
101 exports: [
102 YoutubeConfig,
103 YoutubeService,
104 YoutubeAuthProvider,
105 YoutubePublishProvider,
106 YoutubePublishOptionsProvider,
107 YoutubeAnalyticsProvider,
108 YoutubeEngagementProvider,
109 YoutubeWorkProvider,
110 YoutubeWebhookProvider,
111 ],
112 }
113 }
114 }
115
115 lines TYPESCRIPT