diff --git a/projects/aca-content/ms-office/src/aos-extension.module.ts b/projects/aca-content/ms-office/src/aos-extension.module.ts
index 492b39f84..e7cdd831d 100644
--- a/projects/aca-content/ms-office/src/aos-extension.module.ts
+++ b/projects/aca-content/ms-office/src/aos-extension.module.ts
@@ -27,7 +27,6 @@ import { NgModule } from '@angular/core';
import { EffectsModule } from '@ngrx/effects';
import { AosEffects } from './effects/aos.effects';
import { TranslationService } from '@alfresco/adf-core';
-import { AlfrescoOfficeExtensionService } from '@alfresco/aca-shared';
import { canOpenWithOffice } from '@alfresco/aca-shared/rules';
@NgModule({
@@ -35,10 +34,10 @@ import { canOpenWithOffice } from '@alfresco/aca-shared/rules';
providers: [provideExtensionConfig(['aos.plugin.json'])]
})
export class AosExtensionModule {
- constructor(extensions: ExtensionService, translation: TranslationService, aosService: AlfrescoOfficeExtensionService) {
+ constructor(extensions: ExtensionService, translation: TranslationService) {
translation.addTranslationFolder('ms-office', 'assets/ms-office');
extensions.setEvaluators({
- 'aos.canOpenWithOffice': (context) => aosService.isAosPluginEnabled() && canOpenWithOffice(context)
+ 'aos.canOpenWithOffice': canOpenWithOffice
});
}
}
diff --git a/projects/aca-content/src/lib/extensions/core.extensions.module.ts b/projects/aca-content/src/lib/extensions/core.extensions.module.ts
index 7b7e5cfef..0aaa28c54 100644
--- a/projects/aca-content/src/lib/extensions/core.extensions.module.ts
+++ b/projects/aca-content/src/lib/extensions/core.extensions.module.ts
@@ -27,7 +27,6 @@ import { CommonModule } from '@angular/common';
import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';
import { ExtensionsModule } from '@alfresco/adf-extensions';
import { AppExtensionService } from '@alfresco/aca-shared';
-import { ContentServiceExtensionService } from '../services/content-service-extension.service';
export function setupExtensions(service: AppExtensionService): () => void {
return () => service.load();
@@ -44,7 +43,7 @@ export class CoreExtensionsModule {
{
provide: APP_INITIALIZER,
useFactory: setupExtensions,
- deps: [AppExtensionService, ContentServiceExtensionService],
+ deps: [AppExtensionService],
multi: true
}
]
diff --git a/projects/aca-content/src/lib/services/content-service-extension.service.spec.ts b/projects/aca-content/src/lib/services/content-service-extension.service.spec.ts
deleted file mode 100644
index 9e7b6b9cf..000000000
--- a/projects/aca-content/src/lib/services/content-service-extension.service.spec.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-/*!
- * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
- *
- * Alfresco Example Content Application
- *
- * This file is part of the Alfresco Example Content Application.
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- *
- * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * The Alfresco Example Content Application is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * from Hyland Software. If not, see .
- */
-
-import { ContentServiceExtensionService } from './content-service-extension.service';
-import { AppConfigService, AppConfigServiceMock } from '@alfresco/adf-core';
-import { TestBed } from '@angular/core/testing';
-import { of } from 'rxjs';
-import { HttpClientModule } from '@angular/common/http';
-
-describe('ContentServiceExtensionService', () => {
- let service: ContentServiceExtensionService;
- let appConfig: AppConfigService;
-
- beforeEach(() => {
- TestBed.configureTestingModule({
- imports: [HttpClientModule],
- providers: [{ provide: AppConfigService, useClass: AppConfigServiceMock }]
- });
- service = TestBed.inject(ContentServiceExtensionService);
- appConfig = TestBed.inject(AppConfigService);
- appConfig.config = Object.assign(appConfig.config, {
- plugins: {
- contentService: true
- }
- });
-
- appConfig.load();
- appConfig.onLoad = of(appConfig.config);
- });
-
- it('should set the content service to true when it is false in local storage and enabled in the app config', () => {
- localStorage.setItem('contentService', 'false');
- service.updateContentServiceAvailability();
-
- expect(localStorage.getItem('contentService')).toEqual('true');
- });
-
- it('should set the content service to false in local storage when it is false in the app config', () => {
- appConfig.config.plugins.contentService = false;
- appConfig.load();
- appConfig.onLoad = of(appConfig.config);
- service.updateContentServiceAvailability();
-
- expect(localStorage.getItem('contentService')).toEqual('false');
- });
-
- afterEach(() => {
- localStorage.clear();
- });
-});
diff --git a/projects/aca-content/src/lib/services/content-service-extension.service.ts b/projects/aca-content/src/lib/services/content-service-extension.service.ts
deleted file mode 100644
index b1b2e1e34..000000000
--- a/projects/aca-content/src/lib/services/content-service-extension.service.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-/*!
- * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
- *
- * Alfresco Example Content Application
- *
- * This file is part of the Alfresco Example Content Application.
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- *
- * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * The Alfresco Example Content Application is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * from Hyland Software. If not, see .
- */
-
-import { Injectable } from '@angular/core';
-import { AppConfigService } from '@alfresco/adf-core';
-import { take } from 'rxjs/operators';
-
-@Injectable({
- providedIn: 'root'
-})
-export class ContentServiceExtensionService {
- constructor(private appConfigService: AppConfigService) {
- this.updateContentServiceAvailability();
- }
-
- updateContentServiceAvailability() {
- this.appConfigService.onLoad.pipe(take(1)).subscribe((config) => {
- if (config.plugins && config.plugins.contentService === false) {
- this.disableContentServices();
- } else {
- this.enableContentServices();
- }
- });
- }
-
- private disableContentServices() {
- if (localStorage) {
- localStorage.setItem('contentService', 'false');
- }
- }
-
- private enableContentServices() {
- if (localStorage && localStorage.getItem('contentService') === 'false') {
- localStorage.setItem('contentService', 'true');
- }
- }
-}
diff --git a/projects/aca-content/src/lib/services/node-template.service.ts b/projects/aca-content/src/lib/services/node-template.service.ts
index c38177e22..7f5342b08 100644
--- a/projects/aca-content/src/lib/services/node-template.service.ts
+++ b/projects/aca-content/src/lib/services/node-template.service.ts
@@ -45,7 +45,7 @@ export class NodeTemplateService {
private currentTemplateConfig: TemplateDialogConfig = null;
private rootNode: ResultNode;
- _searchApi: SearchApi;
+ private _searchApi: SearchApi;
get searchApi(): SearchApi {
this._searchApi = this._searchApi ?? new SearchApi(this.alfrescoApiService.getInstance());
return this._searchApi;
diff --git a/projects/aca-shared/rules/src/app.rules.spec.ts b/projects/aca-shared/rules/src/app.rules.spec.ts
index a1037bd23..6e5d538d1 100644
--- a/projects/aca-shared/rules/src/app.rules.spec.ts
+++ b/projects/aca-shared/rules/src/app.rules.spec.ts
@@ -549,26 +549,14 @@ describe('app.evaluators', () => {
});
});
- describe('isContentServiceEnabled', () => {
- it('should return true when local storage has contentService set to true', () => {
- localStorage.setItem('contentService', 'true');
- expect(app.isContentServiceEnabled()).toBe(true);
- });
-
- it('should return false when local storage has contentService set to false', () => {
- localStorage.setItem('contentService', 'false');
- expect(app.isContentServiceEnabled()).toBe(false);
- });
-
- it('should return true when contentService is not defined in local storage', () => {
- localStorage.clear();
- expect(app.isContentServiceEnabled()).toBe(true);
- });
- });
-
describe('canOpenWithOffice', () => {
+ const appConfig = {
+ get: (key: string) => key
+ };
+
it('should return [false] if using SSO', () => {
const context: any = {
+ appConfig,
auth: {
isOauth: () => true
}
@@ -579,6 +567,7 @@ describe('app.evaluators', () => {
it('should return [false] if no selection present', () => {
const context: any = {
+ appConfig,
selection: null
};
@@ -587,6 +576,7 @@ describe('app.evaluators', () => {
it('should return [false] if no file selected', () => {
const context: any = {
+ appConfig,
selection: {
file: null
}
@@ -597,6 +587,7 @@ describe('app.evaluators', () => {
it('should return [false] if selected file has no entry', () => {
const context: any = {
+ appConfig,
selection: {
file: {
entry: null
@@ -609,6 +600,7 @@ describe('app.evaluators', () => {
it('should return [false] if selected file has no properties', () => {
const context: any = {
+ appConfig,
selection: {
file: {
entry: {
@@ -623,6 +615,7 @@ describe('app.evaluators', () => {
it('should return [false] if selected file is locked', () => {
const context: any = {
+ appConfig,
selection: {
file: {
entry: {
@@ -638,6 +631,7 @@ describe('app.evaluators', () => {
it('should return [false] if selected file has no extension', () => {
const context: any = {
+ appConfig,
selection: {
file: {
entry: {
@@ -654,6 +648,7 @@ describe('app.evaluators', () => {
it('should return [false] if extension is not supported', () => {
const context: any = {
+ appConfig,
selection: {
file: {
entry: {
@@ -670,6 +665,7 @@ describe('app.evaluators', () => {
it('should return [false] if selected file has write lock', () => {
const context: any = {
+ appConfig,
selection: {
file: {
entry: {
@@ -688,6 +684,7 @@ describe('app.evaluators', () => {
it('should return [false] if selected file has read-only lock', () => {
const context: any = {
+ appConfig,
selection: {
file: {
entry: {
@@ -706,6 +703,7 @@ describe('app.evaluators', () => {
it('should return [false] if current user is not lock owner', () => {
const context: any = {
+ appConfig,
profile: {
id: 'user1'
},
@@ -730,6 +728,7 @@ describe('app.evaluators', () => {
it('should return [false] if current user is lock owner', () => {
const context: any = {
+ appConfig,
profile: {
id: 'user1'
},
@@ -754,6 +753,7 @@ describe('app.evaluators', () => {
it('should return [false] if permissions check is false', () => {
const context: any = {
+ appConfig,
selection: {
file: {
entry: {
@@ -773,6 +773,9 @@ describe('app.evaluators', () => {
it('should return [true] if all checks succeed', () => {
const context: any = {
+ appConfig: {
+ get: () => true
+ },
selection: {
file: {
entry: {
diff --git a/projects/aca-shared/rules/src/app.rules.ts b/projects/aca-shared/rules/src/app.rules.ts
index 4f501dce9..71333f4bc 100644
--- a/projects/aca-shared/rules/src/app.rules.ts
+++ b/projects/aca-shared/rules/src/app.rules.ts
@@ -88,7 +88,10 @@ export interface AcaRuleContext extends RuleContext {
* Checks if the content plugin is enabled.
* JSON ref: `app.isContentServiceEnabled`
*/
-export const isContentServiceEnabled = (): boolean => localStorage && localStorage.getItem('contentService') !== 'false';
+export const isContentServiceEnabled = (context: AcaRuleContext): boolean => {
+ const flag = context.appConfig.get('plugins.contentService');
+ return flag === true || flag === 'true';
+};
/**
* Checks if Search is supported for active view
@@ -101,10 +104,10 @@ export const isSearchSupported = (context: RuleContext): boolean =>
* Checks if upload action is supported for the given context
* JSON ref: `app.isUploadSupported`
*
- * @param content Rule execution context
+ * @param context Rule execution context
*/
-export const isUploadSupported = (context: RuleContext): boolean =>
- [isContentServiceEnabled(), navigation.isPersonalFiles(context) || navigation.isLibraryContent(context), canUpload(context)].every(Boolean);
+export const isUploadSupported = (context: AcaRuleContext): boolean =>
+ [isContentServiceEnabled(context), navigation.isPersonalFiles(context) || navigation.isLibraryContent(context), canUpload(context)].every(Boolean);
/**
* Checks if user can copy selected node.
* JSON ref: `app.canCopyNode`
@@ -240,8 +243,8 @@ export const hasSelection = (context: RuleContext): boolean => !context.selectio
* Checks if user can create a new folder with current path.
* JSON ref: `app.navigation.folder.canCreate`
*/
-export function canCreateFolder(context: RuleContext): boolean {
- if (isContentServiceEnabled() && (navigation.isPersonalFiles(context) || navigation.isLibraryContent(context))) {
+export function canCreateFolder(context: AcaRuleContext): boolean {
+ if (isContentServiceEnabled(context) && (navigation.isPersonalFiles(context) || navigation.isLibraryContent(context))) {
const { currentFolder } = context.navigation;
if (currentFolder) {
@@ -257,14 +260,15 @@ export function canCreateFolder(context: RuleContext): boolean {
*
* @param context Rule execution context
*/
-export const canCreateLibrary = (context: RuleContext): boolean => [isContentServiceEnabled(), navigation.isLibraries(context)].every(Boolean);
+export const canCreateLibrary = (context: AcaRuleContext): boolean =>
+ [isContentServiceEnabled(context), navigation.isLibraries(context)].every(Boolean);
/**
* Checks if user can upload content to current folder.
* JSON ref: `app.navigation.folder.canUpload`
*/
-export function canUpload(context: RuleContext): boolean {
- if (isContentServiceEnabled() && (navigation.isPersonalFiles(context) || navigation.isLibraryContent(context))) {
+export function canUpload(context: AcaRuleContext): boolean {
+ if (isContentServiceEnabled(context) && (navigation.isPersonalFiles(context) || navigation.isLibraryContent(context))) {
const { currentFolder } = context.navigation;
if (currentFolder) {
@@ -578,7 +582,13 @@ export const showInfoSelectionButton = (context: RuleContext): boolean => naviga
*
* @param context Rule execution context
*/
-export function canOpenWithOffice(context: RuleContext): boolean {
+export function canOpenWithOffice(context: AcaRuleContext): boolean {
+ const flag = `${context.appConfig.get('plugins.aosPlugin', false)}`;
+
+ if (flag !== 'true') {
+ return false;
+ }
+
if (context.navigation && context.navigation.url && context.navigation.url.startsWith('/trashcan')) {
return false;
}
diff --git a/projects/aca-shared/src/lib/services/alfresco-office-extension.service.spec.ts b/projects/aca-shared/src/lib/services/alfresco-office-extension.service.spec.ts
deleted file mode 100644
index b1f45114e..000000000
--- a/projects/aca-shared/src/lib/services/alfresco-office-extension.service.spec.ts
+++ /dev/null
@@ -1,118 +0,0 @@
-/*!
- * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
- *
- * Alfresco Example Content Application
- *
- * This file is part of the Alfresco Example Content Application.
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- *
- * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * The Alfresco Example Content Application is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * from Hyland Software. If not, see .
- */
-
-import { TestBed } from '@angular/core/testing';
-import { AppConfigService } from '@alfresco/adf-core';
-import { AlfrescoOfficeExtensionService } from './alfresco-office-extension.service';
-import { provideMockStore } from '@ngrx/store/testing';
-import { initialState, LibTestingModule } from '../testing/lib-testing-module';
-import { Subject } from 'rxjs';
-
-describe('AlfrescoOfficeExtensionService', () => {
- let appConfig: AppConfigService;
- let service: AlfrescoOfficeExtensionService;
- let onLoad$: Subject;
-
- const mock = () => {
- let storage: { [key: string]: any } = {};
- return {
- getItem: (key: string) => (key in storage ? storage[key] : null),
- setItem: (key: string, value: any) => (storage[key] = value || ''),
- removeItem: (key: string) => delete storage[key],
- clear: () => (storage = {})
- };
- };
-
- beforeEach(() => {
- TestBed.configureTestingModule({
- imports: [LibTestingModule],
- providers: [provideMockStore({ initialState })]
- });
-
- onLoad$ = new Subject();
-
- appConfig = TestBed.inject(AppConfigService);
- appConfig.onLoad = onLoad$;
- appConfig.config.aosPlugin = true;
-
- service = TestBed.inject(AlfrescoOfficeExtensionService);
-
- Object.defineProperty(window, 'localStorage', { value: mock() });
- });
-
- it('should enable plugin on load', () => {
- spyOn(localStorage, 'getItem').and.returnValue(null);
- spyOn(localStorage, 'setItem');
-
- onLoad$.next({
- plugins: {
- aosPlugin: true
- }
- });
-
- TestBed.inject(AlfrescoOfficeExtensionService);
- expect(localStorage.setItem).toHaveBeenCalledWith('aosPlugin', 'true');
- });
-
- it('should disable plugin on load', () => {
- spyOn(localStorage, 'removeItem');
-
- onLoad$.next({
- plugins: {
- aosPlugin: false
- }
- });
-
- TestBed.inject(AlfrescoOfficeExtensionService);
- expect(localStorage.removeItem).toHaveBeenCalledWith('aosPlugin');
- });
-
- it('Should initialize the localStorage with the item aosPlugin true if not present', () => {
- expect(localStorage.getItem('aosPlugin')).toBeNull('The localStorage aosPlugin is not null');
- service.enablePlugin();
- expect(localStorage.getItem('aosPlugin')).toBe('true');
- expect(service.isAosPluginEnabled()).toBe(true);
- });
-
- it('Should not change the item aosPlugin value if false', () => {
- localStorage.setItem('aosPlugin', 'false');
- service.enablePlugin();
- expect(localStorage.getItem('aosPlugin')).toBe('false');
- expect(service.isAosPluginEnabled()).toBe(false);
- });
-
- it('Should not change the item aosPlugin value if true', () => {
- localStorage.setItem('aosPlugin', 'true');
- service.enablePlugin();
- expect(localStorage.getItem('aosPlugin')).toBe('true');
- expect(service.isAosPluginEnabled()).toBe(true);
- });
-
- it('Should change the item aosPlugin disabled', () => {
- localStorage.setItem('aosPlugin', 'true');
- service.disablePlugin();
- expect(localStorage.getItem('aosPlugin')).toBeNull();
- expect(service.isAosPluginEnabled()).toBe(false);
- });
-});
diff --git a/projects/aca-shared/src/lib/services/alfresco-office-extension.service.ts b/projects/aca-shared/src/lib/services/alfresco-office-extension.service.ts
deleted file mode 100644
index 95d416049..000000000
--- a/projects/aca-shared/src/lib/services/alfresco-office-extension.service.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-/*!
- * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved.
- *
- * Alfresco Example Content Application
- *
- * This file is part of the Alfresco Example Content Application.
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- *
- * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * The Alfresco Example Content Application is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * from Hyland Software. If not, see .
- */
-
-import { Injectable } from '@angular/core';
-import { AppConfigService } from '@alfresco/adf-core';
-import { map, take } from 'rxjs/operators';
-
-@Injectable({
- providedIn: 'root'
-})
-export class AlfrescoOfficeExtensionService {
- constructor(private appConfigService: AppConfigService) {
- this.appConfigService.onLoad
- .pipe(
- take(1),
- map((appConfig) => appConfig.plugins && appConfig.plugins.aosPlugin)
- )
- .subscribe((aosPlugin) => {
- if (aosPlugin) {
- this.enablePlugin();
- } else {
- this.disablePlugin();
- }
- });
- }
-
- enablePlugin() {
- if (localStorage && localStorage.getItem('aosPlugin') === null) {
- localStorage.setItem('aosPlugin', 'true');
- }
- }
-
- disablePlugin() {
- localStorage.removeItem('aosPlugin');
- }
-
- isAosPluginEnabled() {
- return localStorage && localStorage.getItem('aosPlugin') === 'true';
- }
-}
diff --git a/projects/aca-shared/src/lib/services/app.service.ts b/projects/aca-shared/src/lib/services/app.service.ts
index 553576e9c..4fc799a70 100644
--- a/projects/aca-shared/src/lib/services/app.service.ts
+++ b/projects/aca-shared/src/lib/services/app.service.ts
@@ -23,7 +23,7 @@
*/
import { Inject, Injectable, OnDestroy } from '@angular/core';
-import { AuthenticationService, AppConfigService, AlfrescoApiService, PageTitleService, UserPreferencesService } from '@alfresco/adf-core';
+import { AuthenticationService, AppConfigService, AlfrescoApiService, PageTitleService } from '@alfresco/adf-core';
import { Observable, BehaviorSubject, Subject } from 'rxjs';
import { GroupService, SearchQueryBuilderService, SharedLinksApiService, UploadService, FileUploadErrorEvent } from '@alfresco/adf-content-services';
import { OverlayContainer } from '@angular/cdk/overlay';
@@ -55,16 +55,12 @@ import { AcaMobileAppSwitcherService } from './aca-mobile-app-switcher.service';
// After moving shell to ADF to core, AppService will implement ShellAppService
export class AppService implements OnDestroy {
private ready: BehaviorSubject;
+
ready$: Observable;
-
pageHeading$: Observable;
-
appNavNarMode$: Subject<'collapsed' | 'expanded'> = new BehaviorSubject('expanded');
toggleAppNavBar$ = new Subject();
- hideSidenavConditions = ['/preview/'];
- minimizeSidenavConditions = ['search'];
-
onDestroy$ = new Subject();
/**
@@ -76,7 +72,6 @@ export class AppService implements OnDestroy {
}
constructor(
- public preferencesService: UserPreferencesService,
private authenticationService: AuthenticationService,
private store: Store,
private router: Router,
diff --git a/projects/aca-shared/src/public-api.ts b/projects/aca-shared/src/public-api.ts
index 48906a0fa..25e950ec6 100644
--- a/projects/aca-shared/src/public-api.ts
+++ b/projects/aca-shared/src/public-api.ts
@@ -58,7 +58,6 @@ export * from './lib/services/node-permission.service';
export * from './lib/services/app.extension.service';
export * from './lib/services/router.extension.service';
export * from './lib/services/app-hook.service';
-export * from './lib/services/alfresco-office-extension.service';
export * from './lib/services/aca-file-auto-download.service';
export * from './lib/utils/node.utils';