@warriorteam/redai-zalo-sdk 1.12.5 → 1.13.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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,76 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.13.0] - 2025-01-17
9
+
10
+ ### 🚀 NEW FEATURES
11
+
12
+ #### Enhanced Article API - Get All Articles
13
+ - **ADDED**: `getAllArticles()` - Lấy tất cả bài viết theo loại với tự động pagination
14
+ - **ADDED**: `getAllArticlesCombined()` - Lấy tất cả bài viết cả 2 loại (normal + video) kết hợp
15
+ - **ENHANCED**: Automatic pagination handling - không cần xử lý offset/limit thủ công
16
+ - **ADDED**: Progress tracking với callback `onProgress` để theo dõi tiến trình real-time
17
+ - **ADDED**: Flexible configuration với `batchSize`, `maxArticles`, và safety limits
18
+
19
+ #### Advanced Features
20
+ - **SAFETY**: Built-in safety checks để tránh infinite loops (max 100 batches)
21
+ - **PERFORMANCE**: Configurable batch sizes (1-100 articles per request)
22
+ - **CONTROL**: Giới hạn tổng số articles (`maxArticles`, 0 = unlimited)
23
+ - **MONITORING**: Real-time progress callbacks với detailed metrics
24
+ - **TYPE-SAFE**: Full TypeScript support với `ArticleListItem[]` return types
25
+
26
+ #### Smart Response Handling
27
+ - **ROBUST**: Handles both `ZaloResponse<T>` và direct response formats
28
+ - **FLEXIBLE**: Supports cả `response.data.medias` và `response.medias` structures
29
+ - **ERROR-SAFE**: Comprehensive error handling với `ZaloSDKError` integration
30
+
31
+ ### 📚 DOCUMENTATION
32
+
33
+ #### New Documentation Files
34
+ - **ADDED**: `docs/enhanced-article-api.md` - Comprehensive guide cho enhanced article APIs
35
+ - **ADDED**: `examples/get-all-articles-example.ts` - Practical usage examples với 4 scenarios
36
+ - **DETAILED**: API reference với parameters, return types, và best practices
37
+ - **EXAMPLES**: Real-world usage patterns và performance recommendations
38
+
39
+ #### Developer Experience
40
+ - **ENHANCED**: Detailed JSDoc comments với @example blocks
41
+ - **IMPROVED**: IntelliSense support với comprehensive type definitions
42
+ - **ADDED**: Progress tracking examples và error handling patterns
43
+ - **GUIDES**: Performance tuning và rate limiting recommendations
44
+
45
+ ### 🔧 TECHNICAL IMPROVEMENTS
46
+
47
+ #### Code Quality
48
+ - **TYPE-SAFE**: Full TypeScript compliance với proper interface definitions
49
+ - **VALIDATED**: Input validation với `ARTICLE_CONSTRAINTS` integration
50
+ - **OPTIMIZED**: Efficient pagination logic với smart batch management
51
+ - **TESTED**: Comprehensive error scenarios và edge case handling
52
+
53
+ #### API Design
54
+ - **CONSISTENT**: Follows existing SDK patterns và naming conventions
55
+ - **EXTENSIBLE**: Modular design cho future enhancements
56
+ - **BACKWARD-COMPATIBLE**: Không breaking changes cho existing `getArticleList()`
57
+ - **PERFORMANCE**: Optimized cho large datasets với configurable limits
58
+
59
+ ### 💡 USAGE EXAMPLES
60
+
61
+ ```typescript
62
+ // Simple: Get all normal articles
63
+ const result = await articleService.getAllArticles(accessToken, "normal");
64
+
65
+ // Advanced: With progress tracking và limits
66
+ const result = await articleService.getAllArticles(accessToken, "normal", {
67
+ batchSize: 50,
68
+ maxArticles: 1000,
69
+ onProgress: (progress) => console.log(`${progress.totalFetched} articles`)
70
+ });
71
+
72
+ // Combined: Get both normal và video articles
73
+ const combined = await articleService.getAllArticlesCombined(accessToken, {
74
+ maxArticlesPerType: 500
75
+ });
76
+ ```
77
+
8
78
  ## [1.12.1] - 2025-01-17
9
79
 
10
80
  ### 🔧 MAINTENANCE
package/README.md CHANGED
@@ -9,6 +9,7 @@ A comprehensive TypeScript/JavaScript SDK for Zalo APIs, providing easy-to-use i
9
9
  - **Group Message Framework (GMF)** - Send messages to Zalo groups
10
10
  - **User Management** - Comprehensive user profile and tag management
11
11
  - **Content Management** - Upload and manage media content (images, files, articles)
