@congminh1254/shopee-sdk 1.8.0 → 1.10.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 (69) hide show
  1. package/README.md +48 -10
  2. package/lib/__tests__/integration/bundle-deal.integration.test.d.ts +1 -0
  3. package/lib/__tests__/integration/bundle-deal.integration.test.js +75 -0
  4. package/lib/__tests__/integration/bundle-deal.integration.test.js.map +1 -0
  5. package/lib/__tests__/integration/discount.integration.test.d.ts +1 -0
  6. package/lib/__tests__/integration/discount.integration.test.js +86 -0
  7. package/lib/__tests__/integration/discount.integration.test.js.map +1 -0
  8. package/lib/__tests__/integration/document.integration.test.d.ts +1 -0
  9. package/lib/__tests__/integration/document.integration.test.js +35 -0
  10. package/lib/__tests__/integration/document.integration.test.js.map +1 -0
  11. package/lib/__tests__/integration/follow-prize.integration.test.d.ts +1 -0
  12. package/lib/__tests__/integration/follow-prize.integration.test.js +95 -0
  13. package/lib/__tests__/integration/follow-prize.integration.test.js.map +1 -0
  14. package/lib/__tests__/integration/media.integration.test.d.ts +1 -0
  15. package/lib/__tests__/integration/media.integration.test.js +119 -0
  16. package/lib/__tests__/integration/media.integration.test.js.map +1 -0
  17. package/lib/__tests__/integration/order.integration.test.d.ts +1 -0
  18. package/lib/__tests__/integration/order.integration.test.js +25 -0
  19. package/lib/__tests__/integration/order.integration.test.js.map +1 -0
  20. package/lib/__tests__/integration/payment.integration.test.d.ts +1 -0
  21. package/lib/__tests__/integration/payment.integration.test.js +56 -0
  22. package/lib/__tests__/integration/payment.integration.test.js.map +1 -0
  23. package/lib/__tests__/integration/product.integration.test.d.ts +1 -0
  24. package/lib/__tests__/integration/product.integration.test.js +191 -0
  25. package/lib/__tests__/integration/product.integration.test.js.map +1 -0
  26. package/lib/__tests__/integration/public.integration.test.d.ts +1 -0
  27. package/lib/__tests__/integration/public.integration.test.js +27 -0
  28. package/lib/__tests__/integration/public.integration.test.js.map +1 -0
  29. package/lib/__tests__/integration/setup.d.ts +6 -0
  30. package/lib/__tests__/integration/setup.js +51 -0
  31. package/lib/__tests__/integration/setup.js.map +1 -0
  32. package/lib/__tests__/integration/shop-category.integration.test.d.ts +1 -0
  33. package/lib/__tests__/integration/shop-category.integration.test.js +53 -0
  34. package/lib/__tests__/integration/shop-category.integration.test.js.map +1 -0
  35. package/lib/__tests__/integration/shop.integration.test.d.ts +1 -0
  36. package/lib/__tests__/integration/shop.integration.test.js +23 -0
  37. package/lib/__tests__/integration/shop.integration.test.js.map +1 -0
  38. package/lib/__tests__/integration/voucher.integration.test.d.ts +1 -0
  39. package/lib/__tests__/integration/voucher.integration.test.js +63 -0
  40. package/lib/__tests__/integration/voucher.integration.test.js.map +1 -0
  41. package/lib/__tests__/managers/logistics.manager.test.js +2 -0
  42. package/lib/__tests__/managers/logistics.manager.test.js.map +1 -1
  43. package/lib/__tests__/managers/order.manager.test.js +38 -0
  44. package/lib/__tests__/managers/order.manager.test.js.map +1 -1
  45. package/lib/__tests__/managers/payment.manager.test.js +14 -15
  46. package/lib/__tests__/managers/payment.manager.test.js.map +1 -1
  47. package/lib/__tests__/utils/env-helper.d.ts +22 -0
  48. package/lib/__tests__/utils/env-helper.js +53 -0
  49. package/lib/__tests__/utils/env-helper.js.map +1 -0
  50. package/lib/__tests__/utils/init.d.ts +1 -0
  51. package/lib/__tests__/utils/init.js +45 -0
  52. package/lib/__tests__/utils/init.js.map +1 -0
  53. package/lib/__tests__/utils/sandbox-auth-automation.d.ts +8 -0
  54. package/lib/__tests__/utils/sandbox-auth-automation.js +109 -0
  55. package/lib/__tests__/utils/sandbox-auth-automation.js.map +1 -0
  56. package/lib/fetch.js +6 -7
  57. package/lib/fetch.js.map +1 -1
  58. package/lib/managers/order.manager.d.ts +8 -1
  59. package/lib/managers/order.manager.js +14 -0
  60. package/lib/managers/order.manager.js.map +1 -1
  61. package/lib/schemas/logistics.d.ts +16 -0
  62. package/lib/schemas/logistics.js.map +1 -1
  63. package/lib/schemas/order.d.ts +56 -0
  64. package/lib/schemas/order.js.map +1 -1
  65. package/lib/schemas/payment.d.ts +11 -14
  66. package/lib/version.d.ts +1 -1
  67. package/lib/version.js +1 -1
  68. package/lib/version.js.map +1 -1
  69. package/package.json +8 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/media.integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;AAErD,8FAA8F;AAC9F,MAAM,iBAAiB,GACrB,0gFAA0gF,CAAC;AAE7gF,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC3F,IAAI,GAAc,CAAC;IAEnB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,0FAA0F;QAC1F,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,0yBAA0yB,EAC1yB,QAAQ,CACT,CAAC;QAEF,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC;YACtD,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,WAAW;SACnB,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC;QAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACxD,MAAM,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,0yBAA0yB,EAC1yB,QAAQ,CACT,CAAC;YAEF,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;gBACjD,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;YAEH,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEtC,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC;YAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,CAAC,QAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,GAAqB,CAAC;YACrC,MAAM,CAAE,MAAM,CAAC,IAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,kDAAkD;QAClD,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC;YACxD,SAAS,EAAE,MAAM,EAAE,oBAAoB;YACvC,QAAQ,EAAE,kCAAkC;SAC7C,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;QAE7D,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC;QAEvD,0DAA0D;QAC1D,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAC5D,eAAe,EAAE,QAAQ;SAC1B,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE3E,qCAAqC;QACrC,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC;YACxD,SAAS,EAAE,QAAQ;YACnB,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;QAE7D,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC;QAEvD,IAAI,CAAC;YACH,+BAA+B;YAC/B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC;gBACxD,eAAe,EAAE,QAAQ;gBACzB,QAAQ,EAAE,CAAC;gBACX,WAAW,EAAE,OAAO;gBACpB,YAAY,EAAE,WAAW;aAC1B,CAAC,CAAC;YAEH,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEpC,2BAA2B;YAC3B,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC;gBAChE,eAAe,EAAE,QAAQ;gBACzB,aAAa,EAAE,CAAC,CAAC,CAAC;gBAClB,WAAW,EAAE;oBACX,WAAW,EAAE,GAAG;iBACjB;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAExC,wCAAwC;YACxC,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC;gBAC/D,eAAe,EAAE,QAAQ;aAC1B,CAAC,CAAC;YAEH,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,iEAAiE;YACjE,MAAM,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC;gBACrC,eAAe,EAAE,QAAQ;aAC1B,CAAC,CAAC;YACH,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { describe, it, expect, beforeAll } from "@jest/globals";
