@acorex/connectivity 20.2.0-next.0 → 20.2.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,9 +9,10 @@ import { AXP_APPLICATION_LOADER, AXP_FEATURE_LOADER, AXP_PERMISSION_LOADER, AXP_
9
9
  import { of, delay, firstValueFrom, filter, throttleTime, take } from 'rxjs';
10
10
  import { AXMPermissionsKeys, AXMFormTemplateTypes, RootConfig as RootConfig$5, AXMFormTemplateManagementCategoryEntityServiceImpl, AXMFormTemplateManagementCategoryEntityService } from '@acorex/modules/form-template-management';
11
11
  import { AXMPermissionsKeys as AXMPermissionsKeys$1, RootConfig as RootConfig$6 } from '@acorex/modules/issue-management';
12
- import { AXPRegionalService, AXP_SEARCH_PROVIDER, AXPLockService, AXPFileStorageStatus, AXPFileStorageService } from '@acorex/platform/common';
12
+ import { AXPRegionalService, AXPFileStorageStatus, AXP_SEARCH_PROVIDER, AXPLockService, AXPFileStorageService } from '@acorex/platform/common';
13
13
  import Dexie from 'dexie';
14
14
  import { AXTranslationService } from '@acorex/core/translation';
15
+ import { AXFileService } from '@acorex/core/file';
15
16
  import { RootConfig } from '@acorex/modules/contact-management';
16
17
  import { AXMChatService, AXMCommentService, RootConfig as RootConfig$1 } from '@acorex/modules/conversation';
17
18
  import { AXMUsersEntityService, RootConfig as RootConfig$8 } from '@acorex/modules/security-management';
@@ -27,7 +28,6 @@ import { AXPRuntimeModule, provideCommandSetups, AXPQueryService } from '@acorex
27
28
  import { RootConfig as RootConfig$a } from '@acorex/modules/report-management';
28
29
  import { AXPWidgetsList } from '@acorex/modules/common';
29
30
  import { RootConfig as RootConfig$b, AXMMetaDataDefinitionCategoryServiceImpl, AXMMetaDataDefinitionService, AXMMetaDataDefinitionCategoryService } from '@acorex/modules/platform-management';
30
- import { AXFileService } from '@acorex/core/file';
31
31
  import { RootConfig as RootConfig$c } from '@acorex/modules/text-template-management';
32
32
  import { RootConfig as RootConfig$d } from '@acorex/modules/scheduler-job-management';
33
33
  import { RootConfig as RootConfig$f } from '@acorex/modules/training-management';
@@ -790,6 +790,133 @@ class AXCRegionalServiceImpl extends AXPRegionalService {
790
790
  }
791
791
  }
792
792
 
