@congminh1254/shopee-sdk 1.6.1 → 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 +65 -3
  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 +43 -8
  123. package/lib/managers/media.manager.js +75 -7
  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 +113 -6
  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,227 @@
1
+ import { ShopeeSDK } from "../sdk.js";
2
+ import { ShopeeRegion } from "../schemas/region.js";
3
+ import { ShopeeSdkError } from "../errors.js";
4
+ import { jest } from "@jest/globals";
5
+ import { Agent } from "node:http";
6
+ // Mock the managers
7
+ jest.mock("../managers/auth.manager.js");
8
+ jest.mock("../managers/product.manager.js");
9
+ jest.mock("../managers/order.manager.js");
10
+ jest.mock("../managers/public.manager.js");
11
+ jest.mock("../managers/push.manager.js");
12
+ jest.mock("../storage/custom-token-storage.js");
13
+ describe("ShopeeSDK", () => {
14
+ let sdk;
15
+ const mockConfig = {
16
+ partner_id: 12345,
17
+ partner_key: "test_key",
18
+ shop_id: 67890,
19
+ };
20
+ beforeEach(() => {
21
+ sdk = new ShopeeSDK(mockConfig);
22
+ });
23
+ describe("initialization", () => {
24
+ it("should initialize with default configuration", () => {
25
+ expect(sdk).toBeDefined();
26
+ expect(sdk.auth).toBeDefined();
27
+ expect(sdk.product).toBeDefined();
28
+ expect(sdk.order).toBeDefined();
29
+ expect(sdk.public).toBeDefined();
30
+ expect(sdk.push).toBeDefined();
31
+ });
32
+ it("should initialize with custom region", () => {
33
+ const customSdk = new ShopeeSDK({
34
+ ...mockConfig,
35
+ region: ShopeeRegion.CHINA,
36
+ });
37
+ const config = customSdk.getConfig();
38
+ expect(config.region).toBe(ShopeeRegion.CHINA);
39
+ });
40
+ it("should initialize with custom base URL", () => {
41
+ const customUrl = "https://custom.shopee.com/api/v2";
42
+ const customSdk = new ShopeeSDK({
43
+ ...mockConfig,
44
+ base_url: customUrl,
45
+ });
46
+ const config = customSdk.getConfig();
47
+ expect(config.base_url).toBe(customUrl);
48
+ });
49
+ it("should initialize with custom token storage", () => {
50
+ const mockTokenStorage = {
51
+ store: jest.fn(),
52
+ get: jest.fn(),
53
+ clear: jest.fn(),
54
+ };
55
+ const customSdk = new ShopeeSDK(mockConfig, mockTokenStorage);
56
+ expect(customSdk).toBeDefined();
57
+ });
58
+ });
59
+ describe("configuration", () => {
60
+ it("should get current configuration", () => {
61
+ const config = sdk.getConfig();
62
+ expect(config.partner_id).toBe(mockConfig.partner_id);
63
+ expect(config.partner_key).toBe(mockConfig.partner_key);
64
+ expect(config.shop_id).toBe(mockConfig.shop_id);
65
+ });
66
+ it("should set region and update base URL", () => {
67
+ sdk.setRegion(ShopeeRegion.CHINA);
68
+ const config = sdk.getConfig();
69
+ expect(config.region).toBe(ShopeeRegion.CHINA);
70
+ expect(config.base_url).toBeDefined();
71
+ });
72
+ it("should set custom base URL and clear region", () => {
73
+ const customUrl = "https://custom.shopee.com/api/v2";
74
+ sdk.setBaseUrl(customUrl);
75
+ const config = sdk.getConfig();
76
+ expect(config.base_url).toBe(customUrl);
77
+ expect(config.region).toBeUndefined();
78
+ });
79
+ it("should set fetch agent", () => {
80
+ const mockAgent = new Agent();
81
+ sdk.setFetchAgent(mockAgent);
82
+ const config = sdk.getConfig();
83
+ expect(config.agent).toBe(mockAgent);
84
+ });
85
+ });
86
+ describe("authorization", () => {
87
+ it("should generate authorization URL with correct parameters", () => {
88
+ const redirectUri = "https://example.com/callback";
89
+ const url = sdk.getAuthorizationUrl(redirectUri);
90
+ expect(url).toContain("partner_id=12345");
91
+ expect(url).toContain("redirect=" + redirectUri);
92
+ expect(url).toContain("timestamp=");
93
+ expect(url).toContain("sign=");
94
+ });
95
+ it("should generate different URLs for different redirect URIs", () => {
96
+ const url1 = sdk.getAuthorizationUrl("https://example1.com/callback");
97
+ const url2 = sdk.getAuthorizationUrl("https://example2.com/callback");
98
+ expect(url1).not.toBe(url2);
99
+ });
100
+ });
101
+ describe("authentication", () => {
102
+ it("should authenticate with code and store token", async () => {
103
+ const mockToken = {
104
+ access_token: "test_token",
105
+ refresh_token: "test_refresh_token",
106
+ expire_in: 3600,
107
+ request_id: "test_request_id",
108
+ error: "",
109
+ message: "",
110
+ };
111
+ // Mock auth manager's getAccessToken
112
+ const mockGetAccessToken = jest.fn();
113
+ mockGetAccessToken.mockResolvedValue(mockToken);
114
+ const mockAuthManager = sdk.auth;
115
+ mockAuthManager.getAccessToken = mockGetAccessToken;
116
+ // Mock token storage
117
+ const mockStore = jest.fn();
118
+ const mockTokenStorage = {
119
+ store: mockStore,
120
+ get: jest.fn(),
121
+ clear: jest.fn(),
122
+ };
123
+ sdk["tokenStorage"] = mockTokenStorage;
124
+ const token = await sdk.authenticateWithCode("test_code");
125
+ expect(mockGetAccessToken).toHaveBeenCalledWith("test_code", undefined, undefined);
126
+ expect(mockStore).toHaveBeenCalledWith(mockToken);
127
+ expect(token).toEqual(mockToken);
128
+ });
129
+ it("should get stored token", async () => {
130
+ const mockToken = {
131
+ access_token: "test_token",
132
+ refresh_token: "test_refresh_token",
133
+ expire_in: 3600,
134
+ request_id: "test_request_id",
135
+ error: "",
136
+ message: "",
137
+ };
138
+ // Mock token storage
139
+ const mockGet = jest.fn();
140
+ mockGet.mockResolvedValue(mockToken);
141
+ const mockTokenStorage = {
142
+ store: jest.fn(),
143
+ get: mockGet,
144
+ clear: jest.fn(),
145
+ };
146
+ sdk["tokenStorage"] = mockTokenStorage;
147
+ const token = await sdk.getAuthToken();
148
+ expect(token).toEqual(mockToken);
149
+ });
150
+ it("should refresh token", async () => {
151
+ const oldToken = {
152
+ access_token: "old_token",
153
+ refresh_token: "test_refresh_token",
154
+ expire_in: 3600,
155
+ request_id: "test_request_id",
156
+ error: "",
157
+ message: "",
158
+ };
159
+ const newToken = {
160
+ access_token: "new_token",
161
+ refresh_token: "new_refresh_token",
162
+ expire_in: 3600,
163
+ request_id: "test_request_id",
164
+ error: "",
165
+ message: "",
166
+ };
167
+ // Mock token storage
168
+ const mockGet = jest.fn();
169
+ mockGet.mockResolvedValue(oldToken);
170
+ const mockStore = jest.fn();
171
+ const mockTokenStorage = {
172
+ store: mockStore,
173
+ get: mockGet,
174
+ clear: jest.fn(),
175
+ };
176
+ sdk["tokenStorage"] = mockTokenStorage;
177
+ // Mock auth manager's getRefreshToken
178
+ const mockGetRefreshToken = jest.fn();
179
+ mockGetRefreshToken.mockResolvedValue(newToken);
180
+ const mockAuthManager = sdk.auth;
181
+ mockAuthManager.getRefreshToken = mockGetRefreshToken;
182
+ const token = await sdk.refreshToken();
183
+ expect(mockGetRefreshToken).toHaveBeenCalledWith("test_refresh_token", undefined, undefined);
184
+ expect(mockStore).toHaveBeenCalledWith(newToken);
185
+ expect(token).toEqual(newToken);
186
+ });
187
+ it("should throw error when refreshing without stored token", async () => {
188
+ // Mock token storage to return null
189
+ const mockGet = jest.fn();
190
+ mockGet.mockResolvedValue(null);
191
+ const mockTokenStorage = {
192
+ store: jest.fn(),
193
+ get: mockGet,
194
+ clear: jest.fn(),
195
+ };
196
+ sdk["tokenStorage"] = mockTokenStorage;
197
+ await expect(sdk.refreshToken()).rejects.toThrow(ShopeeSdkError);
198
+ });
199
+ it("should return null when refresh token returns null", async () => {
200
+ const oldToken = {
201
+ access_token: "old_token",
202
+ refresh_token: "test_refresh_token",
203
+ expire_in: 3600,
204
+ request_id: "test_request_id",
205
+ error: "",
206
+ message: "",
207
+ };
208
+ // Mock token storage
209
+ const mockGet = jest.fn();
210
+ mockGet.mockResolvedValue(oldToken);
211
+ const mockTokenStorage = {
212
+ store: jest.fn(),
213
+ get: mockGet,
214
+ clear: jest.fn(),
215
+ };
216
+ sdk["tokenStorage"] = mockTokenStorage;
217
+ // Mock auth manager's getRefreshToken to return null
218
+ const mockGetRefreshToken = jest.fn();
219
+ mockGetRefreshToken.mockResolvedValue(null);
220
+ const mockAuthManager = sdk.auth;
221
+ mockAuthManager.getRefreshToken = mockGetRefreshToken;
222
+ const token = await sdk.refreshToken();
223
+ expect(token).toBeNull();
224
+ });
225
+ });
226
+ });
227
+ //# sourceMappingURL=sdk.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.test.js","sourceRoot":"","sources":["../../src/__tests__/sdk.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,337 @@
1
+ import { jest } from "@jest/globals";
2
+ import { CustomTokenStorage } from "../../storage/custom-token-storage.js";
3
+ import fs from "fs";
4
+ import path from "path";
5
+ // Create a unique test directory for each test run
6
+ const TEST_DIR = path.join(process.cwd(), ".token-test-" + Date.now());
7
+ describe("CustomTokenStorage", () => {
8
+ beforeAll(() => {
9
+ // Mock process.cwd to use test directory
10
+ jest.spyOn(process, "cwd").mockReturnValue(TEST_DIR);
11
+ });
12
+ afterAll(() => {
13
+ // Restore original cwd
14
+ jest.restoreAllMocks();
15
+ // Clean up test directory
16
+ if (fs.existsSync(path.join(TEST_DIR, ".token"))) {
17
+ const tokenDir = path.join(TEST_DIR, ".token");
18
+ const files = fs.readdirSync(tokenDir);
19
+ files.forEach((file) => {
20
+ fs.unlinkSync(path.join(tokenDir, file));
21
+ });
22
+ fs.rmdirSync(tokenDir);
23
+ }
24
+ });
25
+ afterEach(() => {
26
+ // Clean up token files after each test
27
+ const tokenDir = path.join(TEST_DIR, ".token");
28
+ if (fs.existsSync(tokenDir)) {
29
+ const files = fs.readdirSync(tokenDir);
30
+ files.forEach((file) => {
31
+ fs.unlinkSync(path.join(tokenDir, file));
32
+ });
33
+ }
34
+ });
35
+ describe("constructor", () => {
36
+ it("should create token directory if it does not exist", () => {
37
+ new CustomTokenStorage(123456);
38
+ const tokenDir = path.join(TEST_DIR, ".token");
39
+ expect(fs.existsSync(tokenDir)).toBe(true);
40
+ });
41
+ it("should use default.json when no shopId is provided", () => {
42
+ new CustomTokenStorage();
43
+ // We can't directly access private properties, but we can verify the storage is created
44
+ const tokenDir = path.join(TEST_DIR, ".token");
45
+ expect(fs.existsSync(tokenDir)).toBe(true);
46
+ });
47
+ });
48
+ describe("store method", () => {
49
+ it("should store token successfully", async () => {
50
+ const storage = new CustomTokenStorage(123456);
51
+ const token = {
52
+ access_token: "test_token",
53
+ refresh_token: "test_refresh",
54
+ expire_in: 14400,
55
+ expired_at: Date.now() + 14400000,
56
+ shop_id: 123456,
57
+ request_id: "test-request-id",
58
+ error: "",
59
+ message: "",
60
+ };
61
+ await storage.store(token);
62
+ const tokenPath = path.join(TEST_DIR, ".token", "123456.json");
63
+ expect(fs.existsSync(tokenPath)).toBe(true);
64
+ const storedData = JSON.parse(fs.readFileSync(tokenPath, "utf-8"));
65
+ expect(storedData).toEqual(token);
66
+ });
67
+ it("should create default token file on first store with shopId", async () => {
68
+ const storage = new CustomTokenStorage(789012);
69
+ const token = {
70
+ access_token: "test_token",
71
+ refresh_token: "test_refresh",
72
+ expire_in: 14400,
73
+ expired_at: Date.now() + 14400000,
74
+ shop_id: 789012,
75
+ request_id: "test-request-id",
76
+ error: "",
77
+ message: "",
78
+ };
79
+ await storage.store(token);
80
+ const tokenPath = path.join(TEST_DIR, ".token", "789012.json");
81
+ const defaultPath = path.join(TEST_DIR, ".token", "default.json");
82
+ expect(fs.existsSync(tokenPath)).toBe(true);
83
+ expect(fs.existsSync(defaultPath)).toBe(true);
84
+ const storedData = JSON.parse(fs.readFileSync(tokenPath, "utf-8"));
85
+ const defaultData = JSON.parse(fs.readFileSync(defaultPath, "utf-8"));
86
+ expect(storedData).toEqual(token);
87
+ expect(defaultData).toEqual(token);
88
+ });
89
+ it("should not overwrite existing default token", async () => {
90
+ // First, create a default token
91
+ const firstStorage = new CustomTokenStorage(111111);
92
+ const firstToken = {
93
+ access_token: "first_token",
94
+ refresh_token: "first_refresh",
95
+ expire_in: 14400,
96
+ expired_at: Date.now() + 14400000,
97
+ shop_id: 111111,
98
+ request_id: "test-request-id",
99
+ error: "",
100
+ message: "",
101
+ };
102
+ await firstStorage.store(firstToken);
103
+ // Then store a second token with different shopId
104
+ const secondStorage = new CustomTokenStorage(222222);
105
+ const secondToken = {
106
+ access_token: "second_token",
107
+ refresh_token: "second_refresh",
108
+ expire_in: 14400,
109
+ expired_at: Date.now() + 14400000,
110
+ shop_id: 222222,
111
+ request_id: "test-request-id",
112
+ error: "",
113
+ message: "",
114
+ };
115
+ await secondStorage.store(secondToken);
116
+ const defaultPath = path.join(TEST_DIR, ".token", "default.json");
117
+ const defaultData = JSON.parse(fs.readFileSync(defaultPath, "utf-8"));
118
+ // Default should still be the first token
119
+ expect(defaultData.access_token).toBe("first_token");
120
+ });
121
+ it("should throw error on write failure", async () => {
122
+ const storage = new CustomTokenStorage(999999);
123
+ const token = {
124
+ access_token: "test_token",
125
+ refresh_token: "test_refresh",
126
+ expire_in: 14400,
127
+ expired_at: Date.now() + 14400000,
128
+ shop_id: 999999,
129
+ request_id: "test-request-id",
130
+ error: "",
131
+ message: "",
132
+ };
133
+ // Mock writeFileSync to throw an error
134
+ const originalWriteFileSync = fs.writeFileSync;
135
+ jest.spyOn(fs, "writeFileSync").mockImplementation(() => {
136
+ throw new Error("Write failed");
137
+ });
138
+ await expect(storage.store(token)).rejects.toThrow("Failed to store token");
139
+ await expect(storage.store(token)).rejects.toThrow("Write failed");
140
+ // Restore original function
141
+ fs.writeFileSync = originalWriteFileSync;
142
+ });
143
+ });
144
+ describe("get method", () => {
145
+ it("should retrieve stored token successfully", async () => {
146
+ const storage = new CustomTokenStorage(123456);
147
+ const token = {
148
+ access_token: "test_token",
149
+ refresh_token: "test_refresh",
150
+ expire_in: 14400,
151
+ expired_at: Date.now() + 14400000,
152
+ shop_id: 123456,
153
+ request_id: "test-request-id",
154
+ error: "",
155
+ message: "",
156
+ };
157
+ await storage.store(token);
158
+ const retrieved = await storage.get();
159
+ expect(retrieved).toEqual(token);
160
+ });
161
+ it("should return null when token file does not exist", async () => {
162
+ const storage = new CustomTokenStorage(999999);
163
+ const result = await storage.get();
164
+ expect(result).toBeNull();
165
+ });
166
+ it("should throw error on read failure (non-ENOENT)", async () => {
167
+ const storage = new CustomTokenStorage(555555);
168
+ const token = {
169
+ access_token: "test_token",
170
+ refresh_token: "test_refresh",
171
+ expire_in: 14400,
172
+ expired_at: Date.now() + 14400000,
173
+ shop_id: 555555,
174
+ request_id: "test-request-id",
175
+ error: "",
176
+ message: "",
177
+ };
178
+ await storage.store(token);
179
+ // Mock readFileSync to throw a non-ENOENT error
180
+ const originalReadFileSync = fs.readFileSync;
181
+ jest.spyOn(fs, "readFileSync").mockImplementation(() => {
182
+ const error = new Error("Permission denied");
183
+ error.code = "EACCES";
184
+ throw error;
185
+ });
186
+ await expect(storage.get()).rejects.toThrow("Failed to get token");
187
+ await expect(storage.get()).rejects.toThrow("Permission denied");
188
+ // Restore original function
189
+ fs.readFileSync = originalReadFileSync;
190
+ });
191
+ });
192
+ describe("clear method", () => {
193
+ it("should clear stored token successfully", async () => {
194
+ const storage = new CustomTokenStorage(123456);
195
+ const token = {
196
+ access_token: "test_token",
197
+ refresh_token: "test_refresh",
198
+ expire_in: 14400,
199
+ expired_at: Date.now() + 14400000,
200
+ shop_id: 123456,
201
+ request_id: "test-request-id",
202
+ error: "",
203
+ message: "",
204
+ };
205
+ await storage.store(token);
206
+ const tokenPath = path.join(TEST_DIR, ".token", "123456.json");
207
+ expect(fs.existsSync(tokenPath)).toBe(true);
208
+ await storage.clear();
209
+ expect(fs.existsSync(tokenPath)).toBe(false);
210
+ const retrieved = await storage.get();
211
+ expect(retrieved).toBeNull();
212
+ });
213
+ it("should handle clearing non-existent token gracefully", async () => {
214
+ const storage = new CustomTokenStorage(999999);
215
+ // Should not throw error
216
+ await expect(storage.clear()).resolves.not.toThrow();
217
+ });
218
+ it("should throw error on delete failure (non-ENOENT)", async () => {
219
+ const storage = new CustomTokenStorage(777777);
220
+ const token = {
221
+ access_token: "test_token",
222
+ refresh_token: "test_refresh",
223
+ expire_in: 14400,
224
+ expired_at: Date.now() + 14400000,
225
+ shop_id: 777777,
226
+ request_id: "test-request-id",
227
+ error: "",
228
+ message: "",
229
+ };
230
+ await storage.store(token);
231
+ // Mock unlinkSync to throw a non-ENOENT error
232
+ const originalUnlinkSync = fs.unlinkSync;
233
+ jest.spyOn(fs, "unlinkSync").mockImplementation(() => {
234
+ const error = new Error("Permission denied");
235
+ error.code = "EACCES";
236
+ throw error;
237
+ });
238
+ await expect(storage.clear()).rejects.toThrow("Failed to clear token");
239
+ await expect(storage.clear()).rejects.toThrow("Permission denied");
240
+ // Restore original function
241
+ fs.unlinkSync = originalUnlinkSync;
242
+ });
243
+ });
244
+ describe("integration tests", () => {
245
+ it("should handle full lifecycle: store, get, clear", async () => {
246
+ const storage = new CustomTokenStorage(888888);
247
+ // Initially should be null
248
+ let result = await storage.get();
249
+ expect(result).toBeNull();
250
+ // Store a token
251
+ const token = {
252
+ access_token: "lifecycle_token",
253
+ refresh_token: "lifecycle_refresh",
254
+ expire_in: 14400,
255
+ expired_at: Date.now() + 14400000,
256
+ shop_id: 888888,
257
+ request_id: "test-request-id",
258
+ error: "",
259
+ message: "",
260
+ };
261
+ await storage.store(token);
262
+ // Retrieve the token
263
+ result = await storage.get();
264
+ expect(result).toEqual(token);
265
+ // Clear the token
266
+ await storage.clear();
267
+ // Should be null again
268
+ result = await storage.get();
269
+ expect(result).toBeNull();
270
+ });
271
+ it("should handle multiple shop IDs independently", async () => {
272
+ const storage1 = new CustomTokenStorage(111);
273
+ const storage2 = new CustomTokenStorage(222);
274
+ const token1 = {
275
+ access_token: "token_111",
276
+ refresh_token: "refresh_111",
277
+ expire_in: 14400,
278
+ expired_at: Date.now() + 14400000,
279
+ shop_id: 111,
280
+ request_id: "test-request-id",
281
+ error: "",
282
+ message: "",
283
+ };
284
+ const token2 = {
285
+ access_token: "token_222",
286
+ refresh_token: "refresh_222",
287
+ expire_in: 14400,
288
+ expired_at: Date.now() + 14400000,
289
+ shop_id: 222,
290
+ request_id: "test-request-id",
291
+ error: "",
292
+ message: "",
293
+ };
294
+ await storage1.store(token1);
295
+ await storage2.store(token2);
296
+ const retrieved1 = await storage1.get();
297
+ const retrieved2 = await storage2.get();
298
+ expect(retrieved1?.shop_id).toBe(111);
299
+ expect(retrieved2?.shop_id).toBe(222);
300
+ });
301
+ });
302
+ describe("Non-Error Exception Handling", () => {
303
+ let originalWrite;
304
+ let originalRead;
305
+ let originalUnlink;
306
+ beforeEach(() => {
307
+ originalWrite = fs.writeFileSync;
308
+ originalRead = fs.readFileSync;
309
+ originalUnlink = fs.unlinkSync;
310
+ });
311
+ afterEach(() => {
312
+ fs.writeFileSync = originalWrite;
313
+ fs.readFileSync = originalRead;
314
+ fs.unlinkSync = originalUnlink;
315
+ jest.restoreAllMocks();
316
+ });
317
+ it("should catch non-Error exceptions correctly", async () => {
318
+ const storage = new CustomTokenStorage(888899);
319
+ // 1. fs.writeFileSync throws string
320
+ jest.spyOn(fs, "writeFileSync").mockImplementation(() => {
321
+ throw "String write error";
322
+ });
323
+ await expect(storage.store({})).rejects.toThrow("Failed to store token: Unknown error");
324
+ // 2. fs.readFileSync throws string
325
+ jest.spyOn(fs, "readFileSync").mockImplementation(() => {
326
+ throw "String read error";
327
+ });
328
+ await expect(storage.get()).rejects.toThrow("Failed to get token: Unknown error");
329
+ // 3. fs.unlinkSync throws string
330
+ jest.spyOn(fs, "unlinkSync").mockImplementation(() => {
331
+ throw "String unlink error";
332
+ });
333
+ await expect(storage.clear()).rejects.toThrow("Failed to clear token: Unknown error");
334
+ });
335
+ });
336
+ });
337
+ //# sourceMappingURL=custom-token-storage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-token-storage.test.js","sourceRoot":"","sources":["../../../src/__tests__/storage/custom-token-storage.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,38 @@
1
+ import { generateSignature } from "../../utils/signature.js";
2
+ describe("generateSignature", () => {
3
+ it("should generate correct signature for given parameters", () => {
4
+ const partnerKey = "test_partner_key";
5
+ const parts = [
6
+ "/api/v2/auth/token/get",
7
+ "123456",
8
+ "test_partner_id",
9
+ "test_shop_id",
10
+ "test_main_account_id",
11
+ ];
12
+ const signature = generateSignature(partnerKey, parts);
13
+ expect(signature).toBe("37c864bd9821ff5f2c2f46b2faca14eb1811a718d1fdc6dcf383cba7c74bf9e9"); // This is a placeholder, replace with actual expected signature
14
+ });
15
+ it("should generate different signatures for different timestamps", () => {
16
+ const partnerKey = "test_partner_key";
17
+ const parts1 = ["/api/v2/auth/token/get", "123456"];
18
+ const parts2 = ["/api/v2/auth/token/get", "123457"];
19
+ const signature1 = generateSignature(partnerKey, parts1);
20
+ const signature2 = generateSignature(partnerKey, parts2);
21
+ expect(signature1).not.toBe(signature2);
22
+ });
23
+ it("should generate different signatures for different paths", () => {
24
+ const partnerKey = "test_partner_key";
25
+ const parts1 = ["/api/v2/auth/token/get", "123456"];
26
+ const parts2 = ["/api/v2/auth/token/refresh", "123456"];
27
+ const signature1 = generateSignature(partnerKey, parts1);
28
+ const signature2 = generateSignature(partnerKey, parts2);
29
+ expect(signature1).not.toBe(signature2);
30
+ });
31
+ it("should generate different signatures for different partner keys", () => {
32
+ const parts = ["/api/v2/auth/token/get", "123456"];
33
+ const signature1 = generateSignature("key1", parts);
34
+ const signature2 = generateSignature("key2", parts);
35
+ expect(signature1).not.toBe(signature2);
36
+ });
37
+ });
38
+ //# sourceMappingURL=signature.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/signature.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACtC,MAAM,KAAK,GAAG;YACZ,wBAAwB;YACxB,QAAQ;YACR,iBAAiB;YACjB,cAAc;YACd,sBAAsB;SACvB,CAAC;QAEF,MAAM,SAAS,GAAG,iBAAiB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC,CAAC,gEAAgE;IAC9J,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACtC,MAAM,MAAM,GAAG,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;QAEpD,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEzD,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACtC,MAAM,MAAM,GAAG,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC;QAExD,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEzD,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,KAAK,GAAG,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEpD,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};