@positronic/cli 0.0.57 → 0.0.59

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.
@@ -218,6 +218,16 @@ function _ts_generator(thisArg, body) {
218
218
  }
219
219
  import { useState, useEffect, useCallback } from 'react';
220
220
  import { apiClient, isApiLocalDevMode } from '../commands/helpers.js';
221
+ var ROOT_KEY_NOT_CONFIGURED_ERROR = {
222
+ title: 'Root Key Not Configured',
223
+ message: 'The server does not have a root authentication key configured.',
224
+ details: "Run 'px auth format-jwk-key' to generate the key, then add ROOT_PUBLIC_KEY as a secret in your server configuration."
225
+ };
226
+ var AUTH_REQUIRED_ERROR = {
227
+ title: 'Authentication Required',
228
+ message: 'Your request could not be authenticated.',
229
+ details: "Run 'px auth login' to configure your SSH key, or check that your key is registered on the server."
230
+ };
221
231
  function getConnectionErrorMessage() {
222
232
  if (isApiLocalDevMode()) {
223
233
  return {
@@ -233,6 +243,125 @@ function getConnectionErrorMessage() {
233
243
  };
234
244
  }
235
245
  }
246
+ /**
247
+ * Fetch auth setup instructions from the server
248
+ */ function fetchAuthSetupInstructions() {
249
+ return _async_to_generator(function() {
250
+ var response;
251
+ return _ts_generator(this, function(_state) {
252
+ switch(_state.label){
253
+ case 0:
254
+ return [
255
+ 4,
256
+ apiClient.fetchUnauthenticated('/auth/setup')
257
+ ];
258
+ case 1:
259
+ response = _state.sent();
260
+ if (!response.ok) return [
261
+ 3,
262
+ 3
263
+ ];
264
+ return [
265
+ 4,
266
+ response.json()
267
+ ];
268
+ case 2:
269
+ return [
270
+ 2,
271
+ _state.sent()
272
+ ];
273
+ case 3:
274
+ return [
275
+ 2,
276
+ null
277
+ ];
278
+ }
279
+ });
280
+ })();
281
+ }
282
+ /**
283
+ * Check if the error response indicates ROOT_KEY_NOT_CONFIGURED
284
+ */ function isRootKeyNotConfiguredError(response) {
285
+ return _async_to_generator(function() {
286
+ var clonedResponse, data, e;
287
+ return _ts_generator(this, function(_state) {
288
+ switch(_state.label){
289
+ case 0:
290
+ _state.trys.push([
291
+ 0,
292
+ 2,
293
+ ,
294
+ 3
295
+ ]);
296
+ clonedResponse = response.clone();
297
+ return [
298
+ 4,
299
+ clonedResponse.json()
300
+ ];
301
+ case 1:
302
+ data = _state.sent();
303
+ return [
304
+ 2,
305
+ data.error === 'ROOT_KEY_NOT_CONFIGURED'
306
+ ];
307
+ case 2:
308
+ e = _state.sent();
309
+ return [
310
+ 2,
311
+ false
312
+ ];
313
+ case 3:
314
+ return [
315
+ 2
316
+ ];
317
+ }
318
+ });
319
+ })();
320
+ }
321
+ /**
322
+ * Build the appropriate auth error based on the response
323
+ */ function buildAuthError(response) {
324
+ return _async_to_generator(function() {
325
+ var setupInfo;
326
+ return _ts_generator(this, function(_state) {
327
+ switch(_state.label){
328
+ case 0:
329
+ return [
330
+ 4,
331
+ isRootKeyNotConfiguredError(response)
332
+ ];
333
+ case 1:
334
+ if (!_state.sent()) return [
335
+ 3,
336
+ 3
337
+ ];
338
+ return [
339
+ 4,
340
+ fetchAuthSetupInstructions()
341
+ ];
342
+ case 2:
343
+ setupInfo = _state.sent();
344
+ if (setupInfo) {
345
+ return [
346
+ 2,
347
+ _object_spread_props(_object_spread({}, ROOT_KEY_NOT_CONFIGURED_ERROR), {
348
+ details: setupInfo.instructions
349
+ })
350
+ ];
351
+ }
352
+ return [
353
+ 2,
354
+ ROOT_KEY_NOT_CONFIGURED_ERROR
355
+ ];
356
+ case 3:
357
+ return [
358
+ 2,
359
+ AUTH_REQUIRED_ERROR
360
+ ];
361
+ }
362
+ });
363
+ })();
364
+ }
236
365
  export function useApiGet(endpoint, options) {
237
366
  var _useState = _sliced_to_array(useState(null), 2), data = _useState[0], setData = _useState[1];
238
367
  var _useState1 = _sliced_to_array(useState(true), 2), loading = _useState1[0], setLoading = _useState1[1];
@@ -246,9 +375,9 @@ export function useApiGet(endpoint, options) {
246
375
  case 0:
247
376
  _state.trys.push([
248
377
  0,
249
- 7,
250
378
  8,
251
- 9
379
+ 9,
380
+ 10
252
381
  ]);
253
382
  setLoading(true);
254
383
  setError(null);
@@ -273,41 +402,44 @@ export function useApiGet(endpoint, options) {
273
402
  setData(result);
274
403
  return [
275
404
  3,
276
- 6
405
+ 7
277
406
  ];
278
407
  case 3:
279
408
  if (!(response.status === 401)) return [
280
409
  3,
281
- 4
410
+ 5
282
411
  ];
283
- setError({
284
- title: 'Authentication Required',
285
- message: 'Your request could not be authenticated.',
286
- details: "Run 'px auth login' to configure your SSH key, or check that your key is registered on the server."
287
- });
288
412
  return [
289
- 3,
290
- 6
413
+ 4,
414
+ buildAuthError(response)
291
415
  ];
292
416
  case 4:
417
+ setError.apply(void 0, [
418
+ _state.sent()
419
+ ]);
420
+ return [
421
+ 3,
422
+ 7
423
+ ];
424
+ case 5:
293
425
  return [
294
426
  4,
295
427
  response.text()
296
428
  ];
297
- case 5:
429
+ case 6:
298
430
  errorText = _state.sent();
299
431
  setError({
300
432
  title: 'Server Error',
301
433
  message: "Error fetching ".concat(endpoint, ": ").concat(response.status, " ").concat(response.statusText),
302
434
  details: "Server response: ".concat(errorText)
303
435
  });
304
- _state.label = 6;
305
- case 6:
436
+ _state.label = 7;
437
+ case 7:
306
438
  return [
307
439
  3,
308
- 9
440
+ 10
309
441
  ];
310
- case 7:
442
+ case 8:
311
443
  err = _state.sent();
312
444
  baseError = getConnectionErrorMessage();
313
445
  errorDetails = err.message;
@@ -319,14 +451,14 @@ export function useApiGet(endpoint, options) {
319
451
  }));
320
452
  return [
321
453
  3,
322
- 9
454
+ 10
323
455
  ];
324
- case 8:
456
+ case 9:
325
457
  setLoading(false);
326
458
  return [
327
459
  7
328
460
  ];
329
- case 9:
461
+ case 10:
330
462
  return [
331
463
  2
332
464
  ];
@@ -356,9 +488,9 @@ export function useApiPost(endpoint, defaultOptions) {
356
488
  case 0:
357
489
  _state.trys.push([
358
490
  0,
359
- 7,
360
491
  8,
361
- 9
492
+ 9,
493
+ 10
362
494
  ]);
363
495
  setLoading(true);
364
496
  setError(null);
@@ -390,21 +522,22 @@ export function useApiPost(endpoint, defaultOptions) {
390
522
  case 3:
391
523
  if (!(response.status === 401)) return [
392
524
  3,
393
- 4
525
+ 5
394
526
  ];
395
- errorObj = {
396
- title: 'Authentication Required',
397
- message: 'Your request could not be authenticated.',
398
- details: "Run 'px auth login' to configure your SSH key, or check that your key is registered on the server."
399
- };
527
+ return [
528
+ 4,
529
+ buildAuthError(response)
530
+ ];
531
+ case 4:
532
+ errorObj = _state.sent();
400
533
  setError(errorObj);
401
534
  throw errorObj;
402
- case 4:
535
+ case 5:
403
536
  return [
404
537
  4,
405
538
  response.text()
406
539
  ];
407
- case 5:
540
+ case 6:
408
541
  errorText = _state.sent();
409
542
  errorObj1 = {
410
543
  title: 'Server Error',
@@ -413,12 +546,12 @@ export function useApiPost(endpoint, defaultOptions) {
413
546
  };
414
547
  setError(errorObj1);
415
548
  throw errorObj1;
416
- case 6:
549
+ case 7:
417
550
  return [
418
551
  3,
419
- 9
552
+ 10
420
553
  ];
421
- case 7:
554
+ case 8:
422
555
  err = _state.sent();
423
556
  // If it's already our error object, don't wrap it again
424
557
  if (err.title && err.message) {
@@ -435,12 +568,12 @@ export function useApiPost(endpoint, defaultOptions) {
435
568
  });
436
569
  setError(errorObj2);
437
570
  throw errorObj2;
438
- case 8:
571
+ case 9:
439
572
  setLoading(false);
440
573
  return [
441
574
  7
442
575
  ];
443
- case 9:
576
+ case 10:
444
577
  return [
445
578
  2
446
579
  ];
@@ -469,9 +602,9 @@ export function useApiDelete(resourceType) {
469
602
  case 0:
470
603
  _state.trys.push([
471
604
  0,
472
- 6,
473
605
  7,
474
- 8
606
+ 8,
607
+ 9
475
608
  ]);
476
609
  setLoading(true);
477
610
  setError(null);
@@ -494,21 +627,22 @@ export function useApiDelete(resourceType) {
494
627
  case 2:
495
628
  if (!(response.status === 401)) return [
496
629
  3,
497
- 3
630
+ 4
498
631
  ];
499
- errorObj = {
500
- title: 'Authentication Required',
501
- message: 'Your request could not be authenticated.',
502
- details: "Run 'px auth login' to configure your SSH key, or check that your key is registered on the server."
503
- };
632
+ return [
633
+ 4,
634
+ buildAuthError(response)
635
+ ];
636
+ case 3:
637
+ errorObj = _state.sent();
504
638
  setError(errorObj);
505
639
  throw errorObj;
506
- case 3:
640
+ case 4:
507
641
  return [
508
642
  4,
509
643
  response.text()
510
644
  ];
511
- case 4:
645
+ case 5:
512
646
  errorText = _state.sent();
513
647
  errorObj1 = {
514
648
  title: 'Server Error',
@@ -517,12 +651,12 @@ export function useApiDelete(resourceType) {
517
651
  };
518
652
  setError(errorObj1);
519
653
  throw errorObj1;
520
- case 5:
654
+ case 6:
521
655
  return [
522
656
  3,
523
- 8
657
+ 9
524
658
  ];
525
- case 6:
659
+ case 7:
526
660
  err = _state.sent();
527
661
  // If it's already our error object, don't wrap it again
528
662
  if (err.title && err.message) {
@@ -539,12 +673,12 @@ export function useApiDelete(resourceType) {
539
673
  });
540
674
  setError(errorObj2);
541
675
  throw errorObj2;
542
- case 7:
676
+ case 8:
543
677
  setLoading(false);
544
678
  return [
545
679
  7
546
680
  ];
547
- case 8:
681
+ case 9:
548
682
  return [
549
683
  2
550
684
  ];