793
+ class FileStorageDatabase extends Dexie {
794
+ constructor() {
795
+ super('FileStorageDatabase');
796
+ this.version(1).stores({
797
+ files: 'fileId,refId,refType,category,isPrimary,status',
798
+ });
799
+ }
800
+ }
801
+ const db = new FileStorageDatabase();
802
+ class AXCFileStorageService {
803
+ async mapToFileStorageInfo(record) {
804
+ if (!record) {
805
+ throw new Error('Record not found');
806
+ }
807
+ const { binary, ...fileInfo } = record;
808
+ const url = await this.fileService.blobToBase64(binary);
809
+ return { ...record, url };
810
+ }
811
+ async save(request) {
812
+ const fileId = crypto.randomUUID();
813
+ const fileInfo = {
814
+ fileId,
815
+ refId: request.refId,
816
+ refType: request.refType,
817
+ category: request.category,
818
+ size: request.file.size,
819
+ mimeType: request.file.type,
820
+ uploadedAt: new Date(),
821
+ isPublic: request.metadata?.['isPublic'] || true,
822
+ isPrimary: request.isPrimary || false,
823
+ status: request.status ?? AXPFileStorageStatus.Temporary, // Use enum
824
+ name: request.name,
825
+ binary: request.file,
826
+ };
827
+ // Save the binary content along with metadata in Dexie
828
+ await db.files.add({ ...fileInfo, binary: request.file });
829
+ return fileInfo;
830
+ }
831
+ async commit(fileId) {
832
+ const file = await db.files.get(fileId);
833
+ if (!file) {
834
+ throw new Error('File not found');
835
+ }
836
+ file.status = AXPFileStorageStatus.Committed; // Use enum
837
+ await db.files.put(file);
838
+ }
839
+ async markForDeletion(fileId) {
840
+ const file = await db.files.get(fileId);
841
+ if (!file) {
842
+ throw new Error('File not found');
843
+ }
844
+ file.status = AXPFileStorageStatus.PendingDeletion; // Use enum
845
+ await db.files.put(file);
846
+ }
847
+ async update(request) {
848
+ const file = await db.files.get(request.fileId);
849
+ if (!file) {
850
+ throw new Error('File not found');
851
+ }
852
+ const updatedFileInfo = {
853
+ ...file,
854
+ ...request.metadata,
855
+ isPrimary: request.isPrimary !== undefined ? request.isPrimary : file.isPrimary,
856
+ };
857
+ await db.files.put(updatedFileInfo);
858
+ return this.mapToFileStorageInfo(updatedFileInfo);
859
+ }
860
+ async find(request) {
861
+ const files = await db.files.toArray();
862
+ const filteredFiles = files.filter((file) => {
863
+ return ((!request.refId || file.refId === request.refId) &&
864
+ (!request.refType || file.refType === request.refType) &&
865
+ (!request.category || file.category === request.category) &&
866
+ (!request.isPrimary || file.isPrimary === request.isPrimary) &&
867
+ (!request.isPublic || file.isPublic === request.isPublic) &&
868
+ (!request.mimeType || file.mimeType === request.mimeType) &&
869
+ (!request.uploadedAtRange ||
870
+ (file.uploadedAt >= request.uploadedAtRange.from && file.uploadedAt <= request.uploadedAtRange.to)) &&
871
+ file.status === AXPFileStorageStatus.Committed // Use enum
872
+ );
873
+ });
874
+ // Map all filtered files to `AXPFileStorageInfo`
875
+ return Promise.all(filteredFiles.map((file) => this.mapToFileStorageInfo(file)));
876
+ }
877
+ async getInfo(fileId) {
878
+ // Simulate a delay of 2 seconds (2000 milliseconds)
879
+ await new Promise((resolve) => setTimeout(resolve, 2000));
880
+ const file = await db.files.get(fileId);
881
+ return this.mapToFileStorageInfo(file);
882
+ }
883
+ async remove(fileId) {
884
+ await db.files.delete(fileId);
885
+ }
886
+ async cleanupTemporaryFiles() {
887
+ const files = await db.files.toArray();
888
+ const temporaryFiles = files.filter((file) => file.status === AXPFileStorageStatus.Temporary);
889
+ for (const file of temporaryFiles) {
890
+ await db.files.delete(file.fileId);
891
+ }
892
+ }
893
+ async cleanupMarkedFiles(gracePeriod) {
894
+ const now = new Date();
895
+ const files = await db.files.toArray();
896
+ for (const file of files) {
897
+ if (file.status === AXPFileStorageStatus.PendingDeletion &&
898
+ now.getTime() - file.uploadedAt.getTime() > gracePeriod) {
899
+ await db.files.delete(file.fileId);
900
+ }
901
+ }
902
+ }
903
+ // Semi-background cleanup job
904
+ constructor() {
905
+ this.fileService = inject(AXFileService);
906
+ setInterval(() => {
907
+ this.cleanupMarkedFiles(5 * 60 * 1000) // Grace period: 5 minutes in milliseconds
908
+ .catch((error) => console.error('Error during cleanup:', error));
909
+ this.cleanupTemporaryFiles() // Ensure temporary files are cleaned
910
+ .catch((error) => console.error('Error during cleanup:', error));
911
+ }, 5 * 60 * 1000); // Runs every 5 minutes
912
+ }
913
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXCFileStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
914
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXCFileStorageService }); }
915
+ }
916
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXCFileStorageService, decorators: [{
917
+ type: Injectable
918
+ }], ctorParameters: () => [] });
919
+
793
920
  class AXCCommonMockModule {
794
921
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXCCommonMockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
795
922
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.3", ngImport: i0, type: AXCCommonMockModule }); }
@@ -811,7 +938,11 @@ class AXCCommonMockModule {
811
938
  {
812
939
  provide: AXPRegionalService,
813
940
  useClass: AXCRegionalServiceImpl
814
- }
941
+ },
942
+ {
943
+ provide: AXPFileStorageService,
944
+ useClass: AXCFileStorageService,
945
+ },
815
946
  ] }); }
