@bnsights/bbsf-utilities 1.0.39 → 1.0.41
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.
- package/README.md +8 -0
- package/bnsights-bbsf-utilities-1.0.41.tgz +0 -0
- package/esm2020/lib/bbsf-utilities.module.mjs +59 -0
- package/esm2020/lib/shared/authentication/auth.service.mjs +211 -0
- package/esm2020/lib/shared/authentication/index.mjs +2 -0
- package/{esm2015/lib/shared/config/environment.js → esm2020/lib/shared/config/environment.mjs} +1 -1
- package/esm2020/lib/shared/config/word/docx-document.mjs +348 -0
- package/esm2020/lib/shared/config/word/helpers/render-document-file.mjs +154 -0
- package/esm2020/lib/shared/config/word/helpers/xml-builder.mjs +1836 -0
- package/esm2020/lib/shared/config/word/html-to-docx.mjs +187 -0
- package/esm2020/lib/shared/config/word/index.mjs +50 -0
- package/esm2020/lib/shared/config/word/namespaces.mjs +37 -0
- package/{esm2015/lib/shared/config/word/schemas/core.js → esm2020/lib/shared/config/word/schemas/core.mjs} +1 -3
- package/esm2020/lib/shared/config/word/schemas/document.template.mjs +107 -0
- package/{esm2015/lib/shared/config/word/schemas/numbering.js → esm2020/lib/shared/config/word/schemas/numbering.mjs} +1 -3
- package/esm2020/lib/shared/config/word/schemas/styles.mjs +147 -0
- package/esm2020/lib/shared/config/word/schemas/theme.mjs +198 -0
- package/{esm2015/lib/shared/config/word/utils/url.js → esm2020/lib/shared/config/word/utils/url.mjs} +1 -3
- package/esm2020/lib/shared/enums/authentication-modes-enums.mjs +8 -0
- package/esm2020/lib/shared/index.mjs +4 -0
- package/{esm2015/lib/shared/models/UserModel.js → esm2020/lib/shared/models/UserModel.mjs} +1 -1
- package/esm2020/lib/shared/models/area-model.mjs +3 -0
- package/esm2020/lib/shared/models/error-model.mjs +3 -0
- package/esm2020/lib/shared/models/index.mjs +5 -0
- package/esm2020/lib/shared/models/request-options-model.mjs +11 -0
- package/esm2020/lib/shared/models/word-document-model.mjs +8 -0
- package/esm2020/lib/shared/services/appearance-configuration.service.mjs +35 -0
- package/esm2020/lib/shared/services/configuration.service.mjs +24 -0
- package/esm2020/lib/shared/services/control-validation.service.mjs +173 -0
- package/esm2020/lib/shared/services/environment.service.mjs +75 -0
- package/esm2020/lib/shared/services/index.mjs +12 -0
- package/esm2020/lib/shared/services/master-layout.service.mjs +72 -0
- package/esm2020/lib/shared/services/request-handler.service.mjs +199 -0
- package/esm2020/lib/shared/services/styles-bundle.service.mjs +55 -0
- package/esm2020/lib/shared/services/translate.service.mjs +14 -0
- package/esm2020/lib/shared/services/translation-resolver.service.mjs +7 -0
- package/esm2020/lib/shared/services/utility.service.mjs +87 -0
- package/esm2020/lib/shared/services/word-document.service.mjs +38 -0
- package/esm2020/public-api.mjs +30 -0
- package/fesm2015/{bnsights-bbsf-utilities.js → bnsights-bbsf-utilities.mjs} +741 -783
- package/fesm2015/bnsights-bbsf-utilities.mjs.map +1 -0
- package/fesm2020/bnsights-bbsf-utilities.mjs +4589 -0
- package/fesm2020/bnsights-bbsf-utilities.mjs.map +1 -0
- package/{bnsights-bbsf-utilities.d.ts → index.d.ts} +1 -0
- package/lib/bbsf-utilities.module.d.ts +8 -4
- package/lib/shared/authentication/auth.service.d.ts +11 -8
- package/lib/shared/authentication/index.d.ts +1 -0
- package/lib/shared/config/word/docx-document.d.ts +10 -10
- package/lib/shared/config/word/helpers/render-document-file.d.ts +0 -2
- package/lib/shared/config/word/helpers/xml-builder.d.ts +12 -10
- package/lib/shared/config/word/index.d.ts +1 -1
- package/lib/shared/config/word/word-work/templates/documentTemplate.d.ts +2 -2
- package/lib/shared/enums/authentication-modes-enums.d.ts +6 -0
- package/lib/shared/index.d.ts +3 -0
- package/lib/shared/models/area-model.d.ts +4 -0
- package/lib/shared/models/index.d.ts +4 -0
- package/lib/shared/services/{AppearanceConfiguration.service.d.ts → appearance-configuration.service.d.ts} +4 -1
- package/lib/shared/services/configuration.service.d.ts +3 -0
- package/lib/shared/services/{controlvalidation.service.d.ts → control-validation.service.d.ts} +8 -5
- package/lib/shared/services/environment.service.d.ts +13 -1
- package/lib/shared/services/index.d.ts +11 -0
- package/lib/shared/services/{masterlayout.service.d.ts → master-layout.service.d.ts} +6 -6
- package/lib/shared/services/{requesthandler.service.d.ts → request-handler.service.d.ts} +8 -7
- package/lib/shared/services/{stylesbundle.service.d.ts → styles-bundle.service.d.ts} +4 -1
- package/lib/shared/services/translate.service.d.ts +3 -0
- package/lib/shared/services/translation-resolver.service.d.ts +2 -0
- package/lib/shared/services/utility.service.d.ts +7 -3
- package/lib/shared/services/word-document.service.d.ts +5 -2
- package/package.json +41 -21
- package/public-api.d.ts +10 -9
- package/bnsights-bbsf-utilities-1.0.39.tgz +0 -0
- package/bnsights-bbsf-utilities.metadata.json +0 -1
- package/bundles/bnsights-bbsf-utilities.umd.js +0 -4773
- package/bundles/bnsights-bbsf-utilities.umd.js.map +0 -1
- package/esm2015/lib/bbsf-utilities.module.js +0 -54
- package/esm2015/lib/shared/authentication/auth.service.js +0 -199
- package/esm2015/lib/shared/config/word/docx-document.js +0 -351
- package/esm2015/lib/shared/config/word/helpers/render-document-file.js +0 -278
- package/esm2015/lib/shared/config/word/helpers/xml-builder.js +0 -1765
- package/esm2015/lib/shared/config/word/html-to-docx.js +0 -195
- package/esm2015/lib/shared/config/word/index.js +0 -55
- package/esm2015/lib/shared/config/word/namespaces.js +0 -37
- package/esm2015/lib/shared/config/word/schemas/document.template.js +0 -109
- package/esm2015/lib/shared/config/word/schemas/styles.js +0 -149
- package/esm2015/lib/shared/config/word/schemas/theme.js +0 -200
- package/esm2015/lib/shared/models/AreaModel.js +0 -3
- package/esm2015/lib/shared/models/ErrorModel.js +0 -3
- package/esm2015/lib/shared/models/RequestOptionsModel.js +0 -11
- package/esm2015/lib/shared/models/WordDocumentModel.js +0 -8
- package/esm2015/lib/shared/services/AppearanceConfiguration.service.js +0 -37
- package/esm2015/lib/shared/services/configuration.service.js +0 -26
- package/esm2015/lib/shared/services/controlvalidation.service.js +0 -175
- package/esm2015/lib/shared/services/environment.service.js +0 -48
- package/esm2015/lib/shared/services/masterlayout.service.js +0 -89
- package/esm2015/lib/shared/services/requesthandler.service.js +0 -206
- package/esm2015/lib/shared/services/stylesbundle.service.js +0 -56
- package/esm2015/lib/shared/services/translate.service.js +0 -13
- package/esm2015/lib/shared/services/translationresolver.service.js +0 -20
- package/esm2015/lib/shared/services/utility.service.js +0 -92
- package/esm2015/lib/shared/services/word-document.service.js +0 -39
- package/esm2015/public-api.js +0 -20
- package/fesm2015/bnsights-bbsf-utilities.js.map +0 -1
- package/lib/shared/models/AreaModel.d.ts +0 -4
- package/lib/shared/services/translationresolver.service.d.ts +0 -8
- /package/{esm2015/bnsights-bbsf-utilities.js → esm2020/bnsights-bbsf-utilities.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/constants.js → esm2020/lib/shared/config/word/constants.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/helpers/index.js → esm2020/lib/shared/config/word/helpers/index.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/schemas/content-types.js → esm2020/lib/shared/config/word/schemas/content-types.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/schemas/document-rels.js → esm2020/lib/shared/config/word/schemas/document-rels.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/schemas/font-table.js → esm2020/lib/shared/config/word/schemas/font-table.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/schemas/generic-rels.js → esm2020/lib/shared/config/word/schemas/generic-rels.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/schemas/index.js → esm2020/lib/shared/config/word/schemas/index.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/schemas/rels.js → esm2020/lib/shared/config/word/schemas/rels.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/schemas/settings.js → esm2020/lib/shared/config/word/schemas/settings.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/schemas/web-settings.js → esm2020/lib/shared/config/word/schemas/web-settings.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/utils/color-conversion.js → esm2020/lib/shared/config/word/utils/color-conversion.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/utils/list.js → esm2020/lib/shared/config/word/utils/list.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/utils/unit-conversion.js → esm2020/lib/shared/config/word/utils/unit-conversion.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/utils/vnode.js → esm2020/lib/shared/config/word/utils/vnode.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/word-work/templates/documentTemplate.js → esm2020/lib/shared/config/word/word-work/templates/documentTemplate.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/word-work/templates/index.js → esm2020/lib/shared/config/word/word-work/templates/index.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/word-work/templates/mhtDocumentTemplate.js → esm2020/lib/shared/config/word/word-work/templates/mhtDocumentTemplate.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/word-work/templates/mhtPartTemplate.js → esm2020/lib/shared/config/word/word-work/templates/mhtPartTemplate.mjs} +0 -0
- /package/{esm2015/lib/shared/config/word/word-work/utils.js → esm2020/lib/shared/config/word/word-work/utils.mjs} +0 -0
- /package/lib/shared/models/{ErrorModel.d.ts → error-model.d.ts} +0 -0
- /package/lib/shared/models/{RequestOptionsModel.d.ts → request-options-model.d.ts} +0 -0
- /package/lib/shared/models/{WordDocumentModel.d.ts → word-document-model.d.ts} +0 -0
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { Injector, NgModule } from '@angular/core';
|
|
2
|
-
import { RouterModule } from '@angular/router';
|
|
3
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
4
|
-
import { BlockUIModule } from 'ng-block-ui';
|
|
5
|
-
import { ToastrModule } from 'ngx-toastr';
|
|
6
|
-
import { HttpModule } from '@angular/http';
|
|
7
|
-
import { UtilityService } from './shared/services/utility.service';
|
|
8
|
-
import { EnvironmentService } from './shared/services/environment.service';
|
|
9
|
-
import { AuthService } from './shared/authentication/auth.service';
|
|
10
|
-
import { RequestHandlerService } from './shared/services/requesthandler.service';
|
|
11
|
-
import { StylesBundleService } from './shared/services/stylesbundle.service';
|
|
12
|
-
import { BBSFTranslateService } from './shared/services/translate.service';
|
|
13
|
-
import { ControlValidationService } from './shared/services/controlvalidation.service';
|
|
14
|
-
import { MasterLayoutService } from './shared/services/masterlayout.service';
|
|
15
|
-
import { ConfigurationService } from './shared/services/configuration.service';
|
|
16
|
-
import { CommonModule } from '@angular/common';
|
|
17
|
-
import { CookieService } from 'ngx-cookie-service';
|
|
18
|
-
export let AppInjector;
|
|
19
|
-
export class BBSFUtilitiesModule {
|
|
20
|
-
constructor(injector) {
|
|
21
|
-
this.injector = injector;
|
|
22
|
-
AppInjector = this.injector;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
BBSFUtilitiesModule.decorators = [
|
|
26
|
-
{ type: NgModule, args: [{
|
|
27
|
-
declarations: [],
|
|
28
|
-
imports: [
|
|
29
|
-
CommonModule,
|
|
30
|
-
BlockUIModule.forRoot(),
|
|
31
|
-
HttpModule,
|
|
32
|
-
RouterModule,
|
|
33
|
-
ToastrModule.forRoot(),
|
|
34
|
-
],
|
|
35
|
-
exports: [],
|
|
36
|
-
providers: [
|
|
37
|
-
UtilityService,
|
|
38
|
-
EnvironmentService,
|
|
39
|
-
AuthService,
|
|
40
|
-
RequestHandlerService,
|
|
41
|
-
StylesBundleService,
|
|
42
|
-
TranslateService,
|
|
43
|
-
BBSFTranslateService,
|
|
44
|
-
ControlValidationService,
|
|
45
|
-
MasterLayoutService,
|
|
46
|
-
ConfigurationService,
|
|
47
|
-
CookieService
|
|
48
|
-
]
|
|
49
|
-
},] }
|
|
50
|
-
];
|
|
51
|
-
BBSFUtilitiesModule.ctorParameters = () => [
|
|
52
|
-
{ type: Injector }
|
|
53
|
-
];
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmJzZi11dGlsaXRpZXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi11dGlsaXRpZXMvc3JjL2xpYi9iYnNmLXV0aWxpdGllcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxNQUFNLENBQUMsSUFBSSxXQUFxQixDQUFDO0FBOEJqQyxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFlBQW9CLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDcEMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFFOUIsQ0FBQzs7O1lBaENGLFFBQVEsU0FBQztnQkFDUixZQUFZLEVBQUUsRUFDYjtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsWUFBWTtvQkFDWixhQUFhLENBQUMsT0FBTyxFQUFFO29CQUN2QixVQUFVO29CQUNWLFlBQVk7b0JBQ1osWUFBWSxDQUFDLE9BQU8sRUFBRTtpQkFFdkI7Z0JBQ0QsT0FBTyxFQUFFLEVBQ1I7Z0JBQ0QsU0FBUyxFQUFFO29CQUNULGNBQWM7b0JBQ2Qsa0JBQWtCO29CQUNsQixXQUFXO29CQUNYLHFCQUFxQjtvQkFDckIsbUJBQW1CO29CQUNuQixnQkFBZ0I7b0JBQ2hCLG9CQUFvQjtvQkFDcEIsd0JBQXdCO29CQUN4QixtQkFBbUI7b0JBQ25CLG9CQUFvQjtvQkFDcEIsYUFBYTtpQkFFZDthQUNGOzs7WUE5Q1EsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdG9yLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEJsb2NrVUlNb2R1bGUgfSBmcm9tICduZy1ibG9jay11aSc7XHJcbmltcG9ydCB7IFRvYXN0ck1vZHVsZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgeyBIdHRwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvaHR0cCc7XHJcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvc2VydmljZXMvdXRpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvc2VydmljZXMvZW52aXJvbm1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvYXV0aGVudGljYXRpb24vYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvc2VydmljZXMvcmVxdWVzdGhhbmRsZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0eWxlc0J1bmRsZVNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy9zdHlsZXNidW5kbGUuc2VydmljZSc7XHJcbmltcG9ydCB7IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy9jb250cm9sdmFsaWRhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFzdGVyTGF5b3V0U2VydmljZSB9IGZyb20gJy4vc2hhcmVkL3NlcnZpY2VzL21hc3RlcmxheW91dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZS1zZXJ2aWNlJztcclxuZXhwb3J0IGxldCBBcHBJbmplY3RvcjogSW5qZWN0b3I7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gIF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgQmxvY2tVSU1vZHVsZS5mb3JSb290KCksXHJcbiAgICBIdHRwTW9kdWxlLFxyXG4gICAgUm91dGVyTW9kdWxlLFxyXG4gICAgVG9hc3RyTW9kdWxlLmZvclJvb3QoKSxcclxuXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgQXV0aFNlcnZpY2UsXHJcbiAgICBSZXF1ZXN0SGFuZGxlclNlcnZpY2UsXHJcbiAgICBTdHlsZXNCdW5kbGVTZXJ2aWNlLFxyXG4gICAgVHJhbnNsYXRlU2VydmljZSxcclxuICAgIEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgTWFzdGVyTGF5b3V0U2VydmljZSxcclxuICAgIENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgQ29va2llU2VydmljZVxyXG5cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCQlNGVXRpbGl0aWVzTW9kdWxlIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgQXBwSW5qZWN0b3IgPSB0aGlzLmluamVjdG9yO1xyXG5cclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Injectable, Injector } from '@angular/core';
|
|
3
|
-
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
4
|
-
import { BehaviorSubject } from 'rxjs';
|
|
5
|
-
import { EnvironmentService } from '../services/environment.service';
|
|
6
|
-
import { BBSFTranslateService } from '../services/translate.service';
|
|
7
|
-
import { Router } from '@angular/router';
|
|
8
|
-
import { JwtHelperService } from '@auth0/angular-jwt';
|
|
9
|
-
import { User } from '../models/UserModel';
|
|
10
|
-
import { CookieService } from 'ngx-cookie-service';
|
|
11
|
-
import { UtilityService } from '../services/utility.service';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@angular/common/http";
|
|
14
|
-
import * as i2 from "../services/environment.service";
|
|
15
|
-
import * as i3 from "../services/translate.service";
|
|
16
|
-
import * as i4 from "@angular/router";
|
|
17
|
-
import * as i5 from "ngx-cookie-service";
|
|
18
|
-
import * as i6 from "../services/utility.service";
|
|
19
|
-
const TOKEN_KEY = 'access_token';
|
|
20
|
-
export class AuthService {
|
|
21
|
-
constructor(injector, http, environmentService, translateService, router, cookieService, utilityService) {
|
|
22
|
-
this.injector = injector;
|
|
23
|
-
this.http = http;
|
|
24
|
-
this.environmentService = environmentService;
|
|
25
|
-
this.translateService = translateService;
|
|
26
|
-
this.router = router;
|
|
27
|
-
this.cookieService = cookieService;
|
|
28
|
-
this.utilityService = utilityService;
|
|
29
|
-
this.redirectUrl = '';
|
|
30
|
-
this.jwtHelper = new JwtHelperService();
|
|
31
|
-
this.isAuthenticatedSubject = new BehaviorSubject(this.hasToken());
|
|
32
|
-
this.isAuthenticate$ = this.isAuthenticatedSubject.asObservable();
|
|
33
|
-
this.user = this.getUserManager();
|
|
34
|
-
}
|
|
35
|
-
hasToken() {
|
|
36
|
-
const token = this.cookieService.get(TOKEN_KEY);
|
|
37
|
-
return token && !this.jwtHelper.isTokenExpired(token);
|
|
38
|
-
}
|
|
39
|
-
getUserManager() {
|
|
40
|
-
const token = this.cookieService.get(TOKEN_KEY);
|
|
41
|
-
if (token)
|
|
42
|
-
this.handleAccessTokenWithoutLanguage(token);
|
|
43
|
-
return AuthService.user;
|
|
44
|
-
}
|
|
45
|
-
getUser() {
|
|
46
|
-
this.user = AuthService.user;
|
|
47
|
-
}
|
|
48
|
-
storUser(User) {
|
|
49
|
-
AuthService.user = this.user = this.user;
|
|
50
|
-
}
|
|
51
|
-
getCurrentUser() {
|
|
52
|
-
return AuthService.user;
|
|
53
|
-
}
|
|
54
|
-
isAuthenticated() {
|
|
55
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
-
return AuthService.user != null && !this.jwtHelper.isTokenExpired(AuthService.user.access_token);
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
isUserInRole(allowedPermission) {
|
|
60
|
-
let selectedPermissionSetID = Number.parseInt(this.user.profile['selectedpermissionsetid']);
|
|
61
|
-
return allowedPermission.includes(selectedPermissionSetID);
|
|
62
|
-
}
|
|
63
|
-
authorizationHeaderValue() {
|
|
64
|
-
return AuthService.user
|
|
65
|
-
? `${AuthService.user.token_type} ${AuthService.user.access_token}`
|
|
66
|
-
: '';
|
|
67
|
-
}
|
|
68
|
-
name() {
|
|
69
|
-
return AuthService.user != null ? AuthService.user.profile.given_name : '';
|
|
70
|
-
}
|
|
71
|
-
setUrl(url) {
|
|
72
|
-
localStorage.setItem('redirectUrl', url);
|
|
73
|
-
}
|
|
74
|
-
getUrl() {
|
|
75
|
-
var _a;
|
|
76
|
-
return (_a = localStorage.getItem('redirectUrl')) !== null && _a !== void 0 ? _a : "/";
|
|
77
|
-
}
|
|
78
|
-
signout() {
|
|
79
|
-
AuthService.timers.map(t => clearInterval(t));
|
|
80
|
-
AuthService.timers = [];
|
|
81
|
-
if (!this.isAuthenticated()) {
|
|
82
|
-
this.cookieService.delete(TOKEN_KEY);
|
|
83
|
-
this.router.navigate(['/Admin/account/login']);
|
|
84
|
-
}
|
|
85
|
-
this.logout().subscribe(res => {
|
|
86
|
-
this.cookieService.delete(TOKEN_KEY);
|
|
87
|
-
this.router.navigate(['/Admin/account/login']);
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
logout() {
|
|
91
|
-
const httpOptions = {
|
|
92
|
-
headers: new HttpHeaders({
|
|
93
|
-
'Content-Type': 'application/json',
|
|
94
|
-
}),
|
|
95
|
-
};
|
|
96
|
-
let ApiUrl = '/Account/';
|
|
97
|
-
return this.http.get(this.environmentService.getApiUrl() + ApiUrl + 'Logout', httpOptions);
|
|
98
|
-
}
|
|
99
|
-
clearUserSessionClaims() {
|
|
100
|
-
const httpOptions = {
|
|
101
|
-
headers: new HttpHeaders({
|
|
102
|
-
'Content-Type': 'application/json',
|
|
103
|
-
}),
|
|
104
|
-
};
|
|
105
|
-
let ApiUrl = '/api/Home/';
|
|
106
|
-
return this.http.get(this.environmentService.getBaseUrl() + ApiUrl + 'ClearCurrentUserSession', httpOptions);
|
|
107
|
-
}
|
|
108
|
-
handleAccessToken(response) {
|
|
109
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
110
|
-
const token = response;
|
|
111
|
-
AuthService.user = new User();
|
|
112
|
-
AuthService.user.token_type = "Bearer";
|
|
113
|
-
AuthService.user.access_token = token;
|
|
114
|
-
AuthService.user.profile = this.jwtHelper.decodeToken(token);
|
|
115
|
-
AuthService.user.expires_at = this.jwtHelper.getTokenExpirationDate(token);
|
|
116
|
-
AuthService.timers.map(t => clearInterval(t));
|
|
117
|
-
AuthService.timers = [];
|
|
118
|
-
this.setTokenSeconds();
|
|
119
|
-
AuthService.timers.push(this.checkRefreshToken());
|
|
120
|
-
this.user = AuthService.user;
|
|
121
|
-
yield this.updateLanguage();
|
|
122
|
-
this.cookieService.set(TOKEN_KEY, token, null, null, null, true, 'Strict');
|
|
123
|
-
this.isAuthenticatedSubject.next(true);
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
handleAccessTokenWithoutLanguage(response) {
|
|
127
|
-
const token = response;
|
|
128
|
-
AuthService.user = new User();
|
|
129
|
-
AuthService.user.token_type = "Bearer";
|
|
130
|
-
AuthService.user.access_token = token;
|
|
131
|
-
AuthService.user.profile = this.jwtHelper.decodeToken(token);
|
|
132
|
-
AuthService.user.expires_at = this.jwtHelper.getTokenExpirationDate(token);
|
|
133
|
-
this.setTokenSeconds();
|
|
134
|
-
this.user = AuthService.user;
|
|
135
|
-
this.cookieService.set(TOKEN_KEY, token, null, null, null, true, 'Strict');
|
|
136
|
-
this.isAuthenticatedSubject.next(true);
|
|
137
|
-
}
|
|
138
|
-
updateLanguage() {
|
|
139
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
140
|
-
if (!localStorage.getItem('language') ||
|
|
141
|
-
localStorage.getItem('language') == this.user.profile.locale)
|
|
142
|
-
localStorage.setItem('language', this.user.profile.locale);
|
|
143
|
-
if (this.translateService.currentLang != localStorage.getItem('language')) {
|
|
144
|
-
this.translateService.resetLang(this.translateService.currentLang);
|
|
145
|
-
yield this.translateService
|
|
146
|
-
.reloadLang(localStorage.getItem('language'))
|
|
147
|
-
.subscribe((res) => {
|
|
148
|
-
console.log(res);
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
checkRefreshToken() {
|
|
154
|
-
let date = new Date();
|
|
155
|
-
return setInterval(() => {
|
|
156
|
-
if (Math.floor(AuthService.seconds) < 120 && this.isAuthenticated())
|
|
157
|
-
this.refresh();
|
|
158
|
-
AuthService.seconds--;
|
|
159
|
-
}, 1000);
|
|
160
|
-
}
|
|
161
|
-
setTokenSeconds() {
|
|
162
|
-
let date = new Date();
|
|
163
|
-
AuthService.seconds = (AuthService.user.expires_at - date) / 1000;
|
|
164
|
-
}
|
|
165
|
-
refresh() {
|
|
166
|
-
const httpOptions = {
|
|
167
|
-
headers: new HttpHeaders({
|
|
168
|
-
'Content-Type': 'application/json',
|
|
169
|
-
'Authorization': this.authorizationHeaderValue(),
|
|
170
|
-
}),
|
|
171
|
-
};
|
|
172
|
-
let ApiUrl = '/api/Home/';
|
|
173
|
-
this.http.get(this.environmentService.getApiUrl() + ApiUrl + 'RefreshAccessToken', httpOptions).subscribe((res) => {
|
|
174
|
-
this.cookieService.delete(TOKEN_KEY);
|
|
175
|
-
this.handleAccessTokenWithoutLanguage(res.val);
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
AuthService.user = null;
|
|
180
|
-
AuthService.UserClaims = null;
|
|
181
|
-
//refresh
|
|
182
|
-
AuthService.timers = [];
|
|
183
|
-
AuthService.seconds = 0;
|
|
184
|
-
AuthService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AuthService_Factory() { return new AuthService(i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.EnvironmentService), i0.ɵɵinject(i3.BBSFTranslateService), i0.ɵɵinject(i4.Router), i0.ɵɵinject(i5.CookieService), i0.ɵɵinject(i6.UtilityService)); }, token: AuthService, providedIn: "root" });
|
|
185
|
-
AuthService.decorators = [
|
|
186
|
-
{ type: Injectable, args: [{
|
|
187
|
-
providedIn: 'root',
|
|
188
|
-
},] }
|
|
189
|
-
];
|
|
190
|
-
AuthService.ctorParameters = () => [
|
|
191
|
-
{ type: Injector },
|
|
192
|
-
{ type: HttpClient },
|
|
193
|
-
{ type: EnvironmentService },
|
|
194
|
-
{ type: BBSFTranslateService },
|
|
195
|
-
{ type: Router },
|
|
196
|
-
{ type: CookieService },
|
|
197
|
-
{ type: UtilityService }
|
|
198
|
-
];
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi11dGlsaXRpZXMvc3JjL2xpYi9zaGFyZWQvYXV0aGVudGljYXRpb24vYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFxQixXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFtQyxNQUFNLE1BQU0sQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7O0FBQzdELE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQztBQUtqQyxNQUFNLE9BQU8sV0FBVztJQVl0QixZQUFvQixRQUFrQixFQUFVLElBQWdCLEVBQVUsa0JBQXNDLEVBQVUsZ0JBQXNDLEVBQVUsTUFBYyxFQUFVLGFBQTRCLEVBQVMsY0FBNkI7UUFBaFAsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQVUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFzQjtRQUFVLFdBQU0s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LElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEQsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOztBQXhLTSxnQkFBSSxHQUFnQixJQUFJLENBQUM7QUFFekIsc0JBQVUsR0FBUSxJQUFJLENBQUM7QUFJOUIsU0FBUztBQUNGLGtCQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ1osbUJBQU8sR0FBRyxDQUFDLENBQUM7OztZQWJwQixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQWhCb0IsUUFBUTtZQUNwQixVQUFVO1lBRVYsa0JBQWtCO1lBQ2xCLG9CQUFvQjtZQUNwQixNQUFNO1lBSU4sYUFBYTtZQUViLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQkJTRlRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE1hc3RlckxheW91dFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYXN0ZXJsYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEp3dEhlbHBlclNlcnZpY2UgfSBmcm9tICdAYXV0aDAvYW5ndWxhci1qd3QnO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vbW9kZWxzL1VzZXJNb2RlbCc7XHJcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICduZ3gtY29va2llLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3V0aWxpdHkuc2VydmljZSc7XHJcbmNvbnN0IFRPS0VOX0tFWSA9ICdhY2Nlc3NfdG9rZW4nO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcclxuICBwdWJsaWMgcmVkaXJlY3RVcmw6IHN0cmluZyA9ICcnO1xyXG4gIHN0YXRpYyB1c2VyOiBVc2VyIHwgbnVsbCA9IG51bGw7XHJcbiAgdXNlcjogVXNlciB8IG51bGw7XHJcbiAgc3RhdGljIFVzZXJDbGFpbXM6IGFueSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBqd3RIZWxwZXI6IEp3dEhlbHBlclNlcnZpY2UgPSBuZXcgSnd0SGVscGVyU2VydmljZSgpO1xyXG4gIHByaXZhdGUgaXNBdXRoZW50aWNhdGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odGhpcy5oYXNUb2tlbigpKTtcclxuICBpc0F1dGhlbnRpY2F0ZSQgPSB0aGlzLmlzQXV0aGVudGljYXRlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgLy9yZWZyZXNoXHJcbiAgc3RhdGljIHRpbWVycyA9IFtdO1xyXG4gIHN0YXRpYyBzZWNvbmRzID0gMDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBlbnZpcm9ubWVudFNlcnZpY2U6IEVudmlyb25tZW50U2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBCQlNGVHJhbnNsYXRlU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLHByaXZhdGUgdXRpbGl0eVNlcnZpY2U6VXRpbGl0eVNlcnZpY2UpIHtcclxuICAgIHRoaXMudXNlciA9IHRoaXMuZ2V0VXNlck1hbmFnZXIoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNUb2tlbigpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHRva2VuID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChUT0tFTl9LRVkpO1xyXG4gICAgcmV0dXJuIHRva2VuICYmICF0aGlzLmp3dEhlbHBlci5pc1Rva2VuRXhwaXJlZCh0b2tlbik7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyTWFuYWdlcigpIHtcclxuICAgIGNvbnN0IHRva2VuID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChUT0tFTl9LRVkpO1xyXG4gICAgaWYgKHRva2VuKVxyXG4gICAgICB0aGlzLmhhbmRsZUFjY2Vzc1Rva2VuV2l0aG91dExhbmd1YWdlKHRva2VuKVxyXG4gICAgcmV0dXJuIEF1dGhTZXJ2aWNlLnVzZXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0VXNlcigpIHtcclxuICAgIHRoaXMudXNlciA9IEF1dGhTZXJ2aWNlLnVzZXI7XHJcbiAgfVxyXG4gIHN0b3JVc2VyKFVzZXI6IGFueSkge1xyXG4gICAgQXV0aFNlcnZpY2UudXNlciA9IHRoaXMudXNlciA9IHRoaXMudXNlcjtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRVc2VyKCkge1xyXG4gICAgcmV0dXJuIEF1dGhTZXJ2aWNlLnVzZXJcclxuICB9XHJcblxyXG4gIGFzeW5jIGlzQXV0aGVudGljYXRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBBdXRoU2VydmljZS51c2VyICE9IG51bGwgJiYgIXRoaXMuand0SGVscGVyLmlzVG9rZW5FeHBpcmVkKEF1dGhTZXJ2aWNlLnVzZXIuYWNjZXNzX3Rva2VuKTtcclxuICB9XHJcbiAgaXNVc2VySW5Sb2xlKGFsbG93ZWRQZXJtaXNzaW9uOiBudW1iZXJbXSkge1xyXG4gICAgbGV0IHNlbGVjdGVkUGVybWlzc2lvblNldElEOiBudW1iZXIgPSBOdW1iZXIucGFyc2VJbnQoXHJcbiAgICAgIHRoaXMudXNlci5wcm9maWxlWydzZWxlY3RlZHBlcm1pc3Npb25zZXRpZCddXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIGFsbG93ZWRQZXJtaXNzaW9uLmluY2x1ZGVzKHNlbGVjdGVkUGVybWlzc2lvblNldElEKTtcclxuICB9XHJcblxyXG4gIGF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEF1dGhTZXJ2aWNlLnVzZXJcclxuICAgICAgPyBgJHtBdXRoU2VydmljZS51c2VyLnRva2VuX3R5cGV9ICR7QXV0aFNlcnZpY2UudXNlci5hY2Nlc3NfdG9rZW59YFxyXG4gICAgICA6ICcnO1xyXG4gIH1cclxuXHJcbiAgbmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEF1dGhTZXJ2aWNlLnVzZXIgIT0gbnVsbCA/IEF1dGhTZXJ2aWNlLnVzZXIucHJvZmlsZS5naXZlbl9uYW1lIDogJyc7XHJcbiAgfVxyXG4gIHNldFVybCh1cmwpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdyZWRpcmVjdFVybCcsIHVybCk7XHJcbiAgfVxyXG4gIGdldFVybCgpIHtcclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncmVkaXJlY3RVcmwnKSA/PyBcIi9cIjtcclxuICB9XHJcbiAgc2lnbm91dCgpIHtcclxuICAgIEF1dGhTZXJ2aWNlLnRpbWVycy5tYXAodCA9PiBjbGVhckludGVydmFsKHQpKTtcclxuICAgIEF1dGhTZXJ2aWNlLnRpbWVycyA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLmlzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgIHRoaXMuY29va2llU2VydmljZS5kZWxldGUoVE9LRU5fS0VZKTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvQWRtaW4vYWNjb3VudC9sb2dpbiddKVxyXG4gICAgfVxyXG4gICAgdGhpcy5sb2dvdXQoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLmRlbGV0ZShUT0tFTl9LRVkpO1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9BZG1pbi9hY2NvdW50L2xvZ2luJ10pXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvZ291dCgpIHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgIH0pLFxyXG4gICAgfTtcclxuICAgIGxldCBBcGlVcmwgPSAnL0FjY291bnQvJztcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwaVVybCgpICsgQXBpVXJsICsgJ0xvZ291dCcsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG5cclxuICBjbGVhclVzZXJTZXNzaW9uQ2xhaW1zKCkge1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgfSksXHJcbiAgICB9O1xyXG4gICAgbGV0IEFwaVVybCA9ICcvYXBpL0hvbWUvJztcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEJhc2VVcmwoKSArIEFwaVVybCArICdDbGVhckN1cnJlbnRVc2VyU2Vzc2lvbicsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG5cclxuICBhc3luYyBoYW5kbGVBY2Nlc3NUb2tlbihyZXNwb25zZTogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB0b2tlbiA9IHJlc3BvbnNlO1xyXG4gICAgQXV0aFNlcnZpY2UudXNlciA9IG5ldyBVc2VyKCk7XHJcbiAgICBBdXRoU2VydmljZS51c2VyLnRva2VuX3R5cGUgPSBcIkJlYXJlclwiXHJcbiAgICBBdXRoU2VydmljZS51c2VyLmFjY2Vzc190b2tlbiA9IHRva2VuO1xyXG4gICAgQXV0aFNlcnZpY2UudXNlci5wcm9maWxlID0gdGhpcy5qd3RIZWxwZXIuZGVjb2RlVG9rZW4odG9rZW4pO1xyXG4gICAgQXV0aFNlcnZpY2UudXNlci5leHBpcmVzX2F0ID0gdGhpcy5qd3RIZWxwZXIuZ2V0VG9rZW5FeHBpcmF0aW9uRGF0ZSh0b2tlbik7XHJcbiAgICBBdXRoU2VydmljZS50aW1lcnMubWFwKHQgPT4gY2xlYXJJbnRlcnZhbCh0KSk7XHJcbiAgICBBdXRoU2VydmljZS50aW1lcnMgPSBbXTtcclxuICAgIHRoaXMuc2V0VG9rZW5TZWNvbmRzKClcclxuICAgIEF1dGhTZXJ2aWNlLnRpbWVycy5wdXNoKHRoaXMuY2hlY2tSZWZyZXNoVG9rZW4oKSk7XHJcbiAgICB0aGlzLnVzZXIgPSBBdXRoU2VydmljZS51c2VyXHJcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZUxhbmd1YWdlKClcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoVE9LRU5fS0VZLCB0b2tlbiwgbnVsbCwgbnVsbCwgbnVsbCwgdHJ1ZSwgJ1N0cmljdCcpO1xyXG4gICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWRTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVBY2Nlc3NUb2tlbldpdGhvdXRMYW5ndWFnZShyZXNwb25zZTogYW55KSB7XHJcbiAgICBjb25zdCB0b2tlbiA9IHJlc3BvbnNlO1xyXG4gICAgQXV0aFNlcnZpY2UudXNlciA9IG5ldyBVc2VyKCk7XHJcbiAgICBBdXRoU2VydmljZS51c2VyLnRva2VuX3R5cGUgPSBcIkJlYXJlclwiXHJcbiAgICBBdXRoU2VydmljZS51c2VyLmFjY2Vzc190b2tlbiA9IHRva2VuO1xyXG4gICAgQXV0aFNlcnZpY2UudXNlci5wcm9maWxlID0gdGhpcy5qd3RIZWxwZXIuZGVjb2RlVG9rZW4odG9rZW4pO1xyXG4gICAgQXV0aFNlcnZpY2UudXNlci5leHBpcmVzX2F0ID0gdGhpcy5qd3RIZWxwZXIuZ2V0VG9rZW5FeHBpcmF0aW9uRGF0ZSh0b2tlbik7XHJcbiAgICB0aGlzLnNldFRva2VuU2Vjb25kcygpXHJcbiAgICB0aGlzLnVzZXIgPSBBdXRoU2VydmljZS51c2VyXHJcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KFRPS0VOX0tFWSwgdG9rZW4sIG51bGwsIG51bGwsIG51bGwsIHRydWUsICdTdHJpY3QnKTtcclxuICAgIHRoaXMuaXNBdXRoZW50aWNhdGVkU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gIH1cclxuICBhc3luYyB1cGRhdGVMYW5ndWFnZSgpIHtcclxuICAgIGlmIChcclxuICAgICAgIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5ndWFnZScpIHx8XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5ndWFnZScpID09IHRoaXMudXNlci5wcm9maWxlLmxvY2FsZVxyXG4gICAgKVxyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbGFuZ3VhZ2UnLCB0aGlzLnVzZXIucHJvZmlsZS5sb2NhbGUpO1xyXG5cclxuICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcgIT0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJykpIHtcclxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnJlc2V0TGFuZyh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpO1xyXG4gICAgICBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcclxuICAgICAgICAucmVsb2FkTGFuZyhsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja1JlZnJlc2hUb2tlbigpIHtcclxuICAgIGxldCBkYXRlID0gbmV3IERhdGUoKSBhcyBhbnk7XHJcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBpZiAoTWF0aC5mbG9vcihBdXRoU2VydmljZS5zZWNvbmRzKSA8IDEyMCAmJiB0aGlzLmlzQXV0aGVudGljYXRlZCgpKVxyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpXHJcbiAgICAgIEF1dGhTZXJ2aWNlLnNlY29uZHMtLTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuICBzZXRUb2tlblNlY29uZHMoKSB7XHJcbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKCkgYXMgYW55O1xyXG4gICAgQXV0aFNlcnZpY2Uuc2Vjb25kcyA9IChBdXRoU2VydmljZS51c2VyLmV4cGlyZXNfYXQgLSBkYXRlKSAvIDEwMDBcclxuICB9XHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiB0aGlzLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpLFxyXG4gICAgICB9KSxcclxuICAgIH07XHJcbiAgICBsZXQgQXBpVXJsID0gJy9hcGkvSG9tZS8nO1xyXG4gICAgdGhpcy5odHRwLmdldCh0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBcGlVcmwoKSArIEFwaVVybCArICdSZWZyZXNoQWNjZXNzVG9rZW4nLCBodHRwT3B0aW9ucykuc3Vic2NyaWJlKChyZXM6YW55KSA9PiB7XHJcbiAgICAgIHRoaXMuY29va2llU2VydmljZS5kZWxldGUoVE9LRU5fS0VZKTtcclxuICAgICAgdGhpcy5oYW5kbGVBY2Nlc3NUb2tlbldpdGhvdXRMYW5ndWFnZShyZXMudmFsKVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIl19
|