@channel.io/app-sdk-server 0.31.1 → 0.33.1

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 (80) hide show
  1. package/dist/decorators/extension.decorator.d.ts +6 -0
  2. package/dist/decorators/extension.decorator.d.ts.map +1 -1
  3. package/dist/decorators/extension.decorator.js +14 -0
  4. package/dist/decorators/extension.decorator.js.map +1 -1
  5. package/dist/decorators/index.d.ts +1 -1
  6. package/dist/decorators/index.d.ts.map +1 -1
  7. package/dist/decorators/index.js +1 -1
  8. package/dist/decorators/index.js.map +1 -1
  9. package/dist/native/client.d.ts +7 -22
  10. package/dist/native/client.d.ts.map +1 -1
  11. package/dist/native/client.js +13 -31
  12. package/dist/native/client.js.map +1 -1
  13. package/dist/native/proxy-api.d.ts +3 -15
  14. package/dist/native/proxy-api.d.ts.map +1 -1
  15. package/dist/native/proxy-api.js +2 -20
  16. package/dist/native/proxy-api.js.map +1 -1
  17. package/dist/native/proxy-api.types.d.ts +1 -1
  18. package/dist/native/proxy-api.types.d.ts.map +1 -1
  19. package/dist/native/types.d.ts +6 -0
  20. package/dist/native/types.d.ts.map +1 -1
  21. package/dist/utils/sanitize-for-logging.d.ts.map +1 -1
  22. package/dist/utils/sanitize-for-logging.js +13 -8
  23. package/dist/utils/sanitize-for-logging.js.map +1 -1
  24. package/package.json +5 -5
  25. package/dist/__tests__/datasource-runners.test.d.ts +0 -2
  26. package/dist/__tests__/datasource-runners.test.d.ts.map +0 -1
  27. package/dist/__tests__/datasource-runners.test.js +0 -354
  28. package/dist/__tests__/datasource-runners.test.js.map +0 -1
  29. package/dist/__tests__/datasource.test.d.ts +0 -2
  30. package/dist/__tests__/datasource.test.d.ts.map +0 -1
  31. package/dist/__tests__/datasource.test.js +0 -374
  32. package/dist/__tests__/datasource.test.js.map +0 -1
  33. package/dist/__tests__/decorators.test.d.ts +0 -2
  34. package/dist/__tests__/decorators.test.d.ts.map +0 -1
  35. package/dist/__tests__/decorators.test.js +0 -441
  36. package/dist/__tests__/decorators.test.js.map +0 -1
  37. package/dist/__tests__/extension-result-normalizer.test.d.ts +0 -2
  38. package/dist/__tests__/extension-result-normalizer.test.d.ts.map +0 -1
  39. package/dist/__tests__/extension-result-normalizer.test.js +0 -184
  40. package/dist/__tests__/extension-result-normalizer.test.js.map +0 -1
  41. package/dist/__tests__/function-input-validator.test.d.ts +0 -2
  42. package/dist/__tests__/function-input-validator.test.d.ts.map +0 -1
  43. package/dist/__tests__/function-input-validator.test.js +0 -56
  44. package/dist/__tests__/function-input-validator.test.js.map +0 -1
  45. package/dist/__tests__/native-client.test.d.ts +0 -2
  46. package/dist/__tests__/native-client.test.d.ts.map +0 -1
  47. package/dist/__tests__/native-client.test.js +0 -504
  48. package/dist/__tests__/native-client.test.js.map +0 -1
  49. package/dist/__tests__/proxy-api.test.d.ts +0 -2
  50. package/dist/__tests__/proxy-api.test.d.ts.map +0 -1
  51. package/dist/__tests__/proxy-api.test.js +0 -310
  52. package/dist/__tests__/proxy-api.test.js.map +0 -1
  53. package/dist/__tests__/sanitize-for-logging.test.d.ts +0 -2
  54. package/dist/__tests__/sanitize-for-logging.test.d.ts.map +0 -1
  55. package/dist/__tests__/sanitize-for-logging.test.js +0 -97
  56. package/dist/__tests__/sanitize-for-logging.test.js.map +0 -1
  57. package/dist/__tests__/signature.test.d.ts +0 -2
  58. package/dist/__tests__/signature.test.d.ts.map +0 -1
  59. package/dist/__tests__/signature.test.js +0 -172
  60. package/dist/__tests__/signature.test.js.map +0 -1
  61. package/dist/__tests__/testing-utils.test.d.ts +0 -2
  62. package/dist/__tests__/testing-utils.test.d.ts.map +0 -1
  63. package/dist/__tests__/testing-utils.test.js +0 -244
  64. package/dist/__tests__/testing-utils.test.js.map +0 -1
  65. package/dist/__tests__/token-manager.test.d.ts +0 -2
  66. package/dist/__tests__/token-manager.test.d.ts.map +0 -1
  67. package/dist/__tests__/token-manager.test.js +0 -528
  68. package/dist/__tests__/token-manager.test.js.map +0 -1
  69. package/dist/discovery/extension-discovery.service.test.d.ts +0 -2
  70. package/dist/discovery/extension-discovery.service.test.d.ts.map +0 -1
  71. package/dist/discovery/extension-discovery.service.test.js +0 -116
  72. package/dist/discovery/extension-discovery.service.test.js.map +0 -1
  73. package/dist/nestjs/channel-app.controller.test.d.ts +0 -2
  74. package/dist/nestjs/channel-app.controller.test.d.ts.map +0 -1
  75. package/dist/nestjs/channel-app.controller.test.js +0 -37
  76. package/dist/nestjs/channel-app.controller.test.js.map +0 -1
  77. package/dist/nestjs/channel-app.service.test.d.ts +0 -2
  78. package/dist/nestjs/channel-app.service.test.d.ts.map +0 -1
  79. package/dist/nestjs/channel-app.service.test.js +0 -583
  80. package/dist/nestjs/channel-app.service.test.js.map +0 -1
