@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.
- package/LICENSE +21 -0
- package/README.md +448 -0
- package/dist/clients/base-client.d.ts +67 -0
- package/dist/clients/base-client.d.ts.map +1 -0
- package/dist/clients/base-client.js +297 -0
- package/dist/clients/base-client.js.map +1 -0
- package/dist/clients/zalo-client.d.ts +131 -0
- package/dist/clients/zalo-client.d.ts.map +1 -0
- package/dist/clients/zalo-client.js +215 -0
- package/dist/clients/zalo-client.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/services/article.service.d.ts +144 -0
- package/dist/services/article.service.d.ts.map +1 -0
- package/dist/services/article.service.js +518 -0
- package/dist/services/article.service.js.map +1 -0
- package/dist/services/auth.service.d.ts +55 -0
- package/dist/services/auth.service.d.ts.map +1 -0
- package/dist/services/auth.service.js +269 -0
- package/dist/services/auth.service.js.map +1 -0
- package/dist/services/consultation.service.d.ts +73 -0
- package/dist/services/consultation.service.d.ts.map +1 -0
- package/dist/services/consultation.service.js +208 -0
- package/dist/services/consultation.service.js.map +1 -0
- package/dist/services/general-message.service.d.ts +85 -0
- package/dist/services/general-message.service.d.ts.map +1 -0
- package/dist/services/general-message.service.js +248 -0
- package/dist/services/general-message.service.js.map +1 -0
- package/dist/services/group-management.service.d.ts +220 -0
- package/dist/services/group-management.service.d.ts.map +1 -0
- package/dist/services/group-management.service.js +562 -0
- package/dist/services/group-management.service.js.map +1 -0
- package/dist/services/group-message.service.d.ts +102 -0
- package/dist/services/group-message.service.d.ts.map +1 -0
- package/dist/services/group-message.service.js +233 -0
- package/dist/services/group-message.service.js.map +1 -0
- package/dist/services/message-management.service.d.ts +135 -0
- package/dist/services/message-management.service.d.ts.map +1 -0
- package/dist/services/message-management.service.js +237 -0
- package/dist/services/message-management.service.js.map +1 -0
- package/dist/services/oa.service.d.ts +67 -0
- package/dist/services/oa.service.d.ts.map +1 -0
- package/dist/services/oa.service.js +223 -0
- package/dist/services/oa.service.js.map +1 -0
- package/dist/services/promotion.service.d.ts +114 -0
- package/dist/services/promotion.service.d.ts.map +1 -0
- package/dist/services/promotion.service.js +247 -0
- package/dist/services/promotion.service.js.map +1 -0
- package/dist/services/tag.service.d.ts +144 -0
- package/dist/services/tag.service.d.ts.map +1 -0
- package/dist/services/tag.service.js +184 -0
- package/dist/services/tag.service.js.map +1 -0
- package/dist/services/transaction.service.d.ts +110 -0
- package/dist/services/transaction.service.d.ts.map +1 -0
- package/dist/services/transaction.service.js +231 -0
- package/dist/services/transaction.service.js.map +1 -0
- package/dist/services/user-management.service.d.ts +117 -0
- package/dist/services/user-management.service.d.ts.map +1 -0
- package/dist/services/user-management.service.js +239 -0
- package/dist/services/user-management.service.js.map +1 -0
- package/dist/services/user.service.d.ts +84 -0
- package/dist/services/user.service.d.ts.map +1 -0
- package/dist/services/user.service.js +323 -0
- package/dist/services/user.service.js.map +1 -0
- package/dist/services/video-upload.service.d.ts +83 -0
- package/dist/services/video-upload.service.d.ts.map +1 -0
- package/dist/services/video-upload.service.js +267 -0
- package/dist/services/video-upload.service.js.map +1 -0
- package/dist/services/zns.service.d.ts +116 -0
- package/dist/services/zns.service.d.ts.map +1 -0
- package/dist/services/zns.service.js +234 -0
- package/dist/services/zns.service.js.map +1 -0
- package/dist/types/article.d.ts +352 -0
- package/dist/types/article.d.ts.map +1 -0
- package/dist/types/article.js +70 -0
- package/dist/types/article.js.map +1 -0
- package/dist/types/auth.d.ts +233 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +39 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/common.d.ts +237 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +42 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/group.d.ts +523 -0
- package/dist/types/group.d.ts.map +1 -0
- package/dist/types/group.js +6 -0
- package/dist/types/group.js.map +1 -0
- package/dist/types/message.d.ts +333 -0
- package/dist/types/message.d.ts.map +1 -0
- package/dist/types/message.js +17 -0
- package/dist/types/message.js.map +1 -0
- package/dist/types/oa.d.ts +285 -0
- package/dist/types/oa.d.ts.map +1 -0
- package/dist/types/oa.js +25 -0
- package/dist/types/oa.js.map +1 -0
- package/dist/types/social.d.ts +427 -0
- package/dist/types/social.d.ts.map +1 -0
- package/dist/types/social.js +6 -0
- package/dist/types/social.js.map +1 -0
- package/dist/types/user-management.d.ts +280 -0
- package/dist/types/user-management.d.ts.map +1 -0
- package/dist/types/user-management.js +6 -0
- package/dist/types/user-management.js.map +1 -0
- package/dist/types/user.d.ts +365 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +17 -0
- package/dist/types/user.js.map +1 -0
- package/dist/types/webhook.d.ts +1972 -0
- package/dist/types/webhook.d.ts.map +1 -0
- package/dist/types/webhook.js +419 -0
- package/dist/types/webhook.js.map +1 -0
- package/dist/types/zns.d.ts +277 -0
- package/dist/types/zns.d.ts.map +1 -0
- package/dist/types/zns.js +6 -0
- package/dist/types/zns.js.map +1 -0
- package/dist/zalo-sdk.d.ts +228 -0
- package/dist/zalo-sdk.d.ts.map +1 -0
- package/dist/zalo-sdk.js +307 -0
- package/dist/zalo-sdk.js.map +1 -0
- 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"}
|