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