816
947
  }
817
948
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXCCommonMockModule, decorators: [{
@@ -838,7 +969,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
838
969
  {
839
970
  provide: AXPRegionalService,
840
971
  useClass: AXCRegionalServiceImpl
841
- }
972
+ },
973
+ {
974
+ provide: AXPFileStorageService,
975
+ useClass: AXCFileStorageService,
976
+ },
842
977
  ],
843
978
  }]
844
979
  }] });
@@ -8589,133 +8724,6 @@ class AXCMetaDataDefinitionCategoryMockService extends AXMMetaDataDefinitionCate
8589
8724
  }
8590
8725
  }
8591
8726
 
8592
- class FileStorageDatabase extends Dexie {
8593
- constructor() {
8594
- super('FileStorageDatabase');
8595
- this.version(1).stores({
8596
- files: 'fileId,refId,refType,category,isPrimary,status',
8597
- });
8598
- }
8599
- }
8600
- const db = new FileStorageDatabase();
8601
- class AXCFileStorageService {
8602
- async mapToFileStorageInfo(record) {
8603
- if (!record) {
8604
- throw new Error('Record not found');
8605
- }
8606
- const { binary, ...fileInfo } = record;
8607
- const url = await this.fileService.blobToBase64(binary);
8608
- return { ...record, url };
8609
- }
8610
- async save(request) {
8611
- const fileId = crypto.randomUUID();
8612
- const fileInfo = {
8613
- fileId,
8614
- refId: request.refId,
8615
- refType: request.refType,
8616
- category: request.category,
8617
- size: request.file.size,
8618
- mimeType: request.file.type,
8619
- uploadedAt: new Date(),
8620
- isPublic: request.metadata?.['isPublic'] || true,
8621
- isPrimary: request.isPrimary || false,
8622
- status: request.status ?? AXPFileStorageStatus.Temporary, // Use enum
8623
- name: request.name,
8624
- binary: request.file,
8625
- };
8626
- // Save the binary content along with metadata in Dexie
8627
- await db.files.add({ ...fileInfo, binary: request.file });
8628
- return fileInfo;
8629
- }
8630
- async commit(fileId) {
8631
- const file = await db.files.get(fileId);
8632
- if (!file) {
8633
- throw new Error('File not found');
8634
- }
8635
- file.status = AXPFileStorageStatus.Committed; // Use enum
8636
- await db.files.put(file);
8637
- }
8638
- async markForDeletion(fileId) {
8639
- const file = await db.files.get(fileId);
8640
- if (!file) {
8641
- throw new Error('File not found');
8642
- }
8643
- file.status = AXPFileStorageStatus.PendingDeletion; // Use enum
8644
- await db.files.put(file);
8645
- }
8646
- async update(request) {
8647
- const file = await db.files.get(request.fileId);
8648
- if (!file) {
8649
- throw new Error('File not found');
8650
- }
8651
- const updatedFileInfo = {
8652
- ...file,
8653
- ...request.metadata,
8654
- isPrimary: request.isPrimary !== undefined ? request.isPrimary : file.isPrimary,
8655
- };
8656
- await db.files.put(updatedFileInfo);
8657
- return this.mapToFileStorageInfo(updatedFileInfo);
8658
- }
8659
- async find(request) {
8660
- const files = await db.files.toArray();
8661
- const filteredFiles = files.filter((file) => {
8662
- return ((!request.refId || file.refId === request.refId) &&
8663
- (!request.refType || file.refType === request.refType) &&
8664
- (!request.category || file.category === request.category) &&
8665
- (!request.isPrimary || file.isPrimary === request.isPrimary) &&
8666
- (!request.isPublic || file.isPublic === request.isPublic) &&
8667
- (!request.mimeType || file.mimeType === request.mimeType) &&
8668
- (!request.uploadedAtRange ||
8669
- (file.uploadedAt >= request.uploadedAtRange.from && file.uploadedAt <= request.uploadedAtRange.to)) &&
8670
- file.status === AXPFileStorageStatus.Committed // Use enum
8671
- );
8672
- });
8673
- // Map all filtered files to `AXPFileStorageInfo`
8674
- return Promise.all(filteredFiles.map((file) => this.mapToFileStorageInfo(file)));
8675
- }
8676
- async getInfo(fileId) {
8677
- // Simulate a delay of 2 seconds (2000 milliseconds)
8678
- await new Promise((resolve) => setTimeout(resolve, 2000));
8679
- const file = await db.files.get(fileId);
8680
- return this.mapToFileStorageInfo(file);
8681
- }
8682
- async remove(fileId) {
8683
- await db.files.delete(fileId);
8684
- }
8685
- async cleanupTemporaryFiles() {
8686
- const files = await db.files.toArray();
8687
- const temporaryFiles = files.filter((file) => file.status === AXPFileStorageStatus.Temporary);
8688
- for (const file of temporaryFiles) {
8689
- await db.files.delete(file.fileId);
8690
- }
8691
- }
8692
- async cleanupMarkedFiles(gracePeriod) {
8693
- const now = new Date();
8694
- const files = await db.files.toArray();
8695
- for (const file of files) {
8696
- if (file.status === AXPFileStorageStatus.PendingDeletion &&
8697
- now.getTime() - file.uploadedAt.getTime() > gracePeriod) {
8698
- await db.files.delete(file.fileId);
8699
- }
8700
- }
8701
- }
8702
- // Semi-background cleanup job
8703
- constructor() {
8704
- this.fileService = inject(AXFileService);
8705
- setInterval(() => {
8706
- this.cleanupMarkedFiles(5 * 60 * 1000) // Grace period: 5 minutes in milliseconds
8707
- .catch((error) => console.error('Error during cleanup:', error));
8708
- this.cleanupTemporaryFiles() // Ensure temporary files are cleaned
8709
- .catch((error) => console.error('Error during cleanup:', error));
8710
- }, 5 * 60 * 1000); // Runs every 5 minutes
8711
- }
8712
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXCFileStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8713
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXCFileStorageService }); }
8714
- }
8715
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXCFileStorageService, decorators: [{
8716
- type: Injectable
8717
- }], ctorParameters: () => [] });
8718
-
8719
8727
  class AXCPlatformManagementMockModule {
8720
8728
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXCPlatformManagementMockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8721
8729
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.3", ngImport: i0, type: AXCPlatformManagementMockModule }); }
@@ -8744,10 +8752,6 @@ class AXCPlatformManagementMockModule {
8744
8752
  provide: AXMMetaDataDefinitionCategoryService,
8745
8753
  useClass: AXCMetaDataDefinitionCategoryMockService,
8746
8754
  },
8747
- {
8748
- provide: AXPFileStorageService,
8749
- useClass: AXCFileStorageService,
8750
- },
8751
8755
  ] }); }
