@cuby-ui/core 0.0.287 → 0.0.290

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.
@@ -4,7 +4,7 @@ export declare class CuiSidebarHeaderComponent {
4
4
  private readonly document;
5
5
  private readonly sidebarService;
6
6
  protected readonly isOpened: import("@angular/core").Signal<boolean>;
7
- protected readonly buttonIcon: import("@angular/core").Signal<"cuiIconLoading" | "cuiIconCheck" | "cuiIconCheckSm" | "cuiIconCheckCircle" | "cuiIconCheckCircleSm" | "cuiIconCheckCircleV2" | "cuiIconMoreVertical" | "cuiIconMoreVerticalSm" | "cuiIconTrash" | "cuiIconTrashSm" | "cuiIconEdit" | "cuiIconEditSm" | "cuiIconArrowSortSm" | "cuiIconX" | "cuiIconXSm" | "cuiIconXCircle" | "cuiIconXCircleSm" | "cuiIconClear" | "cuiIconClearSm" | "cuiIconEye" | "cuiIconEyeSm" | "cuiIconEyeOff" | "cuiIconEyeOffSm" | "cuiIconChevronUp" | "cuiIconChevronUpSm" | "cuiIconChevronRight" | "cuiIconChevronRightSm" | "cuiIconChevronDown" | "cuiIconChevronDownSm" | "cuiIconChevronLeft" | "cuiIconChevronLeftSm" | "cuiIconChevronsRight" | "cuiIconChevronsRightSm" | "cuiIconChevronsLeft" | "cuiIconChevronsLeftSm" | "cuiIconChevronsSwitch" | "cuiIconDatabase" | "cuiIconDatabaseSm" | "cuiIconHome" | "cuiIconHomeSm" | "cuiIconUser" | "cuiIconUserSm" | "cuiIconUsers" | "cuiIconUsersBg" | "cuiIconUsersSm" | "cuiIconUserPlus" | "cuiIconUserPlusSm" | "cuiIconFormula" | "cuiIconSettings" | "cuiIconSettingsSm" | "cuiIconSettingsBold" | "cuiIconCopy" | "cuiIconCopySm" | "cuiIconSidebar" | "cuiIconSidebarSm" | "cuiIconChart" | "cuiIconFolder" | "cuiIconFolderSm" | "cuiIconFolderOpen" | "cuiIconFolderOpenSm" | "cuiIconPlus" | "cuiIconPlusSm" | "cuiIconPlusCircle" | "cuiIconFiltersLines" | "cuiIconFiltersLinesSm" | "cuiIconSearch" | "cuiIconSearchSm" | "cuiIconGrid" | "cuiIconGridSm" | "cuiIconList" | "cuiIconListSm" | "cuiIconProgress" | "cuiIconSortAZSm" | "cuiIconFlagBold" | "cuiIconFileText" | "cuiIconFileTextSm" | "cuiIconLink" | "cuiIconExternalLinkSm" | "cuiIconLinkBroken" | "cuiIconLinkBrokenSm" | "cuiIconClock" | "cuiIconClockSm" | "cuiIconInfo" | "cuiIconInfoSm" | "cuiIconInfoCircle" | "cuiIconInfoCircleBg" | "cuiIconAlertTriangle" | "cuiIconAlertTriangleSm" | "cuiIconAlertCircle" | "cuiIcon2Layers" | "cuiIcon2LayersSm" | "cuiIcon3Layers" | "cuiIcon3LayersSm" | "cuiIconLearningSm" | "cuiIconBellSm" | "cuiIconMessageCircle" | "cuiIconMessageCircleSm" | "cuiIconSlashDivider" | "cuiIconCaretDownFillXxs" | "cuiIconCaretDownFill" | "cuiIconDragHandleDots" | "cuiIconPlayCircle" | "cuiIconPlayCircleSm" | "cuiIconClipBoard" | "cuiIconUpload" | "cuiIconUploadSm" | "cuiIconMaximize" | "cuiIconMaximizeSm" | "cuiIconArrowUpRight" | "cuiIconArrowUpRightSm" | "cuiIconAddBranchSm" | "cuiIconBranch" | "cuiIconBranchSm" | "cuiIconPaperclip" | "cuiIconPaperclipSm" | "cuiIconToolsSm" | "cuiIconPartsSm" | "cuiIconEquipmentSm" | "cuiIconPrimitive" | "cuiIconPrimitiveSm" | "cuiIconSpool" | "cuiIconSpoolSm" | "cuiIconTank" | "cuiIconTankSm" | "cuiIconAssembly" | "cuiIconAssemblySm" | "cuiIconVariant" | "cuiIconVariantSm" | "cuiIconRichText" | "cuiIconRichTextSm" | "cuiIconChecklist" | "cuiIconRefreshCcwSm" | "cuiIconRefreshCcw" | "cuiIconBarChartSm" | "cuiIconBarChart" | "cuiIconCurvedArrow" | "cuiIconBulletFillSm" | "cuiIconBulletSm" | "cuiIconArrowRight" | "cuiIconArrowRightSm" | "cuiIconImage" | "cuiIconCutLinearSm" | "cuiIconCutLinear" | "cuiIconForkLift" | "cuiIconForkLiftSm" | "cuiIconPartPrimitive" | "cuiIconPartPrimitiveSm" | "cuiIconChecklistsSm" | "cuiIconViewInAr" | "cuiIconViewInArSm" | "cuiIconFloorplanSolid" | "cuiIconFloorplanSolidSm" | "cuiIconMoon" | "cuiIconMoonSm" | "cuiIconSunSm" | "cuiIconTool" | "cuiIconToolSm" | "cuiIconCamera" | "cuiIconPanModeSm" | "cuiIconCrane" | "cuiIconCraneSm" | "cuiIconBin" | "cuiIconBinSm" | "cuiIconAuxSm" | "cuiIcon5sSm" | "cuiIconRackSm" | "cuiIconAccessories" | "cuiIconAccessoriesSm" | "cuiIconLogisticVehicle" | "cuiIconLogisticVehicleSm" | "cuiIconComputerChipSm" | "cuiIconRack">;
7
+ protected readonly buttonIcon: import("@angular/core").Signal<"cuiIconLoading" | "cuiIconCheck" | "cuiIconCheckSm" | "cuiIconCheckCircle" | "cuiIconCheckCircleSm" | "cuiIconCheckCircleV2" | "cuiIconMoreVertical" | "cuiIconMoreVerticalSm" | "cuiIconTrash" | "cuiIconTrashSm" | "cuiIconEdit" | "cuiIconEditSm" | "cuiIconArrowSortSm" | "cuiIconX" | "cuiIconXSm" | "cuiIconXCircle" | "cuiIconXCircleSm" | "cuiIconClear" | "cuiIconClearSm" | "cuiIconEye" | "cuiIconEyeSm" | "cuiIconEyeOff" | "cuiIconEyeOffSm" | "cuiIconChevronUp" | "cuiIconChevronUpSm" | "cuiIconChevronRight" | "cuiIconChevronRightSm" | "cuiIconChevronDown" | "cuiIconChevronDownSm" | "cuiIconChevronLeft" | "cuiIconChevronLeftSm" | "cuiIconChevronsRight" | "cuiIconChevronsRightSm" | "cuiIconChevronsLeft" | "cuiIconChevronsLeftSm" | "cuiIconChevronsSwitch" | "cuiIconDatabase" | "cuiIconDatabaseSm" | "cuiIconHome" | "cuiIconHomeSm" | "cuiIconUser" | "cuiIconUserSm" | "cuiIconUsers" | "cuiIconUsersBg" | "cuiIconUsersSm" | "cuiIconUserPlus" | "cuiIconUserPlusSm" | "cuiIconFormula" | "cuiIconSettings" | "cuiIconSettingsSm" | "cuiIconSettingsBold" | "cuiIconCopy" | "cuiIconCopySm" | "cuiIconSidebar" | "cuiIconSidebarSm" | "cuiIconChart" | "cuiIconFolder" | "cuiIconFolderSm" | "cuiIconFolderOpen" | "cuiIconFolderOpenSm" | "cuiIconPlus" | "cuiIconPlusSm" | "cuiIconPlusCircle" | "cuiIconFiltersLines" | "cuiIconFiltersLinesSm" | "cuiIconSearch" | "cuiIconSearchSm" | "cuiIconGrid" | "cuiIconGridSm" | "cuiIconList" | "cuiIconListSm" | "cuiIconProgress" | "cuiIconSortAZSm" | "cuiIconFlagBold" | "cuiIconFileText" | "cuiIconFileTextSm" | "cuiIconLink" | "cuiIconExternalLinkSm" | "cuiIconLinkBroken" | "cuiIconLinkBrokenSm" | "cuiIconClock" | "cuiIconClockSm" | "cuiIconInfo" | "cuiIconInfoSm" | "cuiIconInfoCircle" | "cuiIconInfoCircleBg" | "cuiIconAlertTriangle" | "cuiIconAlertTriangleSm" | "cuiIconAlertCircle" | "cuiIcon2Layers" | "cuiIcon2LayersSm" | "cuiIcon3Layers" | "cuiIcon3LayersSm" | "cuiIconLearningSm" | "cuiIconBellSm" | "cuiIconMessageCircle" | "cuiIconMessageCircleSm" | "cuiIconSlashDivider" | "cuiIconCaretDownFillXxs" | "cuiIconCaretDownFill" | "cuiIconDragHandleDots" | "cuiIconPlayCircle" | "cuiIconPlayCircleSm" | "cuiIconClipBoard" | "cuiIconUpload" | "cuiIconUploadSm" | "cuiIconMaximize" | "cuiIconMaximizeSm" | "cuiIconArrowUpRight" | "cuiIconArrowUpRightSm" | "cuiIconAddBranchSm" | "cuiIconBranch" | "cuiIconBranchSm" | "cuiIconPaperclip" | "cuiIconPaperclipSm" | "cuiIconToolsSm" | "cuiIconPartsSm" | "cuiIconEquipmentSm" | "cuiIconPrimitive" | "cuiIconPrimitiveSm" | "cuiIconSpool" | "cuiIconSpoolSm" | "cuiIconTank" | "cuiIconTankSm" | "cuiIconAssembly" | "cuiIconAssemblySm" | "cuiIconVariant" | "cuiIconVariantSm" | "cuiIconRichText" | "cuiIconRichTextSm" | "cuiIconChecklist" | "cuiIconRefreshCcwSm" | "cuiIconRefreshCcw" | "cuiIconBarChartSm" | "cuiIconBarChart" | "cuiIconCurvedArrow" | "cuiIconBulletFillSm" | "cuiIconBulletSm" | "cuiIconArrowRight" | "cuiIconArrowRightSm" | "cuiIconImage" | "cuiIconCutLinearSm" | "cuiIconCutLinear" | "cuiIconForkLift" | "cuiIconForkLiftSm" | "cuiIconPartPrimitive" | "cuiIconPartPrimitiveSm" | "cuiIconChecklistsSm" | "cuiIconViewInAr" | "cuiIconViewInArSm" | "cuiIconFloorplanSolid" | "cuiIconFloorplanSolidSm" | "cuiIconMoon" | "cuiIconMoonSm" | "cuiIconSunSm" | "cuiIconTool" | "cuiIconToolSm" | "cuiIconCamera" | "cuiIconPanModeSm" | "cuiIconCrane" | "cuiIconCraneSm" | "cuiIconBin" | "cuiIconBinSm" | "cuiIconAuxSm" | "cuiIcon5sSm" | "cuiIconRackSm" | "cuiIconComputerChipSm" | "cuiIconRack" | "cuiIconAccessories" | "cuiIconAccessoriesSm" | "cuiIconLogisticVehicle" | "cuiIconLogisticVehicleSm" | "cuiIconCollapseSm" | "cuiIconBookOpenSm" | "cuiIconBriefcaseSm" | "cuiIconCreditCardSm" | "cuiIconTrelloSm" | "cuiIconBookOpen" | "cuiIconBriefcase" | "cuiIconCreditCard" | "cuiIconTrello">;
8
8
  readonly headerSlot: import("@angular/core").InputSignal<TemplateRef<unknown>>;
9
9
  protected onSwitch(event: MouseEvent): void;
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<CuiSidebarHeaderComponent, never>;
@@ -1,7 +1,7 @@
1
1
  import * as i0 from "@angular/core";
2
2
  export declare class CuiSidebarNavigationItemComponent {
3
3
  readonly text: import("@angular/core").InputSignal<string>;
4
- readonly icon: import("@angular/core").InputSignal<"cuiIconLoading" | "cuiIconCheck" | "cuiIconCheckSm" | "cuiIconCheckCircle" | "cuiIconCheckCircleSm" | "cuiIconCheckCircleV2" | "cuiIconMoreVertical" | "cuiIconMoreVerticalSm" | "cuiIconTrash" | "cuiIconTrashSm" | "cuiIconEdit" | "cuiIconEditSm" | "cuiIconArrowSortSm" | "cuiIconX" | "cuiIconXSm" | "cuiIconXCircle" | "cuiIconXCircleSm" | "cuiIconClear" | "cuiIconClearSm" | "cuiIconEye" | "cuiIconEyeSm" | "cuiIconEyeOff" | "cuiIconEyeOffSm" | "cuiIconChevronUp" | "cuiIconChevronUpSm" | "cuiIconChevronRight" | "cuiIconChevronRightSm" | "cuiIconChevronDown" | "cuiIconChevronDownSm" | "cuiIconChevronLeft" | "cuiIconChevronLeftSm" | "cuiIconChevronsRight" | "cuiIconChevronsRightSm" | "cuiIconChevronsLeft" | "cuiIconChevronsLeftSm" | "cuiIconChevronsSwitch" | "cuiIconDatabase" | "cuiIconDatabaseSm" | "cuiIconHome" | "cuiIconHomeSm" | "cuiIconUser" | "cuiIconUserSm" | "cuiIconUsers" | "cuiIconUsersBg" | "cuiIconUsersSm" | "cuiIconUserPlus" | "cuiIconUserPlusSm" | "cuiIconFormula" | "cuiIconSettings" | "cuiIconSettingsSm" | "cuiIconSettingsBold" | "cuiIconCopy" | "cuiIconCopySm" | "cuiIconSidebar" | "cuiIconSidebarSm" | "cuiIconChart" | "cuiIconFolder" | "cuiIconFolderSm" | "cuiIconFolderOpen" | "cuiIconFolderOpenSm" | "cuiIconPlus" | "cuiIconPlusSm" | "cuiIconPlusCircle" | "cuiIconFiltersLines" | "cuiIconFiltersLinesSm" | "cuiIconSearch" | "cuiIconSearchSm" | "cuiIconGrid" | "cuiIconGridSm" | "cuiIconList" | "cuiIconListSm" | "cuiIconProgress" | "cuiIconSortAZSm" | "cuiIconFlagBold" | "cuiIconFileText" | "cuiIconFileTextSm" | "cuiIconLink" | "cuiIconExternalLinkSm" | "cuiIconLinkBroken" | "cuiIconLinkBrokenSm" | "cuiIconClock" | "cuiIconClockSm" | "cuiIconInfo" | "cuiIconInfoSm" | "cuiIconInfoCircle" | "cuiIconInfoCircleBg" | "cuiIconAlertTriangle" | "cuiIconAlertTriangleSm" | "cuiIconAlertCircle" | "cuiIcon2Layers" | "cuiIcon2LayersSm" | "cuiIcon3Layers" | "cuiIcon3LayersSm" | "cuiIconLearningSm" | "cuiIconBellSm" | "cuiIconMessageCircle" | "cuiIconMessageCircleSm" | "cuiIconSlashDivider" | "cuiIconCaretDownFillXxs" | "cuiIconCaretDownFill" | "cuiIconDragHandleDots" | "cuiIconPlayCircle" | "cuiIconPlayCircleSm" | "cuiIconClipBoard" | "cuiIconUpload" | "cuiIconUploadSm" | "cuiIconMaximize" | "cuiIconMaximizeSm" | "cuiIconArrowUpRight" | "cuiIconArrowUpRightSm" | "cuiIconAddBranchSm" | "cuiIconBranch" | "cuiIconBranchSm" | "cuiIconPaperclip" | "cuiIconPaperclipSm" | "cuiIconToolsSm" | "cuiIconPartsSm" | "cuiIconEquipmentSm" | "cuiIconPrimitive" | "cuiIconPrimitiveSm" | "cuiIconSpool" | "cuiIconSpoolSm" | "cuiIconTank" | "cuiIconTankSm" | "cuiIconAssembly" | "cuiIconAssemblySm" | "cuiIconVariant" | "cuiIconVariantSm" | "cuiIconRichText" | "cuiIconRichTextSm" | "cuiIconChecklist" | "cuiIconRefreshCcwSm" | "cuiIconRefreshCcw" | "cuiIconBarChartSm" | "cuiIconBarChart" | "cuiIconCurvedArrow" | "cuiIconBulletFillSm" | "cuiIconBulletSm" | "cuiIconArrowRight" | "cuiIconArrowRightSm" | "cuiIconImage" | "cuiIconCutLinearSm" | "cuiIconCutLinear" | "cuiIconForkLift" | "cuiIconForkLiftSm" | "cuiIconPartPrimitive" | "cuiIconPartPrimitiveSm" | "cuiIconChecklistsSm" | "cuiIconViewInAr" | "cuiIconViewInArSm" | "cuiIconFloorplanSolid" | "cuiIconFloorplanSolidSm" | "cuiIconMoon" | "cuiIconMoonSm" | "cuiIconSunSm" | "cuiIconTool" | "cuiIconToolSm" | "cuiIconCamera" | "cuiIconPanModeSm" | "cuiIconCrane" | "cuiIconCraneSm" | "cuiIconBin" | "cuiIconBinSm" | "cuiIconAuxSm" | "cuiIcon5sSm" | "cuiIconRackSm" | "cuiIconAccessories" | "cuiIconAccessoriesSm" | "cuiIconLogisticVehicle" | "cuiIconLogisticVehicleSm" | "cuiIconComputerChipSm" | "cuiIconRack" | undefined>;
4
+ readonly icon: import("@angular/core").InputSignal<"cuiIconLoading" | "cuiIconCheck" | "cuiIconCheckSm" | "cuiIconCheckCircle" | "cuiIconCheckCircleSm" | "cuiIconCheckCircleV2" | "cuiIconMoreVertical" | "cuiIconMoreVerticalSm" | "cuiIconTrash" | "cuiIconTrashSm" | "cuiIconEdit" | "cuiIconEditSm" | "cuiIconArrowSortSm" | "cuiIconX" | "cuiIconXSm" | "cuiIconXCircle" | "cuiIconXCircleSm" | "cuiIconClear" | "cuiIconClearSm" | "cuiIconEye" | "cuiIconEyeSm" | "cuiIconEyeOff" | "cuiIconEyeOffSm" | "cuiIconChevronUp" | "cuiIconChevronUpSm" | "cuiIconChevronRight" | "cuiIconChevronRightSm" | "cuiIconChevronDown" | "cuiIconChevronDownSm" | "cuiIconChevronLeft" | "cuiIconChevronLeftSm" | "cuiIconChevronsRight" | "cuiIconChevronsRightSm" | "cuiIconChevronsLeft" | "cuiIconChevronsLeftSm" | "cuiIconChevronsSwitch" | "cuiIconDatabase" | "cuiIconDatabaseSm" | "cuiIconHome" | "cuiIconHomeSm" | "cuiIconUser" | "cuiIconUserSm" | "cuiIconUsers" | "cuiIconUsersBg" | "cuiIconUsersSm" | "cuiIconUserPlus" | "cuiIconUserPlusSm" | "cuiIconFormula" | "cuiIconSettings" | "cuiIconSettingsSm" | "cuiIconSettingsBold" | "cuiIconCopy" | "cuiIconCopySm" | "cuiIconSidebar" | "cuiIconSidebarSm" | "cuiIconChart" | "cuiIconFolder" | "cuiIconFolderSm" | "cuiIconFolderOpen" | "cuiIconFolderOpenSm" | "cuiIconPlus" | "cuiIconPlusSm" | "cuiIconPlusCircle" | "cuiIconFiltersLines" | "cuiIconFiltersLinesSm" | "cuiIconSearch" | "cuiIconSearchSm" | "cuiIconGrid" | "cuiIconGridSm" | "cuiIconList" | "cuiIconListSm" | "cuiIconProgress" | "cuiIconSortAZSm" | "cuiIconFlagBold" | "cuiIconFileText" | "cuiIconFileTextSm" | "cuiIconLink" | "cuiIconExternalLinkSm" | "cuiIconLinkBroken" | "cuiIconLinkBrokenSm" | "cuiIconClock" | "cuiIconClockSm" | "cuiIconInfo" | "cuiIconInfoSm" | "cuiIconInfoCircle" | "cuiIconInfoCircleBg" | "cuiIconAlertTriangle" | "cuiIconAlertTriangleSm" | "cuiIconAlertCircle" | "cuiIcon2Layers" | "cuiIcon2LayersSm" | "cuiIcon3Layers" | "cuiIcon3LayersSm" | "cuiIconLearningSm" | "cuiIconBellSm" | "cuiIconMessageCircle" | "cuiIconMessageCircleSm" | "cuiIconSlashDivider" | "cuiIconCaretDownFillXxs" | "cuiIconCaretDownFill" | "cuiIconDragHandleDots" | "cuiIconPlayCircle" | "cuiIconPlayCircleSm" | "cuiIconClipBoard" | "cuiIconUpload" | "cuiIconUploadSm" | "cuiIconMaximize" | "cuiIconMaximizeSm" | "cuiIconArrowUpRight" | "cuiIconArrowUpRightSm" | "cuiIconAddBranchSm" | "cuiIconBranch" | "cuiIconBranchSm" | "cuiIconPaperclip" | "cuiIconPaperclipSm" | "cuiIconToolsSm" | "cuiIconPartsSm" | "cuiIconEquipmentSm" | "cuiIconPrimitive" | "cuiIconPrimitiveSm" | "cuiIconSpool" | "cuiIconSpoolSm" | "cuiIconTank" | "cuiIconTankSm" | "cuiIconAssembly" | "cuiIconAssemblySm" | "cuiIconVariant" | "cuiIconVariantSm" | "cuiIconRichText" | "cuiIconRichTextSm" | "cuiIconChecklist" | "cuiIconRefreshCcwSm" | "cuiIconRefreshCcw" | "cuiIconBarChartSm" | "cuiIconBarChart" | "cuiIconCurvedArrow" | "cuiIconBulletFillSm" | "cuiIconBulletSm" | "cuiIconArrowRight" | "cuiIconArrowRightSm" | "cuiIconImage" | "cuiIconCutLinearSm" | "cuiIconCutLinear" | "cuiIconForkLift" | "cuiIconForkLiftSm" | "cuiIconPartPrimitive" | "cuiIconPartPrimitiveSm" | "cuiIconChecklistsSm" | "cuiIconViewInAr" | "cuiIconViewInArSm" | "cuiIconFloorplanSolid" | "cuiIconFloorplanSolidSm" | "cuiIconMoon" | "cuiIconMoonSm" | "cuiIconSunSm" | "cuiIconTool" | "cuiIconToolSm" | "cuiIconCamera" | "cuiIconPanModeSm" | "cuiIconCrane" | "cuiIconCraneSm" | "cuiIconBin" | "cuiIconBinSm" | "cuiIconAuxSm" | "cuiIcon5sSm" | "cuiIconRackSm" | "cuiIconComputerChipSm" | "cuiIconRack" | "cuiIconAccessories" | "cuiIconAccessoriesSm" | "cuiIconLogisticVehicle" | "cuiIconLogisticVehicleSm" | "cuiIconCollapseSm" | "cuiIconBookOpenSm" | "cuiIconBriefcaseSm" | "cuiIconCreditCardSm" | "cuiIconTrelloSm" | "cuiIconBookOpen" | "cuiIconBriefcase" | "cuiIconCreditCard" | "cuiIconTrello" | undefined>;
5
5
  readonly active: import("@angular/core").InputSignal<boolean | undefined>;
6
6
  readonly isOpen: import("@angular/core").InputSignal<boolean | undefined>;
7
7
  static ɵfac: i0.ɵɵFactoryDeclaration<CuiSidebarNavigationItemComponent, never>;
@@ -1,28 +1,20 @@
1
- import { OAuthInfoEvent, OAuthService } from 'angular-oauth2-oidc';
1
+ import { OAuthInfoEvent } from 'angular-oauth2-oidc';
2
2
  import { filter } from 'rxjs';
3
- export class CuiAuthBase extends OAuthService {
3
+ import { CuiTokenBase } from './token.service';
4
+ export class CuiAuthBase extends CuiTokenBase {
4
5
  createLoginUrl(state, loginHint, customRedirectUri, noPrompt, params) {
5
6
  return super.createLoginUrl(state, loginHint, customRedirectUri, noPrompt, params);
6
7
  }
7
- useCheckTokenFlow(loginCallback) {
8
- const isTokenExist = this.hasValidAccessToken();
8
+ async useCheckTokenFlow(loginCallback) {
9
+ const isExpired = this.checkIsTokenExpired();
9
10
  const isRefreshTokenExist = this.getRefreshToken();
10
- if (isTokenExist && isRefreshTokenExist) {
11
- return this.refreshTokenWithExpiredChecking();
11
+ if (!isRefreshTokenExist) {
12
+ return loginCallback();
12
13
  }
13
- return loginCallback();
14
- }
15
- checkIsTokenExpired() {
16
- const expiredTime = this.getAccessTokenExpiration();
17
- const currentTime = Date.now();
18
- return currentTime >= expiredTime;
19
- }
20
- refreshTokenWithExpiredChecking() {
21
- const isExpired = this.checkIsTokenExpired();
22
14
  if (!isExpired) {
23
15
  return;
24
16
  }
25
- this.refreshToken();
17
+ return await this.refreshToken();
26
18
  }
27
19
  initAuthRefreshEvents(loginCallback) {
28
20
  this.events.pipe(filter((event) => event instanceof OAuthInfoEvent)).subscribe((event) => {
@@ -36,4 +28,4 @@ export class CuiAuthBase extends OAuthService {
36
28
  });
37
29
  }
38
30
  }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlCLE1BQU0sT0FBTyxXQUFZLFNBQVEsWUFBWTtJQUN6QixjQUFjLENBQUMsS0FBYyxFQUFFLFNBQWtCLEVBQUUsaUJBQTBCLEVBQUUsUUFBa0IsRUFBRSxNQUFlO1FBQzlILE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRU0saUJBQWlCLENBQUMsYUFBeUI7UUFDOUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDaEQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFbkQsSUFBSSxZQUFZLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN0QyxPQUFPLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1FBQ2xELENBQUM7UUFFRCxPQUFPLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxtQkFBbUI7UUFDdEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDcEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRS9CLE9BQU8sV0FBVyxJQUFJLFdBQVcsQ0FBQztJQUN0QyxDQUFDO0lBRU0sK0JBQStCO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTdDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNiLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxhQUF5QjtRQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssWUFBWSxjQUFjLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JGLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxlQUFlLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUUsQ0FBQztnQkFDbEUsT0FBTztZQUNYLENBQUM7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztnQkFDekQsT0FBTyxhQUFhLEVBQUUsQ0FBQztZQUMzQixDQUFDO1lBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT0F1dGhJbmZvRXZlbnQsIE9BdXRoU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjbGFzcyBDdWlBdXRoQmFzZSBleHRlbmRzIE9BdXRoU2VydmljZSB7XG4gICAgcHVibGljIG92ZXJyaWRlIGNyZWF0ZUxvZ2luVXJsKHN0YXRlPzogc3RyaW5nLCBsb2dpbkhpbnQ/OiBzdHJpbmcsIGN1c3RvbVJlZGlyZWN0VXJpPzogc3RyaW5nLCBub1Byb21wdD86IGJvb2xlYW4sIHBhcmFtcz86IG9iamVjdCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBzdXBlci5jcmVhdGVMb2dpblVybChzdGF0ZSwgbG9naW5IaW50LCBjdXN0b21SZWRpcmVjdFVyaSwgbm9Qcm9tcHQsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHVzZUNoZWNrVG9rZW5GbG93KGxvZ2luQ2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNUb2tlbkV4aXN0ID0gdGhpcy5oYXNWYWxpZEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgIGNvbnN0IGlzUmVmcmVzaFRva2VuRXhpc3QgPSB0aGlzLmdldFJlZnJlc2hUb2tlbigpO1xuXG4gICAgICAgIGlmIChpc1Rva2VuRXhpc3QgJiYgaXNSZWZyZXNoVG9rZW5FeGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuV2l0aEV4cGlyZWRDaGVja2luZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvZ2luQ2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hlY2tJc1Rva2VuRXhwaXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXhwaXJlZFRpbWUgPSB0aGlzLmdldEFjY2Vzc1Rva2VuRXhwaXJhdGlvbigpO1xuICAgICAgICBjb25zdCBjdXJyZW50VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lID49IGV4cGlyZWRUaW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWZyZXNoVG9rZW5XaXRoRXhwaXJlZENoZWNraW5nKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpc0V4cGlyZWQgPSB0aGlzLmNoZWNrSXNUb2tlbkV4cGlyZWQoKTtcblxuICAgICAgICBpZiAoIWlzRXhwaXJlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdEF1dGhSZWZyZXNoRXZlbnRzKGxvZ2luQ2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ldmVudHMucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE9BdXRoSW5mb0V2ZW50KSkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgIT09ICd0b2tlbl9leHBpcmVzJyB8fCBldmVudC5pbmZvICE9PSAnYWNjZXNzX3Rva2VuJykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSB8fCAhdGhpcy5nZXRSZWZyZXNoVG9rZW4oKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2dpbkNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBaUIsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxNQUFNLE9BQU8sV0FBWSxTQUFRLFlBQVk7SUFDekIsY0FBYyxDQUFDLEtBQWMsRUFBRSxTQUFrQixFQUFFLGlCQUEwQixFQUFFLFFBQWtCLEVBQUUsTUFBZTtRQUM5SCxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUF5QjtRQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUVuRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN2QixPQUFPLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDYixPQUFPO1FBQ1gsQ0FBQztRQUVELE9BQU8sTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVNLHFCQUFxQixDQUFDLGFBQXlCO1FBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxZQUFZLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDckYsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGVBQWUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUNsRSxPQUFPO1lBQ1gsQ0FBQztZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO2dCQUN6RCxPQUFPLGFBQWEsRUFBRSxDQUFDO1lBQzNCLENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPQXV0aEluZm9FdmVudCwgVG9rZW5SZXNwb25zZSB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDdWlUb2tlbkJhc2UgfSBmcm9tICcuL3Rva2VuLnNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgQ3VpQXV0aEJhc2UgZXh0ZW5kcyBDdWlUb2tlbkJhc2Uge1xuICAgIHB1YmxpYyBvdmVycmlkZSBjcmVhdGVMb2dpblVybChzdGF0ZT86IHN0cmluZywgbG9naW5IaW50Pzogc3RyaW5nLCBjdXN0b21SZWRpcmVjdFVyaT86IHN0cmluZywgbm9Qcm9tcHQ/OiBib29sZWFuLCBwYXJhbXM/OiBvYmplY3QpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuY3JlYXRlTG9naW5Vcmwoc3RhdGUsIGxvZ2luSGludCwgY3VzdG9tUmVkaXJlY3RVcmksIG5vUHJvbXB0LCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB1c2VDaGVja1Rva2VuRmxvdyhsb2dpbkNhbGxiYWNrOiAoKSA9PiB2b2lkKTogUHJvbWlzZTxUb2tlblJlc3BvbnNlIHwgdm9pZD4ge1xuICAgICAgICBjb25zdCBpc0V4cGlyZWQgPSB0aGlzLmNoZWNrSXNUb2tlbkV4cGlyZWQoKTtcbiAgICAgICAgY29uc3QgaXNSZWZyZXNoVG9rZW5FeGlzdCA9IHRoaXMuZ2V0UmVmcmVzaFRva2VuKCk7XG5cbiAgICAgICAgaWYgKCFpc1JlZnJlc2hUb2tlbkV4aXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9naW5DYWxsYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0V4cGlyZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0QXV0aFJlZnJlc2hFdmVudHMobG9naW5DYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLmV2ZW50cy5waXBlKGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgT0F1dGhJbmZvRXZlbnQpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudHlwZSAhPT0gJ3Rva2VuX2V4cGlyZXMnIHx8IGV2ZW50LmluZm8gIT09ICdhY2Nlc3NfdG9rZW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzVmFsaWRBY2Nlc3NUb2tlbigpIHx8ICF0aGlzLmdldFJlZnJlc2hUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2luQ2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgfSk7XG4gICAgfVxufSJdfQ==
@@ -15,7 +15,7 @@ export class CuiBrowserAuthService extends CuiAuthBase {
15
15
  await this.loadDiscoveryDocument();
16
16
  await this.tryLogin();
17
17
  this.initAuthRefreshEvents(this.initLoginFlow.bind(this));
18
- this.useCheckTokenFlow(this.initLoginFlow.bind(this));
18
+ await this.useCheckTokenFlow(this.initLoginFlow.bind(this));
19
19
  this.router.navigateByUrl(this.location.path(false).split('?')[0]);
20
20
  }
21
21
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiBrowserAuthService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -27,4 +27,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27
27
  providedIn: 'root'
28
28
  }]
29
29
  }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1hdXRoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NlcnZpY2VzL2Jyb3dzZXItYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUs3QyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsV0FBVztJQUh0RDs7UUFJcUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBY2hEO0lBWlUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFzQjtRQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFM0IsTUFBTSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDOytHQWZRLHFCQUFxQjttSEFBckIscUJBQXFCLGNBRmxCLE1BQU07OzRGQUVULHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgdHlwZSB7IEF1dGhDb25maWcgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcblxuaW1wb3J0IHsgQ3VpQXV0aEJhc2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ3VpQnJvd3NlckF1dGhTZXJ2aWNlIGV4dGVuZHMgQ3VpQXV0aEJhc2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5pdEF1dGgoYXV0aENvbmZpZzogQXV0aENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnNldFN0b3JhZ2UobG9jYWxTdG9yYWdlKTtcbiAgICAgICAgdGhpcy5jb25maWd1cmUoYXV0aENvbmZpZyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkRGlzY292ZXJ5RG9jdW1lbnQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy50cnlMb2dpbigpO1xuXG4gICAgICAgIHRoaXMuaW5pdEF1dGhSZWZyZXNoRXZlbnRzKHRoaXMuaW5pdExvZ2luRmxvdy5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy51c2VDaGVja1Rva2VuRmxvdyh0aGlzLmluaXRMb2dpbkZsb3cuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmxvY2F0aW9uLnBhdGgoZmFsc2UpLnNwbGl0KCc/JylbMF0pO1xuICAgIH1cbn1cbiJdfQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1hdXRoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NlcnZpY2VzL2Jyb3dzZXItYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUs3QyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsV0FBVztJQUh0RDs7UUFJcUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBZWhEO0lBYlUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFzQjtRQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFM0IsTUFBTSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUUxRCxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7K0dBaEJRLHFCQUFxQjttSEFBckIscUJBQXFCLGNBRmxCLE1BQU07OzRGQUVULHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgdHlwZSB7IEF1dGhDb25maWcgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcblxuaW1wb3J0IHsgQ3VpQXV0aEJhc2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ3VpQnJvd3NlckF1dGhTZXJ2aWNlIGV4dGVuZHMgQ3VpQXV0aEJhc2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5pdEF1dGgoYXV0aENvbmZpZzogQXV0aENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnNldFN0b3JhZ2UobG9jYWxTdG9yYWdlKTtcbiAgICAgICAgdGhpcy5jb25maWd1cmUoYXV0aENvbmZpZyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkRGlzY292ZXJ5RG9jdW1lbnQoKTtcbiAgICAgICAgYXdhaXQgdGhpcy50cnlMb2dpbigpO1xuXG4gICAgICAgIHRoaXMuaW5pdEF1dGhSZWZyZXNoRXZlbnRzKHRoaXMuaW5pdExvZ2luRmxvdy5iaW5kKHRoaXMpKTtcblxuICAgICAgICBhd2FpdCB0aGlzLnVzZUNoZWNrVG9rZW5GbG93KHRoaXMuaW5pdExvZ2luRmxvdy5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMubG9jYXRpb24ucGF0aChmYWxzZSkuc3BsaXQoJz8nKVswXSk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,97 @@
1
+ import { inject, signal } from '@angular/core';
2
+ import { OAuthErrorEvent, OAuthService, OAuthSuccessEvent } from 'angular-oauth2-oidc';
3
+ import { CuiActivityTokenExchangeApiService } from '@cuby-ui/api';
4
+ import { from, map, of, switchMap, tap } from 'rxjs';
5
+ class CuiToken extends OAuthService {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.tokenData = signal({});
9
+ }
10
+ getTokenDataFromStore(token) {
11
+ const tokenData = this.tokenData()[token];
12
+ if (tokenData) {
13
+ return tokenData;
14
+ }
15
+ const currentTokenData = this.parseToken(token);
16
+ this.tokenData.set({ [token]: currentTokenData });
17
+ return currentTokenData;
18
+ }
19
+ parseToken(token) {
20
+ try {
21
+ const base64Url = token.split('.')[1];
22
+ const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
23
+ return JSON.parse(atob(base64));
24
+ }
25
+ catch {
26
+ throw new Error('Invalid token');
27
+ }
28
+ }
29
+ }
30
+ export class CuiTokenBase extends CuiToken {
31
+ constructor() {
32
+ super(...arguments);
33
+ this.activityTokenExchangeApiService = inject(CuiActivityTokenExchangeApiService);
34
+ }
35
+ getAccessTokenData() {
36
+ const token = this.getAccessToken();
37
+ if (!token) {
38
+ throw new Error('No access token found');
39
+ }
40
+ return this.getTokenDataFromStore(token);
41
+ }
42
+ checkIsTokenExpired() {
43
+ const token = this.getAccessToken();
44
+ if (!token) {
45
+ return true;
46
+ }
47
+ const expiredTime = this.getAccessTokenExpiration();
48
+ const currentTime = Date.now();
49
+ return currentTime >= expiredTime;
50
+ }
51
+ exchangeToken(params) {
52
+ return new Promise((resolve, reject) => this.activityTokenExchangeApiService
53
+ .tokenExchange(params)
54
+ .pipe(switchMap((tokenResponse) => this.setIdToken(tokenResponse)))
55
+ .subscribe({
56
+ next: (tokenResponse) => {
57
+ this.setTokenResponse(tokenResponse);
58
+ resolve(tokenResponse);
59
+ },
60
+ error: (error) => {
61
+ this.logger.error('Error exchanging token', error);
62
+ reject(error);
63
+ }
64
+ }));
65
+ }
66
+ // TODO: override refreshToken with custom refresh token request to the backend
67
+ refreshToken() {
68
+ return new Promise((resolve, reject) => this.activityTokenExchangeApiService
69
+ .tokenRefresh()
70
+ .pipe(switchMap((tokenResponse) => this.setIdToken(tokenResponse)))
71
+ .subscribe({
72
+ next: (tokenResponse) => {
73
+ this.setTokenResponse(tokenResponse);
74
+ resolve(tokenResponse);
75
+ },
76
+ error: (error) => {
77
+ this.logger.error('Error refreshing token', error);
78
+ this.eventsSubject.next(new OAuthErrorEvent('token_refresh_error', error));
79
+ reject(error);
80
+ }
81
+ }));
82
+ }
83
+ setTokenResponse(tokenResponse) {
84
+ const expiresIn = tokenResponse.expires_in || this.fallbackAccessTokenExpirationTimeInSec;
85
+ this.debug('tokenResponse', tokenResponse);
86
+ this.storeAccessTokenResponse(tokenResponse.access_token, tokenResponse.refresh_token, expiresIn, tokenResponse.scope);
87
+ this.eventsSubject.next(new OAuthSuccessEvent('token_received'));
88
+ this.eventsSubject.next(new OAuthSuccessEvent('token_refreshed'));
89
+ }
90
+ setIdToken(tokenResponse) {
91
+ if (!this.oidc || !tokenResponse.id_token) {
92
+ return of(tokenResponse);
93
+ }
94
+ return from(this.processIdToken(tokenResponse.id_token, tokenResponse.access_token, true)).pipe(tap((result) => this.storeIdToken(result)), map(() => tokenResponse));
95
+ }
96
+ }
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc2VydmljZXMvdG9rZW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBaUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsa0NBQWtDLEVBQStCLE1BQU0sY0FBYyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpFLE1BQWUsUUFBUyxTQUFRLFlBQVk7SUFBNUM7O1FBQ3FCLGNBQVMsR0FBRyxNQUFNLENBQW1DLEVBQUUsQ0FBQyxDQUFDO0lBMEI5RSxDQUFDO0lBeEJhLHFCQUFxQixDQUFDLEtBQWE7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDWixPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFFbEQsT0FBTyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxN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Q0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9BdXRoRXJyb3JFdmVudCwgT0F1dGhTZXJ2aWNlLCBPQXV0aFN1Y2Nlc3NFdmVudCwgVG9rZW5SZXNwb25zZSB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xuaW1wb3J0IHsgQ3VpQWN0aXZpdHlUb2tlbkV4Y2hhbmdlQXBpU2VydmljZSwgQ3VpVG9rZW5FeGNoYW5nZVJlcXVlc3RCb2R5IH0gZnJvbSAnQGN1YnktdWkvYXBpJztcbmltcG9ydCB7IGZyb20sIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmFic3RyYWN0IGNsYXNzIEN1aVRva2VuIGV4dGVuZHMgT0F1dGhTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuRGF0YSA9IHNpZ25hbDx7IFtrZXk6IHN0cmluZ106IFRva2VuUmVzcG9uc2UgfT4oe30pO1xuXG4gICAgcHJvdGVjdGVkIGdldFRva2VuRGF0YUZyb21TdG9yZSh0b2tlbjogc3RyaW5nKTogVG9rZW5SZXNwb25zZSB7XG4gICAgICAgIGNvbnN0IHRva2VuRGF0YSA9IHRoaXMudG9rZW5EYXRhKClbdG9rZW5dO1xuXG4gICAgICAgIGlmICh0b2tlbkRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbkRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXJyZW50VG9rZW5EYXRhID0gdGhpcy5wYXJzZVRva2VuKHRva2VuKTtcblxuICAgICAgICB0aGlzLnRva2VuRGF0YS5zZXQoeyBbdG9rZW5dOiBjdXJyZW50VG9rZW5EYXRhIH0pO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50VG9rZW5EYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VUb2tlbih0b2tlbjogc3RyaW5nKTogVG9rZW5SZXNwb25zZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlNjRVcmwgPSB0b2tlbi5zcGxpdCgnLicpWzFdO1xuICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gYmFzZTY0VXJsLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyk7XG5cbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGF0b2IoYmFzZTY0KSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRva2VuJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDdWlUb2tlbkJhc2UgZXh0ZW5kcyBDdWlUb2tlbiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3Rpdml0eVRva2VuRXhjaGFuZ2VBcGlTZXJ2aWNlID0gaW5qZWN0KEN1aUFjdGl2aXR5VG9rZW5FeGNoYW5nZUFwaVNlcnZpY2UpO1xuXG4gICAgcHVibGljIGdldEFjY2Vzc1Rva2VuRGF0YTxUIGV4dGVuZHMgVG9rZW5SZXNwb25zZSA9IFRva2VuUmVzcG9uc2U+KCk6IFQge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0QWNjZXNzVG9rZW4oKTtcblxuICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0b2tlbiBmb3VuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5EYXRhRnJvbVN0b3JlKHRva2VuKSBhcyBUO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGVja0lzVG9rZW5FeHBpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0QWNjZXNzVG9rZW4oKTtcblxuICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cGlyZWRUaW1lID0gdGhpcy5nZXRBY2Nlc3NUb2tlbkV4cGlyYXRpb24oKTtcbiAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50VGltZSA+PSBleHBpcmVkVGltZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhjaGFuZ2VUb2tlbihwYXJhbXM6IEN1aVRva2VuRXhjaGFuZ2VSZXF1ZXN0Qm9keSk6IFByb21pc2U8VG9rZW5SZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgICAgICAgIHRoaXMuYWN0aXZpdHlUb2tlbkV4Y2hhbmdlQXBpU2VydmljZVxuICAgICAgICAgICAgICAgIC50b2tlbkV4Y2hhbmdlKHBhcmFtcylcbiAgICAgICAgICAgICAgICAucGlwZShzd2l0Y2hNYXAoKHRva2VuUmVzcG9uc2UpID0+IHRoaXMuc2V0SWRUb2tlbih0b2tlblJlc3BvbnNlKSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6ICh0b2tlblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRva2VuUmVzcG9uc2UodG9rZW5SZXNwb25zZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodG9rZW5SZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBleGNoYW5naW5nIHRva2VuJywgZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBvdmVycmlkZSByZWZyZXNoVG9rZW4gd2l0aCBjdXN0b20gcmVmcmVzaCB0b2tlbiByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kXG4gICAgcHVibGljIG92ZXJyaWRlIHJlZnJlc2hUb2tlbigpOiBQcm9taXNlPFRva2VuUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAgICAgICAgICB0aGlzLmFjdGl2aXR5VG9rZW5FeGNoYW5nZUFwaVNlcnZpY2VcbiAgICAgICAgICAgICAgICAudG9rZW5SZWZyZXNoKClcbiAgICAgICAgICAgICAgICAucGlwZShzd2l0Y2hNYXAoKHRva2VuUmVzcG9uc2UpID0+IHRoaXMuc2V0SWRUb2tlbih0b2tlblJlc3BvbnNlKSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6ICh0b2tlblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRva2VuUmVzcG9uc2UodG9rZW5SZXNwb25zZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodG9rZW5SZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciByZWZyZXNoaW5nIHRva2VuJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudHNTdWJqZWN0Lm5leHQobmV3IE9BdXRoRXJyb3JFdmVudCgndG9rZW5fcmVmcmVzaF9lcnJvcicsIGVycm9yKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VG9rZW5SZXNwb25zZSh0b2tlblJlc3BvbnNlOiBUb2tlblJlc3BvbnNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4cGlyZXNJbiA9IHRva2VuUmVzcG9uc2UuZXhwaXJlc19pbiB8fCB0aGlzLmZhbGxiYWNrQWNjZXNzVG9rZW5FeHBpcmF0aW9uVGltZUluU2VjITtcblxuICAgICAgICB0aGlzLmRlYnVnKCd0b2tlblJlc3BvbnNlJywgdG9rZW5SZXNwb25zZSk7XG4gICAgICAgIHRoaXMuc3RvcmVBY2Nlc3NUb2tlblJlc3BvbnNlKFxuICAgICAgICAgICAgdG9rZW5SZXNwb25zZS5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICB0b2tlblJlc3BvbnNlLnJlZnJlc2hfdG9rZW4sXG4gICAgICAgICAgICBleHBpcmVzSW4sXG4gICAgICAgICAgICB0b2tlblJlc3BvbnNlLnNjb3BlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ldmVudHNTdWJqZWN0Lm5leHQobmV3IE9BdXRoU3VjY2Vzc0V2ZW50KCd0b2tlbl9yZWNlaXZlZCcpKTtcbiAgICAgICAgdGhpcy5ldmVudHNTdWJqZWN0Lm5leHQobmV3IE9BdXRoU3VjY2Vzc0V2ZW50KCd0b2tlbl9yZWZyZXNoZWQnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJZFRva2VuKHRva2VuUmVzcG9uc2U6IFRva2VuUmVzcG9uc2UpOiBPYnNlcnZhYmxlPFRva2VuUmVzcG9uc2U+IHtcbiAgICAgICAgaWYgKCF0aGlzLm9pZGMgfHwgIXRva2VuUmVzcG9uc2UuaWRfdG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBvZih0b2tlblJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMucHJvY2Vzc0lkVG9rZW4odG9rZW5SZXNwb25zZS5pZF90b2tlbiwgdG9rZW5SZXNwb25zZS5hY2Nlc3NfdG9rZW4sIHRydWUpKS5waXBlKFxuICAgICAgICAgICAgdGFwKChyZXN1bHQpID0+IHRoaXMuc3RvcmVJZFRva2VuKHJlc3VsdCkpLFxuICAgICAgICAgICAgbWFwKCgpID0+IHRva2VuUmVzcG9uc2UpXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
@@ -6,9 +6,10 @@ import * as i1$1 from '@cuby-ui/cdk';
6
6
  import { CUI_WINDOW, cuiCreateToken, cuiCreateTokenFromFactory, CuiDestroyService, CuiFilterPipe, CuiLetDirective, CuiPopoverService, cuiProvide, CUI_ANIMATION_FRAME, cuiZonefree, EMPTY_CLIENT_RECT, cuiInjectElement, CUI_LOCAL_STORAGE, CUI_IS_WEBKIT, CuiItemDirective, CuiActiveZone, CuiFocusTrapDirective, cuiGetElementObscures, CUI_IS_MOBILE, CuiHoveredService, cuiPure, cuiPointToClientRect, cuiClamp, cuiPx, cuiIfMap, cuiIsPresent, cuiTypedFromEvent, cuiZonefreeScheduler, cuiZoneOptimized, cuiIsNativeFocused, CuiClickOutsideDirective, CuiTargetDirective, cuiGetClosestFocusable, CuiTime, CuiDimensionsObserverDirective, CuiAutoResizingDirective, CuiIdService, CuiElementDirective, CuiDragPointerDirective, CuiDragDropDirective, CuiDragListDirective, CuiHandleScrollDirective } from '@cuby-ui/cdk';
7
7
  import { DomSanitizer } from '@angular/platform-browser';
8
8
  import { cuiIsIcon, CUI_ICONS } from '@cuby-ui/icons';
9
- import { BehaviorSubject, takeUntil, Observable, merge, distinctUntilChanged, startWith, map, finalize, filter, timer, Subject, switchMap, of, delay, repeat, tap, takeWhile, fromEvent, debounce, skip, take, forkJoin, throttleTime, concatMap, toArray, catchError, throwError, pairwise, debounceTime } from 'rxjs';
9
+ import { BehaviorSubject, takeUntil, Observable, merge, distinctUntilChanged, startWith, map, finalize, switchMap, of, from, tap, filter, timer, Subject, delay, repeat, takeWhile, fromEvent, debounce, skip, take, forkJoin, throttleTime, concatMap, toArray, catchError, throwError, pairwise, debounceTime } from 'rxjs';
10
10
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
11
- import { OAuthService, OAuthInfoEvent, provideOAuthClient } from 'angular-oauth2-oidc';
11
+ import { OAuthService, OAuthErrorEvent, OAuthSuccessEvent, OAuthInfoEvent, provideOAuthClient } from 'angular-oauth2-oidc';
12
+ import { CuiActivityTokenExchangeApiService, CuiTreeStructNavigatorApiService, CuiFrameApiService, CuiNodeChecklistApiService, CuiTreeStructApiService } from '@cuby-ui/api';
12
13
  import { trigger, transition, query, animateChild, style, animate, stagger } from '@angular/animations';
13
14
  import * as i2 from '@taiga-ui/polymorpheus';
14
15
  import { PolymorpheusOutlet, PolymorpheusTemplate, PolymorpheusComponent, injectContext } from '@taiga-ui/polymorpheus';
@@ -26,7 +27,6 @@ import { TranslocoDirective, TranslocoService, TranslocoModule } from '@jsverse/
26
27
  import { HttpClient, HttpErrorResponse } from '@angular/common/http';
27
28
  import { createCustomElement } from '@angular/elements';
28
29
  import { Router } from '@angular/router';
29
- import { CuiTreeStructNavigatorApiService, CuiFrameApiService, CuiNodeChecklistApiService, CuiTreeStructApiService } from '@cuby-ui/api';
30
30
 
31
31
  class CuiAccordionComponent {
32
32
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiAccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -861,29 +861,113 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
861
861
  }]
862
862
  }] });
