bozonx-social-media-posting 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1003 -0
  3. package/dist/src/app.constants.d.ts +8 -0
  4. package/dist/src/app.constants.js +9 -0
  5. package/dist/src/app.constants.js.map +1 -0
  6. package/dist/src/common/enums/body-format.enum.d.ts +12 -0
  7. package/dist/src/common/enums/body-format.enum.js +14 -0
  8. package/dist/src/common/enums/body-format.enum.js.map +1 -0
  9. package/dist/src/common/enums/error-code.enum.d.ts +12 -0
  10. package/dist/src/common/enums/error-code.enum.js +14 -0
  11. package/dist/src/common/enums/error-code.enum.js.map +1 -0
  12. package/dist/src/common/enums/index.d.ts +3 -0
  13. package/dist/src/common/enums/index.js +4 -0
  14. package/dist/src/common/enums/index.js.map +1 -0
  15. package/dist/src/common/enums/post-type.enum.d.ts +28 -0
  16. package/dist/src/common/enums/post-type.enum.js +30 -0
  17. package/dist/src/common/enums/post-type.enum.js.map +1 -0
  18. package/dist/src/common/filters/all-exceptions.filter.d.ts +13 -0
  19. package/dist/src/common/filters/all-exceptions.filter.js +103 -0
  20. package/dist/src/common/filters/all-exceptions.filter.js.map +1 -0
  21. package/dist/src/common/helpers/media-input.helper.d.ts +73 -0
  22. package/dist/src/common/helpers/media-input.helper.js +122 -0
  23. package/dist/src/common/helpers/media-input.helper.js.map +1 -0
  24. package/dist/src/common/interceptors/shutdown.interceptor.d.ts +12 -0
  25. package/dist/src/common/interceptors/shutdown.interceptor.js +41 -0
  26. package/dist/src/common/interceptors/shutdown.interceptor.js.map +1 -0
  27. package/dist/src/common/interfaces/logger.interface.d.ts +44 -0
  28. package/dist/src/common/interfaces/logger.interface.js +44 -0
  29. package/dist/src/common/interfaces/logger.interface.js.map +1 -0
  30. package/dist/src/common/services/shutdown.module.d.ts +2 -0
  31. package/dist/src/common/services/shutdown.module.js +18 -0
  32. package/dist/src/common/services/shutdown.module.js.map +1 -0
  33. package/dist/src/common/services/shutdown.service.d.ts +40 -0
  34. package/dist/src/common/services/shutdown.service.js +122 -0
  35. package/dist/src/common/services/shutdown.service.js.map +1 -0
  36. package/dist/src/common/types/index.d.ts +1 -0
  37. package/dist/src/common/types/index.js +2 -0
  38. package/dist/src/common/types/index.js.map +1 -0
  39. package/dist/src/common/types/media-input.type.d.ts +29 -0
  40. package/dist/src/common/types/media-input.type.js +2 -0
  41. package/dist/src/common/types/media-input.type.js.map +1 -0
  42. package/dist/src/common/validators/body-length.validator.d.ts +24 -0
  43. package/dist/src/common/validators/body-length.validator.js +57 -0
  44. package/dist/src/common/validators/body-length.validator.js.map +1 -0
  45. package/dist/src/common/validators/channel-id.validator.d.ts +19 -0
  46. package/dist/src/common/validators/channel-id.validator.js +58 -0
  47. package/dist/src/common/validators/channel-id.validator.js.map +1 -0
  48. package/dist/src/common/validators/has-content.validator.d.ts +23 -0
  49. package/dist/src/common/validators/has-content.validator.js +57 -0
  50. package/dist/src/common/validators/has-content.validator.js.map +1 -0
  51. package/dist/src/common/validators/media-input.validator.d.ts +44 -0
  52. package/dist/src/common/validators/media-input.validator.js +112 -0
  53. package/dist/src/common/validators/media-input.validator.js.map +1 -0
  54. package/dist/src/common/validators/media-priority.validator.d.ts +19 -0
  55. package/dist/src/common/validators/media-priority.validator.js +38 -0
  56. package/dist/src/common/validators/media-priority.validator.js.map +1 -0
  57. package/dist/src/config/app.config.d.ts +33 -0
  58. package/dist/src/config/app.config.js +83 -0
  59. package/dist/src/config/app.config.js.map +1 -0
  60. package/dist/src/config/library.config.d.ts +51 -0
  61. package/dist/src/config/library.config.js +197 -0
  62. package/dist/src/config/library.config.js.map +1 -0
  63. package/dist/src/config/yaml-config.dto.d.ts +37 -0
  64. package/dist/src/config/yaml-config.dto.js +152 -0
  65. package/dist/src/config/yaml-config.dto.js.map +1 -0
  66. package/dist/src/config/yaml.config.d.ts +14 -0
  67. package/dist/src/config/yaml.config.js +72 -0
  68. package/dist/src/config/yaml.config.js.map +1 -0
  69. package/dist/src/index.d.ts +19 -0
  70. package/dist/src/index.js +17 -0
  71. package/dist/src/index.js.map +1 -0
  72. package/dist/src/library.d.ts +57 -0
  73. package/dist/src/library.js +92 -0
  74. package/dist/src/library.js.map +1 -0
  75. package/dist/src/modules/app-config/app-config.module.d.ts +2 -0
  76. package/dist/src/modules/app-config/app-config.module.js +26 -0
  77. package/dist/src/modules/app-config/app-config.module.js.map +1 -0
  78. package/dist/src/modules/app-config/app-config.service.d.ts +14 -0
  79. package/dist/src/modules/app-config/app-config.service.js +18 -0
  80. package/dist/src/modules/app-config/app-config.service.js.map +1 -0
  81. package/dist/src/modules/app-config/interfaces/app-config.interface.d.ts +31 -0
  82. package/dist/src/modules/app-config/interfaces/app-config.interface.js +2 -0
  83. package/dist/src/modules/app-config/interfaces/app-config.interface.js.map +1 -0
  84. package/dist/src/modules/app-config/nest-config.service.d.ts +41 -0
  85. package/dist/src/modules/app-config/nest-config.service.js +91 -0
  86. package/dist/src/modules/app-config/nest-config.service.js.map +1 -0
  87. package/dist/src/modules/health/health.controller.d.ts +12 -0
  88. package/dist/src/modules/health/health.controller.js +33 -0
  89. package/dist/src/modules/health/health.controller.js.map +1 -0
  90. package/dist/src/modules/health/health.module.d.ts +2 -0
  91. package/dist/src/modules/health/health.module.js +17 -0
  92. package/dist/src/modules/health/health.module.js.map +1 -0
  93. package/dist/src/modules/media/media.module.d.ts +2 -0
  94. package/dist/src/modules/media/media.module.js +18 -0
  95. package/dist/src/modules/media/media.module.js.map +1 -0
  96. package/dist/src/modules/media/media.service.d.ts +15 -0
  97. package/dist/src/modules/media/media.service.js +49 -0
  98. package/dist/src/modules/media/media.service.js.map +1 -0
  99. package/dist/src/modules/platforms/base/auth-validator-registry.service.d.ts +25 -0
  100. package/dist/src/modules/platforms/base/auth-validator-registry.service.js +50 -0
  101. package/dist/src/modules/platforms/base/auth-validator-registry.service.js.map +1 -0
  102. package/dist/src/modules/platforms/base/auth-validator.interface.d.ts +16 -0
  103. package/dist/src/modules/platforms/base/auth-validator.interface.js +2 -0
  104. package/dist/src/modules/platforms/base/auth-validator.interface.js.map +1 -0
  105. package/dist/src/modules/platforms/base/index.d.ts +4 -0
  106. package/dist/src/modules/platforms/base/index.js +5 -0
  107. package/dist/src/modules/platforms/base/index.js.map +1 -0
  108. package/dist/src/modules/platforms/base/platform-registry.service.d.ts +31 -0
  109. package/dist/src/modules/platforms/base/platform-registry.service.js +54 -0
  110. package/dist/src/modules/platforms/base/platform-registry.service.js.map +1 -0
  111. package/dist/src/modules/platforms/base/platform.interface.d.ts +39 -0
  112. package/dist/src/modules/platforms/base/platform.interface.js +2 -0
  113. package/dist/src/modules/platforms/base/platform.interface.js.map +1 -0
  114. package/dist/src/modules/platforms/platforms.module.d.ts +13 -0
  115. package/dist/src/modules/platforms/platforms.module.js +59 -0
  116. package/dist/src/modules/platforms/platforms.module.js.map +1 -0
  117. package/dist/src/modules/platforms/telegram/telegram-auth.validator.d.ts +19 -0
  118. package/dist/src/modules/platforms/telegram/telegram-auth.validator.js +51 -0
  119. package/dist/src/modules/platforms/telegram/telegram-auth.validator.js.map +1 -0
  120. package/dist/src/modules/platforms/telegram/telegram-type-detector.service.d.ts +18 -0
  121. package/dist/src/modules/platforms/telegram/telegram-type-detector.service.js +47 -0
  122. package/dist/src/modules/platforms/telegram/telegram-type-detector.service.js.map +1 -0
  123. package/dist/src/modules/platforms/telegram/telegram.platform.d.ts +58 -0
  124. package/dist/src/modules/platforms/telegram/telegram.platform.js +434 -0
  125. package/dist/src/modules/platforms/telegram/telegram.platform.js.map +1 -0
  126. package/dist/src/modules/post/base-post.service.d.ts +64 -0
  127. package/dist/src/modules/post/base-post.service.js +99 -0
  128. package/dist/src/modules/post/base-post.service.js.map +1 -0
  129. package/dist/src/modules/post/dto/index.d.ts +3 -0
  130. package/dist/src/modules/post/dto/index.js +4 -0
  131. package/dist/src/modules/post/dto/index.js.map +1 -0
  132. package/dist/src/modules/post/dto/post-request.dto.d.ts +56 -0
  133. package/dist/src/modules/post/dto/post-request.dto.js +195 -0
  134. package/dist/src/modules/post/dto/post-request.dto.js.map +1 -0
  135. package/dist/src/modules/post/dto/post-response.dto.d.ts +41 -0
  136. package/dist/src/modules/post/dto/post-response.dto.js +2 -0
  137. package/dist/src/modules/post/dto/post-response.dto.js.map +1 -0
  138. package/dist/src/modules/post/dto/preview-response.dto.d.ts +33 -0
  139. package/dist/src/modules/post/dto/preview-response.dto.js +2 -0
  140. package/dist/src/modules/post/dto/preview-response.dto.js.map +1 -0
  141. package/dist/src/modules/post/idempotency.service.d.ts +95 -0
  142. package/dist/src/modules/post/idempotency.service.js +229 -0
  143. package/dist/src/modules/post/idempotency.service.js.map +1 -0
  144. package/dist/src/modules/post/post.controller.d.ts +13 -0
  145. package/dist/src/modules/post/post.controller.js +97 -0
  146. package/dist/src/modules/post/post.controller.js.map +1 -0
  147. package/dist/src/modules/post/post.module.d.ts +2 -0
  148. package/dist/src/modules/post/post.module.js +25 -0
  149. package/dist/src/modules/post/post.module.js.map +1 -0
  150. package/dist/src/modules/post/post.service.d.ts +62 -0
  151. package/dist/src/modules/post/post.service.js +325 -0
  152. package/dist/src/modules/post/post.service.js.map +1 -0
  153. package/dist/src/modules/post/preview.service.d.ts +23 -0
  154. package/dist/src/modules/post/preview.service.js +69 -0
  155. package/dist/src/modules/post/preview.service.js.map +1 -0
  156. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  157. package/package.json +102 -0
