@esfaenza/core 15.2.0

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 (180) hide show
  1. package/README.md +24 -0
  2. package/components/back-top/back-top.component.d.ts +12 -0
  3. package/components/breadcrumb/breadcrumb.component.d.ts +15 -0
  4. package/components/components.module.d.ts +25 -0
  5. package/components/error/404/pagenotfound.component.d.ts +13 -0
  6. package/components/error/500/servererror.component.d.ts +17 -0
  7. package/components/error/Angular/angularerror.component.d.ts +24 -0
  8. package/components/external-page/external_pages.component.d.ts +21 -0
  9. package/components/index.d.ts +5 -0
  10. package/components/jace-login/jace-login.component.d.ts +7 -0
  11. package/components/navbar/modules-board/jace-modules-board.component.d.ts +13 -0
  12. package/components/navbar/navbar.component.d.ts +60 -0
  13. package/components/navbar/navbar.component.loc.d.ts +8 -0
  14. package/components/page/pages.component.d.ts +23 -0
  15. package/components/public-api.d.ts +13 -0
  16. package/components/redirecter/redirecter.component.d.ts +19 -0
  17. package/components/sidebar/sidebar.component.d.ts +39 -0
  18. package/components/sidebar/sidebar.component.service.d.ts +27 -0
  19. package/directives/directives.module.d.ts +9 -0
  20. package/directives/draggable/draggable.directive.d.ts +13 -0
  21. package/directives/index.d.ts +5 -0
  22. package/directives/public-api.d.ts +4 -0
  23. package/directives/slim-scroll/slim-scroll.directive.d.ts +15 -0
  24. package/directives/widget/widget.directive.d.ts +9 -0
  25. package/domain/index.d.ts +5 -0
  26. package/domain/models/core/classes/ApplicationMenu.d.ts +16 -0
  27. package/domain/models/core/classes/EnvOptions.d.ts +14 -0
  28. package/domain/models/jace/classes/AccountScope.d.ts +9 -0
  29. package/domain/models/jace/classes/ActiveModuleView.d.ts +15 -0
  30. package/domain/models/jace/classes/JaceAccount.d.ts +26 -0
  31. package/domain/models/jace/classes/JaceIdentity.d.ts +17 -0
  32. package/domain/models/jace/classes/JaceModule.d.ts +6 -0
  33. package/domain/models/jace/classes/JacePermission.d.ts +9 -0
  34. package/domain/models/jace/classes/JaceRole.d.ts +11 -0
  35. package/domain/models/jace/classes/User.d.ts +4 -0
  36. package/domain/public-api.d.ts +11 -0
  37. package/domain/tokens.d.ts +16 -0
  38. package/esm2020/components/back-top/back-top.component.mjs +43 -0
  39. package/esm2020/components/breadcrumb/breadcrumb.component.mjs +55 -0
  40. package/esm2020/components/components.module.mjs +74 -0
  41. package/esm2020/components/error/404/pagenotfound.component.mjs +27 -0
  42. package/esm2020/components/error/500/servererror.component.mjs +35 -0
  43. package/esm2020/components/error/Angular/angularerror.component.mjs +50 -0
  44. package/esm2020/components/esfaenza-core-components.mjs +5 -0
  45. package/esm2020/components/external-page/external_pages.component.mjs +46 -0
  46. package/esm2020/components/jace-login/jace-login.component.mjs +17 -0
  47. package/esm2020/components/navbar/modules-board/jace-modules-board.component.mjs +40 -0
  48. package/esm2020/components/navbar/navbar.component.loc.mjs +36 -0
  49. package/esm2020/components/navbar/navbar.component.mjs +179 -0
  50. package/esm2020/components/page/pages.component.mjs +57 -0
  51. package/esm2020/components/public-api.mjs +14 -0
  52. package/esm2020/components/redirecter/redirecter.component.mjs +53 -0
  53. package/esm2020/components/sidebar/sidebar.component.mjs +179 -0
  54. package/esm2020/components/sidebar/sidebar.component.service.mjs +58 -0
  55. package/esm2020/directives/directives.module.mjs +18 -0
  56. package/esm2020/directives/draggable/draggable.directive.mjs +48 -0
  57. package/esm2020/directives/esfaenza-core-directives.mjs +5 -0
  58. package/esm2020/directives/public-api.mjs +5 -0
  59. package/esm2020/directives/slim-scroll/slim-scroll.directive.mjs +40 -0
  60. package/esm2020/directives/widget/widget.directive.mjs +36 -0
  61. package/esm2020/domain/esfaenza-core-domain.mjs +5 -0
  62. package/esm2020/domain/models/core/classes/ApplicationMenu.mjs +26 -0
  63. package/esm2020/domain/models/core/classes/EnvOptions.mjs +4 -0
  64. package/esm2020/domain/models/jace/classes/AccountScope.mjs +8 -0
  65. package/esm2020/domain/models/jace/classes/ActiveModuleView.mjs +9 -0
  66. package/esm2020/domain/models/jace/classes/JaceAccount.mjs +5 -0
  67. package/esm2020/domain/models/jace/classes/JaceIdentity.mjs +16 -0
  68. package/esm2020/domain/models/jace/classes/JaceModule.mjs +3 -0
  69. package/esm2020/domain/models/jace/classes/JacePermission.mjs +3 -0
  70. package/esm2020/domain/models/jace/classes/JaceRole.mjs +3 -0
  71. package/esm2020/domain/models/jace/classes/User.mjs +3 -0
  72. package/esm2020/domain/public-api.mjs +12 -0
  73. package/esm2020/domain/tokens.mjs +11 -0
  74. package/esm2020/esfaenza-core.mjs +5 -0
  75. package/esm2020/helpers/classes/ResizeListener.mjs +38 -0
  76. package/esm2020/helpers/esfaenza-core-helpers.mjs +5 -0
  77. package/esm2020/helpers/public-api.mjs +2 -0
  78. package/esm2020/lib/app.component.mjs +26 -0
  79. package/esm2020/lib/core.module.mjs +227 -0
  80. package/esm2020/modules/classes/_base.module.mjs +27 -0
  81. package/esm2020/modules/classes/t_c.module.mjs +85 -0
  82. package/esm2020/modules/esfaenza-core-modules.mjs +5 -0
  83. package/esm2020/modules/public-api.mjs +3 -0
  84. package/esm2020/pipes/esfaenza-core-pipes.mjs +5 -0
  85. package/esm2020/pipes/included_in/included_in.pipe.mjs +17 -0
  86. package/esm2020/pipes/pipes.module.mjs +20 -0
  87. package/esm2020/pipes/public-api.mjs +7 -0
  88. package/esm2020/pipes/safe_html/safe_html.pipe.mjs +18 -0
  89. package/esm2020/pipes/safe_script/safe_script.pipe.mjs +18 -0
  90. package/esm2020/pipes/safe_style/safe_style.pipe.mjs +18 -0
  91. package/esm2020/pipes/safe_url/safe_url.pipe.mjs +18 -0
  92. package/esm2020/public-api.mjs +4 -0
  93. package/esm2020/services/classes/app.accesstoken.mjs +51 -0
  94. package/esm2020/services/classes/app.errorhandler.mjs +41 -0
  95. package/esm2020/services/classes/app.event.mjs +27 -0
  96. package/esm2020/services/classes/app.httpextensions.loc.mjs +15 -0
  97. package/esm2020/services/classes/app.httpextensions.mjs +90 -0
  98. package/esm2020/services/classes/app.routeguard.mjs +22 -0
  99. package/esm2020/services/classes/app.session.mjs +33 -0
  100. package/esm2020/services/classes/app.state.mjs +172 -0
  101. package/esm2020/services/classes/preferences/app.cache.persistor.mjs +94 -0
  102. package/esm2020/services/classes/preferences/app.preference.persistor.mjs +94 -0
  103. package/esm2020/services/esfaenza-core-services.mjs +5 -0
  104. package/esm2020/services/public-api.mjs +10 -0
  105. package/fesm2015/esfaenza-core-components.mjs +870 -0
  106. package/fesm2015/esfaenza-core-components.mjs.map +1 -0
  107. package/fesm2015/esfaenza-core-directives.mjs +138 -0
  108. package/fesm2015/esfaenza-core-directives.mjs.map +1 -0
  109. package/fesm2015/esfaenza-core-domain.mjs +99 -0
  110. package/fesm2015/esfaenza-core-domain.mjs.map +1 -0
  111. package/fesm2015/esfaenza-core-helpers.mjs +44 -0
  112. package/fesm2015/esfaenza-core-helpers.mjs.map +1 -0
  113. package/fesm2015/esfaenza-core-modules.mjs +112 -0
  114. package/fesm2015/esfaenza-core-modules.mjs.map +1 -0
  115. package/fesm2015/esfaenza-core-pipes.mjs +97 -0
  116. package/fesm2015/esfaenza-core-pipes.mjs.map +1 -0
  117. package/fesm2015/esfaenza-core-services.mjs +598 -0
  118. package/fesm2015/esfaenza-core-services.mjs.map +1 -0
  119. package/fesm2015/esfaenza-core.mjs +251 -0
  120. package/fesm2015/esfaenza-core.mjs.map +1 -0
  121. package/fesm2020/esfaenza-core-components.mjs +863 -0
  122. package/fesm2020/esfaenza-core-components.mjs.map +1 -0
  123. package/fesm2020/esfaenza-core-directives.mjs +138 -0
  124. package/fesm2020/esfaenza-core-directives.mjs.map +1 -0
  125. package/fesm2020/esfaenza-core-domain.mjs +98 -0
  126. package/fesm2020/esfaenza-core-domain.mjs.map +1 -0
  127. package/fesm2020/esfaenza-core-helpers.mjs +44 -0
  128. package/fesm2020/esfaenza-core-helpers.mjs.map +1 -0
  129. package/fesm2020/esfaenza-core-modules.mjs +112 -0
  130. package/fesm2020/esfaenza-core-modules.mjs.map +1 -0
  131. package/fesm2020/esfaenza-core-pipes.mjs +97 -0
  132. package/fesm2020/esfaenza-core-pipes.mjs.map +1 -0
  133. package/fesm2020/esfaenza-core-services.mjs +595 -0
  134. package/fesm2020/esfaenza-core-services.mjs.map +1 -0
  135. package/fesm2020/esfaenza-core.mjs +251 -0
  136. package/fesm2020/esfaenza-core.mjs.map +1 -0
  137. package/helpers/classes/ResizeListener.d.ts +12 -0
  138. package/helpers/index.d.ts +5 -0
  139. package/helpers/public-api.d.ts +1 -0
  140. package/index.d.ts +5 -0
  141. package/lib/app.component.d.ts +12 -0
  142. package/lib/core.module.d.ts +82 -0
  143. package/modules/classes/_base.module.d.ts +4 -0
  144. package/modules/classes/t_c.module.d.ts +19 -0
  145. package/modules/index.d.ts +5 -0
  146. package/modules/public-api.d.ts +2 -0
  147. package/package.json +115 -0
  148. package/pipes/included_in/included_in.pipe.d.ts +7 -0
  149. package/pipes/index.d.ts +5 -0
  150. package/pipes/pipes.module.d.ts +11 -0
  151. package/pipes/public-api.d.ts +6 -0
  152. package/pipes/safe_html/safe_html.pipe.d.ts +10 -0
  153. package/pipes/safe_script/safe_script.pipe.d.ts +10 -0
  154. package/pipes/safe_style/safe_style.pipe.d.ts +10 -0
  155. package/pipes/safe_url/safe_url.pipe.d.ts +10 -0
  156. package/public-api.d.ts +3 -0
  157. package/services/classes/app.accesstoken.d.ts +15 -0
  158. package/services/classes/app.errorhandler.d.ts +11 -0
  159. package/services/classes/app.event.d.ts +10 -0
  160. package/services/classes/app.httpextensions.d.ts +34 -0
  161. package/services/classes/app.httpextensions.loc.d.ts +8 -0
  162. package/services/classes/app.routeguard.d.ts +10 -0
  163. package/services/classes/app.session.d.ts +14 -0
  164. package/services/classes/app.state.d.ts +59 -0
  165. package/services/classes/preferences/app.cache.persistor.d.ts +25 -0
  166. package/services/classes/preferences/app.preference.persistor.d.ts +25 -0
  167. package/services/index.d.ts +5 -0
  168. package/services/public-api.d.ts +9 -0
  169. package/theme/initial.scss +48 -0
  170. package/theme/styles/_base.scss +257 -0
  171. package/theme/styles/_bootstrap-override.scss +1624 -0
  172. package/theme/styles/_font.scss +86 -0
  173. package/theme/styles/_fullcalendar-override.scss +86 -0
  174. package/theme/styles/_libs-override.scss +97 -0
  175. package/theme/styles/_material-override.scss +231 -0
  176. package/theme/styles/_mixins.scss +50 -0
  177. package/theme/styles/_preloader.scss +119 -0
  178. package/theme/styles/_project-override.scss +2383 -0
  179. package/theme/styles/_variables.scss +52 -0
  180. package/theme/styles/skins/_blue.scss +16 -0
