@privateaim/client-vue 0.8.4 → 0.8.5

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 (42) hide show
  1. package/dist/components/analysis/wizard/FAnalysisWizard.vue.d.ts +79 -53
  2. package/dist/components/analysis/wizard/FAnalysisWizard.vue.d.ts.map +1 -1
  3. package/dist/components/analysis/wizard/FAnalysisWizardStepFiles.vue.d.ts +78 -52
  4. package/dist/components/analysis/wizard/FAnalysisWizardStepFiles.vue.d.ts.map +1 -1
  5. package/dist/components/analysis/wizard/FAnalysisWizardStepFinal.vue.d.ts +1 -1
  6. package/dist/components/analysis/wizard/FAnalysisWizardStepFinal.vue.d.ts.map +1 -1
  7. package/dist/components/analysis-bucket-file/FAnalysisBucketFileManager.vue.d.ts +78 -52
  8. package/dist/components/analysis-bucket-file/FAnalysisBucketFileManager.vue.d.ts.map +1 -1
  9. package/dist/components/analysis-bucket-file/FAnalysisBucketFileUpload.vue.d.ts +76 -0
  10. package/dist/components/analysis-bucket-file/FAnalysisBucketFileUpload.vue.d.ts.map +1 -0
  11. package/dist/components/index.d.ts +1 -0
  12. package/dist/components/index.d.ts.map +1 -1
  13. package/dist/components/login/FLoginForm.vue.d.ts.map +1 -1
  14. package/dist/components/master-image/FMasterImagesSync.d.ts.map +1 -1
  15. package/dist/components/master-image-event-log/FMasterImageEventLog.d.ts +27 -0
  16. package/dist/components/master-image-event-log/FMasterImageEventLog.d.ts.map +1 -0
  17. package/dist/components/master-image-event-log/FMasterImageEventLogs.d.ts +5 -0
  18. package/dist/components/master-image-event-log/FMasterImageEventLogs.d.ts.map +1 -0
  19. package/dist/components/master-image-event-log/index.d.ts +3 -0
  20. package/dist/components/master-image-event-log/index.d.ts.map +1 -0
  21. package/dist/components/node/FNodeCrypto.vue.d.ts +30 -0
  22. package/dist/components/node/FNodeCrypto.vue.d.ts.map +1 -0
  23. package/dist/components/node/index.d.ts +1 -0
  24. package/dist/components/node/index.d.ts.map +1 -1
  25. package/dist/core/entity-manager/module.d.ts +2 -4
  26. package/dist/core/entity-manager/module.d.ts.map +1 -1
  27. package/dist/core/entity-manager/type.d.ts +2 -4
  28. package/dist/core/entity-manager/type.d.ts.map +1 -1
  29. package/dist/core/entity-socket/module.d.ts +2 -4
  30. package/dist/core/entity-socket/module.d.ts.map +1 -1
  31. package/dist/core/entity-socket/type.d.ts +6 -6
  32. package/dist/core/entity-socket/type.d.ts.map +1 -1
  33. package/dist/core/list/module.d.ts +2 -4
  34. package/dist/core/list/module.d.ts.map +1 -1
  35. package/dist/core/list/type.d.ts +9 -9
  36. package/dist/core/list/type.d.ts.map +1 -1
  37. package/dist/core/socket/install.d.ts.map +1 -1
  38. package/dist/index.cjs +1750 -559
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.mjs +1759 -571
  41. package/dist/index.mjs.map +1 -1
  42. package/package.json +26 -25
package/dist/index.cjs CHANGED
@@ -10,7 +10,7 @@ var useVuelidate = require('@vuelidate/core');
10
10
  var validators = require('@vuelidate/validators');
11
11
  var formControls = require('@vuecs/form-controls');
12
12
  var coreKit = require('@privateaim/core-kit');
13
- var crypto = require('crypto');
13
+ var crypto$1 = require('crypto');
14
14
  var listControls = require('@vuecs/list-controls');
15
15
  var rapiq = require('rapiq');
16
16
  require('@authup/kit');
@@ -18,9 +18,9 @@ var coreHttpKit = require('@authup/core-http-kit');
18
18
  var storageKit = require('@privateaim/storage-kit');
19
19
  var coreKit$1 = require('@authup/core-kit');
20
20
  var coreRealtimeKit = require('@authup/core-realtime-kit');
21
+ var timeago = require('@vuecs/timeago');
21
22
  var link = require('@vuecs/link');
22
23
  var bootstrapVueNext = require('bootstrap-vue-next');
23
- var timeago = require('@vuecs/timeago');
24
24
  var vue3FormWizard = require('vue3-form-wizard');
25
25
 
