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({},
|
|
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,
|
|
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
|
-
},
|
|
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
|
-
},
|
|
53
|
-
|
|
54
|
-
this.
|
|
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: "
|
|
82
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
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: "
|
|
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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"}
|
package/fesm2022/ngx-oauth.mjs
CHANGED
|
@@ -20,8 +20,10 @@ const defaults = {
|
|
|
20
20
|
ignorePaths: [],
|
|
21
21
|
strictJwt: true
|
|
22
22
|
};
|
|
23
|
-
const oauthConfig = signal(defaults,
|
|
24
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
-
},
|
|
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
|
-
},
|
|
232
|
-
|
|
233
|
-
const
|
|
234
|
-
|
|
235
|
-
const
|
|
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,
|
|
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,
|
|
335
|
-
|
|
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,
|
|
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
|
-
|
|
501
|
-
|
|
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":"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"}
|
|
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.
|
|
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": "
|
|
25
|
-
"@angular/core": "
|
|
26
|
-
"@angular/forms": "
|
|
27
|
-
"@angular/material": "
|
|
28
|
-
"jose": "
|
|
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": "
|
|
31
|
+
"tslib": ">=2.0.0"
|
|
32
32
|
},
|
|
33
33
|
"sideEffects": false,
|
|
34
34
|
"module": "fesm2022/ngx-oauth.mjs",
|
package/types/ngx-oauth.d.ts
CHANGED
|
@@ -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>>;
|