@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 +70 -0
- package/README.md +2 -0
- package/dist/services/article.service.d.ts +103 -1
- package/dist/services/article.service.d.ts.map +1 -1
- package/dist/services/article.service.js +167 -0
- package/dist/services/article.service.js.map +1 -1
- package/docs/enhanced-article-api.md +222 -0
- package/examples/get-all-articles-example.ts +171 -0
- package/package.json +7 -3
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,
|
|
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.
|
|
4
|
-
"description": "Comprehensive TypeScript/JavaScript SDK for Zalo APIs - Official Account, ZNS, Consultation Service, Group Messaging, and
|
|
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",
|