26
26
  /*
@@ -71,7 +71,7 @@ var vue3FormWizard = require('vue3-form-wizard');
71
71
  * Author Peter Placzek (tada5hi)
72
72
  * For the full copyright and license information,
73
73
  * view the LICENSE file that was distributed with this source code.
74
- */ function isObject$3(input) {
74
+ */ function isObject$4(input) {
75
75
  return !!input && typeof input === 'object' && !Array.isArray(input);
76
76
  }
77
77
  function getPathValue(data, path) {
@@ -103,7 +103,7 @@ function setPathValue(data, path, value) {
103
103
  let temp = data;
104
104
  let index = 0;
105
105
  while(index < parts.length){
106
- /* istanbul ignore next */ if (!Array.isArray(temp) && !isObject$3(temp)) {
106
+ /* istanbul ignore next */ if (!Array.isArray(temp) && !isObject$4(temp)) {
107
107
  break;
108
108
  }
109
109
  const key = parts[index];
@@ -239,7 +239,7 @@ function installStoreManager(instance, key) {
239
239
  return manager;
240
240
  }
241
241
 
242
- var _sfc_main$g = vue.defineComponent({
242
+ var _sfc_main$i = vue.defineComponent({
243
243
  components: {
244
244
  IVuelidate: vuelidate.IVuelidate,
245
245
  VCFormInput: formControls.VCFormInput,
@@ -255,6 +255,7 @@ var _sfc_main$g = vue.defineComponent({
255
255
  'failed'
256
256
  ],
257
257
  setup (props, { emit }) {
258
+ const store = clientWebKit.injectStore();
258
259
  const realmId = vue.toRef(props, 'realmId');
259
260
  const form = vue.reactive({
260
261
  name: '',
@@ -280,7 +281,6 @@ var _sfc_main$g = vue.defineComponent({
280
281
  },
281
282
  realm_id: {}
282
283
  }, form);
283
- const store = clientWebKit.useStore();
284
284
  const busy = vue.ref(false);
285
285
  const submit = async ()=>{
286
286
  try {
@@ -313,7 +313,7 @@ var _export_sfc = ((sfc, props)=>{
313
313
  return target;
314
314
  });
315
315
 
316
- function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
316
+ function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
317
317
  const _component_VCFormInput = vue.resolveComponent("VCFormInput");
318
318
  const _component_VCFormGroup = vue.resolveComponent("VCFormGroup");
319
319
  const _component_IVuelidate = vue.resolveComponent("IVuelidate");
@@ -402,10 +402,10 @@ function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
402
402
  ])
403
403
  ], 32);
404
404
  }
405
- var FLoginForm = /* @__PURE__ */ _export_sfc(_sfc_main$g, [
405
+ var FLoginForm = /* @__PURE__ */ _export_sfc(_sfc_main$i, [
406
406
  [
407
407
  "render",
408
- _sfc_render$g
408
+ _sfc_render$i
409
409
  ]
410
410
  ]);
411
411
 
@@ -421,32 +421,54 @@ var FLoginForm = /* @__PURE__ */ _export_sfc(_sfc_main$g, [
421
421
  return ActionCommandElementType;
422
422
  }({});
423
423
 
424
+ // It is best to make fewer, larger requests to the crypto module to
425
+ // avoid system call overhead. So, random numbers are generated in a
426
+ // pool. The pool is a Buffer that is larger than the initial random
427
+ // request size by this multiplier. The pool is enlarged if subsequent
428
+ // requests exceed the maximum buffer size.
424
429
  const POOL_SIZE_MULTIPLIER = 128;
425
430
  let pool, poolOffset;
426
431
  let fillPool = (bytes)=>{
427
432
  if (!pool || pool.length < bytes) {
428
433
  pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER);
429
- crypto.randomFillSync(pool);
434
+ crypto$1.randomFillSync(pool);
430
435
  poolOffset = 0;
431
436
  } else if (poolOffset + bytes > pool.length) {
432
- crypto.randomFillSync(pool);
437
+ crypto$1.randomFillSync(pool);
433
438
  poolOffset = 0;
434
439
  }
435
440
  poolOffset += bytes;
436
441
  };
437
442
  let random = (bytes)=>{
438
- fillPool(bytes -= 0);
443
+ // `|=` convert `bytes` to number to prevent `valueOf` abusing and pool pollution
444
+ fillPool(bytes |= 0);
439
445
  return pool.subarray(poolOffset - bytes, poolOffset);
440
446
  };
441
447
  let customRandom = (alphabet, defaultSize, getRandom)=>{
448
+ // First, a bitmask is necessary to generate the ID. The bitmask makes bytes
449
+ // values closer to the alphabet size. The bitmask calculates the closest
450
+ // `2^31 - 1` number, which exceeds the alphabet size.
451
+ // For example, the bitmask for the alphabet size 30 is 31 (00011111).
442
452
  let mask = (2 << 31 - Math.clz32(alphabet.length - 1 | 1)) - 1;
453
+ // Though, the bitmask solution is not perfect since the bytes exceeding
454
+ // the alphabet size are refused. Therefore, to reliably generate the ID,
455
+ // the random bytes redundancy has to be satisfied.
456
+ // Note: every hardware random generator call is performance expensive,
457
+ // because the system call for entropy collection takes a lot of time.
458
+ // So, to avoid additional system calls, extra bytes are requested in advance.
459
+ // Next, a step determines how many random bytes to generate.
460
+ // The number of random bytes gets decided upon the ID size, mask,
461
+ // alphabet size, and magic number 1.6 (using 1.6 peaks at performance
462
+ // according to benchmarks).
443
463
  let step = Math.ceil(1.6 * mask * defaultSize / alphabet.length);
444
464
  return (size = defaultSize)=>{
445
465
  let id = '';
446
466
  while(true){
447
467
  let bytes = getRandom(step);
468
+ // A compact alternative for `for (let i = 0; i < step; i++)`.
448
469
  let i = step;
449
470
  while(i--){
471
+ // Adding `|| ''` refuses a random byte that exceeds the alphabet size.
450
472
  id += alphabet[bytes[i] & mask] || '';
451
473
  if (id.length === size) return id;
452
474
  }
@@ -455,6 +477,298 @@ let customRandom = (alphabet, defaultSize, getRandom)=>{
455
477
  };
456
478
  let customAlphabet = (alphabet, size = 21)=>customRandom(alphabet, size, random);
457
479
 
480
+ /*
481
+ * Copyright (c) 2024.
482
+ * Author Peter Placzek (tada5hi)
483
+ * For the full copyright and license information,
484
+ * view the LICENSE file that was distributed with this source code.
485
+ */ var AsymmetricCryptoAlgorithmName = /*#__PURE__*/ function(AsymmetricCryptoAlgorithmName) {
486
+ AsymmetricCryptoAlgorithmName["RSA_OAEP"] = "RSA-OAEP";
487
+ AsymmetricCryptoAlgorithmName["ECDH"] = "ECDH";
488
+ return AsymmetricCryptoAlgorithmName;
489
+ }({});
490
+ /*
491
+ * Copyright (c) 2024.
492
+ * Author Peter Placzek (tada5hi)
493
+ * For the full copyright and license information,
494
+ * view the LICENSE file that was distributed with this source code.
495
+ */ function asyncGeneratorStep$2$1(gen, resolve, reject, _next, _throw, key, arg) {
496
+ try {
497
+ var info = gen[key](arg);
498
+ var value = info.value;
499
+ } catch (error) {
500
+ reject(error);
501
+ return;
502
+ }
503
+ if (info.done) {
504
+ resolve(value);
505
+ } else {
506
+ Promise.resolve(value).then(_next, _throw);
507
+ }
508
+ }
509
+ function _async_to_generator$2$1(fn) {
510
+ return function() {
511
+ var self = this, args = arguments;
512
+ return new Promise(function(resolve, reject) {
513
+ var gen = fn.apply(self, args);
514
+ function _next(value) {
515
+ asyncGeneratorStep$2$1(gen, resolve, reject, _next, _throw, "next", value);
516
+ }
517
+ function _throw(err) {
518
+ asyncGeneratorStep$2$1(gen, resolve, reject, _next, _throw, "throw", err);
519
+ }
520
+ _next(undefined);
521
+ });
522
+ };
523
+ }
524
+ function arrayBufferToBase64(arrayBuffer) {
525
+ return btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer)));
526
+ }
527
+ function exportAsymmetricPublicKey(key) {
528
+ return _exportAsymmetricPublicKey.apply(this, arguments);
529
+ }
530
+ function _exportAsymmetricPublicKey() {
531
+ _exportAsymmetricPublicKey = _async_to_generator$2$1(function*(key) {
532
+ const exported = yield crypto.subtle.exportKey('spki', key);
533
+ return `-----BEGIN PUBLIC KEY-----\n${arrayBufferToBase64(exported)}\n-----END PUBLIC KEY-----`;
534
+ });
535
+ return _exportAsymmetricPublicKey.apply(this, arguments);
536
+ }
537
+ function exportAsymmetricPrivateKey(key) {
538
+ return _exportAsymmetricPrivateKey.apply(this, arguments);
539
+ }
540
+ function _exportAsymmetricPrivateKey() {
541
+ _exportAsymmetricPrivateKey = _async_to_generator$2$1(function*(key) {
542
+ const exported = yield crypto.subtle.exportKey('pkcs8', key);
543
+ return `-----BEGIN PRIVATE KEY-----\n${arrayBufferToBase64(exported)}\n-----END PRIVATE KEY-----`;
544
+ });
545
+ return _exportAsymmetricPrivateKey.apply(this, arguments);
546
+ }
547
+ /*
548
+ * Copyright (c) 2024.
549
+ * Author Peter Placzek (tada5hi)
550
+ * For the full copyright and license information,
551
+ * view the LICENSE file that was distributed with this source code.
552
+ */ function asyncGeneratorStep$1$1(gen, resolve, reject, _next, _throw, key, arg) {
553
+ try {
554
+ var info = gen[key](arg);
555
+ var value = info.value;
556
+ } catch (error) {
557
+ reject(error);
558
+ return;
559
+ }
560
+ if (info.done) {
561
+ resolve(value);
562
+ } else {
563
+ Promise.resolve(value).then(_next, _throw);
564
+ }
565
+ }
566
+ function _async_to_generator$1$1(fn) {
567
+ return function() {
568
+ var self = this, args = arguments;
569
+ return new Promise(function(resolve, reject) {
570
+ var gen = fn.apply(self, args);
571
+ function _next(value) {
572
+ asyncGeneratorStep$1$1(gen, resolve, reject, _next, _throw, "next", value);
573
+ }
574
+ function _throw(err) {
575
+ asyncGeneratorStep$1$1(gen, resolve, reject, _next, _throw, "throw", err);
576
+ }
577
+ _next(undefined);
578
+ });
579
+ };
580
+ }
581
+ function _define_property$1$1(obj, key, value) {
582
+ if (key in obj) {
583
+ Object.defineProperty(obj, key, {
584
+ value: value,
585
+ enumerable: true,
586
+ configurable: true,
587
+ writable: true
588
+ });
589
+ } else {
590
+ obj[key] = value;
591
+ }
592
+ return obj;
593
+ }
594
+ function _object_spread$4(target) {
595
+ for(var i = 1; i < arguments.length; i++){
596
+ var source = arguments[i] != null ? arguments[i] : {};
597
+ var ownKeys = Object.keys(source);
598
+ if (typeof Object.getOwnPropertySymbols === "function") {
599
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
600
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
601
+ }));
602
+ }
603
+ ownKeys.forEach(function(key) {
604
+ _define_property$1$1(target, key, source[key]);
605
+ });
606
+ }
607
+ return target;
608
+ }
609
+ function ownKeys(object, enumerableOnly) {
610
+ var keys = Object.keys(object);
611
+ if (Object.getOwnPropertySymbols) {
612
+ var symbols = Object.getOwnPropertySymbols(object);
613
+ keys.push.apply(keys, symbols);
614
+ }
615
+ return keys;
616
+ }
617
+ function _object_spread_props(target, source) {
618
+ source = source != null ? source : {};
619
+ if (Object.getOwnPropertyDescriptors) {
620
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
621
+ } else {
622
+ ownKeys(Object(source)).forEach(function(key) {
623
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
624
+ });
625
+ }
626
+ return target;
627
+ }
628
+ class CryptoAsymmetricAlgorithm {
629
+ buildImportParams() {
630
+ if (this.algorithm.name === AsymmetricCryptoAlgorithmName.RSA_OAEP) {
631
+ return {
632
+ name: 'RSA-OAEP',
633
+ hash: 'SHA-256'
634
+ };
635
+ }
636
+ if (this.algorithm.name === AsymmetricCryptoAlgorithmName.ECDH) {
637
+ return {
638
+ name: 'ECDH',
639
+ namedCurve: this.algorithm.namedCurve,
640
+ hash: 'SHA-256'
641
+ };
642
+ }
643
+ throw new Error('Import params could not be created.');
644
+ }
645
+ generateKeyPair() {
646
+ var _this = this;
647
+ return _async_to_generator$1$1(function*() {
648
+ if (_this.algorithm.name === AsymmetricCryptoAlgorithmName.RSA_OAEP) {
649
+ _this.keyPair = yield crypto.subtle.generateKey(_this.algorithm, true, [
650
+ 'encrypt',
651
+ 'decrypt'
652
+ ]);
653
+ return _this.keyPair;
654
+ }
655
+ if (_this.algorithm.name === AsymmetricCryptoAlgorithmName.ECDH) {
656
+ _this.keyPair = yield crypto.subtle.generateKey(_this.algorithm, true, [
657
+ 'deriveKey'
658
+ ]);
659
+ return _this.keyPair;
660
+ }
661
+ throw new Error('The algorithm is not supported for key generation.');
662
+ })();
663
+ }
664
+ useKeyPair() {
665
+ var _this = this;
666
+ return _async_to_generator$1$1(function*() {
667
+ if (typeof _this.keyPair !== 'undefined') {
668
+ return _this.keyPair;
669
+ }
670
+ return _this.generateKeyPair();
671
+ })();
672
+ }
673
+ exportPublicKey() {
674
+ var _this = this;
675
+ return _async_to_generator$1$1(function*() {
676
+ const keyPair = yield _this.useKeyPair();
677
+ return exportAsymmetricPublicKey(keyPair.publicKey);
678
+ })();
679
+ }
680
+ exportPrivateKey() {
681
+ var _this = this;
682
+ return _async_to_generator$1$1(function*() {
683
+ const keyPair = yield _this.useKeyPair();
684
+ return exportAsymmetricPrivateKey(keyPair.privateKey);
685
+ })();
686
+ }
687
+ encrypt(data, remoteKey) {
688
+ var _this = this;
689
+ return _async_to_generator$1$1(function*() {
690
+ const keyPair = yield _this.useKeyPair();
691
+ if (_this.algorithm.name === AsymmetricCryptoAlgorithmName.RSA_OAEP) {
692
+ return crypto.subtle.encrypt({
693
+ name: 'RSA-OAEP'
694
+ }, remoteKey || keyPair.publicKey, data);
695
+ }
696
+ if (_this.algorithm.name === AsymmetricCryptoAlgorithmName.ECDH) {
697
+ if (typeof remoteKey === 'undefined') {
698
+ throw new Error('Remote public key is required.');
699
+ }
700
+ const array = new Uint8Array(16);
701
+ const iv = crypto.getRandomValues(array);
702
+ const key = yield crypto.subtle.deriveKey({
703
+ name: 'ECDH',
704
+ public: remoteKey
705
+ }, keyPair.privateKey, {
706
+ name: 'AES-GCM',
707
+ length: 256
708
+ }, true, [
709
+ 'encrypt'
710
+ ]);
711
+ const arrayBuffer = yield crypto.subtle.encrypt({
712
+ name: 'AES-GCM',
713
+ length: 256,
714
+ iv
715
+ }, key, data);
716
+ const buffer = Buffer.from(arrayBuffer);
717
+ return Buffer.concat([
718
+ iv,
719
+ buffer
720
+ ]);
721
+ }
722
+ throw new Error('Unsupported algorithm for encryption.');
723
+ })();
724
+ }
725
+ decrypt(data, remoteKey) {
726
+ var _this = this;
727
+ return _async_to_generator$1$1(function*() {
728
+ const keyPair = yield _this.useKeyPair();
729
+ if (_this.algorithm.name === AsymmetricCryptoAlgorithmName.RSA_OAEP) {
730
+ return crypto.subtle.decrypt({
731
+ name: 'RSA-OAEP'
732
+ }, keyPair.privateKey, data);
733
+ }
734
+ if (_this.algorithm.name === AsymmetricCryptoAlgorithmName.ECDH) {
735
+ if (typeof remoteKey === 'undefined') {
736
+ throw new Error('Remote public key is required.');
737
+ }
738
+ const iv = data.slice(0, 16);
739
+ const key = yield crypto.subtle.deriveKey({
740
+ name: 'ECDH',
741
+ public: remoteKey
742
+ }, keyPair.privateKey, {
743
+ name: 'AES-GCM',
744
+ length: 256
745
+ }, true, [
746
+ 'decrypt'
747
+ ]);
748
+ return crypto.subtle.decrypt({
749
+ name: 'AES-GCM',
750
+ length: 256,
751
+ iv
752
+ }, key, data.slice(16));
753
+ }
754
+ throw new Error('Unsupported algorithm for decryption.');
755
+ })();
756
+ }
757
+ constructor(algorithm){
758
+ _define_property$1$1(this, "algorithm", undefined);
759
+ _define_property$1$1(this, "keyPair", undefined);
760
+ if (algorithm.name === AsymmetricCryptoAlgorithmName.RSA_OAEP) {
761
+ algorithm = _object_spread_props(_object_spread$4({}, algorithm), {
762
+ publicExponent: new Uint8Array([
763
+ 1,
764
+ 0,
765
+ 1
766
+ ])
767
+ });
768
+ }
769
+ this.algorithm = algorithm;
770
+ }
771
+ }
458
772
  /*
459
773
  * Copyright (c) 2021-2024.
460
774
  * Author Peter Placzek (tada5hi)
@@ -494,9 +808,27 @@ let customAlphabet = (alphabet, size = 21)=>customRandom(alphabet, size, random)
494
808
  function hasOwnProperty(obj, prop) {
495
809
  return Object.prototype.hasOwnProperty.call(obj, prop);
496
810
  }
497
- function isObject$2(item) {
811
+ function isObject$3(item) {
498
812
  return !!item && typeof item === 'object' && !Array.isArray(item);
499
813
  }
814
+ /*
815
+ * Copyright (c) 2021-2024.
816
+ * Author Peter Placzek (tada5hi)
817
+ * For the full copyright and license information,
818
+ * view the LICENSE file that was distributed with this source code.
819
+ */ function isHex(value) {
820
+ return /^[A-Fa-f0-9]+$/i.test(value);
821
+ }
822
+ function hexToUTF8(value) {
823
+ try {
824
+ return decodeURIComponent(`%${value.match(/.{1,2}/g).join('%')}`);
825
+ } catch (e) {
826
+ if (e instanceof URIError) {
827
+ return value;
828
+ }
829
+ throw e;
830
+ }
831
+ }
500
832
  function createNanoID(alphabetOrLen, len) {
501
833
  return customAlphabet('0123456789abcdefghijklmnopqrstuvwxyz', 21)();
502
834
  }
@@ -831,7 +1163,7 @@ function parseQuery(parametersString = "") {
831
1163
  continue;
832
1164
  }
833
1165
  const value = decodeQueryValue(s[2] || "");
834
- if (object[key] === void 0) {
1166
+ if (object[key] === undefined) {
835
1167
  object[key] = value;
836
1168
  } else if (Array.isArray(object[key])) {
837
1169
  object[key].push(value);
@@ -857,7 +1189,7 @@ function encodeQueryItem(key, value) {
857
1189
  return `${encodeQueryKey(key)}=${encodeQueryValue(value)}`;
858
1190
  }
859
1191
  function stringifyQuery(query) {
860
- return Object.keys(query).filter((k)=>query[k] !== void 0).map((k)=>encodeQueryItem(k, query[k])).filter(Boolean).join("&");
1192
+ return Object.keys(query).filter((k)=>query[k] !== undefined).map((k)=>encodeQueryItem(k, query[k])).filter(Boolean).join("&");
861
1193
  }
862
1194
  const PROTOCOL_STRICT_REGEX = /^[\s\w\0+.-]{2,}:([/\\]{1,2})/;
863
1195
  const PROTOCOL_REGEX = /^[\s\w\0+.-]{2,}:([/\\]{2})?/;
@@ -984,7 +1316,7 @@ const e$1 = globalThis.Blob, o$1 = globalThis.File, a$1 = globalThis.FormData, s
984
1316
  throw new Error("[node-fetch-native] Failed to fetch: `globalThis.fetch` is not available!");
985
1317
  });
986
1318
 
987
- function isObject$1(item) {
1319
+ function isObject$2(item) {
988
1320
  return !!item && typeof item === 'object' && !Array.isArray(item);
989
1321
  }
990
1322
  function createExtractOptionsFn(fn) {
@@ -1015,7 +1347,7 @@ function createExtractOptionsFn(fn) {
1015
1347
  };
1016
1348
  }
1017
1349
  function isOptions(input) {
1018
- if (!isObject$1(input)) {
1350
+ if (!isObject$2(input)) {
1019
1351
  return false;
1020
1352
  }
1021
1353
  if (typeof input.message !== 'undefined' && typeof input.message !== 'string') {
@@ -1072,16 +1404,16 @@ class BaseError extends Error {
1072
1404
  var n = Object.defineProperty;
1073
1405
  var e = (t, r)=>n(t, "name", {
1074
1406
  value: r,
1075
- configurable: !0
1407
+ configurable: true
1076
1408
  });
1077
1409
  var i = Object.defineProperty, c = e((t, r)=>i(t, "name", {
1078
1410
  value: r,
1079
- configurable: !0
1411
+ configurable: true
1080
1412
  }), "e");
1081
1413
  function a() {
1082
1414
  return {
1083
- agent: void 0,
1084
- dispatcher: void 0
1415
+ agent: undefined,
1416
+ dispatcher: undefined
1085
1417
  };
1086
1418
  }
1087
1419
  e(a, "createProxy"), c(a, "createProxy");
@@ -1117,35 +1449,35 @@ const Blob = gT.Blob || e$1;
1117
1449
  * Author Peter Placzek (tada5hi)
1118
1450
  * For the full copyright and license information,
1119
1451
  * view the LICENSE file that was distributed with this source code.
1120
- */ var ResponseType;
1121
- (function(ResponseType) {
1452
+ */ var ResponseType = /*#__PURE__*/ function(ResponseType) {
1122
1453
  ResponseType["BLOB"] = "blob";
1123
1454
  ResponseType["STREAM"] = "stream";
1124
1455
  ResponseType["TEXT"] = "text";
1125
1456
  ResponseType["ARRAY_BUFFER"] = "arrayBuffer";
1126
1457
  ResponseType["JSON"] = "json";
1127
- })(ResponseType || (ResponseType = {}));
1128
- var MethodName;
1129
- (function(MethodName) {
1458
+ return ResponseType;
1459
+ }({});
1460
+ var MethodName = /*#__PURE__*/ function(MethodName) {
1130
1461
  MethodName["DELETE"] = "DELETE";
1131
1462
  MethodName["GET"] = "GET";
1132
1463
  MethodName["HEAD"] = "HEAD";
1133
1464
  MethodName["PATCH"] = "PATCH";
1134
1465
  MethodName["POST"] = "POST";
1135
1466
  MethodName["PUT"] = "PUT";
1136
- })(MethodName || (MethodName = {}));
1467
+ return MethodName;
1468
+ }({});
1137
1469
  /*
1138
1470
  * Copyright (c) 2023.
1139
1471
  * Author Peter Placzek (tada5hi)
1140
1472
  * For the full copyright and license information,
1141
1473
  * view the LICENSE file that was distributed with this source code.
1142
- */ var HookName;
1143
- (function(HookName) {
1474
+ */ var HookName = /*#__PURE__*/ function(HookName) {
1144
1475
  HookName["REQUEST"] = "request";
1145
1476
  HookName["REQUEST_ERROR"] = "requestError";
1146
1477
  HookName["RESPONSE"] = "response";
1147
1478
  HookName["RESPONSE_ERROR"] = "responseError";
1148
- })(HookName || (HookName = {}));
1479
+ return HookName;
1480
+ }({});
1149
1481
  function kindOf(input) {
1150
1482
  return Object.prototype.toString.call(input).slice(8, -1).toLowerCase();
1151
1483
  }
@@ -1153,11 +1485,11 @@ function kindOfTest(type, input) {
1153
1485
  type = type.toLowerCase();
1154
1486
  return kindOf(input) === type;
1155
1487
  }
1156
- function isObject(input) {
1488
+ function isObject$1(input) {
1157
1489
  return typeof input === 'object' && input !== null && !!input && !Array.isArray(input);
1158
1490
  }
1159
1491
  function isStream(input) {
1160
- return isObject(input) && typeof input.pipe === 'function';
1492
+ return isObject$1(input) && typeof input.pipe === 'function';
1161
1493
  }
1162
1494
  function isFormData(input) {
1163
1495
  if (typeof FormData$1 !== 'undefined' && input instanceof FormData$1) {
@@ -1194,7 +1526,7 @@ function isURLSearchParams(input) {
1194
1526
  return kindOfTest('URLSearchParams', input);
1195
1527
  }
1196
1528
  function verifyInstanceBySymbol(input, name) {
1197
- if (!isObject(input) && typeof input !== 'function') {
1529
+ if (!isObject$1(input) && typeof input !== 'function') {
1198
1530
  return false;
1199
1531
  }
1200
1532
  return input['@instanceof'] === Symbol.for(name);
@@ -1213,7 +1545,7 @@ function isJSONSerializable(input) {
1213
1545
  if (Array.isArray(input)) {
1214
1546
  return true;
1215
1547
  }
1216
- return isObject(input) || typeof input === 'function' && input.toJSON === 'function';
1548
+ return isObject$1(input) || typeof input === 'function' && input.toJSON === 'function';
1217
1549
  }
1218
1550
  /*
1219
1551
  * Copyright (c) 2023.
@@ -1230,30 +1562,29 @@ function isJSONSerializable(input) {
1230
1562
  * Author Peter Placzek (tada5hi)
1231
1563
  * For the full copyright and license information,
1232
1564
  * view the LICENSE file that was distributed with this source code.
1233
- */ var AuthorizationHeaderType;
1234
- (function(AuthorizationHeaderType) {
1565
+ */ var AuthorizationHeaderType = /*#__PURE__*/ function(AuthorizationHeaderType) {
1235
1566
  AuthorizationHeaderType["BEARER"] = "Bearer";
1236
1567
  AuthorizationHeaderType["BASIC"] = "Basic";
1237
1568
  AuthorizationHeaderType["X_API_KEY"] = "X-API-Key";
1238
1569
  AuthorizationHeaderType["API_KEY"] = "API-Key";
1239
- })(AuthorizationHeaderType || (AuthorizationHeaderType = {}));
1570
+ return AuthorizationHeaderType;
1571
+ }({});
1240
1572
  /*
1241
1573
  * Copyright (c) 2022.
1242
1574
  * Author Peter Placzek (tada5hi)
1243
1575
  * For the full copyright and license information,
1244
1576
  * view the LICENSE file that was distributed with this source code.
1245
- */ var ErrorCode;
1246
- (function(ErrorCode) {
1577
+ */ var ErrorCode = /*#__PURE__*/ function(ErrorCode) {
1247
1578
  ErrorCode["AUTHORIZATION_HEADER_INVALID"] = "auth_header_invalid";
1248
1579
  ErrorCode["AUTHORIZATION_HEADER_PARSE"] = "auth_header_parse";
1249
1580
  ErrorCode["AUTHORIZATION_HEADER_TYPE_PARSE"] = "auth_header_type_parse";
1250
1581
  ErrorCode["CONNECTION_ABORTED"] = "ECONNABORTED";
1251
1582
  ErrorCode["CONNECTION_CLOSED"] = "ECONNRESET";
1252
- })(ErrorCode || (ErrorCode = {}));
1583
+ return ErrorCode;
1584
+ }({});
1253
1585
  class ClientError extends BaseError {
1254
1586
  constructor(ctx){
1255
- super();
1256
- this['@instanceof'] = Symbol.for('ClientError');
1587
+ super(), this['@instanceof'] = Symbol.for('ClientError');
1257
1588
  this.request = ctx.request;
1258
1589
  this.response = ctx.response;
1259
1590
  this.code = ctx.code;
@@ -1311,7 +1642,7 @@ function isClientError(error) {
1311
1642
  if (error instanceof ClientError) {
1312
1643
  return true;
1313
1644
  }
1314
- return isObject(error) && verifyInstanceBySymbol(error, 'ClientError');
1645
+ return isObject$1(error) && verifyInstanceBySymbol(error, 'ClientError');
1315
1646
  }
1316
1647
  function stringifyAuthorizationHeader(header) {
1317
1648
  switch(header.type){
@@ -1333,12 +1664,12 @@ function stringifyAuthorizationHeader(header) {
1333
1664
  * Author Peter Placzek (tada5hi)
1334
1665
  * For the full copyright and license information,
1335
1666
  * view the LICENSE file that was distributed with this source code.
1336
- */ var HeaderName;
1337
- (function(HeaderName) {
1667
+ */ var HeaderName = /*#__PURE__*/ function(HeaderName) {
1338
1668
  HeaderName["ACCEPT"] = "accept";
1339
1669
  HeaderName["AUTHORIZATION"] = "authorization";
1340
1670
  HeaderName["CONTENT_TYPE"] = "content-type";
1341
- })(HeaderName || (HeaderName = {}));
1671
+ return HeaderName;
1672
+ }({});
1342
1673
  function createDefaultRequestTransformer() {
1343
1674
  return (data, headers)=>{
1344
1675
  if (isFormData(data)) {
@@ -1378,13 +1709,13 @@ function isRequestPayloadSupported(method = 'GET') {
1378
1709
  return method === MethodName.PATCH || method === MethodName.POST || method === MethodName.PUT;
1379
1710
  }
1380
1711
  function isRequestOptions(input) {
1381
- if (!isObject(input)) {
1712
+ if (!isObject$1(input)) {
1382
1713
  return false;
1383
1714
  }
1384
1715
  return input.url === 'string';
1385
1716
  }
1386
1717
  function isResponse(input) {
1387
- if (!isObject(input)) {
1718
+ if (!isObject$1(input)) {
1388
1719
  return false;
1389
1720
  }
1390
1721
  return typeof input.headers !== 'undefined' && typeof input.ok === 'boolean';
@@ -1809,7 +2140,7 @@ let Client$1 = class Client {
1809
2140
  function createClient(input) {
1810
2141
  return new Client$1(input);
1811
2142
  }
1812
- function isClient(input) {
2143
+ function isClient$1(input) {
1813
2144
  if (input instanceof Client$1) {
1814
2145
  return true;
1815
2146
  }
@@ -1838,11 +2169,11 @@ createClient();
1838
2169
  class BaseAPI {
1839
2170
  // -----------------------------------------------------------------------------------
1840
2171
  setClient(input) {
1841
- this.client = isClient(input) ? input : createClient(input);
2172
+ this.client = isClient$1(input) ? input : createClient(input);
1842
2173
  }
1843
2174
  // -----------------------------------------------------------------------------------
1844
2175
  constructor(context){
1845
- _define_property$5(this, "client", void 0);
2176
+ _define_property$5(this, "client", undefined);
1846
2177
  context = context || {};
1847
2178
  this.setClient(context.client);
1848
2179
  }
@@ -1852,7 +2183,7 @@ class BaseAPI {
1852
2183
  * Author Peter Placzek (tada5hi)
1853
2184
  * For the full copyright and license information,
1854
2185
  * view the LICENSE file that was distributed with this source code.
1855
- */ function asyncGeneratorStep$d(gen, resolve, reject, _next, _throw, key, arg) {
2186
+ */ function asyncGeneratorStep$e(gen, resolve, reject, _next, _throw, key, arg) {
1856
2187
  try {
1857
2188
  var info = gen[key](arg);
1858
2189
  var value = info.value;
@@ -1866,16 +2197,16 @@ class BaseAPI {
1866
2197
  Promise.resolve(value).then(_next, _throw);
1867
2198
  }
1868
2199
  }
1869
- function _async_to_generator$d(fn) {
2200
+ function _async_to_generator$e(fn) {
1870
2201
  return function() {
1871
2202
  var self = this, args = arguments;
1872
2203
  return new Promise(function(resolve, reject) {
1873
2204
  var gen = fn.apply(self, args);
1874
2205
  function _next(value) {
1875
- asyncGeneratorStep$d(gen, resolve, reject, _next, _throw, "next", value);
2206
+ asyncGeneratorStep$e(gen, resolve, reject, _next, _throw, "next", value);
1876
2207
  }
1877
2208
  function _throw(err) {
1878
- asyncGeneratorStep$d(gen, resolve, reject, _next, _throw, "throw", err);
2209
+ asyncGeneratorStep$e(gen, resolve, reject, _next, _throw, "throw", err);
1879
2210
  }
1880
2211
  _next(undefined);
1881
2212
  });
@@ -1884,21 +2215,21 @@ function _async_to_generator$d(fn) {
1884
2215
  class MasterImageGroupAPI extends BaseAPI {
1885
2216
  getMany(data) {
1886
2217
  var _this = this;
1887
- return _async_to_generator$d(function*() {
2218
+ return _async_to_generator$e(function*() {
1888
2219
  const response = yield _this.client.get(`master-image-groups${rapiq.buildQuery(data)}`);
1889
2220
  return response.data;
1890
2221
  })();
1891
2222
  }
1892
2223
  getOne(id) {
1893
2224
  var _this = this;
1894
- return _async_to_generator$d(function*() {
2225
+ return _async_to_generator$e(function*() {
1895
2226
  const response = yield _this.client.delete(`master-image-groups/${id}`);
1896
2227
  return response.data;
1897
2228
  })();
1898
2229
  }
1899
2230
  delete(id) {
1900
2231
  var _this = this;
1901
- return _async_to_generator$d(function*() {
2232
+ return _async_to_generator$e(function*() {
1902
2233
  const response = yield _this.client.delete(`master-image-groups/${id}`);
1903
2234
  return response.data;
1904
2235
  })();
@@ -1909,7 +2240,7 @@ class MasterImageGroupAPI extends BaseAPI {
1909
2240
  * Author Peter Placzek (tada5hi)
1910
2241
  * For the full copyright and license information,
1911
2242
  * view the LICENSE file that was distributed with this source code.
1912
- */ function asyncGeneratorStep$c(gen, resolve, reject, _next, _throw, key, arg) {
2243
+ */ function asyncGeneratorStep$d(gen, resolve, reject, _next, _throw, key, arg) {
1913
2244
  try {
1914
2245
  var info = gen[key](arg);
1915
2246
  var value = info.value;
@@ -1923,16 +2254,16 @@ class MasterImageGroupAPI extends BaseAPI {
1923
2254
  Promise.resolve(value).then(_next, _throw);
1924
2255
  }
1925
2256
  }
1926
- function _async_to_generator$c(fn) {
2257
+ function _async_to_generator$d(fn) {
1927
2258
  return function() {
1928
2259
  var self = this, args = arguments;
1929
2260
  return new Promise(function(resolve, reject) {
1930
2261
  var gen = fn.apply(self, args);
1931
2262
  function _next(value) {
1932
- asyncGeneratorStep$c(gen, resolve, reject, _next, _throw, "next", value);
2263
+ asyncGeneratorStep$d(gen, resolve, reject, _next, _throw, "next", value);
1933
2264
  }
1934
2265
  function _throw(err) {
1935
- asyncGeneratorStep$c(gen, resolve, reject, _next, _throw, "throw", err);
2266
+ asyncGeneratorStep$d(gen, resolve, reject, _next, _throw, "throw", err);
1936
2267
  }
1937
2268
  _next(undefined);
1938
2269
  });
@@ -1969,28 +2300,28 @@ function _object_spread$3(target) {
1969
2300
  class MasterImageAPI extends BaseAPI {
1970
2301
  getMany(data) {
1971
2302
  var _this = this;
1972
- return _async_to_generator$c(function*() {
2303
+ return _async_to_generator$d(function*() {
1973
2304
  const response = yield _this.client.get(`master-images${rapiq.buildQuery(data)}`);
1974
2305
  return response.data;
1975
2306
  })();
1976
2307
  }
1977
2308
  getOne(id, data) {
1978
2309
  var _this = this;
1979
- return _async_to_generator$c(function*() {
2310
+ return _async_to_generator$d(function*() {
1980
2311
  const response = yield _this.client.get(`master-images/${id}${rapiq.buildQuery(data)}`);
1981
2312
  return response.data;
1982
2313
  })();
1983
2314
  }
1984
2315
  delete(id) {
1985
2316
  var _this = this;
1986
- return _async_to_generator$c(function*() {
2317
+ return _async_to_generator$d(function*() {
1987
2318
  const response = yield _this.client.delete(`master-images/${id}`);
1988
2319
  return response.data;
1989
2320
  })();
1990
2321
  }
1991
2322
  runCommand(command, data = {}) {
1992
2323
  var _this = this;
1993
- return _async_to_generator$c(function*() {
2324
+ return _async_to_generator$d(function*() {
1994
2325
  const actionData = _object_spread$3({
1995
2326
  command
1996
2327
  }, data);
@@ -1999,21 +2330,12 @@ class MasterImageAPI extends BaseAPI {
1999
2330
  })();
2000
2331
  }
2001
2332
  }
2002
- function nullifyEmptyObjectProperties(data) {
2003
- const keys = Object.keys(data);
2004
- for(let i = 0; i < keys.length; i++){
2005
- if (data[keys[i]] === '') {
2006
- data[keys[i]] = null;
2007
- }
2008
- }
2009
- return data;
2010
- }
2011
2333
  /*
2012
2334
  * Copyright (c) 2021-2024.
2013
2335
  * Author Peter Placzek (tada5hi)
2014
2336
  * For the full copyright and license information,
2015
2337
  * view the LICENSE file that was distributed with this source code.
2016
- */ function asyncGeneratorStep$b(gen, resolve, reject, _next, _throw, key, arg) {
2338
+ */ function asyncGeneratorStep$c(gen, resolve, reject, _next, _throw, key, arg) {
2017
2339
  try {
2018
2340
  var info = gen[key](arg);
2019
2341
  var value = info.value;
@@ -2027,55 +2349,135 @@ function nullifyEmptyObjectProperties(data) {
2027
2349
  Promise.resolve(value).then(_next, _throw);
2028
2350
  }
2029
2351
  }
2030
- function _async_to_generator$b(fn) {
2352
+ function _async_to_generator$c(fn) {
2031
2353
  return function() {
2032
2354
  var self = this, args = arguments;
2033
2355
  return new Promise(function(resolve, reject) {
2034
2356
  var gen = fn.apply(self, args);
2035
2357
  function _next(value) {
2036
- asyncGeneratorStep$b(gen, resolve, reject, _next, _throw, "next", value);
2358
+ asyncGeneratorStep$c(gen, resolve, reject, _next, _throw, "next", value);
2037
2359
  }
2038
2360
  function _throw(err) {
2039
- asyncGeneratorStep$b(gen, resolve, reject, _next, _throw, "throw", err);
2361
+ asyncGeneratorStep$c(gen, resolve, reject, _next, _throw, "throw", err);
2040
2362
  }
2041
2363
  _next(undefined);
2042
2364
  });
2043
2365
  };
2044
2366
  }
2045
- class ProjectAPI extends BaseAPI {
2046
- getMany(record) {
2367
+ class MasterImageEventLogAPI extends BaseAPI {
2368
+ getMany(options) {
2047
2369
  var _this = this;
2048
- return _async_to_generator$b(function*() {
2049
- const response = yield _this.client.get(`projects${rapiq.buildQuery(record)}`);
2050
- return response.data;
2370
+ return _async_to_generator$c(function*() {
2371
+ const { data: response } = yield _this.client.get(`master-image-event-logs${rapiq.buildQuery(options)}`);
2372
+ return response;
2051
2373
  })();
2052
2374
  }
2053
- getOne(id, requestRecord) {
2375
+ getOne(id) {
2054
2376
  var _this = this;
2055
- return _async_to_generator$b(function*() {
2056
- const response = yield _this.client.get(`projects/${id}${rapiq.buildQuery(requestRecord)}`);
2057
- return response.data;
2377
+ return _async_to_generator$c(function*() {
2378
+ const { data: response } = yield _this.client.get(`master-image-event-logs/${id}`);
2379
+ return response;
2058
2380
  })();
2059
2381
  }
2060
- create(data) {
2382
+ delete(id) {
2061
2383
  var _this = this;
2062
- return _async_to_generator$b(function*() {
2063
- const response = yield _this.client.post('projects', nullifyEmptyObjectProperties(data));
2064
- return response.data;
2384
+ return _async_to_generator$c(function*() {
2385
+ const { data: response } = yield _this.client.delete(`master-image-event-logs/${id}`);
2386
+ return response;
2065
2387
  })();
2066
2388
  }
2067
- delete(id) {
2389
+ update(id, data) {
2068
2390
  var _this = this;
2069
- return _async_to_generator$b(function*() {
2070
- const response = yield _this.client.delete(`projects/${id}`);
2071
- return response.data;
2391
+ return _async_to_generator$c(function*() {
2392
+ const { data: response } = yield _this.client.post(`master-image-event-logs/${id}`, data);
2393
+ return response;
2072
2394
  })();
2073
2395
  }
2074
- update(id, data) {
2396
+ create(data) {
2075
2397
  var _this = this;
2076
- return _async_to_generator$b(function*() {
2077
- const response = yield _this.client.post(`projects/${id}`, nullifyEmptyObjectProperties(data));
2078
- return response.data;
2398
+ return _async_to_generator$c(function*() {
2399
+ const { data: response } = yield _this.client.post('master-image-event-logs', data);
2400
+ return response;
2401
+ })();
2402
+ }
2403
+ }
2404
+ function nullifyEmptyObjectProperties(data) {
2405
+ const keys = Object.keys(data);
2406
+ for(let i = 0; i < keys.length; i++){
2407
+ if (data[keys[i]] === '') {
2408
+ data[keys[i]] = null;
2409
+ }
2410
+ }
2411
+ return data;
2412
+ }
2413
+ /*
2414
+ * Copyright (c) 2021-2024.
2415
+ * Author Peter Placzek (tada5hi)
2416
+ * For the full copyright and license information,
2417
+ * view the LICENSE file that was distributed with this source code.
2418
+ */ function asyncGeneratorStep$b(gen, resolve, reject, _next, _throw, key, arg) {
2419
+ try {
2420
+ var info = gen[key](arg);
2421
+ var value = info.value;
2422
+ } catch (error) {
2423
+ reject(error);
2424
+ return;
2425
+ }
2426
+ if (info.done) {
2427
+ resolve(value);
2428
+ } else {
2429
+ Promise.resolve(value).then(_next, _throw);
2430
+ }
2431
+ }
2432
+ function _async_to_generator$b(fn) {
2433
+ return function() {
2434
+ var self = this, args = arguments;
2435
+ return new Promise(function(resolve, reject) {
2436
+ var gen = fn.apply(self, args);
2437
+ function _next(value) {
2438
+ asyncGeneratorStep$b(gen, resolve, reject, _next, _throw, "next", value);
2439
+ }
2440
+ function _throw(err) {
2441
+ asyncGeneratorStep$b(gen, resolve, reject, _next, _throw, "throw", err);
2442
+ }
2443
+ _next(undefined);
2444
+ });
2445
+ };
2446
+ }
2447
+ class ProjectAPI extends BaseAPI {
2448
+ getMany(record) {
2449
+ var _this = this;
2450
+ return _async_to_generator$b(function*() {
2451
+ const response = yield _this.client.get(`projects${rapiq.buildQuery(record)}`);
2452
+ return response.data;
2453
+ })();
2454
+ }
2455
+ getOne(id, requestRecord) {
2456
+ var _this = this;
2457
+ return _async_to_generator$b(function*() {
2458
+ const response = yield _this.client.get(`projects/${id}${rapiq.buildQuery(requestRecord)}`);
2459
+ return response.data;
2460
+ })();
2461
+ }
2462
+ create(data) {
2463
+ var _this = this;
2464
+ return _async_to_generator$b(function*() {
2465
+ const response = yield _this.client.post('projects', nullifyEmptyObjectProperties(data));
2466
+ return response.data;
2467
+ })();
2468
+ }
2469
+ delete(id) {
2470
+ var _this = this;
2471
+ return _async_to_generator$b(function*() {
2472
+ const response = yield _this.client.delete(`projects/${id}`);
2473
+ return response.data;
2474
+ })();
2475
+ }
2476
+ update(id, data) {
2477
+ var _this = this;
2478
+ return _async_to_generator$b(function*() {
2479
+ const response = yield _this.client.post(`projects/${id}`, nullifyEmptyObjectProperties(data));
2480
+ return response.data;
2079
2481
  })();
2080
2482
  }
2081
2483
  }
@@ -2988,13 +3390,16 @@ class AnalysisBucketAPI extends BaseAPI {
2988
3390
  }
2989
3391
  class Client extends Client$1 {
2990
3392
  constructor(config){
2991
- super(config), _define_property(this, "masterImage", void 0), _define_property(this, "masterImageGroup", void 0), _define_property(this, "project", void 0), _define_property(this, "projectNode", void 0), _define_property(this, "registry", void 0), _define_property(this, "registryProject", void 0), _define_property(this, "node", void 0), _define_property(this, "analysis", void 0), _define_property(this, "analysisBucket", void 0), _define_property(this, "analysisBucketFile", void 0), _define_property(this, "analysisLog", void 0), _define_property(this, "analysisNode", void 0), _define_property(this, "analysisPermission", void 0), _define_property(this, "service", void 0);
3393
+ super(config), _define_property(this, "masterImage", undefined), _define_property(this, "masterImageGroup", undefined), _define_property(this, "masterImageEventLog", undefined), _define_property(this, "project", undefined), _define_property(this, "projectNode", undefined), _define_property(this, "registry", undefined), _define_property(this, "registryProject", undefined), _define_property(this, "node", undefined), _define_property(this, "analysis", undefined), _define_property(this, "analysisBucket", undefined), _define_property(this, "analysisBucketFile", undefined), _define_property(this, "analysisLog", undefined), _define_property(this, "analysisNode", undefined), _define_property(this, "analysisPermission", undefined), _define_property(this, "service", undefined);
2992
3394
  this.masterImage = new MasterImageAPI({
2993
3395
  client: this
2994
3396
  });
2995
3397
  this.masterImageGroup = new MasterImageGroupAPI({
2996
3398
  client: this
2997
3399
  });
3400
+ this.masterImageEventLog = new MasterImageEventLogAPI({
3401
+ client: this
3402
+ });
2998
3403
  this.project = new ProjectAPI({
2999
3404
  client: this
3000
3405
  });
@@ -3152,18 +3557,15 @@ function injectSocketManager(app) {
3152
3557
  }
3153
3558
 
3154
3559
  function installSocketManager(app, options) {
3155
- const store = clientWebKit.useStore();
3560
+ const store = clientWebKit.injectStore();
3156
3561
  const { accessToken } = clientWebKit.storeToRefs(store);
3157
3562
  const manager = new coreRealtimeKit.ClientManager({
3158
3563
  url: options.baseURL,
3159
3564
  token: ()=>accessToken.value
3160
3565
  });
3161
- const oldValue = vue.ref();
3162
- store.$subscribe((mutation, state)=>{
3163
- if (state.accessToken !== oldValue.value) {
3164
- oldValue.value = state.accessToken;
3165
- Promise.resolve().then(()=>manager.reconnect());
3166
- }
3566
+ const storeDispatcher = clientWebKit.injectStoreDispatcher();
3567
+ storeDispatcher.on(clientWebKit.StoreDispatcherEventName.ACCESS_TOKEN_UPDATED, ()=>{
3568
+ Promise.resolve().then(()=>manager.reconnect());
3167
3569
  });
3168
3570
  provideSocketManager(manager, app);
3169
3571
  }
@@ -3176,7 +3578,7 @@ function createEntitySocket(ctx) {
3176
3578
  };
3177
3579
  }
3178
3580
  const socketManager = injectSocketManager();
3179
- const store = clientWebKit.useStore();
3581
+ const store = clientWebKit.injectStore();
3180
3582
  const storeRefs = clientWebKit.storeToRefs(store);
3181
3583
  const realmId = vue.computed(()=>{
3182
3584
  if (storeRefs.realmName.value === coreKit$1.REALM_MASTER_NAME) {
@@ -3282,8 +3684,7 @@ function createEntitySocket(ctx) {
3282
3684
  vue.onUnmounted(()=>unmount());
3283
3685
  vue.watch(targetId, (val, oldValue)=>{
3284
3686
  if (val !== oldValue) {
3285
- unmount();
3286
- mount();
3687
+ Promise.resolve().then(()=>unmount()).then(()=>mount());
3287
3688
  }
3288
3689
  });
3289
3690
  return {
@@ -3381,18 +3782,28 @@ function createList(context) {
3381
3782
  busy.value = false;
3382
3783
  meta.value.busy = false;
3383
3784
  }
3384
- if (context.loadAll && total.value > data.value.length) {
3385
- await load({
3386
- ...meta.value,
3387
- pagination: {
3388
- ...meta.value.pagination,
3389
- offset: (meta.value.pagination?.offset ?? 0) + (meta.value.pagination?.limit ?? 0)
3390
- }
3391
- });
3785
+ if (context.loadAll) {
3786
+ if (total.value > data.value.length) {
3787
+ await load({
3788
+ ...meta.value,
3789
+ pagination: {
3790
+ ...meta.value.pagination,
3791
+ offset: (meta.value.pagination?.offset ?? 0) + (meta.value.pagination?.limit ?? 0)
3792
+ }
3793
+ });
3794
+ return;
3795
+ }
3796
+ if (context.onLoaded) {
3797
+ context.onLoaded(meta.value);
3798
+ }
3799
+ return;
3800
+ }
3801
+ if (context.onLoaded) {
3802
+ context.onLoaded(meta.value);
3392
3803
  }
3393
3804
  }
3394
3805
  const handleCreated = buildListCreatedHandler(data, (cbEntity)=>{
3395
- total.value--;
3806
+ total.value++;
3396
3807
  if (context.onCreated) {
3397
3808
  context.onCreated(cbEntity, meta.value);
3398
3809
  }
@@ -4276,7 +4687,7 @@ var FEntityDelete = vue.defineComponent({
4276
4687
  const submit = async ()=>{
4277
4688
  if (busy.value) return;
4278
4689
  const domainAPI = apiClient[props.entityType];
4279
- if (!isObject$2(domainAPI)) {
4690
+ if (!isObject$3(domainAPI)) {
4280
4691
  return;
4281
4692
  }
4282
4693
  if (typeof domainAPI.delete !== 'function') {
@@ -4372,9 +4783,6 @@ var FMasterImagesSync = vue.defineComponent({
4372
4783
  }
4373
4784
  };
4374
4785
  return ()=>vue.h('div', [
4375
- vue.h('p', [
4376
- 'The master images and groups are extracted from the GitHub repository after executing the sync command and are then transferred to the database.' + ' ' + 'In addition, the master images are built and transferred to all registered registry instances.'
4377
- ]),
4378
4786
  vue.h('div', {
4379
4787
  class: 'mb-1'
4380
4788
  }, [
@@ -4394,34 +4802,160 @@ var FMasterImagesSync = vue.defineComponent({
4394
4802
  ])
4395
4803
  ]),
4396
4804
  vue.h(MasterImageList, {
4397
- ref: itemList,
4398
- scopedSlots: {
4399
- [EntityListSlotName.HEADER]: (props)=>[
4400
- vue.h(clientWebKit.ASearch, {
4401
- load: props.load,
4402
- meta: props.meta,
4403
- busy: props.busy
4404
- }),
4405
- vue.h('strong', [
4406
- 'Overview'
4407
- ])
4408
- ],
4409
- [EntityListSlotName.ITEM_ACTIONS]: (props)=>vue.h(FEntityDelete, {
4410
- class: 'btn btn-xs btn-danger',
4411
- elementType: 'button',
4412
- entityId: props.data.id,
4413
- entityType: coreKit.DomainType.MASTER_IMAGE,
4414
- withText: false,
4415
- onDeleted (item) {
4416
- return handleDeleted(item);
4417
- }
4418
- })
4419
- }
4805
+ ref: itemList
4806
+ }, {
4807
+ [EntityListSlotName.ITEM_ACTIONS]: (props)=>vue.h(FEntityDelete, {
4808
+ class: 'btn btn-xs btn-danger',
4809
+ elementType: 'button',
4810
+ entityId: props.data.id,
4811
+ entityType: coreKit.DomainType.MASTER_IMAGE,
4812
+ withText: false,
4813
+ onDeleted (item) {
4814
+ return handleDeleted(item);
4815
+ }
4816
+ })
4420
4817
  })
4421
4818
  ]);
4422
4819
  }
4423
4820
  });
4424
4821
 
4822
+ var FMasterImageEventLog = vue.defineComponent({
4823
+ props: {
4824
+ index: {
4825
+ type: Number,
4826
+ default: 0
4827
+ },
4828
+ entity: {
4829
+ type: Object,
4830
+ required: true
4831
+ }
4832
+ },
4833
+ setup (props) {
4834
+ const entity = vue.toRef(props, 'entity');
4835
+ const message = [
4836
+ 'Event '
4837
+ ];
4838
+ message.push(vue.h('strong', `${entity.value.name}`));
4839
+ if (entity.value.master_image) {
4840
+ message.push(vue.h('span', {
4841
+ class: 'ms-1'
4842
+ }, [
4843
+ `(${entity.value.master_image.virtual_path})`
4844
+ ]));
4845
+ }
4846
+ message.push(' triggered.');
4847
+ // todo: render entity.value.data depending on event name
4848
+ return ()=>vue.h('div', {
4849
+ class: `line line-${props.index + 1}`
4850
+ }, [
4851
+ vue.h('div', {
4852
+ class: 'd-flex flex-row'
4853
+ }, [
4854
+ vue.h('div', {
4855
+ class: 'line-number'
4856
+ }, [
4857
+ props.index + 1
4858
+ ]),
4859
+ vue.h('div', {
4860
+ class: 'line-content d-flex flex-row'
4861
+ }, [
4862
+ vue.h('div', {
4863
+ class: [
4864
+ 'line-message'
4865
+ ]
4866
+ }, [
4867
+ message
4868
+ ]),
4869
+ vue.h('div', {
4870
+ class: 'ms-auto'
4871
+ }, [
4872
+ vue.h(timeago.VCTimeago, {
4873
+ datetime: entity.value.created_at
4874
+ })
4875
+ ])
4876
+ ])
4877
+ ])
4878
+ ]);
4879
+ }
4880
+ });
4881
+
4882
+ var FMasterImageEventLogs = vue.defineComponent({
4883
+ setup (props, setup) {
4884
+ const rootNode = vue.ref(null);
4885
+ const scrollToLastLine = (meta)=>{
4886
+ if (!rootNode.value) {
4887
+ return;
4888
+ }
4889
+ const el = rootNode.value.getElementsByClassName(`line-${meta.total}`)[0];
4890
+ if (el) {
4891
+ el.scrollIntoView({
4892
+ behavior: 'smooth'
4893
+ });
4894
+ }
4895
+ };
4896
+ const { render, setDefaults } = createList({
4897
+ type: `${coreKit.DomainType.MASTER_IMAGE_EVENT_LOG}`,
4898
+ onCreated (_entity, meta) {
4899
+ scrollToLastLine(meta);
4900
+ },
4901
+ onLoaded (meta) {
4902
+ vue.nextTick(()=>{
4903
+ scrollToLastLine(meta);
4904
+ });
4905
+ },
4906
+ socket: {
4907
+ processEvent (event) {
4908
+ return event.meta.roomName !== coreKit.buildDomainChannelName(coreKit.DomainType.MASTER_IMAGE_EVENT_LOG);
4909
+ }
4910
+ },
4911
+ props,
4912
+ setup,
4913
+ loadAll: true,
4914
+ query: {
4915
+ sort: {
4916
+ created_at: 'ASC'
4917
+ },
4918
+ relations: {
4919
+ master_image: true
4920
+ }
4921
+ }
4922
+ });
4923
+ setDefaults({
4924
+ noMore: {
4925
+ content: 'No more logs available...'
4926
+ },
4927
+ item: {
4928
+ content (item, slotProps) {
4929
+ return vue.h(FMasterImageEventLog, {
4930
+ entity: item,
4931
+ index: slotProps.index,
4932
+ onDeleted () {
4933
+ if (slotProps && slotProps.deleted) {
4934
+ slotProps.deleted(item);
4935
+ }
4936
+ },
4937
+ onUpdated: (e)=>{
4938
+ if (slotProps && slotProps.updated) {
4939
+ slotProps.updated(e);
4940
+ }
4941
+ }
4942
+ });
4943
+ }
4944
+ }
4945
+ });
4946
+ return ()=>vue.h('div', {
4947
+ ref: rootNode,
4948
+ class: 'log-container'
4949
+ }, [
4950
+ vue.h('div', {
4951
+ class: 'log-body'
4952
+ }, [
4953
+ render()
4954
+ ])
4955
+ ]);
4956
+ }
4957
+ });
4958
+
4425
4959
  const FProject = vue.defineComponent({
4426
4960
  props: defineEntityManagerProps(),
4427
4961
  emits: defineEntityManagerEvents(),
@@ -5049,7 +5583,7 @@ const FProjectInForm = vue.defineComponent({
5049
5583
  }
5050
5584
  });
5051
5585
 
5052
- var _sfc_main$f = vue.defineComponent({
5586
+ var _sfc_main$h = vue.defineComponent({
5053
5587
  components: {
5054
5588
  BModal: bootstrapVueNext.BModal,
5055
5589
  FProjectInForm,
@@ -5096,49 +5630,49 @@ var _sfc_main$f = vue.defineComponent({
5096
5630
  }
5097
5631
  });
5098
5632
 
5099
- const _hoisted_1$d = {
5633
+ const _hoisted_1$f = {
5100
5634
  class: "d-flex flex-column gap-1 w-100"
5101
5635
  };
5102
- const _hoisted_2$b = {
5636
+ const _hoisted_2$e = {
5103
5637
  class: "w-100"
5104
5638
  };
5105
- const _hoisted_3$9 = {
5639
+ const _hoisted_3$c = {
5106
5640
  class: "d-flex flex-row align-items-center"
5107
5641
  };
5108
- const _hoisted_4$9 = {
5642
+ const _hoisted_4$c = {
5109
5643
  class: "ms-auto d-flex flex-row gap-1"
5110
5644
  };
5111
- const _hoisted_5$6 = {
5645
+ const _hoisted_5$8 = {
5112
5646
  class: "row"
5113
5647
  };
5114
- const _hoisted_6$5 = {
5648
+ const _hoisted_6$7 = {
5115
5649
  class: "col-12 col-md-4 d-flex align-items-center flex-column"
5116
5650
  };
5117
- const _hoisted_7$4 = {
5651
+ const _hoisted_7$6 = {
5118
5652
  class: "col-12 col-md-4 d-flex align-items-center flex-column"
5119
5653
  };
5120
- const _hoisted_8$4 = {
5654
+ const _hoisted_8$6 = {
5121
5655
  class: "col-12 col-md-4 d-flex align-items-center flex-column"
5122
5656
  };
5123
- const _hoisted_9$3 = {
5657
+ const _hoisted_9$4 = {
5124
5658
  class: "d-flex flex-row"
5125
5659
  };
5126
- const _hoisted_10$3 = {
5660
+ const _hoisted_10$4 = {
5127
5661
  class: ""
5128
5662
  };
5129
5663
  const _hoisted_11$3 = {
5130
5664
  class: "ms-auto"
5131
5665
  };
5132
- function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5666
+ function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) {
5133
5667
  const _component_VCLink = vue.resolveComponent("VCLink");
5134
5668
  const _component_FProjectNodeApprovalCommand = vue.resolveComponent("FProjectNodeApprovalCommand");
5135
5669
  const _component_FProjectNodeApprovalStatus = vue.resolveComponent("FProjectNodeApprovalStatus");
5136
5670
  const _component_VCTimeago = vue.resolveComponent("VCTimeago");
5137
5671
  const _component_FProjectInForm = vue.resolveComponent("FProjectInForm");
5138
5672
  const _component_BModal = vue.resolveComponent("BModal");
5139
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$d, [
5140
- vue.createElementVNode("div", _hoisted_2$b, [
5141
- vue.createElementVNode("div", _hoisted_3$9, [
5673
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$f, [
5674
+ vue.createElementVNode("div", _hoisted_2$e, [
5675
+ vue.createElementVNode("div", _hoisted_3$c, [
5142
5676
  vue.createElementVNode("div", null, [
5143
5677
  vue.renderSlot(_ctx.$slots, "title", {
5144
5678
  data: _ctx.entity
@@ -5159,7 +5693,7 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5159
5693
  ])
5160
5694
  ])
5161
5695
  ]),
5162
- vue.createElementVNode("div", _hoisted_4$9, [
5696
+ vue.createElementVNode("div", _hoisted_4$c, [
5163
5697
  vue.renderSlot(_ctx.$slots, "itemActions", {
5164
5698
  data: _ctx.entity
5165
5699
  }, ()=>[
@@ -5222,8 +5756,8 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5222
5756
  vue.renderSlot(_ctx.$slots, "body", {
5223
5757
  data: _ctx.entity
5224
5758
  }, ()=>[
5225
- vue.createElementVNode("div", _hoisted_5$6, [
5226
- vue.createElementVNode("div", _hoisted_6$5, [
5759
+ vue.createElementVNode("div", _hoisted_5$8, [
5760
+ vue.createElementVNode("div", _hoisted_6$7, [
5227
5761
  _cache[5] || (_cache[5] = vue.createElementVNode("div", null, [
5228
5762
  vue.createElementVNode("strong", null, [
5229
5763
  vue.createElementVNode("i", {
@@ -5234,7 +5768,7 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5234
5768
  ], -1)),
5235
5769
  vue.createElementVNode("div", null, vue.toDisplayString(_ctx.entity.node.name), 1)
5236
5770
  ]),
5237
- vue.createElementVNode("div", _hoisted_7$4, [
5771
+ vue.createElementVNode("div", _hoisted_7$6, [
5238
5772
  _cache[6] || (_cache[6] = vue.createElementVNode("div", null, [
5239
5773
  vue.createElementVNode("strong", null, [
5240
5774
  vue.createElementVNode("i", {
@@ -5258,7 +5792,7 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5258
5792
  ])
5259
5793
  ])
5260
5794
  ]),
5261
- vue.createElementVNode("div", _hoisted_8$4, [
5795
+ vue.createElementVNode("div", _hoisted_8$6, [
5262
5796
  _cache[7] || (_cache[7] = vue.createElementVNode("div", null, [
5263
5797
  vue.createElementVNode("strong", null, [
5264
5798
  vue.createElementVNode("i", {
@@ -5284,8 +5818,8 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5284
5818
  vue.renderSlot(_ctx.$slots, "footer", {
5285
5819
  data: _ctx.entity
5286
5820
  }, ()=>[
5287
- vue.createElementVNode("div", _hoisted_9$3, [
5288
- vue.createElementVNode("div", _hoisted_10$3, [
5821
+ vue.createElementVNode("div", _hoisted_9$4, [
5822
+ vue.createElementVNode("div", _hoisted_10$4, [
5289
5823
  vue.createElementVNode("small", null, [
5290
5824
  _cache[8] || (_cache[8] = vue.createElementVNode("span", {
5291
5825
  class: "text-muted"
@@ -5348,10 +5882,10 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
5348
5882
  ])
5349
5883
  ]);
5350
5884
  }
5351
- var FProjectNodeInCard = /* @__PURE__ */ _export_sfc(_sfc_main$f, [
5885
+ var FProjectNodeInCard = /* @__PURE__ */ _export_sfc(_sfc_main$h, [
5352
5886
  [
5353
5887
  "render",
5354
- _sfc_render$f
5888
+ _sfc_render$h
5355
5889
  ]
5356
5890
  ]);
5357
5891
 
@@ -5624,7 +6158,7 @@ const FProjectForm = vue.defineComponent({
5624
6158
  }
5625
6159
  });
5626
6160
 
5627
- var _sfc_main$e = vue.defineComponent({
6161
+ var _sfc_main$g = vue.defineComponent({
5628
6162
  components: {
5629
6163
  FEntityDelete,
5630
6164
  VCLink: link.VCLink,
@@ -5658,46 +6192,46 @@ var _sfc_main$e = vue.defineComponent({
5658
6192
  }
5659
6193
  });
5660
6194
 
5661
- const _hoisted_1$c = {
6195
+ const _hoisted_1$e = {
5662
6196
  class: "d-flex flex-column w-100"
5663
6197
  };
5664
- const _hoisted_2$a = {
6198
+ const _hoisted_2$d = {
5665
6199
  class: "w-100"
5666
6200
  };
5667
- const _hoisted_3$8 = {
6201
+ const _hoisted_3$b = {
5668
6202
  class: "d-flex flex-row align-items-center"
5669
6203
  };
5670
- const _hoisted_4$8 = {
6204
+ const _hoisted_4$b = {
5671
6205
  class: "ms-auto"
5672
6206
  };
5673
- const _hoisted_5$5 = {
6207
+ const _hoisted_5$7 = {
5674
6208
  class: "d-flex justify-content-between flex-row"
5675
6209
  };
5676
- const _hoisted_6$4 = {
6210
+ const _hoisted_6$6 = {
5677
6211
  class: "d-flex flex-grow-1 align-items-center flex-column"
5678
6212
  };
5679
- const _hoisted_7$3 = {
6213
+ const _hoisted_7$5 = {
5680
6214
  class: "d-flex flex-grow-1 align-items-center flex-column"
5681
6215
  };
5682
- const _hoisted_8$3 = {
6216
+ const _hoisted_8$5 = {
5683
6217
  class: "d-flex flex-grow-1 align-items-center flex-column"
5684
6218
  };
5685
- const _hoisted_9$2 = {
6219
+ const _hoisted_9$3 = {
5686
6220
  class: "d-flex flex-row"
5687
6221
  };
5688
- const _hoisted_10$2 = {
6222
+ const _hoisted_10$3 = {
5689
6223
  class: ""
5690
6224
  };
5691
6225
  const _hoisted_11$2 = {
5692
6226
  class: "ms-auto"
5693
6227
  };
5694
- function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
6228
+ function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
5695
6229
  const _component_VCLink = vue.resolveComponent("VCLink");
5696
6230
  const _component_FEntityDelete = vue.resolveComponent("FEntityDelete");
5697
6231
  const _component_VCTimeago = vue.resolveComponent("VCTimeago");
5698
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$c, [
5699
- vue.createElementVNode("div", _hoisted_2$a, [
5700
- vue.createElementVNode("div", _hoisted_3$8, [
6232
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$e, [
6233
+ vue.createElementVNode("div", _hoisted_2$d, [
6234
+ vue.createElementVNode("div", _hoisted_3$b, [
5701
6235
  vue.createElementVNode("div", null, [
5702
6236
  vue.renderSlot(_ctx.$slots, "title", {
5703
6237
  data: _ctx.entity
@@ -5718,7 +6252,7 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
5718
6252
  ])
5719
6253
  ])
5720
6254
  ]),
5721
- vue.createElementVNode("div", _hoisted_4$8, [
6255
+ vue.createElementVNode("div", _hoisted_4$b, [
5722
6256
  vue.renderSlot(_ctx.$slots, "itemActions", {
5723
6257
  data: _ctx.entity
5724
6258
  }, ()=>[
@@ -5757,8 +6291,8 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
5757
6291
  vue.renderSlot(_ctx.$slots, "body", {
5758
6292
  data: _ctx.entity
5759
6293
  }, ()=>[
5760
- vue.createElementVNode("div", _hoisted_5$5, [
5761
- vue.createElementVNode("div", _hoisted_6$4, [
6294
+ vue.createElementVNode("div", _hoisted_5$7, [
6295
+ vue.createElementVNode("div", _hoisted_6$6, [
5762
6296
  _cache[2] || (_cache[2] = vue.createElementVNode("div", null, [
5763
6297
  vue.createElementVNode("strong", null, [
5764
6298
  vue.createElementVNode("i", {
@@ -5774,7 +6308,7 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
5774
6308
  })
5775
6309
  }, vue.toDisplayString(_ctx.entity.analyses), 3)
5776
6310
  ]),
5777
- vue.createElementVNode("div", _hoisted_7$3, [
6311
+ vue.createElementVNode("div", _hoisted_7$5, [
5778
6312
  _cache[3] || (_cache[3] = vue.createElementVNode("div", null, [
5779
6313
  vue.createElementVNode("strong", null, [
5780
6314
  vue.createElementVNode("i", {
@@ -5790,7 +6324,7 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
5790
6324
  })
5791
6325
  }, vue.toDisplayString(_ctx.entity.nodes), 3)
5792
6326
  ]),
5793
- vue.createElementVNode("div", _hoisted_8$3, [
6327
+ vue.createElementVNode("div", _hoisted_8$5, [
5794
6328
  _cache[4] || (_cache[4] = vue.createElementVNode("div", null, [
5795
6329
  vue.createElementVNode("strong", null, [
5796
6330
  vue.createElementVNode("i", {
@@ -5816,8 +6350,8 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
5816
6350
  vue.renderSlot(_ctx.$slots, "footer", {
5817
6351
  data: _ctx.entity
5818
6352
  }, ()=>[
5819
- vue.createElementVNode("div", _hoisted_9$2, [
5820
- vue.createElementVNode("div", _hoisted_10$2, [
6353
+ vue.createElementVNode("div", _hoisted_9$3, [
6354
+ vue.createElementVNode("div", _hoisted_10$3, [
5821
6355
  vue.createElementVNode("small", null, [
5822
6356
  _cache[5] || (_cache[5] = vue.createElementVNode("span", {
5823
6357
  class: "text-muted"
@@ -5845,10 +6379,10 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
5845
6379
  ])
5846
6380
  ]);
5847
6381
  }
5848
- var FProjectItemCard = /* @__PURE__ */ _export_sfc(_sfc_main$e, [
6382
+ var FProjectItemCard = /* @__PURE__ */ _export_sfc(_sfc_main$g, [
5849
6383
  [
5850
6384
  "render",
5851
- _sfc_render$e
6385
+ _sfc_render$g
5852
6386
  ]
5853
6387
  ]);
5854
6388
 
@@ -6288,7 +6822,7 @@ var RegistryProjectDetails = vue.defineComponent({
6288
6822
  }, [
6289
6823
  vue.h('label', {
6290
6824
  class: 'pe-1'
6291
- }, 'Namespace'),
6825
+ }, 'Project'),
6292
6826
  vue.h('input', {
6293
6827
  class: 'form-control',
6294
6828
  type: 'text',
@@ -6302,7 +6836,7 @@ var RegistryProjectDetails = vue.defineComponent({
6302
6836
  }, [
6303
6837
  vue.h('label', {
6304
6838
  class: 'pe-1'
6305
- }, 'ID'),
6839
+ }, 'Account ID'),
6306
6840
  vue.h('input', {
6307
6841
  class: 'form-control',
6308
6842
  type: 'text',
@@ -6313,7 +6847,7 @@ var RegistryProjectDetails = vue.defineComponent({
6313
6847
  ]),
6314
6848
  formControls.buildFormGroup({
6315
6849
  label: true,
6316
- labelContent: 'Secret',
6850
+ labelContent: 'Account Secret',
6317
6851
  validationMessages: translationsValidation.secret.value,
6318
6852
  validationSeverity: vuelidate.getSeverity(vuelidate$1.value.secret),
6319
6853
  content: formControls.buildFormInput({
@@ -6717,9 +7251,7 @@ var FNodeForm = vue.defineComponent({
6717
7251
  realm_id: {
6718
7252
  required: validators.required
6719
7253
  },
6720
- registry_id: {
6721
- required: validators.required
6722
- },
7254
+ registry_id: {},
6723
7255
  external_name: {
6724
7256
  alphaNumHyphenUnderscore: validators.helpers.regex(alphaNumHyphenUnderscoreRegex),
6725
7257
  minLength: validators.minLength(3),
@@ -6907,7 +7439,536 @@ var FNodeForm = vue.defineComponent({
6907
7439
  }
6908
7440
  });
6909
7441
 
6910
- var FNodeRegistryProject = vue.defineComponent({
7442
+ function tryOnScopeDispose(fn) {
7443
+ if (vue.getCurrentScope()) {
7444
+ vue.onScopeDispose(fn);
7445
+ return true;
7446
+ }
7447
+ return false;
7448
+ }
7449
+ function toValue(r) {
7450
+ return typeof r === "function" ? r() : vue.unref(r);
7451
+ }
7452
+ const isClient = typeof window !== "undefined" && typeof document !== "undefined";
7453
+ typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope;
7454
+ const toString = Object.prototype.toString;
7455
+ const isObject = (val)=>toString.call(val) === "[object Object]";
7456
+ const noop = ()=>{};
7457
+ function createSingletonPromise(fn) {
7458
+ let _promise;
7459
+ function wrapper() {
7460
+ if (!_promise) _promise = fn();
7461
+ return _promise;
7462
+ }
7463
+ wrapper.reset = async ()=>{
7464
+ const _prev = _promise;
7465
+ _promise = undefined;
7466
+ if (_prev) await _prev;
7467
+ };
7468
+ return wrapper;
7469
+ }
7470
+ function useTimeoutFn(cb, interval, options = {}) {
7471
+ const { immediate = true } = options;
7472
+ const isPending = vue.ref(false);
7473
+ let timer = null;
7474
+ function clear() {
7475
+ if (timer) {
7476
+ clearTimeout(timer);
7477
+ timer = null;
7478
+ }
7479
+ }
7480
+ function stop() {
7481
+ isPending.value = false;
7482
+ clear();
7483
+ }
7484
+ function start(...args) {
7485
+ clear();
7486
+ isPending.value = true;
7487
+ timer = setTimeout(()=>{
7488
+ isPending.value = false;
7489
+ timer = null;
7490
+ cb(...args);
7491
+ }, toValue(interval));
7492
+ }
7493
+ if (immediate) {
7494
+ isPending.value = true;
7495
+ if (isClient) start();
7496
+ }
7497
+ tryOnScopeDispose(stop);
7498
+ return {
7499
+ isPending: vue.readonly(isPending),
7500
+ start,
7501
+ stop
7502
+ };
7503
+ }
7504
+
7505
+ const defaultWindow = isClient ? window : undefined;
7506
+ const defaultNavigator = isClient ? window.navigator : undefined;
7507
+ function unrefElement(elRef) {
7508
+ var _a;
7509
+ const plain = toValue(elRef);
7510
+ return (_a = plain == null ? undefined : plain.$el) != null ? _a : plain;
7511
+ }
7512
+ function useEventListener(...args) {
7513
+ let target;
7514
+ let events;
7515
+ let listeners;
7516
+ let options;
7517
+ if (typeof args[0] === "string" || Array.isArray(args[0])) {
7518
+ [events, listeners, options] = args;
7519
+ target = defaultWindow;
7520
+ } else {
7521
+ [target, events, listeners, options] = args;
7522
+ }
7523
+ if (!target) return noop;
7524
+ if (!Array.isArray(events)) events = [
7525
+ events
7526
+ ];
7527
+ if (!Array.isArray(listeners)) listeners = [
7528
+ listeners
7529
+ ];
7530
+ const cleanups = [];
7531
+ const cleanup = ()=>{
7532
+ cleanups.forEach((fn)=>fn());
7533
+ cleanups.length = 0;
7534
+ };
7535
+ const register = (el, event, listener, options2)=>{
7536
+ el.addEventListener(event, listener, options2);
7537
+ return ()=>el.removeEventListener(event, listener, options2);
7538
+ };
7539
+ const stopWatch = vue.watch(()=>[
7540
+ unrefElement(target),
7541
+ toValue(options)
7542
+ ], ([el, options2])=>{
7543
+ cleanup();
7544
+ if (!el) return;
7545
+ const optionsClone = isObject(options2) ? {
7546
+ ...options2
7547
+ } : options2;
7548
+ cleanups.push(...events.flatMap((event)=>{
7549
+ return listeners.map((listener)=>register(el, event, listener, optionsClone));
7550
+ }));
7551
+ }, {
7552
+ immediate: true,
7553
+ flush: "post"
7554
+ });
7555
+ const stop = ()=>{
7556
+ stopWatch();
7557
+ cleanup();
7558
+ };
7559
+ tryOnScopeDispose(stop);
7560
+ return stop;
7561
+ }
7562
+ function useMounted() {
7563
+ const isMounted = vue.ref(false);
7564
+ const instance = vue.getCurrentInstance();
7565
+ if (instance) {
7566
+ vue.onMounted(()=>{
7567
+ isMounted.value = true;
7568
+ }, instance);
7569
+ }
7570
+ return isMounted;
7571
+ }
7572
+ function useSupported(callback) {
7573
+ const isMounted = useMounted();
7574
+ return vue.computed(()=>{
7575
+ isMounted.value;
7576
+ return Boolean(callback());
7577
+ });
7578
+ }
7579
+ function usePermission(permissionDesc, options = {}) {
7580
+ const { controls = false, navigator = defaultNavigator } = options;
7581
+ const isSupported = useSupported(()=>navigator && "permissions" in navigator);
7582
+ const permissionStatus = vue.shallowRef();
7583
+ const desc = typeof permissionDesc === "string" ? {
7584
+ name: permissionDesc
7585
+ } : permissionDesc;
7586
+ const state = vue.shallowRef();
7587
+ const update = ()=>{
7588
+ var _a, _b;
7589
+ state.value = (_b = (_a = permissionStatus.value) == null ? undefined : _a.state) != null ? _b : "prompt";
7590
+ };
7591
+ useEventListener(permissionStatus, "change", update);
7592
+ const query = createSingletonPromise(async ()=>{
7593
+ if (!isSupported.value) return;
7594
+ if (!permissionStatus.value) {
7595
+ try {
7596
+ permissionStatus.value = await navigator.permissions.query(desc);
7597
+ } catch (e) {
7598
+ permissionStatus.value = undefined;
7599
+ } finally{
7600
+ update();
7601
+ }
7602
+ }
7603
+ if (controls) return vue.toRaw(permissionStatus.value);
7604
+ });
7605
+ query();
7606
+ if (controls) {
7607
+ return {
7608
+ state,
7609
+ isSupported,
7610
+ query
7611
+ };
7612
+ } else {
7613
+ return state;
7614
+ }
7615
+ }
7616
+ function useClipboard(options = {}) {
7617
+ const { navigator = defaultNavigator, read = false, source, copiedDuring = 1500, legacy = false } = options;
7618
+ const isClipboardApiSupported = useSupported(()=>navigator && "clipboard" in navigator);
7619
+ const permissionRead = usePermission("clipboard-read");
7620
+ const permissionWrite = usePermission("clipboard-write");
7621
+ const isSupported = vue.computed(()=>isClipboardApiSupported.value || legacy);
7622
+ const text = vue.ref("");
7623
+ const copied = vue.ref(false);
7624
+ const timeout = useTimeoutFn(()=>copied.value = false, copiedDuring);
7625
+ function updateText() {
7626
+ if (isClipboardApiSupported.value && isAllowed(permissionRead.value)) {
7627
+ navigator.clipboard.readText().then((value)=>{
7628
+ text.value = value;
7629
+ });
7630
+ } else {
7631
+ text.value = legacyRead();
7632
+ }
7633
+ }
7634
+ if (isSupported.value && read) useEventListener([
7635
+ "copy",
7636
+ "cut"
7637
+ ], updateText);
7638
+ async function copy(value = toValue(source)) {
7639
+ if (isSupported.value && value != null) {
7640
+ if (isClipboardApiSupported.value && isAllowed(permissionWrite.value)) await navigator.clipboard.writeText(value);
7641
+ else legacyCopy(value);
7642
+ text.value = value;
7643
+ copied.value = true;
7644
+ timeout.start();
7645
+ }
7646
+ }
7647
+ function legacyCopy(value) {
7648
+ const ta = document.createElement("textarea");
7649
+ ta.value = value != null ? value : "";
7650
+ ta.style.position = "absolute";
7651
+ ta.style.opacity = "0";
7652
+ document.body.appendChild(ta);
7653
+ ta.select();
7654
+ document.execCommand("copy");
7655
+ ta.remove();
7656
+ }
7657
+ function legacyRead() {
7658
+ var _a, _b, _c;
7659
+ return (_c = (_b = (_a = document == null ? undefined : document.getSelection) == null ? undefined : _a.call(document)) == null ? undefined : _b.toString()) != null ? _c : "";
7660
+ }
7661
+ function isAllowed(status) {
7662
+ return status === "granted" || status === "prompt";
7663
+ }
7664
+ return {
7665
+ isSupported,
7666
+ text,
7667
+ copied,
7668
+ copy
7669
+ };
7670
+ }
7671
+
7672
+ var _sfc_main$f = vue.defineComponent({
7673
+ props: {
7674
+ entity: {
7675
+ type: Object,
7676
+ required: true
7677
+ }
7678
+ },
7679
+ emits: [
7680
+ 'updated',
7681
+ 'failed',
7682
+ 'keyCopied',
7683
+ 'keyPairGenerated'
7684
+ ],
7685
+ setup (props, { emit }) {
7686
+ const httpClient = injectCoreHTTPClient();
7687
+ const keyTypeOptions = [
7688
+ {
7689
+ id: 'rsa',
7690
+ value: 'RSA'
7691
+ },
7692
+ {
7693
+ id: 'ecdh',
7694
+ value: 'ECDH'
7695
+ }
7696
+ ];
7697
+ const keyType = vue.ref('rsa');
7698
+ const privateKey = vue.ref(null);
7699
+ const publicKey = vue.ref(null);
7700
+ const clipboard = useClipboard();
7701
+ const init = ()=>{
7702
+ if (props.entity.public_key) {
7703
+ publicKey.value = isHex(props.entity.public_key) ? hexToUTF8(props.entity.public_key) : props.entity.public_key;
7704
+ }
7705
+ };
7706
+ init();
7707
+ const copy = (type)=>{
7708
+ if (type === 'privateKey') {
7709
+ if (!privateKey.value) {
7710
+ return;
7711
+ }
7712
+ clipboard.copy(privateKey.value);
7713
+ emit('keyCopied');
7714
+ return;
7715
+ }
7716
+ if (!publicKey.value) {
7717
+ return;
7718
+ }
7719
+ clipboard.copy(publicKey.value);
7720
+ emit('keyCopied');
7721
+ };
7722
+ const busy = vue.ref(false);
7723
+ const save = async ()=>{
7724
+ if (busy.value) return;
7725
+ busy.value = true;
7726
+ try {
7727
+ const response = await httpClient.node.update(props.entity.id, {
7728
+ public_key: publicKey.value
7729
+ });
7730
+ emit('updated', response);
7731
+ } catch (e) {
7732
+ emit('failed', e);
7733
+ } finally{
7734
+ busy.value = false;
7735
+ }
7736
+ };
7737
+ const generate = async ()=>{
7738
+ if (busy.value) return;
7739
+ busy.value = true;
7740
+ try {
7741
+ let algorithmOptions;
7742
+ if (keyType.value === 'ecdh') {
7743
+ algorithmOptions = {
7744
+ name: 'ECDH',
7745
+ namedCurve: 'P-384'
7746
+ };
7747
+ } else {
7748
+ algorithmOptions = {
7749
+ name: 'RSA-OAEP',
7750
+ modulusLength: 2048,
7751
+ hash: 'SHA-256',
7752
+ publicExponent: new Uint8Array([
7753
+ 1,
7754
+ 0,
7755
+ 1
7756
+ ])
7757
+ };
7758
+ }
7759
+ console.log(algorithmOptions);
7760
+ const algorithm = new CryptoAsymmetricAlgorithm(algorithmOptions);
7761
+ const keyPair = await algorithm.generateKeyPair();
7762
+ publicKey.value = await exportAsymmetricPublicKey(keyPair.publicKey);
7763
+ privateKey.value = await exportAsymmetricPrivateKey(keyPair.privateKey);
7764
+ emit('keyPairGenerated');
7765
+ } finally{
7766
+ busy.value = false;
7767
+ }
7768
+ };
7769
+ return {
7770
+ keyType,
7771
+ keyTypeOptions,
7772
+ busy,
7773
+ copy,
7774
+ generate,
7775
+ save,
7776
+ publicKey,
7777
+ privateKey
7778
+ };
7779
+ }
7780
+ });
7781
+
7782
+ const _hoisted_1$d = {
7783
+ class: "d-flex flex-column gap-1"
7784
+ };
7785
+ const _hoisted_2$c = {
7786
+ class: "row"
7787
+ };
7788
+ const _hoisted_3$a = {
7789
+ class: "col-4"
7790
+ };
7791
+ const _hoisted_4$a = {
7792
+ class: "d-flex flex-row"
7793
+ };
7794
+ const _hoisted_5$6 = {
7795
+ class: "ms-auto"
7796
+ };
7797
+ const _hoisted_6$5 = {
7798
+ class: "col-8"
7799
+ };
7800
+ const _hoisted_7$4 = {
7801
+ class: "d-flex flex-row"
7802
+ };
7803
+ const _hoisted_8$4 = {
7804
+ class: "ms-auto"
7805
+ };
7806
+ const _hoisted_9$2 = {
7807
+ key: 0,
7808
+ class: "alert alert-sm alert-warning"
7809
+ };
7810
+ const _hoisted_10$2 = {
7811
+ class: "d-flex flex-row gap-1"
7812
+ };
7813
+ const _hoisted_11$1 = [
7814
+ "disabled"
7815
+ ];
7816
+ const _hoisted_12 = [
7817
+ "disabled"
7818
+ ];
7819
+ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
7820
+ const _component_VCFormTextarea = vue.resolveComponent("VCFormTextarea");
7821
+ const _component_VCFormGroup = vue.resolveComponent("VCFormGroup");
7822
+ const _component_VCFormSelect = vue.resolveComponent("VCFormSelect");
7823
+ return vue.openBlock(), vue.createElementBlock("div", null, [
7824
+ _cache[14] || (_cache[14] = vue.createElementVNode("h6", null, "KeyPair", -1)),
7825
+ _cache[15] || (_cache[15] = vue.createElementVNode("p", null, " The public key of the key pair is used to encrypt data that is transmitted between different nodes through the storage service. ", -1)),
7826
+ vue.createElementVNode("div", _hoisted_1$d, [
7827
+ vue.createElementVNode("div", _hoisted_2$c, [
7828
+ vue.createElementVNode("div", _hoisted_3$a, [
7829
+ vue.createVNode(_component_VCFormGroup, {
7830
+ "label-class": "w-100 mb-1"
7831
+ }, {
7832
+ label: vue.withCtx(()=>[
7833
+ vue.createElementVNode("div", _hoisted_4$a, [
7834
+ _cache[8] || (_cache[8] = vue.createElementVNode("div", null, " PublicKey ", -1)),
7835
+ vue.createElementVNode("div", _hoisted_5$6, [
7836
+ vue.withDirectives(vue.createElementVNode("button", {
7837
+ type: "button",
7838
+ class: "btn btn-xs btn-dark",
7839
+ onClick: _cache[0] || (_cache[0] = vue.withModifiers(($event)=>_ctx.copy("publicKey"), [
7840
+ "prevent"
7841
+ ]))
7842
+ }, _cache[7] || (_cache[7] = [
7843
+ vue.createElementVNode("i", {
7844
+ class: "fa fa-copy"
7845
+ }, null, -1),
7846
+ vue.createTextVNode(" Copy ")
7847
+ ]), 512), [
7848
+ [
7849
+ vue.vShow,
7850
+ !!_ctx.publicKey
7851
+ ]
7852
+ ])
7853
+ ])
7854
+ ])
7855
+ ]),
7856
+ default: vue.withCtx(()=>[
7857
+ vue.createVNode(_component_VCFormTextarea, {
7858
+ modelValue: _ctx.publicKey,
7859
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event)=>_ctx.publicKey = $event),
7860
+ rows: "8"
7861
+ }, null, 8, [
7862
+ "modelValue"
7863
+ ])
7864
+ ]),
7865
+ _: 1
7866
+ })
7867
+ ]),
7868
+ vue.createElementVNode("div", _hoisted_6$5, [
7869
+ vue.createVNode(_component_VCFormGroup, {
7870
+ "label-class": "w-100 mb-1"
7871
+ }, {
7872
+ label: vue.withCtx(()=>[
7873
+ vue.createElementVNode("div", _hoisted_7$4, [
7874
+ _cache[10] || (_cache[10] = vue.createElementVNode("div", null, " PrivateKey ", -1)),
7875
+ vue.createElementVNode("div", _hoisted_8$4, [
7876
+ vue.withDirectives(vue.createElementVNode("button", {
7877
+ type: "button",
7878
+ class: "btn btn-xs btn-dark",
7879
+ onClick: _cache[2] || (_cache[2] = vue.withModifiers(($event)=>_ctx.copy("privateKey"), [
7880
+ "prevent"
7881
+ ]))
7882
+ }, _cache[9] || (_cache[9] = [
7883
+ vue.createElementVNode("i", {
7884
+ class: "fa fa-copy"
7885
+ }, null, -1),
7886
+ vue.createTextVNode(" Copy ")
7887
+ ]), 512), [
7888
+ [
7889
+ vue.vShow,
7890
+ !!_ctx.privateKey
7891
+ ]
7892
+ ])
7893
+ ])
7894
+ ])
7895
+ ]),
7896
+ default: vue.withCtx(()=>[
7897
+ vue.createVNode(_component_VCFormTextarea, {
7898
+ modelValue: _ctx.privateKey,
7899
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event)=>_ctx.privateKey = $event),
7900
+ disabled: true,
7901
+ rows: "8"
7902
+ }, null, 8, [
7903
+ "modelValue"
7904
+ ])
7905
+ ]),
7906
+ _: 1
7907
+ }),
7908
+ _ctx.privateKey ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_9$2, " Please copy the key to a safe location, as it is not stored remotely. ")) : vue.createCommentVNode("", true)
7909
+ ])
7910
+ ]),
7911
+ vue.createElementVNode("div", null, [
7912
+ vue.createVNode(_component_VCFormGroup, null, {
7913
+ label: vue.withCtx(()=>_cache[11] || (_cache[11] = [
7914
+ vue.createTextVNode(" KeyType ")
7915
+ ])),
7916
+ default: vue.withCtx(()=>[
7917
+ vue.createVNode(_component_VCFormSelect, {
7918
+ modelValue: _ctx.keyType,
7919
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event)=>_ctx.keyType = $event),
7920
+ options: _ctx.keyTypeOptions
7921
+ }, null, 8, [
7922
+ "modelValue",
7923
+ "options"
7924
+ ])
7925
+ ]),
7926
+ _: 1
7927
+ })
7928
+ ]),
7929
+ vue.createElementVNode("div", _hoisted_10$2, [
7930
+ vue.createElementVNode("div", null, [
7931
+ vue.createElementVNode("button", {
7932
+ disabled: _ctx.busy,
7933
+ type: "button",
7934
+ class: "btn btn-primary btn-xs",
7935
+ onClick: _cache[5] || (_cache[5] = vue.withModifiers((...args)=>_ctx.save && _ctx.save(...args), [
7936
+ "prevent"
7937
+ ]))
7938
+ }, _cache[12] || (_cache[12] = [
7939
+ vue.createElementVNode("i", {
7940
+ class: "fa fa-save"
7941
+ }, null, -1),
7942
+ vue.createTextVNode(" Save ")
7943
+ ]), 8, _hoisted_11$1)
7944
+ ]),
7945
+ vue.createElementVNode("div", null, [
7946
+ vue.createElementVNode("button", {
7947
+ disabled: _ctx.busy,
7948
+ type: "button",
7949
+ class: "btn btn-dark btn-xs",
7950
+ onClick: _cache[6] || (_cache[6] = vue.withModifiers((...args)=>_ctx.generate && _ctx.generate(...args), [
7951
+ "prevent"
7952
+ ]))
7953
+ }, _cache[13] || (_cache[13] = [
7954
+ vue.createElementVNode("i", {
7955
+ class: "fas fa-sync-alt"
7956
+ }, null, -1),
7957
+ vue.createTextVNode(" Generate ")
7958
+ ]), 8, _hoisted_12)
7959
+ ])
7960
+ ])
7961
+ ])
7962
+ ]);
7963
+ }
7964
+ var FNodeCrypto = /* @__PURE__ */ _export_sfc(_sfc_main$f, [
7965
+ [
7966
+ "render",
7967
+ _sfc_render$f
7968
+ ]
7969
+ ]);
7970
+
7971
+ var FNodeRegistryProject = vue.defineComponent({
6911
7972
  props: {
6912
7973
  entity: {
6913
7974
  type: Object,
@@ -7536,7 +8597,7 @@ var FAnalysisNodeRunStatus = vue.defineComponent({
7536
8597
  }
7537
8598
  });
7538
8599
 
7539
- var _sfc_main$d = vue.defineComponent({
8600
+ var _sfc_main$e = vue.defineComponent({
7540
8601
  components: {
7541
8602
  FAnalysisNodes,
7542
8603
  FAnalysisNodeRunStatus
@@ -7580,25 +8641,25 @@ var _sfc_main$d = vue.defineComponent({
7580
8641
  }
7581
8642
  });
7582
8643
 
7583
- const _hoisted_1$b = {
8644
+ const _hoisted_1$c = {
7584
8645
  key: 0,
7585
8646
  class: "train-stations-progress"
7586
8647
  };
7587
- const _hoisted_2$9 = {
8648
+ const _hoisted_2$b = {
7588
8649
  class: "icon"
7589
8650
  };
7590
- const _hoisted_3$7 = {
8651
+ const _hoisted_3$9 = {
7591
8652
  key: 1,
7592
8653
  class: "progress bg-white"
7593
8654
  };
7594
- const _hoisted_4$7 = [
8655
+ const _hoisted_4$9 = [
7595
8656
  "aria-valuenow"
7596
8657
  ];
7597
- function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
8658
+ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
7598
8659
  const _component_FAnalysisNodeRunStatus = vue.resolveComponent("FAnalysisNodeRunStatus");
7599
8660
  const _component_FAnalysisNodes = vue.resolveComponent("FAnalysisNodes");
7600
8661
  return vue.openBlock(), vue.createElementBlock("div", null, [
7601
- _ctx.elementType === "steps" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, [
8662
+ _ctx.elementType === "steps" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$c, [
7602
8663
  vue.createVNode(_component_FAnalysisNodes, {
7603
8664
  header: false,
7604
8665
  query: _ctx.query,
@@ -7625,7 +8686,7 @@ function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
7625
8686
  }
7626
8687
  ])
7627
8688
  }, [
7628
- vue.createElementVNode("span", _hoisted_2$9, vue.toDisplayString(item.node.name), 1)
8689
+ vue.createElementVNode("span", _hoisted_2$b, vue.toDisplayString(item.node.name), 1)
7629
8690
  ], 2),
7630
8691
  _cache[0] || (_cache[0] = vue.createElementVNode("div", {
7631
8692
  class: "mt-1"
@@ -7648,7 +8709,7 @@ function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
7648
8709
  "realm-id",
7649
8710
  "source-id"
7650
8711
  ])
7651
- ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$7, [
8712
+ ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$9, [
7652
8713
  vue.createElementVNode("div", {
7653
8714
  class: vue.normalizeClass([
7654
8715
  "progress-bar",
@@ -7663,14 +8724,14 @@ function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
7663
8724
  "aria-valuenow": _ctx.progressPercentage,
7664
8725
  "aria-valuemin": "0",
7665
8726
  "aria-valuemax": "100"
7666
- }, null, 14, _hoisted_4$7)
8727
+ }, null, 14, _hoisted_4$9)
7667
8728
  ]))
7668
8729
  ]);
7669
8730
  }
7670
- var FAnalysisNodesProgress = /* @__PURE__ */ _export_sfc(_sfc_main$d, [
8731
+ var FAnalysisNodesProgress = /* @__PURE__ */ _export_sfc(_sfc_main$e, [
7671
8732
  [
7672
8733
  "render",
7673
- _sfc_render$d
8734
+ _sfc_render$e
7674
8735
  ]
7675
8736
  ]);
7676
8737
 
@@ -7859,7 +8920,7 @@ var TrainName = vue.defineComponent({
7859
8920
  }
7860
8921
  });
7861
8922
 
7862
- var _sfc_main$c = vue.defineComponent({
8923
+ var _sfc_main$d = vue.defineComponent({
7863
8924
  components: {
7864
8925
  FAnalysisBucket,
7865
8926
  FAnalysisBucketDownload,
@@ -7908,28 +8969,28 @@ var _sfc_main$c = vue.defineComponent({
7908
8969
  }
7909
8970
  });
7910
8971
 
7911
- const _hoisted_1$a = {
8972
+ const _hoisted_1$b = {
7912
8973
  class: "d-flex flex-column gap-1 w-100"
7913
8974
  };
7914
- const _hoisted_2$8 = {
8975
+ const _hoisted_2$a = {
7915
8976
  class: "w-100"
7916
8977
  };
7917
- const _hoisted_3$6 = {
8978
+ const _hoisted_3$8 = {
7918
8979
  class: "d-flex flex-row align-items-center"
7919
8980
  };
7920
- const _hoisted_4$6 = {
8981
+ const _hoisted_4$8 = {
7921
8982
  class: "ms-auto d-flex flex-row gap-1"
7922
8983
  };
7923
- const _hoisted_5$4 = {
8984
+ const _hoisted_5$5 = {
7924
8985
  class: "row"
7925
8986
  };
7926
- const _hoisted_6$3 = {
8987
+ const _hoisted_6$4 = {
7927
8988
  class: "col-12 col-md-4 d-flex align-items-center flex-column"
7928
8989
  };
7929
- const _hoisted_7$2 = {
8990
+ const _hoisted_7$3 = {
7930
8991
  class: "col-12 col-md-4 d-flex align-items-center flex-column"
7931
8992
  };
7932
- const _hoisted_8$2 = {
8993
+ const _hoisted_8$3 = {
7933
8994
  class: "col-12 col-md-4 d-flex align-items-center flex-column"
7934
8995
  };
7935
8996
  const _hoisted_9$1 = {
@@ -7938,10 +8999,10 @@ const _hoisted_9$1 = {
7938
8999
  const _hoisted_10$1 = {
7939
9000
  class: ""
7940
9001
  };
7941
- const _hoisted_11$1 = {
9002
+ const _hoisted_11 = {
7942
9003
  class: "ms-auto"
7943
9004
  };
7944
- function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
9005
+ function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
7945
9006
  const _component_FAnalysisName = vue.resolveComponent("FAnalysisName");
7946
9007
  const _component_VCLink = vue.resolveComponent("VCLink");
7947
9008
  const _component_FAnalysisBucketDownload = vue.resolveComponent("FAnalysisBucketDownload");
@@ -7949,9 +9010,9 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
7949
9010
  const _component_FAnalysisNodeApprovalCommand = vue.resolveComponent("FAnalysisNodeApprovalCommand");
7950
9011
  const _component_FAnalysisNodeApprovalStatus = vue.resolveComponent("FAnalysisNodeApprovalStatus");
7951
9012
  const _component_VCTimeago = vue.resolveComponent("VCTimeago");
7952
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [
7953
- vue.createElementVNode("div", _hoisted_2$8, [
7954
- vue.createElementVNode("div", _hoisted_3$6, [
9013
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, [
9014
+ vue.createElementVNode("div", _hoisted_2$a, [
9015
+ vue.createElementVNode("div", _hoisted_3$8, [
7955
9016
  vue.createElementVNode("div", null, [
7956
9017
  vue.renderSlot(_ctx.$slots, "title", {
7957
9018
  data: _ctx.entity
@@ -7968,7 +9029,7 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
7968
9029
  ])
7969
9030
  ])
7970
9031
  ]),
7971
- vue.createElementVNode("div", _hoisted_4$6, [
9032
+ vue.createElementVNode("div", _hoisted_4$8, [
7972
9033
  vue.renderSlot(_ctx.$slots, "itemActions", {
7973
9034
  data: _ctx.entity
7974
9035
  }, ()=>[
@@ -8036,8 +9097,8 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8036
9097
  vue.renderSlot(_ctx.$slots, "body", {
8037
9098
  data: _ctx.entity
8038
9099
  }, ()=>[
8039
- vue.createElementVNode("div", _hoisted_5$4, [
8040
- vue.createElementVNode("div", _hoisted_6$3, [
9100
+ vue.createElementVNode("div", _hoisted_5$5, [
9101
+ vue.createElementVNode("div", _hoisted_6$4, [
8041
9102
  _cache[2] || (_cache[2] = vue.createElementVNode("div", null, [
8042
9103
  vue.createElementVNode("strong", null, [
8043
9104
  vue.createElementVNode("i", {
@@ -8048,7 +9109,7 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8048
9109
  ], -1)),
8049
9110
  vue.createElementVNode("div", null, vue.toDisplayString(_ctx.entity.node.name), 1)
8050
9111
  ]),
8051
- vue.createElementVNode("div", _hoisted_7$2, [
9112
+ vue.createElementVNode("div", _hoisted_7$3, [
8052
9113
  _cache[3] || (_cache[3] = vue.createElementVNode("div", null, [
8053
9114
  vue.createElementVNode("strong", null, [
8054
9115
  vue.createElementVNode("i", {
@@ -8072,7 +9133,7 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8072
9133
  ])
8073
9134
  ])
8074
9135
  ]),
8075
- vue.createElementVNode("div", _hoisted_8$2, [
9136
+ vue.createElementVNode("div", _hoisted_8$3, [
8076
9137
  _cache[4] || (_cache[4] = vue.createElementVNode("div", null, [
8077
9138
  vue.createElementVNode("strong", null, [
8078
9139
  vue.createElementVNode("i", {
@@ -8107,7 +9168,7 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8107
9168
  ])
8108
9169
  ])
8109
9170
  ]),
8110
- vue.createElementVNode("div", _hoisted_11$1, [
9171
+ vue.createElementVNode("div", _hoisted_11, [
8111
9172
  vue.createElementVNode("small", null, [
8112
9173
  _cache[6] || (_cache[6] = vue.createElementVNode("span", {
8113
9174
  class: "text-muted"
@@ -8123,14 +9184,14 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8123
9184
  ])
8124
9185
  ]);
8125
9186
  }
8126
- var FAnalysisNodeInCard = /* @__PURE__ */ _export_sfc(_sfc_main$c, [
9187
+ var FAnalysisNodeInCard = /* @__PURE__ */ _export_sfc(_sfc_main$d, [
8127
9188
  [
8128
9189
  "render",
8129
- _sfc_render$c
9190
+ _sfc_render$d
8130
9191
  ]
8131
9192
  ]);
8132
9193
 
8133
- var _sfc_main$b = vue.defineComponent({
9194
+ var _sfc_main$c = vue.defineComponent({
8134
9195
  components: {
8135
9196
  ListPagination: FPagination,
8136
9197
  ListSearch: FSearch,
@@ -8193,22 +9254,22 @@ var _sfc_main$b = vue.defineComponent({
8193
9254
  }
8194
9255
  });
8195
9256
 
8196
- const _hoisted_1$9 = {
9257
+ const _hoisted_1$a = {
8197
9258
  class: "mb-2"
8198
9259
  };
8199
- const _hoisted_2$7 = {
9260
+ const _hoisted_2$9 = {
8200
9261
  class: "mb-2"
8201
9262
  };
8202
- const _hoisted_3$5 = {
9263
+ const _hoisted_3$7 = {
8203
9264
  class: "row"
8204
9265
  };
8205
- const _hoisted_4$5 = {
9266
+ const _hoisted_4$7 = {
8206
9267
  class: "col-12 col-xl-6"
8207
9268
  };
8208
- const _hoisted_5$3 = {
9269
+ const _hoisted_5$4 = {
8209
9270
  class: "col-12 col-xl-6"
8210
9271
  };
8211
- function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
9272
+ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
8212
9273
  const _component_FMasterImagePicker = vue.resolveComponent("FMasterImagePicker");
8213
9274
  const _component_ListSearch = vue.resolveComponent("ListSearch");
8214
9275
  const _component_ListPagination = vue.resolveComponent("ListPagination");
@@ -8216,14 +9277,14 @@ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
8216
9277
  const _component_FProjectNodes = vue.resolveComponent("FProjectNodes");
8217
9278
  const _component_FAnalysisNodes = vue.resolveComponent("FAnalysisNodes");
8218
9279
  return vue.openBlock(), vue.createElementBlock("div", null, [
8219
- vue.createElementVNode("div", _hoisted_1$9, [
9280
+ vue.createElementVNode("div", _hoisted_1$a, [
8220
9281
  _cache[0] || (_cache[0] = vue.createElementVNode("h6", null, [
8221
9282
  vue.createElementVNode("i", {
8222
9283
  class: "fa fa-compact-disc"
8223
9284
  }),
8224
9285
  vue.createTextVNode(" MasterImage")
8225
9286
  ], -1)),
8226
- vue.createElementVNode("div", _hoisted_2$7, [
9287
+ vue.createElementVNode("div", _hoisted_2$9, [
8227
9288
  vue.createVNode(_component_FMasterImagePicker, {
8228
9289
  "entity-id": _ctx.entity.master_image_id,
8229
9290
  onSelected: _ctx.handleMasterImageSelected
@@ -8241,8 +9302,8 @@ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
8241
9302
  }),
8242
9303
  vue.createTextVNode(" Nodes")
8243
9304
  ], -1)),
8244
- vue.createElementVNode("div", _hoisted_3$5, [
8245
- vue.createElementVNode("div", _hoisted_4$5, [
9305
+ vue.createElementVNode("div", _hoisted_3$7, [
9306
+ vue.createElementVNode("div", _hoisted_4$7, [
8246
9307
  vue.createVNode(_component_FProjectNodes, {
8247
9308
  ref: "FProjectNodes",
8248
9309
  "realm-id": _ctx.entity.realm_id,
@@ -8301,7 +9362,7 @@ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
8301
9362
  "query"
8302
9363
  ])
8303
9364
  ]),
8304
- vue.createElementVNode("div", _hoisted_5$3, [
9365
+ vue.createElementVNode("div", _hoisted_5$4, [
8305
9366
  vue.createVNode(_component_FAnalysisNodes, {
8306
9367
  ref: "FAnalysisNodes",
8307
9368
  "realm-id": _ctx.entity.realm_id,
@@ -8330,14 +9391,14 @@ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
8330
9391
  ])
8331
9392
  ]);
8332
9393
  }
8333
- var FAnalysisWizardStepBase = /* @__PURE__ */ _export_sfc(_sfc_main$b, [
9394
+ var FAnalysisWizardStepBase = /* @__PURE__ */ _export_sfc(_sfc_main$c, [
8334
9395
  [
8335
9396
  "render",
8336
- _sfc_render$b
9397
+ _sfc_render$c
8337
9398
  ]
8338
9399
  ]);
8339
9400
 
8340
- var _sfc_main$a = vue.defineComponent({
9401
+ var _sfc_main$b = vue.defineComponent({
8341
9402
  props: {
8342
9403
  entity: {
8343
9404
  type: Object,
@@ -8389,19 +9450,19 @@ var _sfc_main$a = vue.defineComponent({
8389
9450
  }
8390
9451
  });
8391
9452
 
8392
- const _hoisted_1$8 = {
9453
+ const _hoisted_1$9 = {
8393
9454
  class: "title"
8394
9455
  };
8395
- const _hoisted_2$6 = {
9456
+ const _hoisted_2$8 = {
8396
9457
  class: "ms-auto d-flex flex-row me-1"
8397
9458
  };
8398
- const _hoisted_3$4 = {
9459
+ const _hoisted_3$6 = {
8399
9460
  class: "ms-1"
8400
9461
  };
8401
- const _hoisted_4$4 = [
9462
+ const _hoisted_4$6 = [
8402
9463
  "disabled"
8403
9464
  ];
8404
- function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
9465
+ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
8405
9466
  return vue.openBlock(), vue.createElementBlock("div", {
8406
9467
  class: vue.normalizeClass([
8407
9468
  "card card-file d-flex flex-row align-items-center p-1",
@@ -8416,9 +9477,9 @@ function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
8416
9477
  "prevent"
8417
9478
  ]))
8418
9479
  }, [
8419
- vue.createElementVNode("span", _hoisted_1$8, vue.toDisplayString(_ctx.entity.name), 1)
9480
+ vue.createElementVNode("span", _hoisted_1$9, vue.toDisplayString(_ctx.entity.name), 1)
8420
9481
  ]),
8421
- vue.createElementVNode("div", _hoisted_2$6, [
9482
+ vue.createElementVNode("div", _hoisted_2$8, [
8422
9483
  vue.createElementVNode("div", null, [
8423
9484
  !_ctx.fileSelectedId || _ctx.isMatch ? (vue.openBlock(), vue.createElementBlock("button", {
8424
9485
  key: 0,
@@ -8442,7 +9503,7 @@ function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
8442
9503
  }, null, 2)
8443
9504
  ], 2)) : vue.createCommentVNode("", true)
8444
9505
  ]),
8445
- vue.createElementVNode("div", _hoisted_3$4, [
9506
+ vue.createElementVNode("div", _hoisted_3$6, [
8446
9507
  vue.createElementVNode("button", {
8447
9508
  type: "button",
8448
9509
  class: "btn btn-danger btn-xs",
@@ -8454,15 +9515,15 @@ function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
8454
9515
  vue.createElementVNode("i", {
8455
9516
  class: "fa fa-trash"
8456
9517
  }, null, -1)
8457
- ]), 8, _hoisted_4$4)
9518
+ ]), 8, _hoisted_4$6)
8458
9519
  ])
8459
9520
  ])
8460
9521
  ], 2);
8461
9522
  }
8462
- var FAnalysisFile = /* @__PURE__ */ _export_sfc(_sfc_main$a, [
9523
+ var FAnalysisFile = /* @__PURE__ */ _export_sfc(_sfc_main$b, [
8463
9524
  [
8464
9525
  "render",
8465
- _sfc_render$a
9526
+ _sfc_render$b
8466
9527
  ]
8467
9528
  ]);
8468
9529
 
@@ -8492,7 +9553,7 @@ const FAnalysisBucketFiles = vue.defineComponent({
8492
9553
  }
8493
9554
  });
8494
9555
 
8495
- var _sfc_main$9 = vue.defineComponent({
9556
+ var _sfc_main$a = vue.defineComponent({
8496
9557
  props: {
8497
9558
  file: {
8498
9559
  type: Object,
@@ -8524,24 +9585,24 @@ var _sfc_main$9 = vue.defineComponent({
8524
9585
  }
8525
9586
  });
8526
9587
 
8527
- const _hoisted_1$7 = {
9588
+ const _hoisted_1$8 = {
8528
9589
  class: "card card-file d-flex flex-row align-items-center p-1"
8529
9590
  };
8530
- const _hoisted_2$5 = {
9591
+ const _hoisted_2$7 = {
8531
9592
  class: "card-heading"
8532
9593
  };
8533
- const _hoisted_3$3 = {
9594
+ const _hoisted_3$5 = {
8534
9595
  class: "title"
8535
9596
  };
8536
- const _hoisted_4$3 = {
9597
+ const _hoisted_4$5 = {
8537
9598
  class: "ms-auto"
8538
9599
  };
8539
- function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
8540
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
8541
- vue.createElementVNode("div", _hoisted_2$5, [
8542
- vue.createElementVNode("span", _hoisted_3$3, vue.toDisplayString(_ctx.path), 1)
9600
+ function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
9601
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [
9602
+ vue.createElementVNode("div", _hoisted_2$7, [
9603
+ vue.createElementVNode("span", _hoisted_3$5, vue.toDisplayString(_ctx.path), 1)
8543
9604
  ]),
8544
- vue.createElementVNode("div", _hoisted_4$3, [
9605
+ vue.createElementVNode("div", _hoisted_4$5, [
8545
9606
  vue.createElementVNode("button", {
8546
9607
  type: "button",
8547
9608
  class: "btn btn-dark btn-xs",
@@ -8556,7 +9617,197 @@ function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
8556
9617
  ])
8557
9618
  ]);
8558
9619
  }
8559
- var FAnalysisFormFile = /* @__PURE__ */ _export_sfc(_sfc_main$9, [
9620
+ var FAnalysisFormFile = /* @__PURE__ */ _export_sfc(_sfc_main$a, [
9621
+ [
9622
+ "render",
9623
+ _sfc_render$a
9624
+ ]
9625
+ ]);
9626
+
9627
+ var _sfc_main$9 = vue.defineComponent({
9628
+ components: {
9629
+ FAnalysisFormFile
9630
+ },
9631
+ props: {
9632
+ entity: {
9633
+ type: Object,
9634
+ required: true
9635
+ }
9636
+ },
9637
+ emits: [
9638
+ 'fileUploaded',
9639
+ 'uploaded',
9640
+ 'failed'
9641
+ ],
9642
+ setup (props, { emit }) {
9643
+ const coreClient = injectCoreHTTPClient();
9644
+ const storageClient = injectStorageHTTPClient();
9645
+ const busy = vue.ref(false);
9646
+ const tempFiles = vue.ref([]);
9647
+ const directoryMode = vue.ref(true);
9648
+ const vNode = vue.ref(null);
9649
+ const checkTempFiles = ($event)=>{
9650
+ $event.preventDefault();
9651
+ for(let i = 0; i < $event.target.files.length; i++){
9652
+ tempFiles.value.push($event.target.files[i]);
9653
+ }
9654
+ if (vNode.value) {
9655
+ vNode.value = '';
9656
+ }
9657
+ };
9658
+ const dropTempFile = ($event)=>{
9659
+ const index = tempFiles.value.findIndex((file)=>{
9660
+ if (hasOwnProperty(file, 'webkitRelativePath') && hasOwnProperty($event, 'webkitRelativePath')) {
9661
+ return file.webkitRelativePath === $event.webkitRelativePath;
9662
+ }
9663
+ return file.name === $event.name;
9664
+ });
9665
+ if (index !== -1) {
9666
+ tempFiles.value.splice(index, 1);
9667
+ }
9668
+ };
9669
+ const upload = wrapFnWithBusyState(busy, async ()=>{
9670
+ if (tempFiles.value.length === 0) return;
9671
+ if (!props.entity.external_id) {
9672
+ emit('failed', new Error('The analysis bucket has not created yet.'));
9673
+ return;
9674
+ }
9675
+ try {
9676
+ const formData = new FormData();
9677
+ for(let i = 0; i < tempFiles.value.length; i++){
9678
+ formData.append(`files[${i}]`, tempFiles.value[i]);
9679
+ }
9680
+ const { data: bucketFiles } = await storageClient.bucket.upload(props.entity.external_id, formData);
9681
+ for(let i = 0; i < bucketFiles.length; i++){
9682
+ const file = await coreClient.analysisBucketFile.create({
9683
+ external_id: bucketFiles[i].id,
9684
+ bucket_id: props.entity.id,
9685
+ analysis_id: props.entity.analysis_id,
9686
+ name: bucketFiles[i].path
9687
+ });
9688
+ emit('fileUploaded', file);
9689
+ }
9690
+ tempFiles.value = [];
9691
+ emit('uploaded');
9692
+ } catch (e) {
9693
+ emit('failed', e);
9694
+ }
9695
+ });
9696
+ return {
9697
+ directoryMode,
9698
+ busy,
9699
+ vNode,
9700
+ tempFiles,
9701
+ checkTempFiles,
9702
+ dropTempFile,
9703
+ upload
9704
+ };
9705
+ }
9706
+ });
9707
+
9708
+ const _hoisted_1$7 = {
9709
+ class: "d-flex flex-column"
9710
+ };
9711
+ const _hoisted_2$6 = {
9712
+ class: "form-group"
9713
+ };
9714
+ const _hoisted_3$4 = {
9715
+ class: "form-label"
9716
+ };
9717
+ const _hoisted_4$4 = [
9718
+ "webkitdirectory",
9719
+ "disbaled"
9720
+ ];
9721
+ const _hoisted_5$3 = {
9722
+ class: "form-group mb-0"
9723
+ };
9724
+ const _hoisted_6$3 = {
9725
+ class: "form-check form-switch"
9726
+ };
9727
+ const _hoisted_7$2 = {
9728
+ key: 0,
9729
+ class: "alert alert-info alert-sm m-t-10"
9730
+ };
9731
+ const _hoisted_8$2 = {
9732
+ class: "d-flex flex-column"
9733
+ };
9734
+ const _hoisted_9 = {
9735
+ class: "form-group"
9736
+ };
9737
+ const _hoisted_10 = [
9738
+ "disabled"
9739
+ ];
9740
+ function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
9741
+ const _component_FAnalysisFormFile = vue.resolveComponent("FAnalysisFormFile");
9742
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
9743
+ vue.createElementVNode("div", null, [
9744
+ vue.createElementVNode("div", _hoisted_2$6, [
9745
+ vue.createElementVNode("label", _hoisted_3$4, vue.toDisplayString(_ctx.directoryMode ? "Directories" : "Files"), 1),
9746
+ vue.createElementVNode("input", {
9747
+ id: "files",
9748
+ ref: "vNode",
9749
+ type: "file",
9750
+ webkitdirectory: _ctx.directoryMode,
9751
+ class: "form-control",
9752
+ multiple: "",
9753
+ disbaled: _ctx.busy,
9754
+ onChange: _cache[0] || (_cache[0] = (...args)=>_ctx.checkTempFiles && _ctx.checkTempFiles(...args))
9755
+ }, null, 40, _hoisted_4$4)
9756
+ ]),
9757
+ vue.createElementVNode("div", _hoisted_5$3, [
9758
+ vue.createElementVNode("div", _hoisted_6$3, [
9759
+ vue.withDirectives(vue.createElementVNode("input", {
9760
+ id: "train-file-manager-switch",
9761
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event)=>_ctx.directoryMode = $event),
9762
+ class: "form-check-input",
9763
+ type: "checkbox"
9764
+ }, null, 512), [
9765
+ [
9766
+ vue.vModelCheckbox,
9767
+ _ctx.directoryMode
9768
+ ]
9769
+ ]),
9770
+ _cache[3] || (_cache[3] = vue.createElementVNode("label", {
9771
+ class: "form-check-label",
9772
+ for: "train-file-manager-switch"
9773
+ }, "Directory Mode", -1))
9774
+ ])
9775
+ ])
9776
+ ]),
9777
+ vue.createElementVNode("div", null, [
9778
+ _ctx.tempFiles.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$2, " You have not selected any " + vue.toDisplayString(_ctx.directoryMode ? "directories" : "files") + " to upload. ", 1)) : vue.createCommentVNode("", true),
9779
+ vue.createElementVNode("div", _hoisted_8$2, [
9780
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.tempFiles, (file, key)=>{
9781
+ return vue.openBlock(), vue.createBlock(_component_FAnalysisFormFile, {
9782
+ key,
9783
+ class: "me-1",
9784
+ file,
9785
+ onDrop: _ctx.dropTempFile
9786
+ }, null, 8, [
9787
+ "file",
9788
+ "onDrop"
9789
+ ]);
9790
+ }), 128))
9791
+ ]),
9792
+ vue.createElementVNode("div", _hoisted_9, [
9793
+ vue.createElementVNode("button", {
9794
+ type: "button",
9795
+ class: "btn btn-sm btn-primary btn-block",
9796
+ disabled: _ctx.busy || _ctx.tempFiles.length === 0,
9797
+ onClick: _cache[2] || (_cache[2] = vue.withModifiers((...args)=>_ctx.upload && _ctx.upload(...args), [
9798
+ "prevent"
9799
+ ]))
9800
+ }, _cache[4] || (_cache[4] = [
9801
+ vue.createElementVNode("i", {
9802
+ class: "fa fa-upload"
9803
+ }, null, -1),
9804
+ vue.createTextVNode(" Upload ")
9805
+ ]), 8, _hoisted_10)
9806
+ ])
9807
+ ])
9808
+ ]);
9809
+ }
9810
+ var FAnalysisBucketFileUpload = /* @__PURE__ */ _export_sfc(_sfc_main$9, [
8560
9811
  [
8561
9812
  "render",
8562
9813
  _sfc_render$9
@@ -8565,8 +9816,9 @@ var FAnalysisFormFile = /* @__PURE__ */ _export_sfc(_sfc_main$9, [
8565
9816
 
8566
9817
  var _sfc_main$8 = vue.defineComponent({
8567
9818
  components: {
9819
+ BModal: bootstrapVueNext.BModal,
9820
+ FAnalysisBucketFileUpload,
8568
9821
  FAnalysisBucketFiles,
8569
- FAnalysisFormFile,
8570
9822
  FAnalysisFile
8571
9823
  },
8572
9824
  props: {
@@ -8588,7 +9840,6 @@ var _sfc_main$8 = vue.defineComponent({
8588
9840
  ],
8589
9841
  setup (props, { emit }) {
8590
9842
  const coreClient = injectCoreHTTPClient();
8591
- const storageClient = injectStorageHTTPClient();
8592
9843
  const entrypointFile = vue.ref(null);
8593
9844
  if (props.fileEntity) {
8594
9845
  entrypointFile.value = props.fileEntity;
@@ -8599,10 +9850,12 @@ var _sfc_main$8 = vue.defineComponent({
8599
9850
  }
8600
9851
  return undefined;
8601
9852
  });
8602
- const tempFiles = vue.ref([]);
9853
+ const modal = vue.ref(false);
9854
+ const toggleModal = ()=>{
9855
+ modal.value = !modal.value;
9856
+ };
8603
9857
  const selected = vue.ref([]);
8604
9858
  const selectAll = vue.ref(false);
8605
- const directoryMode = vue.ref(true);
8606
9859
  const busy = vue.ref(false);
8607
9860
  const fileListNode = vue.ref(null);
8608
9861
  const fileListQuery = vue.computed(()=>({
@@ -8633,32 +9886,16 @@ var _sfc_main$8 = vue.defineComponent({
8633
9886
  }
8634
9887
  emit('updated', entity);
8635
9888
  };
8636
- const upload = wrapFnWithBusyState(busy, async ()=>{
8637
- if (tempFiles.value.length === 0) return;
8638
- if (!props.entity.external_id) {
8639
- emit('failed', new Error('The analysis bucket has not created yet.'));
8640
- }
8641
- try {
8642
- const formData = new FormData();
8643
- for(let i = 0; i < tempFiles.value.length; i++){
8644
- formData.append(`files[${i}]`, tempFiles.value[i]);
8645
- }
8646
- const { data: bucketFiles } = await storageClient.bucket.upload(props.entity.external_id, formData);
8647
- for(let i = 0; i < bucketFiles.length; i++){
8648
- const file = await coreClient.analysisBucketFile.create({
8649
- external_id: bucketFiles[i].id,
8650
- bucket_id: props.entity.id,
8651
- analysis_id: props.entity.analysis_id,
8652
- name: bucketFiles[i].path
8653
- });
8654
- handleCreated(file);
8655
- }
8656
- tempFiles.value = [];
8657
- emit('uploaded');
8658
- } catch (e) {
8659
- emit('failed', e);
8660
- }
8661
- });
9889
+ const handleFailed = (e)=>{
9890
+ emit('failed', e);
9891
+ };
9892
+ const handleUploaded = ()=>{
9893
+ emit('uploaded');
9894
+ toggleModal();
9895
+ };
9896
+ const handleFileUploaded = (entity)=>{
9897
+ handleCreated(entity);
9898
+ };
8662
9899
  const dropSelected = wrapFnWithBusyState(busy, async ()=>{
8663
9900
  if (selected.value.length === 0) return;
8664
9901
  try {
@@ -8689,27 +9926,6 @@ var _sfc_main$8 = vue.defineComponent({
8689
9926
  selected.value.splice(index, 1);
8690
9927
  }
8691
9928
  };
8692
- const filesNode = vue.ref(null);
8693
- const checkTempFiles = ($event)=>{
8694
- $event.preventDefault();
8695
- for(let i = 0; i < $event.target.files.length; i++){
8696
- tempFiles.value.push($event.target.files[i]);
8697
- }
8698
- if (filesNode.value) {
8699
- filesNode.value = '';
8700
- }
8701
- };
8702
- const dropTempFile = ($event)=>{
8703
- const index = tempFiles.value.findIndex((file)=>{
8704
- if (hasOwnProperty(file, 'webkitRelativePath') && hasOwnProperty($event, 'webkitRelativePath')) {
8705
- return file.webkitRelativePath === $event.webkitRelativePath;
8706
- }
8707
- return file.name === $event.name;
8708
- });
8709
- if (index !== -1) {
8710
- tempFiles.value.splice(index, 1);
8711
- }
8712
- };
8713
9929
  const changeEntryPointFile = async (file)=>{
8714
9930
  if (entrypointFile.value) {
8715
9931
  if (entrypointFile.value.id === file.id) {
@@ -8737,255 +9953,199 @@ var _sfc_main$8 = vue.defineComponent({
8737
9953
  }
8738
9954
  };
8739
9955
  return {
8740
- directoryMode,
8741
9956
  busy,
8742
- checkTempFiles,
8743
- tempFiles,
8744
9957
  selected,
8745
9958
  selectAll,
8746
9959
  dropSelected,
8747
9960
  selectAllFiles,
8748
- dropTempFile,
8749
- upload,
8750
9961
  handleCreated,
8751
9962
  handleDeleted,
8752
9963
  handleUpdated,
9964
+ handleFailed,
9965
+ handleUploaded,
9966
+ handleFileUploaded,
8753
9967
  toggleFile,
8754
9968
  entrypointFile,
8755
9969
  entrypointFileId,
8756
9970
  changeEntryPointFile,
8757
- filesNode,
8758
9971
  fileListNode,
8759
- fileListQuery
9972
+ fileListQuery,
9973
+ modal,
9974
+ toggleModal
8760
9975
  };
8761
9976
  }
8762
9977
  });
8763
9978
 
8764
9979
  const _hoisted_1$6 = {
8765
- class: "row"
8766
- };
8767
- const _hoisted_2$4 = {
8768
- class: "col"
8769
- };
8770
- const _hoisted_3$2 = {
8771
- class: "form-group"
9980
+ class: "d-flex flex-column gap-1"
8772
9981
  };
8773
- const _hoisted_4$2 = {
8774
- class: "form-label"
8775
- };
8776
- const _hoisted_5$2 = [
8777
- "webkitdirectory",
8778
- "disbaled"
8779
- ];
8780
- const _hoisted_6$2 = {
8781
- class: "form-group"
8782
- };
8783
- const _hoisted_7$1 = {
8784
- class: "form-check form-switch"
8785
- };
8786
- const _hoisted_8$1 = {
8787
- class: "row"
8788
- };
8789
- const _hoisted_9 = {
8790
- class: "col"
8791
- };
8792
- const _hoisted_10 = {
8793
- key: 0,
8794
- class: "alert alert-info alert-sm m-t-10"
9982
+ const _hoisted_2$5 = {
9983
+ class: "form-check"
8795
9984
  };
8796
- const _hoisted_11 = {
9985
+ const _hoisted_3$3 = {
8797
9986
  class: "d-flex flex-column"
8798
9987
  };
8799
- const _hoisted_12 = {
9988
+ const _hoisted_4$3 = {
8800
9989
  class: "form-group"
8801
9990
  };
8802
- const _hoisted_13 = [
9991
+ const _hoisted_5$2 = [
8803
9992
  "disabled"
8804
9993
  ];
8805
- const _hoisted_14 = {
8806
- class: "col"
8807
- };
8808
- const _hoisted_15 = {
8809
- class: "form-check"
8810
- };
8811
- const _hoisted_16 = {
8812
- class: "d-flex flex-column"
9994
+ const _hoisted_6$2 = {
9995
+ class: "d-flex flex-row w-100"
8813
9996
  };
8814
- const _hoisted_17 = {
8815
- class: "form-group"
9997
+ const _hoisted_7$1 = {
9998
+ class: "ms-auto"
8816
9999
  };
8817
- const _hoisted_18 = [
8818
- "disabled"
10000
+ const _hoisted_8$1 = [
10001
+ "onClick"
8819
10002
  ];
8820
10003
  function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
8821
- const _component_FAnalysisFormFile = vue.resolveComponent("FAnalysisFormFile");
8822
10004
  const _component_FAnalysisFile = vue.resolveComponent("FAnalysisFile");
8823
10005
  const _component_FAnalysisBucketFiles = vue.resolveComponent("FAnalysisBucketFiles");
8824
- return vue.openBlock(), vue.createElementBlock("div", null, [
8825
- vue.createElementVNode("div", _hoisted_1$6, [
8826
- vue.createElementVNode("div", _hoisted_2$4, [
8827
- _cache[7] || (_cache[7] = vue.createElementVNode("h6", null, [
8828
- vue.createElementVNode("i", {
8829
- class: "fa fa-upload"
8830
- }),
8831
- vue.createTextVNode(" Upload")
8832
- ], -1)),
8833
- vue.createElementVNode("div", _hoisted_3$2, [
8834
- vue.createElementVNode("label", _hoisted_4$2, vue.toDisplayString(_ctx.directoryMode ? "Directories" : "Files"), 1),
8835
- vue.createElementVNode("input", {
8836
- id: "files",
8837
- ref: "filesNode",
8838
- type: "file",
8839
- webkitdirectory: _ctx.directoryMode,
8840
- class: "form-control",
8841
- multiple: "",
8842
- disbaled: _ctx.busy,
8843
- onChange: _cache[0] || (_cache[0] = (...args)=>_ctx.checkTempFiles && _ctx.checkTempFiles(...args))
8844
- }, null, 40, _hoisted_5$2)
8845
- ]),
8846
- vue.createElementVNode("div", _hoisted_6$2, [
8847
- vue.createElementVNode("div", _hoisted_7$1, [
8848
- vue.withDirectives(vue.createElementVNode("input", {
8849
- id: "train-file-manager-switch",
8850
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event)=>_ctx.directoryMode = $event),
8851
- class: "form-check-input",
8852
- type: "checkbox"
8853
- }, null, 512), [
8854
- [
8855
- vue.vModelCheckbox,
8856
- _ctx.directoryMode
8857
- ]
8858
- ]),
8859
- _cache[6] || (_cache[6] = vue.createElementVNode("label", {
8860
- class: "form-check-label",
8861
- for: "train-file-manager-switch"
8862
- }, "Directory Mode", -1))
8863
- ])
8864
- ])
8865
- ])
10006
+ const _component_FAnalysisBucketFileUpload = vue.resolveComponent("FAnalysisBucketFileUpload");
10007
+ const _component_BModal = vue.resolveComponent("BModal");
10008
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
10009
+ vue.createElementVNode("div", null, [
10010
+ vue.createElementVNode("button", {
10011
+ type: "button",
10012
+ class: "btn btn-primary btn-block",
10013
+ onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args)=>_ctx.toggleModal && _ctx.toggleModal(...args), [
10014
+ "prevent"
10015
+ ]))
10016
+ }, _cache[5] || (_cache[5] = [
10017
+ vue.createElementVNode("i", {
10018
+ class: "fa fa-upload"
10019
+ }, null, -1),
10020
+ vue.createTextVNode(" Upload ")
10021
+ ]))
8866
10022
  ]),
8867
- vue.createElementVNode("div", _hoisted_8$1, [
8868
- vue.createElementVNode("div", _hoisted_9, [
8869
- _cache[8] || (_cache[8] = vue.createStaticVNode('<div class="d-flex flex-row"><div><h6 class="title text-muted"> Files <span style="font-size:0.65rem;"><span class="text-info"><i class="fa fa-memory"></i> in Memory </span></span></h6></div><div class="ms-auto"><h6 class="title text-muted"> Path: <span class="sub-title"> [root] </span></h6></div></div>', 1)),
8870
- _ctx.tempFiles.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10, " You have not selected any files to upload... ")) : vue.createCommentVNode("", true),
8871
- vue.createElementVNode("div", _hoisted_11, [
8872
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.tempFiles, (file, key)=>{
8873
- return vue.openBlock(), vue.createBlock(_component_FAnalysisFormFile, {
8874
- key,
8875
- class: "me-1",
8876
- file,
8877
- onDrop: _ctx.dropTempFile
8878
- }, null, 8, [
8879
- "file",
8880
- "onDrop"
8881
- ]);
8882
- }), 128))
10023
+ vue.createElementVNode("div", null, [
10024
+ vue.createElementVNode("div", _hoisted_2$5, [
10025
+ vue.withDirectives(vue.createElementVNode("input", {
10026
+ id: "selectAllFiles",
10027
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event)=>_ctx.selectAll = $event),
10028
+ type: "checkbox",
10029
+ class: "form-check-input",
10030
+ onChange: _cache[2] || (_cache[2] = (...args)=>_ctx.selectAllFiles && _ctx.selectAllFiles(...args))
10031
+ }, null, 544), [
10032
+ [
10033
+ vue.vModelCheckbox,
10034
+ _ctx.selectAll
10035
+ ]
8883
10036
  ]),
8884
- vue.createElementVNode("div", _hoisted_12, [
8885
- vue.createElementVNode("button", {
8886
- type: "button",
8887
- class: "btn btn-xs btn-dark",
8888
- disabled: _ctx.busy || _ctx.tempFiles.length === 0,
8889
- onClick: _cache[2] || (_cache[2] = vue.withModifiers((...args)=>_ctx.upload && _ctx.upload(...args), [
8890
- "prevent"
8891
- ]))
8892
- }, " Upload ", 8, _hoisted_13)
8893
- ])
10037
+ _cache[6] || (_cache[6] = vue.createElementVNode("label", {
10038
+ for: "selectAllFiles"
10039
+ }, "Select all", -1))
8894
10040
  ]),
8895
- vue.createElementVNode("div", _hoisted_14, [
8896
- _cache[11] || (_cache[11] = vue.createElementVNode("h6", {
8897
- class: "title text-muted"
8898
- }, [
8899
- vue.createTextVNode(" Files "),
8900
- vue.createElementVNode("span", {
8901
- style: {
8902
- "font-size": "0.65rem"
8903
- }
8904
- }, [
8905
- vue.createElementVNode("span", {
8906
- class: "text-success"
8907
- }, [
8908
- vue.createElementVNode("i", {
8909
- class: "fa fa-file"
8910
- }),
8911
- vue.createTextVNode(" uploaded ")
10041
+ vue.createVNode(_component_FAnalysisBucketFiles, {
10042
+ ref: "fileListNode",
10043
+ query: _ctx.fileListQuery,
10044
+ "header-search": false,
10045
+ "header-title": false,
10046
+ "footer-pagination": false,
10047
+ onCreated: _ctx.handleCreated,
10048
+ onUpdated: _ctx.handleUpdated,
10049
+ onDeleted: _ctx.handleDeleted
10050
+ }, {
10051
+ body: vue.withCtx((props)=>[
10052
+ vue.createElementVNode("div", _hoisted_3$3, [
10053
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(props.data, (file)=>{
10054
+ return vue.openBlock(), vue.createBlock(_component_FAnalysisFile, {
10055
+ key: file.id,
10056
+ class: "me-1",
10057
+ entity: file,
10058
+ "files-selected": _ctx.selected,
10059
+ "file-selected-id": _ctx.entrypointFileId,
10060
+ onCheck: _ctx.toggleFile,
10061
+ onUpdated: props.updated,
10062
+ onDeleted: props.deleted,
10063
+ onToggle: _ctx.changeEntryPointFile
10064
+ }, null, 8, [
10065
+ "entity",
10066
+ "files-selected",
10067
+ "file-selected-id",
10068
+ "onCheck",
10069
+ "onUpdated",
10070
+ "onDeleted",
10071
+ "onToggle"
10072
+ ]);
10073
+ }), 128))
8912
10074
  ])
8913
- ])
8914
- ], -1)),
8915
- vue.createElementVNode("div", _hoisted_15, [
8916
- vue.withDirectives(vue.createElementVNode("input", {
8917
- id: "selectAllFiles",
8918
- "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event)=>_ctx.selectAll = $event),
8919
- type: "checkbox",
8920
- class: "form-check-input",
8921
- onChange: _cache[4] || (_cache[4] = (...args)=>_ctx.selectAllFiles && _ctx.selectAllFiles(...args))
8922
- }, null, 544), [
8923
- [
8924
- vue.vModelCheckbox,
8925
- _ctx.selectAll
8926
- ]
8927
10075
  ]),
8928
- _cache[9] || (_cache[9] = vue.createElementVNode("label", {
8929
- for: "selectAllFiles"
8930
- }, "Select all", -1))
8931
- ]),
8932
- vue.createVNode(_component_FAnalysisBucketFiles, {
8933
- ref: "fileListNode",
8934
- query: _ctx.fileListQuery,
8935
- "header-search": false,
8936
- "header-title": false,
8937
- "footer-pagination": false,
8938
- onCreated: _ctx.handleCreated,
8939
- onUpdated: _ctx.handleUpdated,
8940
- onDeleted: _ctx.handleDeleted
8941
- }, {
8942
- body: vue.withCtx((props)=>[
8943
- vue.createElementVNode("div", _hoisted_16, [
8944
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(props.data, (file)=>{
8945
- return vue.openBlock(), vue.createBlock(_component_FAnalysisFile, {
8946
- key: file.id,
8947
- class: "me-1",
8948
- entity: file,
8949
- "files-selected": _ctx.selected,
8950
- "file-selected-id": _ctx.entrypointFileId,
8951
- onCheck: _ctx.toggleFile,
8952
- onUpdated: props.updated,
8953
- onDeleted: props.deleted,
8954
- onToggle: _ctx.changeEntryPointFile
8955
- }, null, 8, [
8956
- "entity",
8957
- "files-selected",
8958
- "file-selected-id",
8959
- "onCheck",
8960
- "onUpdated",
8961
- "onDeleted",
8962
- "onToggle"
8963
- ]);
8964
- }), 128))
10076
+ _: 1
10077
+ }, 8, [
10078
+ "query",
10079
+ "onCreated",
10080
+ "onUpdated",
10081
+ "onDeleted"
10082
+ ]),
10083
+ vue.createElementVNode("div", _hoisted_4$3, [
10084
+ vue.createElementVNode("button", {
10085
+ type: "button",
10086
+ class: "btn btn-warning btn-xs",
10087
+ disabled: _ctx.busy || _ctx.selected.length === 0,
10088
+ onClick: _cache[3] || (_cache[3] = vue.withModifiers((...args)=>_ctx.dropSelected && _ctx.dropSelected(...args), [
10089
+ "prevent"
10090
+ ]))
10091
+ }, _cache[7] || (_cache[7] = [
10092
+ vue.createElementVNode("i", {
10093
+ class: "fa fa-trash"
10094
+ }, null, -1),
10095
+ vue.createTextVNode(" Delete ")
10096
+ ]), 8, _hoisted_5$2)
10097
+ ])
10098
+ ]),
10099
+ vue.createElementVNode("div", null, [
10100
+ vue.createVNode(_component_BModal, {
10101
+ modelValue: _ctx.modal,
10102
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event)=>_ctx.modal = $event),
10103
+ "no-footer": true,
10104
+ size: "lg"
10105
+ }, {
10106
+ header: vue.withCtx((props)=>[
10107
+ vue.createElementVNode("div", _hoisted_6$2, [
10108
+ _cache[9] || (_cache[9] = vue.createElementVNode("div", null, [
10109
+ vue.createElementVNode("h5", {
10110
+ class: "mb-0"
10111
+ }, [
10112
+ vue.createElementVNode("i", {
10113
+ class: "fa fa-upload"
10114
+ }),
10115
+ vue.createTextVNode(" Upload ")
10116
+ ])
10117
+ ], -1)),
10118
+ vue.createElementVNode("div", _hoisted_7$1, [
10119
+ vue.createElementVNode("button", {
10120
+ type: "button",
10121
+ class: "btn btn-xs btn-secondary",
10122
+ onClick: vue.withModifiers(($event)=>props.close(), [
10123
+ "prevent"
10124
+ ])
10125
+ }, _cache[8] || (_cache[8] = [
10126
+ vue.createElementVNode("i", {
10127
+ class: "fa fa-times"
10128
+ }, null, -1)
10129
+ ]), 8, _hoisted_8$1)
8965
10130
  ])
8966
- ]),
8967
- _: 1
8968
- }, 8, [
8969
- "query",
8970
- "onCreated",
8971
- "onUpdated",
8972
- "onDeleted"
8973
- ]),
8974
- vue.createElementVNode("div", _hoisted_17, [
8975
- vue.createElementVNode("button", {
8976
- type: "button",
8977
- class: "btn btn-warning btn-xs",
8978
- disabled: _ctx.busy || _ctx.selected.length === 0,
8979
- onClick: _cache[5] || (_cache[5] = vue.withModifiers((...args)=>_ctx.dropSelected && _ctx.dropSelected(...args), [
8980
- "prevent"
8981
- ]))
8982
- }, _cache[10] || (_cache[10] = [
8983
- vue.createElementVNode("i", {
8984
- class: "fa fa-trash"
8985
- }, null, -1),
8986
- vue.createTextVNode(" Delete ")
8987
- ]), 8, _hoisted_18)
8988
- ])
10131
+ ])
10132
+ ]),
10133
+ default: vue.withCtx(()=>[
10134
+ vue.createVNode(_component_FAnalysisBucketFileUpload, {
10135
+ entity: _ctx.entity,
10136
+ onFileUploaded: _ctx.handleFileUploaded,
10137
+ onUploaded: _ctx.handleUploaded,
10138
+ onFailed: _ctx.handleFailed
10139
+ }, null, 8, [
10140
+ "entity",
10141
+ "onFileUploaded",
10142
+ "onUploaded",
10143
+ "onFailed"
10144
+ ])
10145
+ ]),
10146
+ _: 1
10147
+ }, 8, [
10148
+ "modelValue"
8989
10149
  ])
8990
10150
  ])
8991
10151
  ]);
@@ -9166,11 +10326,20 @@ var _sfc_main$7 = vue.defineComponent({
9166
10326
  });
9167
10327
 
9168
10328
  const _hoisted_1$5 = {
10329
+ class: "row"
10330
+ };
10331
+ const _hoisted_2$4 = {
10332
+ class: "col-9"
10333
+ };
10334
+ const _hoisted_3$2 = {
10335
+ class: "col-3"
10336
+ };
10337
+ const _hoisted_4$2 = {
9169
10338
  class: "alert alert-sm alert-warning"
9170
10339
  };
9171
10340
  function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
9172
- const _component_FAnalysisImageCommand = vue.resolveComponent("FAnalysisImageCommand");
9173
10341
  const _component_FAnalysisBucketFileManager = vue.resolveComponent("FAnalysisBucketFileManager");
10342
+ const _component_FAnalysisImageCommand = vue.resolveComponent("FAnalysisImageCommand");
9174
10343
  const _component_FAnalysisBucket = vue.resolveComponent("FAnalysisBucket");
9175
10344
  return vue.openBlock(), vue.createElementBlock("div", null, [
9176
10345
  vue.createVNode(_component_FAnalysisBucket, {
@@ -9178,32 +10347,48 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
9178
10347
  "query-filters": _ctx.queryFilters
9179
10348
  }, {
9180
10349
  default: vue.withCtx(({ data: bucket })=>[
9181
- _cache[1] || (_cache[1] = vue.createElementVNode("span", null, "Entrypoint Command", -1)),
9182
- _cache[2] || (_cache[2] = vue.createElementVNode("br", null, null, -1)),
9183
- vue.createVNode(_component_FAnalysisImageCommand, {
9184
- class: "mt-2 mb-2",
9185
- "master-image-id": _ctx.entity.master_image_id,
9186
- "analysis-file": _ctx.entrypointEntity,
9187
- "analysis-id": _ctx.entity.id
9188
- }, null, 8, [
9189
- "master-image-id",
9190
- "analysis-file",
9191
- "analysis-id"
9192
- ]),
9193
- vue.createVNode(_component_FAnalysisBucketFileManager, {
9194
- entity: bucket,
9195
- "file-entity": _ctx.entrypointEntity,
9196
- onSetEntrypointFile: _ctx.handleEntrypointChanged,
9197
- onFailed: _ctx.handleFailed
9198
- }, null, 8, [
9199
- "entity",
9200
- "file-entity",
9201
- "onSetEntrypointFile",
9202
- "onFailed"
10350
+ vue.createElementVNode("div", _hoisted_1$5, [
10351
+ vue.createElementVNode("div", _hoisted_2$4, [
10352
+ _cache[1] || (_cache[1] = vue.createElementVNode("h6", null, [
10353
+ vue.createElementVNode("i", {
10354
+ class: "fa fa-file"
10355
+ }),
10356
+ vue.createTextVNode(" Files")
10357
+ ], -1)),
10358
+ vue.createVNode(_component_FAnalysisBucketFileManager, {
10359
+ entity: bucket,
10360
+ "file-entity": _ctx.entrypointEntity,
10361
+ onSetEntrypointFile: _ctx.handleEntrypointChanged,
10362
+ onFailed: _ctx.handleFailed
10363
+ }, null, 8, [
10364
+ "entity",
10365
+ "file-entity",
10366
+ "onSetEntrypointFile",
10367
+ "onFailed"
10368
+ ])
10369
+ ]),
10370
+ vue.createElementVNode("div", _hoisted_3$2, [
10371
+ _cache[2] || (_cache[2] = vue.createElementVNode("h6", null, [
10372
+ vue.createElementVNode("i", {
10373
+ class: "fa fa-terminal"
10374
+ }),
10375
+ vue.createTextVNode(" Command")
10376
+ ], -1)),
10377
+ vue.createVNode(_component_FAnalysisImageCommand, {
10378
+ class: "mt-2 mb-2",
10379
+ "master-image-id": _ctx.entity.master_image_id,
10380
+ "analysis-file": _ctx.entrypointEntity,
10381
+ "analysis-id": _ctx.entity.id
10382
+ }, null, 8, [
10383
+ "master-image-id",
10384
+ "analysis-file",
10385
+ "analysis-id"
10386
+ ])
10387
+ ])
9203
10388
  ])
9204
10389
  ]),
9205
10390
  error: vue.withCtx(()=>[
9206
- vue.createElementVNode("div", _hoisted_1$5, [
10391
+ vue.createElementVNode("div", _hoisted_4$2, [
9207
10392
  _cache[4] || (_cache[4] = vue.createElementVNode("p", null, " The code bucket does not exist. Therefore, no files can be uploaded. ", -1)),
9208
10393
  vue.createElementVNode("button", {
9209
10394
  type: "button",
@@ -10862,6 +12047,9 @@ var components = /*#__PURE__*/Object.freeze({
10862
12047
  FAnalysisPipeline: TrainPipeline,
10863
12048
  FAnalysisWizard: FAnalysisWizard,
10864
12049
  FEntityDelete: FEntityDelete,
12050
+ FMasterImageEventLog: FMasterImageEventLog,
12051
+ FMasterImageEventLogs: FMasterImageEventLogs,
12052
+ FNodeCrypto: FNodeCrypto,
10865
12053
  FNodeForm: FNodeForm,
10866
12054
  FNodeRegistryProject: FNodeRegistryProject,
10867
12055
  FNodeRobotEntity: FNodeRobot,
@@ -10960,6 +12148,9 @@ exports.FAnalysisNodes = FAnalysisNodes;
10960
12148
  exports.FAnalysisPipeline = TrainPipeline;
10961
12149
  exports.FAnalysisWizard = FAnalysisWizard;
10962
12150
  exports.FEntityDelete = FEntityDelete;
12151
+ exports.FMasterImageEventLog = FMasterImageEventLog;
12152
+ exports.FMasterImageEventLogs = FMasterImageEventLogs;
12153
+ exports.FNodeCrypto = FNodeCrypto;
10963
12154
  exports.FNodeForm = FNodeForm;
10964
12155
  exports.FNodeRegistryProject = FNodeRegistryProject;
10965
12156
  exports.FNodeRobotEntity = FNodeRobot;