12
+ - **Enhanced Article Management** - Get all articles with auto-pagination and progress tracking
12
13
  - **Video Upload** - Upload and manage video content with processing
13
14
  - **Tag Management** - User tagging and segmentation
14
15
  - **Webhook handling** - Process Zalo webhook events
@@ -22,6 +23,7 @@ A comprehensive TypeScript/JavaScript SDK for Zalo APIs, providing easy-to-use i
22
23
  - 🛡️ **Error Handling** - Detailed error information and handling
23
24
  - 📦 **Zero Dependencies** - Only requires axios and form-data
24
25
  - 🎯 **Promise-based** - Modern async/await support
26
+ - 🔄 **Auto-Pagination** - Automatically fetch all articles with progress tracking
25
27
 
26
28
  ## Installation
27
29
 
@@ -1,5 +1,5 @@
1
1
  import { ZaloClient } from "../clients/zalo-client";
2
- import { ArticleRequest, ArticleNormalRequest, ArticleVideoRequest, ArticleResponse, ArticleProcessResponse, ArticleVerifyResponse, ArticleDetail, ArticleListRequest, ArticleListResponse, ArticleRemoveResponse, ArticleUpdateRequest, ArticleUpdateNormalRequest, ArticleUpdateVideoRequest, ArticleUpdateResponse, ArticleStatus, CommentStatus } from "../types/article";
2
+ import { ArticleRequest, ArticleNormalRequest, ArticleVideoRequest, ArticleResponse, ArticleProcessResponse, ArticleVerifyResponse, ArticleDetail, ArticleListRequest, ArticleListResponse, ArticleListItem, ArticleRemoveResponse, ArticleUpdateRequest, ArticleUpdateNormalRequest, ArticleUpdateVideoRequest, ArticleUpdateResponse, ArticleStatus, CommentStatus } from "../types/article";
3
3
  /**
4
4
  * Service for handling Zalo Official Account Article Management APIs
5
5
  *
@@ -82,6 +82,108 @@ export declare class ArticleService {
82
82
  * @returns Article list
83
83
  */
84
84
  getArticleList(accessToken: string, request: ArticleListRequest): Promise<ArticleListResponse>;
