@p0security/cli 0.19.8 → 0.19.10

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 (75) hide show
  1. package/build/dist/commands/scp.js +7 -1
  2. package/build/dist/commands/scp.js.map +1 -1
  3. package/build/dist/commands/ssh.js +7 -1
  4. package/build/dist/commands/ssh.js.map +1 -1
  5. package/build/dist/common/auth/server.d.ts +1 -1
  6. package/build/dist/common/auth/server.js +29 -9
  7. package/build/dist/common/auth/server.js.map +1 -1
  8. package/build/dist/common/fetch.d.ts +1 -3
  9. package/build/dist/common/fetch.js +1 -3
  10. package/build/dist/common/fetch.js.map +1 -1
  11. package/build/dist/drivers/config.d.ts +1 -0
  12. package/build/dist/drivers/config.js +8 -1
  13. package/build/dist/drivers/config.js.map +1 -1
  14. package/build/dist/drivers/env.js +2 -0
  15. package/build/dist/drivers/env.js.map +1 -1
  16. package/build/dist/middlewares/version.js +7 -0
  17. package/build/dist/middlewares/version.js.map +1 -1
  18. package/build/dist/plugins/okta/aws.js +36 -11
  19. package/build/dist/plugins/okta/aws.js.map +1 -1
  20. package/build/dist/plugins/okta/login.d.ts +20 -2
  21. package/build/dist/plugins/okta/login.js +42 -6
  22. package/build/dist/plugins/okta/login.js.map +1 -1
  23. package/build/dist/plugins/ssh/index.js +8 -39
  24. package/build/dist/plugins/ssh/index.js.map +1 -1
  25. package/build/dist/types/org.d.ts +1 -0
  26. package/build/dist/version.js +1 -1
  27. package/build/dist/version.js.map +1 -1
  28. package/build/tsconfig.build.tsbuildinfo +1 -0
  29. package/package.json +14 -10
  30. package/build/dist/commands/__tests__/grant.test.d.ts +0 -1
  31. package/build/dist/commands/__tests__/grant.test.js +0 -56
  32. package/build/dist/commands/__tests__/grant.test.js.map +0 -1
  33. package/build/dist/commands/__tests__/login.test.d.ts +0 -1
  34. package/build/dist/commands/__tests__/login.test.js +0 -204
  35. package/build/dist/commands/__tests__/login.test.js.map +0 -1
  36. package/build/dist/commands/__tests__/ls.test.d.ts +0 -1
  37. package/build/dist/commands/__tests__/ls.test.js +0 -86
  38. package/build/dist/commands/__tests__/ls.test.js.map +0 -1
  39. package/build/dist/commands/__tests__/request.test.d.ts +0 -1
  40. package/build/dist/commands/__tests__/request.test.js +0 -150
  41. package/build/dist/commands/__tests__/request.test.js.map +0 -1
  42. package/build/dist/commands/__tests__/ssh.test.d.ts +0 -1
  43. package/build/dist/commands/__tests__/ssh.test.js +0 -181
  44. package/build/dist/commands/__tests__/ssh.test.js.map +0 -1
  45. package/build/dist/commands/aws/__tests__/__input__/saml-response.d.ts +0 -11
  46. package/build/dist/commands/aws/__tests__/__input__/saml-response.js +0 -19
  47. package/build/dist/commands/aws/__tests__/__input__/saml-response.js.map +0 -1
  48. package/build/dist/commands/aws/__tests__/__input__/sts-response.d.ts +0 -11
  49. package/build/dist/commands/aws/__tests__/__input__/sts-response.js +0 -38
  50. package/build/dist/commands/aws/__tests__/__input__/sts-response.js.map +0 -1
  51. package/build/dist/commands/aws/__tests__/role.test.d.ts +0 -1
  52. package/build/dist/commands/aws/__tests__/role.test.js +0 -103
  53. package/build/dist/commands/aws/__tests__/role.test.js.map +0 -1
  54. package/build/dist/common/__mocks__/keys.d.ts +0 -15
  55. package/build/dist/common/__mocks__/keys.js +0 -23
  56. package/build/dist/common/__mocks__/keys.js.map +0 -1
  57. package/build/dist/drivers/__mocks__/stdio.d.ts +0 -14
  58. package/build/dist/drivers/__mocks__/stdio.js +0 -26
  59. package/build/dist/drivers/__mocks__/stdio.js.map +0 -1
  60. package/build/dist/drivers/__tests__/api.test.d.ts +0 -1
  61. package/build/dist/drivers/__tests__/api.test.js +0 -688
  62. package/build/dist/drivers/__tests__/api.test.js.map +0 -1
  63. package/build/dist/drivers/auth/__mocks__/index.d.ts +0 -30
  64. package/build/dist/drivers/auth/__mocks__/index.js +0 -47
  65. package/build/dist/drivers/auth/__mocks__/index.js.map +0 -1
  66. package/build/dist/plugins/__mocks__/login.d.ts +0 -14
  67. package/build/dist/plugins/__mocks__/login.js +0 -25
  68. package/build/dist/plugins/__mocks__/login.js.map +0 -1
  69. package/build/dist/plugins/aws/__mocks__/assumeRole.d.ts +0 -12
  70. package/build/dist/plugins/aws/__mocks__/assumeRole.js +0 -22
  71. package/build/dist/plugins/aws/__mocks__/assumeRole.js.map +0 -1
  72. package/build/dist/plugins/aws/__tests__/utils.test.d.ts +0 -1
  73. package/build/dist/plugins/aws/__tests__/utils.test.js +0 -82
  74. package/build/dist/plugins/aws/__tests__/utils.test.js.map +0 -1
  75. package/build/tsconfig.tsbuildinfo +0 -1
