@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.
Files changed (127) hide show
  1. package/README.md +8 -0
  2. package/bnsights-bbsf-utilities-1.0.41.tgz +0 -0
  3. package/esm2020/lib/bbsf-utilities.module.mjs +59 -0
  4. package/esm2020/lib/shared/authentication/auth.service.mjs +211 -0
  5. package/esm2020/lib/shared/authentication/index.mjs +2 -0
  6. package/{esm2015/lib/shared/config/environment.js → esm2020/lib/shared/config/environment.mjs} +1 -1
  7. package/esm2020/lib/shared/config/word/docx-document.mjs +348 -0
  8. package/esm2020/lib/shared/config/word/helpers/render-document-file.mjs +154 -0
  9. package/esm2020/lib/shared/config/word/helpers/xml-builder.mjs +1836 -0
  10. package/esm2020/lib/shared/config/word/html-to-docx.mjs +187 -0
  11. package/esm2020/lib/shared/config/word/index.mjs +50 -0
  12. package/esm2020/lib/shared/config/word/namespaces.mjs +37 -0
  13. package/{esm2015/lib/shared/config/word/schemas/core.js → esm2020/lib/shared/config/word/schemas/core.mjs} +1 -3
  14. package/esm2020/lib/shared/config/word/schemas/document.template.mjs +107 -0
  15. package/{esm2015/lib/shared/config/word/schemas/numbering.js → esm2020/lib/shared/config/word/schemas/numbering.mjs} +1 -3
  16. package/esm2020/lib/shared/config/word/schemas/styles.mjs +147 -0
  17. package/esm2020/lib/shared/config/word/schemas/theme.mjs +198 -0
  18. package/{esm2015/lib/shared/config/word/utils/url.js → esm2020/lib/shared/config/word/utils/url.mjs} +1 -3
  19. package/esm2020/lib/shared/enums/authentication-modes-enums.mjs +8 -0
  20. package/esm2020/lib/shared/index.mjs +4 -0
  21. package/{esm2015/lib/shared/models/UserModel.js → esm2020/lib/shared/models/UserModel.mjs} +1 -1
  22. package/esm2020/lib/shared/models/area-model.mjs +3 -0
  23. package/esm2020/lib/shared/models/error-model.mjs +3 -0
  24. package/esm2020/lib/shared/models/index.mjs +5 -0
  25. package/esm2020/lib/shared/models/request-options-model.mjs +11 -0
  26. package/esm2020/lib/shared/models/word-document-model.mjs +8 -0
  27. package/esm2020/lib/shared/services/appearance-configuration.service.mjs +35 -0
  28. package/esm2020/lib/shared/services/configuration.service.mjs +24 -0
  29. package/esm2020/lib/shared/services/control-validation.service.mjs +173 -0
  30. package/esm2020/lib/shared/services/environment.service.mjs +75 -0
  31. package/esm2020/lib/shared/services/index.mjs +12 -0
  32. package/esm2020/lib/shared/services/master-layout.service.mjs +72 -0
  33. package/esm2020/lib/shared/services/request-handler.service.mjs +199 -0
  34. package/esm2020/lib/shared/services/styles-bundle.service.mjs +55 -0
  35. package/esm2020/lib/shared/services/translate.service.mjs +14 -0
  36. package/esm2020/lib/shared/services/translation-resolver.service.mjs +7 -0
  37. package/esm2020/lib/shared/services/utility.service.mjs +87 -0
  38. package/esm2020/lib/shared/services/word-document.service.mjs +38 -0
  39. package/esm2020/public-api.mjs +30 -0
  40. package/fesm2015/{bnsights-bbsf-utilities.js → bnsights-bbsf-utilities.mjs} +741 -783
  41. package/fesm2015/bnsights-bbsf-utilities.mjs.map +1 -0
  42. package/fesm2020/bnsights-bbsf-utilities.mjs +4589 -0
  43. package/fesm2020/bnsights-bbsf-utilities.mjs.map +1 -0
  44. package/{bnsights-bbsf-utilities.d.ts → index.d.ts} +1 -0
  45. package/lib/bbsf-utilities.module.d.ts +8 -4
  46. package/lib/shared/authentication/auth.service.d.ts +11 -8
  47. package/lib/shared/authentication/index.d.ts +1 -0
  48. package/lib/shared/config/word/docx-document.d.ts +10 -10
  49. package/lib/shared/config/word/helpers/render-document-file.d.ts +0 -2
  50. package/lib/shared/config/word/helpers/xml-builder.d.ts +12 -10
  51. package/lib/shared/config/word/index.d.ts +1 -1
  52. package/lib/shared/config/word/word-work/templates/documentTemplate.d.ts +2 -2
  53. package/lib/shared/enums/authentication-modes-enums.d.ts +6 -0
  54. package/lib/shared/index.d.ts +3 -0
  55. package/lib/shared/models/area-model.d.ts +4 -0
  56. package/lib/shared/models/index.d.ts +4 -0
  57. package/lib/shared/services/{AppearanceConfiguration.service.d.ts → appearance-configuration.service.d.ts} +4 -1
  58. package/lib/shared/services/configuration.service.d.ts +3 -0
  59. package/lib/shared/services/{controlvalidation.service.d.ts → control-validation.service.d.ts} +8 -5
  60. package/lib/shared/services/environment.service.d.ts +13 -1
  61. package/lib/shared/services/index.d.ts +11 -0
  62. package/lib/shared/services/{masterlayout.service.d.ts → master-layout.service.d.ts} +6 -6
  63. package/lib/shared/services/{requesthandler.service.d.ts → request-handler.service.d.ts} +8 -7
  64. package/lib/shared/services/{stylesbundle.service.d.ts → styles-bundle.service.d.ts} +4 -1
  65. package/lib/shared/services/translate.service.d.ts +3 -0
  66. package/lib/shared/services/translation-resolver.service.d.ts +2 -0
  67. package/lib/shared/services/utility.service.d.ts +7 -3
  68. package/lib/shared/services/word-document.service.d.ts +5 -2
  69. package/package.json +41 -21
  70. package/public-api.d.ts +10 -9
  71. package/bnsights-bbsf-utilities-1.0.39.tgz +0 -0
  72. package/bnsights-bbsf-utilities.metadata.json +0 -1
  73. package/bundles/bnsights-bbsf-utilities.umd.js +0 -4773
  74. package/bundles/bnsights-bbsf-utilities.umd.js.map +0 -1
  75. package/esm2015/lib/bbsf-utilities.module.js +0 -54
  76. package/esm2015/lib/shared/authentication/auth.service.js +0 -199
  77. package/esm2015/lib/shared/config/word/docx-document.js +0 -351
  78. package/esm2015/lib/shared/config/word/helpers/render-document-file.js +0 -278
  79. package/esm2015/lib/shared/config/word/helpers/xml-builder.js +0 -1765
  80. package/esm2015/lib/shared/config/word/html-to-docx.js +0 -195
  81. package/esm2015/lib/shared/config/word/index.js +0 -55
  82. package/esm2015/lib/shared/config/word/namespaces.js +0 -37
  83. package/esm2015/lib/shared/config/word/schemas/document.template.js +0 -109
  84. package/esm2015/lib/shared/config/word/schemas/styles.js +0 -149
  85. package/esm2015/lib/shared/config/word/schemas/theme.js +0 -200
  86. package/esm2015/lib/shared/models/AreaModel.js +0 -3
  87. package/esm2015/lib/shared/models/ErrorModel.js +0 -3
  88. package/esm2015/lib/shared/models/RequestOptionsModel.js +0 -11
  89. package/esm2015/lib/shared/models/WordDocumentModel.js +0 -8
  90. package/esm2015/lib/shared/services/AppearanceConfiguration.service.js +0 -37
  91. package/esm2015/lib/shared/services/configuration.service.js +0 -26
  92. package/esm2015/lib/shared/services/controlvalidation.service.js +0 -175
  93. package/esm2015/lib/shared/services/environment.service.js +0 -48
  94. package/esm2015/lib/shared/services/masterlayout.service.js +0 -89
  95. package/esm2015/lib/shared/services/requesthandler.service.js +0 -206
  96. package/esm2015/lib/shared/services/stylesbundle.service.js +0 -56
  97. package/esm2015/lib/shared/services/translate.service.js +0 -13
  98. package/esm2015/lib/shared/services/translationresolver.service.js +0 -20
  99. package/esm2015/lib/shared/services/utility.service.js +0 -92
  100. package/esm2015/lib/shared/services/word-document.service.js +0 -39
  101. package/esm2015/public-api.js +0 -20
  102. package/fesm2015/bnsights-bbsf-utilities.js.map +0 -1
  103. package/lib/shared/models/AreaModel.d.ts +0 -4
  104. package/lib/shared/services/translationresolver.service.d.ts +0 -8
  105. /package/{esm2015/bnsights-bbsf-utilities.js → esm2020/bnsights-bbsf-utilities.mjs} +0 -0
  106. /package/{esm2015/lib/shared/config/word/constants.js → esm2020/lib/shared/config/word/constants.mjs} +0 -0
  107. /package/{esm2015/lib/shared/config/word/helpers/index.js → esm2020/lib/shared/config/word/helpers/index.mjs} +0 -0
  108. /package/{esm2015/lib/shared/config/word/schemas/content-types.js → esm2020/lib/shared/config/word/schemas/content-types.mjs} +0 -0
  109. /package/{esm2015/lib/shared/config/word/schemas/document-rels.js → esm2020/lib/shared/config/word/schemas/document-rels.mjs} +0 -0
  110. /package/{esm2015/lib/shared/config/word/schemas/font-table.js → esm2020/lib/shared/config/word/schemas/font-table.mjs} +0 -0
  111. /package/{esm2015/lib/shared/config/word/schemas/generic-rels.js → esm2020/lib/shared/config/word/schemas/generic-rels.mjs} +0 -0
  112. /package/{esm2015/lib/shared/config/word/schemas/index.js → esm2020/lib/shared/config/word/schemas/index.mjs} +0 -0
  113. /package/{esm2015/lib/shared/config/word/schemas/rels.js → esm2020/lib/shared/config/word/schemas/rels.mjs} +0 -0
  114. /package/{esm2015/lib/shared/config/word/schemas/settings.js → esm2020/lib/shared/config/word/schemas/settings.mjs} +0 -0
  115. /package/{esm2015/lib/shared/config/word/schemas/web-settings.js → esm2020/lib/shared/config/word/schemas/web-settings.mjs} +0 -0
  116. /package/{esm2015/lib/shared/config/word/utils/color-conversion.js → esm2020/lib/shared/config/word/utils/color-conversion.mjs} +0 -0
  117. /package/{esm2015/lib/shared/config/word/utils/list.js → esm2020/lib/shared/config/word/utils/list.mjs} +0 -0
  118. /package/{esm2015/lib/shared/config/word/utils/unit-conversion.js → esm2020/lib/shared/config/word/utils/unit-conversion.mjs} +0 -0
  119. /package/{esm2015/lib/shared/config/word/utils/vnode.js → esm2020/lib/shared/config/word/utils/vnode.mjs} +0 -0
  120. /package/{esm2015/lib/shared/config/word/word-work/templates/documentTemplate.js → esm2020/lib/shared/config/word/word-work/templates/documentTemplate.mjs} +0 -0
  121. /package/{esm2015/lib/shared/config/word/word-work/templates/index.js → esm2020/lib/shared/config/word/word-work/templates/index.mjs} +0 -0
  122. /package/{esm2015/lib/shared/config/word/word-work/templates/mhtDocumentTemplate.js → esm2020/lib/shared/config/word/word-work/templates/mhtDocumentTemplate.mjs} +0 -0
  123. /package/{esm2015/lib/shared/config/word/word-work/templates/mhtPartTemplate.js → esm2020/lib/shared/config/word/word-work/templates/mhtPartTemplate.mjs} +0 -0
  124. /package/{esm2015/lib/shared/config/word/word-work/utils.js → esm2020/lib/shared/config/word/word-work/utils.mjs} +0 -0
  125. /package/lib/shared/models/{ErrorModel.d.ts → error-model.d.ts} +0 -0
  126. /package/lib/shared/models/{RequestOptionsModel.d.ts → request-options-model.d.ts} +0 -0
  127. /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