85
+ /**
86
+ * Get all articles by automatically fetching all pages
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * // Get all normal articles with progress tracking
91
+ * const result = await articleService.getAllArticles(accessToken, "normal", {
92
+ * batchSize: 50,
93
+ * maxArticles: 1000,
94
+ * onProgress: (progress) => {
95
+ * console.log(`Batch ${progress.currentBatch}: ${progress.totalFetched} articles fetched`);
96
+ * }
97
+ * });
98
+ *
99
+ * console.log(`Total: ${result.totalFetched} articles in ${result.totalBatches} batches`);
100
+ * console.log(`Has more: ${result.hasMore}`);
101
+ * ```
102
+ *
103
+ * @param accessToken OA access token
104
+ * @param type Article type ("normal" or "video")
105
+ * @param options Configuration options for fetching
106
+ * @returns All articles with pagination info
107
+ */
108
+ getAllArticles(accessToken: string, type?: "normal" | "video", options?: {
109
+ /** Number of articles to fetch per request (default: 50, max: 100) */
110
+ batchSize?: number;
111
+ /** Maximum number of articles to fetch (default: 1000, 0 = no limit) */
112
+ maxArticles?: number;
113
+ /** Optional callback to track progress */
114
+ onProgress?: (progress: {
115
+ currentBatch: number;
116
+ totalFetched: number;
117
+ hasMore: boolean;
118
+ }) => void;
119
+ }): Promise<{
120
+ /** Array of all fetched articles */
121
+ articles: ArticleListItem[];
122
+ /** Total number of articles fetched */
123
+ totalFetched: number;
124
+ /** Number of API calls made */
125
+ totalBatches: number;
126
+ /** Whether there are more articles available */
127
+ hasMore: boolean;
128
+ }>;
129
+ /**
130
+ * Get all articles of both types (normal and video) combined
131
+ *
132
+ * @example
133
+ * ```typescript
134
+ * // Get all articles (both normal and video)
135
+ * const result = await articleService.getAllArticlesCombined(accessToken, {
136
+ * batchSize: 50,
137
+ * maxArticlesPerType: 500,
138
+ * onProgress: (progress) => {
139
+ * console.log(`${progress.type}: Batch ${progress.currentBatch}, Total: ${progress.totalFetched}`);
140
+ * }
141
+ * });
142
+ *
143
+ * console.log(`Total articles: ${result.totalFetched}`);
144
+ * console.log(`Normal articles: ${result.breakdown.normal.totalFetched}`);
145
+ * console.log(`Video articles: ${result.breakdown.video.totalFetched}`);
146
+ * ```
147
+ *
148
+ * @param accessToken OA access token
149
+ * @param options Configuration options for fetching
150
+ * @returns All articles (normal + video) with combined pagination info
151
+ */
152
+ getAllArticlesCombined(accessToken: string, options?: {
153
+ /** Number of articles to fetch per request for each type (default: 50, max: 100) */
154
+ batchSize?: number;
155
+ /** Maximum number of articles to fetch per type (default: 500, 0 = no limit) */
156
+ maxArticlesPerType?: number;
157
+ /** Optional callback to track progress */
158
+ onProgress?: (progress: {
159
+ type: "normal" | "video";
160
+ currentBatch: number;
161
+ totalFetched: number;
162
+ hasMore: boolean;
163
+ }) => void;
164
+ }): Promise<{
165
+ /** Array of all fetched articles (normal + video) */
166
+ articles: ArticleListItem[];
167
+ /** Breakdown by type */
168
+ breakdown: {
169
+ normal: {
170
+ articles: ArticleListItem[];
171
+ totalFetched: number;
172
+ totalBatches: number;
173
+ hasMore: boolean;
174
+ };
175
+ video: {
176
+ articles: ArticleListItem[];
177
+ totalFetched: number;
178
+ totalBatches: number;
179
+ hasMore: boolean;
180
+ };
181
+ };
182
+ /** Total number of articles fetched */
183
+ totalFetched: number;
184
+ /** Total number of API calls made */
185
+ totalBatches: number;
186
+ }>;
85
187
  /**
86
188
  * Remove article
87
189
  * @param accessToken OA access token
@@ -1 +1 @@
1
- {"version":3,"file":"article.service.d.ts","sourceRoot":"","sources":["../../src/services/article.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EAGb,kBAAkB,EAClB,mBAAmB,EAEnB,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,qBAAqB,EAIrB,aAAa,EACb,aAAa,EAId,MAAM,kBAAkB,CAAC;AAG1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,cAAc;IAab,OAAO,CAAC,QAAQ,CAAC,MAAM;IAXnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CASf;gBAEkB,MAAM,EAAE,UAAU;IAE/C;;;;;OAKG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,eAAe,CAAC;IAuC3B;;;;;OAKG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,eAAe,CAAC;IA2B3B;;;;;OAKG;IACG,aAAa,CACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC;IAa3B;;;;;OAKG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,sBAAsB,CAAC;IAuDlC;;;;;OAKG;IACG,aAAa,CACjB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC;IAsBjC;;;;;OAKG;IACG,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC;IAkBzB;;;;;OAKG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IAqB/B;;;;;OAKG;IACG,aAAa,CACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,qBAAqB,CAAC;IAgCjC,OAAO,CAAC,kBAAkB;IAqB1B;;;;;OAKG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,qBAAqB,CAAC;IAwCjC;;;;;OAKG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,qBAAqB,CAAC;IA4BjC;;;;;OAKG;IACG,aAAa,CACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IAajC;;;;;;;OAOG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,qBAAqB,CAAC;IAwEjC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAqDpC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAkCnC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAqBlC;;OAEG;IACH,OAAO,CAAC,kCAAkC;IAW1C;;OAEG;IACH,OAAO,CAAC,iCAAiC;IAWzC;;OAEG;IACH,OAAO,CAAC,aAAa;IA2CrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwDxB,OAAO,CAAC,mBAAmB;CAQ5B"}
1
+ {"version":3,"file":"article.service.d.ts","sourceRoot":"","sources":["../../src/services/article.service.ts"],"names":[],"mappings":"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"}
@@ -238,6 +238,173 @@ class ArticleService {
238
238
  throw this.handleArticleError(error, "Failed to get article list");
239
239
  }
240
240
  }
241
+ /**
242
+ * Get all articles by automatically fetching all pages
243
+ *
244
+ * @example
245
+ * ```typescript
246
+ * // Get all normal articles with progress tracking
247
+ * const result = await articleService.getAllArticles(accessToken, "normal", {
248
+ * batchSize: 50,
249
+ * maxArticles: 1000,
250
+ * onProgress: (progress) => {
251
+ * console.log(`Batch ${progress.currentBatch}: ${progress.totalFetched} articles fetched`);
252
+ * }
253
+ * });
254
+ *
255
+ * console.log(`Total: ${result.totalFetched} articles in ${result.totalBatches} batches`);
256
+ * console.log(`Has more: ${result.hasMore}`);
257
+ * ```
258
+ *
259
+ * @param accessToken OA access token
260
+ * @param type Article type ("normal" or "video")
261
+ * @param options Configuration options for fetching
262
+ * @returns All articles with pagination info
263
+ */
264
+ async getAllArticles(accessToken, type = "normal", options = {}) {
265
+ try {
266
+ const { batchSize = 50, maxArticles = 1000, onProgress } = options;
267
+ // Validate parameters
268
+ if (batchSize <= 0 || batchSize > article_1.ARTICLE_CONSTRAINTS.LIST_MAX_LIMIT) {
269
+ throw new common_1.ZaloSDKError(`Batch size must be between 1 and ${article_1.ARTICLE_CONSTRAINTS.LIST_MAX_LIMIT}`, -1);
270
+ }
271
+ if (maxArticles < 0) {
272
+ throw new common_1.ZaloSDKError("Max articles must be >= 0 (0 = no limit)", -1);
273
+ }
274
+ if (!["normal", "video"].includes(type)) {
275
+ throw new common_1.ZaloSDKError('Type must be "normal" or "video"', -1);
276
+ }
277
+ const allArticles = [];
278
+ let offset = 0;
279
+ let currentBatch = 0;
280
+ let hasMore = true;
281
+ while (hasMore) {
282
+ currentBatch++;
283
+ // Calculate limit for this batch
284
+ let currentLimit = batchSize;
285
+ if (maxArticles > 0) {
286
+ const remaining = maxArticles - allArticles.length;
287
+ if (remaining <= 0)
288
+ break;
289
+ currentLimit = Math.min(batchSize, remaining);
290
+ }
291
+ // Fetch current batch
292
+ const response = await this.getArticleList(accessToken, {
293
+ offset,
294
+ limit: currentLimit,
295
+ type
296
+ });
297
+ // Add articles to collection
298
+ // Check if response is successful and has data
299
+ if ('data' in response && response.data?.medias && response.data.medias.length > 0) {
300
+ allArticles.push(...response.data.medias);
301
+ offset += response.data.medias.length;
302
+ // Check if we have more data
303
+ hasMore = response.data.medias.length === currentLimit;
304
+ // Stop if we've reached max articles
305
+ if (maxArticles > 0 && allArticles.length >= maxArticles) {
306
+ hasMore = false;
307
+ }
308
+ }
309
+ else if ('medias' in response && response.medias && response.medias.length > 0) {
310
+ // Handle direct response format (fallback)
311
+ allArticles.push(...response.medias);
312
+ offset += response.medias.length;
313
+ // Check if we have more data
314
+ hasMore = response.medias.length === currentLimit;
315
+ // Stop if we've reached max articles
316
+ if (maxArticles > 0 && allArticles.length >= maxArticles) {
317
+ hasMore = false;
318
+ }
319
+ }
320
+ else {
321
+ hasMore = false;
322
+ }
323
+ // Call progress callback if provided
324
+ if (onProgress) {
325
+ onProgress({
326
+ currentBatch,
327
+ totalFetched: allArticles.length,
328
+ hasMore
329
+ });
330
+ }
331
+ // Safety check to prevent infinite loops
332
+ if (currentBatch > 100) {
333
+ console.warn("Reached maximum batch limit (100), stopping fetch");
334
+ break;
335
+ }
336
+ }
337
+ return {
338
+ articles: allArticles,
339
+ totalFetched: allArticles.length,
340
+ totalBatches: currentBatch,
341
+ hasMore: hasMore && (maxArticles === 0 || allArticles.length < maxArticles)
342
+ };
343
+ }
344
+ catch (error) {
345
+ throw this.handleArticleError(error, "Failed to get all articles");
346
+ }
347
+ }
348
+ /**
349
+ * Get all articles of both types (normal and video) combined
350
+ *
351
+ * @example
352
+ * ```typescript
353
+ * // Get all articles (both normal and video)
354
+ * const result = await articleService.getAllArticlesCombined(accessToken, {
355
+ * batchSize: 50,
356
+ * maxArticlesPerType: 500,
357
+ * onProgress: (progress) => {
358
+ * console.log(`${progress.type}: Batch ${progress.currentBatch}, Total: ${progress.totalFetched}`);
359
+ * }
360
+ * });
361
+ *
362
+ * console.log(`Total articles: ${result.totalFetched}`);
363
+ * console.log(`Normal articles: ${result.breakdown.normal.totalFetched}`);
364
+ * console.log(`Video articles: ${result.breakdown.video.totalFetched}`);
365
+ * ```
366
+ *
367
+ * @param accessToken OA access token
368
+ * @param options Configuration options for fetching
369
+ * @returns All articles (normal + video) with combined pagination info
370
+ */
371
+ async getAllArticlesCombined(accessToken, options = {}) {
372
+ try {
373
+ const { batchSize = 50, maxArticlesPerType = 500, onProgress } = options;
374
+ // Fetch normal articles
375
+ const normalResult = await this.getAllArticles(accessToken, "normal", {
376
+ batchSize,
377
+ maxArticles: maxArticlesPerType,
378
+ onProgress: onProgress ? (progress) => onProgress({
379
+ type: "normal",
380
+ ...progress
381
+ }) : undefined
382
+ });
383
+ // Fetch video articles
384
+ const videoResult = await this.getAllArticles(accessToken, "video", {
385
+ batchSize,
386
+ maxArticles: maxArticlesPerType,
387
+ onProgress: onProgress ? (progress) => onProgress({
388
+ type: "video",
389
+ ...progress
390
+ }) : undefined
391
+ });
392
+ // Combine results
393
+ const allArticles = [...normalResult.articles, ...videoResult.articles];
394
+ return {
395
+ articles: allArticles,
396
+ breakdown: {
397
+ normal: normalResult,
398
+ video: videoResult
399
+ },
400
+ totalFetched: allArticles.length,
401
+ totalBatches: normalResult.totalBatches + videoResult.totalBatches
402
+ };
403
+ }
404
+ catch (error) {
405
+ throw this.handleArticleError(error, "Failed to get all articles combined");
406
+ }
407
+ }
241
408
  /**
242
409
  * Remove article
243
410
  * @param accessToken OA access token
@@ -1 +1 @@
1
- {"version":3,"file":"article.service.js","sourceRoot":"","sources":["../../src/services/article.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"article.service.js","sourceRoot":"","sources":["../../src/services/article.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,222 @@
1
+ # Enhanced Article API - Get All Articles
2
+
3
+ ## Tổng Quan
4
+
5
+ Đã nâng cấp `ArticleService` với 2 method mới để lấy **tất cả bài viết** một cách tự động, không cần xử lý pagination thủ công:
6
+
7
+ - ✅ `getAllArticles()` - Lấy tất cả bài viết theo loại (normal hoặc video)
8
+ - ✅ `getAllArticlesCombined()` - Lấy tất cả bài viết cả 2 loại kết hợp
9
+
10
+ ## Tính Năng Nâng Cao
11
+
12
+ ### 🚀 Tự Động Pagination
13
+ - Tự động gọi API nhiều lần để lấy hết dữ liệu
14
+ - Không cần xử lý `offset` và `limit` thủ công
15
+ - Tự động dừng khi hết dữ liệu
16
+
17
+ ### 📊 Progress Tracking
18
+ - Callback `onProgress` để theo dõi tiến trình
19
+ - Hiển thị số batch hiện tại và tổng số đã lấy
20
+ - Biết được còn dữ liệu hay không
21
+
22
+ ### ⚙️ Cấu Hình Linh Hoạt
23
+ - `batchSize`: Số bài viết mỗi lần gọi API (max 100)
24
+ - `maxArticles`: Giới hạn tổng số bài viết (0 = không giới hạn)
25
+ - `onProgress`: Callback theo dõi tiến trình
26
+
27
+ ### 🛡️ An Toàn & Validation
28
+ - Validation đầu vào nghiêm ngặt
29
+ - Safety check tránh infinite loop
30
+ - Error handling toàn diện
31
+ - TypeScript support đầy đủ
32
+
33
+ ## API Reference
34
+
35
+ ### `getAllArticles()`
36
+
37
+ ```typescript
38
+ async getAllArticles(
39
+ accessToken: string,
40
+ type: "normal" | "video" = "normal",
41
+ options: {
42
+ batchSize?: number; // Default: 50, Max: 100
43
+ maxArticles?: number; // Default: 1000, 0 = no limit
44
+ onProgress?: (progress: {
45
+ currentBatch: number;
46
+ totalFetched: number;
47
+ hasMore: boolean;
48
+ }) => void;
49
+ } = {}
50
+ ): Promise<{
51
+ articles: ArticleListItem[];
52
+ totalFetched: number;
53
+ totalBatches: number;
54
+ hasMore: boolean;
55
+ }>
56
+ ```
57
+
58
+ ### `getAllArticlesCombined()`
59
+
60
+ ```typescript
61
+ async getAllArticlesCombined(
62
+ accessToken: string,
63
+ options: {
64
+ batchSize?: number; // Default: 50, Max: 100
65
+ maxArticlesPerType?: number; // Default: 500, 0 = no limit
66
+ onProgress?: (progress: {
67
+ type: "normal" | "video";
68
+ currentBatch: number;
69
+ totalFetched: number;
70
+ hasMore: boolean;
71
+ }) => void;
72
+ } = {}
73
+ ): Promise<{
74
+ articles: ArticleListItem[];
75
+ breakdown: {
76
+ normal: { articles: ArticleListItem[]; totalFetched: number; totalBatches: number; hasMore: boolean; };
77
+ video: { articles: ArticleListItem[]; totalFetched: number; totalBatches: number; hasMore: boolean; };
78
+ };
79
+ totalFetched: number;
80
+ totalBatches: number;
81
+ }>
82
+ ```
83
+
84
+ ## Ví Dụ Sử Dụng
85
+
86
+ ### 1. Lấy Tất Cả Bài Viết Normal
87
+
88
+ ```typescript
89
+ import { ArticleService } from "redai-zalo-sdk";
90
+
91
+ const result = await articleService.getAllArticles(accessToken, "normal", {
92
+ batchSize: 50,
93
+ maxArticles: 1000,
94
+ onProgress: (progress) => {
95
+ console.log(`Batch ${progress.currentBatch}: ${progress.totalFetched} articles`);
96
+ }
97
+ });
98
+
99
+ console.log(`Total: ${result.totalFetched} articles`);
100
+ result.articles.forEach(article => {
101
+ console.log(`- ${article.title} (${article.id})`);
102
+ });
103
+ ```
104
+
105
+ ### 2. Lấy Tất Cả Bài Viết Video
106
+
107
+ ```typescript
108
+ const videoResult = await articleService.getAllArticles(accessToken, "video", {
109
+ batchSize: 30,
110
+ maxArticles: 500
111
+ });
112
+
113
+ console.log(`Found ${videoResult.totalFetched} video articles`);
114
+ ```
115
+
116
+ ### 3. Lấy Tất Cả Bài Viết (Normal + Video)
117
+
118
+ ```typescript
119
+ const combinedResult = await articleService.getAllArticlesCombined(accessToken, {
120
+ batchSize: 50,
121
+ maxArticlesPerType: 500,
122
+ onProgress: (progress) => {
123
+ console.log(`${progress.type}: ${progress.totalFetched} articles`);
124
+ }
125
+ });
126
+
127
+ console.log(`Total: ${combinedResult.totalFetched} articles`);
128
+ console.log(`Normal: ${combinedResult.breakdown.normal.totalFetched}`);
129
+ console.log(`Video: ${combinedResult.breakdown.video.totalFetched}`);
130
+ ```
131
+
132
+ ### 4. Lấy Tất Cả Không Giới Hạn
133
+
134
+ ```typescript
135
+ // ⚠️ Cẩn thận: Có thể lấy rất nhiều dữ liệu!
136
+ const unlimitedResult = await articleService.getAllArticles(accessToken, "normal", {
137
+ batchSize: 100,
138
+ maxArticles: 0, // 0 = không giới hạn
139
+ onProgress: (progress) => {
140
+ console.log(`Fetching... ${progress.totalFetched} articles so far`);
141
+ }
142
+ });
143
+ ```
144
+
145
+ ## So Sánh Với API Cũ
146
+
147
+ ### Trước (API cũ)
148
+ ```typescript
149
+ // Phải xử lý pagination thủ công
150
+ let offset = 0;
151
+ const limit = 50;
152
+ const allArticles = [];
153
+
154
+ while (true) {
155
+ const response = await articleService.getArticleList(accessToken, {
156
+ offset,
157
+ limit,
158
+ type: "normal"
159
+ });
160
+
161
+ if (!response.data?.medias || response.data.medias.length === 0) {
162
+ break;
163
+ }
164
+
165
+ allArticles.push(...response.data.medias);
166
+ offset += response.data.medias.length;
167
+
168
+ if (response.data.medias.length < limit) {
169
+ break;
170
+ }
171
+ }
172
+ ```
173
+
174
+ ### Sau (API mới)
175
+ ```typescript
176
+ // Chỉ 1 dòng code!
177
+ const result = await articleService.getAllArticles(accessToken, "normal");
178
+ const allArticles = result.articles;
179
+ ```
180
+
181
+ ## Lưu Ý Quan Trọng
182
+
183
+ ### ⚠️ Giới Hạn Rate Limit
184
+ - Zalo API có giới hạn số request/phút
185
+ - Sử dụng `batchSize` hợp lý (khuyến nghị: 50)
186
+ - Đặt `maxArticles` để tránh quá tải
187
+
188
+ ### 🔒 Bảo Mật
189
+ - Luôn validate `accessToken`
190
+ - Không hardcode token trong code
191
+ - Sử dụng environment variables
192
+
193
+ ### 📈 Performance
194
+ - `batchSize` lớn = ít request nhưng response lớn
195
+ - `batchSize` nhỏ = nhiều request nhưng response nhỏ
196
+ - Khuyến nghị: 50-100 articles/batch
197
+
198
+ ### 🛡️ Error Handling
199
+ ```typescript
200
+ try {
201
+ const result = await articleService.getAllArticles(accessToken, "normal");
202
+ // Xử lý thành công
203
+ } catch (error) {
204
+ if (error instanceof ZaloSDKError) {
205
+ console.error("Zalo API Error:", error.message);
206
+ } else {
207
+ console.error("Unknown Error:", error);
208
+ }
209
+ }
210
+ ```
211
+
212
+ ## Kết Luận
213
+
214
+ API mới giúp:
215
+ - ✅ Đơn giản hóa việc lấy tất cả bài viết
216
+ - ✅ Tự động xử lý pagination
217
+ - ✅ Theo dõi tiến trình real-time
218
+ - ✅ Type-safe với TypeScript
219
+ - ✅ Error handling tốt hơn
220
+ - ✅ Cấu hình linh hoạt
221
+
222
+ Sử dụng `getAllArticles()` cho 1 loại bài viết hoặc `getAllArticlesCombined()` cho cả 2 loại!
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Example: How to use the enhanced getAllArticles and getAllArticlesCombined methods
3
+ *
4
+ * This example demonstrates the new custom API methods that can fetch all articles
5
+ * automatically by handling pagination internally.
6
+ */
7
+
8
+ import { ArticleService } from "../src/services/article.service";
9
+ import { ZaloClient } from "../src/clients/zalo-client";
10
+
11
+ // Initialize the services
12
+ const zaloClient = new ZaloClient();
13
+ const articleService = new ArticleService(zaloClient);
14
+
15
+ // Your access token
16
+ const ACCESS_TOKEN = "your-access-token-here";
17
+
18
+ /**
19
+ * Example 1: Get all normal articles with progress tracking
20
+ */
21
+ async function getAllNormalArticlesExample() {
22
+ console.log("=== Getting All Normal Articles ===");
23
+
24
+ try {
25
+ const result = await articleService.getAllArticles(ACCESS_TOKEN, "normal", {
26
+ batchSize: 50, // Fetch 50 articles per API call
27
+ maxArticles: 1000, // Stop after 1000 articles (0 = no limit)
28
+ onProgress: (progress) => {
29
+ console.log(`📄 Batch ${progress.currentBatch}: ${progress.totalFetched} articles fetched, hasMore: ${progress.hasMore}`);
30
+ }
31
+ });
32
+
33
+ console.log(`✅ Completed! Total: ${result.totalFetched} normal articles in ${result.totalBatches} batches`);
34
+ console.log(`📊 Has more articles available: ${result.hasMore}`);
35
+
36
+ // Access the articles
37
+ result.articles.forEach((article, index) => {
38
+ console.log(`${index + 1}. ${article.title} (ID: ${article.id})`);
39
+ });
40
+
41
+ return result;
42
+ } catch (error) {
43
+ console.error("❌ Error getting normal articles:", error);
44
+ throw error;
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Example 2: Get all video articles
50
+ */
51
+ async function getAllVideoArticlesExample() {
52
+ console.log("\n=== Getting All Video Articles ===");
53
+
54
+ try {
55
+ const result = await articleService.getAllArticles(ACCESS_TOKEN, "video", {
56
+ batchSize: 30, // Smaller batch size for videos
57
+ maxArticles: 500, // Limit to 500 videos
58
+ onProgress: (progress) => {
59
+ console.log(`🎥 Video Batch ${progress.currentBatch}: ${progress.totalFetched} videos fetched`);
60
+ }
61
+ });
62
+
63
+ console.log(`✅ Completed! Total: ${result.totalFetched} video articles in ${result.totalBatches} batches`);
64
+
65
+ return result;
66
+ } catch (error) {
67
+ console.error("❌ Error getting video articles:", error);
68
+ throw error;
69
+ }
70
+ }
71
+
72
+ /**
73
+ * Example 3: Get all articles (both normal and video) combined
74
+ */
75
+ async function getAllArticlesCombinedExample() {
76
+ console.log("\n=== Getting All Articles Combined ===");
77
+
78
+ try {
79
+ const result = await articleService.getAllArticlesCombined(ACCESS_TOKEN, {
80
+ batchSize: 50,
81
+ maxArticlesPerType: 500, // Max 500 per type (normal + video)
82
+ onProgress: (progress) => {
83
+ console.log(`📱 ${progress.type.toUpperCase()}: Batch ${progress.currentBatch}, Total: ${progress.totalFetched}`);
84
+ }
85
+ });
86
+
87
+ console.log(`✅ All articles fetched!`);
88
+ console.log(`📊 Total articles: ${result.totalFetched}`);
89
+ console.log(`📄 Normal articles: ${result.breakdown.normal.totalFetched}`);
90
+ console.log(`🎥 Video articles: ${result.breakdown.video.totalFetched}`);
91
+ console.log(`🔄 Total API calls: ${result.totalBatches}`);
92
+
93
+ // You can access all articles combined
94
+ console.log(`\n📋 All Articles (${result.articles.length}):`);
95
+ result.articles.slice(0, 5).forEach((article, index) => {
96
+ console.log(`${index + 1}. [${article.type?.toUpperCase()}] ${article.title}`);
97
+ });
98
+
99
+ if (result.articles.length > 5) {
100
+ console.log(`... and ${result.articles.length - 5} more articles`);
101
+ }
102
+
103
+ return result;
104
+ } catch (error) {
105
+ console.error("❌ Error getting combined articles:", error);
106
+ throw error;
107
+ }
108
+ }
109
+
110
+ /**
111
+ * Example 4: Get unlimited articles (fetch everything)
112
+ */
113
+ async function getAllArticlesUnlimitedExample() {
114
+ console.log("\n=== Getting ALL Articles (No Limit) ===");
115
+
116
+ try {
117
+ const result = await articleService.getAllArticles(ACCESS_TOKEN, "normal", {
118
+ batchSize: 100, // Max batch size
119
+ maxArticles: 0, // 0 = no limit, fetch everything
120
+ onProgress: (progress) => {
121
+ console.log(`🔄 Batch ${progress.currentBatch}: ${progress.totalFetched} articles...`);
122
+ }
123
+ });
124
+
125
+ console.log(`✅ Fetched EVERYTHING! Total: ${result.totalFetched} articles`);
126
+ console.log(`⚠️ Warning: This fetched all articles without limit!`);
127
+
128
+ return result;
129
+ } catch (error) {
130
+ console.error("❌ Error getting unlimited articles:", error);
131
+ throw error;
132
+ }
133
+ }
134
+
135
+ /**
136
+ * Main function to run all examples
137
+ */
138
+ async function runExamples() {
139
+ try {
140
+ // Example 1: Normal articles
141
+ await getAllNormalArticlesExample();
142
+
143
+ // Example 2: Video articles
144
+ await getAllVideoArticlesExample();
145
+
146
+ // Example 3: Combined articles
147
+ await getAllArticlesCombinedExample();
148
+
149
+ // Example 4: Unlimited (commented out for safety)
150
+ // await getAllArticlesUnlimitedExample();
151
+
152
+ console.log("\n🎉 All examples completed successfully!");
153
+
154
+ } catch (error) {
155
+ console.error("💥 Example failed:", error);
156
+ }
157
+ }
158
+
159
+ // Export for use in other files
160
+ export {
161
+ getAllNormalArticlesExample,
162
+ getAllVideoArticlesExample,
163
+ getAllArticlesCombinedExample,
164
+ getAllArticlesUnlimitedExample,
165
+ runExamples
166
+ };
167
+
168
+ // Run examples if this file is executed directly
169
+ if (require.main === module) {
170
+ runExamples();
171
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@warriorteam/redai-zalo-sdk",
3
- "version": "1.12.5",
4
- "description": "Comprehensive TypeScript/JavaScript SDK for Zalo APIs - Official Account, ZNS, Consultation Service, Group Messaging, and Social APIs",
3
+ "version": "1.13.0",
4
+ "description": "Comprehensive TypeScript/JavaScript SDK for Zalo APIs - Official Account, ZNS, Consultation Service, Group Messaging, Social APIs, and Enhanced Article Management with Auto-Pagination",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "scripts": {
@@ -29,7 +29,11 @@
29
29
  "notification-service",
30
30
  "consultation-service",
31
31
  "customer-support",
32
- "messaging"
32
+ "messaging",
33
+ "article-management",
34
+ "auto-pagination",
35
+ "bulk-fetch",
36
+ "progress-tracking"
33
37
  ],
34
38
  "author": "RedAI Team",
35
39
  "license": "MIT",