@@ -1,688 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __asyncValues = (this && this.__asyncValues) || function (o) {
12
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
13
- var m = o[Symbol.asyncIterator], i;
14
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
15
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
16
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
17
- };
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
- const api_1 = require("../api");
20
- // Mock dependencies
21
- jest.mock("../config");
22
- jest.mock("../env");
23
- jest.mock("../../version", () => ({
24
- p0VersionInfo: { version: "1.0.0" },
25
- }));
26
- describe("fetchWithStreaming", () => {
27
- const mockAuthn = {
28
- getToken: jest.fn().mockResolvedValue("mock-token"),
29
- identity: {
30
- org: { slug: "test-org" },
31
- },
32
- };
33
- beforeEach(() => {
34
- jest.clearAllMocks();
35
- });
36
- afterEach(() => {
37
- // Clear all mocks after each test
38
- jest.clearAllMocks();
39
- jest.restoreAllMocks();
40
- });
41
- const createMockStreamingResponse = (chunks) => {
42
- const encoder = new TextEncoder();
43
- let chunkIndex = 0;
44
- const mockReader = {
45
- read: jest.fn().mockImplementation(() => __awaiter(void 0, void 0, void 0, function* () {
46
- if (chunkIndex < chunks.length) {
47
- const chunk = chunks[chunkIndex++];
48
- return {
49
- done: false,
50
- value: encoder.encode(chunk),
51
- };
52
- }
53
- return { done: true, value: undefined };
54
- })),
55
- };
56
- return {
57
- body: {
58
- getReader: jest.fn().mockReturnValue(mockReader),
59
- },
60
- };
61
- };
62
- it("should yield data from streaming response", () => __awaiter(void 0, void 0, void 0, function* () {
63
- var _a, e_1, _b, _c;
64
- const mockFetch = jest.spyOn(global, "fetch").mockResolvedValue(createMockStreamingResponse([
65
- JSON.stringify({
66
- type: "data",
67
- data: { id: "1", message: "First chunk" },
68
- }) + "\n",
69
- JSON.stringify({
70
- type: "data",
71
- data: { id: "2", message: "Second chunk" },
72
- }) + "\n",
73
- ]));
74
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
75
- url: "/command",
76
- method: "POST",
77
- body: JSON.stringify({ test: "data" }),
78
- });
79
- const results = [];
80
- try {
81
- for (var _d = true, generator_1 = __asyncValues(generator), generator_1_1; generator_1_1 = yield generator_1.next(), _a = generator_1_1.done, !_a;) {
82
- _c = generator_1_1.value;
83
- _d = false;
84
- try {
85
- const chunk = _c;
86
- results.push(chunk);
87
- }
88
- finally {
89
- _d = true;
90
- }
91
- }
92
- }
93
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
94
- finally {
95
- try {
96
- if (!_d && !_a && (_b = generator_1.return)) yield _b.call(generator_1);
97
- }
98
- finally { if (e_1) throw e_1.error; }
99
- }
100
- expect(results).toEqual([
101
- { id: "1", message: "First chunk" },
102
- { id: "2", message: "Second chunk" },
103
- ]);
104
- expect(mockFetch).toHaveBeenCalledWith("/command", {
105
- method: "POST",
106
- headers: {
107
- authorization: "Bearer mock-token",
108
- "Content-Type": "application/json",
109
- "User-Agent": "P0 CLI/1.0.0",
110
- },
111
- body: JSON.stringify({ test: "data" }),
112
- keepalive: true,
113
- });
114
- }));
115
- it("should skip heartbeat messages", () => __awaiter(void 0, void 0, void 0, function* () {
116
- var _e, e_2, _f, _g;
117
- const chunks = [
118
- JSON.stringify({
119
- type: "heartbeat",
120
- }) + "\n",
121
- JSON.stringify({
122
- type: "data",
123
- data: { id: "1", message: "Real data" },
124
- }) + "\n",
125
- JSON.stringify({
126
- type: "heartbeat",
127
- }) + "\n",
128
- ];
129
- jest
130
- .spyOn(global, "fetch")
131
- .mockResolvedValue(createMockStreamingResponse(chunks));
132
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
133
- url: "/stream",
134
- method: "GET",
135
- });
136
- const results = [];
137
- try {
138
- for (var _h = true, generator_2 = __asyncValues(generator), generator_2_1; generator_2_1 = yield generator_2.next(), _e = generator_2_1.done, !_e;) {
139
- _g = generator_2_1.value;
140
- _h = false;
141
- try {
142
- const chunk = _g;
143
- results.push(chunk);
144
- }
145
- finally {
146
- _h = true;
147
- }
148
- }
149
- }
150
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
151
- finally {
152
- try {
153
- if (!_h && !_e && (_f = generator_2.return)) yield _f.call(generator_2);
154
- }
155
- finally { if (e_2) throw e_2.error; }
156
- }
157
- expect(results).toEqual([{ id: "1", message: "Real data" }]);
158
- }));
159
- it("should throw error when response type is error", () => __awaiter(void 0, void 0, void 0, function* () {
160
- const chunks = [
161
- JSON.stringify({
162
- type: "error",
163
- error: "Something went wrong",
164
- }) + "\n",
165
- ];
166
- jest
167
- .spyOn(global, "fetch")
168
- .mockResolvedValue(createMockStreamingResponse(chunks));
169
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
170
- url: "/stream",
171
- method: "GET",
172
- });
173
- yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
174
- var _j, e_3, _k, _l;
175
- try {
176
- for (var _m = true, generator_3 = __asyncValues(generator), generator_3_1; generator_3_1 = yield generator_3.next(), _j = generator_3_1.done, !_j;) {
177
- _l = generator_3_1.value;
178
- _m = false;
179
- try {
180
- const _chunk = _l;
181
- }
182
- finally {
183
- _m = true;
184
- }
185
- }
186
- }
187
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
188
- finally {
189
- try {
190
- if (!_m && !_j && (_k = generator_3.return)) yield _k.call(generator_3);
191
- }
192
- finally { if (e_3) throw e_3.error; }
193
- }
194
- })).rejects.toBe("Something went wrong");
195
- }));
196
- it("should throw error when data contains error", () => __awaiter(void 0, void 0, void 0, function* () {
197
- const chunks = [
198
- JSON.stringify({
199
- type: "data",
200
- data: { error: "Data error occurred" },
201
- }) + "\n",
202
- ];
203
- jest
204
- .spyOn(global, "fetch")
205
- .mockResolvedValue(createMockStreamingResponse(chunks));
206
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
207
- url: "/stream",
208
- method: "GET",
209
- });
210
- yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
211
- var _o, e_4, _p, _q;
212
- try {
213
- for (var _r = true, generator_4 = __asyncValues(generator), generator_4_1; generator_4_1 = yield generator_4.next(), _o = generator_4_1.done, !_o;) {
214
- _q = generator_4_1.value;
215
- _r = false;
216
- try {
217
- const _chunk = _q;
218
- }
219
- finally {
220
- _r = true;
221
- }
222
- }
223
- }
224
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
225
- finally {
226
- try {
227
- if (!_r && !_o && (_p = generator_4.return)) yield _p.call(generator_4);
228
- }
229
- finally { if (e_4) throw e_4.error; }
230
- }
231
- })).rejects.toBe("Data error occurred");
232
- }));
233
- it("should throw error for invalid response format", () => __awaiter(void 0, void 0, void 0, function* () {
234
- const chunks = [
235
- JSON.stringify({
236
- type: "unknown",
237
- someData: "invalid",
238
- }) + "\n",
239
- ];
240
- jest
241
- .spyOn(global, "fetch")
242
- .mockResolvedValue(createMockStreamingResponse(chunks));
243
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
244
- url: "/stream",
245
- method: "GET",
246
- });
247
- yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
248
- var _s, e_5, _t, _u;
249
- try {
250
- for (var _v = true, generator_5 = __asyncValues(generator), generator_5_1; generator_5_1 = yield generator_5.next(), _s = generator_5_1.done, !_s;) {
251
- _u = generator_5_1.value;
252
- _v = false;
253
- try {
254
- const _chunk = _u;
255
- }
256
- finally {
257
- _v = true;
258
- }
259
- }
260
- }
261
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
262
- finally {
263
- try {
264
- if (!_v && !_s && (_t = generator_5.return)) yield _t.call(generator_5);
265
- }
266
- finally { if (e_5) throw e_5.error; }
267
- }
268
- })).rejects.toBe("Invalid response from the server");
269
- }));
270
- it("should handle multiple JSON objects in single chunk", () => __awaiter(void 0, void 0, void 0, function* () {
271
- var _w, e_6, _x, _y;
272
- const chunks = [
273
- JSON.stringify({ type: "data", data: { id: "1\ntest" } }) +
274
- "\n" +
275
- JSON.stringify({ type: "data", data: { id: "2" } }) +
276
- "\n",
277
- ];
278
- jest
279
- .spyOn(global, "fetch")
280
- .mockResolvedValue(createMockStreamingResponse(chunks));
281
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
282
- url: "/stream",
283
- method: "GET",
284
- });
285
- const results = [];
286
- try {
287
- for (var _z = true, generator_6 = __asyncValues(generator), generator_6_1; generator_6_1 = yield generator_6.next(), _w = generator_6_1.done, !_w;) {
288
- _y = generator_6_1.value;
289
- _z = false;
290
- try {
291
- const chunk = _y;
292
- results.push(chunk);
293
- }
294
- finally {
295
- _z = true;
296
- }
297
- }
298
- }
299
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
300
- finally {
301
- try {
302
- if (!_z && !_w && (_x = generator_6.return)) yield _x.call(generator_6);
303
- }
304
- finally { if (e_6) throw e_6.error; }
305
- }
306
- expect(results).toEqual([{ id: "1\ntest" }, { id: "2" }]);
307
- }));
308
- it("should handle chunks with partial data", () => __awaiter(void 0, void 0, void 0, function* () {
309
- var _0, e_7, _1, _2;
310
- const chunks = [
311
- '{"type":"data","data":{"id":"1"}}\n{"type":"heartbeat"}\n{"type":"da',
312
- 'ta","data":{"id":"2"}}\n', // Completes the JSON
313
- ];
314
- jest
315
- .spyOn(global, "fetch")
316
- .mockResolvedValue(createMockStreamingResponse(chunks));
317
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
318
- url: "/stream",
319
- method: "GET",
320
- });
321
- const results = [];
322
- try {
323
- for (var _3 = true, generator_7 = __asyncValues(generator), generator_7_1; generator_7_1 = yield generator_7.next(), _0 = generator_7_1.done, !_0;) {
324
- _2 = generator_7_1.value;
325
- _3 = false;
326
- try {
327
- const chunk = _2;
328
- results.push(chunk);
329
- }
330
- finally {
331
- _3 = true;
332
- }
333
- }
334
- }
335
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
336
- finally {
337
- try {
338
- if (!_3 && !_0 && (_1 = generator_7.return)) yield _1.call(generator_7);
339
- }
340
- finally { if (e_7) throw e_7.error; }
341
- }
342
- expect(results).toEqual([{ id: "1" }, { id: "2" }]);
343
- }));
344
- it("should handle incomplete JSON across multiple chunks", () => __awaiter(void 0, void 0, void 0, function* () {
345
- var _4, e_8, _5, _6;
346
- // Simulate arbitrary chunks that split JSON objects
347
- const chunks = [
348
- '{"type":"data","data":{"id":"1","mess',
349
- 'age":"First chunk"}}\n{"type":"data",',
350
- '"data":{"id":"2","message":"Second chu',
351
- 'nk"}}\n', // Completes second JSON
352
- ];
353
- jest
354
- .spyOn(global, "fetch")
355
- .mockResolvedValue(createMockStreamingResponse(chunks));
356
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
357
- url: "/stream",
358
- method: "GET",
359
- });
360
- const results = [];
361
- try {
362
- for (var _7 = true, generator_8 = __asyncValues(generator), generator_8_1; generator_8_1 = yield generator_8.next(), _4 = generator_8_1.done, !_4;) {
363
- _6 = generator_8_1.value;
364
- _7 = false;
365
- try {
366
- const chunk = _6;
367
- results.push(chunk);
368
- }
369
- finally {
370
- _7 = true;
371
- }
372
- }
373
- }
374
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
375
- finally {
376
- try {
377
- if (!_7 && !_4 && (_5 = generator_8.return)) yield _5.call(generator_8);
378
- }
379
- finally { if (e_8) throw e_8.error; }
380
- }
381
- expect(results).toEqual([
382
- { id: "1", message: "First chunk" },
383
- { id: "2", message: "Second chunk" },
384
- ]);
385
- }));
386
- it("should handle single character chunks", () => __awaiter(void 0, void 0, void 0, function* () {
387
- var _8, e_9, _9, _10;
388
- // Each character as a separate chunk
389
- const jsonString = '{"type":"data","data":{"id":"test"}}\n';
390
- const chunks = jsonString.split("");
391
- jest
392
- .spyOn(global, "fetch")
393
- .mockResolvedValue(createMockStreamingResponse(chunks));
394
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
395
- url: "/stream",
396
- method: "GET",
397
- });
398
- const results = [];
399
- try {
400
- for (var _11 = true, generator_9 = __asyncValues(generator), generator_9_1; generator_9_1 = yield generator_9.next(), _8 = generator_9_1.done, !_8;) {
401
- _10 = generator_9_1.value;
402
- _11 = false;
403
- try {
404
- const chunk = _10;
405
- results.push(chunk);
406
- }
407
- finally {
408
- _11 = true;
409
- }
410
- }
411
- }
412
- catch (e_9_1) { e_9 = { error: e_9_1 }; }
413
- finally {
414
- try {
415
- if (!_11 && !_8 && (_9 = generator_9.return)) yield _9.call(generator_9);
416
- }
417
- finally { if (e_9) throw e_9.error; }
418
- }
419
- expect(results).toEqual([{ id: "test" }]);
420
- }));
421
- it("should handle chunks with no invalid json and no new lines", () => __awaiter(void 0, void 0, void 0, function* () {
422
- const chunks = [
423
- '{"type":"data","data":{"id":"1"}', // No newlines
424
- ];
425
- jest
426
- .spyOn(global, "fetch")
427
- .mockResolvedValue(createMockStreamingResponse(chunks));
428
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
429
- url: "/stream",
430
- method: "GET",
431
- });
432
- yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
433
- var _12, e_10, _13, _14;
434
- try {
435
- for (var _15 = true, generator_10 = __asyncValues(generator), generator_10_1; generator_10_1 = yield generator_10.next(), _12 = generator_10_1.done, !_12;) {
436
- _14 = generator_10_1.value;
437
- _15 = false;
438
- try {
439
- const _chunk = _14;
440
- }
441
- finally {
442
- _15 = true;
443
- }
444
- }
445
- }
446
- catch (e_10_1) { e_10 = { error: e_10_1 }; }
447
- finally {
448
- try {
449
- if (!_15 && !_12 && (_13 = generator_10.return)) yield _13.call(generator_10);
450
- }
451
- finally { if (e_10) throw e_10.error; }
452
- }
453
- })).rejects.toBe("Invalid response from the server");
454
- }));
455
- it("should handle empty chunks", () => __awaiter(void 0, void 0, void 0, function* () {
456
- var _16, e_11, _17, _18;
457
- const chunks = [
458
- "",
459
- '{"type":"data","data":{"id":"1"}}\n',
460
- "",
461
- '{"type":"data","data":{"id":"2"}}\n',
462
- ];
463
- jest
464
- .spyOn(global, "fetch")
465
- .mockResolvedValue(createMockStreamingResponse(chunks));
466
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
467
- url: "/stream",
468
- method: "GET",
469
- });
470
- const results = [];
471
- try {
472
- for (var _19 = true, generator_11 = __asyncValues(generator), generator_11_1; generator_11_1 = yield generator_11.next(), _16 = generator_11_1.done, !_16;) {
473
- _18 = generator_11_1.value;
474
- _19 = false;
475
- try {
476
- const chunk = _18;
477
- results.push(chunk);
478
- }
479
- finally {
480
- _19 = true;
481
- }
482
- }
483
- }
484
- catch (e_11_1) { e_11 = { error: e_11_1 }; }
485
- finally {
486
- try {
487
- if (!_19 && !_16 && (_17 = generator_11.return)) yield _17.call(generator_11);
488
- }
489
- finally { if (e_11) throw e_11.error; }
490
- }
491
- expect(results).toEqual([{ id: "1" }, { id: "2" }]);
492
- }));
493
- it("should throw errors if there is leftover error chunk without new-line and a type", () => __awaiter(void 0, void 0, void 0, function* () {
494
- const chunks = ['{"error":"Something went wrong"}'];
495
- jest
496
- .spyOn(global, "fetch")
497
- .mockResolvedValue(createMockStreamingResponse(chunks));
498
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
499
- url: "/stream",
500
- method: "GET",
501
- });
502
- yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
503
- var _20, e_12, _21, _22;
504
- try {
505
- for (var _23 = true, generator_12 = __asyncValues(generator), generator_12_1; generator_12_1 = yield generator_12.next(), _20 = generator_12_1.done, !_20;) {
506
- _22 = generator_12_1.value;
507
- _23 = false;
508
- try {
509
- const _chunk = _22;
510
- }
511
- finally {
512
- _23 = true;
513
- }
514
- }
515
- }
516
- catch (e_12_1) { e_12 = { error: e_12_1 }; }
517
- finally {
518
- try {
519
- if (!_23 && !_20 && (_21 = generator_12.return)) yield _21.call(generator_12);
520
- }
521
- finally { if (e_12) throw e_12.error; }
522
- }
523
- })).rejects.toBe("Something went wrong");
524
- }));
525
- it("should throw network error for terminated", () => __awaiter(void 0, void 0, void 0, function* () {
526
- jest.spyOn(global, "fetch").mockRejectedValue(new TypeError("terminated"));
527
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
528
- url: "/stream",
529
- method: "GET",
530
- });
531
- yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
532
- var _24, e_13, _25, _26;
533
- try {
534
- for (var _27 = true, generator_13 = __asyncValues(generator), generator_13_1; generator_13_1 = yield generator_13.next(), _24 = generator_13_1.done, !_24;) {
535
- _26 = generator_13_1.value;
536
- _27 = false;
537
- try {
538
- const _chunk = _26;
539
- }
540
- finally {
541
- _27 = true;
542
- }
543
- }
544
- }
545
- catch (e_13_1) { e_13 = { error: e_13_1 }; }
546
- finally {
547
- try {
548
- if (!_27 && !_24 && (_25 = generator_13.return)) yield _25.call(generator_13);
549
- }
550
- finally { if (e_13) throw e_13.error; }
551
- }
552
- })).rejects.toBe("Network error: Unable to reach the server.");
553
- }));
554
- it("should rethrow other errors", () => __awaiter(void 0, void 0, void 0, function* () {
555
- const customError = new Error("Custom error");
556
- jest.spyOn(global, "fetch").mockRejectedValue(customError);
557
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
558
- url: "/stream",
559
- method: "GET",
560
- });
561
- yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
562
- var _28, e_14, _29, _30;
563
- try {
564
- for (var _31 = true, generator_14 = __asyncValues(generator), generator_14_1; generator_14_1 = yield generator_14.next(), _28 = generator_14_1.done, !_28;) {
565
- _30 = generator_14_1.value;
566
- _31 = false;
567
- try {
568
- const _chunk = _30;
569
- }
570
- finally {
571
- _31 = true;
572
- }
573
- }
574
- }
575
- catch (e_14_1) { e_14 = { error: e_14_1 }; }
576
- finally {
577
- try {
578
- if (!_31 && !_28 && (_29 = generator_14.return)) yield _29.call(generator_14);
579
- }
580
- finally { if (e_14) throw e_14.error; }
581
- }
582
- })).rejects.toBe(customError);
583
- }));
584
- it("should throw network error for fetch failed", () => __awaiter(void 0, void 0, void 0, function* () {
585
- jest
586
- .spyOn(global, "fetch")
587
- .mockRejectedValue(new TypeError("fetch failed"));
588
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
589
- url: "/stream",
590
- method: "GET",
591
- });
592
- yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
593
- var _32, e_15, _33, _34;
594
- try {
595
- for (var _35 = true, generator_15 = __asyncValues(generator), generator_15_1; generator_15_1 = yield generator_15.next(), _32 = generator_15_1.done, !_32;) {
596
- _34 = generator_15_1.value;
597
- _35 = false;
598
- try {
599
- const _chunk = _34;
600
- }
601
- finally {
602
- _35 = true;
603
- }
604
- }
605
- }
606
- catch (e_15_1) { e_15 = { error: e_15_1 }; }
607
- finally {
608
- try {
609
- if (!_35 && !_32 && (_33 = generator_15.return)) yield _33.call(generator_15);
610
- }
611
- finally { if (e_15) throw e_15.error; }
612
- }
613
- })).rejects.toBe("Network error: Unable to reach the server.");
614
- }));
615
- it("should throw error when no reader available", () => __awaiter(void 0, void 0, void 0, function* () {
616
- jest.spyOn(global, "fetch").mockResolvedValue({
617
- body: null,
618
- });
619
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
620
- url: "/stream",
621
- method: "GET",
622
- });
623
- yield expect(() => __awaiter(void 0, void 0, void 0, function* () {
624
- var _36, e_16, _37, _38;
625
- try {
626
- for (var _39 = true, generator_16 = __asyncValues(generator), generator_16_1; generator_16_1 = yield generator_16.next(), _36 = generator_16_1.done, !_36;) {
627
- _38 = generator_16_1.value;
628
- _39 = false;
629
- try {
630
- const _chunk = _38;
631
- }
632
- finally {
633
- _39 = true;
634
- }
635
- }
636
- }
637
- catch (e_16_1) { e_16 = { error: e_16_1 }; }
638
- finally {
639
- try {
640
- if (!_39 && !_36 && (_37 = generator_16.return)) yield _37.call(generator_16);
641
- }
642
- finally { if (e_16) throw e_16.error; }
643
- }
644
- })).rejects.toBe("No reader available");
645
- }));
646
- it("should use timeout when maxTimeoutMs is provided", () => __awaiter(void 0, void 0, void 0, function* () {
647
- var _40, e_17, _41, _42;
648
- const chunks = [
649
- JSON.stringify({
650
- type: "data",
651
- data: { message: "success" },
652
- }) + "\n",
653
- ];
654
- const mockFetch = jest
655
- .spyOn(global, "fetch")
656
- .mockResolvedValue(createMockStreamingResponse(chunks));
657
- const generator = (0, api_1.fetchWithStreaming)(mockAuthn, {
658
- url: "/stream",
659
- method: "POST",
660
- maxTimeoutMs: 5000,
661
- });
662
- const results = [];
663
- try {
664
- for (var _43 = true, generator_17 = __asyncValues(generator), generator_17_1; generator_17_1 = yield generator_17.next(), _40 = generator_17_1.done, !_40;) {
665
- _42 = generator_17_1.value;
666
- _43 = false;
667
- try {
668
- const chunk = _42;
669
- results.push(chunk);
670
- }
671
- finally {
672
- _43 = true;
673
- }
674
- }
675
- }
676
- catch (e_17_1) { e_17 = { error: e_17_1 }; }
677
- finally {
678
- try {
679
- if (!_43 && !_40 && (_41 = generator_17.return)) yield _41.call(generator_17);
680
- }
681
- finally { if (e_17) throw e_17.error; }
682
- }
683
- expect(mockFetch).toHaveBeenCalledWith("/stream", expect.objectContaining({
684
- signal: expect.any(AbortSignal),
685
- }));
686
- }));
687
- });
688
- //# sourceMappingURL=api.test.js.map