@congminh1254/shopee-sdk 1.6.2 → 1.7.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.
Files changed (154) hide show
  1. package/README.md +9 -3
  2. package/lib/__tests__/errors.test.d.ts +1 -0
  3. package/lib/__tests__/errors.test.js +49 -0
  4. package/lib/__tests__/errors.test.js.map +1 -0
  5. package/lib/__tests__/fetch.test.d.ts +1 -0
  6. package/lib/__tests__/fetch.test.js +494 -0
  7. package/lib/__tests__/fetch.test.js.map +1 -0
  8. package/lib/__tests__/integration.test.d.ts +1 -0
  9. package/lib/__tests__/integration.test.js +201 -0
  10. package/lib/__tests__/integration.test.js.map +1 -0
  11. package/lib/__tests__/managers/account-health.manager.test.d.ts +1 -0
  12. package/lib/__tests__/managers/account-health.manager.test.js +446 -0
  13. package/lib/__tests__/managers/account-health.manager.test.js.map +1 -0
  14. package/lib/__tests__/managers/add-on-deal.manager.test.d.ts +1 -0
  15. package/lib/__tests__/managers/add-on-deal.manager.test.js +636 -0
  16. package/lib/__tests__/managers/add-on-deal.manager.test.js.map +1 -0
  17. package/lib/__tests__/managers/ads.manager.test.d.ts +1 -0
  18. package/lib/__tests__/managers/ads.manager.test.js +1016 -0
  19. package/lib/__tests__/managers/ads.manager.test.js.map +1 -0
  20. package/lib/__tests__/managers/ams.manager.test.d.ts +1 -0
  21. package/lib/__tests__/managers/ams.manager.test.js +1170 -0
  22. package/lib/__tests__/managers/ams.manager.test.js.map +1 -0
  23. package/lib/__tests__/managers/auth.manager.test.d.ts +1 -0
  24. package/lib/__tests__/managers/auth.manager.test.js +193 -0
  25. package/lib/__tests__/managers/auth.manager.test.js.map +1 -0
  26. package/lib/__tests__/managers/bundle-deal.manager.test.d.ts +1 -0
  27. package/lib/__tests__/managers/bundle-deal.manager.test.js +465 -0
  28. package/lib/__tests__/managers/bundle-deal.manager.test.js.map +1 -0
  29. package/lib/__tests__/managers/discount.manager.test.d.ts +1 -0
  30. package/lib/__tests__/managers/discount.manager.test.js +615 -0
  31. package/lib/__tests__/managers/discount.manager.test.js.map +1 -0
  32. package/lib/__tests__/managers/fbs.manager.test.d.ts +1 -0
  33. package/lib/__tests__/managers/fbs.manager.test.js +349 -0
  34. package/lib/__tests__/managers/fbs.manager.test.js.map +1 -0
  35. package/lib/__tests__/managers/first-mile.manager.test.d.ts +1 -0
  36. package/lib/__tests__/managers/first-mile.manager.test.js +629 -0
  37. package/lib/__tests__/managers/first-mile.manager.test.js.map +1 -0
  38. package/lib/__tests__/managers/follow-prize.manager.test.d.ts +1 -0
  39. package/lib/__tests__/managers/follow-prize.manager.test.js +408 -0
  40. package/lib/__tests__/managers/follow-prize.manager.test.js.map +1 -0
  41. package/lib/__tests__/managers/global-product.manager.test.d.ts +1 -0
  42. package/lib/__tests__/managers/global-product.manager.test.js +1253 -0
  43. package/lib/__tests__/managers/global-product.manager.test.js.map +1 -0
  44. package/lib/__tests__/managers/livestream.manager.test.d.ts +1 -0
  45. package/lib/__tests__/managers/livestream.manager.test.js +877 -0
  46. package/lib/__tests__/managers/livestream.manager.test.js.map +1 -0
  47. package/lib/__tests__/managers/logistics.manager.test.d.ts +1 -0
  48. package/lib/__tests__/managers/logistics.manager.test.js +1125 -0
  49. package/lib/__tests__/managers/logistics.manager.test.js.map +1 -0
  50. package/lib/__tests__/managers/media-space.manager.test.d.ts +1 -0
  51. package/lib/__tests__/managers/media-space.manager.test.js +556 -0
  52. package/lib/__tests__/managers/media-space.manager.test.js.map +1 -0
  53. package/lib/__tests__/managers/media.manager.test.d.ts +1 -0
  54. package/lib/__tests__/managers/media.manager.test.js +681 -0
  55. package/lib/__tests__/managers/media.manager.test.js.map +1 -0
  56. package/lib/__tests__/managers/merchant.manager.test.d.ts +1 -0
  57. package/lib/__tests__/managers/merchant.manager.test.js +328 -0
  58. package/lib/__tests__/managers/merchant.manager.test.js.map +1 -0
  59. package/lib/__tests__/managers/order.manager.test.d.ts +1 -0
  60. package/lib/__tests__/managers/order.manager.test.js +937 -0
  61. package/lib/__tests__/managers/order.manager.test.js.map +1 -0
  62. package/lib/__tests__/managers/payment.manager.test.d.ts +1 -0
  63. package/lib/__tests__/managers/payment.manager.test.js +1167 -0
  64. package/lib/__tests__/managers/payment.manager.test.js.map +1 -0
  65. package/lib/__tests__/managers/product.manager.test.d.ts +1 -0
  66. package/lib/__tests__/managers/product.manager.test.js +2247 -0
  67. package/lib/__tests__/managers/product.manager.test.js.map +1 -0
  68. package/lib/__tests__/managers/public.manager.test.d.ts +1 -0
  69. package/lib/__tests__/managers/public.manager.test.js +209 -0
  70. package/lib/__tests__/managers/public.manager.test.js.map +1 -0
  71. package/lib/__tests__/managers/push.manager.test.d.ts +1 -0
  72. package/lib/__tests__/managers/push.manager.test.js +244 -0
  73. package/lib/__tests__/managers/push.manager.test.js.map +1 -0
  74. package/lib/__tests__/managers/returns.manager.test.d.ts +1 -0
  75. package/lib/__tests__/managers/returns.manager.test.js +783 -0
  76. package/lib/__tests__/managers/returns.manager.test.js.map +1 -0
  77. package/lib/__tests__/managers/sbs.manager.test.d.ts +1 -0
  78. package/lib/__tests__/managers/sbs.manager.test.js +492 -0
  79. package/lib/__tests__/managers/sbs.manager.test.js.map +1 -0
  80. package/lib/__tests__/managers/shop-category.manager.test.d.ts +1 -0
  81. package/lib/__tests__/managers/shop-category.manager.test.js +425 -0
  82. package/lib/__tests__/managers/shop-category.manager.test.js.map +1 -0
  83. package/lib/__tests__/managers/shop-flash-sale.manager.test.d.ts +1 -0
  84. package/lib/__tests__/managers/shop-flash-sale.manager.test.js +492 -0
  85. package/lib/__tests__/managers/shop-flash-sale.manager.test.js.map +1 -0
  86. package/lib/__tests__/managers/shop.manager.test.d.ts +1 -0
  87. package/lib/__tests__/managers/shop.manager.test.js +637 -0
  88. package/lib/__tests__/managers/shop.manager.test.js.map +1 -0
  89. package/lib/__tests__/managers/top-picks.manager.test.d.ts +1 -0
  90. package/lib/__tests__/managers/top-picks.manager.test.js +324 -0
  91. package/lib/__tests__/managers/top-picks.manager.test.js.map +1 -0
  92. package/lib/__tests__/managers/video.manager.test.d.ts +1 -0
  93. package/lib/__tests__/managers/video.manager.test.js +1039 -0
  94. package/lib/__tests__/managers/video.manager.test.js.map +1 -0
  95. package/lib/__tests__/managers/voucher.manager.test.d.ts +1 -0
  96. package/lib/__tests__/managers/voucher.manager.test.js +442 -0
  97. package/lib/__tests__/managers/voucher.manager.test.js.map +1 -0
  98. package/lib/__tests__/sdk.test.d.ts +1 -0
  99. package/lib/__tests__/sdk.test.js +227 -0
  100. package/lib/__tests__/sdk.test.js.map +1 -0
  101. package/lib/__tests__/storage/custom-token-storage.test.d.ts +1 -0
  102. package/lib/__tests__/storage/custom-token-storage.test.js +337 -0
  103. package/lib/__tests__/storage/custom-token-storage.test.js.map +1 -0
  104. package/lib/__tests__/utils/signature.test.d.ts +1 -0
  105. package/lib/__tests__/utils/signature.test.js +38 -0
  106. package/lib/__tests__/utils/signature.test.js.map +1 -0
  107. package/lib/__tests__/utils/spec-audit.test.d.ts +1 -0
  108. package/lib/__tests__/utils/spec-audit.test.js +176 -0
  109. package/lib/__tests__/utils/spec-audit.test.js.map +1 -0
  110. package/lib/errors.js +2 -0
  111. package/lib/errors.js.map +1 -1
  112. package/lib/fetch.js +1 -1
  113. package/lib/fetch.js.map +1 -1
  114. package/lib/managers/ads.manager.d.ts +1 -41
  115. package/lib/managers/ads.manager.js +0 -54
  116. package/lib/managers/ads.manager.js.map +1 -1
  117. package/lib/managers/auth.manager.d.ts +2 -1
  118. package/lib/managers/auth.manager.js +2 -5
  119. package/lib/managers/auth.manager.js.map +1 -1
  120. package/lib/managers/base.manager.js +1 -0
  121. package/lib/managers/base.manager.js.map +1 -1
  122. package/lib/managers/media.manager.d.ts +36 -1
  123. package/lib/managers/media.manager.js +68 -0
  124. package/lib/managers/media.manager.js.map +1 -1
  125. package/lib/managers/order.manager.js +1 -0
  126. package/lib/managers/order.manager.js.map +1 -1
  127. package/lib/managers/payment.manager.d.ts +13 -1
  128. package/lib/managers/payment.manager.js +26 -0
  129. package/lib/managers/payment.manager.js.map +1 -1
  130. package/lib/managers/product.manager.js +1 -1
  131. package/lib/managers/product.manager.js.map +1 -1
  132. package/lib/schemas/ads.d.ts +2 -56
  133. package/lib/schemas/ams.d.ts +92 -0
  134. package/lib/schemas/base.d.ts +2 -0
  135. package/lib/schemas/discount.d.ts +4 -0
  136. package/lib/schemas/fetch.d.ts +1 -1
  137. package/lib/schemas/livestream.d.ts +14 -0
  138. package/lib/schemas/media.d.ts +107 -0
  139. package/lib/schemas/merchant.d.ts +2 -0
  140. package/lib/schemas/order.d.ts +22 -0
  141. package/lib/schemas/payment.d.ts +96 -0
  142. package/lib/schemas/product.d.ts +253 -15
  143. package/lib/schemas/public.d.ts +3 -0
  144. package/lib/schemas/returns.d.ts +38 -1
  145. package/lib/schemas/shop.d.ts +16 -0
  146. package/lib/schemas/video.d.ts +83 -37
  147. package/lib/schemas/voucher.d.ts +2 -0
  148. package/lib/sdk.js +31 -0
  149. package/lib/sdk.js.map +1 -1
  150. package/lib/storage/custom-token-storage.js +2 -0
  151. package/lib/storage/custom-token-storage.js.map +1 -1
  152. package/lib/version.d.ts +1 -1
  153. package/lib/version.js +1 -1
  154. package/package.json +3 -3
