ngx-histaff-alpha 4.2.2 → 4.2.4

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.
@@ -29,6 +29,8 @@ class AppConfigService {
29
29
  this.OAUTH2_OIDC_LOGIN_URI = "";
30
30
  this.OAUTH2_OIDC_REDIRECT_URI = "";
31
31
  this.OAUTH2_OIDC_SCOPE = "openid profile email";
32
+ this.OFFICE365_DEV = undefined;
33
+ this.OFFICE365_PROD = undefined;
32
34
  this.SAML2ADFS_ENABLED = true;
33
35
  this.SAML2ADFS_IDP = "";
34
36
  this.SAML2ADFS_IDENTIFIER = "";
@@ -2435,38 +2437,6 @@ class AuthService {
2435
2437
  }
2436
2438
  }
2437
2439
  }
2438
- generateRandomCodeVerifier(length) {
2439
- const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';
2440
- let result = '';
2441
- for (let i = 0; i < length; i++) {
2442
- const randomIndex = Math.floor(Math.random() * charset.length);
2443
- result += charset.charAt(randomIndex);
2444
- }
2445
- return result;
2446
- }
2447
- async generateCodeChallengeFromVerifier(v) {
2448
- const sha256 = (plain) => {
2449
- // returns promise ArrayBuffer
2450
- const encoder = new TextEncoder();
2451
- const data = encoder.encode(plain);
2452
- return window.crypto.subtle.digest("SHA-256", data);
2453
- };
2454
- const base64urlencode = (a) => {
2455
- var str = "";
2456
- var bytes = new Uint8Array(a);
2457
- var len = bytes.byteLength;
2458
- for (var i = 0; i < len; i++) {
2459
- str += String.fromCharCode(bytes[i]);
2460
- }
2461
- return btoa(str)
2462
- .replace(/\+/g, "-")
2463
- .replace(/\//g, "_")
2464
- .replace(/=+$/, "");
2465
- };
2466
- var hashed = await sha256(v);
2467
- var base64encoded = base64urlencode(hashed);
2468
- return base64encoded;
2469
- }
2470
2440
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: AuthService, deps: [{ token: HttpClient }, { token: Router }, { token: CommonHttpRequestService }, { token: HubConnectionService }, { token: OrganizationService }, { token: AlertService }, { token: MultiLanguageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2471
2441
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: AuthService, providedIn: 'root' }); }
2472
2442
  }
@@ -3217,9 +3187,154 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
3217
3187
  }]
3218
3188
  }], ctorParameters: () => [] });
3219
3189
 