2
+ import { setupIntegrationTest } from "./setup.js";
3
+ const { runTests, initSdk } = setupIntegrationTest();
4
+ (runTests ? describe : describe.skip)("ShopeeSDK OrderManager Sandbox Integration Tests", () => {
5
+ let sdk;
6
+ beforeAll(async () => {
7
+ sdk = await initSdk();
8
+ });
9
+ it("should retrieve orders in last 15 days", async () => {
10
+ const timeTo = Math.floor(Date.now() / 1000);
11
+ const timeFrom = timeTo - 15 * 24 * 3600;
12
+ const ordersResponse = await sdk.order.getOrderList({
13
+ time_range_field: "create_time",
14
+ time_from: timeFrom,
15
+ time_to: timeTo,
16
+ page_size: 10,
17
+ });
18
+ expect(ordersResponse).toBeDefined();
19
+ expect(ordersResponse.request_id).toBeDefined();
20
+ if (ordersResponse.response) {
21
+ expect(Array.isArray(ordersResponse.response.order_list)).toBe(true);
22
+ }
23
+ });
24
+ });
25
+ //# sourceMappingURL=order.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/order.integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;AAErD,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC7F,IAAI,GAAc,CAAC;IAEnB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAEzC,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC;YAClD,gBAAgB,EAAE,aAAa;YAC/B,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,EAAE;SACd,CAAC,CAAC;QAEH,MAAM,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAChD,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { describe, it, expect, beforeAll } from "@jest/globals";
2
+ import { setupIntegrationTest } from "./setup.js";
3
+ import { ShopeeApiError } from "../../errors.js";
4
+ const { runTests, initSdk } = setupIntegrationTest();
5
+ (runTests ? describe : describe.skip)("ShopeeSDK Payment Integration Tests", () => {
6
+ let sdk;
7
+ beforeAll(async () => {
8
+ sdk = await initSdk();
9
+ });
10
+ it("should retrieve payment method list (auth: false)", async () => {
11
+ const result = await sdk.payment.getPaymentMethodList();
12
+ expect(result).toBeDefined();
13
+ expect(result.request_id).toBeDefined();
14
+ expect(result.response).toBeDefined();
15
+ expect(Array.isArray(result.response)).toBe(true);
16
+ expect(result.response.length).toBeGreaterThan(0);
17
+ const first = result.response[0];
18
+ expect(first.region).toBeDefined();
19
+ expect(Array.isArray(first.payment_method)).toBe(true);
20
+ }, 60000);
21
+ it("should retrieve shop installment status (auth: true)", async () => {
22
+ try {
23
+ const result = await sdk.payment.getShopInstallmentStatus();
24
+ expect(result).toBeDefined();
25
+ expect(result.request_id).toBeDefined();
26
+ if (result.response) {
27
+ expect(result.response.status).toBeDefined();
28
+ }
29
+ }
30
+ catch (err) {
31
+ if (err instanceof ShopeeApiError) {
32
+ expect(err.status).toBeDefined();
33
+ expect(err.data).toBeDefined();
34
+ }
35
+ else {
36
+ throw err;
37
+ }
38
+ }
39
+ }, 60000);
40
+ it("should gracefully propagate error when querying escrow detail with dummy order ID", async () => {
41
+ try {
42
+ await sdk.payment.getEscrowDetail({
43
+ order_sn: "NONEXISTENT_ORDER_SN_12345",
44
+ });
45
+ throw new Error("Should have thrown a ShopeeApiError");
46
+ }
47
+ catch (err) {
48
+ expect(err).toBeInstanceOf(ShopeeApiError);
49
+ const apiErr = err;
50
+ expect(apiErr.status).toBeDefined();
51
+ expect(apiErr.data).toBeDefined();
52
+ expect(apiErr.message).toBeDefined();
53
+ }
54
+ }, 60000);
55
+ });
56
+ //# sourceMappingURL=payment.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/payment.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,191 @@
1
+ import { describe, it, expect, beforeAll } from "@jest/globals";
2
+ import { setupIntegrationTest } from "./setup.js";
3
+ import { ItemStatus } from "../../schemas/product.js";
4
+ import { ShopeeApiError } from "../../errors.js";
5
+ const { runTests, initSdk } = setupIntegrationTest();
6
+ (runTests ? describe : describe.skip)("ShopeeSDK ProductManager Sandbox Integration Tests", () => {
7
+ let sdk;
8
+ let testCategoryId = 100001; // default fallback category ID
9
+ beforeAll(async () => {
10
+ sdk = await initSdk();
11
+ });
12
+ it("should retrieve category tree list and discover a valid category ID with no mandatory attributes", async () => {
13
+ const categoryResponse = await sdk.product.getCategory();
14
+ expect(categoryResponse).toBeDefined();
15
+ expect(categoryResponse.request_id).toBeDefined();
16
+ expect(categoryResponse.response).toBeDefined();
17
+ expect(Array.isArray(categoryResponse.response.category_list)).toBe(true);
18
+ if (categoryResponse.response.category_list &&
19
+ categoryResponse.response.category_list.length > 0) {
20
+ const leafCategories = categoryResponse.response.category_list.filter((cat) => !cat.has_children);
21
+ if (leafCategories.length > 0) {
22
+ testCategoryId = leafCategories[0].category_id;
23
+ }
24
+ // Dynamically traverse leaf categories to find one with no mandatory attributes (limit to 10 for speed)
25
+ for (const cat of leafCategories.slice(0, 10)) {
26
+ try {
27
+ const attrResponse = await sdk.product.getAttributeTree({ category_id: cat.category_id });
28
+ if (attrResponse.response && attrResponse.response.attribute_list) {
29
+ const hasMandatory = attrResponse.response.attribute_list.some((attr) => attr.is_mandatory);
30
+ if (!hasMandatory) {
31
+ testCategoryId = cat.category_id;
32
+ break;
33
+ }
34
+ }
35
+ }
36
+ catch {
37
+ // Skip failures
38
+ }
39
+ }
40
+ }
41
+ }, 30000);
42
+ it("should retrieve items from local sandbox shop", async () => {
43
+ const itemsResponse = await sdk.product.getItemList({
44
+ offset: 0,
45
+ page_size: 10,
46
+ item_status: [ItemStatus.NORMAL],
47
+ });
48
+ expect(itemsResponse).toBeDefined();
49
+ expect(itemsResponse.request_id).toBeDefined();
50
+ if (itemsResponse.response?.item) {
51
+ expect(Array.isArray(itemsResponse.response.item)).toBe(true);
52
+ }
53
+ });
54
+ it("should fetch boosted list of products", async () => {
55
+ const boostedResponse = await sdk.product.getBoostedList();
56
+ expect(boostedResponse).toBeDefined();
57
+ expect(boostedResponse.request_id).toBeDefined();
58
+ expect(boostedResponse.response).toBeDefined();
59
+ expect(Array.isArray(boostedResponse.response.item_list)).toBe(true);
60
+ });
61
+ it("should retrieve brand list for the test category ID", async () => {
62
+ const brandResponse = await sdk.product.getBrandList({
63
+ category_id: testCategoryId,
64
+ offset: 0,
65
+ page_size: 10,
66
+ status: 1,
67
+ });
68
+ expect(brandResponse).toBeDefined();
69
+ expect(brandResponse.request_id).toBeDefined();
70
+ expect(brandResponse.response).toBeDefined();
71
+ expect(Array.isArray(brandResponse.response.brand_list)).toBe(true);
72
+ });
73
+ it("should retrieve item limits for the test category ID", async () => {
74
+ const limitResponse = await sdk.product.getItemLimit({
75
+ category_id: testCategoryId,
76
+ });
77
+ expect(limitResponse).toBeDefined();
78
+ expect(limitResponse.request_id).toBeDefined();
79
+ expect(limitResponse.response).toBeDefined();
80
+ if (limitResponse.response.item_limit) {
81
+ expect(typeof limitResponse.response.item_limit.max_product_title_length).toBe("number");
82
+ }
83
+ });
84
+ it("should query category recommendations based on an item name", async () => {
85
+ try {
86
+ const recommendResponse = await sdk.product.categoryRecommend({
87
+ item_name: "Red Cotton T-Shirt",
88
+ });
89
+ expect(recommendResponse).toBeDefined();
90
+ expect(recommendResponse.request_id).toBeDefined();
91
+ expect(recommendResponse.response).toBeDefined();
92
+ if (recommendResponse.response.category_id_list) {
93
+ expect(Array.isArray(recommendResponse.response.category_id_list)).toBe(true);
94
+ }
95
+ }
96
+ catch (err) {
97
+ if (err instanceof ShopeeApiError) {
98
+ expect(err.data.error).toBe("product.error_unknown");
99
+ }
100
+ else {
101
+ throw err;
102
+ }
103
+ }
104
+ });
105
+ it("should query recommended attributes for the test category ID", async () => {
106
+ try {
107
+ const attributeResponse = await sdk.product.getRecommendAttribute({
108
+ category_id: testCategoryId,
109
+ });
110
+ expect(attributeResponse).toBeDefined();
111
+ expect(attributeResponse.request_id).toBeDefined();
112
+ expect(attributeResponse.response).toBeDefined();
113
+ if (attributeResponse.response.recommended_attribute_list) {
114
+ expect(Array.isArray(attributeResponse.response.recommended_attribute_list)).toBe(true);
115
+ }
116
+ }
117
+ catch (err) {
118
+ if (err instanceof ShopeeApiError) {
119
+ expect(err.data.error).toBe("product.error_unknown");
120
+ }
121
+ else {
122
+ throw err;
123
+ }
124
+ }
125
+ });
126
+ it("should successfully run the full product creation and deletion lifecycle", async () => {
127
+ // 1. Fetch enabled logistics channel
128
+ const logisticsResponse = await sdk.logistics.getChannelList();
129
+ expect(logisticsResponse).toBeDefined();
130
+ expect(logisticsResponse.response?.logistics_channel_list).toBeDefined();
131
+ const enabledChannel = logisticsResponse.response.logistics_channel_list.find((ch) => ch.enabled);
132
+ const channelId = enabledChannel ? enabledChannel.logistics_channel_id : 20001;
133
+ const channelName = enabledChannel
134
+ ? enabledChannel.logistics_channel_name
135
+ : "Standard Delivery";
136
+ // 2. Upload a temporary 200x200 image pixel to satisfy image requirements and avoid Sandbox rejection
137
+ const imageBuffer = Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAIAAAAiOjnJAAAACXBIWXMAAAABAAAAAQBPJcTWAAACEElEQVR4nO3SQQkAMAzAwPo3vaoIg3KnII/Mg8D8DuAmY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBYJY5EwFgljkTAWCWORMBaJBcLKBp7i8n+mAAAAAElFTkSuQmCC", "base64");
138
+ const uploadResponse = await sdk.mediaSpace.uploadImage({
139
+ scene: "normal",
140
+ ratio: "1:1",
141
+ image: imageBuffer,
142
+ });
143
+ expect(uploadResponse.response?.image_info_list).toBeDefined();
144
+ const imageId = uploadResponse.response.image_info_list[0].image_info.image_id;
145
+ // 3. Create the product
146
+ const itemName = "Sandbox Test Product " + Date.now();
147
+ const addResponse = await sdk.product.addItem({
148
+ item_name: itemName,
149
+ description: "This is a detailed sandbox integration test product description that satisfies minimum length requirement.",
150
+ original_price: 50000,
151
+ category_id: testCategoryId,
152
+ weight: 0.5,
153
+ dimension: {
154
+ package_length: 10,
155
+ package_width: 10,
156
+ package_height: 10,
157
+ },
158
+ image: {
159
+ image_id_list: [imageId],
160
+ },
161
+ logistic_info: [
162
+ {
163
+ logistic_id: channelId,
164
+ logistic_name: channelName,
165
+ enabled: true,
166
+ is_free: false,
167
+ },
168
+ ],
169
+ brand: {
170
+ brand_id: 0,
171
+ original_brand_name: "NoBrand",
172
+ },
173
+ seller_stock: [
174
+ {
175
+ stock: 100,
176
+ },
177
+ ],
178
+ });
179
+ expect(addResponse).toBeDefined();
180
+ expect(addResponse.error).toBe("");
181
+ expect(addResponse.response?.item_id).toBeDefined();
182
+ const createdItemId = addResponse.response.item_id;
183
+ // 4. Tear down: delete the newly created product immediately to keep Sandbox clean
184
+ const deleteResponse = await sdk.product.deleteItem({
185
+ item_id: createdItemId,
186
+ });
187
+ expect(deleteResponse).toBeDefined();
188
+ expect(deleteResponse.error).toBe("");
189
+ });
190
+ });
191
+ //# sourceMappingURL=product.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/product.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { describe, it, expect, beforeAll } from "@jest/globals";
2
+ import { setupIntegrationTest } from "./setup.js";
3
+ const { runTests, initSdk } = setupIntegrationTest();
4
+ (runTests ? describe : describe.skip)("ShopeeSDK PublicManager Sandbox Integration Tests", () => {
5
+ let sdk;
6
+ beforeAll(async () => {
7
+ sdk = await initSdk();
8
+ });
9
+ it("should successfully fetch Shopee IP ranges from the sandbox environment", async () => {
10
+ const response = await sdk.public.getShopeeIpRange();
11
+ expect(response).toBeDefined();
12
+ expect(response.request_id).toBeDefined();
13
+ if (response.response) {
14
+ expect(response.response.ip_list).toBeDefined();
15
+ expect(Array.isArray(response.response.ip_list)).toBe(true);
16
+ }
17
+ }, 60000);
18
+ it("should fetch shops associated with partner in the sandbox environment", async () => {
19
+ const response = await sdk.public.getShopsByPartner();
20
+ expect(response).toBeDefined();
21
+ expect(response.request_id).toBeDefined();
22
+ if (response.response) {
23
+ expect(Array.isArray(response.response.authed_shop_list)).toBe(true);
24
+ }
25
+ }, 60000);
26
+ });
27
+ //# sourceMappingURL=public.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/public.integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;AAErD,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC9F,IAAI,GAAc,CAAC;IAEnB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAErD,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAEtD,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ShopeeSDK } from "../../sdk.js";
2
+ export declare function setupIntegrationTest(): {
3
+ runTests: boolean;
4
+ initSdk: () => Promise<ShopeeSDK>;
5
+ hasValidToken: () => boolean;
6
+ };
@@ -0,0 +1,51 @@
1
+ import { ShopeeSDK } from "../../sdk.js";
2
+ import { ShopeeRegion } from "../../schemas/region.js";
3
+ import { getSandboxConfig, hasSandboxPartnerCredentials } from "../utils/env-helper.js";
4
+ export function setupIntegrationTest() {
5
+ const runTests = hasSandboxPartnerCredentials();
6
+ let sdk;
7
+ let hasValidToken = false;
8
+ const initSdk = async () => {
9
+ if (sdk)
10
+ return sdk;
11
+ const config = getSandboxConfig();
12
+ sdk = new ShopeeSDK({
13
+ partner_id: config.partner_id,
14
+ partner_key: config.partner_key,
15
+ shop_id: config.shop_id,
16
+ region: ShopeeRegion.TEST_GLOBAL, // TEST_GLOBAL serves local Vietnam sandbox accounts
17
+ });
18
+ // 1. If an explicit access token was provided in .env, pre-load it into storage
19
+ if (config.access_token) {
20
+ const token = {
21
+ access_token: config.access_token,
22
+ refresh_token: config.refresh_token || "",
23
+ expire_in: 3600,
24
+ expired_at: Date.now() + 3600000, // Valid for 1 hour
25
+ shop_id: config.shop_id,
26
+ request_id: "env-injected",
27
+ error: "",
28
+ message: "",
29
+ };
30
+ await sdk["tokenStorage"].store(token);
31
+ hasValidToken = typeof config.shop_id === "number" && !isNaN(config.shop_id);
32
+ }
33
+ else {
34
+ // 2. Check if there's already a valid token in the persistent token storage
35
+ const token = await sdk.getAuthToken();
36
+ if (token &&
37
+ typeof token.shop_id === "number" &&
38
+ token.expired_at &&
39
+ token.expired_at > Date.now()) {
40
+ hasValidToken = true;
41
+ }
42
+ }
43
+ return sdk;
44
+ };
45
+ return {
46
+ runTests,
47
+ initSdk,
48
+ hasValidToken: () => hasValidToken,
49
+ };
50
+ }
51
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/__tests__/integration/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAGxF,MAAM,UAAU,oBAAoB;IAClC,MAAM,QAAQ,GAAG,4BAA4B,EAAE,CAAC;IAChD,IAAI,GAAc,CAAC;IACnB,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;QACpB,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,GAAG,GAAG,IAAI,SAAS,CAAC;YAClB,UAAU,EAAE,MAAM,CAAC,UAAW;YAC9B,WAAW,EAAE,MAAM,CAAC,WAAY;YAChC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,YAAY,CAAC,WAAW,EAAE,oDAAoD;SACvF,CAAC,CAAC;QAEH,gFAAgF;QAChF,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,MAAM,KAAK,GAAgB;gBACzB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;gBACzC,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,mBAAmB;gBACrD,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,UAAU,EAAE,cAAc;gBAC1B,KAAK,EAAE,EAAE;gBACT,OAAO,EAAE,EAAE;aACZ,CAAC;YACF,MAAM,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,aAAa,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/E,CAAC;aAAM,CAAC;YACN,4EAA4E;YAC5E,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;YACvC,IACE,KAAK;gBACL,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;gBACjC,KAAK,CAAC,UAAU;gBAChB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,EAC7B,CAAC;gBACD,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,OAAO;QACP,aAAa,EAAE,GAAG,EAAE,CAAC,aAAa;KACnC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { describe, it, expect, beforeAll } from "@jest/globals";
2
+ import { setupIntegrationTest } from "./setup.js";
3
+ const { runTests, initSdk } = setupIntegrationTest();
4
+ (runTests ? describe : describe.skip)("ShopeeSDK ShopCategoryManager Sandbox Integration Tests", () => {
5
+ let sdk;
6
+ beforeAll(async () => {
7
+ sdk = await initSdk();
8
+ });
9
+ it("should successfully run the full shop category collection lifecycle", async () => {
10
+ // 1. Add a new custom shop collection category
11
+ const categoryName = "Sandbox Collection " + Date.now();
12
+ const addResponse = await sdk.shopCategory.addShopCategory({
13
+ name: categoryName,
14
+ sort_weight: 10,
15
+ });
16
+ expect(addResponse).toBeDefined();
17
+ expect(addResponse.error || "").toBe("");
18
+ expect(addResponse.response?.shop_category_id).toBeDefined();
19
+ const testCategoryId = addResponse.response.shop_category_id;
20
+ try {
21
+ // 2. Retrieve collections and verify presence
22
+ const listResponse = await sdk.shopCategory.getShopCategoryList({
23
+ page_size: 100,
24
+ page_no: 1,
25
+ });
26
+ expect(listResponse).toBeDefined();
27
+ expect(listResponse.error || "").toBe("");
28
+ expect(Array.isArray(listResponse.response?.shop_categorys)).toBe(true);
29
+ const createdCat = listResponse.response.shop_categorys.find((cat) => cat.shop_category_id === testCategoryId);
30
+ expect(createdCat).toBeDefined();
31
+ expect(createdCat?.name).toBe(categoryName);
32
+ // 3. Update the category name
33
+ const updatedName = "Sandbox Collection U " + Date.now();
34
+ const updateResponse = await sdk.shopCategory.updateShopCategory({
35
+ shop_category_id: testCategoryId,
36
+ name: updatedName,
37
+ });
38
+ expect(updateResponse).toBeDefined();
39
+ expect(updateResponse.error || "").toBe("");
40
+ expect(updateResponse.response?.shop_category_id).toBe(testCategoryId);
41
+ }
42
+ finally {
43
+ // 4. Delete the custom shop collection category immediately
44
+ const deleteResponse = await sdk.shopCategory.deleteShopCategory({
45
+ shop_category_id: testCategoryId,
46
+ });
47
+ expect(deleteResponse).toBeDefined();
48
+ expect(deleteResponse.error || "").toBe("");
49
+ expect(deleteResponse.response?.shop_category_id).toBe(testCategoryId);
50
+ }
51
+ });
52
+ });
53
+ //# sourceMappingURL=shop-category.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shop-category.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/shop-category.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { describe, it, expect, beforeAll } from "@jest/globals";
2
+ import { setupIntegrationTest } from "./setup.js";
3
+ const { runTests, initSdk } = setupIntegrationTest();
4
+ (runTests ? describe : describe.skip)("ShopeeSDK ShopManager Sandbox Integration Tests", () => {
5
+ let sdk;
6
+ beforeAll(async () => {
7
+ sdk = await initSdk();
8
+ });
9
+ it("should retrieve shop info details", async () => {
10
+ const shopInfo = await sdk.shop.getShopInfo();
11
+ expect(shopInfo).toBeDefined();
12
+ expect(shopInfo.request_id).toBeDefined();
13
+ if (shopInfo.shop_name) {
14
+ expect(typeof shopInfo.shop_name).toBe("string");
15
+ }
16
+ }, 60000);
17
+ it("should retrieve shop profile details", async () => {
18
+ const profile = await sdk.shop.getProfile();
19
+ expect(profile).toBeDefined();
20
+ expect(profile.request_id).toBeDefined();
21
+ }, 60000);
22
+ });
23
+ //# sourceMappingURL=shop.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shop.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/shop.integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAAC;AAErD,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAC5F,IAAI,GAAc,CAAC;IAEnB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,GAAG,GAAG,MAAM,OAAO,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE9C,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAE5C,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3C,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { describe, it, expect, beforeAll } from "@jest/globals";
2
+ import { setupIntegrationTest } from "./setup.js";
3
+ import { VoucherStatus } from "../../schemas/voucher.js";
4
+ const { runTests, initSdk } = setupIntegrationTest();
5
+ (runTests ? describe : describe.skip)("ShopeeSDK VoucherManager Sandbox Integration Tests", () => {
6
+ let sdk;
7
+ let testVoucherId;
8
+ beforeAll(async () => {
9
+ sdk = await initSdk();
10
+ });
11
+ it("should successfully run the full voucher lifecycle", async () => {
12
+ // 1. Create a Voucher starting tomorrow and ending in 3 days
13
+ const startTime = Math.floor(Date.now() / 1000) + 86400; // Tomorrow
14
+ const endTime = startTime + 86400 * 2; // Next 2 days
15
+ const addResponse = await sdk.voucher.addVoucher({
16
+ voucher_name: "Integration Test Voucher",
17
+ voucher_code: "IV" + Math.floor(100 + Math.random() * 899),
18
+ start_time: startTime,
19
+ end_time: endTime,
20
+ voucher_type: 1, // Shop Voucher
21
+ reward_type: 1, // Fix Amount Discount
22
+ usage_quantity: 10,
23
+ discount_amount: 10000, // 10k VND
24
+ min_basket_price: 50000, // 50k VND
25
+ });
26
+ expect(addResponse).toBeDefined();
27
+ expect(addResponse.error).toBe("");
28
+ expect(addResponse.response?.voucher_id).toBeDefined();
29
+ testVoucherId = addResponse.response?.voucher_id;
30
+ if (testVoucherId) {
31
+ // 2. Fetch the voucher detail to verify
32
+ const getResponse = await sdk.voucher.getVoucher({
33
+ voucher_id: testVoucherId,
34
+ });
35
+ expect(getResponse.error).toBe("");
36
+ expect(getResponse.response?.voucher_name).toBe("Integration Test Voucher");
37
+ // 3. Update the voucher limits
38
+ const updateResponse = await sdk.voucher.updateVoucher({
39
+ voucher_id: testVoucherId,
40
+ usage_quantity: 15,
41
+ });
42
+ expect(updateResponse.error).toBe("");
43
+ // 4. Delete the upcoming voucher (clean up)
44
+ const deleteResponse = await sdk.voucher.deleteVoucher({
45
+ voucher_id: testVoucherId,
46
+ });
47
+ expect(deleteResponse.error).toBe("");
48
+ }
49
+ });
50
+ it("should successfully list shop vouchers", async () => {
51
+ const listResponse = await sdk.voucher.getVoucherList({
52
+ status: VoucherStatus.ALL,
53
+ page_no: 1,
54
+ page_size: 10,
55
+ });
56
+ expect(listResponse).toBeDefined();
57
+ expect(listResponse.error).toBe("");
58
+ if (listResponse.response?.voucher_list) {
59
+ expect(Array.isArray(listResponse.response.voucher_list)).toBe(true);
60
+ }
61
+ });
62
+ });
63
+ //# sourceMappingURL=voucher.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voucher.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/voucher.integration.test.ts"],"names":[],"mappings":"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"}
@@ -31,11 +31,13 @@ describe("LogisticsManager", () => {
31
31
  order_sn: "220101000000001",
32
32
  package_number: "PKG123456789",
33
33
  logistics_status: "LOGISTICS_DELIVERED",
34
+ collection_pin_code: "562891",
34
35
  tracking_info: [
35
36
  {
36
37
  update_time: 1640995200,
37
38
  description: "Package has been delivered",
38
39
  logistics_status: "LOGISTICS_DELIVERED",
40
+ return_code: "1234",
39
41
  },
40
42
  {
41
43
  update_time: 1640995100,