@@ -0,0 +1,434 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var TelegramPlatform_1;
11
+ import { Injectable, Logger, BadRequestException } from '@nestjs/common';
12
+ import { Bot } from 'grammy';
13
+ import { PostType } from '../../../common/enums/index.js';
14
+ import { MediaService } from '../../media/media.service.js';
15
+ import { MediaInputHelper } from '../../../common/helpers/media-input.helper.js';
16
+ import { TelegramTypeDetector } from './telegram-type-detector.service.js';
17
+ let TelegramPlatform = TelegramPlatform_1 = class TelegramPlatform {
18
+ mediaService;
19
+ typeDetector;
20
+ name = 'telegram';
21
+ supportedTypes = [
22
+ PostType.AUTO,
23
+ PostType.POST,
24
+ PostType.IMAGE,
25
+ PostType.VIDEO,
26
+ PostType.ALBUM,
27
+ PostType.AUDIO,
28
+ PostType.DOCUMENT,
29
+ ];
30
+ supportsCoverWithMedia = false;
31
+ logger = new Logger(TelegramPlatform_1.name);
32
+ MAX_MEDIA_GROUP_SIZE = 10;
33
+ constructor(mediaService, typeDetector) {
34
+ this.mediaService = mediaService;
35
+ this.typeDetector = typeDetector;
36
+ }
37
+ async publish(request, accountConfig,
38
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
39
+ abortSignal) {
40
+ const { errors, warnings, actualType } = this.validateRequest(request);
41
+ if (errors.length > 0) {
42
+ throw new BadRequestException(errors.join('; '));
43
+ }
44
+ if (warnings.length > 0) {
45
+ this.logger.warn({
46
+ message: 'Warnings during publish',
47
+ metadata: {
48
+ platform: request.platform,
49
+ type: actualType,
50
+ warnings,
51
+ },
52
+ });
53
+ }
54
+ const { apiKey } = accountConfig.auth;
55
+ const bot = new Bot(apiKey);
56
+ const chatId = this.resolveChatId(request, accountConfig);
57
+ const { processedBody, parseMode, disableNotification, options } = this.prepareMessageData(request, accountConfig);
58
+ let result;
59
+ switch (actualType) {
60
+ case PostType.POST:
61
+ result = await this.sendMessage(bot, chatId, processedBody, // Validated in validateRequest
62
+ parseMode, disableNotification, options);
63
+ break;
64
+ case PostType.IMAGE:
65
+ result = await this.sendPhoto(bot, chatId, request.cover, processedBody, parseMode, disableNotification, options);
66
+ break;
67
+ case PostType.VIDEO:
68
+ result = await this.sendVideo(bot, chatId, request.video, processedBody, parseMode, disableNotification, options);
69
+ break;
70
+ case PostType.AUDIO:
71
+ result = await this.sendAudio(bot, chatId, request.audio, processedBody, parseMode, disableNotification, options);
72
+ break;
73
+ case PostType.DOCUMENT:
74
+ result = await this.sendDocument(bot, chatId, request.document, processedBody, parseMode, disableNotification, options);
75
+ break;
76
+ case PostType.ALBUM:
77
+ result = await this.sendMediaGroup(bot, chatId, request.media, processedBody, parseMode, disableNotification);
78
+ break;
79
+ default:
80
+ throw new BadRequestException(`Unsupported post type: ${actualType}`);
81
+ }
82
+ this.logger.log({
83
+ message: `Published to Telegram`,
84
+ metadata: {
85
+ platform: request.platform,
86
+ channelId: chatId,
87
+ type: actualType,
88
+ },
89
+ });
90
+ return {
91
+ postId: String(result.message_id || result[0]?.message_id),
92
+ url: this.buildPostUrl(chatId, result.message_id || result[0]?.message_id),
93
+ raw: { ok: true, result },
94
+ };
95
+ }
96
+ async preview(request, accountConfig) {
97
+ const { errors, warnings, actualType } = this.validateRequest(request);
98
+ if (errors.length > 0) {
99
+ return {
100
+ success: false,
101
+ data: {
102
+ valid: false,
103
+ errors,
104
+ warnings,
105
+ },
106
+ };
107
+ }
108
+ const { processedBody, targetFormat } = this.prepareMessageData(request, accountConfig);
109
+ return {
110
+ success: true,
111
+ data: {
112
+ valid: true,
113
+ detectedType: actualType,
114
+ convertedBody: processedBody,
115
+ targetFormat: targetFormat,
116
+ convertedBodyLength: processedBody?.length,
117
+ warnings,
118
+ },
119
+ };
120
+ }
121
+ validateRequest(request) {
122
+ const errors = [];
123
+ const warnings = [];
124
+ // Detect Type
125
+ const actualType = this.typeDetector.detectType(request);
126
+ if (!this.supportedTypes.includes(actualType)) {
127
+ errors.push(`Post type '${actualType}' is not supported for Telegram`);
128
+ }
129
+ // Required Fields
130
+ errors.push(...this.getRequiredFieldsErrors(request, actualType));
131
+ // Media URLs
132
+ errors.push(...this.getMediaUrlErrors(request));
133
+ // Ignored Fields
134
+ warnings.push(...this.getIgnoredFieldsWarnings(request));
135
+ warnings.push(...this.getIgnoredMediaWarnings(request, actualType));
136
+ return { errors, warnings, actualType };
137
+ }
138
+ /**
139
+ * Prepares message data for sending to Telegram.
140
+ * Maps bodyFormat to parse_mode without converting the body content.
141
+ * Body is sent as-is to Telegram API.
142
+ *
143
+ * Standard formats (text, html, md) are mapped to Telegram parse_mode.
144
+ * Custom values (e.g., MarkdownV2) are passed as-is.
145
+ * If parse_mode is specified in options, it overrides bodyFormat mapping.
146
+ */
147
+ prepareMessageData(request, accountConfig) {
148
+ const processedBody = request.body;
149
+ // Map bodyFormat to Telegram parse_mode
150
+ let parseMode;
151
+ const bodyFormat = request.bodyFormat || 'text';
152
+ // Standard format mappings
153
+ if (bodyFormat === 'html') {
154
+ parseMode = 'HTML';
155
+ }
156
+ else if (bodyFormat === 'md') {
157
+ parseMode = 'Markdown';
158
+ }
159
+ else if (bodyFormat === 'text') {
160
+ // Plain text - no parse_mode
161
+ parseMode = undefined;
162
+ }
163
+ else {
164
+ // Any other value is passed as-is (e.g., 'MarkdownV2' → parse_mode: 'MarkdownV2')
165
+ parseMode = bodyFormat;
166
+ }
167
+ const disableNotification = request.disableNotification ?? accountConfig.disableNotification ?? false;
168
+ // Options are passed directly to Telegram API
169
+ const options = request.options || {};
170
+ // If parse_mode is specified in options, it overrides our mapping
171
+ if (options.parse_mode !== undefined) {
172
+ parseMode = options.parse_mode;
173
+ }
174
+ return { processedBody, targetFormat: bodyFormat, parseMode, disableNotification, options };
175
+ }
176
+ /**
177
+ * Resolve Telegram chat identifier from request and account configuration.
178
+ *
179
+ * Priority:
180
+ * 1. request.channelId
181
+ * 2. accountConfig.channelId (from config.yaml)
182
+ * 3. accountConfig.auth.chatId (legacy, for backward compatibility)
183
+ */
184
+ resolveChatId(request, accountConfig) {
185
+ const requestChannelId = request.channelId;
186
+ const configChannelId = accountConfig.channelId;
187
+ const legacyChatId = accountConfig.auth?.chatId;
188
+ const finalId = requestChannelId ?? configChannelId ?? legacyChatId;
189
+ if (finalId === undefined || finalId === null || finalId === '') {
190
+ throw new BadRequestException('Field "channelId" is required for Telegram (provide via request.channelId, account config channelId, or legacy auth.chatId)');
191
+ }
192
+ if (typeof finalId !== 'string' && typeof finalId !== 'number') {
193
+ throw new BadRequestException('Field "channelId" must be a string or number');
194
+ }
195
+ return finalId;
196
+ }
197
+ async sendMessage(bot, chatId, text, parseMode, disableNotification, options) {
198
+ return await bot.api.sendMessage(chatId, text, {
199
+ ...(parseMode && { parse_mode: parseMode }),
200
+ disable_notification: disableNotification,
201
+ ...options,
202
+ });
203
+ }
204
+ async sendPhoto(bot, chatId, cover, caption, parseMode, disableNotification, options) {
205
+ const photo = MediaInputHelper.toTelegramInput(cover);
206
+ const hasSpoiler = MediaInputHelper.getHasSpoiler(cover);
207
+ return await bot.api.sendPhoto(chatId, photo, {
208
+ caption,
209
+ ...(parseMode && { parse_mode: parseMode }),
210
+ disable_notification: disableNotification,
211
+ has_spoiler: hasSpoiler,
212
+ ...options,
213
+ });
214
+ }
215
+ async sendVideo(bot, chatId, video, caption, parseMode, disableNotification, options) {
216
+ const videoInput = MediaInputHelper.toTelegramInput(video);
217
+ const hasSpoiler = MediaInputHelper.getHasSpoiler(video);
218
+ return await bot.api.sendVideo(chatId, videoInput, {
219
+ caption,
220
+ ...(parseMode && { parse_mode: parseMode }),
221
+ disable_notification: disableNotification,
222
+ has_spoiler: hasSpoiler,
223
+ ...options,
224
+ });
225
+ }
226
+ async sendAudio(bot, chatId, audio, caption, parseMode, disableNotification, options) {
227
+ const audioInput = MediaInputHelper.toTelegramInput(audio);
228
+ return await bot.api.sendAudio(chatId, audioInput, {
229
+ caption,
230
+ ...(parseMode && { parse_mode: parseMode }),
231
+ disable_notification: disableNotification,
232
+ ...options,
233
+ });
234
+ }
235
+ async sendDocument(bot, chatId, document, caption, parseMode, disableNotification, options) {
236
+ const documentInput = MediaInputHelper.toTelegramInput(document);
237
+ return await bot.api.sendDocument(chatId, documentInput, {
238
+ caption,
239
+ ...(parseMode && { parse_mode: parseMode }),
240
+ disable_notification: disableNotification,
241
+ ...options,
242
+ });
243
+ }
244
+ async sendMediaGroup(bot, chatId, media, caption, parseMode, disableNotification) {
245
+ const mediaGroup = media.slice(0, this.MAX_MEDIA_GROUP_SIZE).map((item, index) => {
246
+ const url = MediaInputHelper.getUrl(item);
247
+ const fileId = MediaInputHelper.getFileId(item);
248
+ const hasSpoiler = MediaInputHelper.getHasSpoiler(item);
249
+ const explicitType = MediaInputHelper.getType(item);
250
+ const mediaInput = fileId || url;
251
+ if (!mediaInput) {
252
+ throw new BadRequestException(`Media item at index ${index} must have either url or fileId`);
253
+ }
254
+ // Use explicit type if provided, otherwise detect by URL extension
255
+ const telegramType = this.mapMediaTypeToTelegram(explicitType, url);
256
+ return {
257
+ type: telegramType,
258
+ media: mediaInput,
259
+ caption: index === 0 ? caption : undefined,
260
+ ...(parseMode && index === 0 && { parse_mode: parseMode }),
261
+ has_spoiler: hasSpoiler,
262
+ };
263
+ });
264
+ return await bot.api.sendMediaGroup(chatId, mediaGroup, {
265
+ disable_notification: disableNotification,
266
+ });
267
+ }
268
+ /**
269
+ * Map MediaType to Telegram media group type
270
+ * Falls back to URL extension detection if no explicit type provided
271
+ */
272
+ mapMediaTypeToTelegram(explicitType, url) {
273
+ if (explicitType) {
274
+ // Telegram sendMediaGroup only supports photo and video
275
+ if (explicitType === 'video') {
276
+ return 'video';
277
+ }
278
+ // image, audio, document all map to photo in media groups
279
+ return 'photo';
280
+ }
281
+ // Fallback: detect by URL extension
282
+ const isVideo = url ? /\.(mp4|mov|avi|mkv)$/i.test(url) : false;
283
+ return isVideo ? 'video' : 'photo';
284
+ }
285
+ getRequiredFieldsErrors(request, type) {
286
+ const errors = [];
287
+ switch (type) {
288
+ case PostType.POST:
289
+ if (request.body === undefined || request.body === null || request.body.trim() === '') {
290
+ errors.push("Field 'body' is required for type 'post'");
291
+ }
292
+ if (MediaInputHelper.isDefined(request.cover) ||
293
+ MediaInputHelper.isDefined(request.video) ||
294
+ MediaInputHelper.isDefined(request.audio) ||
295
+ MediaInputHelper.isDefined(request.document) ||
296
+ MediaInputHelper.isNotEmpty(request.media)) {
297
+ errors.push("For type 'post', media fields must not be provided");
298
+ }
299
+ break;
300
+ case PostType.IMAGE:
301
+ if (!MediaInputHelper.isDefined(request.cover)) {
302
+ errors.push("Field 'cover' is required for type 'image'");
303
+ }
304
+ break;
305
+ case PostType.VIDEO:
306
+ if (!MediaInputHelper.isDefined(request.video)) {
307
+ errors.push("Field 'video' is required for type 'video'");
308
+ }
309
+ break;
310
+ case PostType.AUDIO:
311
+ if (!MediaInputHelper.isDefined(request.audio)) {
312
+ errors.push("Field 'audio' is required for type 'audio'");
313
+ }
314
+ break;
315
+ case PostType.DOCUMENT:
316
+ if (!MediaInputHelper.isDefined(request.document)) {
317
+ errors.push("Field 'document' is required for type 'document'");
318
+ }
319
+ break;
320
+ case PostType.ALBUM:
321
+ if (!MediaInputHelper.isNotEmpty(request.media)) {
322
+ errors.push("Field 'media' is required for type 'album'");
323
+ }
324
+ break;
325
+ }
326
+ return errors;
327
+ }
328
+ getMediaUrlErrors(request) {
329
+ const errors = [];
330
+ const validateIfUrl = (media) => {
331
+ const url = MediaInputHelper.getUrl(media);
332
+ if (url) {
333
+ try {
334
+ this.mediaService.validateMediaUrl(url);
335
+ }
336
+ catch (e) {
337
+ errors.push(e.message);
338
+ }
339
+ }
340
+ };
341
+ if (request.cover)
342
+ validateIfUrl(request.cover);
343
+ if (request.video)
344
+ validateIfUrl(request.video);
345
+ if (request.audio)
346
+ validateIfUrl(request.audio);
347
+ if (request.document)
348
+ validateIfUrl(request.document);
349
+ if (request.media) {
350
+ request.media.forEach(validateIfUrl);
351
+ }
352
+ return errors;
353
+ }
354
+ getIgnoredFieldsWarnings(request) {
355
+ const warnings = [];
356
+ const ignoredFields = [];
357
+ if (request.title)
358
+ ignoredFields.push('title');
359
+ if (request.description)
360
+ ignoredFields.push('description');
361
+ if (request.postLanguage)
362
+ ignoredFields.push('postLanguage');
363
+ if (request.tags)
364
+ ignoredFields.push('tags');
365
+ if (request.mode)
366
+ ignoredFields.push('mode');
367
+ if (request.scheduledAt)
368
+ ignoredFields.push('scheduledAt');
369
+ if (ignoredFields.length > 0) {
370
+ warnings.push(`Fields ${ignoredFields.join(', ')} are not used by Telegram and will be ignored`);
371
+ }
372
+ return warnings;
373
+ }
374
+ getIgnoredMediaWarnings(request, type) {
375
+ const warnings = [];
376
+ const ignoredFields = [];
377
+ const checkField = (field, value, isArray = false) => {
378
+ if (isArray ? MediaInputHelper.isNotEmpty(value) : MediaInputHelper.isDefined(value)) {
379
+ ignoredFields.push(field);
380
+ }
381
+ };
382
+ switch (type) {
383
+ case PostType.IMAGE:
384
+ checkField('media', request.media, true);
385
+ checkField('video', request.video);
386
+ checkField('audio', request.audio);
387
+ checkField('document', request.document);
388
+ break;
389
+ case PostType.VIDEO:
390
+ checkField('media', request.media, true);
391
+ checkField('cover', request.cover);
392
+ checkField('audio', request.audio);
393
+ checkField('document', request.document);
394
+ break;
395
+ case PostType.AUDIO:
396
+ checkField('media', request.media, true);
397
+ checkField('cover', request.cover);
398
+ checkField('video', request.video);
399
+ checkField('document', request.document);
400
+ break;
401
+ case PostType.DOCUMENT:
402
+ checkField('media', request.media, true);
403
+ checkField('cover', request.cover);
404
+ checkField('video', request.video);
405
+ checkField('audio', request.audio);
406
+ break;
407
+ case PostType.ALBUM:
408
+ checkField('cover', request.cover);
409
+ checkField('video', request.video);
410
+ checkField('audio', request.audio);
411
+ checkField('document', request.document);
412
+ break;
413
+ }
414
+ if (ignoredFields.length > 0) {
415
+ warnings.push(`Fields ${ignoredFields.join(', ')} will be ignored for type '${type}'`);
416
+ }
417
+ return warnings;
418
+ }
419
+ buildPostUrl(chatId, messageId) {
420
+ const chatIdStr = String(chatId);
421
+ if (chatIdStr.startsWith('@')) {
422
+ const channelName = chatIdStr.substring(1);
423
+ return `https://t.me/${channelName}/${messageId}`;
424
+ }
425
+ return undefined;
426
+ }
427
+ };
428
+ TelegramPlatform = TelegramPlatform_1 = __decorate([
429
+ Injectable(),
430
+ __metadata("design:paramtypes", [MediaService,
431
+ TelegramTypeDetector])
432
+ ], TelegramPlatform);
433
+ export { TelegramPlatform };
434
+ //# sourceMappingURL=telegram.platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram.platform.js","sourceRoot":"","sources":["../../../../../src/modules/platforms/telegram/telegram.platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { Logger } from '@nestjs/common';
2
+ import { AppConfigService } from '../app-config/app-config.service.js';
3
+ import { PlatformRegistry } from '../platforms/base/platform-registry.service.js';
4
+ import { AuthValidatorRegistry } from '../platforms/base/auth-validator-registry.service.js';
5
+ import { IPlatform } from '../platforms/base/platform.interface.js';
6
+ import { PostRequestDto } from './dto/index.js';
7
+ import type { AccountConfig } from '../app-config/interfaces/app-config.interface.js';
8
+ /**
9
+ * Account configuration with inline auth support
10
+ */
11
+ export interface ResolvedAccountConfig extends AccountConfig {
12
+ /** Source of the config: 'account' or 'inline' */
13
+ source: 'account' | 'inline';
14
+ }
15
+ /**
16
+ * Base service with shared logic for PostService and PreviewService
17
+ * Handles platform resolution, account config, and auth validation
18
+ */
19
+ export declare abstract class BasePostService {
20
+ protected readonly appConfig: AppConfigService;
21
+ protected readonly platformRegistry: PlatformRegistry;
22
+ protected readonly authValidatorRegistry: AuthValidatorRegistry;
23
+ protected abstract readonly logger: Logger;
24
+ constructor(appConfig: AppConfigService, platformRegistry: PlatformRegistry, authValidatorRegistry: AuthValidatorRegistry);
25
+ /**
26
+ * Get platform instance by name
27
+ * @param platformName - Platform name (e.g., 'telegram')
28
+ * @returns Platform instance
29
+ * @throws BadRequestException if platform is not found
30
+ */
31
+ protected getPlatform(platformName: string): IPlatform;
32
+ /**
33
+ * Get account configuration from request
34
+ * Supports both named accounts from config and inline auth
35
+ * @param request - Post request
36
+ * @returns Account configuration object with source indicator
37
+ * @throws BadRequestException if neither account nor auth is provided
38
+ */
39
+ protected getAccountConfig(request: PostRequestDto): ResolvedAccountConfig;
40
+ /**
41
+ * Validate that platform matches account platform
42
+ * @param platformName - Requested platform
43
+ * @param accountConfig - Account configuration
44
+ * @throws BadRequestException if platform doesn't match
45
+ */
46
+ protected validatePlatformMatch(platformName: string, accountConfig: AccountConfig): void;
47
+ /**
48
+ * Validate auth object for the platform
49
+ * @param platformName - Platform name
50
+ * @param auth - Auth object
51
+ * @throws BadRequestException if auth is invalid
52
+ */
53
+ protected validateAuth(platformName: string, auth: Record<string, any>): void;
54
+ /**
55
+ * Full validation chain for request
56
+ * @param request - Post request
57
+ * @returns Object with platform and accountConfig
58
+ * @throws BadRequestException on validation failure
59
+ */
60
+ protected validateRequest(request: PostRequestDto): {
61
+ platform: IPlatform;
62
+ accountConfig: ResolvedAccountConfig;
63
+ };
64
+ }
@@ -0,0 +1,99 @@
1
+ import { BadRequestException } from '@nestjs/common';
2
+ /**
3
+ * Base service with shared logic for PostService and PreviewService
4
+ * Handles platform resolution, account config, and auth validation
5
+ */
6
+ export class BasePostService {
7
+ appConfig;
8
+ platformRegistry;
9
+ authValidatorRegistry;
10
+ constructor(appConfig, platformRegistry, authValidatorRegistry) {
11
+ this.appConfig = appConfig;
12
+ this.platformRegistry = platformRegistry;
13
+ this.authValidatorRegistry = authValidatorRegistry;
14
+ }
15
+ /**
16
+ * Get platform instance by name
17
+ * @param platformName - Platform name (e.g., 'telegram')
18
+ * @returns Platform instance
19
+ * @throws BadRequestException if platform is not found
20
+ */
21
+ getPlatform(platformName) {
22
+ return this.platformRegistry.get(platformName);
23
+ }
24
+ /**
25
+ * Get account configuration from request
26
+ * Supports both named accounts from config and inline auth
27
+ * @param request - Post request
28
+ * @returns Account configuration object with source indicator
29
+ * @throws BadRequestException if neither account nor auth is provided
30
+ */
31
+ getAccountConfig(request) {
32
+ // Get base config from account or create inline config
33
+ let baseConfig;
34
+ let source;
35
+ if (request.account) {
36
+ baseConfig = this.appConfig.getAccount(request.account);
37
+ source = 'account';
38
+ }
39
+ else if (request.auth) {
40
+ // Create inline config with auth from request
41
+ baseConfig = {
42
+ platform: request.platform.toLowerCase(),
43
+ auth: {},
44
+ };
45
+ source = 'inline';
46
+ }
47
+ else {
48
+ throw new BadRequestException('Either "account" or "auth" must be provided');
49
+ }
50
+ // Merge auth: request.auth fields override account auth fields
51
+ const mergedAuth = {
52
+ ...baseConfig.auth,
53
+ ...(request.auth || {}),
54
+ };
55
+ return {
56
+ ...baseConfig,
57
+ auth: mergedAuth,
58
+ source,
59
+ };
60
+ }
61
+ /**
62
+ * Validate that platform matches account platform
63
+ * @param platformName - Requested platform
64
+ * @param accountConfig - Account configuration
65
+ * @throws BadRequestException if platform doesn't match
66
+ */
67
+ validatePlatformMatch(platformName, accountConfig) {
68
+ if (String(accountConfig.platform).toLowerCase() !== platformName.toLowerCase()) {
69
+ throw new BadRequestException(`Account platform "${accountConfig.platform}" does not match requested platform "${platformName}"`);
70
+ }
71
+ }
72
+ /**
73
+ * Validate auth object for the platform
74
+ * @param platformName - Platform name
75
+ * @param auth - Auth object
76
+ * @throws BadRequestException if auth is invalid
77
+ */
78
+ validateAuth(platformName, auth) {
79
+ this.authValidatorRegistry.validate(platformName, auth);
80
+ }
81
+ /**
82
+ * Full validation chain for request
83
+ * @param request - Post request
84
+ * @returns Object with platform and accountConfig
85
+ * @throws BadRequestException on validation failure
86
+ */
87
+ validateRequest(request) {
88
+ const platformName = request.platform?.toLowerCase();
89
+ if (!platformName) {
90
+ throw new BadRequestException("Field 'platform' is required");
91
+ }
92
+ const platform = this.getPlatform(platformName);
93
+ const accountConfig = this.getAccountConfig(request);
94
+ this.validatePlatformMatch(platformName, accountConfig);
95
+ this.validateAuth(platformName, accountConfig.auth);
96
+ return { platform, accountConfig };
97
+ }
98
+ }
99
+ //# sourceMappingURL=base-post.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-post.service.js","sourceRoot":"","sources":["../../../../src/modules/post/base-post.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAU,MAAM,gBAAgB,CAAC;AAgB7D;;;GAGG;AACH,MAAM,OAAgB,eAAe;IAId;IACA;IACA;IAHrB,YACqB,SAA2B,EAC3B,gBAAkC,EAClC,qBAA4C;QAF5C,cAAS,GAAT,SAAS,CAAkB;QAC3B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAC7D,CAAC;IAEL;;;;;OAKG;IACO,WAAW,CAAC,YAAoB;QACxC,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;IAED;;;;;;OAMG;IACO,gBAAgB,CAAC,OAAuB;QAChD,uDAAuD;QACvD,IAAI,UAAyB,CAAC;QAC9B,IAAI,MAA4B,CAAC;QAEjC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACxD,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACxB,8CAA8C;YAC9C,UAAU,GAAG;gBACX,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE;gBACxC,IAAI,EAAE,EAAE;aACT,CAAC;YACF,MAAM,GAAG,QAAQ,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,mBAAmB,CAAC,6CAA6C,CAAC,CAAC;QAC/E,CAAC;QAED,+DAA+D;QAC/D,MAAM,UAAU,GAAG;YACjB,GAAG,UAAU,CAAC,IAAI;YAClB,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;SACxB,CAAC;QAEF,OAAO;YACL,GAAG,UAAU;YACb,IAAI,EAAE,UAAU;YAChB,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACO,qBAAqB,CAAC,YAAoB,EAAE,aAA4B;QAChF,IAAI,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;YAChF,MAAM,IAAI,mBAAmB,CAC3B,qBAAqB,aAAa,CAAC,QAAQ,wCAAwC,YAAY,GAAG,CACnG,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACO,YAAY,CAAC,YAAoB,EAAE,IAAyB;QACpE,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAID;;;;;OAKG;IACO,eAAe,CAAC,OAAuB;QAI/C,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;QACrD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,mBAAmB,CAAC,8BAA8B,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAErD,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QAExD,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QAEpD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export * from './post-request.dto.js';
2
+ export * from './post-response.dto.js';
3
+ export * from './preview-response.dto.js';
@@ -0,0 +1,4 @@
1
+ export * from './post-request.dto.js';
2
+ export * from './post-response.dto.js';
3
+ export * from './preview-response.dto.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/modules/post/dto/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC"}