ngx-oauth 8.0.1 → 8.0.3

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.
@@ -35,23 +35,29 @@ class OAuthLoginComponent {
35
35
  this.user = inject(OAUTH_USER);
36
36
  this.isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
37
37
  this.OAuthStatus = OAuthStatus;
38
- this.config = input({}, ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
38
+ this.config = input({}, /* @ts-ignore */
39
+ ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
39
40
  this.i18n = input(defaultI18n, { ...(ngDevMode ? { debugName: "i18n" } : /* istanbul ignore next */ {}), transform: v => ({ ...defaultI18n, ...v }) });
40
- this.trigger = viewChild(MatMenuTrigger, ...(ngDevMode ? [{ debugName: "trigger" }] : /* istanbul ignore next */ []));
41
+ this.trigger = viewChild(MatMenuTrigger, /* @ts-ignore */
42
+ ...(ngDevMode ? [{ debugName: "trigger" }] : /* istanbul ignore next */ []));
41
43
  this.status = this.oauth.status;
42
44
  this.isAuthCode = computed(() => {
43
45
  const { responseType } = this.config();
44
46
  return responseType && responseType !== OAuthType.RESOURCE;
45
- }, ...(ngDevMode ? [{ debugName: "isAuthCode" }] : /* istanbul ignore next */ []));
47
+ }, /* @ts-ignore */
48
+ ...(ngDevMode ? [{ debugName: "isAuthCode" }] : /* istanbul ignore next */ []));
46
49
  this.profile = computed(() => {
47
50
  const info = this.user.value() ?? {};
48
51
  const title = info.name || info.preferred_username || info.email || info.sub || '';
49
52
  const subtitle = info.email ?? '';
50
53
  const initials = `${info.given_name?.charAt(0) ?? ''}${info.family_name?.charAt(0) ?? ''}`.toUpperCase();
51
54
  return { title, subtitle, picture: info.picture, initials };
52
- }, ...(ngDevMode ? [{ debugName: "profile" }] : /* istanbul ignore next */ []));
53
- this.visible = signal(false, ...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
54
- this.showError = signal(true, ...(ngDevMode ? [{ debugName: "showError" }] : /* istanbul ignore next */ []));
55
+ }, /* @ts-ignore */
56
+ ...(ngDevMode ? [{ debugName: "profile" }] : /* istanbul ignore next */ []));
57
+ this.visible = signal(false, /* @ts-ignore */
58
+ ...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
59
+ this.showError = signal(true, /* @ts-ignore */
60
+ ...(ngDevMode ? [{ debugName: "showError" }] : /* istanbul ignore next */ []));
55
61
  this.username = '';
56
62
  this.password = '';
57
63
  effect(() => {
@@ -78,8 +84,8 @@ class OAuthLoginComponent {
78
84
  this.trigger()?.closeMenu();
79
85
  return this.oauth.login(parameters);
80
86
  }
81
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: OAuthLoginComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
82
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: OAuthLoginComponent, isStandalone: true, selector: "oauth-login", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, i18n: { classPropertyName: "i18n", publicName: "i18n", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true, isSignal: true }], ngImport: i0, template: `
87
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: OAuthLoginComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
88
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: OAuthLoginComponent, isStandalone: true, selector: "oauth-login", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, i18n: { classPropertyName: "i18n", publicName: "i18n", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true, isSignal: true }], ngImport: i0, template: `
83
89
  @if (isBrowser) {
84
90
  @if (status(); as s) {
85
91
  @if (s === OAuthStatus.NOT_AUTHORIZED && isAuthCode()) {
@@ -168,9 +174,9 @@ class OAuthLoginComponent {
168
174
  }
169
175
  }
170
176
  }
171
- `, isInline: true, styles: [".mat-mdc-menu-panel:has(.oauth-login-content){max-width:none;min-width:360px}.oauth-login-content .mat-mdc-list-item .mdc-list-item__end{align-self:center!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i6.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i6.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i6.MatListItemAvatar, selector: "[matListItemAvatar]" }, { kind: "directive", type: i6.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i6.MatListItemLine, selector: "[matListItemLine]" }, { kind: "directive", type: i6.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i6.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], encapsulation: i0.ViewEncapsulation.None }); }
177
+ `, isInline: true, styles: [".mat-mdc-menu-panel:has(.oauth-login-content){max-width:none;min-width:360px}.oauth-login-content .mat-mdc-list-item .mdc-list-item__end{align-self:center!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i6.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i6.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i6.MatListItemAvatar, selector: "[matListItemAvatar]" }, { kind: "directive", type: i6.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i6.MatListItemLine, selector: "[matListItemLine]" }, { kind: "directive", type: i6.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i6.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], encapsulation: i0.ViewEncapsulation.None }); }
172
178
  }
173
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: OAuthLoginComponent, decorators: [{
179
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: OAuthLoginComponent, decorators: [{
174
180
  type: Component,
175
181
  args: [{ selector: 'oauth-login', standalone: true, imports: [CommonModule, FormsModule, MatButtonModule, MatFormFieldModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule], template: `
176
182
  @if (isBrowser) {
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-oauth-component.mjs","sources":["../../../projects/ngx-oauth/component/o-auth-login.component.ts","../../../projects/ngx-oauth/component/ngx-oauth-component.ts"],"sourcesContent":["import { Component, computed, effect, inject, input, PLATFORM_ID, signal, viewChild, ViewEncapsulation } from '@angular/core'\nimport { CommonModule, isPlatformBrowser } from '@angular/common'\nimport { FormsModule } from '@angular/forms'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatFormFieldModule } from '@angular/material/form-field'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatInputModule } from '@angular/material/input'\nimport { MatListModule } from '@angular/material/list'\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu'\nimport { AuthorizationCodeParameters, OAUTH, OAUTH_USER, OAuthParameters, OAuthStatus, OAuthType, ResourceOwnerParameters } from 'ngx-oauth'\n\nexport type OAuthLoginConfig = Partial<ResourceOwnerParameters & AuthorizationCodeParameters & { logoutRedirectUri: string }>\n\nexport type OAuthLoginI18n = {\n username?: string\n password?: string\n submit?: string\n logout?: string\n notAuthorized?: string\n authorized?: string\n denied?: string\n dismiss?: string\n showPassword?: string\n hidePassword?: string\n}\n\nconst defaultI18n: Required<OAuthLoginI18n> = {\n username: 'Username',\n password: 'Password',\n submit: 'Sign in',\n logout: 'Sign out',\n notAuthorized: 'Sign in',\n authorized: 'Welcome',\n denied: 'Access denied. Try again.',\n dismiss: 'Dismiss',\n showPassword: 'Show password',\n hidePassword: 'Hide password'\n}\n\n@Component({\n selector: 'oauth-login',\n standalone: true,\n imports: [CommonModule, FormsModule, MatButtonModule, MatFormFieldModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule],\n template: `\n @if (isBrowser) {\n @if (status(); as s) {\n @if (s === OAuthStatus.NOT_AUTHORIZED && isAuthCode()) {\n <button matIconButton type=\"button\" [attr.aria-label]=\"i18n().notAuthorized\" (click)=\"login(config())\">\n <mat-icon [fontSet]=\"'material-icons-outlined'\">account_circle</mat-icon>\n </button>\n } @else {\n <button\n matIconButton\n [matMenuTriggerFor]=\"menu\"\n [attr.aria-label]=\"s === OAuthStatus.AUTHORIZED ? i18n().authorized : i18n().notAuthorized\">\n <mat-icon [fontSet]=\"s === OAuthStatus.AUTHORIZED ? 'material-icons' : 'material-icons-outlined'\">account_circle</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\" xPosition=\"after\">\n <div tabindex=\"-1\" (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\" class=\"oauth-login-content\">\n @if (s === OAuthStatus.AUTHORIZED) {\n <mat-list class=\"p-0!\">\n <mat-list-item>\n @if (profile().picture) {\n <img matListItemAvatar [src]=\"profile().picture\" alt=\"\" />\n } @else {\n <div\n matListItemAvatar\n class=\"flex! items-center justify-center bg-blue-600 text-sm font-semibold uppercase text-white\">\n {{ profile().initials || '?' }}\n </div>\n }\n <span matListItemTitle>{{ profile().title }}</span>\n @if (profile().subtitle) {\n <span matListItemLine>{{ profile().subtitle }}</span>\n }\n <div matListItemMeta>\n <button mat-icon-button type=\"button\" [attr.aria-label]=\"i18n().logout\" (click)=\"logout()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </mat-list-item>\n </mat-list>\n } @else if (s === OAuthStatus.DENIED && showError()) {\n <mat-list class=\"p-0!\">\n <mat-list-item class=\"!bg-red-50 text-red-800\">\n <mat-icon matListItemIcon class=\"!text-red-600\">error_outline</mat-icon>\n <span matListItemLine class=\"flex-1 text-sm\" [innerHTML]=\"i18n().denied\"></span>\n <button mat-icon-button matListItemMeta type=\"button\" (click)=\"dismissError()\" [attr.aria-label]=\"i18n().dismiss\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-list-item>\n </mat-list>\n } @else {\n <form\n #form=\"ngForm\"\n (ngSubmit)=\"login({ username: username, password: password })\"\n autocomplete=\"on\"\n class=\"flex flex-col gap-3 m-3\">\n <mat-form-field subscriptSizing=\"dynamic\" class=\"block w-full\">\n <mat-label>{{ i18n().username }}</mat-label>\n <mat-icon matPrefix>alternate_email</mat-icon>\n <input matInput name=\"username\" autocomplete=\"username\" required [(ngModel)]=\"username\" />\n </mat-form-field>\n <mat-form-field subscriptSizing=\"dynamic\" class=\"block w-full\">\n <mat-label>{{ i18n().password }}</mat-label>\n <mat-icon matPrefix>password</mat-icon>\n <input\n matInput\n name=\"password\"\n autocomplete=\"current-password\"\n required\n [type]=\"visible() ? 'text' : 'password'\"\n [(ngModel)]=\"password\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"visible.set(!visible())\"\n [attr.aria-label]=\"visible() ? i18n().hidePassword : i18n().showPassword\">\n <mat-icon>{{ visible() ? 'visibility_off' : 'visibility' }}</mat-icon>\n </button>\n </mat-form-field>\n <div class=\"flex justify-end pt-1\">\n <button mat-flat-button type=\"submit\" [disabled]=\"form.invalid\">{{ i18n().submit }}</button>\n </div>\n </form>\n }\n </div>\n </mat-menu>\n }\n }\n }\n `,\n styles: `\n .mat-mdc-menu-panel:has(.oauth-login-content) {\n max-width: none;\n min-width: 360px;\n }\n .oauth-login-content .mat-mdc-list-item .mdc-list-item__end {\n align-self: center !important;\n }\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class OAuthLoginComponent {\n private oauth = inject(OAUTH)\n private user = inject(OAUTH_USER)\n protected readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID))\n readonly OAuthStatus = OAuthStatus\n readonly config = input<OAuthLoginConfig>({})\n readonly i18n = input<Required<OAuthLoginI18n>, OAuthLoginI18n | undefined>(defaultI18n, {\n transform: v => ({ ...defaultI18n, ...v })\n })\n readonly trigger = viewChild(MatMenuTrigger)\n protected readonly status = this.oauth.status\n protected readonly isAuthCode = computed(() => {\n const { responseType } = this.config()\n return responseType && responseType !== OAuthType.RESOURCE\n })\n protected readonly profile = computed(() => {\n const info = this.user.value() ?? {}\n const title = info.name || info.preferred_username || info.email || info.sub || ''\n const subtitle = info.email ?? ''\n const initials = `${info.given_name?.charAt(0) ?? ''}${info.family_name?.charAt(0) ?? ''}`.toUpperCase()\n return { title, subtitle, picture: info.picture, initials }\n })\n protected readonly visible = signal(false)\n protected readonly showError = signal(true)\n username = ''\n password = ''\n\n constructor() {\n effect(() => {\n if (this.status() === OAuthStatus.DENIED) this.showError.set(true)\n })\n effect(() => {\n const { username, password } = this.config()\n if (username !== undefined) this.username = username\n if (password !== undefined) this.password = password\n })\n }\n\n logout() {\n this.trigger()?.closeMenu()\n return this.oauth.logout(this.config().logoutRedirectUri, this.config().state)\n }\n\n dismissError() {\n this.showError.set(false)\n return this.oauth.logout()\n }\n\n login(parameters: OAuthLoginConfig) {\n this.trigger()?.closeMenu()\n return this.oauth.login(parameters as OAuthParameters)\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-oauth-component.mjs","sources":["../../../projects/ngx-oauth/component/o-auth-login.component.ts","../../../projects/ngx-oauth/component/ngx-oauth-component.ts"],"sourcesContent":["import { Component, computed, effect, inject, input, PLATFORM_ID, signal, viewChild, ViewEncapsulation } from '@angular/core'\nimport { CommonModule, isPlatformBrowser } from '@angular/common'\nimport { FormsModule } from '@angular/forms'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatFormFieldModule } from '@angular/material/form-field'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatInputModule } from '@angular/material/input'\nimport { MatListModule } from '@angular/material/list'\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu'\nimport { AuthorizationCodeParameters, OAUTH, OAUTH_USER, OAuthParameters, OAuthStatus, OAuthType, ResourceOwnerParameters } from 'ngx-oauth'\n\nexport type OAuthLoginConfig = Partial<ResourceOwnerParameters & AuthorizationCodeParameters & { logoutRedirectUri: string }>\n\nexport type OAuthLoginI18n = {\n username?: string\n password?: string\n submit?: string\n logout?: string\n notAuthorized?: string\n authorized?: string\n denied?: string\n dismiss?: string\n showPassword?: string\n hidePassword?: string\n}\n\nconst defaultI18n: Required<OAuthLoginI18n> = {\n username: 'Username',\n password: 'Password',\n submit: 'Sign in',\n logout: 'Sign out',\n notAuthorized: 'Sign in',\n authorized: 'Welcome',\n denied: 'Access denied. Try again.',\n dismiss: 'Dismiss',\n showPassword: 'Show password',\n hidePassword: 'Hide password'\n}\n\n@Component({\n selector: 'oauth-login',\n standalone: true,\n imports: [CommonModule, FormsModule, MatButtonModule, MatFormFieldModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule],\n template: `\n @if (isBrowser) {\n @if (status(); as s) {\n @if (s === OAuthStatus.NOT_AUTHORIZED && isAuthCode()) {\n <button matIconButton type=\"button\" [attr.aria-label]=\"i18n().notAuthorized\" (click)=\"login(config())\">\n <mat-icon [fontSet]=\"'material-icons-outlined'\">account_circle</mat-icon>\n </button>\n } @else {\n <button\n matIconButton\n [matMenuTriggerFor]=\"menu\"\n [attr.aria-label]=\"s === OAuthStatus.AUTHORIZED ? i18n().authorized : i18n().notAuthorized\">\n <mat-icon [fontSet]=\"s === OAuthStatus.AUTHORIZED ? 'material-icons' : 'material-icons-outlined'\">account_circle</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\" xPosition=\"after\">\n <div tabindex=\"-1\" (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\" class=\"oauth-login-content\">\n @if (s === OAuthStatus.AUTHORIZED) {\n <mat-list class=\"p-0!\">\n <mat-list-item>\n @if (profile().picture) {\n <img matListItemAvatar [src]=\"profile().picture\" alt=\"\" />\n } @else {\n <div\n matListItemAvatar\n class=\"flex! items-center justify-center bg-blue-600 text-sm font-semibold uppercase text-white\">\n {{ profile().initials || '?' }}\n </div>\n }\n <span matListItemTitle>{{ profile().title }}</span>\n @if (profile().subtitle) {\n <span matListItemLine>{{ profile().subtitle }}</span>\n }\n <div matListItemMeta>\n <button mat-icon-button type=\"button\" [attr.aria-label]=\"i18n().logout\" (click)=\"logout()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </mat-list-item>\n </mat-list>\n } @else if (s === OAuthStatus.DENIED && showError()) {\n <mat-list class=\"p-0!\">\n <mat-list-item class=\"!bg-red-50 text-red-800\">\n <mat-icon matListItemIcon class=\"!text-red-600\">error_outline</mat-icon>\n <span matListItemLine class=\"flex-1 text-sm\" [innerHTML]=\"i18n().denied\"></span>\n <button mat-icon-button matListItemMeta type=\"button\" (click)=\"dismissError()\" [attr.aria-label]=\"i18n().dismiss\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-list-item>\n </mat-list>\n } @else {\n <form\n #form=\"ngForm\"\n (ngSubmit)=\"login({ username: username, password: password })\"\n autocomplete=\"on\"\n class=\"flex flex-col gap-3 m-3\">\n <mat-form-field subscriptSizing=\"dynamic\" class=\"block w-full\">\n <mat-label>{{ i18n().username }}</mat-label>\n <mat-icon matPrefix>alternate_email</mat-icon>\n <input matInput name=\"username\" autocomplete=\"username\" required [(ngModel)]=\"username\" />\n </mat-form-field>\n <mat-form-field subscriptSizing=\"dynamic\" class=\"block w-full\">\n <mat-label>{{ i18n().password }}</mat-label>\n <mat-icon matPrefix>password</mat-icon>\n <input\n matInput\n name=\"password\"\n autocomplete=\"current-password\"\n required\n [type]=\"visible() ? 'text' : 'password'\"\n [(ngModel)]=\"password\" />\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"visible.set(!visible())\"\n [attr.aria-label]=\"visible() ? i18n().hidePassword : i18n().showPassword\">\n <mat-icon>{{ visible() ? 'visibility_off' : 'visibility' }}</mat-icon>\n </button>\n </mat-form-field>\n <div class=\"flex justify-end pt-1\">\n <button mat-flat-button type=\"submit\" [disabled]=\"form.invalid\">{{ i18n().submit }}</button>\n </div>\n </form>\n }\n </div>\n </mat-menu>\n }\n }\n }\n `,\n styles: `\n .mat-mdc-menu-panel:has(.oauth-login-content) {\n max-width: none;\n min-width: 360px;\n }\n .oauth-login-content .mat-mdc-list-item .mdc-list-item__end {\n align-self: center !important;\n }\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class OAuthLoginComponent {\n private oauth = inject(OAUTH)\n private user = inject(OAUTH_USER)\n protected readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID))\n readonly OAuthStatus = OAuthStatus\n readonly config = input<OAuthLoginConfig>({})\n readonly i18n = input<Required<OAuthLoginI18n>, OAuthLoginI18n | undefined>(defaultI18n, {\n transform: v => ({ ...defaultI18n, ...v })\n })\n readonly trigger = viewChild(MatMenuTrigger)\n protected readonly status = this.oauth.status\n protected readonly isAuthCode = computed(() => {\n const { responseType } = this.config()\n return responseType && responseType !== OAuthType.RESOURCE\n })\n protected readonly profile = computed(() => {\n const info = this.user.value() ?? {}\n const title = info.name || info.preferred_username || info.email || info.sub || ''\n const subtitle = info.email ?? ''\n const initials = `${info.given_name?.charAt(0) ?? ''}${info.family_name?.charAt(0) ?? ''}`.toUpperCase()\n return { title, subtitle, picture: info.picture, initials }\n })\n protected readonly visible = signal(false)\n protected readonly showError = signal(true)\n username = ''\n password = ''\n\n constructor() {\n effect(() => {\n if (this.status() === OAuthStatus.DENIED) this.showError.set(true)\n })\n effect(() => {\n const { username, password } = this.config()\n if (username !== undefined) this.username = username\n if (password !== undefined) this.password = password\n })\n }\n\n logout() {\n this.trigger()?.closeMenu()\n return this.oauth.logout(this.config().logoutRedirectUri, this.config().state)\n }\n\n dismissError() {\n this.showError.set(false)\n return this.oauth.logout()\n }\n\n login(parameters: OAuthLoginConfig) {\n this.trigger()?.closeMenu()\n return this.oauth.login(parameters as OAuthParameters)\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -20,8 +20,10 @@ const defaults = {
20
20
  ignorePaths: [],
21
21
  strictJwt: true
22
22
  };
23
- const oauthConfig = signal(defaults, ...(ngDevMode ? [{ debugName: "oauthConfig" }] : /* istanbul ignore next */ []));
24
- const config = linkedSignal(() => oauthConfig().config, ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
23
+ const oauthConfig = signal(defaults, /* @ts-ignore */
24
+ ...(ngDevMode ? [{ debugName: "oauthConfig" }] : /* istanbul ignore next */ []));
25
+ const config = linkedSignal(() => oauthConfig().config, /* @ts-ignore */
26
+ ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
25
27
  const provideOAuthConfig = (cfg = {}) => makeEnvironmentProviders([provideEnvironmentInitializer(() => oauthConfig.set({ ...defaults, ...cfg }))]);
26
28
 
27
29
  const storage = () => {
@@ -42,7 +44,8 @@ const set = (key, value) => {
42
44
  };
43
45
  const storageSignal = (keyInput, defaultValue) => {
44
46
  const keyFn = typeof keyInput === 'function' ? keyInput : () => keyInput;
45
- const s = signal(get(keyFn()) ?? defaultValue, ...(ngDevMode ? [{ debugName: "s" }] : /* istanbul ignore next */ []));
47
+ const s = signal(get(keyFn()) ?? defaultValue, /* @ts-ignore */
48
+ ...(ngDevMode ? [{ debugName: "s" }] : /* istanbul ignore next */ []));
46
49
  const { set: signalSet, update } = s;
47
50
  s.set = value => {
48
51
  set(keyFn(), value);
@@ -218,21 +221,29 @@ const OAUTH_TOKEN = new InjectionToken('OAUTH_TOKEN', {
218
221
  factory: () => {
219
222
  const refresh = inject(OAUTH_REFRESH);
220
223
  const openIdConfiguration = inject(OAUTH_OPENID_CONFIG);
221
- const storageKey = linkedSignal(() => oauthConfig().storageKey, ...(ngDevMode ? [{ debugName: "storageKey" }] : /* istanbul ignore next */ []));
224
+ const storageKey = linkedSignal(() => oauthConfig().storageKey, /* @ts-ignore */
225
+ ...(ngDevMode ? [{ debugName: "storageKey" }] : /* istanbul ignore next */ []));
222
226
  const token = storageSignal(storageKey, {});
223
- const type = computed(() => token().type, ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
227
+ const type = computed(() => token().type, /* @ts-ignore */
228
+ ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
224
229
  const accessToken = computed(() => {
225
230
  const { token_type, access_token } = token() || {};
226
231
  return (token_type && access_token && `${token_type} ${access_token}`) || undefined;
227
- }, ...(ngDevMode ? [{ debugName: "accessToken" }] : /* istanbul ignore next */ []));
232
+ }, /* @ts-ignore */
233
+ ...(ngDevMode ? [{ debugName: "accessToken" }] : /* istanbul ignore next */ []));
228
234
  const status = computed(() => {
229
235
  const { error, access_token } = token();
230
236
  return ((error && OAuthStatus.DENIED) || (access_token && !isExpiredToken(token()) && OAuthStatus.AUTHORIZED) || OAuthStatus.NOT_AUTHORIZED);
231
- }, ...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
232
- const isAuthorized = computed(() => status() === OAuthStatus.AUTHORIZED, ...(ngDevMode ? [{ debugName: "isAuthorized" }] : /* istanbul ignore next */ []));
233
- const error = computed(() => token().error, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
234
- const hasError = computed(() => !!error(), ...(ngDevMode ? [{ debugName: "hasError" }] : /* istanbul ignore next */ []));
235
- const errorDescription = computed(() => token().error_description, ...(ngDevMode ? [{ debugName: "errorDescription" }] : /* istanbul ignore next */ []));
237
+ }, /* @ts-ignore */
238
+ ...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
239
+ const isAuthorized = computed(() => status() === OAuthStatus.AUTHORIZED, /* @ts-ignore */
240
+ ...(ngDevMode ? [{ debugName: "isAuthorized" }] : /* istanbul ignore next */ []));
241
+ const error = computed(() => token().error, /* @ts-ignore */
242
+ ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
243
+ const hasError = computed(() => !!error(), /* @ts-ignore */
244
+ ...(ngDevMode ? [{ debugName: "hasError" }] : /* istanbul ignore next */ []));
245
+ const errorDescription = computed(() => token().error_description, /* @ts-ignore */
246
+ ...(ngDevMode ? [{ debugName: "errorDescription" }] : /* istanbul ignore next */ []));
236
247
  const autoconfigOauth = async () => {
237
248
  const c = config();
238
249
  if (!(c.tokenPath || c.authorizePath)) {
@@ -298,14 +309,16 @@ const OAUTH_TOKEN = new InjectionToken('OAUTH_TOKEN', {
298
309
  errorDescription,
299
310
  storageKey,
300
311
  checkToken,
301
- autoconfigOauth
312
+ autoconfigOauth,
313
+ isExpiredToken
302
314
  };
303
315
  }
304
316
  });
305
317
 
306
318
  const getPath = (input) => input instanceof URL ? input.pathname : input instanceof Request ? new URL(input.url).pathname : input;
307
319
  const isPathIgnored = (input) => ignorePaths().some(pattern => pattern.test(getPath(input)));
308
- const ignorePaths = computed(() => oauthConfig().ignorePaths, ...(ngDevMode ? [{ debugName: "ignorePaths" }] : /* istanbul ignore next */ []));
320
+ const ignorePaths = computed(() => oauthConfig().ignorePaths, /* @ts-ignore */
321
+ ...(ngDevMode ? [{ debugName: "ignorePaths" }] : /* istanbul ignore next */ []));
309
322
  const OAUTH_FETCH = new InjectionToken('OAUTH_FETCH', {
310
323
  providedIn: 'root',
311
324
  factory: () => {
@@ -331,8 +344,10 @@ const OAUTH_FETCH = new InjectionToken('OAUTH_FETCH', {
331
344
  }
332
345
  });
333
346
 
334
- const strictJwt = computed(() => oauthConfig().strictJwt, ...(ngDevMode ? [{ debugName: "strictJwt" }] : /* istanbul ignore next */ []));
335
- const jwksUri = computed(() => config()?.jwksUri, ...(ngDevMode ? [{ debugName: "jwksUri" }] : /* istanbul ignore next */ []));
347
+ const strictJwt = computed(() => oauthConfig().strictJwt, /* @ts-ignore */
348
+ ...(ngDevMode ? [{ debugName: "strictJwt" }] : /* istanbul ignore next */ []));
349
+ const jwksUri = computed(() => config()?.jwksUri, /* @ts-ignore */
350
+ ...(ngDevMode ? [{ debugName: "jwksUri" }] : /* istanbul ignore next */ []));
336
351
  const jwt = (idToken) => {
337
352
  const payload = idToken?.split('.')[1];
338
353
  return payload
@@ -419,7 +434,8 @@ const OAUTH = new InjectionToken('OAUTH', {
419
434
  const revoke = inject(OAUTH_REVOKE);
420
435
  const authorize = inject(OAUTH_AUTHORIZE);
421
436
  const verifyJwt = inject(OAUTH_VERIFY_JWT);
422
- const state = signal(undefined, ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
437
+ const state = signal(undefined, /* @ts-ignore */
438
+ ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
423
439
  const login = async (parameters) => {
424
440
  await autoconfigOauth();
425
441
  if (!!parameters && parameters.password) {
@@ -497,8 +513,10 @@ const OAUTH = new InjectionToken('OAUTH', {
497
513
  authorizationUrl += (authorizePath.includes('?') && '&') || '?';
498
514
  authorizationUrl += `client_id=${clientId}`;
499
515
  token.set({ ...token(), redirect_uri: parameters.redirectUri });
500
- authorizationUrl += `&access_type=${parameters.accessType || 'offline'}`;
501
- authorizationUrl += `&prompt=${parameters.prompt || ''}`;
516
+ if (parameters.accessType) {
517
+ authorizationUrl += `&access_type=${parameters.accessType}`;
518
+ authorizationUrl += `&prompt=${parameters.prompt || ''}`;
519
+ }
502
520
  authorizationUrl += `&redirect_uri=${encodeURIComponent(parameters.redirectUri)}`;
503
521
  authorizationUrl += `&response_type=${parameters.responseType}`;
504
522
  authorizationUrl += `&scope=${encodeURIComponent(scope)}`;
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-oauth.mjs","sources":["../../../projects/ngx-oauth/oauth/types.ts","../../../projects/ngx-oauth/oauth/config.ts","../../../projects/ngx-oauth/oauth/storage.ts","../../../projects/ngx-oauth/oauth/functions.ts","../../../projects/ngx-oauth/oauth/token.ts","../../../projects/ngx-oauth/oauth/fetch.ts","../../../projects/ngx-oauth/oauth/jwt.ts","../../../projects/ngx-oauth/oauth/user.ts","../../../projects/ngx-oauth/oauth/oauth.ts","../../../projects/ngx-oauth/oauth/index.ts","../../../projects/ngx-oauth/oauth/ngx-oauth.ts"],"sourcesContent":["export type ClientCredentialConfig = {\n tokenPath: string\n revokePath?: string\n clientId: string\n clientSecret?: string\n scope?: string\n userPath?: string\n introspectionPath?: string\n}\n\nexport type ResourceOwnerConfig = ClientCredentialConfig\n\nexport type ImplicitConfig = {\n authorizePath: string\n revokePath?: string\n clientId: string\n scope?: string\n logoutPath?: string\n redirectUri?: string // if not using OAuthParameters\n logoutRedirectUri?: string // if not using OAuthParameters\n userPath?: string\n}\n\nexport type AuthorizationCodeConfig = ResourceOwnerConfig & {\n authorizePath: string\n logoutPath?: string\n redirectUri?: string // if not using OAuthParameters\n logoutRedirectUri?: string // if not using OAuthParameters\n}\n\nexport type AuthorizationCodePKCEConfig = AuthorizationCodeConfig & {\n pkce?: boolean\n}\n\nexport type OpenIdConfig = AuthorizationCodePKCEConfig & {\n issuerPath: string\n jwksUri?: string\n}\n\nexport type ResourceOwnerParameters = {\n username: string\n password: string\n}\n\nexport type AuthorizationCodeParameters = {\n accessType?: 'online' | 'offline'\n prompt?: 'none' | 'consent' | 'login' | 'select_account'\n redirectUri: string\n responseType: OAuthType.IMPLICIT | OAuthType.AUTHORIZATION_CODE | string\n state?: string\n}\n\nexport type OAuthParameters = ResourceOwnerParameters | AuthorizationCodeParameters\nexport type OAuthTypeConfig =\n | OpenIdConfig\n | AuthorizationCodePKCEConfig\n | AuthorizationCodeConfig\n | ImplicitConfig\n | ResourceOwnerConfig\n | ClientCredentialConfig\n\nexport type OAuthConfig = {\n config?: Partial<OAuthTypeConfig>\n storageKey?: string\n ignorePaths?: RegExp[]\n strictJwt?: boolean\n\n [x: string]: any\n}\n\nexport enum OAuthType {\n RESOURCE = 'password',\n AUTHORIZATION_CODE = 'code',\n IMPLICIT = 'token',\n CLIENT_CREDENTIAL = 'client_credentials'\n}\n\nexport type OAuthToken = {\n id_token?: string\n access_token?: string\n refresh_token?: string\n token_type?: string\n state?: string\n error?: string\n error_description?: string\n expires_in?: number | string\n refresh_expires_in?: number | string\n scope?: string\n code_verifier?: string\n nonce?: string\n type?: OAuthType\n expires?: number\n code?: string\n\n [x: string]: any\n}\n\nexport enum OAuthStatus {\n NOT_AUTHORIZED = 'NOT_AUTHORIZED',\n AUTHORIZED = 'AUTHORIZED',\n DENIED = 'DENIED'\n}\n\nexport type OpenIdConfiguration = {\n issuer?: string\n authorization_endpoint?: string\n introspection_endpoint?: string\n token_endpoint?: string\n userinfo_endpoint?: string\n end_session_endpoint?: string\n revocation_endpoint?: string\n jwks_uri?: string\n scopes_supported?: string[]\n code_challenge_methods_supported?: string[]\n}\n\nexport type UserInfo = {\n email?: string\n email_verified?: boolean\n family_name?: string\n given_name?: string\n name?: string\n preferred_username?: string\n sub?: string\n address?: object\n picture?: string\n locale?: string\n\n [x: string]: any\n}\n\nexport type IntrospectInfo = UserInfo & {\n active: boolean\n scope: string\n client_id?: string\n username: string\n exp: number\n}\n","import { EnvironmentProviders, linkedSignal, makeEnvironmentProviders, provideEnvironmentInitializer, signal } from '@angular/core'\nimport { OAuthConfig } from './types'\n\nconst defaults: OAuthConfig = {\n storageKey: 'token',\n ignorePaths: [],\n strictJwt: true\n}\n\nexport const oauthConfig = signal<OAuthConfig>(defaults)\n\nexport const config = linkedSignal(() => oauthConfig().config)\n\nexport const provideOAuthConfig = (cfg: OAuthConfig = {}): EnvironmentProviders =>\n makeEnvironmentProviders([provideEnvironmentInitializer(() => oauthConfig.set({ ...defaults, ...cfg }))])\n","import { signal, Signal, WritableSignal } from '@angular/core'\n\nconst storage = () => {\n const s = globalThis.localStorage\n return typeof s?.getItem === 'function' ? s : undefined\n}\n\nconst get = (key: string) => {\n const value = storage()?.getItem(key)\n try {\n return (value && JSON.parse(value)) || undefined\n } catch {\n return undefined\n }\n}\n\nconst set = (key: string, value: any) => {\n storage()?.setItem(key, JSON.stringify(value))\n}\n\nexport const storageSignal = <T>(keyInput: string | Signal<string>, defaultValue: T): WritableSignal<T> => {\n const keyFn = typeof keyInput === 'function' ? keyInput : () => keyInput\n const s = signal<T>(get(keyFn()) ?? defaultValue)\n const { set: signalSet, update } = s\n\n s.set = value => {\n set(keyFn(), value)\n signalSet(value)\n }\n\n s.update = fn => {\n update(current => {\n const next = fn(current)\n set(keyFn(), next)\n return next\n })\n }\n\n return s\n}\n","import { InjectionToken } from '@angular/core'\nimport { ClientCredentialConfig, OAuthToken, OAuthType, OpenIdConfig, ResourceOwnerConfig, ResourceOwnerParameters } from './types'\n\nconst HEADERS = { 'Content-Type': 'application/x-www-form-urlencoded', Accept: 'application/json' }\n\nconst refresh = async (token?: OAuthToken, config?: Partial<OpenIdConfig>) => {\n const { tokenPath, clientId, clientSecret, scope } = config || {}\n const { refresh_token, type } = token || {}\n if (!refresh_token || !tokenPath) return token\n const result = await fetch(tokenPath, {\n method: 'POST',\n headers: HEADERS,\n body: new URLSearchParams({\n client_id: clientId!,\n ...((clientSecret && { client_secret: clientSecret }) || {}),\n grant_type: 'refresh_token',\n refresh_token,\n ...((scope && { scope }) || {})\n })\n }).then(r => r.json())\n return result ? { ...result, type } : token\n}\n\nconst revoke = async (token?: OAuthToken, config?: Partial<OpenIdConfig>) => {\n const { revokePath, clientId, clientSecret } = config || {}\n if (!revokePath) return\n const { access_token, refresh_token } = token || {}\n const base = {\n ...((clientId && { client_id: clientId }) || {}),\n ...((clientSecret && { client_secret: clientSecret }) || {})\n }\n if (access_token) {\n await fetch(revokePath, {\n method: 'POST',\n headers: HEADERS,\n body: new URLSearchParams({ ...base, token: access_token, token_type_hint: 'access_token' })\n })\n }\n if (refresh_token) {\n await fetch(revokePath, {\n method: 'POST',\n headers: HEADERS,\n body: new URLSearchParams({ ...base, token: refresh_token, token_type_hint: 'refresh_token' })\n })\n }\n}\n\nconst authorize = async (token?: OAuthToken, config?: Partial<OpenIdConfig>) => {\n const { clientId, clientSecret, tokenPath, scope } = config || {}\n const { code, redirect_uri, code_verifier } = token || {}\n if (!code || !tokenPath) return token\n const result = await fetch(tokenPath, {\n method: 'POST',\n headers: HEADERS,\n body: new URLSearchParams({\n code,\n client_id: clientId!,\n ...((clientSecret && { client_secret: clientSecret }) || {}),\n redirect_uri: redirect_uri!,\n grant_type: 'authorization_code',\n ...((scope && { scope }) || {}),\n ...((code_verifier && { code_verifier }) || {})\n })\n }).then(r => r.json())\n return result ? { ...result, type: OAuthType.AUTHORIZATION_CODE } : token\n}\n\nconst clientCredentialLogin = async (config?: ClientCredentialConfig) => {\n const { clientId, clientSecret, tokenPath, scope } = config || {}\n if (!tokenPath) return undefined\n const result = await fetch(tokenPath, {\n method: 'POST',\n headers: HEADERS,\n body: new URLSearchParams({\n client_id: clientId!,\n client_secret: clientSecret!,\n grant_type: OAuthType.CLIENT_CREDENTIAL,\n ...(scope ? { scope } : {})\n })\n }).then(r => r.json())\n return result ? { ...result, type: OAuthType.CLIENT_CREDENTIAL } : undefined\n}\n\nconst resourceOwnerLogin = async (parameters?: ResourceOwnerParameters, config?: ResourceOwnerConfig) => {\n const { clientId, clientSecret, tokenPath, scope } = config || {}\n const { username, password } = parameters || {}\n if (!tokenPath || !clientId) return undefined\n const result = await fetch(tokenPath, {\n method: 'POST',\n headers: HEADERS,\n body: new URLSearchParams({\n client_id: clientId,\n ...((clientSecret && { client_secret: clientSecret }) || {}),\n grant_type: OAuthType.RESOURCE,\n ...((scope && { scope }) || {}),\n username: username!,\n password: password!\n })\n }).then(r => r.json())\n return result ? { ...result, type: OAuthType.RESOURCE } : undefined\n}\n\nconst openIdConfiguration = async (config?: Partial<OpenIdConfig>) => {\n const { issuerPath, clientId } = config || {}\n if (!issuerPath) return undefined\n return fetch(`${issuerPath}/.well-known/openid-configuration?client_id=${clientId}`).then(r => r.json())\n}\n\nconst userInfo = async (config?: Partial<OpenIdConfig>, fetchFn = fetch) => {\n const { userPath } = config || {}\n if (!userPath) return undefined\n return fetchFn(userPath).then(r => r.json())\n}\n\nconst introspect = async (token?: OAuthToken, config?: Partial<OpenIdConfig>) => {\n const { introspectionPath, clientId, clientSecret } = config || {}\n const { access_token } = token || {}\n if (!introspectionPath || !access_token || !clientId) return undefined\n return fetch(introspectionPath, {\n method: 'POST',\n headers: { ...HEADERS, Authorization: `Basic ${btoa(`${clientId}:${clientSecret}`)}` },\n body: new URLSearchParams({ token: access_token })\n }).then(r => r.json())\n}\n\nexport const OAUTH_REFRESH = new InjectionToken('OAUTH_REFRESH', {\n providedIn: 'root',\n factory: () => refresh\n})\n\nexport const OAUTH_REVOKE = new InjectionToken('OAUTH_REVOKE', {\n providedIn: 'root',\n factory: () => revoke\n})\n\nexport const OAUTH_AUTHORIZE = new InjectionToken('OAUTH_AUTHORIZE', {\n providedIn: 'root',\n factory: () => authorize\n})\n\nexport const OAUTH_CLIENT_CREDENTIAL = new InjectionToken('OAUTH_CLIENT_CREDENTIAL', {\n providedIn: 'root',\n factory: () => clientCredentialLogin\n})\n\nexport const OAUTH_RESOURCE_OWNER = new InjectionToken('OAUTH_RESOURCE_OWNER', {\n providedIn: 'root',\n factory: () => resourceOwnerLogin\n})\n\nexport const OAUTH_OPENID_CONFIG = new InjectionToken('OAUTH_OPENID_CONFIG', {\n providedIn: 'root',\n factory: () => openIdConfiguration\n})\n\nexport const OAUTH_USER_INFO = new InjectionToken('OAUTH_USER_INFO', {\n providedIn: 'root',\n factory: () => userInfo\n})\n\nexport const OAUTH_INTROSPECT = new InjectionToken('OAUTH_INTROSPECT', {\n providedIn: 'root',\n factory: () => introspect\n})\n","import { storageSignal } from './storage'\nimport { config, oauthConfig } from './config'\nimport { OAuthStatus, OAuthToken, OpenIdConfig } from './types'\nimport { computed, effect, inject, InjectionToken, linkedSignal, untracked } from '@angular/core'\nimport { OAUTH_OPENID_CONFIG, OAUTH_REFRESH } from './functions'\n\nconst isExpiredToken = (token?: OAuthToken) => (token?.expires && Date.now() > token.expires) || false\n\nexport const OAUTH_TOKEN = new InjectionToken('OAUTH_TOKEN', {\n providedIn: 'root',\n factory: () => {\n const refresh = inject(OAUTH_REFRESH)\n const openIdConfiguration = inject(OAUTH_OPENID_CONFIG)\n const storageKey = linkedSignal(() => oauthConfig().storageKey as string)\n const token = storageSignal<OAuthToken>(storageKey, {})\n const type = computed(() => token().type)\n const accessToken = computed(() => {\n const { token_type, access_token } = token() || {}\n return (token_type && access_token && `${token_type} ${access_token}`) || undefined\n })\n const status = computed(() => {\n const { error, access_token } = token()\n return (\n (error && OAuthStatus.DENIED) || (access_token && !isExpiredToken(token()) && OAuthStatus.AUTHORIZED) || OAuthStatus.NOT_AUTHORIZED\n )\n })\n const isAuthorized = computed(() => status() === OAuthStatus.AUTHORIZED)\n const error = computed(() => token().error)\n const hasError = computed(() => !!error())\n const errorDescription = computed(() => token().error_description)\n\n const autoconfigOauth = async () => {\n const c = config() as OpenIdConfig\n if (!(c.tokenPath || c.authorizePath)) {\n const v = await openIdConfiguration(c)\n if (v) {\n config.set({\n ...c,\n ...((v?.authorization_endpoint && { authorizePath: v.authorization_endpoint }) || {}),\n ...((v?.token_endpoint && { tokenPath: v.token_endpoint }) || {}),\n ...((v?.revocation_endpoint && { revokePath: v.revocation_endpoint }) || {}),\n ...((v?.userinfo_endpoint && { userPath: v.userinfo_endpoint }) || {}),\n ...((v?.introspection_endpoint && { introspectionPath: v.introspection_endpoint }) || {}),\n ...((v?.end_session_endpoint && { logoutPath: v.end_session_endpoint }) || {}),\n ...((v?.jwks_uri && { jwksUri: v.jwks_uri }) || {}),\n ...((c?.pkce === undefined &&\n v?.code_challenge_methods_supported && { pkce: v.code_challenge_methods_supported.indexOf('S256') > -1 }) ||\n {}),\n ...{ scope: c.scope || 'openid' }\n })\n }\n }\n }\n\n const setExpires = (t: OAuthToken) => {\n const expiresIn = Number(t?.expires_in) || 0\n if (expiresIn && !t.expires) {\n token.set({\n ...t,\n expires: Date.now() + expiresIn * 1000\n })\n }\n }\n\n let inFlight: Promise<void> | undefined\n const checkToken = (t: OAuthToken) => {\n if (inFlight) return inFlight\n inFlight = (async () => {\n if (isExpiredToken(t)) {\n await autoconfigOauth()\n const refreshed = await refresh(t, config())\n if (refreshed && !isExpiredToken(refreshed)) {\n //keep the refresh token cuz we might not net a new one\n setExpires({ refresh_token: t.refresh_token, ...refreshed })\n }\n } else {\n setExpires(t)\n }\n })().finally(() => (inFlight = undefined))\n return inFlight\n }\n\n effect(async () => {\n const t = token()\n await untracked(() => checkToken(t))\n })\n\n return {\n token,\n type,\n accessToken,\n status,\n isAuthorized,\n error,\n hasError,\n errorDescription,\n storageKey,\n checkToken,\n autoconfigOauth\n }\n }\n})\n","import { computed, inject, InjectionToken } from '@angular/core'\nimport { OAUTH_TOKEN } from './token'\nimport { oauthConfig } from './config'\n\nconst getPath = (input: RequestInfo | URL): string =>\n input instanceof URL ? input.pathname : input instanceof Request ? new URL(input.url).pathname : input\n\nconst isPathIgnored = (input: RequestInfo | URL) => ignorePaths().some(pattern => pattern.test(getPath(input)))\nconst ignorePaths = computed(() => oauthConfig().ignorePaths as RegExp[])\n\nexport const OAUTH_FETCH = new InjectionToken<typeof fetch>('OAUTH_FETCH', {\n providedIn: 'root',\n factory: () => {\n const { token, accessToken, checkToken } = inject(OAUTH_TOKEN)\n return async (input, init) => {\n if (!isPathIgnored(input)) {\n await checkToken(token())\n const at = accessToken()\n if (at) {\n const headers = new Headers(init?.headers)\n headers.set('Authorization', at)\n if (!headers.has('Content-Type')) headers.set('Content-Type', 'application/json')\n const response = await globalThis.fetch(input, { ...init, headers })\n if (response.status === 401) {\n token.set(await response.json())\n }\n return response\n }\n }\n return globalThis.fetch(input, init)\n }\n }\n})\n","import { computed, effect, InjectionToken } from '@angular/core'\nimport { config, oauthConfig } from './config'\nimport { OpenIdConfig } from './types'\nimport { createRemoteJWKSet, jwtVerify } from 'jose'\n\nconst strictJwt = computed(() => oauthConfig().strictJwt)\nconst jwksUri = computed(() => (config() as OpenIdConfig)?.jwksUri)\n\nconst jwt = (idToken?: string) => {\n const payload = idToken?.split('.')[1]\n return payload\n ? JSON.parse(\n decodeURIComponent(\n Array.from(atob(payload))\n .map(c => `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`)\n .join('')\n )\n )\n : {}\n}\n\nlet jwksSet: ReturnType<typeof createRemoteJWKSet> | undefined\n\nconst verifyJwt = async (idToken?: string) => {\n if (!idToken) return {}\n if (!jwksSet) return jwt(idToken)\n const { issuerPath, clientId } = (config() as OpenIdConfig) || {}\n try {\n const { payload } = await jwtVerify(idToken, jwksSet, {\n ...(issuerPath && { issuer: issuerPath }),\n ...(clientId && { audience: clientId })\n })\n return payload\n } catch {\n return { error: 'Invalid token' }\n }\n}\n\nexport const OAUTH_VERIFY_JWT = new InjectionToken('OAUTH_VERIFY_JWT', {\n providedIn: 'root',\n factory: () => {\n effect(() => {\n const uri = jwksUri()\n jwksSet = uri && strictJwt() ? createRemoteJWKSet(new URL(uri)) : undefined\n })\n return verifyJwt\n }\n})\n","import { inject, InjectionToken, resource } from '@angular/core'\nimport { config } from './config'\nimport { OAUTH_FETCH } from './fetch'\nimport { OAUTH_VERIFY_JWT } from './jwt'\nimport { OAUTH_TOKEN } from './token'\nimport { UserInfo } from './types'\nimport { OAUTH_USER_INFO } from './functions'\n\nexport const OAUTH_USER = new InjectionToken('OAUTH_USER', {\n providedIn: 'root',\n factory: () => {\n const { token, isAuthorized, autoconfigOauth } = inject(OAUTH_TOKEN)\n const verifyJwt = inject(OAUTH_VERIFY_JWT)\n const userInfo = inject(OAUTH_USER_INFO)\n const fetch = inject(OAUTH_FETCH)\n return resource<UserInfo | undefined, { idToken?: string; authorized: boolean; userPath?: string }>({\n params: () => ({\n idToken: token().id_token,\n authorized: isAuthorized(),\n userPath: config()?.userPath\n }),\n loader: async ({ params: { idToken, authorized, userPath } }) => {\n if (idToken) return verifyJwt(idToken)\n if (authorized && userPath) {\n await autoconfigOauth()\n return userInfo({ userPath }, fetch)\n }\n return undefined\n }\n })\n }\n})\n","import {\n AuthorizationCodeParameters,\n ClientCredentialConfig,\n OAuthParameters,\n OAuthType,\n OpenIdConfig,\n ResourceOwnerConfig,\n ResourceOwnerParameters\n} from './types'\nimport { OAUTH_TOKEN } from './token'\nimport { config } from './config'\nimport { inject, InjectionToken, signal } from '@angular/core'\nimport { OAUTH_AUTHORIZE, OAUTH_CLIENT_CREDENTIAL, OAUTH_RESOURCE_OWNER, OAUTH_REVOKE } from './functions'\nimport { OAUTH_VERIFY_JWT } from './jwt'\n\nconst arrToString = (buf: Uint8Array) => buf.reduce((s, b) => s + String.fromCharCode(b), '')\nconst base64url = (str: string) => btoa(str).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '')\nconst randomString = (length = 48) => {\n const buff = arrToString(crypto.getRandomValues(new Uint8Array(length * 2)))\n return base64url(buff).substring(0, length)\n}\nconst pkce = async (value: string) => {\n const buff = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value))\n return base64url(arrToString(new Uint8Array(buff)))\n}\nconst parseOauthUri = (hash: string) => {\n const params = Object.fromEntries(new URLSearchParams(hash))\n return (Object.keys(params).length && params) || {}\n}\n\nexport const OAUTH = new InjectionToken('OAUTH', {\n providedIn: 'root',\n factory: () => {\n const { token, status, type, isAuthorized, storageKey, autoconfigOauth } = inject(OAUTH_TOKEN)\n const resourceOwnerLogin = inject(OAUTH_RESOURCE_OWNER)\n const clientCredentialLogin = inject(OAUTH_CLIENT_CREDENTIAL)\n const revoke = inject(OAUTH_REVOKE)\n const authorize = inject(OAUTH_AUTHORIZE)\n const verifyJwt = inject(OAUTH_VERIFY_JWT)\n const state = signal<string | undefined>(undefined)\n\n const login = async (parameters?: OAuthParameters) => {\n await autoconfigOauth()\n if (!!parameters && (parameters as ResourceOwnerParameters).password) {\n token.set((await resourceOwnerLogin(parameters as ResourceOwnerParameters, config() as ResourceOwnerConfig)) || {})\n } else if (\n !!parameters &&\n (parameters as AuthorizationCodeParameters).redirectUri &&\n (parameters as AuthorizationCodeParameters).responseType\n ) {\n await toAuthorizationUrl(parameters as AuthorizationCodeParameters)\n } else {\n token.set((await clientCredentialLogin(config() as ClientCredentialConfig)) || {})\n }\n }\n\n const logout = async (next?: string, state?: string) => {\n await autoconfigOauth()\n const { logoutPath, clientId, logoutRedirectUri } = (config() as OpenIdConfig) || {}\n const returnUrl = next || logoutRedirectUri\n if (returnUrl && logoutPath) {\n const { id_token } = token()\n const tokenHint = (id_token && `&id_token_hint=${id_token}`) || ''\n const stateFwd = (state && `&state=${state}`) || ''\n const logoutUrl = `${logoutPath}?client_id=${clientId}&post_logout_redirect_uri=${returnUrl}${tokenHint}${stateFwd}`\n token.set({})\n globalThis.location?.replace(logoutUrl)\n } else {\n await revoke(token(), config())\n token.set({})\n }\n }\n\n const oauthCallback = async (url?: string | URL) => {\n const checkNonce = async (parameters: Record<string, string>) => {\n if (parameters['error']) return parameters\n const payload = await verifyJwt(parameters['id_token'])\n if (payload?.error || payload?.nonce !== token()?.nonce) {\n return { error: (payload?.error as string) || 'Invalid nonce' }\n }\n return parameters\n }\n const checkCode = async () => {\n const parameters = await authorize(token(), config())\n if (parameters) {\n token.set(await checkNonce(parameters))\n }\n }\n const path = (url && new URL(url)) || globalThis.location || {}\n const { hash, search } = path\n const isImplicitRedirect = hash && /(access_token=)|(error=)/.test(hash)\n const isAuthCodeRedirect = (search && /(code=)|(error=)/.test(search)) || (hash && /(code=)|(error=)/.test(hash))\n if (isImplicitRedirect) {\n const parameters = parseOauthUri(hash.substring(1))\n token.set({\n ...(await checkNonce(parameters)),\n type: OAuthType.IMPLICIT\n })\n state.set(parameters?.['state'])\n } else if (isAuthCodeRedirect) {\n const parameters = parseOauthUri(search?.substring(1) || hash?.substring(1))\n token.set({\n ...token(),\n ...parameters\n // do not set type yet. will be set by authorize function since it is a two-step process\n })\n state.set(parameters?.['state'])\n await autoconfigOauth()\n await checkCode()\n }\n }\n\n const toAuthorizationUrl = async (parameters: AuthorizationCodeParameters) => {\n const { authorizePath, clientId, scope = '', pkce } = config() as any\n let authorizationUrl = `${authorizePath}`\n authorizationUrl += (authorizePath.includes('?') && '&') || '?'\n authorizationUrl += `client_id=${clientId}`\n token.set({ ...token(), redirect_uri: parameters.redirectUri })\n authorizationUrl += `&access_type=${parameters.accessType || 'offline'}`\n authorizationUrl += `&prompt=${parameters.prompt || ''}`\n authorizationUrl += `&redirect_uri=${encodeURIComponent(parameters.redirectUri)}`\n authorizationUrl += `&response_type=${parameters.responseType}`\n authorizationUrl += `&scope=${encodeURIComponent(scope)}`\n authorizationUrl += `&state=${encodeURIComponent(parameters.state || '')}`\n authorizationUrl = `${authorizationUrl}${generateNonce(scope)}${await generateCodeChallenge(pkce)}`\n return globalThis.location?.replace(authorizationUrl)\n }\n\n const generateNonce = (scope: string) => {\n if (scope.indexOf('openid') > -1) {\n const nonce = randomString()\n token.set({ ...token(), nonce })\n return `&nonce=${nonce}`\n }\n return ''\n }\n\n const generateCodeChallenge = async (doPkce: any) => {\n if (doPkce) {\n const code_verifier = randomString()\n token.set({ ...token(), code_verifier })\n return `&code_challenge=${await pkce(code_verifier)}&code_challenge_method=S256`\n }\n return ''\n }\n\n return {\n login,\n logout,\n oauthCallback,\n state,\n token,\n status,\n type,\n isAuthorized,\n config,\n storageKey\n }\n }\n})\n","/*\n * Public API Surface of ngx-oauth\n */\nexport * from './types'\nexport { provideOAuthConfig } from './config'\nexport * from './fetch'\nexport * from './functions'\nexport * from './token'\nexport * from './jwt'\nexport * from './user'\nexport * from './oauth'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;IAsEY;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,SAAA,CAAA,oBAAA,CAAA,GAAA,MAA2B;AAC3B,IAAA,SAAA,CAAA,UAAA,CAAA,GAAA,OAAkB;AAClB,IAAA,SAAA,CAAA,mBAAA,CAAA,GAAA,oBAAwC;AAC1C,CAAC,EALW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;IA2BT;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAJW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;;AC9FvB,MAAM,QAAQ,GAAgB;AAC5B,IAAA,UAAU,EAAE,OAAO;AACnB,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,SAAS,EAAE;CACZ;AAEM,MAAM,WAAW,GAAG,MAAM,CAAc,QAAQ,kFAAC;AAEjD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,WAAW,EAAE,CAAC,MAAM,6EAAC;AAEvD,MAAM,kBAAkB,GAAG,CAAC,GAAA,GAAmB,EAAE,KACtD,wBAAwB,CAAC,CAAC,6BAA6B,CAAC,MAAM,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;;ACZ1G,MAAM,OAAO,GAAG,MAAK;AACnB,IAAA,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY;AACjC,IAAA,OAAO,OAAO,CAAC,EAAE,OAAO,KAAK,UAAU,GAAG,CAAC,GAAG,SAAS;AACzD,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,GAAW,KAAI;IAC1B,MAAM,KAAK,GAAG,OAAO,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC;AACrC,IAAA,IAAI;AACF,QAAA,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS;IAClD;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,SAAS;IAClB;AACF,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,KAAU,KAAI;AACtC,IAAA,OAAO,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAEM,MAAM,aAAa,GAAG,CAAI,QAAiC,EAAE,YAAe,KAAuB;AACxG,IAAA,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,GAAG,MAAM,QAAQ;AACxE,IAAA,MAAM,CAAC,GAAG,MAAM,CAAI,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,YAAY,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;IACjD,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC;AAEpC,IAAA,CAAC,CAAC,GAAG,GAAG,KAAK,IAAG;AACd,QAAA,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC;QACnB,SAAS,CAAC,KAAK,CAAC;AAClB,IAAA,CAAC;AAED,IAAA,CAAC,CAAC,MAAM,GAAG,EAAE,IAAG;QACd,MAAM,CAAC,OAAO,IAAG;AACf,YAAA,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;AACxB,YAAA,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC;AAClB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;AAED,IAAA,OAAO,CAAC;AACV,CAAC;;ACpCD,MAAM,OAAO,GAAG,EAAE,cAAc,EAAE,mCAAmC,EAAE,MAAM,EAAE,kBAAkB,EAAE;AAEnG,MAAM,OAAO,GAAG,OAAO,KAAkB,EAAE,MAA8B,KAAI;AAC3E,IAAA,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,EAAE;IACjE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE;AAC3C,IAAA,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,KAAK;AAC9C,IAAA,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;AACpC,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,IAAI,eAAe,CAAC;AACxB,YAAA,SAAS,EAAE,QAAS;AACpB,YAAA,IAAI,CAAC,YAAY,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAC5D,YAAA,UAAU,EAAE,eAAe;YAC3B,aAAa;YACb,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;SAC/B;AACF,KAAA,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACtB,IAAA,OAAO,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK;AAC7C,CAAC;AAED,MAAM,MAAM,GAAG,OAAO,KAAkB,EAAE,MAA8B,KAAI;IAC1E,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,EAAE;AAC3D,IAAA,IAAI,CAAC,UAAU;QAAE;IACjB,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,KAAK,IAAI,EAAE;AACnD,IAAA,MAAM,IAAI,GAAG;AACX,QAAA,IAAI,CAAC,QAAQ,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAChD,QAAA,IAAI,CAAC,YAAY,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE;KAC5D;IACD,IAAI,YAAY,EAAE;QAChB,MAAM,KAAK,CAAC,UAAU,EAAE;AACtB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,IAAI,EAAE,IAAI,eAAe,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE;AAC5F,SAAA,CAAC;IACJ;IACA,IAAI,aAAa,EAAE;QACjB,MAAM,KAAK,CAAC,UAAU,EAAE;AACtB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,IAAI,EAAE,IAAI,eAAe,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE;AAC9F,SAAA,CAAC;IACJ;AACF,CAAC;AAED,MAAM,SAAS,GAAG,OAAO,KAAkB,EAAE,MAA8B,KAAI;AAC7E,IAAA,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,EAAE;IACjE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,KAAK,IAAI,EAAE;AACzD,IAAA,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,KAAK;AACrC,IAAA,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;AACpC,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,IAAI,eAAe,CAAC;YACxB,IAAI;AACJ,YAAA,SAAS,EAAE,QAAS;AACpB,YAAA,IAAI,CAAC,YAAY,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AAC5D,YAAA,YAAY,EAAE,YAAa;AAC3B,YAAA,UAAU,EAAE,oBAAoB;YAChC,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;SAC/C;AACF,KAAA,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACtB,IAAA,OAAO,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,kBAAkB,EAAE,GAAG,KAAK;AAC3E,CAAC;AAED,MAAM,qBAAqB,GAAG,OAAO,MAA+B,KAAI;AACtE,IAAA,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,EAAE;AACjE,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,SAAS;AAChC,IAAA,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;AACpC,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,IAAI,eAAe,CAAC;AACxB,YAAA,SAAS,EAAE,QAAS;AACpB,YAAA,aAAa,EAAE,YAAa;YAC5B,UAAU,EAAE,SAAS,CAAC,iBAAiB;AACvC,YAAA,IAAI,KAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;SAC3B;AACF,KAAA,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACtB,IAAA,OAAO,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,iBAAiB,EAAE,GAAG,SAAS;AAC9E,CAAC;AAED,MAAM,kBAAkB,GAAG,OAAO,UAAoC,EAAE,MAA4B,KAAI;AACtG,IAAA,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,EAAE;IACjE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,UAAU,IAAI,EAAE;AAC/C,IAAA,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,SAAS;AAC7C,IAAA,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;AACpC,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,IAAI,eAAe,CAAC;AACxB,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,IAAI,CAAC,YAAY,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;YAC5D,UAAU,EAAE,SAAS,CAAC,QAAQ;YAC9B,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC/B,YAAA,QAAQ,EAAE,QAAS;AACnB,YAAA,QAAQ,EAAE;SACX;AACF,KAAA,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACtB,IAAA,OAAO,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,GAAG,SAAS;AACrE,CAAC;AAED,MAAM,mBAAmB,GAAG,OAAO,MAA8B,KAAI;IACnE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,EAAE;AAC7C,IAAA,IAAI,CAAC,UAAU;AAAE,QAAA,OAAO,SAAS;IACjC,OAAO,KAAK,CAAC,CAAA,EAAG,UAAU,+CAA+C,QAAQ,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1G,CAAC;AAED,MAAM,QAAQ,GAAG,OAAO,MAA8B,EAAE,OAAO,GAAG,KAAK,KAAI;AACzE,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,EAAE;AACjC,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,SAAS;AAC/B,IAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,GAAG,OAAO,KAAkB,EAAE,MAA8B,KAAI;IAC9E,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,EAAE;AAClE,IAAA,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,IAAI,EAAE;AACpC,IAAA,IAAI,CAAC,iBAAiB,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,SAAS;IACtE,OAAO,KAAK,CAAC,iBAAiB,EAAE;AAC9B,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,GAAG,QAAQ,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAC,EAAE,EAAE;QACtF,IAAI,EAAE,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE;AAClD,KAAA,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACxB,CAAC;MAEY,aAAa,GAAG,IAAI,cAAc,CAAC,eAAe,EAAE;AAC/D,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAEY,YAAY,GAAG,IAAI,cAAc,CAAC,cAAc,EAAE;AAC7D,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAEY,eAAe,GAAG,IAAI,cAAc,CAAC,iBAAiB,EAAE;AACnE,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAEY,uBAAuB,GAAG,IAAI,cAAc,CAAC,yBAAyB,EAAE;AACnF,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAEY,oBAAoB,GAAG,IAAI,cAAc,CAAC,sBAAsB,EAAE;AAC7E,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAEY,mBAAmB,GAAG,IAAI,cAAc,CAAC,qBAAqB,EAAE;AAC3E,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAEY,eAAe,GAAG,IAAI,cAAc,CAAC,iBAAiB,EAAE;AACnE,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;MAEY,gBAAgB,GAAG,IAAI,cAAc,CAAC,kBAAkB,EAAE;AACrE,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM;AAChB,CAAA;;AC7JD,MAAM,cAAc,GAAG,CAAC,KAAkB,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,KAAK,KAAK;MAEzF,WAAW,GAAG,IAAI,cAAc,CAAC,aAAa,EAAE;AAC3D,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACvD,QAAA,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,WAAW,EAAE,CAAC,UAAoB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;QACzE,MAAM,KAAK,GAAG,aAAa,CAAa,UAAU,EAAE,EAAE,CAAC;AACvD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,EAAE,CAAC,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACzC,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAK;YAChC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE;AAClD,YAAA,OAAO,CAAC,UAAU,IAAI,YAAY,IAAI,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,KAAK,SAAS;AACrF,QAAA,CAAC,kFAAC;AACF,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAK;YAC3B,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,KAAK,EAAE;AACvC,YAAA,QACE,CAAC,KAAK,IAAI,WAAW,CAAC,MAAM,MAAM,YAAY,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,cAAc;AAEvI,QAAA,CAAC,6EAAC;AACF,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,MAAM,EAAE,KAAK,WAAW,CAAC,UAAU,mFAAC;AACxE,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAC3C,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAC1C,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,KAAK,EAAE,CAAC,iBAAiB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAElE,QAAA,MAAM,eAAe,GAAG,YAAW;AACjC,YAAA,MAAM,CAAC,GAAG,MAAM,EAAkB;YAClC,IAAI,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,aAAa,CAAC,EAAE;AACrC,gBAAA,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,EAAE;oBACL,MAAM,CAAC,GAAG,CAAC;AACT,wBAAA,GAAG,CAAC;AACJ,wBAAA,IAAI,CAAC,CAAC,EAAE,sBAAsB,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,sBAAsB,EAAE,KAAK,EAAE,CAAC;AACrF,wBAAA,IAAI,CAAC,CAAC,EAAE,cAAc,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC;AACjE,wBAAA,IAAI,CAAC,CAAC,EAAE,mBAAmB,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,mBAAmB,EAAE,KAAK,EAAE,CAAC;AAC5E,wBAAA,IAAI,CAAC,CAAC,EAAE,iBAAiB,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC;AACtE,wBAAA,IAAI,CAAC,CAAC,EAAE,sBAAsB,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,sBAAsB,EAAE,KAAK,EAAE,CAAC;AACzF,wBAAA,IAAI,CAAC,CAAC,EAAE,oBAAoB,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,oBAAoB,EAAE,KAAK,EAAE,CAAC;AAC9E,wBAAA,IAAI,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;AACnD,wBAAA,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,SAAS;AACxB,4BAAA,CAAC,EAAE,gCAAgC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,gCAAgC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;AACxG,4BAAA,EAAE,CAAC;wBACL,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,QAAQ;AAChC,qBAAA,CAAC;gBACJ;YACF;AACF,QAAA,CAAC;AAED,QAAA,MAAM,UAAU,GAAG,CAAC,CAAa,KAAI;YACnC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;AAC5C,YAAA,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;gBAC3B,KAAK,CAAC,GAAG,CAAC;AACR,oBAAA,GAAG,CAAC;oBACJ,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG;AACnC,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC;AAED,QAAA,IAAI,QAAmC;AACvC,QAAA,MAAM,UAAU,GAAG,CAAC,CAAa,KAAI;AACnC,YAAA,IAAI,QAAQ;AAAE,gBAAA,OAAO,QAAQ;AAC7B,YAAA,QAAQ,GAAG,CAAC,YAAW;AACrB,gBAAA,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE;oBACrB,MAAM,eAAe,EAAE;oBACvB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;oBAC5C,IAAI,SAAS,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;;AAE3C,wBAAA,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,GAAG,SAAS,EAAE,CAAC;oBAC9D;gBACF;qBAAO;oBACL,UAAU,CAAC,CAAC,CAAC;gBACf;AACF,YAAA,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,QAAQ,GAAG,SAAS,CAAC,CAAC;AAC1C,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC;QAED,MAAM,CAAC,YAAW;AAChB,YAAA,MAAM,CAAC,GAAG,KAAK,EAAE;YACjB,MAAM,SAAS,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;AACtC,QAAA,CAAC,CAAC;QAEF,OAAO;YACL,KAAK;YACL,IAAI;YACJ,WAAW;YACX,MAAM;YACN,YAAY;YACZ,KAAK;YACL,QAAQ;YACR,gBAAgB;YAChB,UAAU;YACV,UAAU;YACV;SACD;IACH;AACD,CAAA;;ACjGD,MAAM,OAAO,GAAG,CAAC,KAAwB,KACvC,KAAK,YAAY,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,YAAY,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,KAAK;AAExG,MAAM,aAAa,GAAG,CAAC,KAAwB,KAAK,WAAW,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/G,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,WAAW,EAAE,CAAC,WAAuB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;MAE5D,WAAW,GAAG,IAAI,cAAc,CAAe,aAAa,EAAE;AACzE,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AAC9D,QAAA,OAAO,OAAO,KAAK,EAAE,IAAI,KAAI;AAC3B,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AACzB,gBAAA,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;AACzB,gBAAA,MAAM,EAAE,GAAG,WAAW,EAAE;gBACxB,IAAI,EAAE,EAAE;oBACN,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;AAC1C,oBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC;AAChC,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAAE,wBAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC;AACjF,oBAAA,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC;AACpE,oBAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;wBAC3B,KAAK,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAClC;AACA,oBAAA,OAAO,QAAQ;gBACjB;YACF;YACA,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;AACtC,QAAA,CAAC;IACH;AACD,CAAA;;AC3BD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,WAAW,EAAE,CAAC,SAAS,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAO,MAAM,EAAmB,EAAE,OAAO,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAEnE,MAAM,GAAG,GAAG,CAAC,OAAgB,KAAI;IAC/B,MAAM,OAAO,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACtC,IAAA,OAAO;AACL,UAAE,IAAI,CAAC,KAAK,CACR,kBAAkB,CAChB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;aACrB,GAAG,CAAC,CAAC,IAAI,CAAA,CAAA,EAAI,CAAA,EAAA,EAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE;AAC5D,aAAA,IAAI,CAAC,EAAE,CAAC,CACZ;UAEH,EAAE;AACR,CAAC;AAED,IAAI,OAA0D;AAE9D,MAAM,SAAS,GAAG,OAAO,OAAgB,KAAI;AAC3C,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,EAAE;AACvB,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,GAAG,CAAC,OAAO,CAAC;IACjC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAI,MAAM,EAAmB,IAAI,EAAE;AACjE,IAAA,IAAI;QACF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE;YACpD,IAAI,UAAU,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YACzC,IAAI,QAAQ,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACvC,SAAA,CAAC;AACF,QAAA,OAAO,OAAO;IAChB;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE;IACnC;AACF,CAAC;MAEY,gBAAgB,GAAG,IAAI,cAAc,CAAC,kBAAkB,EAAE;AACrE,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;QACZ,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,OAAO,EAAE;YACrB,OAAO,GAAG,GAAG,IAAI,SAAS,EAAE,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS;AAC7E,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IAClB;AACD,CAAA;;MCvCY,UAAU,GAAG,IAAI,cAAc,CAAC,YAAY,EAAE;AACzD,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACpE,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC1C,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC;AACxC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,OAAO,QAAQ,CAAqF;AAClG,YAAA,MAAM,EAAE,OAAO;AACb,gBAAA,OAAO,EAAE,KAAK,EAAE,CAAC,QAAQ;gBACzB,UAAU,EAAE,YAAY,EAAE;AAC1B,gBAAA,QAAQ,EAAE,MAAM,EAAE,EAAE;aACrB,CAAC;AACF,YAAA,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,KAAI;AAC9D,gBAAA,IAAI,OAAO;AAAE,oBAAA,OAAO,SAAS,CAAC,OAAO,CAAC;AACtC,gBAAA,IAAI,UAAU,IAAI,QAAQ,EAAE;oBAC1B,MAAM,eAAe,EAAE;oBACvB,OAAO,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,CAAC;gBACtC;AACA,gBAAA,OAAO,SAAS;YAClB;AACD,SAAA,CAAC;IACJ;AACD,CAAA;;AChBD,MAAM,WAAW,GAAG,CAAC,GAAe,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC7F,MAAM,SAAS,GAAG,CAAC,GAAW,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AACtG,MAAM,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,KAAI;AACnC,IAAA,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;AAC7C,CAAC;AACD,MAAM,IAAI,GAAG,OAAO,KAAa,KAAI;IACnC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnF,OAAO,SAAS,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,CAAC;AACD,MAAM,aAAa,GAAG,CAAC,IAAY,KAAI;AACrC,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;AAC5D,IAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,MAAM,KAAK,EAAE;AACrD,CAAC;MAEY,KAAK,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE;AAC/C,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AAC9F,QAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACvD,QAAA,MAAM,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC7D,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC1C,QAAA,MAAM,KAAK,GAAG,MAAM,CAAqB,SAAS,4EAAC;AAEnD,QAAA,MAAM,KAAK,GAAG,OAAO,UAA4B,KAAI;YACnD,MAAM,eAAe,EAAE;YACvB,IAAI,CAAC,CAAC,UAAU,IAAK,UAAsC,CAAC,QAAQ,EAAE;AACpE,gBAAA,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,kBAAkB,CAAC,UAAqC,EAAE,MAAM,EAAyB,CAAC,KAAK,EAAE,CAAC;YACrH;iBAAO,IACL,CAAC,CAAC,UAAU;AACX,gBAAA,UAA0C,CAAC,WAAW;gBACtD,UAA0C,CAAC,YAAY,EACxD;AACA,gBAAA,MAAM,kBAAkB,CAAC,UAAyC,CAAC;YACrE;iBAAO;AACL,gBAAA,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,qBAAqB,CAAC,MAAM,EAA4B,CAAC,KAAK,EAAE,CAAC;YACpF;AACF,QAAA,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,IAAa,EAAE,KAAc,KAAI;YACrD,MAAM,eAAe,EAAE;AACvB,YAAA,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAI,MAAM,EAAmB,IAAI,EAAE;AACpF,YAAA,MAAM,SAAS,GAAG,IAAI,IAAI,iBAAiB;AAC3C,YAAA,IAAI,SAAS,IAAI,UAAU,EAAE;AAC3B,gBAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE;gBAC5B,MAAM,SAAS,GAAG,CAAC,QAAQ,IAAI,CAAA,eAAA,EAAkB,QAAQ,CAAA,CAAE,KAAK,EAAE;gBAClE,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,KAAK,EAAE;AACnD,gBAAA,MAAM,SAAS,GAAG,CAAA,EAAG,UAAU,CAAA,WAAA,EAAc,QAAQ,CAAA,0BAAA,EAA6B,SAAS,CAAA,EAAG,SAAS,CAAA,EAAG,QAAQ,EAAE;AACpH,gBAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AACb,gBAAA,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC;YACzC;iBAAO;gBACL,MAAM,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC;AAC/B,gBAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACf;AACF,QAAA,CAAC;AAED,QAAA,MAAM,aAAa,GAAG,OAAO,GAAkB,KAAI;AACjD,YAAA,MAAM,UAAU,GAAG,OAAO,UAAkC,KAAI;gBAC9D,IAAI,UAAU,CAAC,OAAO,CAAC;AAAE,oBAAA,OAAO,UAAU;gBAC1C,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACvD,gBAAA,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,KAAK,KAAK,KAAK,EAAE,EAAE,KAAK,EAAE;oBACvD,OAAO,EAAE,KAAK,EAAG,OAAO,EAAE,KAAgB,IAAI,eAAe,EAAE;gBACjE;AACA,gBAAA,OAAO,UAAU;AACnB,YAAA,CAAC;AACD,YAAA,MAAM,SAAS,GAAG,YAAW;gBAC3B,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC;gBACrD,IAAI,UAAU,EAAE;oBACd,KAAK,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;gBACzC;AACF,YAAA,CAAC;AACD,YAAA,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,QAAQ,IAAI,EAAE;AAC/D,YAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;YAC7B,MAAM,kBAAkB,GAAG,IAAI,IAAI,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;YACxE,MAAM,kBAAkB,GAAG,CAAC,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjH,IAAI,kBAAkB,EAAE;gBACtB,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACnD,KAAK,CAAC,GAAG,CAAC;AACR,oBAAA,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;oBACjC,IAAI,EAAE,SAAS,CAAC;AACjB,iBAAA,CAAC;gBACF,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC;YAClC;iBAAO,IAAI,kBAAkB,EAAE;AAC7B,gBAAA,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC5E,KAAK,CAAC,GAAG,CAAC;AACR,oBAAA,GAAG,KAAK,EAAE;AACV,oBAAA,GAAG;;AAEJ,iBAAA,CAAC;gBACF,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC;gBAChC,MAAM,eAAe,EAAE;gBACvB,MAAM,SAAS,EAAE;YACnB;AACF,QAAA,CAAC;AAED,QAAA,MAAM,kBAAkB,GAAG,OAAO,UAAuC,KAAI;AAC3E,YAAA,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,EAAS;AACrE,YAAA,IAAI,gBAAgB,GAAG,CAAA,EAAG,aAAa,EAAE;AACzC,YAAA,gBAAgB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,GAAG;AAC/D,YAAA,gBAAgB,IAAI,CAAA,UAAA,EAAa,QAAQ,CAAA,CAAE;AAC3C,YAAA,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,YAAY,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC;YAC/D,gBAAgB,IAAI,gBAAgB,UAAU,CAAC,UAAU,IAAI,SAAS,EAAE;YACxE,gBAAgB,IAAI,WAAW,UAAU,CAAC,MAAM,IAAI,EAAE,EAAE;YACxD,gBAAgB,IAAI,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA,CAAE;AACjF,YAAA,gBAAgB,IAAI,CAAA,eAAA,EAAkB,UAAU,CAAC,YAAY,EAAE;AAC/D,YAAA,gBAAgB,IAAI,CAAA,OAAA,EAAU,kBAAkB,CAAC,KAAK,CAAC,EAAE;YACzD,gBAAgB,IAAI,CAAA,OAAA,EAAU,kBAAkB,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA,CAAE;AAC1E,YAAA,gBAAgB,GAAG,CAAA,EAAG,gBAAgB,CAAA,EAAG,aAAa,CAAC,KAAK,CAAC,CAAA,EAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,EAAE;YACnG,OAAO,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC;AACvD,QAAA,CAAC;AAED,QAAA,MAAM,aAAa,GAAG,CAAC,KAAa,KAAI;YACtC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAChC,gBAAA,MAAM,KAAK,GAAG,YAAY,EAAE;gBAC5B,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC;gBAChC,OAAO,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE;YAC1B;AACA,YAAA,OAAO,EAAE;AACX,QAAA,CAAC;AAED,QAAA,MAAM,qBAAqB,GAAG,OAAO,MAAW,KAAI;YAClD,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,aAAa,GAAG,YAAY,EAAE;gBACpC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,EAAE,CAAC;AACxC,gBAAA,OAAO,mBAAmB,MAAM,IAAI,CAAC,aAAa,CAAC,6BAA6B;YAClF;AACA,YAAA,OAAO,EAAE;AACX,QAAA,CAAC;QAED,OAAO;YACL,KAAK;YACL,MAAM;YACN,aAAa;YACb,KAAK;YACL,KAAK;YACL,MAAM;YACN,IAAI;YACJ,YAAY;YACZ,MAAM;YACN;SACD;IACH;AACD,CAAA;;AC/JD;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"ngx-oauth.mjs","sources":["../../../projects/ngx-oauth/oauth/types.ts","../../../projects/ngx-oauth/oauth/config.ts","../../../projects/ngx-oauth/oauth/storage.ts","../../../projects/ngx-oauth/oauth/functions.ts","../../../projects/ngx-oauth/oauth/token.ts","../../../projects/ngx-oauth/oauth/fetch.ts","../../../projects/ngx-oauth/oauth/jwt.ts","../../../projects/ngx-oauth/oauth/user.ts","../../../projects/ngx-oauth/oauth/oauth.ts","../../../projects/ngx-oauth/oauth/index.ts","../../../projects/ngx-oauth/oauth/ngx-oauth.ts"],"sourcesContent":["export type ClientCredentialConfig = {\n tokenPath: string\n revokePath?: string\n clientId: string\n clientSecret?: string\n scope?: string\n userPath?: string\n introspectionPath?: string\n}\n\nexport type ResourceOwnerConfig = ClientCredentialConfig\n\nexport type ImplicitConfig = {\n authorizePath: string\n revokePath?: string\n clientId: string\n scope?: string\n logoutPath?: string\n redirectUri?: string // if not using OAuthParameters\n logoutRedirectUri?: string // if not using OAuthParameters\n userPath?: string\n}\n\nexport type AuthorizationCodeConfig = ResourceOwnerConfig & {\n authorizePath: string\n logoutPath?: string\n redirectUri?: string // if not using OAuthParameters\n logoutRedirectUri?: string // if not using OAuthParameters\n}\n\nexport type AuthorizationCodePKCEConfig = AuthorizationCodeConfig & {\n pkce?: boolean\n}\n\nexport type OpenIdConfig = AuthorizationCodePKCEConfig & {\n issuerPath: string\n jwksUri?: string\n}\n\nexport type ResourceOwnerParameters = {\n username: string\n password: string\n}\n\nexport type AuthorizationCodeParameters = {\n accessType?: 'online' | 'offline'\n prompt?: 'none' | 'consent' | 'login' | 'select_account'\n redirectUri: string\n responseType: OAuthType.IMPLICIT | OAuthType.AUTHORIZATION_CODE | string\n state?: string\n}\n\nexport type OAuthParameters = ResourceOwnerParameters | AuthorizationCodeParameters\nexport type OAuthTypeConfig =\n | OpenIdConfig\n | AuthorizationCodePKCEConfig\n | AuthorizationCodeConfig\n | ImplicitConfig\n | ResourceOwnerConfig\n | ClientCredentialConfig\n\nexport type OAuthConfig = {\n config?: Partial<OAuthTypeConfig>\n storageKey?: string\n ignorePaths?: RegExp[]\n strictJwt?: boolean\n\n [x: string]: any\n}\n\nexport enum OAuthType {\n RESOURCE = 'password',\n AUTHORIZATION_CODE = 'code',\n IMPLICIT = 'token',\n CLIENT_CREDENTIAL = 'client_credentials'\n}\n\nexport type OAuthToken = {\n id_token?: string\n access_token?: string\n refresh_token?: string\n token_type?: string\n state?: string\n error?: string\n error_description?: string\n expires_in?: number | string\n refresh_expires_in?: number | string\n scope?: string\n code_verifier?: string\n nonce?: string\n type?: OAuthType\n expires?: number\n code?: string\n\n [x: string]: any\n}\n\nexport enum OAuthStatus {\n NOT_AUTHORIZED = 'NOT_AUTHORIZED',\n AUTHORIZED = 'AUTHORIZED',\n DENIED = 'DENIED'\n}\n\nexport type OpenIdConfiguration = {\n issuer?: string\n authorization_endpoint?: string\n introspection_endpoint?: string\n token_endpoint?: string\n userinfo_endpoint?: string\n end_session_endpoint?: string\n revocation_endpoint?: string\n jwks_uri?: string\n scopes_supported?: string[]\n code_challenge_methods_supported?: string[]\n}\n\nexport type UserInfo = {\n email?: string\n email_verified?: boolean\n family_name?: string\n given_name?: string\n name?: string\n preferred_username?: string\n sub?: string\n address?: object\n picture?: string\n locale?: string\n\n [x: string]: any\n}\n\nexport type IntrospectInfo = UserInfo & {\n active: boolean\n scope: string\n client_id?: string\n username: string\n exp: number\n}\n","import { EnvironmentProviders, linkedSignal, makeEnvironmentProviders, provideEnvironmentInitializer, signal } from '@angular/core'\nimport { OAuthConfig } from './types'\n\nconst defaults: OAuthConfig = {\n storageKey: 'token',\n ignorePaths: [],\n strictJwt: true\n}\n\nexport const oauthConfig = signal<OAuthConfig>(defaults)\n\nexport const config = linkedSignal(() => oauthConfig().config)\n\nexport const provideOAuthConfig = (cfg: OAuthConfig = {}): EnvironmentProviders =>\n makeEnvironmentProviders([provideEnvironmentInitializer(() => oauthConfig.set({ ...defaults, ...cfg }))])\n","import { signal, Signal, WritableSignal } from '@angular/core'\n\nconst storage = () => {\n const s = globalThis.localStorage\n return typeof s?.getItem === 'function' ? s : undefined\n}\n\nconst get = (key: string) => {\n const value = storage()?.getItem(key)\n try {\n return (value && JSON.parse(value)) || undefined\n } catch {\n return undefined\n }\n}\n\nconst set = (key: string, value: any) => {\n storage()?.setItem(key, JSON.stringify(value))\n}\n\nexport const storageSignal = <T>(keyInput: string | Signal<string>, defaultValue: T): WritableSignal<T> => {\n const keyFn = typeof keyInput === 'function' ? keyInput : () => keyInput\n const s = signal<T>(get(keyFn()) ?? defaultValue)\n const { set: signalSet, update } = s\n\n s.set = value => {\n set(keyFn(), value)\n signalSet(value)\n }\n\n s.update = fn => {\n update(current => {\n const next = fn(current)\n set(keyFn(), next)\n return next\n })\n }\n\n return s\n}\n","import { InjectionToken } from '@angular/core'\nimport { ClientCredentialConfig, OAuthToken, OAuthType, OpenIdConfig, ResourceOwnerConfig, ResourceOwnerParameters } from './types'\n\nconst HEADERS = { 'Content-Type': 'application/x-www-form-urlencoded', Accept: 'application/json' }\n\nconst refresh = async (token?: OAuthToken, config?: Partial<OpenIdConfig>) => {\n const { tokenPath, clientId, clientSecret, scope } = config || {}\n const { refresh_token, type } = token || {}\n if (!refresh_token || !tokenPath) return token\n const result = await fetch(tokenPath, {\n method: 'POST',\n headers: HEADERS,\n body: new URLSearchParams({\n client_id: clientId!,\n ...((clientSecret && { client_secret: clientSecret }) || {}),\n grant_type: 'refresh_token',\n refresh_token,\n ...((scope && { scope }) || {})\n })\n }).then(r => r.json())\n return result ? { ...result, type } : token\n}\n\nconst revoke = async (token?: OAuthToken, config?: Partial<OpenIdConfig>) => {\n const { revokePath, clientId, clientSecret } = config || {}\n if (!revokePath) return\n const { access_token, refresh_token } = token || {}\n const base = {\n ...((clientId && { client_id: clientId }) || {}),\n ...((clientSecret && { client_secret: clientSecret }) || {})\n }\n if (access_token) {\n await fetch(revokePath, {\n method: 'POST',\n headers: HEADERS,\n body: new URLSearchParams({ ...base, token: access_token, token_type_hint: 'access_token' })\n })\n }\n if (refresh_token) {\n await fetch(revokePath, {\n method: 'POST',\n headers: HEADERS,\n body: new URLSearchParams({ ...base, token: refresh_token, token_type_hint: 'refresh_token' })\n })\n }\n}\n\nconst authorize = async (token?: OAuthToken, config?: Partial<OpenIdConfig>) => {\n const { clientId, clientSecret, tokenPath, scope } = config || {}\n const { code, redirect_uri, code_verifier } = token || {}\n if (!code || !tokenPath) return token\n const result = await fetch(tokenPath, {\n method: 'POST',\n headers: HEADERS,\n body: new URLSearchParams({\n code,\n client_id: clientId!,\n ...((clientSecret && { client_secret: clientSecret }) || {}),\n redirect_uri: redirect_uri!,\n grant_type: 'authorization_code',\n ...((scope && { scope }) || {}),\n ...((code_verifier && { code_verifier }) || {})\n })\n }).then(r => r.json())\n return result ? { ...result, type: OAuthType.AUTHORIZATION_CODE } : token\n}\n\nconst clientCredentialLogin = async (config?: ClientCredentialConfig) => {\n const { clientId, clientSecret, tokenPath, scope } = config || {}\n if (!tokenPath) return undefined\n const result = await fetch(tokenPath, {\n method: 'POST',\n headers: HEADERS,\n body: new URLSearchParams({\n client_id: clientId!,\n client_secret: clientSecret!,\n grant_type: OAuthType.CLIENT_CREDENTIAL,\n ...(scope ? { scope } : {})\n })\n }).then(r => r.json())\n return result ? { ...result, type: OAuthType.CLIENT_CREDENTIAL } : undefined\n}\n\nconst resourceOwnerLogin = async (parameters?: ResourceOwnerParameters, config?: ResourceOwnerConfig) => {\n const { clientId, clientSecret, tokenPath, scope } = config || {}\n const { username, password } = parameters || {}\n if (!tokenPath || !clientId) return undefined\n const result = await fetch(tokenPath, {\n method: 'POST',\n headers: HEADERS,\n body: new URLSearchParams({\n client_id: clientId,\n ...((clientSecret && { client_secret: clientSecret }) || {}),\n grant_type: OAuthType.RESOURCE,\n ...((scope && { scope }) || {}),\n username: username!,\n password: password!\n })\n }).then(r => r.json())\n return result ? { ...result, type: OAuthType.RESOURCE } : undefined\n}\n\nconst openIdConfiguration = async (config?: Partial<OpenIdConfig>) => {\n const { issuerPath, clientId } = config || {}\n if (!issuerPath) return undefined\n return fetch(`${issuerPath}/.well-known/openid-configuration?client_id=${clientId}`).then(r => r.json())\n}\n\nconst userInfo = async (config?: Partial<OpenIdConfig>, fetchFn = fetch) => {\n const { userPath } = config || {}\n if (!userPath) return undefined\n return fetchFn(userPath).then(r => r.json())\n}\n\nconst introspect = async (token?: OAuthToken, config?: Partial<OpenIdConfig>) => {\n const { introspectionPath, clientId, clientSecret } = config || {}\n const { access_token } = token || {}\n if (!introspectionPath || !access_token || !clientId) return undefined\n return fetch(introspectionPath, {\n method: 'POST',\n headers: { ...HEADERS, Authorization: `Basic ${btoa(`${clientId}:${clientSecret}`)}` },\n body: new URLSearchParams({ token: access_token })\n }).then(r => r.json())\n}\n\nexport const OAUTH_REFRESH = new InjectionToken('OAUTH_REFRESH', {\n providedIn: 'root',\n factory: () => refresh\n})\n\nexport const OAUTH_REVOKE = new InjectionToken('OAUTH_REVOKE', {\n providedIn: 'root',\n factory: () => revoke\n})\n\nexport const OAUTH_AUTHORIZE = new InjectionToken('OAUTH_AUTHORIZE', {\n providedIn: 'root',\n factory: () => authorize\n})\n\nexport const OAUTH_CLIENT_CREDENTIAL = new InjectionToken('OAUTH_CLIENT_CREDENTIAL', {\n providedIn: 'root',\n factory: () => clientCredentialLogin\n})\n\nexport const OAUTH_RESOURCE_OWNER = new InjectionToken('OAUTH_RESOURCE_OWNER', {\n providedIn: 'root',\n factory: () => resourceOwnerLogin\n})\n\nexport const OAUTH_OPENID_CONFIG = new InjectionToken('OAUTH_OPENID_CONFIG', {\n providedIn: 'root',\n factory: () => openIdConfiguration\n})\n\nexport const OAUTH_USER_INFO = new InjectionToken('OAUTH_USER_INFO', {\n providedIn: 'root',\n factory: () => userInfo\n})\n\nexport const OAUTH_INTROSPECT = new InjectionToken('OAUTH_INTROSPECT', {\n providedIn: 'root',\n factory: () => introspect\n})\n","import { storageSignal } from './storage'\nimport { config, oauthConfig } from './config'\nimport { OAuthStatus, OAuthToken, OpenIdConfig } from './types'\nimport { computed, effect, inject, InjectionToken, linkedSignal, untracked } from '@angular/core'\nimport { OAUTH_OPENID_CONFIG, OAUTH_REFRESH } from './functions'\n\nconst isExpiredToken = (token?: OAuthToken) => (token?.expires && Date.now() > token.expires) || false\n\nexport const OAUTH_TOKEN = new InjectionToken('OAUTH_TOKEN', {\n providedIn: 'root',\n factory: () => {\n const refresh = inject(OAUTH_REFRESH)\n const openIdConfiguration = inject(OAUTH_OPENID_CONFIG)\n const storageKey = linkedSignal(() => oauthConfig().storageKey as string)\n const token = storageSignal<OAuthToken>(storageKey, {})\n const type = computed(() => token().type)\n const accessToken = computed(() => {\n const { token_type, access_token } = token() || {}\n return (token_type && access_token && `${token_type} ${access_token}`) || undefined\n })\n const status = computed(() => {\n const { error, access_token } = token()\n return (\n (error && OAuthStatus.DENIED) || (access_token && !isExpiredToken(token()) && OAuthStatus.AUTHORIZED) || OAuthStatus.NOT_AUTHORIZED\n )\n })\n const isAuthorized = computed(() => status() === OAuthStatus.AUTHORIZED)\n const error = computed(() => token().error)\n const hasError = computed(() => !!error())\n const errorDescription = computed(() => token().error_description)\n\n const autoconfigOauth = async () => {\n const c = config() as OpenIdConfig\n if (!(c.tokenPath || c.authorizePath)) {\n const v = await openIdConfiguration(c)\n if (v) {\n config.set({\n ...c,\n ...((v?.authorization_endpoint && { authorizePath: v.authorization_endpoint }) || {}),\n ...((v?.token_endpoint && { tokenPath: v.token_endpoint }) || {}),\n ...((v?.revocation_endpoint && { revokePath: v.revocation_endpoint }) || {}),\n ...((v?.userinfo_endpoint && { userPath: v.userinfo_endpoint }) || {}),\n ...((v?.introspection_endpoint && { introspectionPath: v.introspection_endpoint }) || {}),\n ...((v?.end_session_endpoint && { logoutPath: v.end_session_endpoint }) || {}),\n ...((v?.jwks_uri && { jwksUri: v.jwks_uri }) || {}),\n ...((c?.pkce === undefined &&\n v?.code_challenge_methods_supported && { pkce: v.code_challenge_methods_supported.indexOf('S256') > -1 }) ||\n {}),\n ...{ scope: c.scope || 'openid' }\n })\n }\n }\n }\n\n const setExpires = (t: OAuthToken) => {\n const expiresIn = Number(t?.expires_in) || 0\n if (expiresIn && !t.expires) {\n token.set({\n ...t,\n expires: Date.now() + expiresIn * 1000\n })\n }\n }\n\n let inFlight: Promise<void> | undefined\n const checkToken = (t: OAuthToken) => {\n if (inFlight) return inFlight\n inFlight = (async () => {\n if (isExpiredToken(t)) {\n await autoconfigOauth()\n const refreshed = await refresh(t, config())\n if (refreshed && !isExpiredToken(refreshed)) {\n //keep the refresh token cuz we might not net a new one\n setExpires({ refresh_token: t.refresh_token, ...refreshed })\n }\n } else {\n setExpires(t)\n }\n })().finally(() => (inFlight = undefined))\n return inFlight\n }\n\n effect(async () => {\n const t = token()\n await untracked(() => checkToken(t))\n })\n\n return {\n token,\n type,\n accessToken,\n status,\n isAuthorized,\n error,\n hasError,\n errorDescription,\n storageKey,\n checkToken,\n autoconfigOauth,\n isExpiredToken\n }\n }\n})\n","import { computed, inject, InjectionToken } from '@angular/core'\nimport { OAUTH_TOKEN } from './token'\nimport { oauthConfig } from './config'\n\nconst getPath = (input: RequestInfo | URL): string =>\n input instanceof URL ? input.pathname : input instanceof Request ? new URL(input.url).pathname : input\n\nconst isPathIgnored = (input: RequestInfo | URL) => ignorePaths().some(pattern => pattern.test(getPath(input)))\nconst ignorePaths = computed(() => oauthConfig().ignorePaths as RegExp[])\n\nexport const OAUTH_FETCH = new InjectionToken<typeof fetch>('OAUTH_FETCH', {\n providedIn: 'root',\n factory: () => {\n const { token, accessToken, checkToken } = inject(OAUTH_TOKEN)\n return async (input, init) => {\n if (!isPathIgnored(input)) {\n await checkToken(token())\n const at = accessToken()\n if (at) {\n const headers = new Headers(init?.headers)\n headers.set('Authorization', at)\n if (!headers.has('Content-Type')) headers.set('Content-Type', 'application/json')\n const response = await globalThis.fetch(input, { ...init, headers })\n if (response.status === 401) {\n token.set(await response.json())\n }\n return response\n }\n }\n return globalThis.fetch(input, init)\n }\n }\n})\n","import { computed, effect, InjectionToken } from '@angular/core'\nimport { config, oauthConfig } from './config'\nimport { OpenIdConfig } from './types'\nimport { createRemoteJWKSet, jwtVerify } from 'jose'\n\nconst strictJwt = computed(() => oauthConfig().strictJwt)\nconst jwksUri = computed(() => (config() as OpenIdConfig)?.jwksUri)\n\nconst jwt = (idToken?: string) => {\n const payload = idToken?.split('.')[1]\n return payload\n ? JSON.parse(\n decodeURIComponent(\n Array.from(atob(payload))\n .map(c => `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`)\n .join('')\n )\n )\n : {}\n}\n\nlet jwksSet: ReturnType<typeof createRemoteJWKSet> | undefined\n\nconst verifyJwt = async (idToken?: string) => {\n if (!idToken) return {}\n if (!jwksSet) return jwt(idToken)\n const { issuerPath, clientId } = (config() as OpenIdConfig) || {}\n try {\n const { payload } = await jwtVerify(idToken, jwksSet, {\n ...(issuerPath && { issuer: issuerPath }),\n ...(clientId && { audience: clientId })\n })\n return payload\n } catch {\n return { error: 'Invalid token' }\n }\n}\n\nexport const OAUTH_VERIFY_JWT = new InjectionToken('OAUTH_VERIFY_JWT', {\n providedIn: 'root',\n factory: () => {\n effect(() => {\n const uri = jwksUri()\n jwksSet = uri && strictJwt() ? createRemoteJWKSet(new URL(uri)) : undefined\n })\n return verifyJwt\n }\n})\n","import { inject, InjectionToken, resource } from '@angular/core'\nimport { config } from './config'\nimport { OAUTH_FETCH } from './fetch'\nimport { OAUTH_VERIFY_JWT } from './jwt'\nimport { OAUTH_TOKEN } from './token'\nimport { UserInfo } from './types'\nimport { OAUTH_USER_INFO } from './functions'\n\nexport const OAUTH_USER = new InjectionToken('OAUTH_USER', {\n providedIn: 'root',\n factory: () => {\n const { token, isAuthorized, autoconfigOauth } = inject(OAUTH_TOKEN)\n const verifyJwt = inject(OAUTH_VERIFY_JWT)\n const userInfo = inject(OAUTH_USER_INFO)\n const fetch = inject(OAUTH_FETCH)\n return resource<UserInfo | undefined, { idToken?: string; authorized: boolean; userPath?: string }>({\n params: () => ({\n idToken: token().id_token,\n authorized: isAuthorized(),\n userPath: config()?.userPath\n }),\n loader: async ({ params: { idToken, authorized, userPath } }) => {\n if (idToken) return verifyJwt(idToken)\n if (authorized && userPath) {\n await autoconfigOauth()\n return userInfo({ userPath }, fetch)\n }\n return undefined\n }\n })\n }\n})\n","import {\n AuthorizationCodeParameters,\n ClientCredentialConfig,\n OAuthParameters,\n OAuthType,\n OpenIdConfig,\n ResourceOwnerConfig,\n ResourceOwnerParameters\n} from './types'\nimport { OAUTH_TOKEN } from './token'\nimport { config } from './config'\nimport { inject, InjectionToken, signal } from '@angular/core'\nimport { OAUTH_AUTHORIZE, OAUTH_CLIENT_CREDENTIAL, OAUTH_RESOURCE_OWNER, OAUTH_REVOKE } from './functions'\nimport { OAUTH_VERIFY_JWT } from './jwt'\n\nconst arrToString = (buf: Uint8Array) => buf.reduce((s, b) => s + String.fromCharCode(b), '')\nconst base64url = (str: string) => btoa(str).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '')\nconst randomString = (length = 48) => {\n const buff = arrToString(crypto.getRandomValues(new Uint8Array(length * 2)))\n return base64url(buff).substring(0, length)\n}\nconst pkce = async (value: string) => {\n const buff = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(value))\n return base64url(arrToString(new Uint8Array(buff)))\n}\nconst parseOauthUri = (hash: string) => {\n const params = Object.fromEntries(new URLSearchParams(hash))\n return (Object.keys(params).length && params) || {}\n}\n\nexport const OAUTH = new InjectionToken('OAUTH', {\n providedIn: 'root',\n factory: () => {\n const { token, status, type, isAuthorized, storageKey, autoconfigOauth } = inject(OAUTH_TOKEN)\n const resourceOwnerLogin = inject(OAUTH_RESOURCE_OWNER)\n const clientCredentialLogin = inject(OAUTH_CLIENT_CREDENTIAL)\n const revoke = inject(OAUTH_REVOKE)\n const authorize = inject(OAUTH_AUTHORIZE)\n const verifyJwt = inject(OAUTH_VERIFY_JWT)\n const state = signal<string | undefined>(undefined)\n\n const login = async (parameters?: OAuthParameters) => {\n await autoconfigOauth()\n if (!!parameters && (parameters as ResourceOwnerParameters).password) {\n token.set((await resourceOwnerLogin(parameters as ResourceOwnerParameters, config() as ResourceOwnerConfig)) || {})\n } else if (\n !!parameters &&\n (parameters as AuthorizationCodeParameters).redirectUri &&\n (parameters as AuthorizationCodeParameters).responseType\n ) {\n await toAuthorizationUrl(parameters as AuthorizationCodeParameters)\n } else {\n token.set((await clientCredentialLogin(config() as ClientCredentialConfig)) || {})\n }\n }\n\n const logout = async (next?: string, state?: string) => {\n await autoconfigOauth()\n const { logoutPath, clientId, logoutRedirectUri } = (config() as OpenIdConfig) || {}\n const returnUrl = next || logoutRedirectUri\n if (returnUrl && logoutPath) {\n const { id_token } = token()\n const tokenHint = (id_token && `&id_token_hint=${id_token}`) || ''\n const stateFwd = (state && `&state=${state}`) || ''\n const logoutUrl = `${logoutPath}?client_id=${clientId}&post_logout_redirect_uri=${returnUrl}${tokenHint}${stateFwd}`\n token.set({})\n globalThis.location?.replace(logoutUrl)\n } else {\n await revoke(token(), config())\n token.set({})\n }\n }\n\n const oauthCallback = async (url?: string | URL) => {\n const checkNonce = async (parameters: Record<string, string>) => {\n if (parameters['error']) return parameters\n const payload = await verifyJwt(parameters['id_token'])\n if (payload?.error || payload?.nonce !== token()?.nonce) {\n return { error: (payload?.error as string) || 'Invalid nonce' }\n }\n return parameters\n }\n const checkCode = async () => {\n const parameters = await authorize(token(), config())\n if (parameters) {\n token.set(await checkNonce(parameters))\n }\n }\n const path = (url && new URL(url)) || globalThis.location || {}\n const { hash, search } = path\n const isImplicitRedirect = hash && /(access_token=)|(error=)/.test(hash)\n const isAuthCodeRedirect = (search && /(code=)|(error=)/.test(search)) || (hash && /(code=)|(error=)/.test(hash))\n if (isImplicitRedirect) {\n const parameters = parseOauthUri(hash.substring(1))\n token.set({\n ...(await checkNonce(parameters)),\n type: OAuthType.IMPLICIT\n })\n state.set(parameters?.['state'])\n } else if (isAuthCodeRedirect) {\n const parameters = parseOauthUri(search?.substring(1) || hash?.substring(1))\n token.set({\n ...token(),\n ...parameters\n // do not set type yet. will be set by authorize function since it is a two-step process\n })\n state.set(parameters?.['state'])\n await autoconfigOauth()\n await checkCode()\n }\n }\n\n const toAuthorizationUrl = async (parameters: AuthorizationCodeParameters) => {\n const { authorizePath, clientId, scope = '', pkce } = config() as any\n let authorizationUrl = `${authorizePath}`\n authorizationUrl += (authorizePath.includes('?') && '&') || '?'\n authorizationUrl += `client_id=${clientId}`\n token.set({ ...token(), redirect_uri: parameters.redirectUri })\n if (parameters.accessType) {\n authorizationUrl += `&access_type=${parameters.accessType}`\n authorizationUrl += `&prompt=${parameters.prompt || ''}`\n }\n authorizationUrl += `&redirect_uri=${encodeURIComponent(parameters.redirectUri)}`\n authorizationUrl += `&response_type=${parameters.responseType}`\n authorizationUrl += `&scope=${encodeURIComponent(scope)}`\n authorizationUrl += `&state=${encodeURIComponent(parameters.state || '')}`\n authorizationUrl = `${authorizationUrl}${generateNonce(scope)}${await generateCodeChallenge(pkce)}`\n return globalThis.location?.replace(authorizationUrl)\n }\n\n const generateNonce = (scope: string) => {\n if (scope.indexOf('openid') > -1) {\n const nonce = randomString()\n token.set({ ...token(), nonce })\n return `&nonce=${nonce}`\n }\n return ''\n }\n\n const generateCodeChallenge = async (doPkce: any) => {\n if (doPkce) {\n const code_verifier = randomString()\n token.set({ ...token(), code_verifier })\n return `&code_challenge=${await pkce(code_verifier)}&code_challenge_method=S256`\n }\n return ''\n }\n\n return {\n login,\n logout,\n oauthCallback,\n state,\n token,\n status,\n type,\n isAuthorized,\n config,\n storageKey\n }\n }\n})\n","/*\n * Public API Surface of ngx-oauth\n */\nexport * from './types'\nexport { provideOAuthConfig } from './config'\nexport * from './fetch'\nexport * from './functions'\nexport * from './token'\nexport * from './jwt'\nexport * from './user'\nexport * from './oauth'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-oauth",
3
- "version": "8.0.1",
3
+ "version": "8.0.3",
4
4
  "author": "Fl0r14n <florian.chis@gmail.com>",
5
5
  "homepage": "https://github.com/Fl0r14n/ngx-oauth",
6
6
  "description": "A fully OAuth2.1 compliant angular library",
@@ -21,14 +21,14 @@
21
21
  "url": "https://github.com/Fl0r14n/ngx-oauth"
22
22
  },
23
23
  "peerDependencies": {
24
- "@angular/common": "^21.0.0",
25
- "@angular/core": "^21.0.0",
26
- "@angular/forms": "^21.0.0",
27
- "@angular/material": "^21.0.0",
28
- "jose": "^6"
24
+ "@angular/common": ">=21.0.0",
25
+ "@angular/core": ">=21.0.0",
26
+ "@angular/forms": ">=21.0.0",
27
+ "@angular/material": ">=21.0.0",
28
+ "jose": ">=6"
29
29
  },
30
30
  "dependencies": {
31
- "tslib": "^2.0.0"
31
+ "tslib": ">=2.0.0"
32
32
  },
33
33
  "sideEffects": false,
34
34
  "module": "fesm2022/ngx-oauth.mjs",
@@ -142,6 +142,7 @@ declare const OAUTH_TOKEN: InjectionToken<{
142
142
  storageKey: _angular_core.WritableSignal<string>;
143
143
  checkToken: (t: OAuthToken) => Promise<void>;
144
144
  autoconfigOauth: () => Promise<void>;
145
+ isExpiredToken: (token?: OAuthToken) => boolean;
145
146
  }>;
146
147
 
147
148
  declare const OAUTH_VERIFY_JWT: InjectionToken<(idToken?: string) => Promise<any>>;