@@ -1,528 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
- import { TokenManager, TokenManagerError } from "../token/manager.js";
3
- import { InMemoryTokenCache } from "../token/cache.js";
4
- function makeTokenResponse(overrides = {}) {
5
- return {
6
- accessToken: overrides.accessToken ?? "access-token",
7
- refreshToken: overrides.refreshToken ?? "refresh-token",
8
- expiresIn: overrides.expiresIn ?? 3600,
9
- };
10
- }
11
- function makeNativeFunctionResponse(overrides = {}) {
12
- return {
13
- result: {
14
- accessToken: overrides.accessToken ?? "access-token",
15
- refreshToken: overrides.refreshToken ?? "refresh-token",
16
- expiresIn: overrides.expiresIn ?? 3600,
17
- },
18
- };
19
- }
20
- function createResponse(body, ok = true, status = 200) {
21
- return {
22
- ok,
23
- status,
24
- statusText: ok ? "OK" : "Error",
25
- json: async () => body,
26
- text: async () => JSON.stringify(body),
27
- };
28
- }
29
- function createMockFetch(responses) {
30
- let callIndex = 0;
31
- return vi.fn(async () => {
32
- const resp = (responses[callIndex] ?? responses[responses.length - 1]);
33
- callIndex++;
34
- return createResponse(resp.body, resp.ok, resp.status);
35
- });
36
- }
37
- function getRequest(index) {
38
- const call = globalThis.fetch.mock.calls[index];
39
- return JSON.parse(call[1].body);
40
- }
41
- class SharedLockingTokenCache {
42
- entries = new Map();
43
- lockTails = new Map();
44
- async get(key) {
45
- const entry = this.entries.get(key);
46
- if (!entry)
47
- return null;
48
- if (Date.now() >= entry.expiresAt) {
49
- this.entries.delete(key);
50
- return null;
51
- }
52
- return entry.token;
53
- }
54
- async set(key, token, ttlMs) {
55
- this.entries.set(key, {
56
- token,
57
- expiresAt: ttlMs === undefined ? token.expiresAt : Date.now() + ttlMs,
58
- });
59
- }
60
- async delete(key) {
61
- this.entries.delete(key);
62
- }
63
- async clear() {
64
- this.entries.clear();
65
- }
66
- async withLock(key, callback) {
67
- const previous = this.lockTails.get(key) ?? Promise.resolve();
68
- let release = () => undefined;
69
- const current = new Promise((resolve) => {
70
- release = resolve;
71
- });
72
- const tail = previous.then(() => current);
73
- this.lockTails.set(key, tail);
74
- await previous;
75
- try {
76
- return await callback();
77
- }
78
- finally {
79
- release();
80
- if (this.lockTails.get(key) === tail) {
81
- this.lockTails.delete(key);
82
- }
83
- }
84
- }
85
- }
86
- describe("InMemoryTokenCache", () => {
87
- let cache;
88
- beforeEach(() => {
89
- vi.useFakeTimers();
90
- cache = new InMemoryTokenCache(60000);
91
- });
92
- afterEach(() => {
93
- cache.destroy();
94
- vi.useRealTimers();
95
- });
96
- it("stores, retrieves, expires, deletes, and clears cached tokens", async () => {
97
- const token = makeTokenResponse();
98
- const cached = {
99
- token,
100
- cachedAt: Date.now(),
101
- expiresAt: Date.now() + token.expiresIn * 1000,
102
- key: "key",
103
- };
104
- expect(await cache.get("key")).toBeNull();
105
- await cache.set("key", cached, 5000);
106
- expect((await cache.get("key"))?.token.accessToken).toBe("access-token");
107
- vi.advanceTimersByTime(6000);
108
- expect(await cache.get("key")).toBeNull();
109
- await cache.set("key", cached, 0);
110
- expect(await cache.get("key")).toBeNull();
111
- await cache.set("key", cached);
112
- await cache.delete("key");
113
- expect(await cache.get("key")).toBeNull();
114
- await cache.set("a", {
115
- token,
116
- cachedAt: Date.now(),
117
- expiresAt: cached.expiresAt,
118
- key: "a",
119
- });
120
- await cache.set("b", {
121
- token,
122
- cachedAt: Date.now(),
123
- expiresAt: cached.expiresAt,
124
- key: "b",
125
- });
126
- expect(cache.getStats().size).toBe(2);
127
- await cache.clear();
128
- expect(cache.getStats().size).toBe(0);
129
- });
130
- });
131
- describe("TokenManager", () => {
132
- let originalFetch;
133
- beforeEach(() => {
134
- vi.useFakeTimers();
135
- originalFetch = globalThis.fetch;
136
- });
137
- afterEach(() => {
138
- globalThis.fetch = originalFetch;
139
- vi.useRealTimers();
140
- });
141
- function createManager(overrides = {}) {
142
- return new TokenManager({
143
- appId: "test-app",
144
- appSecret: "test-secret",
145
- ...overrides,
146
- });
147
- }
148
- it("issues app and channel tokens through AppStore native functions using PUT", async () => {
149
- globalThis.fetch = createMockFetch([
150
- { ok: true, status: 200, body: makeNativeFunctionResponse({ accessToken: "app-token" }) },
151
- { ok: true, status: 200, body: makeNativeFunctionResponse({ accessToken: "channel-token" }) },
152
- ]);
153
- const manager = createManager();
154
- const appToken = await manager.getAppToken();
155
- const channelToken = await manager.getChannelToken({ channelId: "ch-1" });
156
- expect(appToken).toEqual({
157
- accessToken: "app-token",
158
- refreshToken: "refresh-token",
159
- expiresIn: 3600,
160
- });
161
- expect(channelToken).toEqual({
162
- accessToken: "channel-token",
163
- refreshToken: "refresh-token",
164
- expiresIn: 3600,
165
- });
166
- const calls = globalThis.fetch.mock.calls;
167
- expect(calls[0][0]).toBe("https://app-store-api.channel.io/general/v1/native/functions");
168
- expect(calls[0][1].method).toBe("PUT");
169
- expect(getRequest(0)).toEqual({
170
- method: "issueToken",
171
- params: { secret: "test-secret" },
172
- });
173
- expect(getRequest(1)).toEqual({
174
- method: "issueToken",
175
- params: { secret: "test-secret", channelId: "ch-1" },
176
- });
177
- manager.destroy();
178
- });
179
- it("uses cached tokens until they enter the refresh buffer", async () => {
180
- globalThis.fetch = createMockFetch([
181
- { ok: true, status: 200, body: makeNativeFunctionResponse() },
182
- {
183
- ok: true,
184
- status: 200,
185
- body: makeNativeFunctionResponse({ accessToken: "refreshed-token" }),
186
- },
187
- ]);
188
- const manager = createManager();
189
- await manager.getChannelToken({ channelId: "ch-1" });
190
- const cached = await manager.getChannelToken({ channelId: "ch-1" });
191
- expect(cached.accessToken).toBe("access-token");
192
- expect(globalThis.fetch).toHaveBeenCalledTimes(1);
193
- vi.advanceTimersByTime(56 * 60 * 1000);
194
- const refreshed = await manager.getChannelToken({ channelId: "ch-1" });
195
- expect(refreshed.accessToken).toBe("refreshed-token");
196
- expect(globalThis.fetch).toHaveBeenCalledTimes(2);
197
- expect(getRequest(1)).toEqual({
198
- method: "refreshToken",
199
- params: { refreshToken: "refresh-token" },
200
- });
201
- manager.destroy();
202
- });
203
- it("refreshes a newly issued short-lived token before returning it", async () => {
204
- globalThis.fetch = createMockFetch([
205
- {
206
- ok: true,
207
- status: 200,
208
- body: makeNativeFunctionResponse({
209
- accessToken: "short-token",
210
- refreshToken: "short-refresh-token",
211
- expiresIn: 300,
212
- }),
213
- },
214
- {
215
- ok: true,
216
- status: 200,
217
- body: makeNativeFunctionResponse({
218
- accessToken: "refreshed-token",
219
- refreshToken: "refreshed-refresh-token",
220
- expiresIn: 3600,
221
- }),
222
- },
223
- ]);
224
- const manager = createManager();
225
- await expect(manager.getAppToken()).resolves.toMatchObject({
226
- accessToken: "refreshed-token",
227
- });
228
- await expect(manager.getAppToken()).resolves.toMatchObject({
229
- accessToken: "refreshed-token",
230
- });
231
- expect(globalThis.fetch).toHaveBeenCalledTimes(2);
232
- expect(getRequest(0).method).toBe("issueToken");
233
- expect(getRequest(1)).toEqual({
234
- method: "refreshToken",
235
- params: { refreshToken: "short-refresh-token" },
236
- });
237
- manager.destroy();
238
- });
239
- it("rejects a token that remains within the refresh buffer after one refresh", async () => {
240
- globalThis.fetch = createMockFetch([
241
- { ok: true, status: 200, body: makeNativeFunctionResponse({ expiresIn: 60 }) },
242
- { ok: true, status: 200, body: makeNativeFunctionResponse({ expiresIn: 60 }) },
243
- ]);
244
- const manager = createManager();
245
- await expect(manager.getAppToken()).rejects.toThrow("Token after immediate refresh expires within the configured refresh buffer");
246
- expect(globalThis.fetch).toHaveBeenCalledTimes(2);
247
- manager.destroy();
248
- });
249
- it("re-issues when refreshing a cached token still returns a short lifetime", async () => {
250
- globalThis.fetch = createMockFetch([
251
- { ok: true, status: 200, body: makeNativeFunctionResponse() },
252
- { ok: true, status: 200, body: makeNativeFunctionResponse({ expiresIn: 60 }) },
253
- {
254
- ok: true,
255
- status: 200,
256
- body: makeNativeFunctionResponse({ accessToken: "reissued-token" }),
257
- },
258
- ]);
259
- const manager = createManager();
260
- await manager.getAppToken();
261
- vi.advanceTimersByTime(56 * 60 * 1000);
262
- await expect(manager.getAppToken()).resolves.toMatchObject({ accessToken: "reissued-token" });
263
- expect(getRequest(1).method).toBe("refreshToken");
264
- expect(getRequest(2).method).toBe("issueToken");
265
- manager.destroy();
266
- });
267
- it("falls back to issueToken when refreshToken fails", async () => {
268
- globalThis.fetch = createMockFetch([
269
- { ok: true, status: 200, body: makeNativeFunctionResponse() },
270
- { ok: true, status: 200, body: { error: { code: 401, message: "Unauthorized" } } },
271
- {
272
- ok: true,
273
- status: 200,
274
- body: makeNativeFunctionResponse({ accessToken: "reissued-token" }),
275
- },
276
- ]);
277
- const manager = createManager();
278
- await manager.getAppToken();
279
- vi.advanceTimersByTime(56 * 60 * 1000);
280
- const token = await manager.getAppToken();
281
- expect(token.accessToken).toBe("reissued-token");
282
- expect(getRequest(0).method).toBe("issueToken");
283
- expect(getRequest(1).method).toBe("refreshToken");
284
- expect(getRequest(2).method).toBe("issueToken");
285
- manager.destroy();
286
- });
287
- it("deduplicates concurrent requests for the same cache key", async () => {
288
- globalThis.fetch = vi.fn(() => new Promise((resolve) => {
289
- setTimeout(() => {
290
- resolve(createResponse(makeNativeFunctionResponse()));
291
- }, 100);
292
- }));
293
- const manager = createManager();
294
- const p1 = manager.getChannelToken({ channelId: "ch-1" });
295
- const p2 = manager.getChannelToken({ channelId: "ch-1" });
296
- await vi.advanceTimersByTimeAsync(100);
297
- const [r1, r2] = await Promise.all([p1, p2]);
298
- expect(r1.accessToken).toBe("access-token");
299
- expect(r2.accessToken).toBe("access-token");
300
- expect(globalThis.fetch).toHaveBeenCalledTimes(1);
301
- manager.destroy();
302
- });
303
- it("deduplicates issuance across managers when shared storage provides a lock", async () => {
304
- const storage = new SharedLockingTokenCache();
305
- globalThis.fetch = createMockFetch([
306
- { ok: true, status: 200, body: makeNativeFunctionResponse() },
307
- ]);
308
- const manager1 = createManager({ cacheStorage: storage });
309
- const manager2 = createManager({ cacheStorage: storage });
310
- const [token1, token2] = await Promise.all([
311
- manager1.getChannelToken({ channelId: "ch-1" }),
312
- manager2.getChannelToken({ channelId: "ch-1" }),
313
- ]);
314
- expect(token1.accessToken).toBe("access-token");
315
- expect(token2.accessToken).toBe("access-token");
316
- expect(globalThis.fetch).toHaveBeenCalledTimes(1);
317
- manager1.destroy();
318
- manager2.destroy();
319
- });
320
- it("retries instead of returning an issued token invalidated during the request", async () => {
321
- let requestCount = 0;
322
- globalThis.fetch = vi.fn(() => new Promise((resolve) => {
323
- requestCount++;
324
- const accessToken = requestCount === 1 ? "stale-token" : "fresh-token";
325
- const response = createResponse(makeNativeFunctionResponse({ accessToken }));
326
- if (requestCount === 1) {
327
- setTimeout(() => resolve(response), 100);
328
- }
329
- else {
330
- resolve(response);
331
- }
332
- }));
333
- const manager = createManager();
334
- const tokenPromise = manager.getAppToken();
335
- await Promise.resolve();
336
- await Promise.resolve();
337
- expect(globalThis.fetch).toHaveBeenCalledTimes(1);
338
- await vi.advanceTimersByTimeAsync(50);
339
- await manager.invalidateAppToken();
340
- await vi.advanceTimersByTimeAsync(100);
341
- await expect(tokenPromise).resolves.toMatchObject({ accessToken: "fresh-token" });
342
- expect(globalThis.fetch).toHaveBeenCalledTimes(2);
343
- manager.destroy();
344
- });
345
- it("fails when token issuance keeps getting invalidated past the retry limit", async () => {
346
- globalThis.fetch = vi.fn(() => new Promise((resolve) => {
347
- setTimeout(() => {
348
- resolve(createResponse(makeNativeFunctionResponse({ accessToken: "stale-token" })));
349
- }, 100);
350
- }));
351
- const manager = createManager();
352
- async function invalidateActiveRequest() {
353
- await Promise.resolve();
354
- await Promise.resolve();
355
- await vi.advanceTimersByTimeAsync(50);
356
- await manager.invalidateAppToken();
357
- await vi.advanceTimersByTimeAsync(50);
358
- await Promise.resolve();
359
- await Promise.resolve();
360
- }
361
- const tokenPromise = manager.getAppToken();
362
- await invalidateActiveRequest();
363
- await invalidateActiveRequest();
364
- const rejection = expect(tokenPromise).rejects.toThrow("retry limit exceeded");
365
- await invalidateActiveRequest();
366
- await rejection;
367
- expect(globalThis.fetch).toHaveBeenCalledTimes(3);
368
- manager.destroy();
369
- });
370
- it("retries instead of returning a refreshed token invalidated during the request", async () => {
371
- let issueCount = 0;
372
- globalThis.fetch = vi.fn((_url, init) => {
373
- const request = JSON.parse(init.body);
374
- if (request.method === "refreshToken") {
375
- return new Promise((resolve) => {
376
- setTimeout(() => {
377
- resolve(createResponse(makeNativeFunctionResponse({
378
- accessToken: "stale-refreshed-token",
379
- refreshToken: "stale-refresh-token",
380
- })));
381
- }, 100);
382
- });
383
- }
384
- issueCount++;
385
- const response = issueCount === 1
386
- ? makeNativeFunctionResponse({
387
- accessToken: "old-token",
388
- refreshToken: "old-refresh-token",
389
- })
390
- : makeNativeFunctionResponse({
391
- accessToken: "fresh-token",
392
- refreshToken: "fresh-refresh-token",
393
- });
394
- return Promise.resolve(createResponse(response));
395
- });
396
- const manager = createManager();
397
- await expect(manager.getAppToken()).resolves.toMatchObject({ accessToken: "old-token" });
398
- vi.advanceTimersByTime(56 * 60 * 1000);
399
- const tokenPromise = manager.getAppToken();
400
- await Promise.resolve();
401
- await Promise.resolve();
402
- expect(globalThis.fetch).toHaveBeenCalledTimes(2);
403
- await vi.advanceTimersByTimeAsync(50);
404
- await manager.invalidateAppToken();
405
- await vi.advanceTimersByTimeAsync(100);
406
- await expect(tokenPromise).resolves.toMatchObject({ accessToken: "fresh-token" });
407
- expect(globalThis.fetch).toHaveBeenCalledTimes(3);
408
- expect(getRequest(1).method).toBe("refreshToken");
409
- expect(getRequest(2).method).toBe("issueToken");
410
- manager.destroy();
411
- });
412
- it("invalidates and clears cached tokens", async () => {
413
- globalThis.fetch = createMockFetch([
414
- { ok: true, status: 200, body: makeNativeFunctionResponse({ accessToken: "token-1" }) },
415
- { ok: true, status: 200, body: makeNativeFunctionResponse({ accessToken: "token-2" }) },
416
- { ok: true, status: 200, body: makeNativeFunctionResponse({ accessToken: "token-3" }) },
417
- { ok: true, status: 200, body: makeNativeFunctionResponse({ accessToken: "token-4" }) },
418
- { ok: true, status: 200, body: makeNativeFunctionResponse({ accessToken: "token-5" }) },
419
- ]);
420
- const manager = createManager();
421
- await manager.getChannelToken({ channelId: "ch-1" });
422
- await manager.invalidateChannelToken("ch-1");
423
- expect((await manager.getChannelToken({ channelId: "ch-1" })).accessToken).toBe("token-2");
424
- await manager.getAppToken();
425
- await manager.invalidateAppToken();
426
- expect((await manager.getAppToken()).accessToken).toBe("token-4");
427
- await manager.clearCache();
428
- expect((await manager.getAppToken()).accessToken).toBe("token-5");
429
- manager.destroy();
430
- });
431
- it("does not log token-bearing native error bodies", async () => {
432
- const logger = { debug: vi.fn() };
433
- globalThis.fetch = createMockFetch([
434
- { ok: true, status: 200, body: makeNativeFunctionResponse() },
435
- {
436
- ok: true,
437
- status: 200,
438
- body: {
439
- error: {
440
- code: 401,
441
- message: "Unauthorized",
442
- data: {
443
- accessToken: "secret-access-token",
444
- refreshToken: "secret-refresh-token",
445
- },
446
- },
447
- },
448
- },
449
- {
450
- ok: true,
451
- status: 200,
452
- body: makeNativeFunctionResponse({ accessToken: "reissued-token" }),
453
- },
454
- ]);
455
- const manager = createManager({ debug: true, logger });
456
- await manager.getAppToken();
457
- vi.advanceTimersByTime(56 * 60 * 1000);
458
- await manager.getAppToken();
459
- const logPayload = JSON.stringify(logger.debug.mock.calls);
460
- expect(logPayload).toContain("Unauthorized");
461
- expect(logPayload).not.toContain("secret-access-token");
462
- expect(logPayload).not.toContain("secret-refresh-token");
463
- manager.destroy();
464
- });
465
- it("times out hung native function requests and clears in-flight state", async () => {
466
- globalThis.fetch = vi
467
- .fn()
468
- .mockImplementationOnce((_url, init) => {
469
- return new Promise((_resolve, reject) => {
470
- const signal = init.signal;
471
- signal?.addEventListener("abort", () => {
472
- const error = new Error("The operation was aborted.");
473
- error.name = "AbortError";
474
- reject(error);
475
- });
476
- });
477
- })
478
- .mockResolvedValueOnce(createResponse(makeNativeFunctionResponse({ accessToken: "after-timeout" })));
479
- const manager = createManager();
480
- const timedOut = manager.getAppToken();
481
- await Promise.resolve();
482
- await Promise.resolve();
483
- const rejection = expect(timedOut).rejects.toMatchObject({ name: "AbortError" });
484
- await vi.advanceTimersByTimeAsync(10_000);
485
- await rejection;
486
- await expect(manager.getAppToken()).resolves.toMatchObject({ accessToken: "after-timeout" });
487
- expect(globalThis.fetch).toHaveBeenCalledTimes(2);
488
- manager.destroy();
489
- });
490
- it("throws TokenManagerError for transport and native function errors", async () => {
491
- globalThis.fetch = createMockFetch([{ ok: false, status: 500, body: "server error" }]);
492
- const manager = createManager();
493
- await expect(manager.getAppToken()).rejects.toThrow(TokenManagerError);
494
- manager.destroy();
495
- globalThis.fetch = createMockFetch([
496
- { ok: true, status: 200, body: { error: { code: 401, message: "Unauthorized" } } },
497
- ]);
498
- const errorManager = createManager();
499
- await expect(errorManager.getAppToken()).rejects.toThrow(TokenManagerError);
500
- errorManager.destroy();
501
- globalThis.fetch = createMockFetch([
502
- {
503
- ok: true,
504
- status: 200,
505
- body: { result: { refreshToken: "refresh-token", expiresIn: 3600 } },
506
- },
507
- ]);
508
- const invalidResponseManager = createManager();
509
- await expect(invalidResponseManager.getAppToken()).rejects.toThrow("Invalid native token response");
510
- invalidResponseManager.destroy();
511
- });
512
- it("uses custom AppStore URL and cache storage", async () => {
513
- const storage = new InMemoryTokenCache();
514
- globalThis.fetch = createMockFetch([
515
- { ok: true, status: 200, body: makeNativeFunctionResponse() },
516
- ]);
517
- const manager = createManager({
518
- appStoreUrl: "https://app-store.example.com",
519
- cacheStorage: storage,
520
- });
521
- await manager.getAppToken();
522
- expect(globalThis.fetch.mock.calls[0][0]).toBe("https://app-store.example.com/general/v1/native/functions");
523
- expect(storage.getStats().keys).toEqual(["test-app:app"]);
524
- manager.destroy();
525
- storage.destroy();
526
- });
527
- });
528
- //# sourceMappingURL=token-manager.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"token-manager.test.js","sourceRoot":"","sources":["../../src/__tests__/token-manager.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import "reflect-metadata";
2
- //# sourceMappingURL=extension-discovery.service.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension-discovery.service.test.d.ts","sourceRoot":"","sources":["../../src/discovery/extension-discovery.service.test.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC"}