8752
8756
  }
8753
8757
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXCPlatformManagementMockModule, decorators: [{
@@ -8781,10 +8785,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
8781
8785
  provide: AXMMetaDataDefinitionCategoryService,
8782
8786
  useClass: AXCMetaDataDefinitionCategoryMockService,
8783
8787
  },
8784
- {
8785
- provide: AXPFileStorageService,
8786
- useClass: AXCFileStorageService,
8787
- },
8788
8788
  ],
8789
8789
  }]
8790
8790
  }] });
@@ -11010,5 +11010,5 @@ var execute_command = /*#__PURE__*/Object.freeze({
11010
11010
  * Generated bundle index. Do not edit.
11011
11011
  */
11012
11012
 
11013
- export { APPLICATIONS, APPLICATIONS_MODULES, AXCApplicationManagementMockModule, AXCApplicationTemplateDataSeeder, AXCAuthMockModule, AXCCommonMockModule, AXCContactManagementMockModule, AXCConversationMockModule, AXCDashboardManagementMockModule, AXCDataManagementMockModule, AXCDocumentManagementMockModule, AXCFOrganizationManagementMockModule, AXCFormTemplateManagementMockModule, AXCIssueManagementMockModule, AXCLockService, AXCLogManagementMockModule, AXCMockModule, AXCNotificationManagementMockModule, AXCProjectManagementMockModule, AXCReportManagementMockModule, AXCSchedulerJobDataSeeder, AXCSchedulerJobManagementMockModule, AXCSecurityManagementMockModule, AXCTextTemplateCategoryDataSeeder, AXCTextTemplateDataSeeder, AXCTextTemplateManagementMockModule, AXCTrainingManagementMockModule, AXMAiResponderService, AXMReportExecuteCommand, AXPDashboardDataSeeder, AXPDexieEntityStorageService, AXPMessageDataSeeder, AXPReportManagementDataSeeder, AXPRoomDataSeeder, AXPSecurityManagementRoleDataSeeder, AXPSecurityManagementUserDataSeeder, CATEGORY_REPORT_MAPPING, DASHBOARDS, EDITIONS, ENTITIES, FEATURES, MOCKStrategy, MODULES, PERMISSIONS, PROPERTIES, REPORT_CATEGORIES, REPORT_DEFINITIONS, TEXT_TEMPLATES, TEXT_TEMPLATE_CATEGORY, generateRandomDashboard };
11013
+ export { APPLICATIONS, APPLICATIONS_MODULES, AXCApplicationManagementMockModule, AXCApplicationTemplateDataSeeder, AXCAuthMockModule, AXCCommonMockModule, AXCContactManagementMockModule, AXCConversationMockModule, AXCDashboardManagementMockModule, AXCDataManagementMockModule, AXCDocumentManagementMockModule, AXCFOrganizationManagementMockModule, AXCFileStorageService, AXCFormTemplateManagementMockModule, AXCIssueManagementMockModule, AXCLockService, AXCLogManagementMockModule, AXCMockModule, AXCNotificationManagementMockModule, AXCProjectManagementMockModule, AXCReportManagementMockModule, AXCSchedulerJobDataSeeder, AXCSchedulerJobManagementMockModule, AXCSecurityManagementMockModule, AXCTextTemplateCategoryDataSeeder, AXCTextTemplateDataSeeder, AXCTextTemplateManagementMockModule, AXCTrainingManagementMockModule, AXMAiResponderService, AXMReportExecuteCommand, AXPDashboardDataSeeder, AXPDexieEntityStorageService, AXPMessageDataSeeder, AXPReportManagementDataSeeder, AXPRoomDataSeeder, AXPSecurityManagementRoleDataSeeder, AXPSecurityManagementUserDataSeeder, CATEGORY_REPORT_MAPPING, DASHBOARDS, EDITIONS, ENTITIES, FEATURES, MOCKStrategy, MODULES, PERMISSIONS, PROPERTIES, REPORT_CATEGORIES, REPORT_DEFINITIONS, TEXT_TEMPLATES, TEXT_TEMPLATE_CATEGORY, generateRandomDashboard };
11014
11014
  //# sourceMappingURL=acorex-connectivity-mock.mjs.map