3190
+ class PkceService {
3191
+ constructor(appConfigService, appService, router, alertService) {
3192
+ this.appConfigService = appConfigService;
3193
+ this.appService = appService;
3194
+ this.router = router;
3195
+ this.alertService = alertService;
3196
+ this.lsCodeVerifierName = "office365CodeVerifier";
3197
+ this.userGraphToken$ = new BehaviorSubject('');
3198
+ }
3199
+ generateRandomCodeVerifier(length) {
3200
+ const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';
3201
+ let result = '';
3202
+ for (let i = 0; i < length; i++) {
3203
+ const randomIndex = Math.floor(Math.random() * charset.length);
3204
+ result += charset.charAt(randomIndex);
3205
+ }
3206
+ return result;
3207
+ }
3208
+ async generateCodeChallengeFromVerifier(v) {
3209
+ const sha256 = (plain) => {
3210
+ // returns promise ArrayBuffer
3211
+ const encoder = new TextEncoder();
3212
+ const data = encoder.encode(plain);
3213
+ return window.crypto.subtle.digest("SHA-256", data);
3214
+ };
3215
+ const base64urlencode = (a) => {
3216
+ var str = "";
3217
+ var bytes = new Uint8Array(a);
3218
+ var len = bytes.byteLength;
3219
+ for (var i = 0; i < len; i++) {
3220
+ str += String.fromCharCode(bytes[i]);
3221
+ }
3222
+ return btoa(str)
3223
+ .replace(/\+/g, "-")
3224
+ .replace(/\//g, "_")
3225
+ .replace(/=+$/, "");
3226
+ };
3227
+ var hashed = await sha256(v);
3228
+ var base64encoded = base64urlencode(hashed);
3229
+ return base64encoded;
3230
+ }
3231
+ doAuthorize() {
3232
+ const codeVerifier = this.generateRandomCodeVerifier(43);
3233
+ localStorage.setItem(this.lsCodeVerifierName, codeVerifier);
3234
+ this.generateCodeChallengeFromVerifier(codeVerifier).then(codeChallenge => {
3235
+ const authorizationUrl = `${this.authorizationEndpoint}?` +
3236
+ `response_type=code` +
3237
+ `&client_id=${this.clientId}` +
3238
+ `&redirect_uri=${this.redirectUri}` +
3239
+ `&code_challenge=${codeChallenge}` +
3240
+ `&code_challenge_method=S256` +
3241
+ `&scope=${'openid'}`;
3242
+ window.location.href = authorizationUrl;
3243
+ });
3244
+ }
3245
+ doAndGetToken(authorizationCode) {
3246
+ return new Promise((resolve, reject) => {
3247
+ if (!this.tokenPostEndpoint) {
3248
+ if (isDevMode()) {
3249
+ this.alertService.error("UNDEFINED_TOKEN_POST_ENDPOINT", noneAutoClosedAlertOptions);
3250
+ }
3251
+ reject("UNDEFINED_TOKEN_POST_ENDPOINT");
3252
+ }
3253
+ //let params = (new URL(window.location.href)).searchParams;
3254
+ //let code = params.get("code");
3255
+ if (!!authorizationCode) {
3256
+ const codeVerifier = localStorage.getItem(this.lsCodeVerifierName);
3257
+ this.appService.post(this.tokenPostEndpoint, {
3258
+ authorizationCode: authorizationCode,
3259
+ codeVerifier
3260
+ }).subscribe((x) => {
3261
+ localStorage.removeItem(this.lsCodeVerifierName);
3262
+ if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
3263
+ resolve(x.body?.innerBody);
3264
+ }
3265
+ else {
3266
+ reject(x.body);
3267
+ }
3268
+ });
3269
+ }
3270
+ else {
3271
+ reject("CODE_WAS_NOT_RETURNED");
3272
+ }
3273
+ });
3274
+ }
3275
+ validateOffice365UserViaPopup() {
3276
+ if (!this.isEnabled || !this.authorizationEndpoint || !this.clientId || !this.redirectUri || !this.tokenPostEndpoint) {
3277
+ if (isDevMode()) {
3278
+ this.alertService.error("THE_OFFICE365_INTEGRATION_IS_DISABLED_OR_HAS_INCORECT_CONFIG", noneAutoClosedAlertOptions);
3279
+ console.log("this.isEnabled", this.isEnabled, "this.authorizationEndpoint", this.authorizationEndpoint, "this.clientId", this.clientId, "this.redirectUri", this.redirectUri, "this.tokenPostEndpoint", this.tokenPostEndpoint);
3280
+ }
3281
+ return;
3282
+ }
3283
+ if (!!localStorage.getItem(this.lsCodeVerifierName))
3284
+ return;
3285
+ const office365CodeVerifier = this.generateRandomCodeVerifier(43);
3286
+ localStorage.setItem(this.lsCodeVerifierName, office365CodeVerifier);
3287
+ this.generateCodeChallengeFromVerifier(office365CodeVerifier).then(codeChallenge => {
3288
+ const authorizationUrl = `${this.authorizationEndpoint}?` +
3289
+ `response_type=code` +
3290
+ `&client_id=${this.clientId}` +
3291
+ `&redirect_uri=${this.redirectUri}` +
3292
+ `&code_challenge=${codeChallenge}` +
3293
+ `&code_challenge_method=S256` +
3294
+ `&scope=openid profile email Calendars.ReadWrite`;
3295
+ const popupWidth = 500;
3296
+ const popupHeight = 500;
3297
+ const left = (window.innerWidth - popupWidth) / 2;
3298
+ const top = (window.innerHeight - popupHeight) / 2;
3299
+ //(window as any).globalOffice365PopupId = crypto.randomUUID();
3300
+ const popup = window.open(authorizationUrl, 'Office 365 OAuth2 Popup', `width=${popupWidth},height=${popupHeight},top=${top},left=${left}`);
3301
+ const receivePkceMessage = (event) => {
3302
+ const authorizationCode = event.data?.authCode;
3303
+ if (!!authorizationCode) {
3304
+ this.doAndGetToken(authorizationCode).then(x => {
3305
+ if (x) {
3306
+ this.userGraphToken$.next(x);
3307
+ }
3308
+ setTimeout(() => localStorage.removeItem(this.lsCodeVerifierName));
3309
+ }).catch(err => {
3310
+ console.log(JSON.stringify(err));
3311
+ });
3312
+ }
3313
+ };
3314
+ window.addEventListener('message', receivePkceMessage, false);
3315
+ // Clean up the listener when the popup is closed
3316
+ const popupCheckInterval = setInterval(() => {
3317
+ if (popup && popup.closed) {
3318
+ clearInterval(popupCheckInterval);
3319
+ localStorage.removeItem(this.lsCodeVerifierName);
3320
+ window.removeEventListener('message', receivePkceMessage);
3321
+ }
3322
+ }, 500);
3323
+ });
3324
+ }
3325
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: PkceService, deps: [{ token: AppConfigService }, { token: AppService }, { token: i1$2.Router }, { token: AlertService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3326
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: PkceService, providedIn: 'root' }); }
3327
+ }
3328
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: PkceService, decorators: [{
3329
+ type: Injectable,
3330
+ args: [{
3331
+ providedIn: 'root'
3332
+ }]
3333
+ }], ctorParameters: () => [{ type: AppConfigService }, { type: AppService }, { type: i1$2.Router }, { type: AlertService }] });
3334
+
3220
3335
  class DeveloperValidationService {
3221
- constructor(authService, route) {
3222
- this.authService = authService;
3336
+ constructor(pkceService, route) {
3337
+ this.pkceService = pkceService;
3223
3338
  this.route = route;
3224
3339
  this.authorizationEndpoint = "https://login.microsoftonline.com/4a0cab94-1870-452d-a505-01a1b2bf20eb/oauth2/v2.0/authorize";
3225
3340
  this.tokenEndpoint = "https://login.microsoftonline.com/4a0cab94-1870-452d-a505-01a1b2bf20eb/oauth2/v2.0/token";
@@ -3277,9 +3392,9 @@ class DeveloperValidationService {
3277
3392
  validateDeveloperViaPopup() {
3278
3393
  if (!!localStorage.getItem("codeVerifier"))
3279
3394
  return;
3280
- const codeVerifier = this.authService.generateRandomCodeVerifier(43);
3395
+ const codeVerifier = this.pkceService.generateRandomCodeVerifier(43);
3281
3396
  localStorage.setItem("codeVerifier", codeVerifier);
3282
- this.authService.generateCodeChallengeFromVerifier(codeVerifier).then(codeChallenge => {
3397
+ this.pkceService.generateCodeChallengeFromVerifier(codeVerifier).then(codeChallenge => {
3283
3398
  const authorizationUrl = `${this.authorizationEndpoint}?` +
3284
3399
  `response_type=code` +
3285
3400
  `&client_id=${this.clientId}` +
@@ -3310,7 +3425,7 @@ class DeveloperValidationService {
3310
3425
  }, 500);
3311
3426
  });
3312
3427
  }
3313
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: DeveloperValidationService, deps: [{ token: AuthService }, { token: i1$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
3428
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: DeveloperValidationService, deps: [{ token: PkceService }, { token: i1$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
3314
3429
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: DeveloperValidationService, providedIn: 'root' }); }
3315
3430
  }
3316
3431
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: DeveloperValidationService, decorators: [{
@@ -3318,10 +3433,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
3318
3433
  args: [{
3319
3434
  providedIn: 'root'
3320
3435
  }]
3321
- }], ctorParameters: () => [{ type: AuthService }, { type: i1$2.ActivatedRoute }] });
3436
+ }], ctorParameters: () => [{ type: PkceService }, { type: i1$2.ActivatedRoute }] });
3322
3437
 