863
863
 
864
- class CuiAuthBase extends OAuthService {
865
- createLoginUrl(state, loginHint, customRedirectUri, noPrompt, params) {
866
- return super.createLoginUrl(state, loginHint, customRedirectUri, noPrompt, params);
864
+ class CuiToken extends OAuthService {
865
+ constructor() {
866
+ super(...arguments);
867
+ this.tokenData = signal({});
867
868
  }
868
- useCheckTokenFlow(loginCallback) {
869
- const isTokenExist = this.hasValidAccessToken();
870
- const isRefreshTokenExist = this.getRefreshToken();
871
- if (isTokenExist && isRefreshTokenExist) {
872
- return this.refreshTokenWithExpiredChecking();
869
+ getTokenDataFromStore(token) {
870
+ const tokenData = this.tokenData()[token];
871
+ if (tokenData) {
872
+ return tokenData;
873
+ }
874
+ const currentTokenData = this.parseToken(token);
875
+ this.tokenData.set({ [token]: currentTokenData });
876
+ return currentTokenData;
877
+ }
878
+ parseToken(token) {
879
+ try {
880
+ const base64Url = token.split('.')[1];
881
+ const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
882
+ return JSON.parse(atob(base64));
883
+ }
884
+ catch {
885
+ throw new Error('Invalid token');
873
886
  }
874
- return loginCallback();
887
+ }
888
+ }
889
+ class CuiTokenBase extends CuiToken {
890
+ constructor() {
891
+ super(...arguments);
892
+ this.activityTokenExchangeApiService = inject(CuiActivityTokenExchangeApiService);
893
+ }
894
+ getAccessTokenData() {
895
+ const token = this.getAccessToken();
896
+ if (!token) {
897
+ throw new Error('No access token found');
898
+ }
899
+ return this.getTokenDataFromStore(token);
875
900
  }
876
901
  checkIsTokenExpired() {
902
+ const token = this.getAccessToken();
903
+ if (!token) {
904
+ return true;
905
+ }
877
906
  const expiredTime = this.getAccessTokenExpiration();
878
907
  const currentTime = Date.now();
879
908
  return currentTime >= expiredTime;
880
909
  }
881
- refreshTokenWithExpiredChecking() {
910
+ exchangeToken(params) {
911
+ return new Promise((resolve, reject) => this.activityTokenExchangeApiService
912
+ .tokenExchange(params)
913
+ .pipe(switchMap((tokenResponse) => this.setIdToken(tokenResponse)))
914
+ .subscribe({
915
+ next: (tokenResponse) => {
916
+ this.setTokenResponse(tokenResponse);
917
+ resolve(tokenResponse);
918
+ },
919
+ error: (error) => {
920
+ this.logger.error('Error exchanging token', error);
921
+ reject(error);
922
+ }
923
+ }));
924
+ }
925
+ // TODO: override refreshToken with custom refresh token request to the backend
926
+ refreshToken() {
927
+ return new Promise((resolve, reject) => this.activityTokenExchangeApiService
928
+ .tokenRefresh()
929
+ .pipe(switchMap((tokenResponse) => this.setIdToken(tokenResponse)))
930
+ .subscribe({
931
+ next: (tokenResponse) => {
932
+ this.setTokenResponse(tokenResponse);
933
+ resolve(tokenResponse);
934
+ },
935
+ error: (error) => {
936
+ this.logger.error('Error refreshing token', error);
937
+ this.eventsSubject.next(new OAuthErrorEvent('token_refresh_error', error));
938
+ reject(error);
939
+ }
940
+ }));
941
+ }
942
+ setTokenResponse(tokenResponse) {
943
+ const expiresIn = tokenResponse.expires_in || this.fallbackAccessTokenExpirationTimeInSec;
944
+ this.debug('tokenResponse', tokenResponse);
945
+ this.storeAccessTokenResponse(tokenResponse.access_token, tokenResponse.refresh_token, expiresIn, tokenResponse.scope);
946
+ this.eventsSubject.next(new OAuthSuccessEvent('token_received'));
947
+ this.eventsSubject.next(new OAuthSuccessEvent('token_refreshed'));
948
+ }
949
+ setIdToken(tokenResponse) {
950
+ if (!this.oidc || !tokenResponse.id_token) {
951
+ return of(tokenResponse);
952
+ }
953
+ return from(this.processIdToken(tokenResponse.id_token, tokenResponse.access_token, true)).pipe(tap((result) => this.storeIdToken(result)), map(() => tokenResponse));
954
+ }
955
+ }
956
+
957
+ class CuiAuthBase extends CuiTokenBase {
958
+ createLoginUrl(state, loginHint, customRedirectUri, noPrompt, params) {
959
+ return super.createLoginUrl(state, loginHint, customRedirectUri, noPrompt, params);
960
+ }
961
+ async useCheckTokenFlow(loginCallback) {
882
962
  const isExpired = this.checkIsTokenExpired();
963
+ const isRefreshTokenExist = this.getRefreshToken();
964
+ if (!isRefreshTokenExist) {
965
+ return loginCallback();
966
+ }
883
967
  if (!isExpired) {
884
968
  return;
885
969
  }
886
- this.refreshToken();
970
+ return await this.refreshToken();
887
971
  }
888
972
  initAuthRefreshEvents(loginCallback) {
889
973
  this.events.pipe(filter((event) => event instanceof OAuthInfoEvent)).subscribe((event) => {
@@ -7554,7 +7638,7 @@ class CuiBrowserAuthService extends CuiAuthBase {
7554
7638
  await this.loadDiscoveryDocument();
7555
7639
  await this.tryLogin();
7556
7640
  this.initAuthRefreshEvents(this.initLoginFlow.bind(this));
7557
- this.useCheckTokenFlow(this.initLoginFlow.bind(this));
7641
+ await this.useCheckTokenFlow(this.initLoginFlow.bind(this));
7558
7642
  this.router.navigateByUrl(this.location.path(false).split('?')[0]);
7559
7643
  }
7560
7644
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiBrowserAuthService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }