@warriorteam/redai-zalo-sdk 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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +448 -0
  3. package/dist/clients/base-client.d.ts +67 -0
  4. package/dist/clients/base-client.d.ts.map +1 -0
  5. package/dist/clients/base-client.js +297 -0
  6. package/dist/clients/base-client.js.map +1 -0
  7. package/dist/clients/zalo-client.d.ts +131 -0
  8. package/dist/clients/zalo-client.d.ts.map +1 -0
  9. package/dist/clients/zalo-client.js +215 -0
  10. package/dist/clients/zalo-client.js.map +1 -0
  11. package/dist/index.d.ts +40 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +82 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/services/article.service.d.ts +144 -0
  16. package/dist/services/article.service.d.ts.map +1 -0
  17. package/dist/services/article.service.js +518 -0
  18. package/dist/services/article.service.js.map +1 -0
  19. package/dist/services/auth.service.d.ts +55 -0
  20. package/dist/services/auth.service.d.ts.map +1 -0
  21. package/dist/services/auth.service.js +269 -0
  22. package/dist/services/auth.service.js.map +1 -0
  23. package/dist/services/consultation.service.d.ts +73 -0
  24. package/dist/services/consultation.service.d.ts.map +1 -0
  25. package/dist/services/consultation.service.js +208 -0
  26. package/dist/services/consultation.service.js.map +1 -0
  27. package/dist/services/general-message.service.d.ts +85 -0
  28. package/dist/services/general-message.service.d.ts.map +1 -0
  29. package/dist/services/general-message.service.js +248 -0
  30. package/dist/services/general-message.service.js.map +1 -0
  31. package/dist/services/group-management.service.d.ts +220 -0
  32. package/dist/services/group-management.service.d.ts.map +1 -0
  33. package/dist/services/group-management.service.js +562 -0
  34. package/dist/services/group-management.service.js.map +1 -0
  35. package/dist/services/group-message.service.d.ts +102 -0
  36. package/dist/services/group-message.service.d.ts.map +1 -0
  37. package/dist/services/group-message.service.js +233 -0
  38. package/dist/services/group-message.service.js.map +1 -0
  39. package/dist/services/message-management.service.d.ts +135 -0
  40. package/dist/services/message-management.service.d.ts.map +1 -0
  41. package/dist/services/message-management.service.js +237 -0
  42. package/dist/services/message-management.service.js.map +1 -0
  43. package/dist/services/oa.service.d.ts +67 -0
  44. package/dist/services/oa.service.d.ts.map +1 -0
  45. package/dist/services/oa.service.js +223 -0
  46. package/dist/services/oa.service.js.map +1 -0
  47. package/dist/services/promotion.service.d.ts +114 -0
  48. package/dist/services/promotion.service.d.ts.map +1 -0
  49. package/dist/services/promotion.service.js +247 -0
  50. package/dist/services/promotion.service.js.map +1 -0
  51. package/dist/services/tag.service.d.ts +144 -0
  52. package/dist/services/tag.service.d.ts.map +1 -0
  53. package/dist/services/tag.service.js +184 -0
  54. package/dist/services/tag.service.js.map +1 -0
  55. package/dist/services/transaction.service.d.ts +110 -0
  56. package/dist/services/transaction.service.d.ts.map +1 -0
  57. package/dist/services/transaction.service.js +231 -0
  58. package/dist/services/transaction.service.js.map +1 -0
  59. package/dist/services/user-management.service.d.ts +117 -0
  60. package/dist/services/user-management.service.d.ts.map +1 -0
  61. package/dist/services/user-management.service.js +239 -0
  62. package/dist/services/user-management.service.js.map +1 -0
  63. package/dist/services/user.service.d.ts +84 -0
  64. package/dist/services/user.service.d.ts.map +1 -0
  65. package/dist/services/user.service.js +323 -0
  66. package/dist/services/user.service.js.map +1 -0
  67. package/dist/services/video-upload.service.d.ts +83 -0
  68. package/dist/services/video-upload.service.d.ts.map +1 -0
  69. package/dist/services/video-upload.service.js +267 -0
  70. package/dist/services/video-upload.service.js.map +1 -0
  71. package/dist/services/zns.service.d.ts +116 -0
  72. package/dist/services/zns.service.d.ts.map +1 -0
  73. package/dist/services/zns.service.js +234 -0
  74. package/dist/services/zns.service.js.map +1 -0
  75. package/dist/types/article.d.ts +352 -0
  76. package/dist/types/article.d.ts.map +1 -0
  77. package/dist/types/article.js +70 -0
  78. package/dist/types/article.js.map +1 -0
  79. package/dist/types/auth.d.ts +233 -0
  80. package/dist/types/auth.d.ts.map +1 -0
  81. package/dist/types/auth.js +39 -0
  82. package/dist/types/auth.js.map +1 -0
  83. package/dist/types/common.d.ts +237 -0
  84. package/dist/types/common.d.ts.map +1 -0
  85. package/dist/types/common.js +42 -0
  86. package/dist/types/common.js.map +1 -0
  87. package/dist/types/group.d.ts +523 -0
  88. package/dist/types/group.d.ts.map +1 -0
  89. package/dist/types/group.js +6 -0
  90. package/dist/types/group.js.map +1 -0
  91. package/dist/types/message.d.ts +333 -0
  92. package/dist/types/message.d.ts.map +1 -0
  93. package/dist/types/message.js +17 -0
  94. package/dist/types/message.js.map +1 -0
  95. package/dist/types/oa.d.ts +285 -0
  96. package/dist/types/oa.d.ts.map +1 -0
  97. package/dist/types/oa.js +25 -0
  98. package/dist/types/oa.js.map +1 -0
  99. package/dist/types/social.d.ts +427 -0
  100. package/dist/types/social.d.ts.map +1 -0
  101. package/dist/types/social.js +6 -0
  102. package/dist/types/social.js.map +1 -0
  103. package/dist/types/user-management.d.ts +280 -0
  104. package/dist/types/user-management.d.ts.map +1 -0
  105. package/dist/types/user-management.js +6 -0
  106. package/dist/types/user-management.js.map +1 -0
  107. package/dist/types/user.d.ts +365 -0
  108. package/dist/types/user.d.ts.map +1 -0
  109. package/dist/types/user.js +17 -0
  110. package/dist/types/user.js.map +1 -0
  111. package/dist/types/webhook.d.ts +1972 -0
  112. package/dist/types/webhook.d.ts.map +1 -0
  113. package/dist/types/webhook.js +419 -0
  114. package/dist/types/webhook.js.map +1 -0
  115. package/dist/types/zns.d.ts +277 -0
  116. package/dist/types/zns.d.ts.map +1 -0
  117. package/dist/types/zns.js +6 -0
  118. package/dist/types/zns.js.map +1 -0
  119. package/dist/zalo-sdk.d.ts +228 -0
  120. package/dist/zalo-sdk.d.ts.map +1 -0
  121. package/dist/zalo-sdk.js +307 -0
  122. package/dist/zalo-sdk.js.map +1 -0
  123. package/package.json +59 -0
@@ -0,0 +1,518 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ArticleService = void 0;
4
+ const article_1 = require("../types/article");
5
+ const common_1 = require("../types/common");
6
+ /**
7
+ * Service for handling Zalo Official Account Article Management APIs
8
+ *
9
+ * CONDITIONS FOR USING ZALO ARTICLE MANAGEMENT:
10
+ *
11
+ * 1. GENERAL CONDITIONS:
12
+ * - OA must have permission to create articles
13
+ * - Access token must have "manage_article" scope
14
+ * - OA must have active status and be verified
15
+ *
16
+ * 2. ARTICLE CREATION:
17
+ * - Title: required, max 150 characters
18
+ * - Author: required for normal articles, max 50 characters
19
+ * - Description: required, max 300 characters
20
+ * - Image size: max 1MB per image
21
+ * - Status: 'show' (publish immediately) or 'hide' (draft)
22
+ * - Comment: 'show' (allow comments) or 'hide' (disable comments)
23
+ *
24
+ * 3. CONTENT VALIDATION:
25
+ * - Normal articles: must have cover, body content, and author
26
+ * - Video articles: must have video_id and avatar
27
+ * - Body items: support text, image, video, and product types
28
+ * - Tracking links: must be valid URLs
29
+ *
30
+ * 4. LIMITS AND CONSTRAINTS:
31
+ * - Article list: max 100 items per request
32
+ * - Processing time: use token to check progress
33
+ * - Update frequency: reasonable intervals recommended
34
+ */
35
+ class ArticleService {
36
+ constructor(client) {
37
+ this.client = client;
38
+ this.apiUrl = "https://openapi.zalo.me/v2.0";
39
+ }
40
+ /**
41
+ * Create normal article with rich content
42
+ * @param accessToken OA access token
43
+ * @param request Normal article information
44
+ * @returns Token for tracking creation progress
45
+ */
46
+ async createNormalArticle(accessToken, request) {
47
+ try {
48
+ // Validate input
49
+ this.validateNormalArticleRequest(request);
50
+ // Process tracking link - use default if not provided or invalid
51
+ let processedTrackingLink = "https://v2.redai.vn/auth";
52
+ if (request.tracking_link &&
53
+ this.isValidTrackingLink(request.tracking_link)) {
54
+ processedTrackingLink = request.tracking_link;
55
+ }
56
+ const data = {
57
+ type: request.type,
58
+ title: request.title,
59
+ author: request.author,
60
+ cover: request.cover,
61
+ description: request.description,
62
+ body: request.body,
63
+ related_medias: request.related_medias || [],
64
+ tracking_link: processedTrackingLink,
65
+ status: request.status || article_1.ArticleStatus.SHOW,
66
+ comment: request.comment || article_1.CommentStatus.SHOW,
67
+ };
68
+ const response = await this.client.apiPost(`${this.apiUrl}/article/create`, accessToken, data);
69
+ return response;
70
+ }
71
+ catch (error) {
72
+ throw this.handleArticleError(error, "Failed to create normal article");
73
+ }
74
+ }
75
+ /**
76
+ * Create video article
77
+ * @param accessToken OA access token
78
+ * @param request Video article information
79
+ * @returns Token for tracking creation progress
80
+ */
81
+ async createVideoArticle(accessToken, request) {
82
+ try {
83
+ // Validate input
84
+ this.validateVideoArticleRequest(request);
85
+ const data = {
86
+ type: request.type,
87
+ title: request.title,
88
+ description: request.description,
89
+ video_id: request.video_id,
90
+ avatar: request.avatar,
91
+ status: request.status || article_1.ArticleStatus.HIDE,
92
+ comment: request.comment || article_1.CommentStatus.SHOW,
93
+ };
94
+ const response = await this.client.apiPost(`${this.apiUrl}/article/create`, accessToken, data);
95
+ return response;
96
+ }
97
+ catch (error) {
98
+ throw this.handleArticleError(error, "Failed to create video article");
99
+ }
100
+ }
101
+ /**
102
+ * Create article (automatically detect type)
103
+ * @param accessToken OA access token
104
+ * @param request Article information
105
+ * @returns Token for tracking creation progress
106
+ */
107
+ async createArticle(accessToken, request) {
108
+ if (request.type === article_1.ArticleType.NORMAL) {
109
+ return this.createNormalArticle(accessToken, request);
110
+ }
111
+ else if (request.type === article_1.ArticleType.VIDEO) {
112
+ return this.createVideoArticle(accessToken, request);
113
+ }
114
+ else {
115
+ throw new common_1.ZaloSDKError('Invalid article type. Only "normal" and "video" are supported', -1);
116
+ }
117
+ }
118
+ /**
119
+ * Check article creation progress
120
+ * @param accessToken OA access token
121
+ * @param token Token from article creation response
122
+ * @returns Progress information
123
+ */
124
+ async checkArticleProcess(accessToken, token) {
125
+ try {
126
+ if (!token || token.trim() === "") {
127
+ throw new common_1.ZaloSDKError("Token cannot be empty", -1);
128
+ }
129
+ // Use verifyArticle method to check progress
130
+ const response = await this.verifyArticle(accessToken, token);
131
+ // Convert response to standard format
132
+ const result = {
133
+ article_id: response?.id,
134
+ status: response?.id ? "success" : "processing",
135
+ created_time: Date.now(),
136
+ updated_time: Date.now(),
137
+ };
138
+ return result;
139
+ }
140
+ catch (error) {
141
+ // Handle token expiration - means article processing is completed
142
+ if (error instanceof common_1.ZaloSDKError &&
143
+ error.message.includes("token was expired")) {
144
+ return {
145
+ status: "success",
146
+ error_message: "Token expired - article processing completed",
147
+ created_time: Date.now(),
148
+ updated_time: Date.now(),
149
+ };
150
+ }
151
+ // Handle API errors - article may still be processing
152
+ if (error instanceof common_1.ZaloSDKError && error.message.includes("API")) {
153
+ return {
154
+ status: "processing",
155
+ created_time: Date.now(),
156
+ updated_time: Date.now(),
157
+ };
158
+ }
159
+ // Handle response structure errors
160
+ if (error instanceof TypeError) {
161
+ return {
162
+ status: "processing",
163
+ error_message: "Article is being processed",
164
+ created_time: Date.now(),
165
+ updated_time: Date.now(),
166
+ };
167
+ }
168
+ throw this.handleArticleError(error, "Failed to check article process");
169
+ }
170
+ }
171
+ /**
172
+ * Verify article and get article ID
173
+ * @param accessToken OA access token
174
+ * @param token Token from article creation or update response
175
+ * @returns Article ID
176
+ */
177
+ async verifyArticle(accessToken, token) {
178
+ try {
179
+ if (!token || token.trim() === "") {
180
+ throw new common_1.ZaloSDKError("Token cannot be empty", -1);
181
+ }
182
+ const data = {
183
+ token: token,
184
+ };
185
+ const response = await this.client.apiPost(`${this.apiUrl}/article/verify`, accessToken, data);
186
+ return response;
187
+ }
188
+ catch (error) {
189
+ throw this.handleArticleError(error, "Failed to verify article");
190
+ }
191
+ }
192
+ /**
193
+ * Get article details
194
+ * @param accessToken OA access token
195
+ * @param articleId Article ID
196
+ * @returns Article details
197
+ */
198
+ async getArticleDetail(accessToken, articleId) {
199
+ try {
200
+ if (!articleId || articleId.trim() === "") {
201
+ throw new common_1.ZaloSDKError("Article ID cannot be empty", -1);
202
+ }
203
+ const params = new URLSearchParams();
204
+ params.append("id", articleId);
205
+ const response = await this.client.apiGet(`${this.apiUrl}/article/getdetail?${params.toString()}`, accessToken);
206
+ return response.data;
207
+ }
208
+ catch (error) {
209
+ throw this.handleArticleError(error, "Failed to get article detail");
210
+ }
211
+ }
212
+ /**
213
+ * Get article list
214
+ * @param accessToken OA access token
215
+ * @param request List parameters
216
+ * @returns Article list
217
+ */
218
+ async getArticleList(accessToken, request) {
219
+ try {
220
+ // Validate input
221
+ this.validateArticleListRequest(request);
222
+ const params = new URLSearchParams();
223
+ params.append("offset", request.offset.toString());
224
+ params.append("limit", request.limit.toString());
225
+ params.append("type", request.type);
226
+ const response = await this.client.apiGet(`${this.apiUrl}/article/getslice?${params.toString()}`, accessToken);
227
+ return response;
228
+ }
229
+ catch (error) {
230
+ throw this.handleArticleError(error, "Failed to get article list");
231
+ }
232
+ }
233
+ /**
234
+ * Remove article
235
+ * @param accessToken OA access token
236
+ * @param articleId Article ID to remove
237
+ * @returns Removal result
238
+ */
239
+ async removeArticle(accessToken, articleId) {
240
+ try {
241
+ if (!articleId || articleId.trim() === "") {
242
+ throw new common_1.ZaloSDKError("Article ID cannot be empty", -1);
243
+ }
244
+ const data = {
245
+ id: articleId,
246
+ };
247
+ const response = await this.client.apiPost(`${this.apiUrl}/article/remove`, accessToken, data);
248
+ return response;
249
+ }
250
+ catch (error) {
251
+ // Handle case where article may already be deleted
252
+ if (error instanceof common_1.ZaloSDKError &&
253
+ error.message.includes("No data received")) {
254
+ return {
255
+ message: "Article has been deleted or does not exist",
256
+ };
257
+ }
258
+ throw this.handleArticleError(error, "Failed to remove article");
259
+ }
260
+ }
261
+ handleArticleError(error, defaultMessage) {
262
+ if (error instanceof common_1.ZaloSDKError) {
263
+ return error;
264
+ }
265
+ if (error.response?.data) {
266
+ const errorData = error.response.data;
267
+ return new common_1.ZaloSDKError(`${defaultMessage}: ${errorData.message || errorData.error || "Unknown error"}`, errorData.error || -1, errorData);
268
+ }
269
+ return new common_1.ZaloSDKError(`${defaultMessage}: ${error.message || "Unknown error"}`, -1, error);
270
+ }
271
+ /**
272
+ * Update normal article
273
+ * @param accessToken OA access token
274
+ * @param request Update information
275
+ * @returns Token for tracking update progress
276
+ */
277
+ async updateNormalArticle(accessToken, request) {
278
+ try {
279
+ // Validate input
280
+ this.validateUpdateNormalArticleRequest(request);
281
+ // Process tracking link
282
+ let processedTrackingLink = "https://v2.redai.vn/auth";
283
+ if (request.tracking_link &&
284
+ this.isValidTrackingLink(request.tracking_link)) {
285
+ processedTrackingLink = request.tracking_link;
286
+ }
287
+ const data = {
288
+ id: request.id,
289
+ type: request.type,
290
+ title: request.title,
291
+ author: request.author,
292
+ cover: request.cover,
293
+ description: request.description,
294
+ body: request.body,
295
+ related_medias: request.related_medias || [],
296
+ tracking_link: processedTrackingLink,
297
+ status: request.status || article_1.ArticleStatus.HIDE,
298
+ comment: request.comment || article_1.CommentStatus.SHOW,
299
+ };
300
+ const response = await this.client.apiPost(`${this.apiUrl}/article/update`, accessToken, data);
301
+ return response;
302
+ }
303
+ catch (error) {
304
+ throw this.handleArticleError(error, "Failed to update normal article");
305
+ }
306
+ }
307
+ /**
308
+ * Update video article
309
+ * @param accessToken OA access token
310
+ * @param request Update information
311
+ * @returns Token for tracking update progress
312
+ */
313
+ async updateVideoArticle(accessToken, request) {
314
+ try {
315
+ // Validate input
316
+ this.validateUpdateVideoArticleRequest(request);
317
+ const data = {
318
+ id: request.id,
319
+ type: request.type,
320
+ title: request.title,
321
+ description: request.description,
322
+ video_id: request.video_id,
323
+ avatar: request.avatar,
324
+ status: request.status || article_1.ArticleStatus.HIDE,
325
+ comment: request.comment || article_1.CommentStatus.SHOW,
326
+ };
327
+ const response = await this.client.apiPost(`${this.apiUrl}/article/update`, accessToken, data);
328
+ return response;
329
+ }
330
+ catch (error) {
331
+ throw this.handleArticleError(error, "Failed to update video article");
332
+ }
333
+ }
334
+ /**
335
+ * Update article (automatically detect type)
336
+ * @param accessToken OA access token
337
+ * @param request Update information
338
+ * @returns Token for tracking update progress
339
+ */
340
+ async updateArticle(accessToken, request) {
341
+ if (request.type === article_1.ArticleType.NORMAL) {
342
+ return this.updateNormalArticle(accessToken, request);
343
+ }
344
+ else if (request.type === article_1.ArticleType.VIDEO) {
345
+ return this.updateVideoArticle(accessToken, request);
346
+ }
347
+ else {
348
+ throw new common_1.ZaloSDKError('Invalid article type. Only "normal" and "video" are supported', -1);
349
+ }
350
+ }
351
+ // ==================== VALIDATION METHODS ====================
352
+ /**
353
+ * Validate normal article creation request
354
+ */
355
+ validateNormalArticleRequest(request) {
356
+ if (!request.title || request.title.trim() === "") {
357
+ throw new common_1.ZaloSDKError("Title cannot be empty", -1);
358
+ }
359
+ if (request.title.length > article_1.ARTICLE_CONSTRAINTS.TITLE_MAX_LENGTH) {
360
+ throw new common_1.ZaloSDKError(`Title cannot exceed ${article_1.ARTICLE_CONSTRAINTS.TITLE_MAX_LENGTH} characters`, -1);
361
+ }
362
+ if (!request.author || request.author.trim() === "") {
363
+ throw new common_1.ZaloSDKError("Author cannot be empty", -1);
364
+ }
365
+ if (request.author.length > article_1.ARTICLE_CONSTRAINTS.AUTHOR_MAX_LENGTH) {
366
+ throw new common_1.ZaloSDKError(`Author name cannot exceed ${article_1.ARTICLE_CONSTRAINTS.AUTHOR_MAX_LENGTH} characters`, -1);
367
+ }
368
+ if (!request.description || request.description.trim() === "") {
369
+ throw new common_1.ZaloSDKError("Description cannot be empty", -1);
370
+ }
371
+ if (request.description.length > article_1.ARTICLE_CONSTRAINTS.DESCRIPTION_MAX_LENGTH) {
372
+ throw new common_1.ZaloSDKError(`Description cannot exceed ${article_1.ARTICLE_CONSTRAINTS.DESCRIPTION_MAX_LENGTH} characters`, -1);
373
+ }
374
+ if (!request.cover) {
375
+ throw new common_1.ZaloSDKError("Cover information cannot be empty", -1);
376
+ }
377
+ if (!request.body || request.body.length === 0) {
378
+ throw new common_1.ZaloSDKError("Article body cannot be empty", -1);
379
+ }
380
+ // Validate cover
381
+ this.validateCover(request.cover);
382
+ // Validate body items
383
+ request.body.forEach((item, index) => {
384
+ this.validateBodyItem(item, index);
385
+ });
386
+ }
387
+ /**
388
+ * Validate video article creation request
389
+ */
390
+ validateVideoArticleRequest(request) {
391
+ if (!request.title || request.title.trim() === "") {
392
+ throw new common_1.ZaloSDKError("Title cannot be empty", -1);
393
+ }
394
+ if (request.title.length > article_1.ARTICLE_CONSTRAINTS.TITLE_MAX_LENGTH) {
395
+ throw new common_1.ZaloSDKError(`Title cannot exceed ${article_1.ARTICLE_CONSTRAINTS.TITLE_MAX_LENGTH} characters`, -1);
396
+ }
397
+ if (!request.description || request.description.trim() === "") {
398
+ throw new common_1.ZaloSDKError("Description cannot be empty", -1);
399
+ }
400
+ if (request.description.length > article_1.ARTICLE_CONSTRAINTS.DESCRIPTION_MAX_LENGTH) {
401
+ throw new common_1.ZaloSDKError(`Description cannot exceed ${article_1.ARTICLE_CONSTRAINTS.DESCRIPTION_MAX_LENGTH} characters`, -1);
402
+ }
403
+ if (!request.video_id || request.video_id.trim() === "") {
404
+ throw new common_1.ZaloSDKError("Video ID cannot be empty", -1);
405
+ }
406
+ if (!request.avatar || request.avatar.trim() === "") {
407
+ throw new common_1.ZaloSDKError("Avatar URL cannot be empty", -1);
408
+ }
409
+ }
410
+ /**
411
+ * Validate article list request
412
+ */
413
+ validateArticleListRequest(request) {
414
+ if (request.offset < 0) {
415
+ throw new common_1.ZaloSDKError("Offset must be >= 0", -1);
416
+ }
417
+ if (request.limit <= 0) {
418
+ throw new common_1.ZaloSDKError("Limit must be > 0", -1);
419
+ }
420
+ if (request.limit > article_1.ARTICLE_CONSTRAINTS.LIST_MAX_LIMIT) {
421
+ throw new common_1.ZaloSDKError(`Limit cannot exceed ${article_1.ARTICLE_CONSTRAINTS.LIST_MAX_LIMIT}`, -1);
422
+ }
423
+ if (!["normal", "video"].includes(request.type)) {
424
+ throw new common_1.ZaloSDKError('Type must be "normal" or "video"', -1);
425
+ }
426
+ }
427
+ /**
428
+ * Validate normal article update request
429
+ */
430
+ validateUpdateNormalArticleRequest(request) {
431
+ if (!request.id || request.id.trim() === "") {
432
+ throw new common_1.ZaloSDKError("Article ID cannot be empty", -1);
433
+ }
434
+ // Use the same validation as creation
435
+ this.validateNormalArticleRequest(request);
436
+ }
437
+ /**
438
+ * Validate video article update request
439
+ */
440
+ validateUpdateVideoArticleRequest(request) {
441
+ if (!request.id || request.id.trim() === "") {
442
+ throw new common_1.ZaloSDKError("Article ID cannot be empty", -1);
443
+ }
444
+ // Use the same validation as creation
445
+ this.validateVideoArticleRequest(request);
446
+ }
447
+ /**
448
+ * Validate cover information
449
+ */
450
+ validateCover(cover) {
451
+ if (!cover.cover_type) {
452
+ throw new common_1.ZaloSDKError("Cover type cannot be empty", -1);
453
+ }
454
+ if (!["photo", "video"].includes(cover.cover_type)) {
455
+ throw new common_1.ZaloSDKError('Cover type must be "photo" or "video"', -1);
456
+ }
457
+ if (cover.cover_type === article_1.CoverType.PHOTO &&
458
+ (!cover.photo_url || cover.photo_url.trim() === "")) {
459
+ throw new common_1.ZaloSDKError('Photo URL cannot be empty when cover_type is "photo"', -1);
460
+ }
461
+ if (cover.cover_type === article_1.CoverType.VIDEO) {
462
+ if (!cover.video_id || cover.video_id.trim() === "") {
463
+ throw new common_1.ZaloSDKError('Video ID cannot be empty when cover_type is "video"', -1);
464
+ }
465
+ if (cover.cover_view &&
466
+ !["horizontal", "vertical", "square"].includes(cover.cover_view)) {
467
+ throw new common_1.ZaloSDKError('cover_view must be "horizontal", "vertical" or "square"', -1);
468
+ }
469
+ }
470
+ if (!["show", "hide"].includes(cover.status)) {
471
+ throw new common_1.ZaloSDKError('Cover status must be "show" or "hide"', -1);
472
+ }
473
+ }
474
+ /**
475
+ * Validate body item
476
+ */
477
+ validateBodyItem(item, index) {
478
+ if (!item.type) {
479
+ throw new common_1.ZaloSDKError(`Content type at position ${index + 1} cannot be empty`, -1);
480
+ }
481
+ if (!["text", "image", "video", "product"].includes(item.type)) {
482
+ throw new common_1.ZaloSDKError(`Content type at position ${index + 1} must be "text", "image", "video" or "product"`, -1);
483
+ }
484
+ switch (item.type) {
485
+ case article_1.BodyItemType.TEXT:
486
+ if (!item.content || item.content.trim() === "") {
487
+ throw new common_1.ZaloSDKError(`Text content at position ${index + 1} cannot be empty`, -1);
488
+ }
489
+ break;
490
+ case article_1.BodyItemType.IMAGE:
491
+ if (!item.url || item.url.trim() === "") {
492
+ throw new common_1.ZaloSDKError(`Image URL at position ${index + 1} cannot be empty`, -1);
493
+ }
494
+ break;
495
+ case article_1.BodyItemType.VIDEO:
496
+ if (!item.video_id && !item.url) {
497
+ throw new common_1.ZaloSDKError(`Video at position ${index + 1} must have video_id or url`, -1);
498
+ }
499
+ break;
500
+ case article_1.BodyItemType.PRODUCT:
501
+ if (!item.id || item.id.trim() === "") {
502
+ throw new common_1.ZaloSDKError(`Product ID at position ${index + 1} cannot be empty`, -1);
503
+ }
504
+ break;
505
+ }
506
+ }
507
+ isValidTrackingLink(url) {
508
+ try {
509
+ new URL(url);
510
+ return true;
511
+ }
512
+ catch {
513
+ return false;
514
+ }
515
+ }
516
+ }
517
+ exports.ArticleService = ArticleService;
518
+ //# sourceMappingURL=article.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"article.service.js","sourceRoot":"","sources":["../../src/services/article.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Authentication service for Zalo API
3
+ */
4
+ import { ZaloClient } from "../clients/zalo-client";
5
+ import { AccessToken, RefreshTokenResponse, AuthCodeParams, RefreshTokenParams, SocialUserInfo, TokenValidation, AuthScope, PKCEConfig, AuthUrls } from "../types/auth";
6
+ /**
7
+ * Authentication service for handling OAuth flows and token management
8
+ */
9
+ export declare class AuthService {
10
+ private readonly client;
11
+ private readonly appId;
12
+ private readonly appSecret;
13
+ constructor(client: ZaloClient, appId: string, appSecret: string);
14
+ /**
15
+ * Generate PKCE code verifier and challenge for Social API
16
+ */
17
+ generatePKCE(): PKCEConfig;
18
+ /**
19
+ * Create OAuth authorization URL for Official Account
20
+ */
21
+ createOAAuthUrl(redirectUri: string, state?: string): string;
22
+ /**
23
+ * Create OAuth authorization URL for Social API
24
+ */
25
+ createSocialAuthUrl(redirectUri: string, state?: string, pkce?: PKCEConfig): string;
26
+ /**
27
+ * Exchange authorization code for Official Account access token
28
+ */
29
+ getOAAccessToken(params: AuthCodeParams): Promise<AccessToken>;
30
+ /**
31
+ * Exchange authorization code for Social API access token
32
+ */
33
+ getSocialAccessToken(params: AuthCodeParams): Promise<AccessToken>;
34
+ /**
35
+ * Refresh Official Account access token
36
+ */
37
+ refreshOAAccessToken(params: RefreshTokenParams): Promise<AccessToken>;
38
+ /**
39
+ * Refresh Social API access token
40
+ */
41
+ refreshSocialAccessToken(params: RefreshTokenParams): Promise<RefreshTokenResponse>;
42
+ /**
43
+ * Get Social user information
44
+ */
45
+ getSocialUserInfo(accessToken: string, fields?: string): Promise<SocialUserInfo>;
46
+ /**
47
+ * Validate access token by attempting to get user info
48
+ */
49
+ validateAccessToken(accessToken: string, scope?: AuthScope): Promise<TokenValidation>;
50
+ /**
51
+ * Get all authentication URLs
52
+ */
53
+ getAuthUrls(redirectUri: string): AuthUrls;
54
+ }
55
+ //# sourceMappingURL=auth.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,SAAS,EACT,UAAU,EACV,QAAQ,EACT,MAAM,eAAe,CAAC;AAIvB;;GAEG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM;IAGpC;;OAEG;IACI,YAAY,IAAI,UAAU;IAajC;;OAEG;IACI,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAUnE;;OAEG;IACI,mBAAmB,CACxB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,UAAU,GAChB,MAAM;IAeT;;OAEG;IACU,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAyD3E;;OAEG;IACU,oBAAoB,CAC/B,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,WAAW,CAAC;IA0DvB;;OAEG;IACU,oBAAoB,CAC/B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,WAAW,CAAC;IA2CvB;;OAEG;IACU,wBAAwB,CACnC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,oBAAoB,CAAC;IAyChC;;OAEG;IACU,iBAAiB,CAC5B,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,MAA0B,GACjC,OAAO,CAAC,cAAc,CAAC;IAuC1B;;OAEG;IACU,mBAAmB,CAC9B,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,SAA4B,GAClC,OAAO,CAAC,eAAe,CAAC;IAkB3B;;OAEG;IACI,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;CAQlD"}