3323
3438
  class AppInitializationService {
3324
- constructor(authService, mls, layoutService, organizationService, routingService, appConfigService, appService, grpcService, seekerService, actionService, developerValidationService) {
3439
+ constructor(authService, mls, layoutService, organizationService, routingService, appConfigService, appService, grpcService, seekerService, actionService, developerValidationService, pkceService) {
3325
3440
  this.authService = authService;
3326
3441
  this.mls = mls;
3327
3442
  this.layoutService = layoutService;
@@ -3333,6 +3448,7 @@ class AppInitializationService {
3333
3448
  this.seekerService = seekerService;
3334
3449
  this.actionService = actionService;
3335
3450
  this.developerValidationService = developerValidationService;
3451
+ this.pkceService = pkceService;
3336
3452
  this.initializing$ = new BehaviorSubject(true);
3337
3453
  this.ssoProcessing$ = new BehaviorSubject(true);
3338
3454
  this.subscriptions = [];
@@ -3356,7 +3472,7 @@ class AppInitializationService {
3356
3472
  if (window.opener && window.opener.globalPopupId) {
3357
3473
  //alert(window.opener.globalPopupId);
3358
3474
  }
3359
- fetch('../../assets/app.config.json').then(res => res.json()).then(({ APP_TYPE, APP_UIID, ALLOW_IN_APP_NOTIFICATION, SHOW_LOGIN_NOTIFICATION, BASE_URL, BASE_URL_FOR_STATISTIC, GOLIVE_URL, DEBUG_ENABLED, USE_DEMO_AVATAR, LOGO_LOGIN, LOGO_HEADER, HOME_BACKGROUND_IMAGE, OAUTH2_OIDC_ENABLED, OAUTH2_OIDC_CLIENT_ID, OAUTH2_OIDC_LOGIN_URI, OAUTH2_OIDC_REDIRECT_URI, OAUTH2_OIDC_SCOPE, SAML2ADFS_ENABLED, SAML2ADFS_IDP, SAML2ADFS_IDENTIFIER, SAML2ADFS_WA_SIGNIN, SAML2ADFS_WA_SIGNOUT, SAML2ADFS_WREPLY, HANGFIRE_PATH, STATIC_FOLDER, }) => {
3475
+ fetch('../../assets/app.config.json').then(res => res.json()).then(({ APP_TYPE, APP_UIID, ALLOW_IN_APP_NOTIFICATION, SHOW_LOGIN_NOTIFICATION, BASE_URL, BASE_URL_FOR_STATISTIC, GOLIVE_URL, DEBUG_ENABLED, USE_DEMO_AVATAR, LOGO_LOGIN, LOGO_HEADER, HOME_BACKGROUND_IMAGE, OAUTH2_OIDC_ENABLED, OAUTH2_OIDC_CLIENT_ID, OAUTH2_OIDC_LOGIN_URI, OAUTH2_OIDC_REDIRECT_URI, OAUTH2_OIDC_SCOPE, OFFICE365_DEV, OFFICE365_PROD, SAML2ADFS_ENABLED, SAML2ADFS_IDP, SAML2ADFS_IDENTIFIER, SAML2ADFS_WA_SIGNIN, SAML2ADFS_WA_SIGNOUT, SAML2ADFS_WREPLY, HANGFIRE_PATH, STATIC_FOLDER, }) => {
3360
3476
  this.appConfigService.APP_TYPE = APP_TYPE;
3361
3477
  this.appConfigService.APP_UIID = APP_UIID;
3362
3478
  this.appConfigService.ALLOW_IN_APP_NOTIFICATION = ALLOW_IN_APP_NOTIFICATION;
@@ -3374,6 +3490,22 @@ class AppInitializationService {
3374
3490
  this.appConfigService.OAUTH2_OIDC_LOGIN_URI = OAUTH2_OIDC_LOGIN_URI;
3375
3491
  this.appConfigService.OAUTH2_OIDC_REDIRECT_URI = OAUTH2_OIDC_REDIRECT_URI;
3376
3492
  this.appConfigService.OAUTH2_OIDC_SCOPE = OAUTH2_OIDC_SCOPE;
3493
+ this.appConfigService.OFFICE365_DEV = OFFICE365_DEV;
3494
+ this.appConfigService.OFFICE365_PROD = OFFICE365_PROD;
3495
+ if (isDevMode()) {
3496
+ this.pkceService.isEnabled = this.appConfigService.OFFICE365_DEV?.IS_ENABLED;
3497
+ this.pkceService.authorizationEndpoint = this.appConfigService.OFFICE365_DEV?.AUTHORIZATION_ENDPOINT;
3498
+ this.pkceService.clientId = this.appConfigService.OFFICE365_DEV?.CLIENT_ID;
3499
+ this.pkceService.redirectUri = this.appConfigService.OFFICE365_DEV?.REDIRECT_URI;
3500
+ this.pkceService.tokenPostEndpoint = this.appConfigService.OFFICE365_DEV?.TOKEN_POST_ENDPOINT;
3501
+ }
3502
+ else {
3503
+ this.pkceService.isEnabled = this.appConfigService.OFFICE365_PROD?.IS_ENABLED;
3504
+ this.pkceService.authorizationEndpoint = this.appConfigService.OFFICE365_PROD?.AUTHORIZATION_ENDPOINT;
3505
+ this.pkceService.clientId = this.appConfigService.OFFICE365_PROD?.CLIENT_ID;
3506
+ this.pkceService.redirectUri = this.appConfigService.OFFICE365_PROD?.REDIRECT_URI;
3507
+ this.pkceService.tokenPostEndpoint = this.appConfigService.OFFICE365_PROD?.TOKEN_POST_ENDPOINT;
3508
+ }
3377
3509
  this.appConfigService.SAML2ADFS_ENABLED = SAML2ADFS_ENABLED;
3378
3510
  this.appConfigService.SAML2ADFS_IDP = SAML2ADFS_IDP;
3379
3511
  this.appConfigService.SAML2ADFS_IDENTIFIER = SAML2ADFS_IDENTIFIER;
@@ -3578,7 +3710,7 @@ class AppInitializationService {
3578
3710
  ngOnDestroy() {
3579
3711
  this.subscriptions.map(x => x?.unsubscribe());
3580
3712
  }
3581
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: AppInitializationService, deps: [{ token: AuthService }, { token: MultiLanguageService }, { token: LayoutService }, { token: OrganizationService }, { token: RoutingService }, { token: AppConfigService }, { token: AppService }, { token: GrpcService }, { token: SeekerService }, { token: ActionService }, { token: DeveloperValidationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3713
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: AppInitializationService, deps: [{ token: AuthService }, { token: MultiLanguageService }, { token: LayoutService }, { token: OrganizationService }, { token: RoutingService }, { token: AppConfigService }, { token: AppService }, { token: GrpcService }, { token: SeekerService }, { token: ActionService }, { token: DeveloperValidationService }, { token: PkceService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3582
3714
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: AppInitializationService, providedIn: 'root' }); }
3583
3715
  }
3584
3716
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: AppInitializationService, decorators: [{
@@ -3586,7 +3718,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
3586
3718
  args: [{
3587
3719
  providedIn: 'root'
3588
3720
  }]
3589
- }], ctorParameters: () => [{ type: AuthService }, { type: MultiLanguageService }, { type: LayoutService }, { type: OrganizationService }, { type: RoutingService }, { type: AppConfigService }, { type: AppService }, { type: GrpcService }, { type: SeekerService }, { type: ActionService }, { type: DeveloperValidationService }] });
3721
+ }], ctorParameters: () => [{ type: AuthService }, { type: MultiLanguageService }, { type: LayoutService }, { type: OrganizationService }, { type: RoutingService }, { type: AppConfigService }, { type: AppService }, { type: GrpcService }, { type: SeekerService }, { type: ActionService }, { type: DeveloperValidationService }, { type: PkceService }] });
3590
3722
 
3591
3723
  const InitializationCanActivateFn = (route, state) => {
3592
3724
  const appInitializationService = inject(AppInitializationService);
@@ -3820,6 +3952,50 @@ function authInterceptor(req, next) {
3820
3952
  return next(authReq);
3821
3953
  }
3822
3954
 
3955
+ class GraphInterceptor {
3956
+ constructor(pkceService) {
3957
+ this.pkceService = pkceService;
3958
+ }
3959
+ intercept(req, next) {
3960
+ // Get the auth token from the service.
3961
+ const graphToken = this.pkceService.userGraphToken$.value;
3962
+ if (!graphToken || !graphToken.length) {
3963
+ return next.handle(req);
3964
+ }
3965
+ // Clone the request and replace the original headers with
3966
+ // cloned headers, updated with the authorization.
3967
+ const graphReq = req.clone({
3968
+ headers: req.headers.set('Graph-Token', graphToken)
3969
+ });
3970
+ // send cloned request with header to the next handler.
3971
+ return next.handle(graphReq);
3972
+ }
3973
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: GraphInterceptor, deps: [{ token: PkceService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3974
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: GraphInterceptor, providedIn: 'root' }); }
3975
+ }
3976
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: GraphInterceptor, decorators: [{
3977
+ type: Injectable,
3978
+ args: [{
3979
+ providedIn: 'root'
3980
+ }]
3981
+ }], ctorParameters: () => [{ type: PkceService }] });
3982
+ // Fn style
3983
+ function graphInterceptor(req, next) {
3984
+ const pkceService = inject(PkceService);
3985
+ // Get the auth token from the service.
3986
+ const graphToken = pkceService.userGraphToken$.value;
3987
+ if (!graphToken || !graphToken.length) {
3988
+ return next(req);
3989
+ }
3990
+ // Clone the request and replace the original headers with
3991
+ // cloned headers, updated with the authorization.
3992
+ const graphReq = req.clone({
3993
+ headers: req.headers.set('Graph-Token', graphToken)
3994
+ });
3995
+ // send cloned request with header to the next handler.
3996
+ return next(graphReq);
3997
+ }
3998
+
3823
3999
  class TokenInterceptor {
3824
4000
  addAuthenticationToken(request) {
3825
4001
  const isStatistic = request.headers.has(InterceptorStatisticHeader);
@@ -4350,6 +4526,7 @@ const httpInterceptorProviders = [
4350
4526
  { provide: HTTP_INTERCEPTORS, useClass: BaseUrlInterceptor, multi: true },
4351
4527
  { provide: HTTP_INTERCEPTORS, useClass: LoggingInterceptor, multi: true },
4352
4528
  { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
4529
+ { provide: HTTP_INTERCEPTORS, useClass: GraphInterceptor, multi: true },
4353
4530
  { provide: HTTP_INTERCEPTORS, useClass: TokenInterceptor, multi: true },
4354
4531
  { provide: HTTP_INTERCEPTORS, useClass: ResponseInterceptor, multi: true },
4355
4532
  { provide: HTTP_INTERCEPTORS, useClass: TimeZoneInterceptor, multi: true },
@@ -4899,94 +5076,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
4899
5076
  args: [{ providedIn: "root" }]
4900
5077
  }] });
4901
5078
 
4902
- class PkceService {
4903
- constructor(appService, router) {
4904
- this.appService = appService;
4905
- this.router = router;
4906
- }
4907
- generateRandomCodeVerifier(length) {
4908
- const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';
4909
- let result = '';
4910
- for (let i = 0; i < length; i++) {
4911
- const randomIndex = Math.floor(Math.random() * charset.length);
4912
- result += charset.charAt(randomIndex);
4913
- }
4914
- return result;
4915
- }
4916
- async generateCodeChallengeFromVerifier(v) {
4917
- const sha256 = (plain) => {
4918
- // returns promise ArrayBuffer
4919
- const encoder = new TextEncoder();
4920
- const data = encoder.encode(plain);
4921
- return window.crypto.subtle.digest("SHA-256", data);
4922
- };
4923
- const base64urlencode = (a) => {
4924
- var str = "";
4925
- var bytes = new Uint8Array(a);
4926
- var len = bytes.byteLength;
4927
- for (var i = 0; i < len; i++) {
4928
- str += String.fromCharCode(bytes[i]);
4929
- }
4930
- return btoa(str)
4931
- .replace(/\+/g, "-")
4932
- .replace(/\//g, "_")
4933
- .replace(/=+$/, "");
4934
- };
4935
- var hashed = await sha256(v);
4936
- var base64encoded = base64urlencode(hashed);
4937
- return base64encoded;
4938
- }
4939
- doAuthorize(lsCodeVerifierName, authorizationEndpoint, clientId, redirect_uri) {
4940
- const codeVerifier = this.generateRandomCodeVerifier(43);
4941
- localStorage.setItem(lsCodeVerifierName, codeVerifier);
4942
- this.generateCodeChallengeFromVerifier(codeVerifier).then(codeChallenge => {
4943
- const authorizationUrl = `${authorizationEndpoint}?` +
4944
- `response_type=code` +
4945
- `&client_id=${clientId}` +
4946
- `&redirect_uri=${redirect_uri}` +
4947
- `&code_challenge=${codeChallenge}` +
4948
- `&code_challenge_method=S256` +
4949
- `&scope=${'openid'}`;
4950
- window.location.href = authorizationUrl;
4951
- });
4952
- }
4953
- doAndGetToken(lsCodeVerifierName, tokenPostEndpoint, redirectUrl = undefined) {
4954
- return new Promise((resolve, reject) => {
4955
- let params = (new URL(window.location.href)).searchParams;
4956
- let code = params.get("code");
4957
- if (!!code) {
4958
- const codeVerifier = localStorage.getItem(lsCodeVerifierName);
4959
- this.appService.post(tokenPostEndpoint, {
4960
- authorizationCode: code,
4961
- codeVerifier
4962
- }).subscribe((x) => {
4963
- localStorage.removeItem(lsCodeVerifierName);
4964
- if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
4965
- if (redirectUrl) {
4966
- this.router.navigateByUrl(redirectUrl);
4967
- }
4968
- resolve(x.body?.innerBody);
4969
- }
4970
- else {
4971
- reject();
4972
- }
4973
- });
4974
- }
4975
- else {
4976
- reject();
4977
- }
4978
- });
4979
- }
4980
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: PkceService, deps: [{ token: AppService }, { token: i1$2.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
4981
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: PkceService, providedIn: 'root' }); }
4982
- }
4983
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: PkceService, decorators: [{
4984
- type: Injectable,
4985
- args: [{
4986
- providedIn: 'root'
4987
- }]
4988
- }], ctorParameters: () => [{ type: AppService }, { type: i1$2.Router }] });
4989
-
4990
5079
  class PositionTransferService {
4991
5080
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: PositionTransferService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4992
5081
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: PositionTransferService, providedIn: 'root' }); }
@@ -25457,6 +25546,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
25457
25546
  args: [{ selector: 'core-oauth-callback', standalone: true, imports: [], template: "<h2>core-oauth-callback works!</h2>\r\n" }]
