@warriorteam/redai-zalo-sdk 1.29.0 → 1.31.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.
@@ -0,0 +1,253 @@
1
+ /**
2
+ * Types cho Consultation Service - Zalo OA API
3
+ *
4
+ * Consultation messages (tin nhắn tư vấn) là loại tin nhắn đặc biệt
5
+ * cho phép OA gửi tin nhắn chủ động đến người dùng trong khung thời gian nhất định
6
+ *
7
+ * API Endpoint: https://openapi.zalo.me/v3.0/oa/message/cs
8
+ * Method: POST
9
+ * Content-Type: application/json
10
+ */
11
+ /**
12
+ * Interface cho template action (default_action trong elements)
13
+ */
14
+ export interface TemplateAction {
15
+ /** Loại action */
16
+ type: "oa.open.url" | "oa.query.show" | "oa.query.hide" | "oa.open.sms" | "oa.open.phone";
17
+ /** URL (cho oa.open.url) */
18
+ url?: string;
19
+ /** Payload string (cho oa.query.show, oa.query.hide) hoặc object (cho oa.open.sms, oa.open.phone) */
20
+ payload?: string | {
21
+ content?: string;
22
+ phone_code?: string;
23
+ } | {
24
+ phone_code?: string;
25
+ };
26
+ }
27
+ /**
28
+ * Interface cho template element
29
+ *
30
+ * Quy tắc elements:
31
+ * - elements là mảng JSON, tối đa 5 phần tử
32
+ * - title: bắt buộc, ≤ 100 ký tự
33
+ * - subtitle: bắt buộc cho element đầu tiên, tùy chọn cho các element sau, ≤ 500 ký tự
34
+ * - image_url: URL ảnh (tùy chọn)
35
+ * - default_action: hành động khi click vào element (tùy chọn)
36
+ */
37
+ export interface TemplateElement {
38
+ /** Tiêu đề (bắt buộc, ≤ 100 ký tự) */
39
+ title: string;
40
+ /** Tiêu đề phụ (bắt buộc cho element đầu tiên, tùy chọn cho các element sau, ≤ 500 ký tự) */
41
+ subtitle?: string;
42
+ /** URL ảnh (tùy chọn) */
43
+ image_url?: string;
44
+ /** Hành động khi click vào element (tùy chọn) */
45
+ default_action?: TemplateAction;
46
+ }
47
+ /**
48
+ * Interface cho template button
49
+ *
50
+ * Quy tắc buttons:
51
+ * - buttons là mảng JSON, tối đa 5 phần tử
52
+ * - title: bắt buộc, ≤ 100 ký tự
53
+ * - type: loại action
54
+ * - payload: dữ liệu của action, phụ thuộc vào loại type
55
+ */
56
+ export interface TemplateButton {
57
+ /** Tiêu đề button (bắt buộc, ≤ 100 ký tự) */
58
+ title: string;
59
+ /** Loại button */
60
+ type: "oa.open.url" | "oa.query.show" | "oa.query.hide" | "oa.open.sms" | "oa.open.phone";
61
+ /** Payload của button, phụ thuộc vào type */
62
+ payload: string | {
63
+ url?: string;
64
+ } | {
65
+ content?: string;
66
+ phone_code?: string;
67
+ } | {
68
+ phone_code?: string;
69
+ };
70
+ }
71
+ /**
72
+ * Interface cho từng tin nhắn trong chuỗi tin nhắn
73
+ */
74
+ export interface MessageItem {
75
+ /** Loại tin nhắn */
76
+ type: "text" | "image" | "gif" | "file" | "sticker" | "request_user_info";
77
+ /** Nội dung tin nhắn (cho text message) */
78
+ text?: string;
79
+ /** URL hình ảnh (cho image/gif message) */
80
+ imageUrl?: string;
81
+ /** URL GIF (cho gif message) */
82
+ gifUrl?: string;
83
+ /** Chiều rộng GIF (bắt buộc cho gif) */
84
+ width?: number;
85
+ /** Chiều cao GIF (bắt buộc cho gif) */
86
+ height?: number;
87
+ /** Token file (cho file message) */
88
+ fileToken?: string;
89
+ /** Attachment ID (cho image/sticker message) */
90
+ attachmentId?: string;
91
+ /** Sticker attachment ID (cho sticker message) */
92
+ stickerAttachmentId?: string;
93
+ /** Tiêu đề (cho request_user_info message) */
94
+ title?: string;
95
+ /** Tiêu đề phụ (cho request_user_info message) */
96
+ subtitle?: string;
97
+ /** Delay sau khi gửi tin nhắn này (milliseconds) */
98
+ delay?: number;
99
+ }
100
+ /**
101
+ * Interface cho request gửi chuỗi tin nhắn
102
+ */
103
+ export interface SendMessageSequenceRequest {
104
+ /** Access token của Official Account */
105
+ accessToken: string;
106
+ /** ID người nhận */
107
+ userId: string;
108
+ /** Danh sách tin nhắn */
109
+ messages: MessageItem[];
110
+ /** Delay mặc định giữa các tin nhắn (milliseconds) - nếu không có delay riêng */
111
+ defaultDelay?: number;
112
+ }
113
+ /**
114
+ * Interface cho response gửi chuỗi tin nhắn
115
+ */
116
+ export interface SendMessageSequenceResponse {
117
+ /** Tổng số tin nhắn đã gửi thành công */
118
+ successCount: number;
119
+ /** Tổng số tin nhắn thất bại */
120
+ failureCount: number;
121
+ /** Chi tiết kết quả từng tin nhắn */
122
+ results: Array<{
123
+ /** Index của tin nhắn trong danh sách */
124
+ index: number;
125
+ /** Loại tin nhắn */
126
+ type: string;
127
+ /** Trạng thái gửi */
128
+ success: boolean;
129
+ /** Thông tin response nếu thành công */
130
+ response?: any;
131
+ /** Thông tin lỗi nếu thất bại */
132
+ error?: string;
133
+ /** Thời gian gửi */
134
+ timestamp: number;
135
+ }>;
136
+ /** Tổng thời gian thực hiện (milliseconds) */
137
+ totalDuration: number;
138
+ }
139
+ /**
140
+ * Interface cho request gửi chuỗi tin nhắn tới nhiều users
141
+ */
142
+ export interface SendMessageSequenceToMultipleUsersRequest {
143
+ /** Access token của Official Account */
144
+ accessToken: string;
145
+ /** Danh sách user IDs */
146
+ userIds: string[];
147
+ /** Danh sách tin nhắn */
148
+ messages: MessageItem[];
149
+ /** Delay mặc định giữa các tin nhắn (milliseconds) */
150
+ defaultDelay?: number;
151
+ /** Delay giữa các user (milliseconds) để tránh rate limit */
152
+ delayBetweenUsers?: number;
153
+ /** Callback function để tracking tiến trình */
154
+ onProgress?: (progress: UserProgressInfo) => void;
155
+ }
156
+ /**
157
+ * Interface cho thông tin tiến trình từng user
158
+ */
159
+ export interface UserProgressInfo {
160
+ /** User ID hiện tại */
161
+ userId: string;
162
+ /** Index của user trong danh sách (bắt đầu từ 0) */
163
+ userIndex: number;
164
+ /** Tổng số users */
165
+ totalUsers: number;
166
+ /** Trạng thái: 'started' | 'completed' | 'failed' */
167
+ status: 'started' | 'completed' | 'failed';
168
+ /** Kết quả gửi tin nhắn (nếu đã hoàn thành) */
169
+ result?: SendMessageSequenceResponse;
170
+ /** Thông tin lỗi (nếu thất bại) */
171
+ error?: string;
172
+ /** Thời gian bắt đầu */
173
+ startTime: number;
174
+ /** Thời gian kết thúc (nếu đã hoàn thành) */
175
+ endTime?: number;
176
+ }
177
+ /**
178
+ * Interface cho response gửi chuỗi tin nhắn tới nhiều users
179
+ */
180
+ export interface SendMessageSequenceToMultipleUsersResponse {
181
+ /** Tổng số users */
182
+ totalUsers: number;
183
+ /** Số users gửi thành công */
184
+ successfulUsers: number;
185
+ /** Số users gửi thất bại */
186
+ failedUsers: number;
187
+ /** Chi tiết kết quả từng user */
188
+ userResults: Array<{
189
+ /** User ID */
190
+ userId: string;
191
+ /** Index của user trong danh sách */
192
+ userIndex: number;
193
+ /** Trạng thái gửi cho user này */
194
+ success: boolean;
195
+ /** Kết quả chi tiết gửi tin nhắn */
196
+ messageSequenceResult?: SendMessageSequenceResponse;
197
+ /** Thông tin lỗi nếu thất bại */
198
+ error?: string;
199
+ /** Thời gian bắt đầu gửi */
200
+ startTime: number;
201
+ /** Thời gian kết thúc */
202
+ endTime: number;
203
+ /** Thời gian thực hiện (milliseconds) */
204
+ duration: number;
205
+ }>;
206
+ /** Tổng thời gian thực hiện (milliseconds) */
207
+ totalDuration: number;
208
+ /** Thống kê tin nhắn tổng cộng */
209
+ messageStats: {
210
+ /** Tổng số tin nhắn đã gửi thành công */
211
+ totalSuccessfulMessages: number;
212
+ /** Tổng số tin nhắn thất bại */
213
+ totalFailedMessages: number;
214
+ /** Tổng số tin nhắn */
215
+ totalMessages: number;
216
+ };
217
+ }
218
+ /**
219
+ * Các loại template action types
220
+ */
221
+ export type TemplateActionType = "oa.open.url" | "oa.query.show" | "oa.query.hide" | "oa.open.sms" | "oa.open.phone";
222
+ /**
223
+ * Các loại template button types (giống với action types)
224
+ */
225
+ export type TemplateButtonType = TemplateActionType;
226
+ /**
227
+ * Payload cho URL action/button
228
+ */
229
+ export interface UrlPayload {
230
+ url: string;
231
+ }
232
+ /**
233
+ * Payload cho SMS action/button
234
+ */
235
+ export interface SmsPayload {
236
+ phone_code: string;
237
+ content?: string;
238
+ }
239
+ /**
240
+ * Payload cho Phone action/button
241
+ */
242
+ export interface PhonePayload {
243
+ phone_code: string;
244
+ }
245
+ /**
246
+ * Union type cho tất cả các loại payload
247
+ */
248
+ export type ConsultationTemplatePayload = string | UrlPayload | SmsPayload | PhonePayload;
249
+ /**
250
+ * Template types được hỗ trợ
251
+ */
252
+ export type TemplateType = "request_user_info" | "media" | string;
253
+ //# sourceMappingURL=consultation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consultation.d.ts","sourceRoot":"","sources":["../../src/types/consultation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ /**
3
+ * Types cho Consultation Service - Zalo OA API
4
+ *
5
+ * Consultation messages (tin nhắn tư vấn) là loại tin nhắn đặc biệt
6
+ * cho phép OA gửi tin nhắn chủ động đến người dùng trong khung thời gian nhất định
7
+ *
8
+ * API Endpoint: https://openapi.zalo.me/v3.0/oa/message/cs
9
+ * Method: POST
10
+ * Content-Type: application/json
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ //# sourceMappingURL=consultation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consultation.js","sourceRoot":"","sources":["../../src/types/consultation.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Purchase API types for Zalo Official Account
3
+ *
4
+ * API để tạo đơn hàng mua sản phẩm/dịch vụ OA
5
+ * Yêu cầu: Ứng dụng cần được cấp quyền quản lý "Mua sản phẩm dịch vụ OA"
6
+ */
7
+ /**
8
+ * Beneficiary types - Đối tượng thụ hưởng
9
+ */
10
+ export type BeneficiaryType = "OA" | "APP";
11
+ /**
12
+ * Request để tạo đơn hàng với product_id
13
+ */
14
+ export interface CreateOrderWithProductRequest {
15
+ /**
16
+ * Đối tượng được thụ hưởng khi mua đơn hàng
17
+ * - OA: Official Account
18
+ * - APP: Application
19
+ * Lưu ý: Mỗi sản phẩm sẽ quy định đối tượng khả dụng riêng
20
+ */
21
+ beneficiary: BeneficiaryType;
22
+ /**
23
+ * ID của sản phẩm muốn mua
24
+ * Chỉ sử dụng product_id HOẶC redeem_code, không được dùng cả hai
25
+ */
26
+ product_id: number;
27
+ /**
28
+ * Mã giảm giá (tùy chọn)
29
+ * VD: Giảm 100K, Giảm 10%, ...
30
+ */
31
+ voucher_code?: string;
32
+ }
33
+ /**
34
+ * Request để tạo đơn hàng với redeem_code
35
+ */
36
+ export interface CreateOrderWithRedeemRequest {
37
+ /**
38
+ * Đối tượng được thụ hưởng khi mua đơn hàng
39
+ */
40
+ beneficiary: BeneficiaryType;
41
+ /**
42
+ * Mã quà tặng
43
+ * Chỉ sử dụng product_id HOẶC redeem_code, không được dùng cả hai
44
+ */
45
+ redeem_code: string;
46
+ /**
47
+ * Mã giảm giá (tùy chọn)
48
+ */
49
+ voucher_code?: string;
50
+ }
51
+ /**
52
+ * Union type cho request tạo đơn hàng
53
+ */
54
+ export type CreateOrderRequest = CreateOrderWithProductRequest | CreateOrderWithRedeemRequest;
55
+ /**
56
+ * Response data khi tạo đơn hàng thành công
57
+ */
58
+ export interface OrderData {
59
+ /**
60
+ * ID đơn hàng
61
+ * Lưu ý: Order chỉ được tạo từ 00:01 đến 23h54
62
+ */
63
+ order_id: string;
64
+ /**
65
+ * Loại đối tượng thụ hưởng
66
+ */
67
+ beneficiary_type: BeneficiaryType;
68
+ /**
69
+ * ID của OA (nếu beneficiary_type = OA) hoặc ID của App (nếu beneficiary_type = APP)
70
+ */
71
+ beneficiary_id: number;
72
+ /**
73
+ * ID sản phẩm
74
+ */
75
+ product_id: number;
76
+ /**
77
+ * Tên sản phẩm
78
+ */
79
+ product_name: string;
80
+ /**
81
+ * Tài khoản ZCA thanh toán đơn hàng
82
+ */
83
+ zca_id: number;
84
+ /**
85
+ * Voucher code đã được sử dụng (nếu có)
86
+ */
87
+ voucher_code?: string;
88
+ /**
89
+ * Mã quà tặng (nếu có)
90
+ */
91
+ redeem_code?: string;
92
+ /**
93
+ * Giá trị của voucher_code
94
+ * VD: Giảm 10% hay Giảm 100K, ...
95
+ */
96
+ discount?: number;
97
+ /**
98
+ * Giá tiền của đơn hàng (chưa áp dụng mã giảm giá)
99
+ */
100
+ amount: number;
101
+ /**
102
+ * Giá tiền chính thức sau khi đã sử dụng mã giảm giá
103
+ */
104
+ final_amount: number;
105
+ /**
106
+ * Thời điểm tạo đơn hàng, tính bằng millisecond
107
+ */
108
+ created_time: number;
109
+ /**
110
+ * OTT - One Time Token
111
+ * Mã xác thực dùng để xác nhận thanh toán đơn hàng
112
+ * Sử dụng tại API xác nhận thanh toán đơn hàng
113
+ * OTT sẽ có hiệu lực trong vòng 5 phút kể từ khi Order được khởi tạo
114
+ */
115
+ verified_token: string;
116
+ }
117
+ /**
118
+ * Response khi tạo đơn hàng thành công
119
+ */
120
+ export interface CreateOrderResponse {
121
+ error: 0;
122
+ message: "Success";
123
+ data: OrderData;
124
+ }
125
+ /**
126
+ * Helper type để kiểm tra request type
127
+ */
128
+ export declare function isProductOrderRequest(request: CreateOrderRequest): request is CreateOrderWithProductRequest;
129
+ /**
130
+ * Helper type để kiểm tra request type
131
+ */
132
+ export declare function isRedeemOrderRequest(request: CreateOrderRequest): request is CreateOrderWithRedeemRequest;
133
+ /**
134
+ * Validation errors cho Purchase API
135
+ */
136
+ export interface PurchaseValidationError {
137
+ field: string;
138
+ message: string;
139
+ }
140
+ /**
141
+ * Request để xác nhận thanh toán đơn hàng
142
+ */
143
+ export interface ConfirmOrderRequest {
144
+ /**
145
+ * ID đơn hàng
146
+ * Lấy từ response của API tạo đơn hàng
147
+ */
148
+ order_id: string;
149
+ /**
150
+ * OTT - One Time Token
151
+ * Mã xác thực dùng để xác nhận thanh toán đơn hàng
152
+ * Lấy từ response của API tạo đơn hàng
153
+ * OTT sẽ có hiệu lực trong vòng 5 phút kể từ khi Order được khởi tạo
154
+ */
155
+ verified_token: string;
156
+ }
157
+ /**
158
+ * Response data khi xác nhận thanh toán đơn hàng thành công
159
+ * Lưu ý: Response không có verified_token như khi tạo đơn hàng
160
+ */
161
+ export interface ConfirmedOrderData {
162
+ /**
163
+ * ID đơn hàng
164
+ */
165
+ order_id: string;
166
+ /**
167
+ * Loại đối tượng thụ hưởng
168
+ */
169
+ beneficiary_type: BeneficiaryType;
170
+ /**
171
+ * ID của OA (nếu beneficiary_type = OA) hoặc ID của App (nếu beneficiary_type = APP)
172
+ */
173
+ beneficiary_id: number;
174
+ /**
175
+ * ID sản phẩm
176
+ */
177
+ product_id: number;
178
+ /**
179
+ * Tên sản phẩm
180
+ */
181
+ product_name: string;
182
+ /**
183
+ * Tài khoản ZCA thanh toán đơn hàng
184
+ */
185
+ zca_id: number;
186
+ /**
187
+ * Voucher code đã được sử dụng (nếu có)
188
+ */
189
+ voucher_code?: string;
190
+ /**
191
+ * Mã quà tặng (nếu có)
192
+ */
193
+ redeem_code?: string;
194
+ /**
195
+ * Giá trị của voucher_code
196
+ * VD: Giảm 10% hay Giảm 100K, ...
197
+ */
198
+ discount?: number;
199
+ /**
200
+ * Giá tiền của đơn hàng (chưa áp dụng mã giảm giá)
201
+ */
202
+ amount: number;
203
+ /**
204
+ * Giá tiền chính thức sau khi đã sử dụng mã giảm giá
205
+ */
206
+ final_amount: number;
207
+ /**
208
+ * Thời điểm tạo đơn hàng, tính bằng millisecond
209
+ */
210
+ created_time: number;
211
+ }
212
+ /**
213
+ * Response khi xác nhận thanh toán đơn hàng thành công
214
+ */
215
+ export interface ConfirmOrderResponse {
216
+ error: 0;
217
+ message: "Success";
218
+ data: ConfirmedOrderData;
219
+ }
220
+ /**
221
+ * Danh sách sản phẩm OA có sẵn
222
+ */
223
+ export declare const OA_PRODUCTS: {
224
+ readonly OA_ADVANCED_6M: 866836109767958100;
225
+ readonly OA_ADVANCED_12M: 1302963828004138500;
226
+ readonly OA_PREMIUM_6M: 757295129578622300;
227
+ readonly OA_PREMIUM_12M: 3071996459978069000;
228
+ readonly GMF_10_MEMBERS: 739448264820568800;
229
+ readonly GMF_50_MEMBERS: 2405469629611791400;
230
+ readonly GMF_100_MEMBERS: 2275350247265190700;
231
+ readonly GMF_1000_MEMBERS: 3678557233392100000;
232
+ readonly TRANSACTION_5K: 4609774892111012000;
233
+ readonly TRANSACTION_50K: 2038298593847789600;
234
+ readonly TRANSACTION_500K: 2544831667685732000;
235
+ };
236
+ /**
237
+ * Thông tin chi tiết sản phẩm
238
+ */
239
+ export interface ProductInfo {
240
+ id: number;
241
+ name: string;
242
+ beneficiary: BeneficiaryType[];
243
+ category: 'subscription' | 'gmf' | 'quota';
244
+ }
245
+ /**
246
+ * Danh sách thông tin chi tiết sản phẩm
247
+ */
248
+ export declare const PRODUCT_INFO: Record<number, ProductInfo>;
249
+ /**
250
+ * Purchase API error codes
251
+ */
252
+ export declare enum PurchaseErrorCode {
253
+ INVALID_BENEFICIARY = 1001,
254
+ INVALID_PRODUCT_ID = 1002,
255
+ INVALID_REDEEM_CODE = 1003,
256
+ INVALID_VOUCHER_CODE = 1004,
257
+ PRODUCT_NOT_AVAILABLE = 1005,
258
+ INSUFFICIENT_BALANCE = 1006,
259
+ ORDER_TIME_RESTRICTED = 1007,
260
+ DUPLICATE_ORDER = 1008,
261
+ PERMISSION_DENIED = 1009,
262
+ INVALID_ORDER_ID = 1010,
263
+ INVALID_VERIFIED_TOKEN = 1011,
264
+ ORDER_EXPIRED = 1012,
265
+ ORDER_ALREADY_CONFIRMED = 1013,
266
+ SYSTEM_ERROR = 9999
267
+ }
268
+ //# sourceMappingURL=purchase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purchase.d.ts","sourceRoot":"","sources":["../../src/types/purchase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ /**
3
+ * Purchase API types for Zalo Official Account
4
+ *
5
+ * API để tạo đơn hàng mua sản phẩm/dịch vụ OA
6
+ * Yêu cầu: Ứng dụng cần được cấp quyền quản lý "Mua sản phẩm dịch vụ OA"
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PurchaseErrorCode = exports.PRODUCT_INFO = exports.OA_PRODUCTS = void 0;
10
+ exports.isProductOrderRequest = isProductOrderRequest;
11
+ exports.isRedeemOrderRequest = isRedeemOrderRequest;
12
+ /**
13
+ * Helper type để kiểm tra request type
14
+ */
15
+ function isProductOrderRequest(request) {
16
+ return 'product_id' in request;
17
+ }
18
+ /**
19
+ * Helper type để kiểm tra request type
20
+ */
21
+ function isRedeemOrderRequest(request) {
22
+ return 'redeem_code' in request;
23
+ }
24
+ /**
25
+ * Danh sách sản phẩm OA có sẵn
26
+ */
27
+ exports.OA_PRODUCTS = {
28
+ // Sản phẩm OA Subscription
29
+ OA_ADVANCED_6M: 866836109767958135,
30
+ OA_ADVANCED_12M: 1302963828004138542,
31
+ OA_PREMIUM_6M: 757295129578622372,
32
+ OA_PREMIUM_12M: 3071996459978068910,
33
+ // Sản phẩm Quota khởi tạo GMF
34
+ GMF_10_MEMBERS: 739448264820568793,
35
+ GMF_50_MEMBERS: 2405469629611791306,
36
+ GMF_100_MEMBERS: 2275350247265190619,
37
+ GMF_1000_MEMBERS: 3678557233392100095,
38
+ // Sản phẩm Gói quota tin nhắn OA
39
+ TRANSACTION_5K: 4609774892111011697,
40
+ TRANSACTION_50K: 2038298593847789538,
41
+ TRANSACTION_500K: 2544831667685731909,
42
+ };
43
+ /**
44
+ * Danh sách thông tin chi tiết sản phẩm
45
+ */
46
+ exports.PRODUCT_INFO = {
47
+ // OA Subscription
48
+ [exports.OA_PRODUCTS.OA_ADVANCED_6M]: {
49
+ id: exports.OA_PRODUCTS.OA_ADVANCED_6M,
50
+ name: "Gói OA Nâng cao 6 tháng",
51
+ beneficiary: ["OA"],
52
+ category: "subscription"
53
+ },
54
+ [exports.OA_PRODUCTS.OA_ADVANCED_12M]: {
55
+ id: exports.OA_PRODUCTS.OA_ADVANCED_12M,
56
+ name: "Gói OA Nâng cao 12 tháng",
57
+ beneficiary: ["OA"],
58
+ category: "subscription"
59
+ },
60
+ [exports.OA_PRODUCTS.OA_PREMIUM_6M]: {
61
+ id: exports.OA_PRODUCTS.OA_PREMIUM_6M,
62
+ name: "Gói OA Premium 6 tháng",
63
+ beneficiary: ["OA"],
64
+ category: "subscription"
65
+ },
66
+ [exports.OA_PRODUCTS.OA_PREMIUM_12M]: {
67
+ id: exports.OA_PRODUCTS.OA_PREMIUM_12M,
68
+ name: "Gói OA Premium 12 tháng",
69
+ beneficiary: ["OA"],
70
+ category: "subscription"
71
+ },
72
+ // GMF Products
73
+ [exports.OA_PRODUCTS.GMF_10_MEMBERS]: {
74
+ id: exports.OA_PRODUCTS.GMF_10_MEMBERS,
75
+ name: "GMF tối đa 10 thành viên",
76
+ beneficiary: ["OA"],
77
+ category: "gmf"
78
+ },
79
+ [exports.OA_PRODUCTS.GMF_50_MEMBERS]: {
80
+ id: exports.OA_PRODUCTS.GMF_50_MEMBERS,
81
+ name: "GMF tối đa 50 thành viên",
82
+ beneficiary: ["OA"],
83
+ category: "gmf"
84
+ },
85
+ [exports.OA_PRODUCTS.GMF_100_MEMBERS]: {
86
+ id: exports.OA_PRODUCTS.GMF_100_MEMBERS,
87
+ name: "GMF tối đa 100 thành viên",
88
+ beneficiary: ["OA"],
89
+ category: "gmf"
90
+ },
91
+ [exports.OA_PRODUCTS.GMF_1000_MEMBERS]: {
92
+ id: exports.OA_PRODUCTS.GMF_1000_MEMBERS,
93
+ name: "GMF tối đa 1000 thành viên",
94
+ beneficiary: ["OA"],
95
+ category: "gmf"
96
+ },
97
+ // Transaction Quota
98
+ [exports.OA_PRODUCTS.TRANSACTION_5K]: {
99
+ id: exports.OA_PRODUCTS.TRANSACTION_5K,
100
+ name: "Gói 5k tin Giao dịch (1 tháng)",
101
+ beneficiary: ["APP", "OA"],
102
+ category: "quota"
103
+ },
104
+ [exports.OA_PRODUCTS.TRANSACTION_50K]: {
105
+ id: exports.OA_PRODUCTS.TRANSACTION_50K,
106
+ name: "Gói 50k tin Giao dịch (1 tháng)",
107
+ beneficiary: ["APP", "OA"],
108
+ category: "quota"
109
+ },
110
+ [exports.OA_PRODUCTS.TRANSACTION_500K]: {
111
+ id: exports.OA_PRODUCTS.TRANSACTION_500K,
112
+ name: "Gói 500k tin Giao dịch (1 tháng)",
113
+ beneficiary: ["APP", "OA"],
114
+ category: "quota"
115
+ },
116
+ };
117
+ /**
118
+ * Purchase API error codes
119
+ */
120
+ var PurchaseErrorCode;
121
+ (function (PurchaseErrorCode) {
122
+ PurchaseErrorCode[PurchaseErrorCode["INVALID_BENEFICIARY"] = 1001] = "INVALID_BENEFICIARY";
123
+ PurchaseErrorCode[PurchaseErrorCode["INVALID_PRODUCT_ID"] = 1002] = "INVALID_PRODUCT_ID";
124
+ PurchaseErrorCode[PurchaseErrorCode["INVALID_REDEEM_CODE"] = 1003] = "INVALID_REDEEM_CODE";
125
+ PurchaseErrorCode[PurchaseErrorCode["INVALID_VOUCHER_CODE"] = 1004] = "INVALID_VOUCHER_CODE";
126
+ PurchaseErrorCode[PurchaseErrorCode["PRODUCT_NOT_AVAILABLE"] = 1005] = "PRODUCT_NOT_AVAILABLE";
127
+ PurchaseErrorCode[PurchaseErrorCode["INSUFFICIENT_BALANCE"] = 1006] = "INSUFFICIENT_BALANCE";
128
+ PurchaseErrorCode[PurchaseErrorCode["ORDER_TIME_RESTRICTED"] = 1007] = "ORDER_TIME_RESTRICTED";
129
+ PurchaseErrorCode[PurchaseErrorCode["DUPLICATE_ORDER"] = 1008] = "DUPLICATE_ORDER";
130
+ PurchaseErrorCode[PurchaseErrorCode["PERMISSION_DENIED"] = 1009] = "PERMISSION_DENIED";
131
+ PurchaseErrorCode[PurchaseErrorCode["INVALID_ORDER_ID"] = 1010] = "INVALID_ORDER_ID";
132
+ PurchaseErrorCode[PurchaseErrorCode["INVALID_VERIFIED_TOKEN"] = 1011] = "INVALID_VERIFIED_TOKEN";
133
+ PurchaseErrorCode[PurchaseErrorCode["ORDER_EXPIRED"] = 1012] = "ORDER_EXPIRED";
134
+ PurchaseErrorCode[PurchaseErrorCode["ORDER_ALREADY_CONFIRMED"] = 1013] = "ORDER_ALREADY_CONFIRMED";
135
+ PurchaseErrorCode[PurchaseErrorCode["SYSTEM_ERROR"] = 9999] = "SYSTEM_ERROR";
136
+ })(PurchaseErrorCode || (exports.PurchaseErrorCode = PurchaseErrorCode = {}));
137
+ //# sourceMappingURL=purchase.js.map