@congminh1254/shopee-sdk 1.6.2 → 1.8.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 (158) 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 +316 -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/region.d.ts +9 -2
  145. package/lib/schemas/region.js +9 -2
  146. package/lib/schemas/region.js.map +1 -1
  147. package/lib/schemas/returns.d.ts +38 -1
  148. package/lib/schemas/shop.d.ts +16 -0
  149. package/lib/schemas/video.d.ts +83 -37
  150. package/lib/schemas/voucher.d.ts +2 -0
  151. package/lib/sdk.d.ts +6 -1
  152. package/lib/sdk.js +53 -6
  153. package/lib/sdk.js.map +1 -1
  154. package/lib/storage/custom-token-storage.js +2 -0
  155. package/lib/storage/custom-token-storage.js.map +1 -1
  156. package/lib/version.d.ts +1 -1
  157. package/lib/version.js +1 -1
  158. package/package.json +3 -3
@@ -0,0 +1,877 @@
1
+ import { jest } from "@jest/globals";
2
+ import { LiveStreamManager } from "../../managers/livestream.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("LiveStreamManager", () => {
9
+ let liveStreamManager;
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
+ liveStreamManager = new LiveStreamManager(mockConfig);
22
+ });
23
+ describe("createSession", () => {
24
+ it("should create a new livestream session", async () => {
25
+ const mockResponse = {
26
+ request_id: "test-request-id",
27
+ error: "",
28
+ message: "",
29
+ response: {
30
+ session_id: 6236215,
31
+ },
32
+ };
33
+ mockShopeeFetch.mockResolvedValue(mockResponse);
34
+ const result = await liveStreamManager.createSession({
35
+ title: "Test Livestream",
36
+ description: "This is a test livestream",
37
+ cover_image_url: "https://cf.shopee.sg/file/id-11134104-7r98o-m9pq7jw2cdhx5e",
38
+ is_test: true,
39
+ });
40
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/create_session", {
41
+ method: "POST",
42
+ body: {
43
+ title: "Test Livestream",
44
+ description: "This is a test livestream",
45
+ cover_image_url: "https://cf.shopee.sg/file/id-11134104-7r98o-m9pq7jw2cdhx5e",
46
+ is_test: true,
47
+ },
48
+ });
49
+ expect(result).toEqual(mockResponse);
50
+ expect(result.response.session_id).toBe(6236215);
51
+ });
52
+ it("should create session without optional fields", async () => {
53
+ const mockResponse = {
54
+ request_id: "test-request-id",
55
+ error: "",
56
+ message: "",
57
+ response: {
58
+ session_id: 6236216,
59
+ },
60
+ };
61
+ mockShopeeFetch.mockResolvedValue(mockResponse);
62
+ const result = await liveStreamManager.createSession({
63
+ title: "Minimal Session",
64
+ cover_image_url: "https://cf.shopee.sg/file/test.jpg",
65
+ });
66
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/create_session", {
67
+ method: "POST",
68
+ body: {
69
+ title: "Minimal Session",
70
+ cover_image_url: "https://cf.shopee.sg/file/test.jpg",
71
+ },
72
+ });
73
+ expect(result.response.session_id).toBe(6236216);
74
+ });
75
+ });
76
+ describe("startSession", () => {
77
+ it("should start a livestream session", async () => {
78
+ const mockResponse = {
79
+ request_id: "test-request-id",
80
+ error: "",
81
+ message: "",
82
+ response: {},
83
+ };
84
+ mockShopeeFetch.mockResolvedValue(mockResponse);
85
+ const result = await liveStreamManager.startSession({
86
+ session_id: 6236215,
87
+ domain_id: 1,
88
+ });
89
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/start_session", {
90
+ method: "POST",
91
+ body: {
92
+ session_id: 6236215,
93
+ domain_id: 1,
94
+ },
95
+ });
96
+ expect(result).toEqual(mockResponse);
97
+ });
98
+ });
99
+ describe("endSession", () => {
100
+ it("should end a livestream session", async () => {
101
+ const mockResponse = {
102
+ request_id: "test-request-id",
103
+ error: "",
104
+ message: "",
105
+ response: {},
106
+ };
107
+ mockShopeeFetch.mockResolvedValue(mockResponse);
108
+ const result = await liveStreamManager.endSession({
109
+ session_id: 6236215,
110
+ });
111
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/end_session", {
112
+ method: "POST",
113
+ body: {
114
+ session_id: 6236215,
115
+ },
116
+ });
117
+ expect(result).toEqual(mockResponse);
118
+ });
119
+ });
120
+ describe("updateSession", () => {
121
+ it("should update a livestream session", async () => {
122
+ const mockResponse = {
123
+ request_id: "test-request-id",
124
+ error: "",
125
+ message: "",
126
+ response: {},
127
+ };
128
+ mockShopeeFetch.mockResolvedValue(mockResponse);
129
+ const result = await liveStreamManager.updateSession({
130
+ session_id: 6236215,
131
+ title: "Updated Title",
132
+ description: "Updated description",
133
+ cover_image_url: "https://cf.shopee.sg/file/updated.jpg",
134
+ is_test: true,
135
+ });
136
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/update_session", {
137
+ method: "POST",
138
+ body: {
139
+ session_id: 6236215,
140
+ title: "Updated Title",
141
+ description: "Updated description",
142
+ cover_image_url: "https://cf.shopee.sg/file/updated.jpg",
143
+ is_test: true,
144
+ },
145
+ });
146
+ expect(result).toEqual(mockResponse);
147
+ });
148
+ });
149
+ describe("getSessionDetail", () => {
150
+ it("should get session detail", async () => {
151
+ const mockResponse = {
152
+ request_id: "test-request-id",
153
+ error: "",
154
+ message: "",
155
+ response: {
156
+ session_id: 6236215,
157
+ title: "Test Livestream",
158
+ description: "Test description",
159
+ cover_image_url: "https://cf.shopee.sg/file/id-11134104-7r98o-m9y7ly25ngg927",
160
+ status: 1,
161
+ share_url: "https://live.test.shopee.co.id/share?session=6905656",
162
+ is_test: false,
163
+ create_time: 1747651742003,
164
+ update_time: 1747651742003,
165
+ start_time: 1747651742003,
166
+ end_time: 1747651742003,
167
+ stream_url_list: {
168
+ push_url: "rtmp://push-zl.lvb.test.shopee.co.id/live",
169
+ push_key: "id-test-1987885338002432-6905656?zlSecret=test",
170
+ play_url: "http://play-zl.livestream.test.shopee.co.id/live/test.flv",
171
+ domain_id: 57,
172
+ },
173
+ },
174
+ };
175
+ mockShopeeFetch.mockResolvedValue(mockResponse);
176
+ const result = await liveStreamManager.getSessionDetail({
177
+ session_id: 6236215,
178
+ });
179
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/get_session_detail", {
180
+ method: "GET",
181
+ params: {
182
+ session_id: 6236215,
183
+ },
184
+ });
185
+ expect(result).toEqual(mockResponse);
186
+ expect(result.response.session_id).toBe(6236215);
187
+ expect(result.response.status).toBe(1);
188
+ });
189
+ });
190
+ describe("getSessionMetric", () => {
191
+ it("should get session metrics", async () => {
192
+ const mockResponse = {
193
+ request_id: "test-request-id",
194
+ error: "",
195
+ message: "",
196
+ response: {
197
+ gmv: 1000.5,
198
+ atc: 50,
199
+ ctr: 0.15,
200
+ co: 0.08,
201
+ orders: 25,
202
+ ccu: 150,
203
+ engage_ccu_1m: 120,
204
+ peak_ccu: 200,
205
+ likes: 500,
206
+ comments: 300,
207
+ shares: 50,
208
+ views: 1000,
209
+ avg_viewing_duration: 180,
210
+ },
211
+ };
212
+ mockShopeeFetch.mockResolvedValue(mockResponse);
213
+ const result = await liveStreamManager.getSessionMetric({
214
+ session_id: 6236215,
215
+ });
216
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/get_session_metric", {
217
+ method: "GET",
218
+ params: {
219
+ session_id: 6236215,
220
+ },
221
+ });
222
+ expect(result).toEqual(mockResponse);
223
+ expect(result.response.gmv).toBe(1000.5);
224
+ expect(result.response.orders).toBe(25);
225
+ });
226
+ });
227
+ describe("getSessionItemMetric", () => {
228
+ it("should get session item metrics", async () => {
229
+ const mockResponse = {
230
+ request_id: "test-request-id",
231
+ error: "",
232
+ message: "",
233
+ response: {
234
+ more: false,
235
+ next_offset: 10,
236
+ list: [
237
+ {
238
+ item_id: 123456,
239
+ shop_id: 67890,
240
+ name: "Test Product",
241
+ clicks: 100,
242
+ orders: 10,
243
+ gmv: 500.0,
244
+ },
245
+ ],
246
+ },
247
+ };
248
+ mockShopeeFetch.mockResolvedValue(mockResponse);
249
+ const result = await liveStreamManager.getSessionItemMetric({
250
+ session_id: 6236215,
251
+ offset: 0,
252
+ page_size: 10,
253
+ });
254
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/get_session_item_metric", {
255
+ method: "GET",
256
+ params: {
257
+ session_id: 6236215,
258
+ offset: 0,
259
+ page_size: 10,
260
+ },
261
+ });
262
+ expect(result).toEqual(mockResponse);
263
+ expect(result.response.list).toHaveLength(1);
264
+ });
265
+ });
266
+ describe("addItemList", () => {
267
+ it("should add items to session", async () => {
268
+ const mockResponse = {
269
+ request_id: "test-request-id",
270
+ error: "",
271
+ message: "",
272
+ response: {},
273
+ };
274
+ mockShopeeFetch.mockResolvedValue(mockResponse);
275
+ const result = await liveStreamManager.addItemList({
276
+ session_id: 6236215,
277
+ item_list: [
278
+ { item_id: 123, shop_id: 456 },
279
+ { item_id: 789, shop_id: 456 },
280
+ ],
281
+ });
282
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/add_item_list", {
283
+ method: "POST",
284
+ body: {
285
+ session_id: 6236215,
286
+ item_list: [
287
+ { item_id: 123, shop_id: 456 },
288
+ { item_id: 789, shop_id: 456 },
289
+ ],
290
+ },
291
+ });
292
+ expect(result).toEqual(mockResponse);
293
+ });
294
+ });
295
+ describe("updateItemList", () => {
296
+ it("should update item order in session", async () => {
297
+ const mockResponse = {
298
+ request_id: "test-request-id",
299
+ error: "",
300
+ message: "",
301
+ response: {},
302
+ };
303
+ mockShopeeFetch.mockResolvedValue(mockResponse);
304
+ const result = await liveStreamManager.updateItemList({
305
+ session_id: 6236215,
306
+ item_list: [
307
+ { item_id: 123, shop_id: 456, item_no: 2 },
308
+ { item_id: 789, shop_id: 456, item_no: 1 },
309
+ ],
310
+ });
311
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/update_item_list", {
312
+ method: "POST",
313
+ body: {
314
+ session_id: 6236215,
315
+ item_list: [
316
+ { item_id: 123, shop_id: 456, item_no: 2 },
317
+ { item_id: 789, shop_id: 456, item_no: 1 },
318
+ ],
319
+ },
320
+ });
321
+ expect(result).toEqual(mockResponse);
322
+ });
323
+ });
324
+ describe("deleteItemList", () => {
325
+ it("should delete items from session", async () => {
326
+ const mockResponse = {
327
+ request_id: "test-request-id",
328
+ error: "",
329
+ message: "",
330
+ response: {},
331
+ };
332
+ mockShopeeFetch.mockResolvedValue(mockResponse);
333
+ const result = await liveStreamManager.deleteItemList({
334
+ session_id: 6236215,
335
+ item_list: [{ item_id: 123, shop_id: 456 }],
336
+ });
337
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/delete_item_list", {
338
+ method: "POST",
339
+ body: {
340
+ session_id: 6236215,
341
+ item_list: [{ item_id: 123, shop_id: 456 }],
342
+ },
343
+ });
344
+ expect(result).toEqual(mockResponse);
345
+ });
346
+ });
347
+ describe("getItemList", () => {
348
+ it("should get item list from session", async () => {
349
+ const mockResponse = {
350
+ request_id: "test-request-id",
351
+ error: "",
352
+ message: "",
353
+ response: {
354
+ more: false,
355
+ next_offset: 10,
356
+ list: [
357
+ {
358
+ item_no: 1,
359
+ item_id: 123,
360
+ shop_id: 456,
361
+ name: "Test Product",
362
+ image_url: "https://cf.shopee.sg/file/test.jpg",
363
+ price_info: {
364
+ currency: "SGD",
365
+ current_price: 10.99,
366
+ original_price: 15.99,
367
+ },
368
+ affiliate_info: {
369
+ commission_rate: 0.1,
370
+ is_campaign: true,
371
+ campaign_mcn_name: "Test MCN",
372
+ campaign_start_time: 1735870969,
373
+ campaign_end_time: 1735870969,
374
+ },
375
+ },
376
+ ],
377
+ },
378
+ };
379
+ mockShopeeFetch.mockResolvedValue(mockResponse);
380
+ const result = await liveStreamManager.getItemList({
381
+ session_id: 6236215,
382
+ offset: 0,
383
+ page_size: 10,
384
+ });
385
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/get_item_list", {
386
+ method: "GET",
387
+ params: {
388
+ session_id: 6236215,
389
+ offset: 0,
390
+ page_size: 10,
391
+ },
392
+ });
393
+ expect(result).toEqual(mockResponse);
394
+ expect(result.response.list).toHaveLength(1);
395
+ });
396
+ });
397
+ describe("getItemCount", () => {
398
+ it("should get total item count", async () => {
399
+ const mockResponse = {
400
+ request_id: "test-request-id",
401
+ error: "",
402
+ message: "",
403
+ response: {
404
+ total_count: 25,
405
+ },
406
+ };
407
+ mockShopeeFetch.mockResolvedValue(mockResponse);
408
+ const result = await liveStreamManager.getItemCount({
409
+ session_id: 6236215,
410
+ });
411
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/get_item_count", {
412
+ method: "GET",
413
+ params: {
414
+ session_id: 6236215,
415
+ },
416
+ });
417
+ expect(result).toEqual(mockResponse);
418
+ expect(result.response.total_count).toBe(25);
419
+ });
420
+ });
421
+ describe("getRecentItemList", () => {
422
+ it("should get recent item list", async () => {
423
+ const mockResponse = {
424
+ request_id: "test-request-id",
425
+ error: "",
426
+ message: "",
427
+ response: {
428
+ more: false,
429
+ next_offset: 10,
430
+ list: [
431
+ {
432
+ item_no: 1,
433
+ item_id: 123,
434
+ shop_id: 456,
435
+ name: "Recent Product",
436
+ image_url: "https://cf.shopee.sg/file/recent.jpg",
437
+ price_info: {
438
+ currency: "SGD",
439
+ current_price: 9.99,
440
+ original_price: 12.99,
441
+ },
442
+ affiliate_info: {
443
+ commission_rate: 0.05,
444
+ is_campaign: false,
445
+ campaign_mcn_name: "",
446
+ campaign_start_time: 0,
447
+ campaign_end_time: 0,
448
+ },
449
+ },
450
+ ],
451
+ },
452
+ };
453
+ mockShopeeFetch.mockResolvedValue(mockResponse);
454
+ const result = await liveStreamManager.getRecentItemList({
455
+ session_id: 6236215,
456
+ offset: 0,
457
+ page_size: 10,
458
+ });
459
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/get_recent_item_list", {
460
+ method: "GET",
461
+ params: {
462
+ session_id: 6236215,
463
+ offset: 0,
464
+ page_size: 10,
465
+ },
466
+ });
467
+ expect(result).toEqual(mockResponse);
468
+ });
469
+ });
470
+ describe("getLikeItemList", () => {
471
+ it("should get liked item list", async () => {
472
+ const mockResponse = {
473
+ request_id: "test-request-id",
474
+ error: "",
475
+ message: "",
476
+ response: {
477
+ more: false,
478
+ next_offset: 10,
479
+ list: [
480
+ {
481
+ item_no: 1,
482
+ item_id: 123,
483
+ shop_id: 456,
484
+ name: "Liked Product",
485
+ image_url: "https://cf.shopee.sg/file/liked.jpg",
486
+ price_info: {
487
+ currency: "SGD",
488
+ current_price: 19.99,
489
+ original_price: 29.99,
490
+ },
491
+ affiliate_info: {
492
+ commission_rate: 0.15,
493
+ is_campaign: true,
494
+ campaign_mcn_name: "Popular MCN",
495
+ campaign_start_time: 1735870969,
496
+ campaign_end_time: 1735970969,
497
+ },
498
+ },
499
+ ],
500
+ },
501
+ };
502
+ mockShopeeFetch.mockResolvedValue(mockResponse);
503
+ const result = await liveStreamManager.getLikeItemList({
504
+ session_id: 6236215,
505
+ offset: 0,
506
+ page_size: 10,
507
+ keyword: "Summer",
508
+ });
509
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/get_like_item_list", {
510
+ method: "GET",
511
+ params: {
512
+ session_id: 6236215,
513
+ offset: 0,
514
+ page_size: 10,
515
+ keyword: "Summer",
516
+ },
517
+ });
518
+ expect(result).toEqual(mockResponse);
519
+ });
520
+ });
521
+ describe("applyItemSet", () => {
522
+ it("should apply an item set to session", async () => {
523
+ const mockResponse = {
524
+ request_id: "test-request-id",
525
+ error: "",
526
+ message: "",
527
+ response: {},
528
+ };
529
+ mockShopeeFetch.mockResolvedValue(mockResponse);
530
+ const result = await liveStreamManager.applyItemSet({
531
+ session_id: 6236215,
532
+ item_set_id: 12345,
533
+ item_set_ids: [12345, 67890],
534
+ });
535
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/apply_item_set", {
536
+ method: "POST",
537
+ body: {
538
+ session_id: 6236215,
539
+ item_set_id: 12345,
540
+ item_set_ids: [12345, 67890],
541
+ },
542
+ });
543
+ expect(result).toEqual(mockResponse);
544
+ });
545
+ });
546
+ describe("getItemSetList", () => {
547
+ it("should get item set list", async () => {
548
+ const mockResponse = {
549
+ request_id: "test-request-id",
550
+ error: "",
551
+ message: "",
552
+ response: {
553
+ more: false,
554
+ next_offset: 10,
555
+ list: [
556
+ {
557
+ item_set_id: 12345,
558
+ name: "Summer Collection",
559
+ item_count: 50,
560
+ },
561
+ {
562
+ item_set_id: 12346,
563
+ name: "Winter Sale",
564
+ item_count: 30,
565
+ },
566
+ ],
567
+ },
568
+ };
569
+ mockShopeeFetch.mockResolvedValue(mockResponse);
570
+ const result = await liveStreamManager.getItemSetList({
571
+ offset: 0,
572
+ page_size: 10,
573
+ keyword: "Collection",
574
+ });
575
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/get_item_set_list", {
576
+ method: "GET",
577
+ params: {
578
+ offset: 0,
579
+ page_size: 10,
580
+ keyword: "Collection",
581
+ },
582
+ });
583
+ expect(result).toEqual(mockResponse);
584
+ expect(result.response.list).toHaveLength(2);
585
+ });
586
+ });
587
+ describe("getItemSetItemList", () => {
588
+ it("should get items in an item set", async () => {
589
+ const mockResponse = {
590
+ request_id: "test-request-id",
591
+ error: "",
592
+ message: "",
593
+ response: {
594
+ more: false,
595
+ next_offset: 10,
596
+ list: [
597
+ {
598
+ item_no: 1,
599
+ item_id: 111,
600
+ shop_id: 456,
601
+ name: "Set Item 1",
602
+ image_url: "https://cf.shopee.sg/file/item1.jpg",
603
+ price_info: {
604
+ currency: "SGD",
605
+ current_price: 15.99,
606
+ original_price: 20.99,
607
+ },
608
+ affiliate_info: {
609
+ commission_rate: 0.1,
610
+ is_campaign: false,
611
+ campaign_mcn_name: "",
612
+ campaign_start_time: 0,
613
+ campaign_end_time: 0,
614
+ },
615
+ },
616
+ ],
617
+ },
618
+ };
619
+ mockShopeeFetch.mockResolvedValue(mockResponse);
620
+ const result = await liveStreamManager.getItemSetItemList({
621
+ item_set_id: 12345,
622
+ offset: 0,
623
+ page_size: 10,
624
+ });
625
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/get_item_set_item_list", {
626
+ method: "GET",
627
+ params: {
628
+ item_set_id: 12345,
629
+ offset: 0,
630
+ page_size: 10,
631
+ },
632
+ });
633
+ expect(result).toEqual(mockResponse);
634
+ });
635
+ });
636
+ describe("getShowItem", () => {
637
+ it("should get currently displayed item", async () => {
638
+ const mockResponse = {
639
+ request_id: "test-request-id",
640
+ error: "",
641
+ message: "",
642
+ response: {
643
+ item: {
644
+ item_id: 123,
645
+ shop_id: 456,
646
+ name: "Displayed Product",
647
+ image_url: "https://cf.shopee.sg/file/show.jpg",
648
+ price_info: {
649
+ currency: "SGD",
650
+ current_price: 25.99,
651
+ original_price: 35.99,
652
+ },
653
+ },
654
+ },
655
+ };
656
+ mockShopeeFetch.mockResolvedValue(mockResponse);
657
+ const result = await liveStreamManager.getShowItem({
658
+ session_id: 6236215,
659
+ });
660
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/get_show_item", {
661
+ method: "GET",
662
+ params: {
663
+ session_id: 6236215,
664
+ },
665
+ });
666
+ expect(result).toEqual(mockResponse);
667
+ expect(result.response.item).not.toBeNull();
668
+ });
669
+ it("should handle no show item", async () => {
670
+ const mockResponse = {
671
+ request_id: "test-request-id",
672
+ error: "",
673
+ message: "",
674
+ response: {
675
+ item: null,
676
+ },
677
+ };
678
+ mockShopeeFetch.mockResolvedValue(mockResponse);
679
+ const result = await liveStreamManager.getShowItem({
680
+ session_id: 6236215,
681
+ });
682
+ expect(result.response.item).toBeNull();
683
+ });
684
+ });
685
+ describe("updateShowItem", () => {
686
+ it("should update the displayed item", async () => {
687
+ const mockResponse = {
688
+ request_id: "test-request-id",
689
+ error: "",
690
+ message: "",
691
+ response: {},
692
+ };
693
+ mockShopeeFetch.mockResolvedValue(mockResponse);
694
+ const result = await liveStreamManager.updateShowItem({
695
+ session_id: 6236215,
696
+ item_id: 123,
697
+ shop_id: 456,
698
+ });
699
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/update_show_item", {
700
+ method: "POST",
701
+ body: {
702
+ session_id: 6236215,
703
+ item_id: 123,
704
+ shop_id: 456,
705
+ },
706
+ });
707
+ expect(result).toEqual(mockResponse);
708
+ });
709
+ });
710
+ describe("deleteShowItem", () => {
711
+ it("should remove the displayed item", async () => {
712
+ const mockResponse = {
713
+ request_id: "test-request-id",
714
+ error: "",
715
+ message: "",
716
+ response: {},
717
+ };
718
+ mockShopeeFetch.mockResolvedValue(mockResponse);
719
+ const result = await liveStreamManager.deleteShowItem({
720
+ session_id: 6236215,
721
+ });
722
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/delete_show_item", {
723
+ method: "POST",
724
+ body: {
725
+ session_id: 6236215,
726
+ },
727
+ });
728
+ expect(result).toEqual(mockResponse);
729
+ });
730
+ });
731
+ describe("postComment", () => {
732
+ it("should post a comment to livestream", async () => {
733
+ const mockResponse = {
734
+ request_id: "test-request-id",
735
+ error: "",
736
+ message: "",
737
+ response: {},
738
+ };
739
+ mockShopeeFetch.mockResolvedValue(mockResponse);
740
+ const result = await liveStreamManager.postComment({
741
+ session_id: 6236215,
742
+ comment: "Great product!",
743
+ content: "Great product content!",
744
+ });
745
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/post_comment", {
746
+ method: "POST",
747
+ body: {
748
+ session_id: 6236215,
749
+ comment: "Great product!",
750
+ content: "Great product content!",
751
+ },
752
+ });
753
+ expect(result).toEqual(mockResponse);
754
+ });
755
+ });
756
+ describe("getLatestCommentList", () => {
757
+ it("should get latest comments", async () => {
758
+ const mockResponse = {
759
+ request_id: "test-request-id",
760
+ error: "",
761
+ message: "",
762
+ response: {
763
+ more: false,
764
+ next_offset: 10,
765
+ list: [
766
+ {
767
+ comment_id: 1001,
768
+ user_id: 5001,
769
+ username: "user123",
770
+ comment: "Love this stream!",
771
+ comment_time: 1735870969,
772
+ },
773
+ {
774
+ comment_id: 1002,
775
+ user_id: 5002,
776
+ username: "user456",
777
+ comment: "When will you restock?",
778
+ comment_time: 1735871000,
779
+ },
780
+ ],
781
+ },
782
+ };
783
+ mockShopeeFetch.mockResolvedValue(mockResponse);
784
+ const result = await liveStreamManager.getLatestCommentList({
785
+ session_id: 6236215,
786
+ offset: 0,
787
+ page_size: 10,
788
+ });
789
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/get_latest_comment_list", {
790
+ method: "GET",
791
+ params: {
792
+ session_id: 6236215,
793
+ offset: 0,
794
+ page_size: 10,
795
+ },
796
+ });
797
+ expect(result).toEqual(mockResponse);
798
+ expect(result.response.list).toHaveLength(2);
799
+ });
800
+ });
801
+ describe("banUserComment", () => {
802
+ it("should ban a user from commenting", async () => {
803
+ const mockResponse = {
804
+ request_id: "test-request-id",
805
+ error: "",
806
+ message: "",
807
+ response: {},
808
+ };
809
+ mockShopeeFetch.mockResolvedValue(mockResponse);
810
+ const result = await liveStreamManager.banUserComment({
811
+ session_id: 6236215,
812
+ user_id: 5001,
813
+ ban_user_id: 5001,
814
+ });
815
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/ban_user_comment", {
816
+ method: "POST",
817
+ body: {
818
+ session_id: 6236215,
819
+ user_id: 5001,
820
+ ban_user_id: 5001,
821
+ },
822
+ });
823
+ expect(result).toEqual(mockResponse);
824
+ });
825
+ });
826
+ describe("unbanUserComment", () => {
827
+ it("should unban a user from commenting", async () => {
828
+ const mockResponse = {
829
+ request_id: "test-request-id",
830
+ error: "",
831
+ message: "",
832
+ response: {},
833
+ };
834
+ mockShopeeFetch.mockResolvedValue(mockResponse);
835
+ const result = await liveStreamManager.unbanUserComment({
836
+ session_id: 6236215,
837
+ user_id: 5001,
838
+ unban_user_id: 5001,
839
+ });
840
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/unban_user_comment", {
841
+ method: "POST",
842
+ body: {
843
+ session_id: 6236215,
844
+ user_id: 5001,
845
+ unban_user_id: 5001,
846
+ },
847
+ });
848
+ expect(result).toEqual(mockResponse);
849
+ });
850
+ });
851
+ describe("uploadImage", () => {
852
+ it("should upload an image", async () => {
853
+ const mockResponse = {
854
+ request_id: "test-request-id",
855
+ error: "",
856
+ message: "",
857
+ response: {
858
+ image_url: "https://cf.shopee.sg/file/id-11134104-7r98o-m9y7ly25ngg927",
859
+ },
860
+ };
861
+ mockShopeeFetch.mockResolvedValue(mockResponse);
862
+ const mockImage = Buffer.from("fake-image-data");
863
+ const result = await liveStreamManager.uploadImage({
864
+ image: mockImage,
865
+ });
866
+ expect(mockShopeeFetch).toHaveBeenCalledWith(mockConfig, "/livestream/upload_image", {
867
+ method: "POST",
868
+ body: {
869
+ image: mockImage,
870
+ },
871
+ });
872
+ expect(result).toEqual(mockResponse);
873
+ expect(result.response.image_url).toBe("https://cf.shopee.sg/file/id-11134104-7r98o-m9y7ly25ngg927");
874
+ });
875
+ });
876
+ });
877
+ //# sourceMappingURL=livestream.manager.test.js.map