25458
25547
  }], ctorParameters: () => [{ type: i1$2.ActivatedRoute }] });
25459
25548
 
25549
+ class CoreOauthCallbackOffice365Component {
25550
+ constructor(route) {
25551
+ this.route = route;
25552
+ // Extract the authorization code from the query parameters
25553
+ this.route.queryParams.subscribe(params => {
25554
+ const authCode = params['code'];
25555
+ if (!!authCode) {
25556
+ // Post the message back to the parent window
25557
+ window.opener.postMessage({ authCode }, 'https://localhost:4200');
25558
+ window.close(); // Close the popup
25559
+ }
25560
+ });
25561
+ }
25562
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreOauthCallbackOffice365Component, deps: [{ token: i1$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
25563
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CoreOauthCallbackOffice365Component, isStandalone: true, selector: "core-oauth-callback-office365", ngImport: i0, template: "<p>core-oauth-callback-office365 works!</p>\r\n", styles: [""] }); }
25564
+ }
25565
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreOauthCallbackOffice365Component, decorators: [{
25566
+ type: Component,
25567
+ args: [{ selector: 'core-oauth-callback-office365', standalone: true, imports: [], template: "<p>core-oauth-callback-office365 works!</p>\r\n" }]
25568
+ }], ctorParameters: () => [{ type: i1$2.ActivatedRoute }] });
25569
+
25460
25570
  class CoreOrgTreeState {
25461
25571
  constructor() {
25462
25572
  this.coreOrgTreeReduced$ = new BehaviorSubject(false);
@@ -30163,5 +30273,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
30163
30273
  * Generated bundle index. Do not edit.
30164
30274
  */
30165
30275
 
30166
- export { ActionService, ActionSvgEditComponent, AlertComponent, AlertService, AnimatedTextComponent, AnimatedTextService, AppConfigService, AppInitializationService, AppService, ApplicationHelpService, AuthService, BaseComponent, BaseDropdownComponent, BaseEditComponent, ButtonGroupComponent, ButtonGroupModule, ButtonGroupService, CORE_VNS_BUTTONS, CacheService, CanActivateFunctionUrlMapperGuard, CanDeactivateGuard, CheckForUpdateService, ClientService, CommonHttpRequestService, ConfigService, ConfirmDialogStateComponent, ControlBase, CoreAccordionComponent, CoreAccordionService, CoreActiveUserCountComponent, CoreApiProgressComponent, CoreAttachmentComponent, CoreButtonComponent, CoreButtonGroupComponent, CoreButtonGroupService, CoreButtonGroupVnsComponent, CoreButtonVnsComponent, CoreCheckboxComponent, CoreChecklistComponent, CoreCommonParamKitComponent, CoreCompositionComponent, CoreCompositionService, CoreCompositionState, CoreConfirmDialogComponent, CoreContractSeekerComponent, CoreControlComponent, CoreControlNoGridBufferComponent, CoreControlNoSeekerComponent, CoreControlService, CoreCurrencyInputComponent, CoreDatePickerComponent, CoreDatetimeService, CoreDropdownComponent, CoreEmployeeScheduleComponent, CoreEmployeeSeekerComponent, CoreFileFormatPickerComponent, CoreFileUploaderComponent, CoreFilterHubComponent, CoreFilterHubService, CoreFormComponent, CoreFormControlBaseComponent, CoreFormControlSeekerComponent, CoreFormLiteComponent, CoreFormService, CoreFormTabComponent, CoreGridBufferComponent, CoreHeaderParamsComponent, CoreHelperComponent, CoreIosSwitcherComponent, CoreLineComponent, CoreListComponent, CoreListLazyComponent, CoreLoadingSurfaceComponent, CoreMccComponent, CoreMonthPickerComponent, CoreMonthSelectorComponent, CoreNavigationTrackerComponent, CoreOauthCallbackComponent, CoreOrgParamComponent, CoreOrgTreeComponent, CoreOrgTreeService, CoreOrgTreeState, CoreOrgUnitSeekerComponent, CoreOrgchartflexComponent, CorePageEditComponent, CorePageEditLiteComponent, CorePageEditService, CorePageEditTabComponent, CorePageHeaderComponent, CorePageListComponent, CorePageListContentComponent, CorePageListService, CorePageListState, CorePageViewComponent, CorePaginationComponent, CorePaginationFullComponent, CorePaginationFullService, CoreParamControlComponent, CorePermissionActionsComponent, CorePermissionComponent, CorePermissionService, CorePositionConcurrentSeekerComponent, CorePositionSeekerComponent, CoreQrcodeComponent, CoreQueryBuilderComponent, CoreRadioGroupComponent, CoreReducerIconComponent, CoreRootMenuItemPickerComponent, CoreRotatingTextComponent, CoreRoutingHistoryComponent, CoreScrollComponent, CoreScrollLazyComponent, CoreSeenByComponent, CoreShiftCardComponent, CoreShiftCellComponent, CoreShiftCollectionComponent, CoreShiftStickerComponent, CoreStatisticWidgetComponent, CoreStatusStickerComponent, CoreSubFormGroupComponent, CoreTabListComponent, CoreTableComponent, CoreTableService, CoreTabsComponent, CoreTagsComponent, CoreTopicPickerComponent, CoreTopicTreeComponent, CoreTreeComponent, CoreTreeGridComponent, CoreWageSeekerComponent, CoreWorkingSeekerComponent, CoreYearPickerComponent, CustomValidators, DATE_VALUE_ACCESSOR, DEFAULT_SVG, DESKTOP_SCREEN_HEDER_HEIGHT, DateValueAccessor, DecisionComponent, DialogService, DialogStateComponent, DndService, DomService, ECoreTableToolClass, ECoreTableToolCode, EnumAlertType, EnumBrowserType, EnumButtonCaptionCode, EnumCoreArticleCategoryTreeaAccessorMode, EnumCoreButtonCode, EnumCoreButtonVNSCode, EnumCoreFileUploaderType, EnumCoreFormControlSeekerSourceType, EnumCoreOrgTreeaAccessorMode, EnumCoreOrgTreeaSearchMode, EnumCorePageEditBootstrapClass, EnumCorePageEditFieldType, EnumCorePageEditMode, EnumCoreSeekerColumnContract, EnumCoreSeekerColumnJob, EnumCoreSeekerColumnPosition, EnumCoreSeekerColumnPositionConcurrent, EnumCoreSeekerColumnStaffProfile, EnumCoreSeekerColumnWage, EnumCoreSeekerColumnWorking, EnumCoreTablePipeType, EnumCoreTreeGridEditMode, EnumCoreViewItemType, EnumDeviceType, EnumDragType, EnumErrorType, EnumExType, EnumFilterOperator, EnumFormBaseContolType, EnumHrComparisonCode, EnumICoreStatisticWidgetDataType, EnumIconClass, EnumImageResolverType, EnumNotificationDir, EnumOparator, EnumOsType, EnumPermissionObjectType, EnumProfileInfoSector, EnumRecursiveFields, EnumSignalRType, EnumSortDirection, EnumSsrsExpressExportFormat, EnumSsrsExpressFileExtension, EnumStyleButtonClass, EnumSwUpdateVersionUpdatesEventType, EnumWorkScheduleViewMode, EvaluateDialogComponent, EvaluateDialogService, FileService, FilterKitService, FilterPipe, FooterComponent, FullscreenModalLoaderComponent, FunctionComponent, FunctionEditComponent, FunctionEditService, FunctionIgnoreComponent, FunctionIgnoreEditComponent, GroupFunctionComponent, GroupFunctionEditComponent, GrpcService, HeaderService, HistoryService, HotKeysDirective, HttpErrorHandler, HubConnectionService, HuconcurrentlyComponent, IAlertOptions, ImageErrorResolverDirective, InMemoryComponent, InitializationCanActivateFn, InitializationCanMatchFn, InterceptorSkipHeader, IpServiceService, ItemComponent, JobComponent, JsonService, LanguageChangerComponent, LanguageComponent, LanguageEditComponent, LayoutService, LongTaskService, MOBILE_SCREEN_HEDER_HEIGHT, MapAppdemoToServerPipePipe, MapAttachmentToServerPipe, MapAvatarToServerPipe, MapNewsfeedMediaToServerPipe, MapService, MenuComponent, MenuEditComponent, MenuService, MessageService, ModalService, MultiLanguageService, MutationLogComponent, MutationViewComponent, NavigatorComponent, NavigatorService, NewlyCreatedTokenService, NormalizeHumanNamePipe, NotificationActionType, OnlineUsersComponent, OrganizationService, OtpInputComponent, OtpInputService, PageTitleComponent, PaginationComponent, PkceService, PortalRouteComponent, PortalRouteEditComponent, PositionComponent, PositionEditService, PositionTransferService, PushNotificationService, RandomAvatarService, RecursiveService, RequestCache, RequestCacheWithMap, ResponseService, RightchatComponent, RoutingService, STICKER_COLOR_SCHEMA, SeekerService, SocketService, SsrsExpressService, StaffProfileComponent, StatisticAuthService, StatisticService, StringHtmlPipe, StringService, SysActionComponent, SysActionEditComponent, SysFunctionActionComponent, SysFunctionActionEditComponent, SysFunctionActionMapperComponent, SysFunctionUrlMapperComponent, SysMenuService, SysModuleComponent, SysModuleEditComponent, TLA_CONFIG, TableCellPipe, Textbox, ThreedotsComponent, TimeSheetService, TooltipComponent, TooltipDirective, TopicPermissionService, TopicTreeService, TranslatePipe, UnicodeService, UploadedFileService, UploadedFilenameCutoffPipe, UrlService, UserActivityComponent, UserActivityService, WageComponent, WaittingScreenComponent, WorkShiftDndService, alertOptions, attachmentOptions, authInterceptor, baseUrlInterceptor, blob_to_base64_script, cachingInterceptor, defaultPaging, httpInterceptorProviders, langInterceptor, liner_to_nested_array_script, longAlertOptions, noneAutoClosedAlertOptions, normalizeHumanName, responseInterceptor, themeBlue, timeZoneInterceptor, tokenInterceptor };
30276
+ export { ActionService, ActionSvgEditComponent, AlertComponent, AlertService, AnimatedTextComponent, AnimatedTextService, AppConfigService, AppInitializationService, AppService, ApplicationHelpService, AuthService, BaseComponent, BaseDropdownComponent, BaseEditComponent, ButtonGroupComponent, ButtonGroupModule, ButtonGroupService, CORE_VNS_BUTTONS, CacheService, CanActivateFunctionUrlMapperGuard, CanDeactivateGuard, CheckForUpdateService, ClientService, CommonHttpRequestService, ConfigService, ConfirmDialogStateComponent, ControlBase, CoreAccordionComponent, CoreAccordionService, CoreActiveUserCountComponent, CoreApiProgressComponent, CoreAttachmentComponent, CoreButtonComponent, CoreButtonGroupComponent, CoreButtonGroupService, CoreButtonGroupVnsComponent, CoreButtonVnsComponent, CoreCheckboxComponent, CoreChecklistComponent, CoreCommonParamKitComponent, CoreCompositionComponent, CoreCompositionService, CoreCompositionState, CoreConfirmDialogComponent, CoreContractSeekerComponent, CoreControlComponent, CoreControlNoGridBufferComponent, CoreControlNoSeekerComponent, CoreControlService, CoreCurrencyInputComponent, CoreDatePickerComponent, CoreDatetimeService, CoreDropdownComponent, CoreEmployeeScheduleComponent, CoreEmployeeSeekerComponent, CoreFileFormatPickerComponent, CoreFileUploaderComponent, CoreFilterHubComponent, CoreFilterHubService, CoreFormComponent, CoreFormControlBaseComponent, CoreFormControlSeekerComponent, CoreFormLiteComponent, CoreFormService, CoreFormTabComponent, CoreGridBufferComponent, CoreHeaderParamsComponent, CoreHelperComponent, CoreIosSwitcherComponent, CoreLineComponent, CoreListComponent, CoreListLazyComponent, CoreLoadingSurfaceComponent, CoreMccComponent, CoreMonthPickerComponent, CoreMonthSelectorComponent, CoreNavigationTrackerComponent, CoreOauthCallbackComponent, CoreOauthCallbackOffice365Component, CoreOrgParamComponent, CoreOrgTreeComponent, CoreOrgTreeService, CoreOrgTreeState, CoreOrgUnitSeekerComponent, CoreOrgchartflexComponent, CorePageEditComponent, CorePageEditLiteComponent, CorePageEditService, CorePageEditTabComponent, CorePageHeaderComponent, CorePageListComponent, CorePageListContentComponent, CorePageListService, CorePageListState, CorePageViewComponent, CorePaginationComponent, CorePaginationFullComponent, CorePaginationFullService, CoreParamControlComponent, CorePermissionActionsComponent, CorePermissionComponent, CorePermissionService, CorePositionConcurrentSeekerComponent, CorePositionSeekerComponent, CoreQrcodeComponent, CoreQueryBuilderComponent, CoreRadioGroupComponent, CoreReducerIconComponent, CoreRootMenuItemPickerComponent, CoreRotatingTextComponent, CoreRoutingHistoryComponent, CoreScrollComponent, CoreScrollLazyComponent, CoreSeenByComponent, CoreShiftCardComponent, CoreShiftCellComponent, CoreShiftCollectionComponent, CoreShiftStickerComponent, CoreStatisticWidgetComponent, CoreStatusStickerComponent, CoreSubFormGroupComponent, CoreTabListComponent, CoreTableComponent, CoreTableService, CoreTabsComponent, CoreTagsComponent, CoreTopicPickerComponent, CoreTopicTreeComponent, CoreTreeComponent, CoreTreeGridComponent, CoreWageSeekerComponent, CoreWorkingSeekerComponent, CoreYearPickerComponent, CustomValidators, DATE_VALUE_ACCESSOR, DEFAULT_SVG, DESKTOP_SCREEN_HEDER_HEIGHT, DateValueAccessor, DecisionComponent, DialogService, DialogStateComponent, DndService, DomService, ECoreTableToolClass, ECoreTableToolCode, EnumAlertType, EnumBrowserType, EnumButtonCaptionCode, EnumCoreArticleCategoryTreeaAccessorMode, EnumCoreButtonCode, EnumCoreButtonVNSCode, EnumCoreFileUploaderType, EnumCoreFormControlSeekerSourceType, EnumCoreOrgTreeaAccessorMode, EnumCoreOrgTreeaSearchMode, EnumCorePageEditBootstrapClass, EnumCorePageEditFieldType, EnumCorePageEditMode, EnumCoreSeekerColumnContract, EnumCoreSeekerColumnJob, EnumCoreSeekerColumnPosition, EnumCoreSeekerColumnPositionConcurrent, EnumCoreSeekerColumnStaffProfile, EnumCoreSeekerColumnWage, EnumCoreSeekerColumnWorking, EnumCoreTablePipeType, EnumCoreTreeGridEditMode, EnumCoreViewItemType, EnumDeviceType, EnumDragType, EnumErrorType, EnumExType, EnumFilterOperator, EnumFormBaseContolType, EnumHrComparisonCode, EnumICoreStatisticWidgetDataType, EnumIconClass, EnumImageResolverType, EnumNotificationDir, EnumOparator, EnumOsType, EnumPermissionObjectType, EnumProfileInfoSector, EnumRecursiveFields, EnumSignalRType, EnumSortDirection, EnumSsrsExpressExportFormat, EnumSsrsExpressFileExtension, EnumStyleButtonClass, EnumSwUpdateVersionUpdatesEventType, EnumWorkScheduleViewMode, EvaluateDialogComponent, EvaluateDialogService, FileService, FilterKitService, FilterPipe, FooterComponent, FullscreenModalLoaderComponent, FunctionComponent, FunctionEditComponent, FunctionEditService, FunctionIgnoreComponent, FunctionIgnoreEditComponent, GroupFunctionComponent, GroupFunctionEditComponent, GrpcService, HeaderService, HistoryService, HotKeysDirective, HttpErrorHandler, HubConnectionService, HuconcurrentlyComponent, IAlertOptions, ImageErrorResolverDirective, InMemoryComponent, InitializationCanActivateFn, InitializationCanMatchFn, InterceptorSkipHeader, IpServiceService, ItemComponent, JobComponent, JsonService, LanguageChangerComponent, LanguageComponent, LanguageEditComponent, LayoutService, LongTaskService, MOBILE_SCREEN_HEDER_HEIGHT, MapAppdemoToServerPipePipe, MapAttachmentToServerPipe, MapAvatarToServerPipe, MapNewsfeedMediaToServerPipe, MapService, MenuComponent, MenuEditComponent, MenuService, MessageService, ModalService, MultiLanguageService, MutationLogComponent, MutationViewComponent, NavigatorComponent, NavigatorService, NewlyCreatedTokenService, NormalizeHumanNamePipe, NotificationActionType, OnlineUsersComponent, OrganizationService, OtpInputComponent, OtpInputService, PageTitleComponent, PaginationComponent, PkceService, PortalRouteComponent, PortalRouteEditComponent, PositionComponent, PositionEditService, PositionTransferService, PushNotificationService, RandomAvatarService, RecursiveService, RequestCache, RequestCacheWithMap, ResponseService, RightchatComponent, RoutingService, STICKER_COLOR_SCHEMA, SeekerService, SocketService, SsrsExpressService, StaffProfileComponent, StatisticAuthService, StatisticService, StringHtmlPipe, StringService, SysActionComponent, SysActionEditComponent, SysFunctionActionComponent, SysFunctionActionEditComponent, SysFunctionActionMapperComponent, SysFunctionUrlMapperComponent, SysMenuService, SysModuleComponent, SysModuleEditComponent, TLA_CONFIG, TableCellPipe, Textbox, ThreedotsComponent, TimeSheetService, TooltipComponent, TooltipDirective, TopicPermissionService, TopicTreeService, TranslatePipe, UnicodeService, UploadedFileService, UploadedFilenameCutoffPipe, UrlService, UserActivityComponent, UserActivityService, WageComponent, WaittingScreenComponent, WorkShiftDndService, alertOptions, attachmentOptions, authInterceptor, baseUrlInterceptor, blob_to_base64_script, cachingInterceptor, defaultPaging, graphInterceptor, httpInterceptorProviders, langInterceptor, liner_to_nested_array_script, longAlertOptions, noneAutoClosedAlertOptions, normalizeHumanName, responseInterceptor, themeBlue, timeZoneInterceptor, tokenInterceptor };
30167
30277
  //# sourceMappingURL=ngx-histaff-alpha.mjs.map