@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,83 @@
|
|
|
1
|
+
import { ZaloClient } from "../clients/zalo-client";
|
|
2
|
+
import { VideoUploadResponse, VideoStatusResponse } from "../types/article";
|
|
3
|
+
/**
|
|
4
|
+
* Service for handling Zalo Official Account Video Upload APIs
|
|
5
|
+
*
|
|
6
|
+
* CONDITIONS FOR USING ZALO VIDEO UPLOAD:
|
|
7
|
+
*
|
|
8
|
+
* 1. GENERAL CONDITIONS:
|
|
9
|
+
* - OA must have permission to upload videos
|
|
10
|
+
* - Access token must have "manage_article" scope
|
|
11
|
+
* - OA must have active status and be verified
|
|
12
|
+
*
|
|
13
|
+
* 2. VIDEO FILE REQUIREMENTS:
|
|
14
|
+
* - File formats: MP4, AVI only
|
|
15
|
+
* - Maximum file size: 50MB
|
|
16
|
+
* - Video processing: asynchronous, use token to check status
|
|
17
|
+
* - Processing time: varies based on video size and quality
|
|
18
|
+
*
|
|
19
|
+
* 3. UPLOAD PROCESS:
|
|
20
|
+
* - Step 1: Upload video file and get token
|
|
21
|
+
* - Step 2: Use token to check processing status
|
|
22
|
+
* - Step 3: Get video_id when processing is complete
|
|
23
|
+
* - Step 4: Use video_id in article creation
|
|
24
|
+
*
|
|
25
|
+
* 4. STATUS CODES:
|
|
26
|
+
* - 1: Upload successful, processing started
|
|
27
|
+
* - 2: Processing in progress
|
|
28
|
+
* - 3: Processing completed successfully
|
|
29
|
+
* - 4: Processing failed
|
|
30
|
+
*/
|
|
31
|
+
export declare class VideoUploadService {
|
|
32
|
+
private readonly client;
|
|
33
|
+
private readonly apiUrl;
|
|
34
|
+
constructor(client: ZaloClient);
|
|
35
|
+
/**
|
|
36
|
+
* Upload video file for article
|
|
37
|
+
* @param accessToken OA access token
|
|
38
|
+
* @param file Video file (Buffer or File)
|
|
39
|
+
* @param filename Original filename (optional, will be generated if not provided)
|
|
40
|
+
* @returns Token for tracking upload progress
|
|
41
|
+
*/
|
|
42
|
+
uploadVideo(accessToken: string, file: Buffer | File, filename?: string): Promise<VideoUploadResponse>;
|
|
43
|
+
/**
|
|
44
|
+
* Check video upload status
|
|
45
|
+
* @param accessToken OA access token
|
|
46
|
+
* @param token Token from video upload response
|
|
47
|
+
* @returns Video status information
|
|
48
|
+
*/
|
|
49
|
+
checkVideoStatus(accessToken: string, token: string): Promise<VideoStatusResponse>;
|
|
50
|
+
/**
|
|
51
|
+
* Wait for video upload completion with polling
|
|
52
|
+
* @param accessToken OA access token
|
|
53
|
+
* @param token Token from video upload response
|
|
54
|
+
* @param maxWaitTime Maximum wait time in milliseconds (default: 5 minutes)
|
|
55
|
+
* @param pollInterval Polling interval in milliseconds (default: 5 seconds)
|
|
56
|
+
* @returns Final video status when completed
|
|
57
|
+
*/
|
|
58
|
+
waitForUploadCompletion(accessToken: string, token: string, maxWaitTime?: number, // 5 minutes
|
|
59
|
+
pollInterval?: number): Promise<VideoStatusResponse>;
|
|
60
|
+
/**
|
|
61
|
+
* Upload video from URL
|
|
62
|
+
* @param accessToken OA access token
|
|
63
|
+
* @param videoUrl URL of the video to upload
|
|
64
|
+
* @returns Token for tracking upload progress
|
|
65
|
+
*/
|
|
66
|
+
uploadVideoFromUrl(accessToken: string, videoUrl: string): Promise<VideoUploadResponse>;
|
|
67
|
+
/**
|
|
68
|
+
* Get video information by video ID
|
|
69
|
+
* @param accessToken OA access token
|
|
70
|
+
* @param videoId Video ID
|
|
71
|
+
* @returns Video information
|
|
72
|
+
*/
|
|
73
|
+
getVideoInfo(accessToken: string, videoId: string): Promise<any>;
|
|
74
|
+
/**
|
|
75
|
+
* Validate video file
|
|
76
|
+
*/
|
|
77
|
+
private validateVideoFile;
|
|
78
|
+
private getMimeTypeFromFilename;
|
|
79
|
+
private extractFilenameFromUrl;
|
|
80
|
+
private sleep;
|
|
81
|
+
private handleVideoUploadError;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=video-upload.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video-upload.service.d.ts","sourceRoot":"","sources":["../../src/services/video-upload.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EAEpB,MAAM,kBAAkB,CAAC;AAG1B;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;gBAE5B,MAAM,EAAE,UAAU;IAE/C;;;;;;OAMG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,mBAAmB,CAAC;IAsC/B;;;;;OAKG;IACG,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,mBAAmB,CAAC;IAoB/B;;;;;;;OAOG;IACG,uBAAuB,CAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,WAAW,GAAE,MAAsB,EAAE,YAAY;IACjD,YAAY,GAAE,MAAiB,GAC9B,OAAO,CAAC,mBAAmB,CAAC;IA8C/B;;;;;OAKG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,CAAC;IAmC/B;;;;;OAKG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAsBtE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAyDzB,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,sBAAsB;CAoB/B"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VideoUploadService = void 0;
|
|
4
|
+
const article_1 = require("../types/article");
|
|
5
|
+
const common_1 = require("../types/common");
|
|
6
|
+
/**
|
|
7
|
+
* Service for handling Zalo Official Account Video Upload APIs
|
|
8
|
+
*
|
|
9
|
+
* CONDITIONS FOR USING ZALO VIDEO UPLOAD:
|
|
10
|
+
*
|
|
11
|
+
* 1. GENERAL CONDITIONS:
|
|
12
|
+
* - OA must have permission to upload videos
|
|
13
|
+
* - Access token must have "manage_article" scope
|
|
14
|
+
* - OA must have active status and be verified
|
|
15
|
+
*
|
|
16
|
+
* 2. VIDEO FILE REQUIREMENTS:
|
|
17
|
+
* - File formats: MP4, AVI only
|
|
18
|
+
* - Maximum file size: 50MB
|
|
19
|
+
* - Video processing: asynchronous, use token to check status
|
|
20
|
+
* - Processing time: varies based on video size and quality
|
|
21
|
+
*
|
|
22
|
+
* 3. UPLOAD PROCESS:
|
|
23
|
+
* - Step 1: Upload video file and get token
|
|
24
|
+
* - Step 2: Use token to check processing status
|
|
25
|
+
* - Step 3: Get video_id when processing is complete
|
|
26
|
+
* - Step 4: Use video_id in article creation
|
|
27
|
+
*
|
|
28
|
+
* 4. STATUS CODES:
|
|
29
|
+
* - 1: Upload successful, processing started
|
|
30
|
+
* - 2: Processing in progress
|
|
31
|
+
* - 3: Processing completed successfully
|
|
32
|
+
* - 4: Processing failed
|
|
33
|
+
*/
|
|
34
|
+
class VideoUploadService {
|
|
35
|
+
constructor(client) {
|
|
36
|
+
this.client = client;
|
|
37
|
+
this.apiUrl = "https://openapi.zalo.me/v2.0";
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Upload video file for article
|
|
41
|
+
* @param accessToken OA access token
|
|
42
|
+
* @param file Video file (Buffer or File)
|
|
43
|
+
* @param filename Original filename (optional, will be generated if not provided)
|
|
44
|
+
* @returns Token for tracking upload progress
|
|
45
|
+
*/
|
|
46
|
+
async uploadVideo(accessToken, file, filename) {
|
|
47
|
+
try {
|
|
48
|
+
// Validate file
|
|
49
|
+
this.validateVideoFile(file, filename);
|
|
50
|
+
// Create FormData for upload
|
|
51
|
+
const formData = new FormData();
|
|
52
|
+
if (Buffer.isBuffer(file)) {
|
|
53
|
+
// Handle Buffer input - create a new ArrayBuffer to ensure compatibility
|
|
54
|
+
const actualFilename = filename || "video.mp4";
|
|
55
|
+
const arrayBuffer = new ArrayBuffer(file.length);
|
|
56
|
+
const uint8Array = new Uint8Array(arrayBuffer);
|
|
57
|
+
file.copy(uint8Array);
|
|
58
|
+
const blob = new Blob([uint8Array], {
|
|
59
|
+
type: this.getMimeTypeFromFilename(actualFilename),
|
|
60
|
+
});
|
|
61
|
+
formData.append("file", blob, actualFilename);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// Handle File input
|
|
65
|
+
const actualFilename = file.name || filename || "video.mp4";
|
|
66
|
+
formData.append("file", file, actualFilename);
|
|
67
|
+
}
|
|
68
|
+
const response = await this.client.apiPostFormData(`${this.apiUrl}/article/upload_video/preparevideo`, accessToken, formData);
|
|
69
|
+
return response.data;
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
throw this.handleVideoUploadError(error, "Failed to upload video");
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check video upload status
|
|
77
|
+
* @param accessToken OA access token
|
|
78
|
+
* @param token Token from video upload response
|
|
79
|
+
* @returns Video status information
|
|
80
|
+
*/
|
|
81
|
+
async checkVideoStatus(accessToken, token) {
|
|
82
|
+
try {
|
|
83
|
+
if (!token || token.trim() === "") {
|
|
84
|
+
throw new common_1.ZaloSDKError("Token cannot be empty", -1);
|
|
85
|
+
}
|
|
86
|
+
const params = new URLSearchParams();
|
|
87
|
+
params.append("token", token);
|
|
88
|
+
const response = await this.client.apiGet(`${this.apiUrl}/article/upload_video/verify?${params.toString()}`, accessToken);
|
|
89
|
+
return response.data;
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
throw this.handleVideoUploadError(error, "Failed to check video status");
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Wait for video upload completion with polling
|
|
97
|
+
* @param accessToken OA access token
|
|
98
|
+
* @param token Token from video upload response
|
|
99
|
+
* @param maxWaitTime Maximum wait time in milliseconds (default: 5 minutes)
|
|
100
|
+
* @param pollInterval Polling interval in milliseconds (default: 5 seconds)
|
|
101
|
+
* @returns Final video status when completed
|
|
102
|
+
*/
|
|
103
|
+
async waitForUploadCompletion(accessToken, token, maxWaitTime = 5 * 60 * 1000, // 5 minutes
|
|
104
|
+
pollInterval = 5 * 1000 // 5 seconds
|
|
105
|
+
) {
|
|
106
|
+
const startTime = Date.now();
|
|
107
|
+
while (Date.now() - startTime < maxWaitTime) {
|
|
108
|
+
try {
|
|
109
|
+
const status = await this.checkVideoStatus(accessToken, token);
|
|
110
|
+
// Status 3 = Processing completed successfully
|
|
111
|
+
if (status.status === 3 && status.video_id) {
|
|
112
|
+
return status;
|
|
113
|
+
}
|
|
114
|
+
// Status 4 = Processing failed
|
|
115
|
+
if (status.status === 4) {
|
|
116
|
+
throw new common_1.ZaloSDKError(`Video processing failed: ${status.status_message}`, status.convert_error_code);
|
|
117
|
+
}
|
|
118
|
+
// Continue polling for status 1 (uploaded) or 2 (processing)
|
|
119
|
+
if (status.status === 1 || status.status === 2) {
|
|
120
|
+
await this.sleep(pollInterval);
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
// Unknown status
|
|
124
|
+
throw new common_1.ZaloSDKError(`Unknown video processing status: ${status.status}`, -1);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
if (error instanceof common_1.ZaloSDKError) {
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
// Continue polling on network errors
|
|
131
|
+
await this.sleep(pollInterval);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
throw new common_1.ZaloSDKError(`Video processing timeout after ${maxWaitTime / 1000} seconds`, -1);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Upload video from URL
|
|
138
|
+
* @param accessToken OA access token
|
|
139
|
+
* @param videoUrl URL of the video to upload
|
|
140
|
+
* @returns Token for tracking upload progress
|
|
141
|
+
*/
|
|
142
|
+
async uploadVideoFromUrl(accessToken, videoUrl) {
|
|
143
|
+
try {
|
|
144
|
+
if (!videoUrl || videoUrl.trim() === "") {
|
|
145
|
+
throw new common_1.ZaloSDKError("Video URL cannot be empty", -1);
|
|
146
|
+
}
|
|
147
|
+
// Validate URL format
|
|
148
|
+
try {
|
|
149
|
+
new URL(videoUrl);
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
throw new common_1.ZaloSDKError("Invalid video URL format", -1);
|
|
153
|
+
}
|
|
154
|
+
// Download video from URL
|
|
155
|
+
const response = await fetch(videoUrl);
|
|
156
|
+
if (!response.ok) {
|
|
157
|
+
throw new common_1.ZaloSDKError(`Failed to download video from URL: ${response.statusText}`, -1);
|
|
158
|
+
}
|
|
159
|
+
const videoBuffer = Buffer.from(await response.arrayBuffer());
|
|
160
|
+
const filename = this.extractFilenameFromUrl(videoUrl) || "video.mp4";
|
|
161
|
+
// Upload the downloaded video
|
|
162
|
+
return await this.uploadVideo(accessToken, videoBuffer, filename);
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
throw this.handleVideoUploadError(error, "Failed to upload video from URL");
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get video information by video ID
|
|
170
|
+
* @param accessToken OA access token
|
|
171
|
+
* @param videoId Video ID
|
|
172
|
+
* @returns Video information
|
|
173
|
+
*/
|
|
174
|
+
async getVideoInfo(accessToken, videoId) {
|
|
175
|
+
try {
|
|
176
|
+
if (!videoId || videoId.trim() === "") {
|
|
177
|
+
throw new common_1.ZaloSDKError("Video ID cannot be empty", -1);
|
|
178
|
+
}
|
|
179
|
+
const params = new URLSearchParams();
|
|
180
|
+
params.append("video_id", videoId);
|
|
181
|
+
const response = await this.client.apiGet(`${this.apiUrl}/article/video/info?${params.toString()}`, accessToken);
|
|
182
|
+
return response;
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
throw this.handleVideoUploadError(error, "Failed to get video info");
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// ==================== VALIDATION METHODS ====================
|
|
189
|
+
/**
|
|
190
|
+
* Validate video file
|
|
191
|
+
*/
|
|
192
|
+
validateVideoFile(file, filename) {
|
|
193
|
+
if (!file) {
|
|
194
|
+
throw new common_1.ZaloSDKError("Video file cannot be empty", -1);
|
|
195
|
+
}
|
|
196
|
+
let fileSize;
|
|
197
|
+
let fileName;
|
|
198
|
+
let mimeType;
|
|
199
|
+
if (Buffer.isBuffer(file)) {
|
|
200
|
+
fileSize = file.length;
|
|
201
|
+
fileName = filename || "video.mp4";
|
|
202
|
+
mimeType = this.getMimeTypeFromFilename(fileName);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
// Handle File input with proper type casting
|
|
206
|
+
const fileObj = file;
|
|
207
|
+
fileSize = fileObj.size;
|
|
208
|
+
fileName = fileObj.name || filename || "video.mp4";
|
|
209
|
+
mimeType = fileObj.type || this.getMimeTypeFromFilename(fileName);
|
|
210
|
+
}
|
|
211
|
+
// Check file size (50MB)
|
|
212
|
+
if (fileSize > article_1.VIDEO_CONSTRAINTS.maxSize) {
|
|
213
|
+
throw new common_1.ZaloSDKError(`Video file size exceeds ${article_1.VIDEO_CONSTRAINTS.maxSize / (1024 * 1024)}MB limit`, -1);
|
|
214
|
+
}
|
|
215
|
+
// Check file extension
|
|
216
|
+
const fileExtension = fileName
|
|
217
|
+
.toLowerCase()
|
|
218
|
+
.substring(fileName.lastIndexOf("."));
|
|
219
|
+
if (!article_1.VIDEO_CONSTRAINTS.allowedExtensions.includes(fileExtension)) {
|
|
220
|
+
throw new common_1.ZaloSDKError(`Unsupported video format. Only ${article_1.VIDEO_CONSTRAINTS.allowedExtensions.join(", ")} are supported`, -1);
|
|
221
|
+
}
|
|
222
|
+
// Check MIME type
|
|
223
|
+
if (!article_1.VIDEO_CONSTRAINTS.allowedMimeTypes.includes(mimeType)) {
|
|
224
|
+
throw new common_1.ZaloSDKError(`Unsupported video MIME type. Only ${article_1.VIDEO_CONSTRAINTS.allowedMimeTypes.join(", ")} are supported`, -1);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// ==================== HELPER METHODS ====================
|
|
228
|
+
getMimeTypeFromFilename(filename) {
|
|
229
|
+
const extension = filename
|
|
230
|
+
.toLowerCase()
|
|
231
|
+
.substring(filename.lastIndexOf("."));
|
|
232
|
+
switch (extension) {
|
|
233
|
+
case ".mp4":
|
|
234
|
+
return "video/mp4";
|
|
235
|
+
case ".avi":
|
|
236
|
+
return "video/x-msvideo";
|
|
237
|
+
default:
|
|
238
|
+
return "video/mp4"; // Default fallback
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
extractFilenameFromUrl(url) {
|
|
242
|
+
try {
|
|
243
|
+
const urlObj = new URL(url);
|
|
244
|
+
const pathname = urlObj.pathname;
|
|
245
|
+
const filename = pathname.substring(pathname.lastIndexOf("/") + 1);
|
|
246
|
+
return filename || null;
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
sleep(ms) {
|
|
253
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
254
|
+
}
|
|
255
|
+
handleVideoUploadError(error, defaultMessage) {
|
|
256
|
+
if (error instanceof common_1.ZaloSDKError) {
|
|
257
|
+
return error;
|
|
258
|
+
}
|
|
259
|
+
if (error.response?.data) {
|
|
260
|
+
const errorData = error.response.data;
|
|
261
|
+
return new common_1.ZaloSDKError(`${defaultMessage}: ${errorData.message || errorData.error || "Unknown error"}`, errorData.error || -1, errorData);
|
|
262
|
+
}
|
|
263
|
+
return new common_1.ZaloSDKError(`${defaultMessage}: ${error.message || "Unknown error"}`, -1, error);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
exports.VideoUploadService = VideoUploadService;
|
|
267
|
+
//# sourceMappingURL=video-upload.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video-upload.service.js","sourceRoot":"","sources":["../../src/services/video-upload.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { ZaloClient } from "../clients/zalo-client";
|
|
2
|
+
import { ZNSMessage, ZNSSendResult, ZNSTemplate, ZNSTemplateList, ZNSCreateTemplateRequest, ZNSUpdateTemplateRequest, ZNSUploadImageResult, ZNSHashPhoneMessage, ZNSDevModeMessage, ZNSRsaMessage, ZNSJourneyMessage, ZNSMessageStatusInfo, ZNSQuotaInfo } from "../types/zns";
|
|
3
|
+
/**
|
|
4
|
+
* Service for Zalo Notification Service (ZNS)
|
|
5
|
+
*
|
|
6
|
+
* Requirements for using ZNS API:
|
|
7
|
+
* - Official Account must be approved and have ZNS sending permission
|
|
8
|
+
* - Valid Official Account access token
|
|
9
|
+
* - ZNS template must be approved before use
|
|
10
|
+
* - Recipient phone number must be in correct format and valid
|
|
11
|
+
* - Template data must match defined parameters
|
|
12
|
+
* - Comply with message quantity limits according to service package
|
|
13
|
+
*
|
|
14
|
+
* Reference: https://developers.zalo.me/docs/zalo-notification-service/
|
|
15
|
+
*/
|
|
16
|
+
export declare class ZNSService {
|
|
17
|
+
private readonly client;
|
|
18
|
+
private readonly znsApiUrl;
|
|
19
|
+
private readonly templateApiUrl;
|
|
20
|
+
constructor(client: ZaloClient);
|
|
21
|
+
/**
|
|
22
|
+
* Send ZNS message
|
|
23
|
+
* @param accessToken OA access token
|
|
24
|
+
* @param message ZNS message data
|
|
25
|
+
* @returns Send result
|
|
26
|
+
*/
|
|
27
|
+
sendMessage(accessToken: string, message: ZNSMessage): Promise<ZNSSendResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Send ZNS message with phone hash
|
|
30
|
+
* @param accessToken OA access token
|
|
31
|
+
* @param message ZNS message with hashed phone
|
|
32
|
+
* @returns Send result
|
|
33
|
+
*/
|
|
34
|
+
sendHashPhoneMessage(accessToken: string, message: ZNSHashPhoneMessage): Promise<ZNSSendResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Send ZNS message in development mode
|
|
37
|
+
* @param accessToken OA access token
|
|
38
|
+
* @param message ZNS dev mode message
|
|
39
|
+
* @returns Send result
|
|
40
|
+
*/
|
|
41
|
+
sendDevModeMessage(accessToken: string, message: ZNSDevModeMessage): Promise<ZNSSendResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Send ZNS message with RSA encryption
|
|
44
|
+
* @param accessToken OA access token
|
|
45
|
+
* @param message ZNS RSA message
|
|
46
|
+
* @returns Send result
|
|
47
|
+
*/
|
|
48
|
+
sendRsaMessage(accessToken: string, message: ZNSRsaMessage): Promise<ZNSSendResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Send ZNS journey message
|
|
51
|
+
* @param accessToken OA access token
|
|
52
|
+
* @param message ZNS journey message
|
|
53
|
+
* @returns Send result
|
|
54
|
+
*/
|
|
55
|
+
sendJourneyMessage(accessToken: string, message: ZNSJourneyMessage): Promise<ZNSSendResult>;
|
|
56
|
+
/**
|
|
57
|
+
* Get ZNS message status
|
|
58
|
+
* @param accessToken OA access token
|
|
59
|
+
* @param messageId Message ID
|
|
60
|
+
* @returns Message status info
|
|
61
|
+
*/
|
|
62
|
+
getMessageStatus(accessToken: string, messageId: string): Promise<ZNSMessageStatusInfo>;
|
|
63
|
+
/**
|
|
64
|
+
* Get ZNS quota information
|
|
65
|
+
* @param accessToken OA access token
|
|
66
|
+
* @returns Quota information
|
|
67
|
+
*/
|
|
68
|
+
getQuotaInfo(accessToken: string): Promise<ZNSQuotaInfo>;
|
|
69
|
+
/**
|
|
70
|
+
* Get ZNS template list
|
|
71
|
+
* @param accessToken OA access token
|
|
72
|
+
* @param offset Offset for pagination
|
|
73
|
+
* @param limit Limit for pagination
|
|
74
|
+
* @returns Template list
|
|
75
|
+
*/
|
|
76
|
+
getTemplateList(accessToken: string, offset?: number, limit?: number): Promise<ZNSTemplateList>;
|
|
77
|
+
/**
|
|
78
|
+
* Get ZNS template details
|
|
79
|
+
* @param accessToken OA access token
|
|
80
|
+
* @param templateId Template ID
|
|
81
|
+
* @returns Template details
|
|
82
|
+
*/
|
|
83
|
+
getTemplateDetails(accessToken: string, templateId: string): Promise<ZNSTemplate>;
|
|
84
|
+
/**
|
|
85
|
+
* Create ZNS template
|
|
86
|
+
* @param accessToken OA access token
|
|
87
|
+
* @param templateData Template creation data
|
|
88
|
+
* @returns Created template
|
|
89
|
+
*/
|
|
90
|
+
createTemplate(accessToken: string, templateData: ZNSCreateTemplateRequest): Promise<ZNSTemplate>;
|
|
91
|
+
/**
|
|
92
|
+
* Update ZNS template
|
|
93
|
+
* @param accessToken OA access token
|
|
94
|
+
* @param templateData Template update data
|
|
95
|
+
* @returns Updated template
|
|
96
|
+
*/
|
|
97
|
+
updateTemplate(accessToken: string, templateData: ZNSUpdateTemplateRequest): Promise<ZNSTemplate>;
|
|
98
|
+
/**
|
|
99
|
+
* Delete ZNS template
|
|
100
|
+
* @param accessToken OA access token
|
|
101
|
+
* @param templateId Template ID
|
|
102
|
+
* @returns Deletion result
|
|
103
|
+
*/
|
|
104
|
+
deleteTemplate(accessToken: string, templateId: string): Promise<{
|
|
105
|
+
success: boolean;
|
|
106
|
+
}>;
|
|
107
|
+
/**
|
|
108
|
+
* Upload image for ZNS template
|
|
109
|
+
* @param accessToken OA access token
|
|
110
|
+
* @param imageFile Image file
|
|
111
|
+
* @returns Upload result
|
|
112
|
+
*/
|
|
113
|
+
uploadImage(accessToken: string, imageFile: Buffer | NodeJS.ReadableStream, filename?: string): Promise<ZNSUploadImageResult>;
|
|
114
|
+
private handleZNSError;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=zns.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zns.service.d.ts","sourceRoot":"","sources":["../../src/services/zns.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,UAAU,EACV,aAAa,EACb,WAAW,EACX,eAAe,EACf,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACb,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;;;;GAYG;AACH,qBAAa,UAAU;IAIT,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8C;IACxE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+C;gBAEjD,MAAM,EAAE,UAAU;IAE/C;;;;;OAKG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,aAAa,CAAC;IAczB;;;;;OAKG;IACG,oBAAoB,CACxB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC;IAczB;;;;;OAKG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC;IAczB;;;;;OAKG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,CAAC;IAczB;;;;;OAKG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC;IAczB;;;;;OAKG;IACG,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,oBAAoB,CAAC;IAgBhC;;;;OAIG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAa9D;;;;;;OAMG;IACG,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,MAAU,EAClB,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,eAAe,CAAC;IAiB3B;;;;;OAKG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC;IAgBvB;;;;;OAKG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,wBAAwB,GACrC,OAAO,CAAC,WAAW,CAAC;IAcvB;;;;;OAKG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,wBAAwB,GACrC,OAAO,CAAC,WAAW,CAAC;IAcvB;;;;;OAKG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAchC;;;;;OAKG;IACG,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,EACzC,QAAQ,GAAE,MAAoB,GAC7B,OAAO,CAAC,oBAAoB,CAAC;IAehC,OAAO,CAAC,cAAc;CAWvB"}
|