@@ -0,0 +1,681 @@
1
+ import { jest } from "@jest/globals";
2
+ import { MediaManager } from "../../managers/media.manager.js";
3
+ import { ShopeeRegion } from "../../schemas/region.js";
4
+ import { ShopeeFetch } from "../../fetch.js";
5
+ // Mock ShopeeFetch.fetch static method
6
+ const mockFetch = jest.fn();
7
+ ShopeeFetch.fetch = mockFetch;
8
+ describe("MediaManager", () => {
9
+ let mediaManager;
10
+ let mockConfig;
11
+ const mockShopeeFetch = mockFetch;
12
+ beforeEach(() => {
13
+ jest.clearAllMocks();
14
+ mockConfig = {
15
+ partner_id: 12345,
16
+ partner_key: "test_partner_key",
17
+ shop_id: 67890,
18
+ region: ShopeeRegion.GLOBAL,
19
+ base_url: "https://partner.test-stable.shopeemobile.com/api/v2",
20
+ };
21
+ mediaManager = new MediaManager(mockConfig);
22
+ });
23
+ describe("uploadMediaImage", () => {
24
+ it("should upload images for returns business scenario", async () => {
25
+ const mockResponse = {
26
+ request_id: "test-request-id",
27
+ error: "",
28
+ message: "",
29
+ response: {
30
+ image_list: [
31
+ {
32
+ image_id: "test_image_id_1",
33
+ image_url: "https://cf.shopee.sg/file/test_image_1",
34
+ },
35
+ {
36
+ image_id: "test_image_id_2",
37
+ image_url: "https://cf.shopee.sg/file/test_image_2",
38
+ },
39
+ ],
40
+ },
41
+ };
42
+ mockShopeeFetch.mockResolvedValue(mockResponse);
43
+ const result = await mediaManager.uploadMediaImage({
44
+ business: 2,
45
+ scene: 1,
46
+ images: Buffer.from("image-bytes"),
47
+ });
48
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media/upload_image", {
49
+ method: "POST",
50
+ body: {
51
+ business: 2,
52
+ scene: 1,
53
+ images: Buffer.from("image-bytes"),
54
+ },
55
+ });
56
+ expect(result).toEqual(mockResponse);
57
+ expect(result.response.image_list).toHaveLength(2);
58
+ expect(result.response.image_list[0].image_id).toBe("test_image_id_1");
59
+ });
60
+ it("should upload multiple images for returns", async () => {
61
+ const mockResponse = {
62
+ request_id: "test-request-id",
63
+ error: "",
64
+ message: "",
65
+ response: {
66
+ image_list: [
67
+ {
68
+ image_id: "test_image_id_1",
69
+ image_url: "https://cf.shopee.sg/file/test_image_1",
70
+ },
71
+ {
72
+ image_id: "test_image_id_2",
73
+ image_url: "https://cf.shopee.sg/file/test_image_2",
74
+ },
75
+ {
76
+ image_id: "test_image_id_3",
77
+ image_url: "https://cf.shopee.sg/file/test_image_3",
78
+ },
79
+ ],
80
+ },
81
+ };
82
+ mockShopeeFetch.mockResolvedValue(mockResponse);
83
+ const result = await mediaManager.uploadMediaImage({
84
+ business: 2,
85
+ scene: 1,
86
+ images: [Buffer.from("image1"), Buffer.from("image2"), Buffer.from("image3")],
87
+ });
88
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media/upload_image", {
89
+ method: "POST",
90
+ body: {
91
+ business: 2,
92
+ scene: 1,
93
+ images: [Buffer.from("image1"), Buffer.from("image2"), Buffer.from("image3")],
94
+ },
95
+ });
96
+ expect(result.response.image_list).toHaveLength(3);
97
+ });
98
+ });
99
+ describe("uploadImage", () => {
100
+ it("should upload a single image with default settings", async () => {
101
+ const mockResponse = {
102
+ request_id: "test-request-id",
103
+ error: "",
104
+ message: "",
105
+ response: {
106
+ image_info_list: [
107
+ {
108
+ id: 0,
109
+ error: "",
110
+ message: "",
111
+ image_info: {
112
+ image_id: "test_image_id",
113
+ image_url_list: [
114
+ {
115
+ image_url_region: "SG",
116
+ image_url: "https://cf.shopee.sg/file/test_image",
117
+ },
118
+ ],
119
+ },
120
+ },
121
+ ],
122
+ },
123
+ };
124
+ mockShopeeFetch.mockResolvedValue(mockResponse);
125
+ const result = await mediaManager.uploadImage({
126
+ image: Buffer.from("image-bytes"),
127
+ });
128
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media_space/upload_image", {
129
+ method: "POST",
130
+ auth: true,
131
+ body: {
132
+ image: Buffer.from("image-bytes"),
133
+ },
134
+ });
135
+ expect(result).toEqual(mockResponse);
136
+ expect(result.response.image_info_list).toHaveLength(1);
137
+ expect(result.response.image_info_list[0].image_info.image_id).toBe("test_image_id");
138
+ });
139
+ it("should upload multiple images with scene and ratio", async () => {
140
+ const mockResponse = {
141
+ request_id: "test-request-id",
142
+ error: "",
143
+ message: "",
144
+ response: {
145
+ image_info_list: [
146
+ {
147
+ id: 0,
148
+ error: "",
149
+ message: "",
150
+ image_info: {
151
+ image_id: "test_image_id_1",
152
+ image_url_list: [
153
+ {
154
+ image_url_region: "SG",
155
+ image_url: "https://cf.shopee.sg/file/test_image_1",
156
+ },
157
+ ],
158
+ },
159
+ },
160
+ {
161
+ id: 1,
162
+ error: "",
163
+ message: "",
164
+ image_info: {
165
+ image_id: "test_image_id_2",
166
+ image_url_list: [
167
+ {
168
+ image_url_region: "SG",
169
+ image_url: "https://cf.shopee.sg/file/test_image_2",
170
+ },
171
+ ],
172
+ },
173
+ },
174
+ ],
175
+ },
176
+ };
177
+ mockShopeeFetch.mockResolvedValue(mockResponse);
178
+ const result = await mediaManager.uploadImage({
179
+ image: [Buffer.from("image1"), Buffer.from("image2")],
180
+ scene: "normal",
181
+ ratio: "1:1",
182
+ });
183
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media_space/upload_image", {
184
+ method: "POST",
185
+ auth: true,
186
+ body: {
187
+ image: [Buffer.from("image1"), Buffer.from("image2")],
188
+ scene: "normal",
189
+ ratio: "1:1",
190
+ },
191
+ });
192
+ expect(result.response.image_info_list).toHaveLength(2);
193
+ });
194
+ it("should upload description image without processing", async () => {
195
+ const mockResponse = {
196
+ request_id: "test-request-id",
197
+ error: "",
198
+ message: "",
199
+ response: {
200
+ image_info_list: [
201
+ {
202
+ id: 0,
203
+ error: "",
204
+ message: "",
205
+ image_info: {
206
+ image_id: "desc_image_id",
207
+ image_url_list: [
208
+ {
209
+ image_url_region: "SG",
210
+ image_url: "https://cf.shopee.sg/file/desc_image",
211
+ },
212
+ ],
213
+ },
214
+ },
215
+ ],
216
+ },
217
+ };
218
+ mockShopeeFetch.mockResolvedValue(mockResponse);
219
+ const result = await mediaManager.uploadImage({
220
+ image: Buffer.from("desc-image-bytes"),
221
+ scene: "desc",
222
+ });
223
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media_space/upload_image", {
224
+ method: "POST",
225
+ auth: true,
226
+ body: {
227
+ image: Buffer.from("desc-image-bytes"),
228
+ scene: "desc",
229
+ },
230
+ });
231
+ expect(result.response.image_info_list[0].image_info.image_id).toBe("desc_image_id");
232
+ });
233
+ });
234
+ describe("initVideoUpload", () => {
235
+ it("should initiate video upload session", async () => {
236
+ const mockResponse = {
237
+ request_id: "test-request-id",
238
+ error: "",
239
+ message: "",
240
+ response: {
241
+ video_upload_id: "sg_90ce045e-fd92-4f0b-97a4-eda40546cd9f_000000",
242
+ },
243
+ };
244
+ mockShopeeFetch.mockResolvedValue(mockResponse);
245
+ const result = await mediaManager.initVideoUpload({
246
+ file_md5: "2abf0b6e5ff90ff24437a0808f171a93",
247
+ file_size: 1261876,
248
+ });
249
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media_space/init_video_upload", {
250
+ method: "POST",
251
+ auth: true,
252
+ body: {
253
+ file_md5: "2abf0b6e5ff90ff24437a0808f171a93",
254
+ file_size: 1261876,
255
+ },
256
+ });
257
+ expect(result).toEqual(mockResponse);
258
+ expect(result.response.video_upload_id).toBe("sg_90ce045e-fd92-4f0b-97a4-eda40546cd9f_000000");
259
+ });
260
+ it("should handle video upload initialization with max file size", async () => {
261
+ const mockResponse = {
262
+ request_id: "test-request-id",
263
+ error: "",
264
+ message: "",
265
+ response: {
266
+ video_upload_id: "sg_test_video_id",
267
+ },
268
+ };
269
+ mockShopeeFetch.mockResolvedValue(mockResponse);
270
+ const result = await mediaManager.initVideoUpload({
271
+ file_md5: "abcdef1234567890",
272
+ file_size: 30 * 1024 * 1024, // 30MB
273
+ });
274
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media_space/init_video_upload", {
275
+ method: "POST",
276
+ auth: true,
277
+ body: {
278
+ file_md5: "abcdef1234567890",
279
+ file_size: 30 * 1024 * 1024,
280
+ },
281
+ });
282
+ expect(result.response.video_upload_id).toBe("sg_test_video_id");
283
+ });
284
+ });
285
+ describe("uploadVideoPart", () => {
286
+ it("should upload a video part", async () => {
287
+ const mockResponse = {
288
+ request_id: "test-request-id",
289
+ error: "",
290
+ message: "",
291
+ };
292
+ mockShopeeFetch.mockResolvedValue(mockResponse);
293
+ const result = await mediaManager.uploadVideoPart({
294
+ video_upload_id: "sg_90ce045e-fd92-4f0b-97a4-eda40546cd9f_000000",
295
+ part_seq: 0,
296
+ content_md5: "3bb08579fffbfc13ed9d23cda8bbb46d",
297
+ part_content: Buffer.from("part0"),
298
+ });
299
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media_space/upload_video_part", {
300
+ method: "POST",
301
+ body: {
302
+ video_upload_id: "sg_90ce045e-fd92-4f0b-97a4-eda40546cd9f_000000",
303
+ part_seq: 0,
304
+ content_md5: "3bb08579fffbfc13ed9d23cda8bbb46d",
305
+ part_content: Buffer.from("part0"),
306
+ },
307
+ });
308
+ expect(result).toEqual(mockResponse);
309
+ });
310
+ it("should upload multiple video parts sequentially", async () => {
311
+ const mockResponse = {
312
+ request_id: "test-request-id",
313
+ error: "",
314
+ message: "",
315
+ };
316
+ mockShopeeFetch.mockResolvedValue(mockResponse);
317
+ const videoUploadId = "sg_test_upload_id";
318
+ // Upload part 0
319
+ await mediaManager.uploadVideoPart({
320
+ video_upload_id: videoUploadId,
321
+ part_seq: 0,
322
+ content_md5: "md5_part_0",
323
+ part_content: Buffer.from("part0"),
324
+ });
325
+ // Upload part 1
326
+ await mediaManager.uploadVideoPart({
327
+ video_upload_id: videoUploadId,
328
+ part_seq: 1,
329
+ content_md5: "md5_part_1",
330
+ part_content: Buffer.from("part1"),
331
+ });
332
+ expect(mockShopeeFetch).toHaveBeenCalledTimes(2);
333
+ expect(mockShopeeFetch).toHaveBeenNthCalledWith(1, mockConfig, "/media_space/upload_video_part", {
334
+ method: "POST",
335
+ body: {
336
+ video_upload_id: videoUploadId,
337
+ part_seq: 0,
338
+ content_md5: "md5_part_0",
339
+ part_content: Buffer.from("part0"),
340
+ },
341
+ });
342
+ expect(mockShopeeFetch).toHaveBeenNthCalledWith(2, mockConfig, "/media_space/upload_video_part", {
343
+ method: "POST",
344
+ body: {
345
+ video_upload_id: videoUploadId,
346
+ part_seq: 1,
347
+ content_md5: "md5_part_1",
348
+ part_content: Buffer.from("part1"),
349
+ },
350
+ });
351
+ });
352
+ });
353
+ describe("completeVideoUpload", () => {
354
+ it("should complete video upload", async () => {
355
+ const mockResponse = {
356
+ request_id: "test-request-id",
357
+ error: "",
358
+ message: "",
359
+ };
360
+ mockShopeeFetch.mockResolvedValue(mockResponse);
361
+ const result = await mediaManager.completeVideoUpload({
362
+ video_upload_id: "sg_90ce045e-fd92-4f0b-97a4-eda40546cd9f_000000",
363
+ part_seq_list: [0, 1, 2, 3],
364
+ report_data: {
365
+ upload_cost: 11832,
366
+ },
367
+ });
368
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media_space/complete_video_upload", {
369
+ method: "POST",
370
+ body: {
371
+ video_upload_id: "sg_90ce045e-fd92-4f0b-97a4-eda40546cd9f_000000",
372
+ part_seq_list: [0, 1, 2, 3],
373
+ report_data: {
374
+ upload_cost: 11832,
375
+ },
376
+ },
377
+ });
378
+ expect(result).toEqual(mockResponse);
379
+ });
380
+ it("should complete video upload with single part", async () => {
381
+ const mockResponse = {
382
+ request_id: "test-request-id",
383
+ error: "",
384
+ message: "",
385
+ };
386
+ mockShopeeFetch.mockResolvedValue(mockResponse);
387
+ const result = await mediaManager.completeVideoUpload({
388
+ video_upload_id: "sg_small_video_id",
389
+ part_seq_list: [0],
390
+ report_data: {
391
+ upload_cost: 2500,
392
+ },
393
+ });
394
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media_space/complete_video_upload", {
395
+ method: "POST",
396
+ body: {
397
+ video_upload_id: "sg_small_video_id",
398
+ part_seq_list: [0],
399
+ report_data: {
400
+ upload_cost: 2500,
401
+ },
402
+ },
403
+ });
404
+ expect(result).toEqual(mockResponse);
405
+ });
406
+ });
407
+ describe("getVideoUploadResult", () => {
408
+ it("should get video upload result with SUCCEEDED status", async () => {
409
+ const mockResponse = {
410
+ request_id: "test-request-id",
411
+ error: "",
412
+ message: "",
413
+ response: {
414
+ status: "SUCCEEDED",
415
+ message: "success",
416
+ video_info: {
417
+ video_url_list: [
418
+ {
419
+ video_url_region: "SG",
420
+ video_url: "https://cvf.shopee.sg/file/ddb50833eee1c9fda5c522a2e6fc0ea6",
421
+ },
422
+ {
423
+ video_url_region: "VN",
424
+ video_url: "https://cvf.shopee.vn/file/ddb50833eee1c9fda5c522a2e6fc0ea6",
425
+ },
426
+ ],
427
+ thumbnail_url_list: [
428
+ {
429
+ image_url_region: "SG",
430
+ image_url: "https://cf.shopee.sg/file/75eba55932c987851abc39895047dd54",
431
+ },
432
+ {
433
+ image_url_region: "VN",
434
+ image_url: "https://cf.shopee.vn/file/75eba55932c987851abc39895047dd54",
435
+ },
436
+ ],
437
+ duration: 15,
438
+ },
439
+ },
440
+ };
441
+ mockShopeeFetch.mockResolvedValue(mockResponse);
442
+ const result = await mediaManager.getVideoUploadResult({
443
+ video_upload_id: "sg_90ce045e-fd92-4f0b-97a4-eda40546cd9f_000000",
444
+ });
445
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media_space/get_video_upload_result", {
446
+ method: "GET",
447
+ auth: true,
448
+ params: {
449
+ video_upload_id: "sg_90ce045e-fd92-4f0b-97a4-eda40546cd9f_000000",
450
+ },
451
+ });
452
+ expect(result).toEqual(mockResponse);
453
+ expect(result.response.status).toBe("SUCCEEDED");
454
+ expect(result.response.video_info).toBeDefined();
455
+ expect(result.response.video_info?.duration).toBe(15);
456
+ expect(result.response.video_info?.video_url_list).toHaveLength(2);
457
+ });
458
+ it("should get video upload result with TRANSCODING status", async () => {
459
+ const mockResponse = {
460
+ request_id: "test-request-id",
461
+ error: "",
462
+ message: "",
463
+ response: {
464
+ status: "TRANSCODING",
465
+ },
466
+ };
467
+ mockShopeeFetch.mockResolvedValue(mockResponse);
468
+ const result = await mediaManager.getVideoUploadResult({
469
+ video_upload_id: "sg_transcoding_video_id",
470
+ });
471
+ expect(result.response.status).toBe("TRANSCODING");
472
+ expect(result.response.video_info).toBeUndefined();
473
+ });
474
+ it("should get video upload result with FAILED status", async () => {
475
+ const mockResponse = {
476
+ request_id: "test-request-id",
477
+ error: "",
478
+ message: "",
479
+ response: {
480
+ status: "FAILED",
481
+ message: "Video is too short",
482
+ },
483
+ };
484
+ mockShopeeFetch.mockResolvedValue(mockResponse);
485
+ const result = await mediaManager.getVideoUploadResult({
486
+ video_upload_id: "sg_failed_video_id",
487
+ });
488
+ expect(result.response.status).toBe("FAILED");
489
+ expect(result.response.message).toBe("Video is too short");
490
+ expect(result.response.video_info).toBeUndefined();
491
+ });
492
+ it("should get video upload result with INITIATED status", async () => {
493
+ const mockResponse = {
494
+ request_id: "test-request-id",
495
+ error: "",
496
+ message: "",
497
+ response: {
498
+ status: "INITIATED",
499
+ },
500
+ };
501
+ mockShopeeFetch.mockResolvedValue(mockResponse);
502
+ const result = await mediaManager.getVideoUploadResult({
503
+ video_upload_id: "sg_initiated_video_id",
504
+ });
505
+ expect(result.response.status).toBe("INITIATED");
506
+ });
507
+ });
508
+ describe("cancelVideoUpload", () => {
509
+ it("should cancel video upload session", async () => {
510
+ const mockResponse = {
511
+ request_id: "test-request-id",
512
+ error: "",
513
+ message: "",
514
+ };
515
+ mockShopeeFetch.mockResolvedValue(mockResponse);
516
+ const result = await mediaManager.cancelVideoUpload({
517
+ video_upload_id: "sg_90ce045e-fd92-4f0b-97a4-eda40546cd9f_000000",
518
+ });
519
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media_space/cancel_video_upload", {
520
+ method: "POST",
521
+ auth: true,
522
+ body: {
523
+ video_upload_id: "sg_90ce045e-fd92-4f0b-97a4-eda40546cd9f_000000",
524
+ },
525
+ });
526
+ expect(result).toEqual(mockResponse);
527
+ });
528
+ it("should cancel video upload during upload", async () => {
529
+ const mockResponse = {
530
+ request_id: "test-request-id",
531
+ error: "",
532
+ message: "",
533
+ };
534
+ mockShopeeFetch.mockResolvedValue(mockResponse);
535
+ const result = await mediaManager.cancelVideoUpload({
536
+ video_upload_id: "sg_cancel_during_upload_id",
537
+ });
538
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media_space/cancel_video_upload", {
539
+ method: "POST",
540
+ auth: true,
541
+ body: {
542
+ video_upload_id: "sg_cancel_during_upload_id",
543
+ },
544
+ });
545
+ expect(result).toEqual(mockResponse);
546
+ });
547
+ });
548
+ describe("initMediaVideoUpload", () => {
549
+ it("should initiate media video upload session", async () => {
550
+ const mockResponse = {
551
+ request_id: "test-request-id",
552
+ error: "",
553
+ message: "",
554
+ response: {
555
+ video_upload_id: "sg_media_video_123",
556
+ part_size: 4194304,
557
+ },
558
+ };
559
+ mockShopeeFetch.mockResolvedValue(mockResponse);
560
+ const result = await mediaManager.initMediaVideoUpload({
561
+ business: 3,
562
+ scene: 1,
563
+ file_name: "test.mp4",
564
+ file_size: 10485760,
565
+ duration: 30,
566
+ });
567
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media/init_video_upload", {
568
+ method: "POST",
569
+ auth: true,
570
+ body: {
571
+ business: 3,
572
+ scene: 1,
573
+ file_name: "test.mp4",
574
+ file_size: 10485760,
575
+ duration: 30,
576
+ },
577
+ });
578
+ expect(result).toEqual(mockResponse);
579
+ });
580
+ });
581
+ describe("uploadMediaVideoPart", () => {
582
+ it("should upload a media video part", async () => {
583
+ const mockResponse = {
584
+ request_id: "test-request-id",
585
+ error: "",
586
+ message: "",
587
+ };
588
+ mockShopeeFetch.mockResolvedValue(mockResponse);
589
+ const result = await mediaManager.uploadMediaVideoPart({
590
+ video_upload_id: "sg_media_video_123",
591
+ part_seq: 0,
592
+ part_content: "base64-data",
593
+ part_md5: "md5checksum",
594
+ });
595
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media/upload_video_part", {
596
+ method: "POST",
597
+ body: {
598
+ video_upload_id: "sg_media_video_123",
599
+ part_seq: 0,
600
+ part_content: "base64-data",
601
+ part_md5: "md5checksum",
602
+ },
603
+ });
604
+ expect(result).toEqual(mockResponse);
605
+ });
606
+ });
607
+ describe("completeMediaVideoUpload", () => {
608
+ it("should complete media video upload session", async () => {
609
+ const mockResponse = {
610
+ request_id: "test-request-id",
611
+ error: "",
612
+ message: "",
613
+ };
614
+ mockShopeeFetch.mockResolvedValue(mockResponse);
615
+ const result = await mediaManager.completeMediaVideoUpload({
616
+ video_upload_id: "sg_media_video_123",
617
+ });
618
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media/complete_video_upload", {
619
+ method: "POST",
620
+ body: {
621
+ video_upload_id: "sg_media_video_123",
622
+ },
623
+ });
624
+ expect(result).toEqual(mockResponse);
625
+ });
626
+ });
627
+ describe("getMediaVideoUploadResult", () => {
628
+ it("should retrieve media video upload result", async () => {
629
+ const mockResponse = {
630
+ request_id: "test-request-id",
631
+ error: "",
632
+ message: "",
633
+ response: {
634
+ status: "SUCCEEDED",
635
+ video_info: {
636
+ video_url: "https://shopee.com/video.mp4",
637
+ video_thumbnail_url: "https://shopee.com/thumb.jpg",
638
+ thumbnail_width: 720,
639
+ thumbnail_height: 1280,
640
+ duration: 30,
641
+ resolution: "720x1280",
642
+ },
643
+ },
644
+ };
645
+ mockShopeeFetch.mockResolvedValue(mockResponse);
646
+ const result = await mediaManager.getMediaVideoUploadResult({
647
+ video_upload_id: "sg_media_video_123",
648
+ });
649
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media/get_video_upload_result", {
650
+ method: "GET",
651
+ auth: true,
652
+ params: {
653
+ video_upload_id: "sg_media_video_123",
654
+ },
655
+ });
656
+ expect(result).toEqual(mockResponse);
657
+ });
658
+ });
659
+ describe("cancelMediaVideoUpload", () => {
660
+ it("should cancel media video upload session", async () => {
661
+ const mockResponse = {
662
+ request_id: "test-request-id",
663
+ error: "",
664
+ message: "",
665
+ };
666
+ mockShopeeFetch.mockResolvedValue(mockResponse);
667
+ const result = await mediaManager.cancelMediaVideoUpload({
668
+ video_upload_id: "sg_media_video_123",
669
+ });
670
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/media/cancel_video_upload", {
671
+ method: "POST",
672
+ auth: true,
673
+ body: {
674
+ video_upload_id: "sg_media_video_123",
675
+ },
676
+ });
677
+ expect(result).toEqual(mockResponse);
678
+ });
679
+ });
680
+ });
681
+ //# sourceMappingURL=media.manager.test.js.map