@@ -0,0 +1,51 @@
1
+ // Angular
2
+ import { Inject, Injectable, Optional } from "@angular/core";
3
+ // Applicazione
4
+ import { JaceIdentity, USE_FAKE_ACCESS_TOKEN } from "@esfaenza/core/domain";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "ngx-cookie-service";
7
+ export class TokenService {
8
+ constructor(cs, USE_FAKE_ACCESS_TOKEN) {
9
+ this.cs = cs;
10
+ this.USE_FAKE_ACCESS_TOKEN = USE_FAKE_ACCESS_TOKEN;
11
+ }
12
+ clearTokens() {
13
+ this.cs.delete("access_token");
14
+ }
15
+ getAccessToken() {
16
+ return this.USE_FAKE_ACCESS_TOKEN ? this.getFakeToken() : this.cs.get("accessToken");
17
+ }
18
+ getJaceIdentity() {
19
+ let token = this.USE_FAKE_ACCESS_TOKEN ? this.getFakeToken() : this.cs.get("accessToken");
20
+ if (!token)
21
+ return null;
22
+ let base64Url = token.split(".")[1];
23
+ let base64 = base64Url.replace("-", "+").replace("_", "/");
24
+ let tokenData = JSON.parse(decodeURIComponent(window.atob(base64).split("").map(c => "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2)).join("")));
25
+ let identity = new JaceIdentity(this.accountScope);
26
+ identity.IdAccount = tokenData.ACCOUNTID;
27
+ identity.IdUser = tokenData.USERID;
28
+ identity.DsUser = tokenData.USERNAME;
29
+ identity.FullName = tokenData.USERDESCRIPTION;
30
+ identity.Idtenant = tokenData.TENANT;
31
+ identity.TenantName = tokenData.TENANTNAME;
32
+ identity.ExpirationTime = new Date(tokenData.exp * 1000); //unix-epoch in secondi -> millisecondi
33
+ return identity;
34
+ }
35
+ //Accesstoken fittizio ma valido, per simulare la connession corretta col backend
36
+ getFakeToken() {
37
+ return "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYmYiOjE1OTA0MTU4NDYsImV4cCI6MTk5MDQyMDA2NSwiaXNzIjoiaHR0cDovL2F1dGhhcGlzdGFnaW5nYS5qYWNlLmVuZXJneXNvZnR3YXJlLnByaXYiLCJhdWQiOlsiaHR0cDovL2F1dGhhcGlzdGFnaW5nYS5qYWNlLmVuZXJneXNvZnR3YXJlLnByaXYvcmVzb3VyY2VzIiwiYXV0aGVudGljYXRpbyJdLCJjbGllbnRfaWQiOiJtZXRlcmluZ3N0YWdpbmciLCJzdWIiOiIxMDAzIiwiYXV0aF90aW1lIjoxNTkwNDE1ODQ2LCJpZHAiOiJsb2NhbCIsIkFDQ09VTlRJRCI6IjEwMDMiLCJVU0VSSUQiOiIyNTkiLCJVU0VSREVTQ1JJUFRJT04iOiJUZXN0IFVzZXIiLCJVU0VSTkFNRSI6IlRFU1QiLCJURU5BTlQiOiJGWCIsIlRFTkFOVE5BTUUiOiJGZW5peCBTcmwiLCJyb2xlIjpbIkJhY2tvZmZpY2UiLCJEYXRhIE1hbmFnZXIiLCJUcmFkaW5nIiwiUmVtaXQgTWFuYWdlciIsIlRlbmFudCBSZWFkZXIiLCJDb21wbC4gQVJFUkEgUmVhZGVyIiwiQ29tcGwuIEFSRVJBIFdyaXRlciBMMSIsIkNvbXBsLiBBUkVSQSBXcml0ZXIgTDIiLCJKYWNlIEFkbWluIl0sIk1PRFVMRSI6WyIzNiIsIjM3IiwiMTQiLCI1IiwiMzIiLCIxNSIsIjQyIiwiOCIsIjE3IiwiMTEiLCIyMSIsIjkiLCIzOCIsIjE4IiwiNyIsIjM0IiwiMTYiLCIyMCIsIjE5IiwiMSIsIjIiLCIzMSIsIjEyIiwiMTAiLCIzMyIsIjQwIiwiMjIiLCIxMyIsIjYiXSwiUEVSTUlTU0lPTiI6WyJleHRyYWN0X2RhdGEiLCJtZG1fcmVhZCIsIm1kbV9hZHZfb3AiLCJtZG1fY2ZnX2Jhc2UiLCJjcmVhdGVfdHJhZGUiLCJtZG1fbWFzc19kZWwiLCJzZW5kX2NvbW0iLCJtZG1fZmN0IiwibWRtX2NmZ19hZHYiLCJtZG1fY2ZnX3JlYWQiLCJtYW5hZ2VfZWxlIiwibWFuYWdlX2dhcyIsImNvbmZpcm1fdHJhZGUiLCJtZG1fY3VzdG9taXplIiwibmV3X2NvbW0iLCJtZG1fbWFzc19mY3QiLCJtZG1fb3AiLCJ2aWV3X2JpbGxpbmciLCJtZG1fbWFzc19vcCIsIm1kbV9hZHZfcmVhZCJdLCJqdGkiOiIwZTUzMDc1NjE2MDZlNDQ0ZTI4ODViMTFhMzE0NDQyMSIsInNjb3BlIjpbImF1dGgiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsicGFzc3dvcmQiXSwiaWF0IjoxNTkwNDE2NDY1fQ.MNcphwkIwvLFDDpLaFDN3GK11lgT2aqvXa8s7bQJgdE";
38
+ }
39
+ }
40
+ TokenService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TokenService, deps: [{ token: i1.CookieService }, { token: USE_FAKE_ACCESS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
41
+ TokenService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TokenService, providedIn: "root" });
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TokenService, decorators: [{
43
+ type: Injectable,
44
+ args: [{ providedIn: "root" }]
45
+ }], ctorParameters: function () { return [{ type: i1.CookieService }, { type: undefined, decorators: [{
46
+ type: Optional
47
+ }, {
48
+ type: Inject,
49
+ args: [USE_FAKE_ACCESS_TOKEN]
50
+ }] }]; } });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmFjY2Vzc3Rva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zZXJ2aWNlcy9zcmMvY2xhc3Nlcy9hcHAuYWNjZXNzdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUs3RCxlQUFlO0FBQ2YsT0FBTyxFQUFnQixZQUFZLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBRzFGLE1BQU0sT0FBTyxZQUFZO0lBSXJCLFlBQW1CLEVBQWlCLEVBQXFELHFCQUE4QjtRQUFwRyxPQUFFLEdBQUYsRUFBRSxDQUFlO1FBQXFELDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBUztJQUFJLENBQUM7SUFFNUgsV0FBVztRQUNQLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxjQUFjO1FBQ1YsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLEtBQUs7WUFDTixPQUFPLElBQUksQ0FBQztRQUVoQixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkosSUFBSSxRQUFRLEdBQWlCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRSxRQUFRLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDekMsUUFBUSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ25DLFFBQVEsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNyQyxRQUFRLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUM7UUFDOUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3JDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztRQUMzQyxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQSx1Q0FBdUM7UUFFaEcsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELGlGQUFpRjtJQUN6RSxZQUFZO1FBQ2hCLE9BQU8sNi9DQUE2L0MsQ0FBQztJQUN6Z0QsQ0FBQzs7eUdBdENRLFlBQVksK0NBSXFDLHFCQUFxQjs2R0FKdEUsWUFBWSxjQURDLE1BQU07MkZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFLUyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBEaXJldHRpdmUsIENvbXBvbmVudGksIExpYnJlcmllXHJcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tIFwibmd4LWNvb2tpZS1zZXJ2aWNlXCI7XHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgQWNjb3VudFNjb3BlLCBKYWNlSWRlbnRpdHksIFVTRV9GQUtFX0FDQ0VTU19UT0tFTiB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9kb21haW5cIjtcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcclxuZXhwb3J0IGNsYXNzIFRva2VuU2VydmljZSB7XHJcbiAgICBcclxuICAgIHB1YmxpYyBhY2NvdW50U2NvcGU6IEFjY291bnRTY29wZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY3M6IENvb2tpZVNlcnZpY2UsIEBPcHRpb25hbCgpIEBJbmplY3QoVVNFX0ZBS0VfQUNDRVNTX1RPS0VOKSBwcml2YXRlIFVTRV9GQUtFX0FDQ0VTU19UT0tFTjogYm9vbGVhbikgeyB9XHJcblxyXG4gICAgY2xlYXJUb2tlbnMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jcy5kZWxldGUoXCJhY2Nlc3NfdG9rZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWNjZXNzVG9rZW4oKTogU3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5VU0VfRkFLRV9BQ0NFU1NfVE9LRU4gPyB0aGlzLmdldEZha2VUb2tlbigpIDogdGhpcy5jcy5nZXQoXCJhY2Nlc3NUb2tlblwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRKYWNlSWRlbnRpdHkoKTogSmFjZUlkZW50aXR5IHtcclxuICAgICAgICBsZXQgdG9rZW4gPSB0aGlzLlVTRV9GQUtFX0FDQ0VTU19UT0tFTiA/IHRoaXMuZ2V0RmFrZVRva2VuKCkgOiB0aGlzLmNzLmdldChcImFjY2Vzc1Rva2VuXCIpO1xyXG4gICAgICAgIGlmICghdG9rZW4pXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICBsZXQgYmFzZTY0VXJsID0gdG9rZW4uc3BsaXQoXCIuXCIpWzFdO1xyXG4gICAgICAgIGxldCBiYXNlNjQgPSBiYXNlNjRVcmwucmVwbGFjZShcIi1cIiwgXCIrXCIpLnJlcGxhY2UoXCJfXCIsIFwiL1wiKTtcclxuICAgICAgICBsZXQgdG9rZW5EYXRhID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQod2luZG93LmF0b2IoYmFzZTY0KS5zcGxpdChcIlwiKS5tYXAoYyA9PiBcIiVcIiArIChcIjAwXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtMikpLmpvaW4oXCJcIikpKTtcclxuXHJcbiAgICAgICAgbGV0IGlkZW50aXR5OiBKYWNlSWRlbnRpdHkgPSBuZXcgSmFjZUlkZW50aXR5KHRoaXMuYWNjb3VudFNjb3BlKTtcclxuICAgICAgICBpZGVudGl0eS5JZEFjY291bnQgPSB0b2tlbkRhdGEuQUNDT1VOVElEO1xyXG4gICAgICAgIGlkZW50aXR5LklkVXNlciA9IHRva2VuRGF0YS5VU0VSSUQ7XHJcbiAgICAgICAgaWRlbnRpdHkuRHNVc2VyID0gdG9rZW5EYXRhLlVTRVJOQU1FO1xyXG4gICAgICAgIGlkZW50aXR5LkZ1bGxOYW1lID0gdG9rZW5EYXRhLlVTRVJERVNDUklQVElPTjtcclxuICAgICAgICBpZGVudGl0eS5JZHRlbmFudCA9IHRva2VuRGF0YS5URU5BTlQ7XHJcbiAgICAgICAgaWRlbnRpdHkuVGVuYW50TmFtZSA9IHRva2VuRGF0YS5URU5BTlROQU1FO1xyXG4gICAgICAgIGlkZW50aXR5LkV4cGlyYXRpb25UaW1lID0gbmV3IERhdGUodG9rZW5EYXRhLmV4cCAqIDEwMDApOy8vdW5peC1lcG9jaCBpbiBzZWNvbmRpIC0+IG1pbGxpc2Vjb25kaVxyXG5cclxuICAgICAgICByZXR1cm4gaWRlbnRpdHk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9BY2Nlc3N0b2tlbiBmaXR0aXppbyBtYSB2YWxpZG8sIHBlciBzaW11bGFyZSBsYSBjb25uZXNzaW9uIGNvcnJldHRhIGNvbCBiYWNrZW5kXHJcbiAgICBwcml2YXRlIGdldEZha2VUb2tlbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBcImV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVekkxTmlKOS5leUp1WW1ZaU9qRTFPVEEwTVRVNE5EWXNJbVY0Y0NJNk1UazVNRFF5TURBMk5Td2lhWE56SWpvaWFIUjBjRG92TDJGMWRHaGhjR2x6ZEdGbmFXNW5ZUzVxWVdObExtVnVaWEpuZVhOdlpuUjNZWEpsTG5CeWFYWWlMQ0poZFdRaU9sc2lhSFIwY0RvdkwyRjFkR2hoY0dsemRHRm5hVzVuWVM1cVlXTmxMbVZ1WlhKbmVYTnZablIzWVhKbExuQnlhWFl2Y21WemIzVnlZMlZ6SWl3aVlYVjBhR1Z1ZEdsallYUnBieUpkTENKamJHbGxiblJmYVdRaU9pSnRaWFJsY21sdVozTjBZV2RwYm1jaUxDSnpkV0lpT2lJeE1EQXpJaXdpWVhWMGFGOTBhVzFsSWpveE5Ua3dOREUxT0RRMkxDSnBaSEFpT2lKc2IyTmhiQ0lzSWtGRFEwOVZUbFJKUkNJNklqRXdNRE1pTENKVlUwVlNTVVFpT2lJeU5Ua2lMQ0pWVTBWU1JFVlRRMUpKVUZSSlQwNGlPaUpVWlhOMElGVnpaWElpTENKVlUwVlNUa0ZOUlNJNklsUkZVMVFpTENKVVJVNUJUbFFpT2lKR1dDSXNJbFJGVGtGT1ZFNUJUVVVpT2lKR1pXNXBlQ0JUY213aUxDSnliMnhsSWpwYklrSmhZMnR2Wm1acFkyVWlMQ0pFWVhSaElFMWhibUZuWlhJaUxDSlVjbUZrYVc1bklpd2lVbVZ0YVhRZ1RXRnVZV2RsY2lJc0lsUmxibUZ1ZENCU1pXRmtaWElpTENKRGIyMXdiQzRnUVZKRlVrRWdVbVZoWkdWeUlpd2lRMjl0Y0d3dUlFRlNSVkpCSUZkeWFYUmxjaUJNTVNJc0lrTnZiWEJzTGlCQlVrVlNRU0JYY21sMFpYSWdURElpTENKS1lXTmxJRUZrYldsdUlsMHNJazFQUkZWTVJTSTZXeUl6TmlJc0lqTTNJaXdpTVRRaUxDSTFJaXdpTXpJaUxDSXhOU0lzSWpReUlpd2lPQ0lzSWpFM0lpd2lNVEVpTENJeU1TSXNJamtpTENJek9DSXNJakU0SWl3aU55SXNJak0wSWl3aU1UWWlMQ0l5TUNJc0lqRTVJaXdpTVNJc0lqSWlMQ0l6TVNJc0lqRXlJaXdpTVRBaUxDSXpNeUlzSWpRd0lpd2lNaklpTENJeE15SXNJallpWFN3aVVFVlNUVWxUVTBsUFRpSTZXeUpsZUhSeVlXTjBYMlJoZEdFaUxDSnRaRzFmY21WaFpDSXNJbTFrYlY5aFpIWmZiM0FpTENKdFpHMWZZMlpuWDJKaGMyVWlMQ0pqY21WaGRHVmZkSEpoWkdVaUxDSnRaRzFmYldGemMxOWtaV3dpTENKelpXNWtYMk52YlcwaUxDSnRaRzFmWm1OMElpd2liV1J0WDJObVoxOWhaSFlpTENKdFpHMWZZMlpuWDNKbFlXUWlMQ0p0WVc1aFoyVmZaV3hsSWl3aWJXRnVZV2RsWDJkaGN5SXNJbU52Ym1acGNtMWZkSEpoWkdVaUxDSnRaRzFmWTNWemRHOXRhWHBsSWl3aWJtVjNYMk52YlcwaUxDSnRaRzFmYldGemMxOW1ZM1FpTENKdFpHMWZiM0FpTENKMmFXVjNYMkpwYkd4cGJtY2lMQ0p0WkcxZmJXRnpjMTl2Y0NJc0ltMWtiVjloWkhaZmNtVmhaQ0pkTENKcWRHa2lPaUl3WlRVek1EYzFOakUyTURabE5EUTBaVEk0T0RWaU1URmhNekUwTkRReU1TSXNJbk5qYjNCbElqcGJJbUYxZEdnaUxDSnZabVpzYVc1bFgyRmpZMlZ6Y3lKZExDSmhiWElpT2xzaWNHRnpjM2R2Y21RaVhTd2lhV0YwSWpveE5Ua3dOREUyTkRZMWZRLk1OY3Bod2tJd3ZMRkREcExhRkROM0dLMTFsZ1QyYXF2WGE4czdiUUpnZEVcIjtcclxuICAgIH1cclxufSJdfQ==
@@ -0,0 +1,41 @@
1
+ // Angular
2
+ import { Injectable } from "@angular/core";
3
+ import { HttpErrorResponse } from "@angular/common/http";
4
+ import { Router } from "@angular/router";
5
+ import * as i0 from "@angular/core";
6
+ export class APPErrorHandler {
7
+ constructor(injector) {
8
+ this.injector = injector;
9
+ }
10
+ handleError(error) {
11
+ if (this.router == null)
12
+ this.router = this.injector.get(Router);
13
+ //Ignoro eventuali errori di javascript quando il redirect è attivo
14
+ if (myconfig && myconfig.redirectInProgress) {
15
+ console.log("Javascript error on redirect in progress, ignoring this event");
16
+ return;
17
+ }
18
+ //In caso io abbia impostato succesresultmandatory nell'httprequest e questa abbia dato errore tiro fuori un exception che dev'essere mostrata come si deve
19
+ var newError = "";
20
+ if (!error.message && !error.stack)
21
+ newError = error;
22
+ else if (error instanceof HttpErrorResponse)
23
+ newError = error.message;
24
+ else
25
+ newError = error.stack && error.stack.length > 1000 ? error.stack.substring(0, 999) + "[...]" : error.stack;
26
+ var pars = { errorMessage: this.b64EncodeUnicode(newError), fromUrl: this.router.url };
27
+ this.router.navigate(["/anerr", pars]);
28
+ }
29
+ b64EncodeUnicode(str) {
30
+ // first we use encodeURIComponent to get percent-encoded UTF-8,
31
+ // then we convert the percent encodings into raw bytes which
32
+ // can be fed into btoa.
33
+ return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => String.fromCharCode(("0x" + p1))));
34
+ }
35
+ }
36
+ APPErrorHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: APPErrorHandler, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
37
+ APPErrorHandler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: APPErrorHandler });
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: APPErrorHandler, decorators: [{
39
+ type: Injectable
40
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmVycm9yaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc2VydmljZXMvc3JjL2NsYXNzZXMvYXBwLmVycm9yaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFnQixVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQU96QyxNQUFNLE9BQU8sZUFBZTtJQUd4QixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQUksQ0FBQztJQUUzQyxXQUFXLENBQUMsS0FBSztRQUNiLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJO1lBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUMsbUVBQW1FO1FBQ25FLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtZQUN6QyxPQUFPLENBQUMsR0FBRyxDQUFDLCtEQUErRCxDQUFDLENBQUM7WUFDN0UsT0FBTztTQUNWO1FBRUQsMkpBQTJKO1FBQzNKLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO1lBQzlCLFFBQVEsR0FBRyxLQUFLLENBQUE7YUFDZixJQUFJLEtBQUssWUFBWSxpQkFBaUI7WUFDdkMsUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7O1lBRXpCLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUVoSCxJQUFJLElBQUksR0FBRyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBRztRQUNoQixnRUFBZ0U7UUFDaEUsNkRBQTZEO1FBQzdELHdCQUF3QjtRQUN4QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFILENBQUM7OzRHQWpDUSxlQUFlO2dIQUFmLGVBQWU7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVyLCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbmltcG9ydCB7IEVudk9wdGlvbnMgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvZG9tYWluXCI7XHJcblxyXG5kZWNsYXJlIHZhciBteWNvbmZpZzogRW52T3B0aW9uc1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQVBQRXJyb3JIYW5kbGVyIGltcGxlbWVudHMgRXJyb3JIYW5kbGVyIHtcclxuICAgIHByaXZhdGUgcm91dGVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7IH1cclxuXHJcbiAgICBoYW5kbGVFcnJvcihlcnJvcikge1xyXG4gICAgICAgIGlmICh0aGlzLnJvdXRlciA9PSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLnJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcik7XHJcblxyXG4gICAgICAgIC8vSWdub3JvIGV2ZW50dWFsaSBlcnJvcmkgZGkgamF2YXNjcmlwdCBxdWFuZG8gaWwgcmVkaXJlY3Qgw6ggYXR0aXZvXHJcbiAgICAgICAgaWYgKG15Y29uZmlnICYmIG15Y29uZmlnLnJlZGlyZWN0SW5Qcm9ncmVzcykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkphdmFzY3JpcHQgZXJyb3Igb24gcmVkaXJlY3QgaW4gcHJvZ3Jlc3MsIGlnbm9yaW5nIHRoaXMgZXZlbnRcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vSW4gY2FzbyBpbyBhYmJpYSBpbXBvc3RhdG8gc3VjY2VzcmVzdWx0bWFuZGF0b3J5IG5lbGwnaHR0cHJlcXVlc3QgZSBxdWVzdGEgYWJiaWEgZGF0byBlcnJvcmUgdGlybyBmdW9yaSB1biBleGNlcHRpb24gY2hlIGRldidlc3NlcmUgbW9zdHJhdGEgY29tZSBzaSBkZXZlXHJcbiAgICAgICAgdmFyIG5ld0Vycm9yID0gXCJcIjtcclxuICAgICAgICBpZiAoIWVycm9yLm1lc3NhZ2UgJiYgIWVycm9yLnN0YWNrKVxyXG4gICAgICAgICAgICBuZXdFcnJvciA9IGVycm9yXHJcbiAgICAgICAgZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSlcclxuICAgICAgICAgICAgbmV3RXJyb3IgPSBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgbmV3RXJyb3IgPSBlcnJvci5zdGFjayAmJiBlcnJvci5zdGFjay5sZW5ndGggPiAxMDAwID8gZXJyb3Iuc3RhY2suc3Vic3RyaW5nKDAsIDk5OSkgKyBcIlsuLi5dXCIgOiBlcnJvci5zdGFjaztcclxuXHJcbiAgICAgICAgdmFyIHBhcnMgPSB7IGVycm9yTWVzc2FnZTogdGhpcy5iNjRFbmNvZGVVbmljb2RlKG5ld0Vycm9yKSwgZnJvbVVybDogdGhpcy5yb3V0ZXIudXJsIH07XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL2FuZXJyXCIsIHBhcnNdKTtcclxuICAgIH1cclxuXHJcbiAgICBiNjRFbmNvZGVVbmljb2RlKHN0cikge1xyXG4gICAgICAgIC8vIGZpcnN0IHdlIHVzZSBlbmNvZGVVUklDb21wb25lbnQgdG8gZ2V0IHBlcmNlbnQtZW5jb2RlZCBVVEYtOCxcclxuICAgICAgICAvLyB0aGVuIHdlIGNvbnZlcnQgdGhlIHBlcmNlbnQgZW5jb2RpbmdzIGludG8gcmF3IGJ5dGVzIHdoaWNoXHJcbiAgICAgICAgLy8gY2FuIGJlIGZlZCBpbnRvIGJ0b2EuXHJcbiAgICAgICAgcmV0dXJuIGJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvJShbMC05QS1GXXsyfSkvZywgKG1hdGNoLCBwMSkgPT4gU3RyaW5nLmZyb21DaGFyQ29kZSg8YW55PihcIjB4XCIgKyBwMSkpKSk7XHJcbiAgICB9XHJcbn0iXX0=
@@ -0,0 +1,27 @@
1
+ // Angular
2
+ import { Injectable } from "@angular/core";
3
+ import * as i0 from "@angular/core";
4
+ export class OutZoneEventPlugin {
5
+ constructor(zone) {
6
+ this.zone = zone;
7
+ }
8
+ supports(eventName) {
9
+ return eventName.endsWith('out-zone');
10
+ }
11
+ addEventListener(element, eventName, originalHandler) {
12
+ let eventOriginalName = eventName.split('.')[0];
13
+ let standardHandler = (event) => originalHandler(event);
14
+ if (eventName.endsWith('out-zone'))
15
+ this.zone.runOutsideAngular(() => { element.addEventListener(eventOriginalName, standardHandler); });
16
+ else
17
+ element.addEventListener(eventOriginalName, standardHandler);
18
+ return () => element.removeEventListener(eventOriginalName, standardHandler);
19
+ }
20
+ }
21
+ OutZoneEventPlugin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OutZoneEventPlugin, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
22
+ OutZoneEventPlugin.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OutZoneEventPlugin, providedIn: 'root' });
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OutZoneEventPlugin, decorators: [{
24
+ type: Injectable,
25
+ args: [{ providedIn: 'root' }]
26
+ }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zZXJ2aWNlcy9zcmMvY2xhc3Nlcy9hcHAuZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7O0FBR25ELE1BQU0sT0FBTyxrQkFBa0I7SUFFM0IsWUFBb0IsSUFBWTtRQUFaLFNBQUksR0FBSixJQUFJLENBQVE7SUFBSSxDQUFDO0lBRXJDLFFBQVEsQ0FBQyxTQUFpQjtRQUN0QixPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQW9CLEVBQUUsU0FBaUIsRUFBRSxlQUF5QjtRQUMvRSxJQUFJLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsSUFBSSxlQUFlLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM5RCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRXJHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLENBQUMsQ0FBQTtRQUVoRSxPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNqRixDQUFDOzsrR0FqQlEsa0JBQWtCO21IQUFsQixrQkFBa0IsY0FETCxNQUFNOzJGQUNuQixrQkFBa0I7a0JBRDlCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE91dFpvbmVFdmVudFBsdWdpbiB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHsgfVxyXG5cclxuICAgIHN1cHBvcnRzKGV2ZW50TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50TmFtZS5lbmRzV2l0aCgnb3V0LXpvbmUnKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRFdmVudExpc3RlbmVyKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgb3JpZ2luYWxIYW5kbGVyOiBGdW5jdGlvbik6IEZ1bmN0aW9uIHtcclxuICAgICAgICBsZXQgZXZlbnRPcmlnaW5hbE5hbWUgPSBldmVudE5hbWUuc3BsaXQoJy4nKVswXTtcclxuICAgICAgICBsZXQgc3RhbmRhcmRIYW5kbGVyID0gKGV2ZW50OiBFdmVudCkgPT4gb3JpZ2luYWxIYW5kbGVyKGV2ZW50KVxyXG4gICAgICAgIGlmIChldmVudE5hbWUuZW5kc1dpdGgoJ291dC16b25lJykpXHJcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7IGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE9yaWdpbmFsTmFtZSwgc3RhbmRhcmRIYW5kbGVyKTsgfSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRPcmlnaW5hbE5hbWUsIHN0YW5kYXJkSGFuZGxlcilcclxuXHJcbiAgICAgICAgcmV0dXJuICgpID0+IGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE9yaWdpbmFsTmFtZSwgc3RhbmRhcmRIYW5kbGVyKTtcclxuICAgIH1cclxufSJdfQ==
@@ -0,0 +1,15 @@
1
+ import { Injectable } from "@angular/core";
2
+ import { LocalizationService } from "@esfaenza/localizations";
3
+ import * as i0 from "@angular/core";
4
+ export class HTTPServiceExtensionsLoc extends LocalizationService {
5
+ constructor(injector) {
6
+ super(injector);
7
+ super.set("it->en", "Il Server sembra essere offline, prova a ricaricare la pagina", ["Server seems to be offline, try to reload this page"]);
8
+ }
9
+ }
10
+ HTTPServiceExtensionsLoc.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HTTPServiceExtensionsLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
11
+ HTTPServiceExtensionsLoc.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HTTPServiceExtensionsLoc });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HTTPServiceExtensionsLoc, decorators: [{
13
+ type: Injectable
14
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmh0dHBleHRlbnNpb25zLmxvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc2VydmljZXMvc3JjL2NsYXNzZXMvYXBwLmh0dHBleHRlbnNpb25zLmxvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUc5RCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsbUJBQW1CO0lBQzdELFlBQVksUUFBa0I7UUFDMUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hCLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLCtEQUErRCxFQUFFLENBQUMscURBQXFELENBQUMsQ0FBQyxDQUFDO0lBQ2xKLENBQUM7O3FIQUpRLHdCQUF3Qjt5SEFBeEIsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEhUVFBTZXJ2aWNlRXh0ZW5zaW9uc0xvYyBleHRlbmRzIExvY2FsaXphdGlvblNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgICAgIHN1cGVyLnNldChcIml0LT5lblwiLCBcIklsIFNlcnZlciBzZW1icmEgZXNzZXJlIG9mZmxpbmUsIHByb3ZhIGEgcmljYXJpY2FyZSBsYSBwYWdpbmFcIiwgW1wiU2VydmVyIHNlZW1zIHRvIGJlIG9mZmxpbmUsIHRyeSB0byByZWxvYWQgdGhpcyBwYWdlXCJdKTtcclxuICAgIH1cclxufSJdfQ==
@@ -0,0 +1,90 @@
1
+ // Angular
2
+ import { Injectable } from "@angular/core";
3
+ // Applicazione
4
+ import { HTTPServiceExtensionsLoc } from "./app.httpextensions.loc";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@esfaenza/localizations";
7
+ import * as i2 from "./app.accesstoken";
8
+ import * as i3 from "./app.state";
9
+ import * as i4 from "@angular/router";
10
+ import * as i5 from "@esfaenza/access-control";
11
+ import * as i6 from "@esfaenza/extensions";
12
+ export class HTTPServiceExtensions {
13
+ constructor(lc, tks, as, router, ac, msgs) {
14
+ this.lc = lc;
15
+ this.tks = tks;
16
+ this.as = as;
17
+ this.router = router;
18
+ this.ac = ac;
19
+ this.msgs = msgs;
20
+ this.lc = this.lc.generateFromType(HTTPServiceExtensionsLoc);
21
+ }
22
+ //Gestione Auth
23
+ retrieveAccessToken() {
24
+ return this.tks.getAccessToken().toString();
25
+ }
26
+ retrieveIdentity() {
27
+ return this.tks.getJaceIdentity();
28
+ }
29
+ //Gestione ridirezione al login / altre pagine
30
+ readRedirectingToLogin() {
31
+ return this.as.redirectingToLogin;
32
+ }
33
+ writeRedirectingToLogin(status) {
34
+ this.as.redirectingToLogin = status;
35
+ }
36
+ redirectToLogin() {
37
+ console.log("httpextensions: redirecting to login");
38
+ this.router.navigate(["login", { fromUrl: this.router.url }]);
39
+ }
40
+ readRedirectionStatus() {
41
+ return myconfig?.redirectInProgress;
42
+ }
43
+ writeRedirectionStatus(status) {
44
+ myconfig.redirectInProgress = status;
45
+ }
46
+ //Gestione error handling flag
47
+ readHandlingErrorStatus() {
48
+ return this.as.handlingError;
49
+ }
50
+ writeHandlingErrorStatus(status) {
51
+ this.as.handlingError = status;
52
+ }
53
+ // 444, se false passa a handleBlockingException
54
+ handleNotConfiguredException() {
55
+ if (this.ac.has("P:mdm_customize")) {
56
+ myconfig.redirectInProgress = true;
57
+ this.as.handlingError = false;
58
+ this.router.navigate(["pages/adm/tenantconfig"]);
59
+ return true;
60
+ }
61
+ return false;
62
+ }
63
+ // 400, 403, 404, 444
64
+ handleBlockingException(status, text) {
65
+ this.msgs.simpleError(status + ": " + text);
66
+ this.as.handlingError = false;
67
+ }
68
+ // Tutto quello che non è gestito da handleBlockingException
69
+ handleException(status, text) {
70
+ if (status == 503) {
71
+ this.msgs.simpleError(this.lc.loc("Il Server sembra essere offline, prova a ricaricare la pagina"));
72
+ this.as.handlingError = false;
73
+ }
74
+ else if (status == 542) {
75
+ this.msgs.simpleError(text);
76
+ this.as.handlingError = false;
77
+ }
78
+ else {
79
+ var st = btoa(encodeURIComponent(text).replace(/%([0-9A-F]{2})/g, (match, p1) => String.fromCharCode(("0x" + p1))));
80
+ var pars = { statusCode: status, statusText: st, fromUrl: this.router.url };
81
+ this.router.navigate(["iserr", pars]);
82
+ }
83
+ }
84
+ }
85
+ HTTPServiceExtensions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HTTPServiceExtensions, deps: [{ token: i1.LocalizationService }, { token: i2.TokenService }, { token: i3.AppState }, { token: i4.Router }, { token: i5.AccessControlService }, { token: i6.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
86
+ HTTPServiceExtensions.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HTTPServiceExtensions });
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: HTTPServiceExtensions, decorators: [{
88
+ type: Injectable
89
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i2.TokenService }, { type: i3.AppState }, { type: i4.Router }, { type: i5.AccessControlService }, { type: i6.MessageService }]; } });
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmh0dHBleHRlbnNpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zZXJ2aWNlcy9zcmMvY2xhc3Nlcy9hcHAuaHR0cGV4dGVuc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTM0MsZUFBZTtBQUNmLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7OztBQVNwRSxNQUFNLE9BQU8scUJBQXFCO0lBRTlCLFlBQW9CLEVBQXVCLEVBQVUsR0FBaUIsRUFBVSxFQUFZLEVBQVUsTUFBYyxFQUFVLEVBQXdCLEVBQVUsSUFBb0I7UUFBaEssT0FBRSxHQUFGLEVBQUUsQ0FBcUI7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFjO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBVTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFzQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQWdCO1FBQ2hMLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7SUFFRCxlQUFlO0lBQ2YsbUJBQW1CO1FBQ2YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxnQkFBZ0I7UUFDWixPQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxzQkFBc0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDO0lBQ3RDLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxNQUFlO1FBQ25DLElBQUksQ0FBQyxFQUFFLENB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YW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9hY2Nlc3MtY29udHJvbFwiO1xyXG5pbXBvcnQgeyBIdHRwU2VydmljZUV4dGVuc2lvbnMgfSBmcm9tIFwiQGVzZmFlbnphL2h0dHBzZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBIVFRQU2VydmljZUV4dGVuc2lvbnNMb2MgfSBmcm9tIFwiLi9hcHAuaHR0cGV4dGVuc2lvbnMubG9jXCI7XHJcbmltcG9ydCB7IEFwcFN0YXRlIH0gZnJvbSBcIi4vYXBwLnN0YXRlXCI7XHJcbmltcG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gXCIuL2FwcC5hY2Nlc3N0b2tlblwiO1xyXG5cclxuaW1wb3J0IHsgRW52T3B0aW9ucyB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9kb21haW5cIjtcclxuXHJcbmRlY2xhcmUgdmFyIG15Y29uZmlnOiBFbnZPcHRpb25zO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSFRUUFNlcnZpY2VFeHRlbnNpb25zIGltcGxlbWVudHMgSHR0cFNlcnZpY2VFeHRlbnNpb25zIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCBwcml2YXRlIHRrczogVG9rZW5TZXJ2aWNlLCBwcml2YXRlIGFzOiBBcHBTdGF0ZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBhYzogQWNjZXNzQ29udHJvbFNlcnZpY2UsIHByaXZhdGUgbXNnczogTWVzc2FnZVNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmxjID0gdGhpcy5sYy5nZW5lcmF0ZUZyb21UeXBlKEhUVFBTZXJ2aWNlRXh0ZW5zaW9uc0xvYylcclxuICAgIH1cclxuXHJcbiAgICAvL0dlc3Rpb25lIEF1dGhcclxuICAgIHJldHJpZXZlQWNjZXNzVG9rZW4oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50a3MuZ2V0QWNjZXNzVG9rZW4oKS50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHJpZXZlSWRlbnRpdHkoKTogeyBJZFVzZXI6IHN0cmluZzsgSWR0ZW5hbnQ6IHN0cmluZzsgfSB7XHJcbiAgICAgICAgcmV0dXJuIDxhbnk+dGhpcy50a3MuZ2V0SmFjZUlkZW50aXR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9HZXN0aW9uZSByaWRpcmV6aW9uZSBhbCBsb2dpbiAvIGFsdHJlIHBhZ2luZVxyXG4gICAgcmVhZFJlZGlyZWN0aW5nVG9Mb2dpbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hcy5yZWRpcmVjdGluZ1RvTG9naW47XHJcbiAgICB9XHJcblxyXG4gICAgd3JpdGVSZWRpcmVjdGluZ1RvTG9naW4oc3RhdHVzOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5hcy5yZWRpcmVjdGluZ1RvTG9naW4gPSBzdGF0dXM7XHJcbiAgICB9XHJcblxyXG4gICAgcmVkaXJlY3RUb0xvZ2luKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiaHR0cGV4dGVuc2lvbnM6IHJlZGlyZWN0aW5nIHRvIGxvZ2luXCIpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImxvZ2luXCIsIHsgZnJvbVVybDogdGhpcy5yb3V0ZXIudXJsIH1dKTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkUmVkaXJlY3Rpb25TdGF0dXMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG15Y29uZmlnPy5yZWRpcmVjdEluUHJvZ3Jlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgd3JpdGVSZWRpcmVjdGlvblN0YXR1cyhzdGF0dXM6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBteWNvbmZpZy5yZWRpcmVjdEluUHJvZ3Jlc3MgPSBzdGF0dXM7XHJcbiAgICB9XHJcblxyXG4gICAgLy9HZXN0aW9uZSBlcnJvciBoYW5kbGluZyBmbGFnXHJcbiAgICByZWFkSGFuZGxpbmdFcnJvclN0YXR1cygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hcy5oYW5kbGluZ0Vycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIHdyaXRlSGFuZGxpbmdFcnJvclN0YXR1cyhzdGF0dXM6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmFzLmhhbmRsaW5nRXJyb3IgPSBzdGF0dXM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gNDQ0LCBzZSBmYWxzZSBwYXNzYSBhIGhhbmRsZUJsb2NraW5nRXhjZXB0aW9uXHJcbiAgICBoYW5kbGVOb3RDb25maWd1cmVkRXhjZXB0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmFjLmhhcyhcIlA6bWRtX2N1c3RvbWl6ZVwiKSkge1xyXG4gICAgICAgICAgICBteWNvbmZpZy5yZWRpcmVjdEluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmFzLmhhbmRsaW5nRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wicGFnZXMvYWRtL3RlbmFudGNvbmZpZ1wiXSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDQwMCwgNDAzLCA0MDQsIDQ0NFxyXG4gICAgaGFuZGxlQmxvY2tpbmdFeGNlcHRpb24oc3RhdHVzOiBudW1iZXIsIHRleHQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubXNncy5zaW1wbGVFcnJvcihzdGF0dXMgKyBcIjogXCIgKyB0ZXh0KVxyXG4gICAgICAgIHRoaXMuYXMuaGFuZGxpbmdFcnJvciA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFR1dHRvIHF1ZWxsbyBjaGUgbm9uIMOoIGdlc3RpdG8gZGEgaGFuZGxlQmxvY2tpbmdFeGNlcHRpb25cclxuICAgIGhhbmRsZUV4Y2VwdGlvbihzdGF0dXM6IG51bWJlciwgdGV4dDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PSA1MDMpIHtcclxuICAgICAgICAgICAgdGhpcy5tc2dzLnNpbXBsZUVycm9yKHRoaXMubGMubG9jKFwiSWwgU2VydmVyIHNlbWJyYSBlc3NlcmUgb2ZmbGluZSwgcHJvdmEgYSByaWNhcmljYXJlIGxhIHBhZ2luYVwiKSk7XHJcbiAgICAgICAgICAgIHRoaXMuYXMuaGFuZGxpbmdFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gNTQyKSB7XHJcbiAgICAgICAgICAgIHRoaXMubXNncy5zaW1wbGVFcnJvcih0ZXh0KTtcclxuICAgICAgICAgICAgdGhpcy5hcy5oYW5kbGluZ0Vycm9yID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgc3QgPSBidG9hKGVuY29kZVVSSUNvbXBvbmVudCh0ZXh0KS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9nLCAobWF0Y2gsIHAxKSA9PiBTdHJpbmcuZnJvbUNoYXJDb2RlKDxhbnk+KFwiMHhcIiArIHAxKSkpKTtcclxuICAgICAgICAgICAgdmFyIHBhcnMgPSB7IHN0YXR1c0NvZGU6IHN0YXR1cywgc3RhdHVzVGV4dDogc3QsIGZyb21Vcmw6IHRoaXMucm91dGVyLnVybCB9O1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJpc2VyclwiLCBwYXJzXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
@@ -0,0 +1,22 @@
1
+ // Angular
2
+ import { Injectable } from "@angular/core";
3
+ // Configurazioni
4
+ import { AccessControlRouteGuard } from "@esfaenza/access-control";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@esfaenza/extensions";
7
+ import * as i2 from "@esfaenza/access-control";
8
+ import * as i3 from "@angular/router";
9
+ import * as i4 from "./app.accesstoken";
10
+ export class BaseRouterGuard extends AccessControlRouteGuard {
11
+ constructor(ms, acc, router, ts) {
12
+ super(ms, acc, router);
13
+ if (!acc.Initialized)
14
+ acc.initializeIdentity(ts.getJaceIdentity());
15
+ }
16
+ }
17
+ BaseRouterGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseRouterGuard, deps: [{ token: i1.MessageService }, { token: i2.AccessControlService }, { token: i3.Router }, { token: i4.TokenService }], target: i0.ɵɵFactoryTarget.Injectable });
18
+ BaseRouterGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseRouterGuard });
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseRouterGuard, decorators: [{
20
+ type: Injectable
21
+ }], ctorParameters: function () { return [{ type: i1.MessageService }, { type: i2.AccessControlService }, { type: i3.Router }, { type: i4.TokenService }]; } });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnJvdXRlZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NlcnZpY2VzL3NyYy9jbGFzc2VzL2FwcC5yb3V0ZWd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsdUJBQXVCLEVBQXdCLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQU16RixNQUFNLE9BQU8sZUFBZ0IsU0FBUSx1QkFBdUI7SUFDeEQsWUFBWSxFQUFrQixFQUFFLEdBQXlCLEVBQUUsTUFBYyxFQUFFLEVBQWdCO1FBQ3ZGLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXZCLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVztZQUNoQixHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQzs7NEdBTlEsZUFBZTtnSEFBZixlQUFlOzJGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sUm91dGVHdWFyZCwgQWNjZXNzQ29udHJvbFNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcblxyXG5pbXBvcnQgeyBUb2tlblNlcnZpY2UgfSBmcm9tIFwiLi9hcHAuYWNjZXNzdG9rZW5cIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEJhc2VSb3V0ZXJHdWFyZCBleHRlbmRzIEFjY2Vzc0NvbnRyb2xSb3V0ZUd1YXJkIHtcclxuICAgIGNvbnN0cnVjdG9yKG1zOiBNZXNzYWdlU2VydmljZSwgYWNjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgcm91dGVyOiBSb3V0ZXIsIHRzOiBUb2tlblNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcihtcywgYWNjLCByb3V0ZXIpO1xyXG5cclxuICAgICAgICBpZiAoIWFjYy5Jbml0aWFsaXplZClcclxuICAgICAgICAgICAgYWNjLmluaXRpYWxpemVJZGVudGl0eSh0cy5nZXRKYWNlSWRlbnRpdHkoKSk7XHJcbiAgICB9XHJcbn0iXX0=
@@ -0,0 +1,33 @@
1
+ // Angular
2
+ import { Injectable } from "@angular/core";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./app.accesstoken";
5
+ import * as i2 from "@angular/router";
6
+ export class SessionRetriever {
7
+ constructor(bts, router) {
8
+ this.bts = bts;
9
+ this.router = router;
10
+ }
11
+ /** Tenant§Account§User§ModuleId */
12
+ getSessionKey() {
13
+ if (this.SessionIdentity)
14
+ return this.SessionIdentity;
15
+ // Se non ho un id mi manca il login, quindi via di qua
16
+ var id = this.bts.getJaceIdentity();
17
+ if (!id) {
18
+ console.log("no identity, redirecting to login");
19
+ this.router.navigate(["login"]);
20
+ return "";
21
+ }
22
+ // TODO: FUCK THIS SHIT
23
+ this.SessionIdentity = "" + id.Idtenant + "§" + id.IdAccount + "§" + id.IdUser + "§" + "metering";
24
+ return this.SessionIdentity;
25
+ }
26
+ }
27
+ SessionRetriever.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SessionRetriever, deps: [{ token: i1.TokenService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
28
+ SessionRetriever.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SessionRetriever, providedIn: "root" });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SessionRetriever, decorators: [{
30
+ type: Injectable,
31
+ args: [{ providedIn: "root" }]
32
+ }], ctorParameters: function () { return [{ type: i1.TokenService }, { type: i2.Router }]; } });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnNlc3Npb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NlcnZpY2VzL3NyYy9jbGFzc2VzL2FwcC5zZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBVTNDLE1BQU0sT0FBTyxnQkFBZ0I7SUFJekIsWUFBb0IsR0FBaUIsRUFBVSxNQUFjO1FBQXpDLFFBQUcsR0FBSCxHQUFHLENBQWM7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUksQ0FBQztJQUVsRSxtQ0FBbUM7SUFDbkMsYUFBYTtRQUNULElBQUksSUFBSSxDQUFDLGVBQWU7WUFDcEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBRWhDLHVEQUF1RDtRQUN2RCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDLENBQUE7WUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsVUFBVSxDQUFDO1FBQ2xHLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDOzs2R0F0QlEsZ0JBQWdCO2lIQUFoQixnQkFBZ0IsY0FESCxNQUFNOzJGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgQmFzZVNlc3Npb25SZXRyaWV2ZXIgfSBmcm9tIFwiQGVzZmFlbnphL3ByZWZlcmVuY2VzXCI7XHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgVG9rZW5TZXJ2aWNlIH0gZnJvbSBcIi4vYXBwLmFjY2Vzc3Rva2VuXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXHJcbmV4cG9ydCBjbGFzcyBTZXNzaW9uUmV0cmlldmVyIGltcGxlbWVudHMgQmFzZVNlc3Npb25SZXRyaWV2ZXIge1xyXG5cclxuICAgIHByaXZhdGUgU2Vzc2lvbklkZW50aXR5OiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBidHM6IFRva2VuU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikgeyB9XHJcblxyXG4gICAgLyoqIFRlbmFudMKnQWNjb3VudMKnVXNlcsKnTW9kdWxlSWQgKi9cclxuICAgIGdldFNlc3Npb25LZXkoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5TZXNzaW9uSWRlbnRpdHkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLlNlc3Npb25JZGVudGl0eTtcclxuXHJcbiAgICAgICAgLy8gU2Ugbm9uIGhvIHVuIGlkIG1pIG1hbmNhIGlsIGxvZ2luLCBxdWluZGkgdmlhIGRpIHF1YVxyXG4gICAgICAgIHZhciBpZCA9IHRoaXMuYnRzLmdldEphY2VJZGVudGl0eSgpO1xyXG4gICAgICAgIGlmICghaWQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJubyBpZGVudGl0eSwgcmVkaXJlY3RpbmcgdG8gbG9naW5cIilcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wibG9naW5cIl0pO1xyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRPRE86IEZVQ0sgVEhJUyBTSElUXHJcbiAgICAgICAgdGhpcy5TZXNzaW9uSWRlbnRpdHkgPSBcIlwiICsgaWQuSWR0ZW5hbnQgKyBcIsKnXCIgKyBpZC5JZEFjY291bnQgKyBcIsKnXCIgKyBpZC5JZFVzZXIgKyBcIsKnXCIgKyBcIm1ldGVyaW5nXCI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuU2Vzc2lvbklkZW50aXR5O1xyXG4gICAgfVxyXG59Il19
@@ -0,0 +1,172 @@
1
+ import { Injectable } from "@angular/core";
2
+ // Configurazioni
3
+ import { InboundMessageTypes } from "@esfaenza/extensions";
4
+ import { AdmMessageTypes, MK_ADM } from "@esfaenza/admin-module";
5
+ // Direttive, Componenti, Librerie
6
+ import * as customParseFormat from 'dayjs/plugin/customParseFormat';
7
+ import * as isBetween from 'dayjs/plugin/isBetween';
8
+ import * as minMax from 'dayjs/plugin/minMax';
9
+ import * as utc from 'dayjs/plugin/utc';
10
+ import { Subject } from "rxjs";
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@esfaenza/localizations";
13
+ import * as i2 from "./app.accesstoken";
14
+ import * as i3 from "@esfaenza/signalr-notifications";
15
+ import * as i4 from "@esfaenza/extensions";
16
+ export class AppState {
17
+ constructor(lc, bts, notifications, MessageDef, intercom) {
18
+ this.lc = lc;
19
+ this.bts = bts;
20
+ this.notifications = notifications;
21
+ this.MessageDef = MessageDef;
22
+ this.intercom = intercom;
23
+ this.Embedded = false;
24
+ this.redirectingToLogin = false;
25
+ this.handlingError = false;
26
+ this.christmasTime = false;
27
+ this.halloweenTime = false;
28
+ this.jobsInProgress = 0;
29
+ this.allJobs = [];
30
+ this.jobWithIdsCache = {};
31
+ this.notifyOnCompletedJobs = true;
32
+ this._data = new Subject();
33
+ this._dataStream$ = this._data.asObservable();
34
+ this._subscriptions = new Map();
35
+ this.ModulesLocalizations = {};
36
+ this.setupDayjs();
37
+ this.setupSignalRJobListening();
38
+ this.JaceIdentity = null;
39
+ this._dataStream$.subscribe((data) => this._onEvent(data));
40
+ //Decide se siamo attorno a natale
41
+ var today = dayjs();
42
+ var lowerBound = dayjs("18/12/" + today.year(), "DD/MM/YYYY");
43
+ var upperBound = dayjs("07/01/" + (today.year() + 1), "DD/MM/YYYY");
44
+ this.christmasTime = today > lowerBound && today < upperBound;
45
+ //Decide se siamo attorno ad halloween
46
+ var lowerBound = dayjs("28/10/" + today.year(), "DD/MM/YYYY");
47
+ var upperBound = dayjs("05/11/" + today.year(), "DD/MM/YYYY");
48
+ this.halloweenTime = today > lowerBound && today < upperBound;
49
+ this.intercom.inbounds.subscribe((t) => { this.handleInboundMessage(t); });
50
+ }
51
+ registerNavigation(route) {
52
+ let title = route.data["title"];
53
+ let internal = route.data["internalNavigation"];
54
+ /*
55
+ * Parent ({url: [{path: "{module}"}]})
56
+ * Parent ({url: [{path: ""}]}) (Root del modulo lazy)
57
+ * -> Navigazione attuale <-
58
+ */
59
+ let module = route.parent?.parent?.url[0]?.path;
60
+ let loc = module ? this.ModulesLocalizations[module] : null;
61
+ if (!module)
62
+ console.error("Impossibile estrapolare il modulo dalla navigazione (Atteso Modulo al secondo livello di parentela partendo dal componente attuale): " + route.pathFromRoot.map(v => v.url.map(segment => segment.toString()).join('/')).join('/'));
63
+ this.notifyDataChanged(internal ? "menu.adjustSubNavigationTo" : "menu.adjustNavigationTo", loc ? loc.loc(title) : title);
64
+ }
65
+ handleInboundMessage(t) {
66
+ switch (t.type) {
67
+ case InboundMessageTypes.Navigation:
68
+ {
69
+ this.notifyDataChanged(t.message.sub ? "menu.adjustSubNavigationTo" : "menu.adjustNavigationTo", t.message.routeTitle);
70
+ this.intercom.send(AdmMessageTypes.Message, "Navigation Message Received", MK_ADM);
71
+ }
72
+ }
73
+ }
74
+ setupDayjs() {
75
+ dayjs.extend(customParseFormat);
76
+ dayjs.extend(minMax);
77
+ dayjs.extend(isBetween);
78
+ dayjs.extend(utc);
79
+ // Require e collegamento con la localizzazione per dayjs
80
+ import("dayjs/locale/" + this.lc.SmallLocale + ".js").then(locale => {
81
+ dayjs.locale(locale);
82
+ });
83
+ }
84
+ setupSignalRJobListening() {
85
+ this.notifications.observe(this.MessageDef.IN_JobProgressNotification).subscribe((ev) => {
86
+ var desc = ev.description + " (" + ev.user + ")";
87
+ let job = {
88
+ id: ev.instance,
89
+ description: desc,
90
+ smalldescription: desc.length > 35 ? desc.substring(0, 30) + "..." : desc,
91
+ percentage: this.roundToTwo(ev.progress),
92
+ completed: ev.type == 'Completed',
93
+ fileid: ev.resultfile,
94
+ reportid: ev.resultreport,
95
+ reportpars: ev.resultreportparams,
96
+ complexreportid: ev.resultcomplexreport
97
+ };
98
+ switch (ev.type) {
99
+ case "Started":
100
+ this.jobWithIdsCache[ev.instance] = job;
101
+ this.allJobs.splice(0, 0, job);
102
+ break;
103
+ case "Progress":
104
+ // Se mi arriva un progress di un job che non ho significa che mi sono loggato ora con dei Job in corso
105
+ // quindi per prima cosa devo metterlo in lista
106
+ if (!this.jobWithIdsCache[ev.instance]) {
107
+ this.jobWithIdsCache[ev.instance] = job;
108
+ this.allJobs.splice(0, 0, job);
109
+ }
110
+ this.jobWithIdsCache[ev.instance].percentage = this.roundToTwo(ev.progress);
111
+ break;
112
+ case "Completed":
113
+ if (!this.jobWithIdsCache[ev.instance]) {
114
+ this.jobWithIdsCache[ev.instance] = job;
115
+ this.allJobs.splice(0, 0, job);
116
+ }
117
+ var jobToUpdate = this.jobWithIdsCache[ev.instance];
118
+ jobToUpdate.percentage = 100;
119
+ jobToUpdate.fileid = ev.resultfile;
120
+ jobToUpdate.reportid = ev.resultreport;
121
+ jobToUpdate.reportpars = ev.resultreportparams;
122
+ jobToUpdate.completed = true;
123
+ if (this.notifyOnCompletedJobs)
124
+ this.notifyDataChanged("app.completedJob", jobToUpdate.description);
125
+ break;
126
+ }
127
+ this.jobsInProgress = this.allJobs.filter(t => !t.completed).length;
128
+ });
129
+ }
130
+ roundToTwo(num) {
131
+ return Math.round(num * 100) / 100;
132
+ }
133
+ getJaceIDentity() {
134
+ if (this.JaceIdentity)
135
+ return this.JaceIdentity;
136
+ this.JaceIdentity = this.bts.getJaceIdentity();
137
+ return this.JaceIdentity;
138
+ }
139
+ notifyDataChanged(event, value) {
140
+ this._data[event] = value;
141
+ this._data.next({
142
+ event: event,
143
+ data: this._data[event]
144
+ });
145
+ }
146
+ subscribe(event, callback) {
147
+ var subscribers = this._subscriptions.get(event) || [];
148
+ subscribers.push(callback);
149
+ this._subscriptions.set(event, subscribers);
150
+ }
151
+ _onEvent(data) {
152
+ var subscribers = this._subscriptions.get(data["event"]) || [];
153
+ subscribers.forEach((callback) => {
154
+ callback.call(null, data["data"]);
155
+ });
156
+ }
157
+ setSidebarWidth(width) {
158
+ this.sidebarWidth = width;
159
+ }
160
+ setHeaderHeight(height) {
161
+ this.headerHeight = height;
162
+ }
163
+ }
164
+ AppState.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AppState, deps: [{ token: i1.LocalizationService }, { token: i2.TokenService }, { token: i3.NotificationsService }, { token: i3.BaseMessageService }, { token: i4.InterComService }], target: i0.ɵɵFactoryTarget.Injectable });
165
+ AppState.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AppState, providedIn: "root" });
166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AppState, decorators: [{
167
+ type: Injectable,
168
+ args: [{ providedIn: "root" }]
169
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i2.TokenService }, { type: i3.NotificationsService }, { type: i3.BaseMessageService }, { type: i4.InterComService }]; } });
170
+ export class ApplicationJob {
171
+ }
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zZXJ2aWNlcy9zcmMvY2xhc3Nlcy9hcHAuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxpQkFBaUI7QUFDakIsT0FBTyxFQUFFLG1CQUFtQixFQUFvQyxNQUFNLHNCQUFzQixDQUFDO0FBRTdGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFPakUsa0NBQWtDO0FBQ2xDLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEtBQUssU0FBUyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sS0FBSyxNQUFNLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxLQUFLLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFLL0IsTUFBTSxPQUFPLFFBQVE7SUE2QmpCLFlBQW9CLEVBQXVCLEVBQVUsR0FBaUIsRUFBVSxhQUFtQyxFQUFVLFVBQThCLEVBQVUsUUFBeUI7UUFBMUssT0FBRSxHQUFGLEVBQUUsQ0FBcUI7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFjO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQXNCO1FBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQTNCdkwsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUkxQix1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFDcEMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Isa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Isa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFRL0IsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0Is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QUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGVBQWUsQ0FBQyxLQUFhO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFTSxlQUFlLENBQUMsTUFBYztRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztJQUMvQixDQUFDOztxR0FyTFEsUUFBUTt5R0FBUixRQUFRLGNBREssTUFBTTsyRkFDbkIsUUFBUTtrQkFEcEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O0FBeUxsQyxNQUFNLE9BQU8sY0FBYztDQVUxQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBJbmJvdW5kTWVzc2FnZVR5cGVzLCBJbnRlckNvbU1lc3NhZ2UsIEludGVyQ29tU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBCYXNlTWVzc2FnZVNlcnZpY2UsIE5vdGlmaWNhdGlvbnNTZXJ2aWNlLCBKb2JQcm9ncmVzc0R0byB9IGZyb20gXCJAZXNmYWVuemEvc2lnbmFsci1ub3RpZmljYXRpb25zXCI7XHJcbmltcG9ydCB7IEFkbU1lc3NhZ2VUeXBlcywgTUtfQURNIH0gZnJvbSBcIkBlc2ZhZW56YS9hZG1pbi1tb2R1bGVcIjtcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5pbXBvcnQgeyBSZXBvcnRQYXJhbSB9IGZyb20gXCJAZXNmYWVuemEvZXMtdGFibGVcIjtcclxuaW1wb3J0IHsgVG9rZW5TZXJ2aWNlIH0gZnJvbSBcIi4vYXBwLmFjY2Vzc3Rva2VuXCI7XHJcblxyXG5pbXBvcnQgeyBKYWNlSWRlbnRpdHkgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvZG9tYWluXCI7XHJcblxyXG4vLyBEaXJldHRpdmUsIENvbXBvbmVudGksIExpYnJlcmllXHJcbmltcG9ydCAqIGFzIGN1c3RvbVBhcnNlRm9ybWF0IGZyb20gJ2RheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdCc7XHJcbmltcG9ydCAqIGFzIGlzQmV0d2VlbiBmcm9tICdkYXlqcy9wbHVnaW4vaXNCZXR3ZWVuJztcclxuaW1wb3J0ICogYXMgbWluTWF4IGZyb20gJ2RheWpzL3BsdWdpbi9taW5NYXgnO1xyXG5pbXBvcnQgKiBhcyB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuZGVjbGFyZSB2YXIgZGF5anM6IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcclxuZXhwb3J0IGNsYXNzIEFwcFN0YXRlIHtcclxuXHJcbiAgICBwdWJsaWMgRW1iZWRkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc2lkZWJhcldpZHRoOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgaGVhZGVySGVpZ2h0OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcmVkaXJlY3RpbmdUb0xvZ2luOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGFuZGxpbmdFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNocmlzdG1hc1RpbWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoYWxsb3dlZW5UaW1lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLy8gVE9ETzogZm9yIHRoZSBnbG9yeSBvZiBtZW1lc1xyXG4gICAgLy9wdWJsaWMgbWVtZXM6IGJvb2xlYW4gPSAoKG5ldyBEYXRlKCkpLmdldE1vbnRoKCkgPT0gMyAmJiAobmV3IERhdGUoKSkuZ2V0RGF0ZSgpID09IDEpIHx8ICg8YW55Pm15Y29uZmlnKS5NRU1FUztcclxuXHJcbiAgICBwcml2YXRlIEphY2VJZGVudGl0eTogSmFjZUlkZW50aXR5O1xyXG5cclxuICAgIHByaXZhdGUgbXNnRGVmOiBCYXNlTWVzc2FnZVNlcnZpY2U7XHJcbiAgICBwdWJsaWMgam9ic0luUHJvZ3Jlc3M6IG51bWJlciA9IDA7XHJcbiAgICBwdWJsaWMgYWxsSm9iczogQXBwbGljYXRpb25Kb2JbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBqb2JXaXRoSWRzQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBBcHBsaWNhdGlvbkpvYiB9ID0ge307XHJcbiAgICBwdWJsaWMgbm90aWZ5T25Db21wbGV0ZWRKb2JzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwcml2YXRlIF9kYXRhID0gbmV3IFN1YmplY3Q8T2JqZWN0PigpO1xyXG4gICAgcHJpdmF0ZSBfZGF0YVN0cmVhbSQgPSB0aGlzLl9kYXRhLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIEFycmF5PEZ1bmN0aW9uPj4gPSBuZXcgTWFwPHN0cmluZywgQXJyYXk8RnVuY3Rpb24+PigpO1xyXG5cclxuICAgIHB1YmxpYyBNb2R1bGVzTG9jYWxpemF0aW9uczogeyBbaWQ6IHN0cmluZ106IExvY2FsaXphdGlvblNlcnZpY2UgfSA9IHt9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbGM6IExvY2FsaXphdGlvblNlcnZpY2UsIHByaXZhdGUgYnRzOiBUb2tlblNlcnZpY2UsIHByaXZhdGUgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uc1NlcnZpY2UsIHByaXZhdGUgTWVzc2FnZURlZjogQmFzZU1lc3NhZ2VTZXJ2aWNlLCBwcml2YXRlIGludGVyY29tOiBJbnRlckNvbVNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnNldHVwRGF5anMoKTtcclxuICAgICAgICB0aGlzLnNldHVwU2lnbmFsUkpvYkxpc3RlbmluZygpO1xyXG5cclxuICAgICAgICB0aGlzLkphY2VJZGVudGl0eSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fZGF0YVN0cmVhbSQuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLl9vbkV2ZW50KGRhdGEpKTtcclxuXHJcbiAgICAgICAgLy9EZWNpZGUgc2Ugc2lhbW8gYXR0b3JubyBhIG5hdGFsZVxyXG4gICAgICAgIHZhciB0b2RheSA9IGRheWpzKCk7XHJcbiAgICAgICAgdmFyIGxvd2VyQm91bmQgPSBkYXlqcyhcIjE4LzEyL1wiICsgdG9kYXkueWVhcigpLCBcIkREL01NL1lZWVlcIik7XHJcbiAgICAgICAgdmFyIHVwcGVyQm91bmQgPSBkYXlqcyhcIjA3LzAxL1wiICsgKHRvZGF5LnllYXIoKSArIDEpLCBcIkREL01NL1lZWVlcIik7XHJcbiAgICAgICAgdGhpcy5jaHJpc3RtYXNUaW1lID0gdG9kYXkgPiBsb3dlckJvdW5kICYmIHRvZGF5IDwgdXBwZXJCb3VuZDtcclxuXHJcbiAgICAgICAgLy9EZWNpZGUgc2Ugc2lhbW8gYXR0b3JubyBhZCBoYWxsb3dlZW5cclxuICAgICAgICB2YXIgbG93ZXJCb3VuZCA9IGRheWpzKFwiMjgvMTAvXCIgKyB0b2RheS55ZWFyKCksIFwiREQvTU0vWVlZWVwiKTtcclxuICAgICAgICB2YXIgdXBwZXJCb3VuZCA9IGRheWpzKFwiMDUvMTEvXCIgKyB0b2RheS55ZWFyKCksIFwiREQvTU0vWVlZWVwiKTtcclxuICAgICAgICB0aGlzLmhhbGxvd2VlblRpbWUgPSB0b2RheSA+IGxvd2VyQm91bmQgJiYgdG9kYXkgPCB1cHBlckJvdW5kO1xyXG5cclxuICAgICAgICB0aGlzLmludGVyY29tLmluYm91bmRzLnN1YnNjcmliZSgodDogSW50ZXJDb21NZXNzYWdlKSA9PiB7IHRoaXMuaGFuZGxlSW5ib3VuZE1lc3NhZ2UodCk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyTmF2aWdhdGlvbihyb3V0ZT86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpIHtcclxuICAgICAgICBsZXQgdGl0bGUgPSByb3V0ZS5kYXRhW1widGl0bGVcIl07XHJcbiAgICAgICAgbGV0IGludGVybmFsID0gcm91dGUuZGF0YVtcImludGVybmFsTmF2aWdhdGlvblwiXVxyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqICBQYXJlbnQgKHt1cmw6IFt7cGF0aDogXCJ7bW9kdWxlfVwifV19KVxyXG4gICAgICAgICAqICAgICAgUGFyZW50ICh7dXJsOiBbe3BhdGg6IFwiXCJ9XX0pIChSb290IGRlbCBtb2R1bG8gbGF6eSlcclxuICAgICAgICAgKiAgICAgICAgICAtPiBOYXZpZ2F6aW9uZSBhdHR1YWxlIDwtXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbGV0IG1vZHVsZSA9IHJvdXRlLnBhcmVudD8ucGFyZW50Py51cmxbMF0/LnBhdGg7XHJcbiAgICAgICAgbGV0IGxvYyA9IG1vZHVsZSA/IHRoaXMuTW9kdWxlc0xvY2FsaXphdGlvbnNbbW9kdWxlXSA6IG51bGw7XHJcblxyXG4gICAgICAgIGlmICghbW9kdWxlKVxyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiSW1wb3NzaWJpbGUgZXN0cmFwb2xhcmUgaWwgbW9kdWxvIGRhbGxhIG5hdmlnYXppb25lIChBdHRlc28gTW9kdWxvIGFsIHNlY29uZG8gbGl2ZWxsbyBkaSBwYXJlbnRlbGEgcGFydGVuZG8gZGFsIGNvbXBvbmVudGUgYXR0dWFsZSk6IFwiICsgcm91dGUucGF0aEZyb21Sb290Lm1hcCh2ID0+IHYudXJsLm1hcChzZWdtZW50ID0+IHNlZ21lbnQudG9TdHJpbmcoKSkuam9pbignLycpKS5qb2luKCcvJykpO1xyXG5cclxuICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKGludGVybmFsID8gXCJtZW51LmFkanVzdFN1Yk5hdmlnYXRpb25Ub1wiIDogXCJtZW51LmFkanVzdE5hdmlnYXRpb25Ub1wiLCBsb2MgPyBsb2MubG9jKHRpdGxlKSA6IHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVJbmJvdW5kTWVzc2FnZSh0OiBJbnRlckNvbU1lc3NhZ2UpIHtcclxuICAgICAgICBzd2l0Y2ggKHQudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIEluYm91bmRNZXNzYWdlVHlwZXMuTmF2aWdhdGlvbjpcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeURhdGFDaGFuZ2VkKHQubWVzc2FnZS5zdWIgPyBcIm1lbnUuYWRqdXN0U3ViTmF2aWdhdGlvblRvXCIgOiBcIm1lbnUuYWRqdXN0TmF2aWdhdGlvblRvXCIsIHQubWVzc2FnZS5yb3V0ZVRpdGxlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVyY29tLnNlbmQoQWRtTWVzc2FnZVR5cGVzLk1lc3NhZ2UsIFwiTmF2aWdhdGlvbiBNZXNzYWdlIFJlY2VpdmVkXCIsIE1LX0FETSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldHVwRGF5anMoKSB7XHJcbiAgICAgICAgZGF5anMuZXh0ZW5kKGN1c3RvbVBhcnNlRm9ybWF0KTtcclxuICAgICAgICBkYXlqcy5leHRlbmQobWluTWF4KTtcclxuICAgICAgICBkYXlqcy5leHRlbmQoaXNCZXR3ZWVuKTtcclxuICAgICAgICBkYXlqcy5leHRlbmQodXRjKTtcclxuXHJcbiAgICAgICAgLy8gUmVxdWlyZSBlIGNvbGxlZ2FtZW50byBjb24gbGEgbG9jYWxpenphemlvbmUgcGVyIGRheWpzXHJcbiAgICAgICAgaW1wb3J0KFwiZGF5anMvbG9jYWxlL1wiICsgdGhpcy5sYy5TbWFsbExvY2FsZSArIFwiLmpzXCIpLnRoZW4obG9jYWxlID0+IHtcclxuICAgICAgICAgICAgZGF5anMubG9jYWxlKGxvY2FsZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dXBTaWduYWxSSm9iTGlzdGVuaW5nKCkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5vYnNlcnZlKHRoaXMuTWVzc2FnZURlZi5JTl9Kb2JQcm9ncmVzc05vdGlmaWNhdGlvbikuc3Vic2NyaWJlKChldjogSm9iUHJvZ3Jlc3NEdG8pID0+IHtcclxuICAgICAgICAgICAgdmFyIGRlc2MgPSBldi5kZXNjcmlwdGlvbiArIFwiIChcIiArIGV2LnVzZXIgKyBcIilcIjtcclxuICAgICAgICAgICAgbGV0IGpvYjogQXBwbGljYXRpb25Kb2IgPSB7XHJcbiAgICAgICAgICAgICAgICBpZDogZXYuaW5zdGFuY2UsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzYyxcclxuICAgICAgICAgICAgICAgIHNtYWxsZGVzY3JpcHRpb246IGRlc2MubGVuZ3RoID4gMzUgPyBkZXNjLnN1YnN0cmluZygwLCAzMCkgKyBcIi4uLlwiIDogZGVzYyxcclxuICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2U6IHRoaXMucm91bmRUb1R3byhldi5wcm9ncmVzcyksXHJcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IGV2LnR5cGUgPT0gJ0NvbXBsZXRlZCcsXHJcbiAgICAgICAgICAgICAgICBmaWxlaWQ6IGV2LnJlc3VsdGZpbGUsXHJcbiAgICAgICAgICAgICAgICByZXBvcnRpZDogZXYucmVzdWx0cmVwb3J0LFxyXG4gICAgICAgICAgICAgICAgcmVwb3J0cGFyczogZXYucmVzdWx0cmVwb3J0cGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgY29tcGxleHJlcG9ydGlkOiBldi5yZXN1bHRjb21wbGV4cmVwb3J0XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKGV2LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJTdGFydGVkXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5qb2JXaXRoSWRzQ2FjaGVbZXYuaW5zdGFuY2VdID0gam9iO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsSm9icy5zcGxpY2UoMCwgMCwgam9iKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJQcm9ncmVzc1wiOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNlIG1pIGFycml2YSB1biBwcm9ncmVzcyBkaSB1biBqb2IgY2hlIG5vbiBobyBzaWduaWZpY2EgY2hlIG1pIHNvbm8gbG9nZ2F0byBvcmEgY29uIGRlaSBKb2IgaW4gY29yc29cclxuICAgICAgICAgICAgICAgICAgICAvLyBxdWluZGkgcGVyIHByaW1hIGNvc2EgZGV2byBtZXR0ZXJsbyBpbiBsaXN0YVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5qb2JXaXRoSWRzQ2FjaGVbZXYuaW5zdGFuY2VdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuam9iV2l0aElkc0NhY2hlW2V2Lmluc3RhbmNlXSA9IGpvYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxKb2JzLnNwbGljZSgwLCAwLCBqb2IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmpvYldpdGhJZHNDYWNoZVtldi5pbnN0YW5jZV0ucGVyY2VudGFnZSA9IHRoaXMucm91bmRUb1R3byhldi5wcm9ncmVzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiQ29tcGxldGVkXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmpvYldpdGhJZHNDYWNoZVtldi5pbnN0YW5jZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qb2JXaXRoSWRzQ2FjaGVbZXYuaW5zdGFuY2VdID0gam9iO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbEpvYnMuc3BsaWNlKDAsIDAsIGpvYik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBqb2JUb1VwZGF0ZSA9IHRoaXMuam9iV2l0aElkc0NhY2hlW2V2Lmluc3RhbmNlXTtcclxuICAgICAgICAgICAgICAgICAgICBqb2JUb1VwZGF0ZS5wZXJjZW50YWdlID0gMTAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGpvYlRvVXBkYXRlLmZpbGVpZCA9IGV2LnJlc3VsdGZpbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgam9iVG9VcGRhdGUucmVwb3J0aWQgPSBldi5yZXN1bHRyZXBvcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgam9iVG9VcGRhdGUucmVwb3J0cGFycyA9IGV2LnJlc3VsdHJlcG9ydHBhcmFtcztcclxuICAgICAgICAgICAgICAgICAgICBqb2JUb1VwZGF0ZS5jb21wbGV0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub3RpZnlPbkNvbXBsZXRlZEpvYnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5RGF0YUNoYW5nZWQoXCJhcHAuY29tcGxldGVkSm9iXCIsIGpvYlRvVXBkYXRlLmRlc2NyaXB0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuam9ic0luUHJvZ3Jlc3MgPSB0aGlzLmFsbEpvYnMuZmlsdGVyKHQgPT4gIXQuY29tcGxldGVkKS5sZW5ndGg7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcm91bmRUb1R3byhudW0pIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChudW0gKiAxMDApIC8gMTAwO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEphY2VJRGVudGl0eSgpOiBKYWNlSWRlbnRpdHkge1xyXG4gICAgICAgIGlmICh0aGlzLkphY2VJZGVudGl0eSlcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuSmFjZUlkZW50aXR5O1xyXG4gICAgICAgIHRoaXMuSmFjZUlkZW50aXR5ID0gdGhpcy5idHMuZ2V0SmFjZUlkZW50aXR5KCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuSmFjZUlkZW50aXR5O1xyXG4gICAgfVxyXG5cclxuICAgIG5vdGlmeURhdGFDaGFuZ2VkKGV2ZW50LCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX2RhdGFbZXZlbnRdID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5fZGF0YS5uZXh0KHtcclxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLl9kYXRhW2V2ZW50XVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YnNjcmliZShldmVudDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pIHtcclxuICAgICAgICB2YXIgc3Vic2NyaWJlcnMgPSB0aGlzLl9zdWJzY3JpcHRpb25zLmdldChldmVudCkgfHwgW107XHJcbiAgICAgICAgc3Vic2NyaWJlcnMucHVzaChjYWxsYmFjayk7XHJcblxyXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuc2V0KGV2ZW50LCBzdWJzY3JpYmVycyk7XHJcbiAgICB9XHJcblxyXG4gICAgX29uRXZlbnQoZGF0YTogYW55KSB7XHJcbiAgICAgICAgdmFyIHN1YnNjcmliZXJzID0gdGhpcy5fc3Vic2NyaXB0aW9ucy5nZXQoZGF0YVtcImV2ZW50XCJdKSB8fCBbXTtcclxuXHJcbiAgICAgICAgc3Vic2NyaWJlcnMuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcclxuICAgICAgICAgICAgY2FsbGJhY2suY2FsbChudWxsLCBkYXRhW1wiZGF0YVwiXSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNpZGViYXJXaWR0aCh3aWR0aDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5zaWRlYmFyV2lkdGggPSB3aWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0SGVhZGVySGVpZ2h0KGhlaWdodDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJIZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkpvYiB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIHNtYWxsZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIHBlcmNlbnRhZ2U6IG51bWJlcjtcclxuICAgIGNvbXBsZXRlZDogYm9vbGVhbjtcclxuICAgIGZpbGVpZDogc3RyaW5nO1xyXG4gICAgcmVwb3J0aWQ6IHN0cmluZztcclxuICAgIGNvbXBsZXhyZXBvcnRpZDogc3RyaW5nO1xyXG4gICAgcmVwb3J0cGFyczogUmVwb3J0UGFyYW1bXTtcclxufSJdfQ==