@fusionauth/angular-sdk 0.1.4 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/README.md +1 -3
  2. package/{esm2020 → esm2022}/lib/components/fusionauth-login.button/fusion-auth-login-button.component.mjs +5 -5
  3. package/esm2022/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.mjs +18 -0
  4. package/esm2022/lib/components/fusionauth-register.button/fusion-auth-register-button.component.mjs +20 -0
  5. package/esm2022/lib/fusion-auth.module.mjs +43 -0
  6. package/esm2022/lib/fusion-auth.service.mjs +127 -0
  7. package/{fesm2020 → fesm2022}/fusionauth-angular-sdk.mjs +43 -39
  8. package/fesm2022/fusionauth-angular-sdk.mjs.map +1 -0
  9. package/lib/components/fusionauth-login.button/fusion-auth-login-button.component.d.ts +1 -1
  10. package/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.d.ts +1 -1
  11. package/lib/components/fusionauth-register.button/fusion-auth-register-button.component.d.ts +1 -1
  12. package/package.json +11 -23
  13. package/esm2020/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.mjs +0 -18
  14. package/esm2020/lib/components/fusionauth-register.button/fusion-auth-register-button.component.mjs +0 -20
  15. package/esm2020/lib/fusion-auth.module.mjs +0 -40
  16. package/esm2020/lib/fusion-auth.service.mjs +0 -126
  17. package/fesm2015/fusionauth-angular-sdk.mjs +0 -228
  18. package/fesm2015/fusionauth-angular-sdk.mjs.map +0 -1
  19. package/fesm2020/fusionauth-angular-sdk.mjs.map +0 -1
  20. /package/{esm2020 → esm2022}/fusionauth-angular-sdk.mjs +0 -0
  21. /package/{esm2020 → esm2022}/lib/types.mjs +0 -0
  22. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  23. /package/{fusionauth-angular-sdk.d.ts → index.d.ts} +0 -0
package/README.md CHANGED
@@ -16,8 +16,6 @@ An SDK for using FusionAuth in Angular applications.
16
16
 
17
17
  - [Known issues](#known-issues)
18
18
 
19
- - [Example App](#example-app)
20
-
21
19
  - [Quickstart](#quickstart)
22
20
 
23
21
  - [Documentation](#documentation)
@@ -221,4 +219,4 @@ Use backticks for code in this readme. This readme is included on the FusionAuth
221
219
 
222
220
  ## Releases
223
221
 
224
- To perform a release to NPM, create a release on GitHub. That will automatically publish a release to GitHub.
222
+ To perform a release to NPM, create a release on GitHub. That will automatically publish a release to GitHub.
@@ -8,13 +8,13 @@ export class FusionAuthLoginButtonComponent {
8
8
  login() {
9
9
  this.fusionAuth.startLogin(this.state);
10
10
  }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthLoginButtonComponent, deps: [{ token: i1.FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: FusionAuthLoginButtonComponent, selector: "fa-login", inputs: { state: "state" }, ngImport: i0, template: "<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }); }
11
13
  }
12
- FusionAuthLoginButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthLoginButtonComponent, deps: [{ token: i1.FusionAuthService }], target: i0.ɵɵFactoryTarget.Component });
13
- FusionAuthLoginButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FusionAuthLoginButtonComponent, selector: "fa-login", inputs: { state: "state" }, ngImport: i0, template: "<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] });
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthLoginButtonComponent, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthLoginButtonComponent, decorators: [{
15
15
  type: Component,
16
16
  args: [{ selector: 'fa-login', template: "<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }]
17
- }], ctorParameters: function () { return [{ type: i1.FusionAuthService }]; }, propDecorators: { state: [{
17
+ }], ctorParameters: () => [{ type: i1.FusionAuthService }], propDecorators: { state: [{
18
18
  type: Input
19
19
  }] } });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzaW9uLWF1dGgtbG9naW4tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Z1c2lvbmF1dGgtYW5ndWxhci1zZGsvc3JjL2xpYi9jb21wb25lbnRzL2Z1c2lvbmF1dGgtbG9naW4uYnV0dG9uL2Z1c2lvbi1hdXRoLWxvZ2luLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mdXNpb25hdXRoLWFuZ3VsYXItc2RrL3NyYy9saWIvY29tcG9uZW50cy9mdXNpb25hdXRoLWxvZ2luLmJ1dHRvbi9mdXNpb24tYXV0aC1sb2dpbi1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVFqRCxNQUFNLE9BQU8sOEJBQThCO0lBR3pDLFlBQW9CLFVBQTZCO1FBQTdCLGVBQVUsR0FBVixVQUFVLENBQW1CO0lBQUcsQ0FBQztJQUVyRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7OzRIQVBVLDhCQUE4QjtnSEFBOUIsOEJBQThCLDRFQ1IzQyxxRkFHQTs0RkRLYSw4QkFBOEI7a0JBTDFDLFNBQVM7K0JBQ0UsVUFBVTt3R0FLWCxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGdXNpb25BdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL2Z1c2lvbi1hdXRoLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmYS1sb2dpbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9mdXNpb24tYXV0aC1sb2dpbi1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mdXNpb24tYXV0aC1sb2dpbi1idXR0b24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGdXNpb25BdXRoTG9naW5CdXR0b25Db21wb25lbnQge1xuICBASW5wdXQoKSBzdGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZnVzaW9uQXV0aDogRnVzaW9uQXV0aFNlcnZpY2UpIHt9XG5cbiAgbG9naW4oKSB7XG4gICAgdGhpcy5mdXNpb25BdXRoLnN0YXJ0TG9naW4odGhpcy5zdGF0ZSk7XG4gIH1cbn1cbiIsIjxidXR0b24gY2xhc3M9XCJmYS1idXR0b25cIiAoY2xpY2spPVwibG9naW4oKVwiPlxuICA8c3Bhbj5Mb2dpbjwvc3Bhbj5cbjwvYnV0dG9uPlxuIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzaW9uLWF1dGgtbG9naW4tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Z1c2lvbmF1dGgtYW5ndWxhci1zZGsvc3JjL2xpYi9jb21wb25lbnRzL2Z1c2lvbmF1dGgtbG9naW4uYnV0dG9uL2Z1c2lvbi1hdXRoLWxvZ2luLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mdXNpb25hdXRoLWFuZ3VsYXItc2RrL3NyYy9saWIvY29tcG9uZW50cy9mdXNpb25hdXRoLWxvZ2luLmJ1dHRvbi9mdXNpb24tYXV0aC1sb2dpbi1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVFqRCxNQUFNLE9BQU8sOEJBQThCO0lBR3pDLFlBQW9CLFVBQTZCO1FBQTdCLGVBQVUsR0FBVixVQUFVLENBQW1CO0lBQUcsQ0FBQztJQUVyRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7OEdBUFUsOEJBQThCO2tHQUE5Qiw4QkFBOEIsNEVDUjNDLHFGQUdBOzsyRkRLYSw4QkFBOEI7a0JBTDFDLFNBQVM7K0JBQ0UsVUFBVTtzRkFLWCxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGdXNpb25BdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL2Z1c2lvbi1hdXRoLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmYS1sb2dpbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9mdXNpb24tYXV0aC1sb2dpbi1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mdXNpb24tYXV0aC1sb2dpbi1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRnVzaW9uQXV0aExvZ2luQnV0dG9uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgc3RhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZ1c2lvbkF1dGg6IEZ1c2lvbkF1dGhTZXJ2aWNlKSB7fVxuXG4gIGxvZ2luKCkge1xuICAgIHRoaXMuZnVzaW9uQXV0aC5zdGFydExvZ2luKHRoaXMuc3RhdGUpO1xuICB9XG59XG4iLCI8YnV0dG9uIGNsYXNzPVwiZmEtYnV0dG9uXCIgKGNsaWNrKT1cImxvZ2luKClcIj5cbiAgPHNwYW4+TG9naW48L3NwYW4+XG48L2J1dHRvbj5cbiJdfQ==
@@ -0,0 +1,18 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../fusion-auth.service";
4
+ export class FusionAuthLogoutButtonComponent {
5
+ constructor(fusionAuth) {
6
+ this.fusionAuth = fusionAuth;
7
+ }
8
+ logout() {
9
+ this.fusionAuth.logout();
10
+ }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthLogoutButtonComponent, deps: [{ token: i1.FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: FusionAuthLogoutButtonComponent, selector: "fa-logout", ngImport: i0, template: "<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n", styles: [".fa-logout-button{padding:7px 13px;border-radius:3px;display:block;border:solid 1px #083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:12px;text-align:center;color:#083b94}.fa-logout-button:hover{cursor:pointer}\n"] }); }
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthLogoutButtonComponent, decorators: [{
15
+ type: Component,
16
+ args: [{ selector: 'fa-logout', template: "<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n", styles: [".fa-logout-button{padding:7px 13px;border-radius:3px;display:block;border:solid 1px #083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:12px;text-align:center;color:#083b94}.fa-logout-button:hover{cursor:pointer}\n"] }]
17
+ }], ctorParameters: () => [{ type: i1.FusionAuthService }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzaW9uLWF1dGgtbG9nb3V0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mdXNpb25hdXRoLWFuZ3VsYXItc2RrL3NyYy9saWIvY29tcG9uZW50cy9mdXNpb25hdXRoLWxvZ291dC5idXR0b24vZnVzaW9uLWF1dGgtbG9nb3V0LWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mdXNpb25hdXRoLWFuZ3VsYXItc2RrL3NyYy9saWIvY29tcG9uZW50cy9mdXNpb25hdXRoLWxvZ291dC5idXR0b24vZnVzaW9uLWF1dGgtbG9nb3V0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFRMUMsTUFBTSxPQUFPLCtCQUErQjtJQUMxQyxZQUFvQixVQUE2QjtRQUE3QixlQUFVLEdBQVYsVUFBVSxDQUFtQjtJQUFHLENBQUM7SUFFckQsTUFBTTtRQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0FMVSwrQkFBK0I7a0dBQS9CLCtCQUErQixpRENSNUMsOEZBR0E7OzJGREthLCtCQUErQjtrQkFMM0MsU0FBUzsrQkFDRSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGdXNpb25BdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL2Z1c2lvbi1hdXRoLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmYS1sb2dvdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZnVzaW9uLWF1dGgtbG9nb3V0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Z1c2lvbi1hdXRoLWxvZ291dC1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRnVzaW9uQXV0aExvZ291dEJ1dHRvbkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZnVzaW9uQXV0aDogRnVzaW9uQXV0aFNlcnZpY2UpIHt9XG5cbiAgbG9nb3V0KCkge1xuICAgIHRoaXMuZnVzaW9uQXV0aC5sb2dvdXQoKTtcbiAgfVxufVxuIiwiPGJ1dHRvbiBjbGFzcz1cImZhLWxvZ291dC1idXR0b25cIiAoY2xpY2spPVwibG9nb3V0KClcIj5cbiAgPHNwYW4+bG9nb3V0PC9zcGFuPlxuPC9idXR0b24+XG4iXX0=
@@ -0,0 +1,20 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../fusion-auth.service";
4
+ export class FusionAuthRegisterButtonComponent {
5
+ constructor(fusionAuth) {
6
+ this.fusionAuth = fusionAuth;
7
+ }
8
+ register() {
9
+ this.fusionAuth.startRegistration(this.state);
10
+ }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthRegisterButtonComponent, deps: [{ token: i1.FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: FusionAuthRegisterButtonComponent, selector: "fa-register", inputs: { state: "state" }, ngImport: i0, template: "<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }); }
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthRegisterButtonComponent, decorators: [{
15
+ type: Component,
16
+ args: [{ selector: 'fa-register', template: "<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }]
17
+ }], ctorParameters: () => [{ type: i1.FusionAuthService }], propDecorators: { state: [{
18
+ type: Input
19
+ }] } });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzaW9uLWF1dGgtcmVnaXN0ZXItYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Z1c2lvbmF1dGgtYW5ndWxhci1zZGsvc3JjL2xpYi9jb21wb25lbnRzL2Z1c2lvbmF1dGgtcmVnaXN0ZXIuYnV0dG9uL2Z1c2lvbi1hdXRoLXJlZ2lzdGVyLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mdXNpb25hdXRoLWFuZ3VsYXItc2RrL3NyYy9saWIvY29tcG9uZW50cy9mdXNpb25hdXRoLXJlZ2lzdGVyLmJ1dHRvbi9mdXNpb24tYXV0aC1yZWdpc3Rlci1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVFqRCxNQUFNLE9BQU8saUNBQWlDO0lBRzVDLFlBQW9CLFVBQTZCO1FBQTdCLGVBQVUsR0FBVixVQUFVLENBQW1CO0lBQUcsQ0FBQztJQUVyRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQzs4R0FQVSxpQ0FBaUM7a0dBQWpDLGlDQUFpQywrRUNSOUMsK0ZBR0E7OzJGREthLGlDQUFpQztrQkFMN0MsU0FBUzsrQkFDRSxhQUFhO3NGQUtkLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZ1c2lvbkF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZnVzaW9uLWF1dGguc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZhLXJlZ2lzdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Z1c2lvbi1hdXRoLXJlZ2lzdGVyLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Z1c2lvbi1hdXRoLXJlZ2lzdGVyLWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGdXNpb25BdXRoUmVnaXN0ZXJCdXR0b25Db21wb25lbnQge1xuICBASW5wdXQoKSBzdGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZnVzaW9uQXV0aDogRnVzaW9uQXV0aFNlcnZpY2UpIHt9XG5cbiAgcmVnaXN0ZXIoKSB7XG4gICAgdGhpcy5mdXNpb25BdXRoLnN0YXJ0UmVnaXN0cmF0aW9uKHRoaXMuc3RhdGUpO1xuICB9XG59XG4iLCI8YnV0dG9uIGNsYXNzPVwiZmEtYnV0dG9uXCIgKGNsaWNrKT1cInJlZ2lzdGVyKClcIj5cbiAgPHNwYW4+UmVnaXN0ZXIgTm93PC9zcGFuPlxuPC9idXR0b24+XG4iXX0=
@@ -0,0 +1,43 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { FusionAuthService } from './fusion-auth.service';
3
+ import { FusionAuthLoginButtonComponent } from './components/fusionauth-login.button/fusion-auth-login-button.component';
4
+ import { FusionAuthLogoutButtonComponent } from './components/fusionauth-logout.button/fusion-auth-logout-button.component';
5
+ import { FusionAuthRegisterButtonComponent } from './components/fusionauth-register.button/fusion-auth-register-button.component';
6
+ import * as i0 from "@angular/core";
7
+ export class FusionAuthModule {
8
+ static forRoot(fusionAuthConfig) {
9
+ return {
10
+ ngModule: FusionAuthModule,
11
+ providers: [
12
+ {
13
+ provide: FusionAuthService,
14
+ useValue: new FusionAuthService(fusionAuthConfig),
15
+ },
16
+ ],
17
+ };
18
+ }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
20
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthModule, declarations: [FusionAuthLoginButtonComponent,
21
+ FusionAuthLogoutButtonComponent,
22
+ FusionAuthRegisterButtonComponent], exports: [FusionAuthLoginButtonComponent,
23
+ FusionAuthLogoutButtonComponent,
24
+ FusionAuthRegisterButtonComponent] }); }
25
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthModule }); }
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthModule, decorators: [{
28
+ type: NgModule,
29
+ args: [{
30
+ declarations: [
31
+ FusionAuthLoginButtonComponent,
32
+ FusionAuthLogoutButtonComponent,
33
+ FusionAuthRegisterButtonComponent,
34
+ ],
35
+ imports: [],
36
+ exports: [
37
+ FusionAuthLoginButtonComponent,
38
+ FusionAuthLogoutButtonComponent,
39
+ FusionAuthRegisterButtonComponent,
40
+ ],
41
+ }]
42
+ }] });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzaW9uLWF1dGgubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZnVzaW9uYXV0aC1hbmd1bGFyLXNkay9zcmMvbGliL2Z1c2lvbi1hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUN6SCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwyRUFBMkUsQ0FBQztBQUM1SCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwrRUFBK0UsQ0FBQzs7QUFlbEksTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixNQUFNLENBQUMsT0FBTyxDQUNaLGdCQUFrQztRQUVsQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsUUFBUSxFQUFFLElBQUksaUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7aUJBQ2xEO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzs4R0FiVSxnQkFBZ0I7K0dBQWhCLGdCQUFnQixpQkFYekIsOEJBQThCO1lBQzlCLCtCQUErQjtZQUMvQixpQ0FBaUMsYUFJakMsOEJBQThCO1lBQzlCLCtCQUErQjtZQUMvQixpQ0FBaUM7K0dBR3hCLGdCQUFnQjs7MkZBQWhCLGdCQUFnQjtrQkFiNUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osOEJBQThCO3dCQUM5QiwrQkFBK0I7d0JBQy9CLGlDQUFpQztxQkFDbEM7b0JBQ0QsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFO3dCQUNQLDhCQUE4Qjt3QkFDOUIsK0JBQStCO3dCQUMvQixpQ0FBaUM7cUJBQ2xDO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZ1c2lvbkF1dGhDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEZ1c2lvbkF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9mdXNpb24tYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEZ1c2lvbkF1dGhMb2dpbkJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9mdXNpb25hdXRoLWxvZ2luLmJ1dHRvbi9mdXNpb24tYXV0aC1sb2dpbi1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEZ1c2lvbkF1dGhMb2dvdXRCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZnVzaW9uYXV0aC1sb2dvdXQuYnV0dG9uL2Z1c2lvbi1hdXRoLWxvZ291dC1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEZ1c2lvbkF1dGhSZWdpc3RlckJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9mdXNpb25hdXRoLXJlZ2lzdGVyLmJ1dHRvbi9mdXNpb24tYXV0aC1yZWdpc3Rlci1idXR0b24uY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgRnVzaW9uQXV0aExvZ2luQnV0dG9uQ29tcG9uZW50LFxuICAgIEZ1c2lvbkF1dGhMb2dvdXRCdXR0b25Db21wb25lbnQsXG4gICAgRnVzaW9uQXV0aFJlZ2lzdGVyQnV0dG9uQ29tcG9uZW50LFxuICBdLFxuICBpbXBvcnRzOiBbXSxcbiAgZXhwb3J0czogW1xuICAgIEZ1c2lvbkF1dGhMb2dpbkJ1dHRvbkNvbXBvbmVudCxcbiAgICBGdXNpb25BdXRoTG9nb3V0QnV0dG9uQ29tcG9uZW50LFxuICAgIEZ1c2lvbkF1dGhSZWdpc3RlckJ1dHRvbkNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRnVzaW9uQXV0aE1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KFxuICAgIGZ1c2lvbkF1dGhDb25maWc6IEZ1c2lvbkF1dGhDb25maWcsXG4gICk6IE1vZHVsZVdpdGhQcm92aWRlcnM8RnVzaW9uQXV0aE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogRnVzaW9uQXV0aE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogRnVzaW9uQXV0aFNlcnZpY2UsXG4gICAgICAgICAgdXNlVmFsdWU6IG5ldyBGdXNpb25BdXRoU2VydmljZShmdXNpb25BdXRoQ29uZmlnKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Service class to use with FusionAuth backend endpoints.
3
+ */
4
+ export class FusionAuthService {
5
+ constructor(config) {
6
+ this.config = config;
7
+ }
8
+ /**
9
+ * Calls the 'me' endpoint to retrieve user info.
10
+ * @return {Promise<UserInfo>} the user info response.
11
+ */
12
+ async getUserInfo() {
13
+ const path = this.config.mePath ? this.config.mePath : '/app/me';
14
+ const uri = this.getUrlForPath(path);
15
+ const resp = await fetch(uri.href, {
16
+ credentials: 'include',
17
+ });
18
+ return JSON.parse(await resp.text());
19
+ }
20
+ /**
21
+ * Checks for the 'app.at_exp' cookie and if present sets a timer to refresh the access token.
22
+ * Will attempt to refresh the configured seconds before the access token expires (default is ten seconds).
23
+ */
24
+ initAutoRefresh() {
25
+ const exp = this.getExpTime();
26
+ if (exp) {
27
+ const refreshBeforeSeconds = this.config.autoRefreshSecondsBeforeExpiry
28
+ ? this.config.autoRefreshSecondsBeforeExpiry
29
+ : 10;
30
+ const now = new Date().getTime();
31
+ const refreshTime = exp - refreshBeforeSeconds * 1000;
32
+ let timeTillThen = refreshTime - now;
33
+ if (timeTillThen <= 0) {
34
+ timeTillThen = 0;
35
+ }
36
+ setTimeout(async () => {
37
+ try {
38
+ await this.refreshToken();
39
+ this.initAutoRefresh();
40
+ }
41
+ catch (e) {
42
+ console.error(e);
43
+ }
44
+ }, timeTillThen);
45
+ }
46
+ }
47
+ /**
48
+ * Checks that the 'app.at_exp' cookie is present and for a time in the future to determine logged-in state.
49
+ * @return {boolean} app.at_exp is present and not for a time in the past
50
+ */
51
+ isLoggedIn() {
52
+ return (this.getExpTime() ?? 0) > new Date().getTime();
53
+ }
54
+ /**
55
+ * Calls the configured 'refresh' endpoint to attempt to refresh the access token cookie.
56
+ */
57
+ async refreshToken() {
58
+ const path = this.config.tokenRefreshPath
59
+ ? `${this.config.tokenRefreshPath}/${this.config.clientId}`
60
+ : `/app/refresh/${this.config.clientId}`;
61
+ const uri = this.getUrlForPath(path);
62
+ const resp = await fetch(uri.href, {
63
+ method: 'POST',
64
+ credentials: 'include',
65
+ headers: {
66
+ 'Content-Type': 'text/plain',
67
+ },
68
+ });
69
+ if (!(resp.status >= 200 && resp.status < 300)) {
70
+ throw new Error('error refreshing access token in fusionauth');
71
+ }
72
+ }
73
+ /**
74
+ * Invokes a redirect to the configured 'login' endpoint.
75
+ */
76
+ startLogin(state) {
77
+ const path = this.config.loginPath ? this.config.loginPath : '/app/login';
78
+ state
79
+ ? this.doRedirectForPath(path, { state })
80
+ : this.doRedirectForPath(path);
81
+ }
82
+ /**
83
+ * Invokes a redirect to the configured 'refresh' endpoint.
84
+ */
85
+ startRegistration(state) {
86
+ const path = this.config.registerPath
87
+ ? this.config.registerPath
88
+ : '/app/register';
89
+ state
90
+ ? this.doRedirectForPath(path, { state })
91
+ : this.doRedirectForPath(path);
92
+ }
93
+ /**
94
+ * Invokes a redirect to the configured 'logout' endpoint.
95
+ */
96
+ logout() {
97
+ const path = this.config.logoutPath
98
+ ? this.config.logoutPath
99
+ : '/app/logout';
100
+ this.doRedirectForPath(path);
101
+ }
102
+ doRedirectForPath(path, params = {}) {
103
+ path = path + `/${this.config.clientId}`;
104
+ if (this.config.redirectUri) {
105
+ params['redirect_uri'] = this.config.redirectUri;
106
+ }
107
+ const location = this.getUrlForPath(path, params);
108
+ window.location.assign(location);
109
+ }
110
+ getUrlForPath(path, params = {}) {
111
+ const url = new URL(this.config.serverUrl);
112
+ url.pathname = path;
113
+ if (Object.entries(params).length > 0) {
114
+ const urlParams = new URLSearchParams(params);
115
+ url.search = urlParams.toString();
116
+ }
117
+ return url;
118
+ }
119
+ getExpTime() {
120
+ const expCookie = document.cookie
121
+ .split('; ')
122
+ .map(c => c.split('='))
123
+ .find(([name]) => name === 'app.at_exp');
124
+ return expCookie ? parseInt(expCookie?.[1] ?? '0') * 1000 : null;
125
+ }
126
+ }
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzaW9uLWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Z1c2lvbmF1dGgtYW5ndWxhci1zZGsvc3JjL2xpYi9mdXNpb24tYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUFvQixNQUF3QjtRQUF4QixXQUFNLEdBQU4sTUFBTSxDQUFrQjtJQUFHLENBQUM7SUFFaEQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFdBQVc7UUFDZixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNqRSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7WUFDakMsV0FBVyxFQUFFLFNBQVM7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFhLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWU7UUFDYixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyw4QkFBOEI7Z0JBQ3JFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLDhCQUE4QjtnQkFDNUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFD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QyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQztRQUMzQyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25FLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZ1c2lvbkF1dGhDb25maWcsIFVzZXJJbmZvIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogU2VydmljZSBjbGFzcyB0byB1c2Ugd2l0aCBGdXNpb25BdXRoIGJhY2tlbmQgZW5kcG9pbnRzLlxuICovXG5leHBvcnQgY2xhc3MgRnVzaW9uQXV0aFNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogRnVzaW9uQXV0aENvbmZpZykge31cblxuICAvKipcbiAgICogQ2FsbHMgdGhlICdtZScgZW5kcG9pbnQgdG8gcmV0cmlldmUgdXNlciBpbmZvLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJJbmZvPn0gdGhlIHVzZXIgaW5mbyByZXNwb25zZS5cbiAgICovXG4gIGFzeW5jIGdldFVzZXJJbmZvKCk6IFByb21pc2U8VXNlckluZm8+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb25maWcubWVQYXRoID8gdGhpcy5jb25maWcubWVQYXRoIDogJy9hcHAvbWUnO1xuICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0VXJsRm9yUGF0aChwYXRoKTtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2godXJpLmhyZWYsIHtcbiAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgfSk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYXdhaXQgcmVzcC50ZXh0KCkpIGFzIFVzZXJJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBmb3IgdGhlICdhcHAuYXRfZXhwJyBjb29raWUgYW5kIGlmIHByZXNlbnQgc2V0cyBhIHRpbWVyIHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbi5cbiAgICogV2lsbCBhdHRlbXB0IHRvIHJlZnJlc2ggdGhlIGNvbmZpZ3VyZWQgc2Vjb25kcyBiZWZvcmUgdGhlIGFjY2VzcyB0b2tlbiBleHBpcmVzIChkZWZhdWx0IGlzIHRlbiBzZWNvbmRzKS5cbiAgICovXG4gIGluaXRBdXRvUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBjb25zdCBleHAgPSB0aGlzLmdldEV4cFRpbWUoKTtcbiAgICBpZiAoZXhwKSB7XG4gICAgICBjb25zdCByZWZyZXNoQmVmb3JlU2Vjb25kcyA9IHRoaXMuY29uZmlnLmF1dG9SZWZyZXNoU2Vjb25kc0JlZm9yZUV4cGlyeVxuICAgICAgICA/IHRoaXMuY29uZmlnLmF1dG9SZWZyZXNoU2Vjb25kc0JlZm9yZUV4cGlyeVxuICAgICAgICA6IDEwO1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICBjb25zdCByZWZyZXNoVGltZSA9IGV4cCAtIHJlZnJlc2hCZWZvcmVTZWNvbmRzICogMTAwMDtcbiAgICAgIGxldCB0aW1lVGlsbFRoZW4gPSByZWZyZXNoVGltZSAtIG5vdztcbiAgICAgIGlmICh0aW1lVGlsbFRoZW4gPD0gMCkge1xuICAgICAgICB0aW1lVGlsbFRoZW4gPSAwO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgICB0aGlzLmluaXRBdXRvUmVmcmVzaCgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfSwgdGltZVRpbGxUaGVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHRoYXQgdGhlICdhcHAuYXRfZXhwJyBjb29raWUgaXMgcHJlc2VudCBhbmQgZm9yIGEgdGltZSBpbiB0aGUgZnV0dXJlIHRvIGRldGVybWluZSBsb2dnZWQtaW4gc3RhdGUuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IGFwcC5hdF9leHAgaXMgcHJlc2VudCBhbmQgbm90IGZvciBhIHRpbWUgaW4gdGhlIHBhc3RcbiAgICovXG4gIGlzTG9nZ2VkSW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmdldEV4cFRpbWUoKSA/PyAwKSA+IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIHRoZSBjb25maWd1cmVkICdyZWZyZXNoJyBlbmRwb2ludCB0byBhdHRlbXB0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBjb29raWUuXG4gICAqL1xuICBhc3luYyByZWZyZXNoVG9rZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY29uZmlnLnRva2VuUmVmcmVzaFBhdGhcbiAgICAgID8gYCR7dGhpcy5jb25maWcudG9rZW5SZWZyZXNoUGF0aH0vJHt0aGlzLmNvbmZpZy5jbGllbnRJZH1gXG4gICAgICA6IGAvYXBwL3JlZnJlc2gvJHt0aGlzLmNvbmZpZy5jbGllbnRJZH1gO1xuICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0VXJsRm9yUGF0aChwYXRoKTtcbiAgICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2godXJpLmhyZWYsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgaWYgKCEocmVzcC5zdGF0dXMgPj0gMjAwICYmIHJlc3Auc3RhdHVzIDwgMzAwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdlcnJvciByZWZyZXNoaW5nIGFjY2VzcyB0b2tlbiBpbiBmdXNpb25hdXRoJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZXMgYSByZWRpcmVjdCB0byB0aGUgY29uZmlndXJlZCAnbG9naW4nIGVuZHBvaW50LlxuICAgKi9cbiAgc3RhcnRMb2dpbihzdGF0ZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmNvbmZpZy5sb2dpblBhdGggPyB0aGlzLmNvbmZpZy5sb2dpblBhdGggOiAnL2FwcC9sb2dpbic7XG4gICAgc3RhdGVcbiAgICAgID8gdGhpcy5kb1JlZGlyZWN0Rm9yUGF0aChwYXRoLCB7IHN0YXRlIH0pXG4gICAgICA6IHRoaXMuZG9SZWRpcmVjdEZvclBhdGgocGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlcyBhIHJlZGlyZWN0IHRvIHRoZSBjb25maWd1cmVkICdyZWZyZXNoJyBlbmRwb2ludC5cbiAgICovXG4gIHN0YXJ0UmVnaXN0cmF0aW9uKHN0YXRlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY29uZmlnLnJlZ2lzdGVyUGF0aFxuICAgICAgPyB0aGlzLmNvbmZpZy5yZWdpc3RlclBhdGhcbiAgICAgIDogJy9hcHAvcmVnaXN0ZXInO1xuICAgIHN0YXRlXG4gICAgICA/IHRoaXMuZG9SZWRpcmVjdEZvclBhdGgocGF0aCwgeyBzdGF0ZSB9KVxuICAgICAgOiB0aGlzLmRvUmVkaXJlY3RGb3JQYXRoKHBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZXMgYSByZWRpcmVjdCB0byB0aGUgY29uZmlndXJlZCAnbG9nb3V0JyBlbmRwb2ludC5cbiAgICovXG4gIGxvZ291dCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb25maWcubG9nb3V0UGF0aFxuICAgICAgPyB0aGlzLmNvbmZpZy5sb2dvdXRQYXRoXG4gICAgICA6ICcvYXBwL2xvZ291dCc7XG4gICAgdGhpcy5kb1JlZGlyZWN0Rm9yUGF0aChwYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgZG9SZWRpcmVjdEZvclBhdGgocGF0aDogc3RyaW5nLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSkge1xuICAgIHBhdGggPSBwYXRoICsgYC8ke3RoaXMuY29uZmlnLmNsaWVudElkfWA7XG4gICAgaWYgKHRoaXMuY29uZmlnLnJlZGlyZWN0VXJpKSB7XG4gICAgICBwYXJhbXNbJ3JlZGlyZWN0X3VyaSddID0gdGhpcy5jb25maWcucmVkaXJlY3RVcmk7XG4gICAgfVxuICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5nZXRVcmxGb3JQYXRoKHBhdGgsIHBhcmFtcyk7XG4gICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihsb2NhdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGdldFVybEZvclBhdGgocGF0aDogc3RyaW5nLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IFVSTCB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLmNvbmZpZy5zZXJ2ZXJVcmwpO1xuICAgIHVybC5wYXRobmFtZSA9IHBhdGg7XG4gICAgaWYgKE9iamVjdC5lbnRyaWVzKHBhcmFtcykubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXJhbXMpO1xuICAgICAgdXJsLnNlYXJjaCA9IHVybFBhcmFtcy50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHBUaW1lKCk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IGV4cENvb2tpZSA9IGRvY3VtZW50LmNvb2tpZVxuICAgICAgLnNwbGl0KCc7ICcpXG4gICAgICAubWFwKGMgPT4gYy5zcGxpdCgnPScpKVxuICAgICAgLmZpbmQoKFtuYW1lXSkgPT4gbmFtZSA9PT0gJ2FwcC5hdF9leHAnKTtcbiAgICByZXR1cm4gZXhwQ29va2llID8gcGFyc2VJbnQoZXhwQ29va2llPy5bMV0gPz8gJzAnKSAqIDEwMDAgOiBudWxsO1xuICB9XG59XG4iXX0=
@@ -13,9 +13,7 @@ class FusionAuthService {
13
13
  * @return {Promise<UserInfo>} the user info response.
14
14
  */
15
15
  async getUserInfo() {
16
- const path = !!this.config.mePath
17
- ? this.config.mePath
18
- : '/app/me';
16
+ const path = this.config.mePath ? this.config.mePath : '/app/me';
19
17
  const uri = this.getUrlForPath(path);
20
18
  const resp = await fetch(uri.href, {
21
19
  credentials: 'include',
@@ -33,7 +31,7 @@ class FusionAuthService {
33
31
  ? this.config.autoRefreshSecondsBeforeExpiry
34
32
  : 10;
35
33
  const now = new Date().getTime();
36
- const refreshTime = exp - (refreshBeforeSeconds * 1000);
34
+ const refreshTime = exp - refreshBeforeSeconds * 1000;
37
35
  let timeTillThen = refreshTime - now;
38
36
  if (timeTillThen <= 0) {
39
37
  timeTillThen = 0;
@@ -60,7 +58,7 @@ class FusionAuthService {
60
58
  * Calls the configured 'refresh' endpoint to attempt to refresh the access token cookie.
61
59
  */
62
60
  async refreshToken() {
63
- const path = !!this.config.tokenRefreshPath
61
+ const path = this.config.tokenRefreshPath
64
62
  ? `${this.config.tokenRefreshPath}/${this.config.clientId}`
65
63
  : `/app/refresh/${this.config.clientId}`;
66
64
  const uri = this.getUrlForPath(path);
@@ -69,7 +67,7 @@ class FusionAuthService {
69
67
  credentials: 'include',
70
68
  headers: {
71
69
  'Content-Type': 'text/plain',
72
- }
70
+ },
73
71
  });
74
72
  if (!(resp.status >= 200 && resp.status < 300)) {
75
73
  throw new Error('error refreshing access token in fusionauth');
@@ -79,25 +77,27 @@ class FusionAuthService {
79
77
  * Invokes a redirect to the configured 'login' endpoint.
80
78
  */
81
79
  startLogin(state) {
82
- const path = !!this.config.loginPath
83
- ? this.config.loginPath
84
- : '/app/login';
85
- !!state ? this.doRedirectForPath(path, { state }) : this.doRedirectForPath(path);
80
+ const path = this.config.loginPath ? this.config.loginPath : '/app/login';
81
+ state
82
+ ? this.doRedirectForPath(path, { state })
83
+ : this.doRedirectForPath(path);
86
84
  }
87
85
  /**
88
86
  * Invokes a redirect to the configured 'refresh' endpoint.
89
87
  */
90
88
  startRegistration(state) {
91
- const path = !!this.config.registerPath
89
+ const path = this.config.registerPath
92
90
  ? this.config.registerPath
93
91
  : '/app/register';
94
- !!state ? this.doRedirectForPath(path, { state }) : this.doRedirectForPath(path);
92
+ state
93
+ ? this.doRedirectForPath(path, { state })
94
+ : this.doRedirectForPath(path);
95
95
  }
96
96
  /**
97
97
  * Invokes a redirect to the configured 'logout' endpoint.
98
98
  */
99
99
  logout() {
100
- const path = !!this.config.logoutPath
100
+ const path = this.config.logoutPath
101
101
  ? this.config.logoutPath
102
102
  : '/app/logout';
103
103
  this.doRedirectForPath(path);
@@ -107,11 +107,11 @@ class FusionAuthService {
107
107
  if (this.config.redirectUri) {
108
108
  params['redirect_uri'] = this.config.redirectUri;
109
109
  }
110
- let location = this.getUrlForPath(path, params);
110
+ const location = this.getUrlForPath(path, params);
111
111
  window.location.assign(location);
112
112
  }
113
113
  getUrlForPath(path, params = {}) {
114
- let url = new URL(this.config.serverUrl);
114
+ const url = new URL(this.config.serverUrl);
115
115
  url.pathname = path;
116
116
  if (Object.entries(params).length > 0) {
117
117
  const urlParams = new URLSearchParams(params);
@@ -120,10 +120,11 @@ class FusionAuthService {
120
120
  return url;
121
121
  }
122
122
  getExpTime() {
123
- const expCookie = document.cookie.split('; ')
123
+ const expCookie = document.cookie
124
+ .split('; ')
124
125
  .map(c => c.split('='))
125
126
  .find(([name]) => name === 'app.at_exp');
126
- return expCookie ? parseInt(expCookie[1]) * 1000 : null;
127
+ return expCookie ? parseInt(expCookie?.[1] ?? '0') * 1000 : null;
127
128
  }
128
129
  }
129
130
 
@@ -134,13 +135,13 @@ class FusionAuthLoginButtonComponent {
134
135
  login() {
135
136
  this.fusionAuth.startLogin(this.state);
136
137
  }
138
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthLoginButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
139
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: FusionAuthLoginButtonComponent, selector: "fa-login", inputs: { state: "state" }, ngImport: i0, template: "<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }); }
137
140
  }
138
- FusionAuthLoginButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthLoginButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component });
139
- FusionAuthLoginButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FusionAuthLoginButtonComponent, selector: "fa-login", inputs: { state: "state" }, ngImport: i0, template: "<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] });
140
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthLoginButtonComponent, decorators: [{
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthLoginButtonComponent, decorators: [{
141
142
  type: Component,
142
143
  args: [{ selector: 'fa-login', template: "<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }]
143
- }], ctorParameters: function () { return [{ type: FusionAuthService }]; }, propDecorators: { state: [{
144
+ }], ctorParameters: () => [{ type: FusionAuthService }], propDecorators: { state: [{
144
145
  type: Input
145
146
  }] } });
146
147
 
@@ -151,13 +152,13 @@ class FusionAuthLogoutButtonComponent {
151
152
  logout() {
152
153
  this.fusionAuth.logout();
153
154
  }
155
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthLogoutButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
156
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: FusionAuthLogoutButtonComponent, selector: "fa-logout", ngImport: i0, template: "<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n", styles: [".fa-logout-button{padding:7px 13px;border-radius:3px;display:block;border:solid 1px #083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:12px;text-align:center;color:#083b94}.fa-logout-button:hover{cursor:pointer}\n"] }); }
154
157
  }
155
- FusionAuthLogoutButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthLogoutButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component });
156
- FusionAuthLogoutButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FusionAuthLogoutButtonComponent, selector: "fa-logout", ngImport: i0, template: "<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n", styles: [".fa-logout-button{padding:7px 13px;border-radius:3px;display:block;border:solid 1px #083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:12px;text-align:center;color:#083b94}.fa-logout-button:hover{cursor:pointer}\n"] });
157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthLogoutButtonComponent, decorators: [{
158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthLogoutButtonComponent, decorators: [{
158
159
  type: Component,
159
160
  args: [{ selector: 'fa-logout', template: "<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n", styles: [".fa-logout-button{padding:7px 13px;border-radius:3px;display:block;border:solid 1px #083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:12px;text-align:center;color:#083b94}.fa-logout-button:hover{cursor:pointer}\n"] }]
160
- }], ctorParameters: function () { return [{ type: FusionAuthService }]; } });
161
+ }], ctorParameters: () => [{ type: FusionAuthService }] });
161
162
 
162
163
  class FusionAuthRegisterButtonComponent {
163
164
  constructor(fusionAuth) {
@@ -166,13 +167,13 @@ class FusionAuthRegisterButtonComponent {
166
167
  register() {
167
168
  this.fusionAuth.startRegistration(this.state);
168
169
  }
170
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthRegisterButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component }); }
171
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: FusionAuthRegisterButtonComponent, selector: "fa-register", inputs: { state: "state" }, ngImport: i0, template: "<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }); }
169
172
  }
170
- FusionAuthRegisterButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthRegisterButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component });
171
- FusionAuthRegisterButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FusionAuthRegisterButtonComponent, selector: "fa-register", inputs: { state: "state" }, ngImport: i0, template: "<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] });
172
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthRegisterButtonComponent, decorators: [{
173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthRegisterButtonComponent, decorators: [{
173
174
  type: Component,
174
175
  args: [{ selector: 'fa-register', template: "<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }]
175
- }], ctorParameters: function () { return [{ type: FusionAuthService }]; }, propDecorators: { state: [{
176
+ }], ctorParameters: () => [{ type: FusionAuthService }], propDecorators: { state: [{
176
177
  type: Input
177
178
  }] } });
178
179
 
@@ -181,19 +182,22 @@ class FusionAuthModule {
181
182
  return {
182
183
  ngModule: FusionAuthModule,
183
184
  providers: [
184
- { provide: FusionAuthService, useValue: new FusionAuthService(fusionAuthConfig) }
185
+ {
186
+ provide: FusionAuthService,
187
+ useValue: new FusionAuthService(fusionAuthConfig),
188
+ },
185
189
  ],
186
190
  };
187
191
  }
192
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
193
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthModule, declarations: [FusionAuthLoginButtonComponent,
194
+ FusionAuthLogoutButtonComponent,
195
+ FusionAuthRegisterButtonComponent], exports: [FusionAuthLoginButtonComponent,
196
+ FusionAuthLogoutButtonComponent,
197
+ FusionAuthRegisterButtonComponent] }); }
198
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthModule }); }
188
199
  }
189
- FusionAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
190
- FusionAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthModule, declarations: [FusionAuthLoginButtonComponent,
191
- FusionAuthLogoutButtonComponent,
192
- FusionAuthRegisterButtonComponent], exports: [FusionAuthLoginButtonComponent,
193
- FusionAuthLogoutButtonComponent,
194
- FusionAuthRegisterButtonComponent] });
195
- FusionAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthModule, imports: [[]] });
196
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthModule, decorators: [{
200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FusionAuthModule, decorators: [{
197
201
  type: NgModule,
198
202
  args: [{
199
203
  declarations: [
@@ -206,7 +210,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
206
210
  FusionAuthLoginButtonComponent,
207
211
  FusionAuthLogoutButtonComponent,
208
212
  FusionAuthRegisterButtonComponent,
209
- ]
213
+ ],
210
214
  }]
211
215
  }] });
212
216
 
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fusionauth-angular-sdk.mjs","sources":["../../../projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/fusion-auth.module.ts","../../../projects/fusionauth-angular-sdk/src/public-api.ts","../../../projects/fusionauth-angular-sdk/src/fusionauth-angular-sdk.ts"],"sourcesContent":["import { FusionAuthConfig, UserInfo } from './types';\n\n/**\n * Service class to use with FusionAuth backend endpoints.\n */\nexport class FusionAuthService {\n constructor(private config: FusionAuthConfig) {}\n\n /**\n * Calls the 'me' endpoint to retrieve user info.\n * @return {Promise<UserInfo>} the user info response.\n */\n async getUserInfo(): Promise<UserInfo> {\n const path = this.config.mePath ? this.config.mePath : '/app/me';\n const uri = this.getUrlForPath(path);\n const resp = await fetch(uri.href, {\n credentials: 'include',\n });\n return JSON.parse(await resp.text()) as UserInfo;\n }\n\n /**\n * Checks for the 'app.at_exp' cookie and if present sets a timer to refresh the access token.\n * Will attempt to refresh the configured seconds before the access token expires (default is ten seconds).\n */\n initAutoRefresh(): void {\n const exp = this.getExpTime();\n if (exp) {\n const refreshBeforeSeconds = this.config.autoRefreshSecondsBeforeExpiry\n ? this.config.autoRefreshSecondsBeforeExpiry\n : 10;\n const now = new Date().getTime();\n const refreshTime = exp - refreshBeforeSeconds * 1000;\n let timeTillThen = refreshTime - now;\n if (timeTillThen <= 0) {\n timeTillThen = 0;\n }\n setTimeout(async () => {\n try {\n await this.refreshToken();\n this.initAutoRefresh();\n } catch (e) {\n console.error(e);\n }\n }, timeTillThen);\n }\n }\n\n /**\n * Checks that the 'app.at_exp' cookie is present and for a time in the future to determine logged-in state.\n * @return {boolean} app.at_exp is present and not for a time in the past\n */\n isLoggedIn(): boolean {\n return (this.getExpTime() ?? 0) > new Date().getTime();\n }\n\n /**\n * Calls the configured 'refresh' endpoint to attempt to refresh the access token cookie.\n */\n async refreshToken(): Promise<void> {\n const path = this.config.tokenRefreshPath\n ? `${this.config.tokenRefreshPath}/${this.config.clientId}`\n : `/app/refresh/${this.config.clientId}`;\n const uri = this.getUrlForPath(path);\n const resp = await fetch(uri.href, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'text/plain',\n },\n });\n if (!(resp.status >= 200 && resp.status < 300)) {\n throw new Error('error refreshing access token in fusionauth');\n }\n }\n\n /**\n * Invokes a redirect to the configured 'login' endpoint.\n */\n startLogin(state?: string): void {\n const path = this.config.loginPath ? this.config.loginPath : '/app/login';\n state\n ? this.doRedirectForPath(path, { state })\n : this.doRedirectForPath(path);\n }\n\n /**\n * Invokes a redirect to the configured 'refresh' endpoint.\n */\n startRegistration(state?: string): void {\n const path = this.config.registerPath\n ? this.config.registerPath\n : '/app/register';\n state\n ? this.doRedirectForPath(path, { state })\n : this.doRedirectForPath(path);\n }\n\n /**\n * Invokes a redirect to the configured 'logout' endpoint.\n */\n logout(): void {\n const path = this.config.logoutPath\n ? this.config.logoutPath\n : '/app/logout';\n this.doRedirectForPath(path);\n }\n\n private doRedirectForPath(path: string, params: Record<string, any> = {}) {\n path = path + `/${this.config.clientId}`;\n if (this.config.redirectUri) {\n params['redirect_uri'] = this.config.redirectUri;\n }\n const location = this.getUrlForPath(path, params);\n window.location.assign(location);\n }\n\n private getUrlForPath(path: string, params: Record<string, any> = {}): URL {\n const url = new URL(this.config.serverUrl);\n url.pathname = path;\n if (Object.entries(params).length > 0) {\n const urlParams = new URLSearchParams(params);\n url.search = urlParams.toString();\n }\n return url;\n }\n\n private getExpTime(): number | null {\n const expCookie = document.cookie\n .split('; ')\n .map(c => c.split('='))\n .find(([name]) => name === 'app.at_exp');\n return expCookie ? parseInt(expCookie?.[1] ?? '0') * 1000 : null;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n selector: 'fa-login',\n templateUrl: './fusion-auth-login-button.component.html',\n styleUrls: ['./fusion-auth-login-button.component.scss'],\n})\nexport class FusionAuthLoginButtonComponent {\n @Input() state: string | undefined;\n\n constructor(private fusionAuth: FusionAuthService) {}\n\n login() {\n this.fusionAuth.startLogin(this.state);\n }\n}\n","<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n","import { Component } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n selector: 'fa-logout',\n templateUrl: './fusion-auth-logout-button.component.html',\n styleUrls: ['./fusion-auth-logout-button.component.scss'],\n})\nexport class FusionAuthLogoutButtonComponent {\n constructor(private fusionAuth: FusionAuthService) {}\n\n logout() {\n this.fusionAuth.logout();\n }\n}\n","<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n","import { Component, Input } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n selector: 'fa-register',\n templateUrl: './fusion-auth-register-button.component.html',\n styleUrls: ['./fusion-auth-register-button.component.scss'],\n})\nexport class FusionAuthRegisterButtonComponent {\n @Input() state: string | undefined;\n\n constructor(private fusionAuth: FusionAuthService) {}\n\n register() {\n this.fusionAuth.startRegistration(this.state);\n }\n}\n","<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FusionAuthConfig } from './types';\nimport { FusionAuthService } from './fusion-auth.service';\nimport { FusionAuthLoginButtonComponent } from './components/fusionauth-login.button/fusion-auth-login-button.component';\nimport { FusionAuthLogoutButtonComponent } from './components/fusionauth-logout.button/fusion-auth-logout-button.component';\nimport { FusionAuthRegisterButtonComponent } from './components/fusionauth-register.button/fusion-auth-register-button.component';\n\n@NgModule({\n declarations: [\n FusionAuthLoginButtonComponent,\n FusionAuthLogoutButtonComponent,\n FusionAuthRegisterButtonComponent,\n ],\n imports: [],\n exports: [\n FusionAuthLoginButtonComponent,\n FusionAuthLogoutButtonComponent,\n FusionAuthRegisterButtonComponent,\n ],\n})\nexport class FusionAuthModule {\n static forRoot(\n fusionAuthConfig: FusionAuthConfig,\n ): ModuleWithProviders<FusionAuthModule> {\n return {\n ngModule: FusionAuthModule,\n providers: [\n {\n provide: FusionAuthService,\n useValue: new FusionAuthService(fusionAuthConfig),\n },\n ],\n };\n }\n}\n","/*\n * Public API Surface of fusionauth-angular-sdk\n */\n\nexport * from './lib/fusion-auth.service';\nexport * from './lib/components/fusionauth-login.button/fusion-auth-login-button.component';\nexport * from './lib/components/fusionauth-logout.button/fusion-auth-logout-button.component';\nexport * from './lib/components/fusionauth-register.button/fusion-auth-register-button.component';\nexport * from './lib/fusion-auth.module';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FusionAuthService"],"mappings":"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"}
@@ -6,5 +6,5 @@ export declare class FusionAuthLoginButtonComponent {
6
6
  constructor(fusionAuth: FusionAuthService);
7
7
  login(): void;
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<FusionAuthLoginButtonComponent, never>;
9
- static ɵcmp: i0.ɵɵComponentDeclaration<FusionAuthLoginButtonComponent, "fa-login", never, { "state": "state"; }, {}, never, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<FusionAuthLoginButtonComponent, "fa-login", never, { "state": { "alias": "state"; "required": false; }; }, {}, never, never, false, never>;
10
10
  }
@@ -5,5 +5,5 @@ export declare class FusionAuthLogoutButtonComponent {
5
5
  constructor(fusionAuth: FusionAuthService);
6
6
  logout(): void;
7
7
  static ɵfac: i0.ɵɵFactoryDeclaration<FusionAuthLogoutButtonComponent, never>;
8
- static ɵcmp: i0.ɵɵComponentDeclaration<FusionAuthLogoutButtonComponent, "fa-logout", never, {}, {}, never, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<FusionAuthLogoutButtonComponent, "fa-logout", never, {}, {}, never, never, false, never>;
9
9
  }
@@ -6,5 +6,5 @@ export declare class FusionAuthRegisterButtonComponent {
6
6
  constructor(fusionAuth: FusionAuthService);
7
7
  register(): void;
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<FusionAuthRegisterButtonComponent, never>;
9
- static ɵcmp: i0.ɵɵComponentDeclaration<FusionAuthRegisterButtonComponent, "fa-register", never, { "state": "state"; }, {}, never, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<FusionAuthRegisterButtonComponent, "fa-register", never, { "state": { "alias": "state"; "required": false; }; }, {}, never, never, false, never>;
10
10
  }
package/package.json CHANGED
@@ -1,37 +1,25 @@
1
1
  {
2
2
  "name": "@fusionauth/angular-sdk",
3
- "version": "0.1.4",
4
- "private": false,
3
+ "version": "0.1.7",
5
4
  "peerDependencies": {
6
- "@angular/common": ">=13.0.0",
7
- "@angular/core": ">=13.0.0"
5
+ "@angular/common": "^17.2.0",
6
+ "@angular/core": "^17.2.0"
8
7
  },
9
8
  "dependencies": {
10
9
  "tslib": "^2.3.0"
11
10
  },
12
- "publishConfig": {
13
- "access": "public"
14
- },
15
- "repository": "git@github.com:FusionAuth/fusionauth-angular-sdk.git",
16
- "readme": "",
17
- "module": "fesm2015/fusionauth-angular-sdk.mjs",
18
- "es2020": "fesm2020/fusionauth-angular-sdk.mjs",
19
- "esm2020": "esm2020/fusionauth-angular-sdk.mjs",
20
- "fesm2020": "fesm2020/fusionauth-angular-sdk.mjs",
21
- "fesm2015": "fesm2015/fusionauth-angular-sdk.mjs",
22
- "typings": "fusionauth-angular-sdk.d.ts",
11
+ "sideEffects": false,
12
+ "module": "fesm2022/fusionauth-angular-sdk.mjs",
13
+ "typings": "index.d.ts",
23
14
  "exports": {
24
15
  "./package.json": {
25
16
  "default": "./package.json"
26
17
  },
27
18
  ".": {
28
- "types": "./fusionauth-angular-sdk.d.ts",
29
- "esm2020": "./esm2020/fusionauth-angular-sdk.mjs",
30
- "es2020": "./fesm2020/fusionauth-angular-sdk.mjs",
31
- "es2015": "./fesm2015/fusionauth-angular-sdk.mjs",
32
- "node": "./fesm2015/fusionauth-angular-sdk.mjs",
33
- "default": "./fesm2020/fusionauth-angular-sdk.mjs"
19
+ "types": "./index.d.ts",
20
+ "esm2022": "./esm2022/fusionauth-angular-sdk.mjs",
21
+ "esm": "./esm2022/fusionauth-angular-sdk.mjs",
22
+ "default": "./fesm2022/fusionauth-angular-sdk.mjs"
34
23
  }
35
- },
36
- "sideEffects": false
24
+ }
37
25
  }
@@ -1,18 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../fusion-auth.service";
4
- export class FusionAuthLogoutButtonComponent {
5
- constructor(fusionAuth) {
6
- this.fusionAuth = fusionAuth;
7
- }
8
- logout() {
9
- this.fusionAuth.logout();
10
- }
11
- }
12
- FusionAuthLogoutButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthLogoutButtonComponent, deps: [{ token: i1.FusionAuthService }], target: i0.ɵɵFactoryTarget.Component });
13
- FusionAuthLogoutButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FusionAuthLogoutButtonComponent, selector: "fa-logout", ngImport: i0, template: "<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n", styles: [".fa-logout-button{padding:7px 13px;border-radius:3px;display:block;border:solid 1px #083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:12px;text-align:center;color:#083b94}.fa-logout-button:hover{cursor:pointer}\n"] });
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthLogoutButtonComponent, decorators: [{
15
- type: Component,
16
- args: [{ selector: 'fa-logout', template: "<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n", styles: [".fa-logout-button{padding:7px 13px;border-radius:3px;display:block;border:solid 1px #083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:12px;text-align:center;color:#083b94}.fa-logout-button:hover{cursor:pointer}\n"] }]
17
- }], ctorParameters: function () { return [{ type: i1.FusionAuthService }]; } });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzaW9uLWF1dGgtbG9nb3V0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mdXNpb25hdXRoLWFuZ3VsYXItc2RrL3NyYy9saWIvY29tcG9uZW50cy9mdXNpb25hdXRoLWxvZ291dC5idXR0b24vZnVzaW9uLWF1dGgtbG9nb3V0LWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mdXNpb25hdXRoLWFuZ3VsYXItc2RrL3NyYy9saWIvY29tcG9uZW50cy9mdXNpb25hdXRoLWxvZ291dC5idXR0b24vZnVzaW9uLWF1dGgtbG9nb3V0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFRMUMsTUFBTSxPQUFPLCtCQUErQjtJQUMxQyxZQUNVLFVBQTZCO1FBQTdCLGVBQVUsR0FBVixVQUFVLENBQW1CO0lBQ3BDLENBQUM7SUFFSixNQUFNO1FBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQixDQUFDOzs2SEFQVSwrQkFBK0I7aUhBQS9CLCtCQUErQixpRENSNUMsOEZBR0E7NEZES2EsK0JBQStCO2tCQUwzQyxTQUFTOytCQUNFLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZ1c2lvbkF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZnVzaW9uLWF1dGguc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZhLWxvZ291dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9mdXNpb24tYXV0aC1sb2dvdXQtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZnVzaW9uLWF1dGgtbG9nb3V0LWJ1dHRvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZ1c2lvbkF1dGhMb2dvdXRCdXR0b25Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZ1c2lvbkF1dGg6IEZ1c2lvbkF1dGhTZXJ2aWNlLFxuICApIHt9XG5cbiAgbG9nb3V0KCkge1xuICAgIHRoaXMuZnVzaW9uQXV0aC5sb2dvdXQoKTtcbiAgfVxufVxuIiwiPGJ1dHRvbiBjbGFzcz1cImZhLWxvZ291dC1idXR0b25cIiAoY2xpY2spPVwibG9nb3V0KClcIj5cbiAgPHNwYW4+bG9nb3V0PC9zcGFuPlxuPC9idXR0b24+XG4iXX0=
@@ -1,20 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../fusion-auth.service";
4
- export class FusionAuthRegisterButtonComponent {
5
- constructor(fusionAuth) {
6
- this.fusionAuth = fusionAuth;
7
- }
8
- register() {
9
- this.fusionAuth.startRegistration(this.state);
10
- }
11
- }
12
- FusionAuthRegisterButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthRegisterButtonComponent, deps: [{ token: i1.FusionAuthService }], target: i0.ɵɵFactoryTarget.Component });
13
- FusionAuthRegisterButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FusionAuthRegisterButtonComponent, selector: "fa-register", inputs: { state: "state" }, ngImport: i0, template: "<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] });
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthRegisterButtonComponent, decorators: [{
15
- type: Component,
16
- args: [{ selector: 'fa-register', template: "<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }]
17
- }], ctorParameters: function () { return [{ type: i1.FusionAuthService }]; }, propDecorators: { state: [{
18
- type: Input
19
- }] } });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzaW9uLWF1dGgtcmVnaXN0ZXItYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Z1c2lvbmF1dGgtYW5ndWxhci1zZGsvc3JjL2xpYi9jb21wb25lbnRzL2Z1c2lvbmF1dGgtcmVnaXN0ZXIuYnV0dG9uL2Z1c2lvbi1hdXRoLXJlZ2lzdGVyLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mdXNpb25hdXRoLWFuZ3VsYXItc2RrL3NyYy9saWIvY29tcG9uZW50cy9mdXNpb25hdXRoLXJlZ2lzdGVyLmJ1dHRvbi9mdXNpb24tYXV0aC1yZWdpc3Rlci1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVFqRCxNQUFNLE9BQU8saUNBQWlDO0lBRzVDLFlBQ1UsVUFBNkI7UUFBN0IsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7SUFDcEMsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDOzsrSEFUVSxpQ0FBaUM7bUhBQWpDLGlDQUFpQywrRUNSOUMsK0ZBR0E7NEZES2EsaUNBQWlDO2tCQUw3QyxTQUFTOytCQUNFLGFBQWE7d0dBS2QsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRnVzaW9uQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9mdXNpb24tYXV0aC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZmEtcmVnaXN0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZnVzaW9uLWF1dGgtcmVnaXN0ZXItYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZnVzaW9uLWF1dGgtcmVnaXN0ZXItYnV0dG9uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRnVzaW9uQXV0aFJlZ2lzdGVyQnV0dG9uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgc3RhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZ1c2lvbkF1dGg6IEZ1c2lvbkF1dGhTZXJ2aWNlLFxuICApIHt9XG5cbiAgcmVnaXN0ZXIoKSB7XG4gICAgdGhpcy5mdXNpb25BdXRoLnN0YXJ0UmVnaXN0cmF0aW9uKHRoaXMuc3RhdGUpO1xuICB9XG59XG4iLCI8YnV0dG9uIGNsYXNzPVwiZmEtYnV0dG9uXCIgKGNsaWNrKT1cInJlZ2lzdGVyKClcIj5cbiAgPHNwYW4+UmVnaXN0ZXIgTm93PC9zcGFuPlxuPC9idXR0b24+XG4iXX0=
@@ -1,40 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { FusionAuthService } from './fusion-auth.service';
3
- import { FusionAuthLoginButtonComponent } from './components/fusionauth-login.button/fusion-auth-login-button.component';
4
- import { FusionAuthLogoutButtonComponent } from './components/fusionauth-logout.button/fusion-auth-logout-button.component';
5
- import { FusionAuthRegisterButtonComponent } from './components/fusionauth-register.button/fusion-auth-register-button.component';
6
- import * as i0 from "@angular/core";
7
- export class FusionAuthModule {
8
- static forRoot(fusionAuthConfig) {
9
- return {
10
- ngModule: FusionAuthModule,
11
- providers: [
12
- { provide: FusionAuthService, useValue: new FusionAuthService(fusionAuthConfig) }
13
- ],
14
- };
15
- }
16
- }
17
- FusionAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18
- FusionAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthModule, declarations: [FusionAuthLoginButtonComponent,
19
- FusionAuthLogoutButtonComponent,
20
- FusionAuthRegisterButtonComponent], exports: [FusionAuthLoginButtonComponent,
21
- FusionAuthLogoutButtonComponent,
22
- FusionAuthRegisterButtonComponent] });
23
- FusionAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthModule, imports: [[]] });
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthModule, decorators: [{
25
- type: NgModule,
26
- args: [{
27
- declarations: [
28
- FusionAuthLoginButtonComponent,
29
- FusionAuthLogoutButtonComponent,
30
- FusionAuthRegisterButtonComponent,
31
- ],
32
- imports: [],
33
- exports: [
34
- FusionAuthLoginButtonComponent,
35
- FusionAuthLogoutButtonComponent,
36
- FusionAuthRegisterButtonComponent,
37
- ]
38
- }]
39
- }] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzaW9uLWF1dGgubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZnVzaW9uYXV0aC1hbmd1bGFyLXNkay9zcmMvbGliL2Z1c2lvbi1hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUN6SCxPQUFPLEVBQ0wsK0JBQStCLEVBQ2hDLE1BQU0sMkVBQTJFLENBQUM7QUFDbkYsT0FBTyxFQUNMLGlDQUFpQyxFQUNsQyxNQUFNLCtFQUErRSxDQUFDOztBQWdCdkYsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFrQztRQUMvQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLElBQUksaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsRUFBRTthQUNsRjtTQUNGLENBQUE7SUFDSCxDQUFDOzs4R0FSVSxnQkFBZ0I7K0dBQWhCLGdCQUFnQixpQkFaekIsOEJBQThCO1FBQzlCLCtCQUErQjtRQUMvQixpQ0FBaUMsYUFLakMsOEJBQThCO1FBQzlCLCtCQUErQjtRQUMvQixpQ0FBaUM7K0dBR3hCLGdCQUFnQixZQVJsQixFQUNSOzRGQU9VLGdCQUFnQjtrQkFkNUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osOEJBQThCO3dCQUM5QiwrQkFBK0I7d0JBQy9CLGlDQUFpQztxQkFDbEM7b0JBQ0QsT0FBTyxFQUFFLEVBQ1I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLDhCQUE4Qjt3QkFDOUIsK0JBQStCO3dCQUMvQixpQ0FBaUM7cUJBQ2xDO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRnVzaW9uQXV0aENvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgRnVzaW9uQXV0aFNlcnZpY2UgfSBmcm9tICcuL2Z1c2lvbi1hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRnVzaW9uQXV0aExvZ2luQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Z1c2lvbmF1dGgtbG9naW4uYnV0dG9uL2Z1c2lvbi1hdXRoLWxvZ2luLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRnVzaW9uQXV0aExvZ291dEJ1dHRvbkNvbXBvbmVudFxufSBmcm9tICcuL2NvbXBvbmVudHMvZnVzaW9uYXV0aC1sb2dvdXQuYnV0dG9uL2Z1c2lvbi1hdXRoLWxvZ291dC1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEZ1c2lvbkF1dGhSZWdpc3RlckJ1dHRvbkNvbXBvbmVudFxufSBmcm9tICcuL2NvbXBvbmVudHMvZnVzaW9uYXV0aC1yZWdpc3Rlci5idXR0b24vZnVzaW9uLWF1dGgtcmVnaXN0ZXItYnV0dG9uLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEZ1c2lvbkF1dGhMb2dpbkJ1dHRvbkNvbXBvbmVudCxcbiAgICBGdXNpb25BdXRoTG9nb3V0QnV0dG9uQ29tcG9uZW50LFxuICAgIEZ1c2lvbkF1dGhSZWdpc3RlckJ1dHRvbkNvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICBdLFxuICBleHBvcnRzOiBbXG4gICAgRnVzaW9uQXV0aExvZ2luQnV0dG9uQ29tcG9uZW50LFxuICAgIEZ1c2lvbkF1dGhMb2dvdXRCdXR0b25Db21wb25lbnQsXG4gICAgRnVzaW9uQXV0aFJlZ2lzdGVyQnV0dG9uQ29tcG9uZW50LFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZ1c2lvbkF1dGhNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChmdXNpb25BdXRoQ29uZmlnOiBGdXNpb25BdXRoQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxGdXNpb25BdXRoTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBGdXNpb25BdXRoTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogRnVzaW9uQXV0aFNlcnZpY2UsIHVzZVZhbHVlOiBuZXcgRnVzaW9uQXV0aFNlcnZpY2UoZnVzaW9uQXV0aENvbmZpZykgfVxuICAgICAgXSxcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,126 +0,0 @@
1
- /**
2
- * Service class to use with FusionAuth backend endpoints.
3
- */
4
- export class FusionAuthService {
5
- constructor(config) {
6
- this.config = config;
7
- }
8
- /**
9
- * Calls the 'me' endpoint to retrieve user info.
10
- * @return {Promise<UserInfo>} the user info response.
11
- */
12
- async getUserInfo() {
13
- const path = !!this.config.mePath
14
- ? this.config.mePath
15
- : '/app/me';
16
- const uri = this.getUrlForPath(path);
17
- const resp = await fetch(uri.href, {
18
- credentials: 'include',
19
- });
20
- return JSON.parse(await resp.text());
21
- }
22
- /**
23
- * Checks for the 'app.at_exp' cookie and if present sets a timer to refresh the access token.
24
- * Will attempt to refresh the configured seconds before the access token expires (default is ten seconds).
25
- */
26
- initAutoRefresh() {
27
- const exp = this.getExpTime();
28
- if (exp) {
29
- const refreshBeforeSeconds = this.config.autoRefreshSecondsBeforeExpiry
30
- ? this.config.autoRefreshSecondsBeforeExpiry
31
- : 10;
32
- const now = new Date().getTime();
33
- const refreshTime = exp - (refreshBeforeSeconds * 1000);
34
- let timeTillThen = refreshTime - now;
35
- if (timeTillThen <= 0) {
36
- timeTillThen = 0;
37
- }
38
- setTimeout(async () => {
39
- try {
40
- await this.refreshToken();
41
- this.initAutoRefresh();
42
- }
43
- catch (e) {
44
- console.error(e);
45
- }
46
- }, timeTillThen);
47
- }
48
- }
49
- /**
50
- * Checks that the 'app.at_exp' cookie is present and for a time in the future to determine logged-in state.
51
- * @return {boolean} app.at_exp is present and not for a time in the past
52
- */
53
- isLoggedIn() {
54
- return (this.getExpTime() ?? 0) > new Date().getTime();
55
- }
56
- /**
57
- * Calls the configured 'refresh' endpoint to attempt to refresh the access token cookie.
58
- */
59
- async refreshToken() {
60
- const path = !!this.config.tokenRefreshPath
61
- ? `${this.config.tokenRefreshPath}/${this.config.clientId}`
62
- : `/app/refresh/${this.config.clientId}`;
63
- const uri = this.getUrlForPath(path);
64
- const resp = await fetch(uri.href, {
65
- method: 'POST',
66
- credentials: 'include',
67
- headers: {
68
- 'Content-Type': 'text/plain',
69
- }
70
- });
71
- if (!(resp.status >= 200 && resp.status < 300)) {
72
- throw new Error('error refreshing access token in fusionauth');
73
- }
74
- }
75
- /**
76
- * Invokes a redirect to the configured 'login' endpoint.
77
- */
78
- startLogin(state) {
79
- const path = !!this.config.loginPath
80
- ? this.config.loginPath
81
- : '/app/login';
82
- !!state ? this.doRedirectForPath(path, { state }) : this.doRedirectForPath(path);
83
- }
84
- /**
85
- * Invokes a redirect to the configured 'refresh' endpoint.
86
- */
87
- startRegistration(state) {
88
- const path = !!this.config.registerPath
89
- ? this.config.registerPath
90
- : '/app/register';
91
- !!state ? this.doRedirectForPath(path, { state }) : this.doRedirectForPath(path);
92
- }
93
- /**
94
- * Invokes a redirect to the configured 'logout' endpoint.
95
- */
96
- logout() {
97
- const path = !!this.config.logoutPath
98
- ? this.config.logoutPath
99
- : '/app/logout';
100
- this.doRedirectForPath(path);
101
- }
102
- doRedirectForPath(path, params = {}) {
103
- path = path + `/${this.config.clientId}`;
104
- if (this.config.redirectUri) {
105
- params['redirect_uri'] = this.config.redirectUri;
106
- }
107
- let location = this.getUrlForPath(path, params);
108
- window.location.assign(location);
109
- }
110
- getUrlForPath(path, params = {}) {
111
- let url = new URL(this.config.serverUrl);
112
- url.pathname = path;
113
- if (Object.entries(params).length > 0) {
114
- const urlParams = new URLSearchParams(params);
115
- url.search = urlParams.toString();
116
- }
117
- return url;
118
- }
119
- getExpTime() {
120
- const expCookie = document.cookie.split('; ')
121
- .map(c => c.split('='))
122
- .find(([name]) => name === 'app.at_exp');
123
- return expCookie ? parseInt(expCookie[1]) * 1000 : null;
124
- }
125
- }
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzaW9uLWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Z1c2lvbmF1dGgtYW5ndWxhci1zZGsvc3JjL2xpYi9mdXNpb24tYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUU1QixZQUNVLE1BQXdCO1FBQXhCLFdBQU0sR0FBTixNQUFNLENBQWtCO0lBQzlCLENBQUM7SUFFTDs7O09BR0c7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNmLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUNwQixDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQ2pDLFdBQVcsRUFBRSxTQUFTO1NBQ3ZCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBYSxDQUFDO0lBQ25ELENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlO1FBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlCLElBQUksR0FBRyxFQUFFO1lBQ1AsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLDhCQUE4QjtnQkFDckUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsOEJBQThCO2dCQUM1QyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FB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QyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLENBQUM7UUFDM0MsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGdXNpb25BdXRoQ29uZmlnLCBVc2VySW5mbyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNlcnZpY2UgY2xhc3MgdG8gdXNlIHdpdGggRnVzaW9uQXV0aCBiYWNrZW5kIGVuZHBvaW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEZ1c2lvbkF1dGhTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZzogRnVzaW9uQXV0aENvbmZpZyxcbiAgKSB7IH1cblxuICAvKipcbiAgICogQ2FsbHMgdGhlICdtZScgZW5kcG9pbnQgdG8gcmV0cmlldmUgdXNlciBpbmZvLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJJbmZvPn0gdGhlIHVzZXIgaW5mbyByZXNwb25zZS5cbiAgICovXG4gIGFzeW5jIGdldFVzZXJJbmZvKCk6IFByb21pc2U8VXNlckluZm8+IHtcbiAgICBjb25zdCBwYXRoID0gISF0aGlzLmNvbmZpZy5tZVBhdGhcbiAgICAgID8gdGhpcy5jb25maWcubWVQYXRoXG4gICAgICA6ICcvYXBwL21lJztcbiAgICBjb25zdCB1cmkgPSB0aGlzLmdldFVybEZvclBhdGgocGF0aCk7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGZldGNoKHVyaS5ocmVmLCB7XG4gICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgIH0pO1xuICAgIHJldHVybiBKU09OLnBhcnNlKGF3YWl0IHJlc3AudGV4dCgpKSBhcyBVc2VySW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgZm9yIHRoZSAnYXBwLmF0X2V4cCcgY29va2llIGFuZCBpZiBwcmVzZW50IHNldHMgYSB0aW1lciB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4uXG4gICAqIFdpbGwgYXR0ZW1wdCB0byByZWZyZXNoIHRoZSBjb25maWd1cmVkIHNlY29uZHMgYmVmb3JlIHRoZSBhY2Nlc3MgdG9rZW4gZXhwaXJlcyAoZGVmYXVsdCBpcyB0ZW4gc2Vjb25kcykuXG4gICAqL1xuICBpbml0QXV0b1JlZnJlc2goKTogdm9pZCB7XG4gICAgY29uc3QgZXhwID0gdGhpcy5nZXRFeHBUaW1lKCk7XG4gICAgaWYgKGV4cCkge1xuICAgICAgY29uc3QgcmVmcmVzaEJlZm9yZVNlY29uZHMgPSB0aGlzLmNvbmZpZy5hdXRvUmVmcmVzaFNlY29uZHNCZWZvcmVFeHBpcnlcbiAgICAgICAgPyB0aGlzLmNvbmZpZy5hdXRvUmVmcmVzaFNlY29uZHNCZWZvcmVFeHBpcnlcbiAgICAgICAgOiAxMDtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgY29uc3QgcmVmcmVzaFRpbWUgPSBleHAgLSAocmVmcmVzaEJlZm9yZVNlY29uZHMgKiAxMDAwKTtcbiAgICAgIGxldCB0aW1lVGlsbFRoZW4gPSByZWZyZXNoVGltZSAtIG5vdztcbiAgICAgIGlmICh0aW1lVGlsbFRoZW4gPD0gMCkge1xuICAgICAgICB0aW1lVGlsbFRoZW4gPSAwO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgICB0aGlzLmluaXRBdXRvUmVmcmVzaCgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICB9XG4gICAgICB9LCB0aW1lVGlsbFRoZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhhdCB0aGUgJ2FwcC5hdF9leHAnIGNvb2tpZSBpcyBwcmVzZW50IGFuZCBmb3IgYSB0aW1lIGluIHRoZSBmdXR1cmUgdG8gZGV0ZXJtaW5lIGxvZ2dlZC1pbiBzdGF0ZS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gYXBwLmF0X2V4cCBpcyBwcmVzZW50IGFuZCBub3QgZm9yIGEgdGltZSBpbiB0aGUgcGFzdFxuICAgKi9cbiAgaXNMb2dnZWRJbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuZ2V0RXhwVGltZSgpID8/IDApID4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgdGhlIGNvbmZpZ3VyZWQgJ3JlZnJlc2gnIGVuZHBvaW50IHRvIGF0dGVtcHQgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGNvb2tpZS5cbiAgICovXG4gIGFzeW5jIHJlZnJlc2hUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXRoID0gISF0aGlzLmNvbmZpZy50b2tlblJlZnJlc2hQYXRoXG4gICAgICA/IGAke3RoaXMuY29uZmlnLnRva2VuUmVmcmVzaFBhdGh9LyR7dGhpcy5jb25maWcuY2xpZW50SWR9YFxuICAgICAgOiBgL2FwcC9yZWZyZXNoLyR7dGhpcy5jb25maWcuY2xpZW50SWR9YDtcbiAgICBjb25zdCB1cmkgPSB0aGlzLmdldFVybEZvclBhdGgocGF0aCk7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGZldGNoKHVyaS5ocmVmLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC9wbGFpbicsXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCEocmVzcC5zdGF0dXMgPj0gMjAwICYmIHJlc3Auc3RhdHVzIDwgMzAwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdlcnJvciByZWZyZXNoaW5nIGFjY2VzcyB0b2tlbiBpbiBmdXNpb25hdXRoJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZXMgYSByZWRpcmVjdCB0byB0aGUgY29uZmlndXJlZCAnbG9naW4nIGVuZHBvaW50LlxuICAgKi9cbiAgc3RhcnRMb2dpbihzdGF0ZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBhdGggPSAhIXRoaXMuY29uZmlnLmxvZ2luUGF0aFxuICAgICAgPyB0aGlzLmNvbmZpZy5sb2dpblBhdGhcbiAgICAgIDogJy9hcHAvbG9naW4nO1xuICAgICEhc3RhdGUgPyB0aGlzLmRvUmVkaXJlY3RGb3JQYXRoKHBhdGgsIHtzdGF0ZX0pIDogdGhpcy5kb1JlZGlyZWN0Rm9yUGF0aChwYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2VzIGEgcmVkaXJlY3QgdG8gdGhlIGNvbmZpZ3VyZWQgJ3JlZnJlc2gnIGVuZHBvaW50LlxuICAgKi9cbiAgc3RhcnRSZWdpc3RyYXRpb24oc3RhdGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXRoID0gISF0aGlzLmNvbmZpZy5yZWdpc3RlclBhdGhcbiAgICAgID8gdGhpcy5jb25maWcucmVnaXN0ZXJQYXRoXG4gICAgICA6ICcvYXBwL3JlZ2lzdGVyJztcbiAgICAhIXN0YXRlID8gdGhpcy5kb1JlZGlyZWN0Rm9yUGF0aChwYXRoLCB7c3RhdGV9KSA6IHRoaXMuZG9SZWRpcmVjdEZvclBhdGgocGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlcyBhIHJlZGlyZWN0IHRvIHRoZSBjb25maWd1cmVkICdsb2dvdXQnIGVuZHBvaW50LlxuICAgKi9cbiAgbG9nb3V0KCk6IHZvaWQge1xuICAgIGNvbnN0IHBhdGggPSAhIXRoaXMuY29uZmlnLmxvZ291dFBhdGhcbiAgICAgID8gdGhpcy5jb25maWcubG9nb3V0UGF0aFxuICAgICAgOiAnL2FwcC9sb2dvdXQnO1xuICAgIHRoaXMuZG9SZWRpcmVjdEZvclBhdGgocGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGRvUmVkaXJlY3RGb3JQYXRoKHBhdGg6IHN0cmluZywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLGFueT4gPSB7fSkge1xuICAgIHBhdGggPSBwYXRoICsgYC8ke3RoaXMuY29uZmlnLmNsaWVudElkfWA7XG4gICAgaWYgKHRoaXMuY29uZmlnLnJlZGlyZWN0VXJpKSB7XG4gICAgICBwYXJhbXNbJ3JlZGlyZWN0X3VyaSddID0gdGhpcy5jb25maWcucmVkaXJlY3RVcmk7XG4gICAgfVxuICAgIGxldCBsb2NhdGlvbiA9IHRoaXMuZ2V0VXJsRm9yUGF0aChwYXRoLCBwYXJhbXMpIDtcbiAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGxvY2F0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXJsRm9yUGF0aChwYXRoOiBzdHJpbmcsIHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogVVJMIHtcbiAgICBsZXQgdXJsID0gbmV3IFVSTCh0aGlzLmNvbmZpZy5zZXJ2ZXJVcmwpO1xuICAgIHVybC5wYXRobmFtZSA9IHBhdGg7XG4gICAgaWYgKE9iamVjdC5lbnRyaWVzKHBhcmFtcykubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXJhbXMpO1xuICAgICAgdXJsLnNlYXJjaCA9IHVybFBhcmFtcy50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHBUaW1lKCk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IGV4cENvb2tpZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKVxuICAgICAgLm1hcChjID0+IGMuc3BsaXQoJz0nKSlcbiAgICAgIC5maW5kKChbbmFtZV0pID0+IG5hbWUgPT09ICdhcHAuYXRfZXhwJyk7XG4gICAgcmV0dXJuIGV4cENvb2tpZSA/IHBhcnNlSW50KGV4cENvb2tpZVsxXSkgKiAxMDAwIDogbnVsbDtcbiAgfVxufVxuIl19
@@ -1,228 +0,0 @@
1
- import { __awaiter } from 'tslib';
2
- import * as i0 from '@angular/core';
3
- import { Component, Input, NgModule } from '@angular/core';
4
-
5
- /**
6
- * Service class to use with FusionAuth backend endpoints.
7
- */
8
- class FusionAuthService {
9
- constructor(config) {
10
- this.config = config;
11
- }
12
- /**
13
- * Calls the 'me' endpoint to retrieve user info.
14
- * @return {Promise<UserInfo>} the user info response.
15
- */
16
- getUserInfo() {
17
- return __awaiter(this, void 0, void 0, function* () {
18
- const path = !!this.config.mePath
19
- ? this.config.mePath
20
- : '/app/me';
21
- const uri = this.getUrlForPath(path);
22
- const resp = yield fetch(uri.href, {
23
- credentials: 'include',
24
- });
25
- return JSON.parse(yield resp.text());
26
- });
27
- }
28
- /**
29
- * Checks for the 'app.at_exp' cookie and if present sets a timer to refresh the access token.
30
- * Will attempt to refresh the configured seconds before the access token expires (default is ten seconds).
31
- */
32
- initAutoRefresh() {
33
- const exp = this.getExpTime();
34
- if (exp) {
35
- const refreshBeforeSeconds = this.config.autoRefreshSecondsBeforeExpiry
36
- ? this.config.autoRefreshSecondsBeforeExpiry
37
- : 10;
38
- const now = new Date().getTime();
39
- const refreshTime = exp - (refreshBeforeSeconds * 1000);
40
- let timeTillThen = refreshTime - now;
41
- if (timeTillThen <= 0) {
42
- timeTillThen = 0;
43
- }
44
- setTimeout(() => __awaiter(this, void 0, void 0, function* () {
45
- try {
46
- yield this.refreshToken();
47
- this.initAutoRefresh();
48
- }
49
- catch (e) {
50
- console.error(e);
51
- }
52
- }), timeTillThen);
53
- }
54
- }
55
- /**
56
- * Checks that the 'app.at_exp' cookie is present and for a time in the future to determine logged-in state.
57
- * @return {boolean} app.at_exp is present and not for a time in the past
58
- */
59
- isLoggedIn() {
60
- var _a;
61
- return ((_a = this.getExpTime()) !== null && _a !== void 0 ? _a : 0) > new Date().getTime();
62
- }
63
- /**
64
- * Calls the configured 'refresh' endpoint to attempt to refresh the access token cookie.
65
- */
66
- refreshToken() {
67
- return __awaiter(this, void 0, void 0, function* () {
68
- const path = !!this.config.tokenRefreshPath
69
- ? `${this.config.tokenRefreshPath}/${this.config.clientId}`
70
- : `/app/refresh/${this.config.clientId}`;
71
- const uri = this.getUrlForPath(path);
72
- const resp = yield fetch(uri.href, {
73
- method: 'POST',
74
- credentials: 'include',
75
- headers: {
76
- 'Content-Type': 'text/plain',
77
- }
78
- });
79
- if (!(resp.status >= 200 && resp.status < 300)) {
80
- throw new Error('error refreshing access token in fusionauth');
81
- }
82
- });
83
- }
84
- /**
85
- * Invokes a redirect to the configured 'login' endpoint.
86
- */
87
- startLogin(state) {
88
- const path = !!this.config.loginPath
89
- ? this.config.loginPath
90
- : '/app/login';
91
- !!state ? this.doRedirectForPath(path, { state }) : this.doRedirectForPath(path);
92
- }
93
- /**
94
- * Invokes a redirect to the configured 'refresh' endpoint.
95
- */
96
- startRegistration(state) {
97
- const path = !!this.config.registerPath
98
- ? this.config.registerPath
99
- : '/app/register';
100
- !!state ? this.doRedirectForPath(path, { state }) : this.doRedirectForPath(path);
101
- }
102
- /**
103
- * Invokes a redirect to the configured 'logout' endpoint.
104
- */
105
- logout() {
106
- const path = !!this.config.logoutPath
107
- ? this.config.logoutPath
108
- : '/app/logout';
109
- this.doRedirectForPath(path);
110
- }
111
- doRedirectForPath(path, params = {}) {
112
- path = path + `/${this.config.clientId}`;
113
- if (this.config.redirectUri) {
114
- params['redirect_uri'] = this.config.redirectUri;
115
- }
116
- let location = this.getUrlForPath(path, params);
117
- window.location.assign(location);
118
- }
119
- getUrlForPath(path, params = {}) {
120
- let url = new URL(this.config.serverUrl);
121
- url.pathname = path;
122
- if (Object.entries(params).length > 0) {
123
- const urlParams = new URLSearchParams(params);
124
- url.search = urlParams.toString();
125
- }
126
- return url;
127
- }
128
- getExpTime() {
129
- const expCookie = document.cookie.split('; ')
130
- .map(c => c.split('='))
131
- .find(([name]) => name === 'app.at_exp');
132
- return expCookie ? parseInt(expCookie[1]) * 1000 : null;
133
- }
134
- }
135
-
136
- class FusionAuthLoginButtonComponent {
137
- constructor(fusionAuth) {
138
- this.fusionAuth = fusionAuth;
139
- }
140
- login() {
141
- this.fusionAuth.startLogin(this.state);
142
- }
143
- }
144
- FusionAuthLoginButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthLoginButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component });
145
- FusionAuthLoginButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FusionAuthLoginButtonComponent, selector: "fa-login", inputs: { state: "state" }, ngImport: i0, template: "<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] });
146
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthLoginButtonComponent, decorators: [{
147
- type: Component,
148
- args: [{ selector: 'fa-login', template: "<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }]
149
- }], ctorParameters: function () { return [{ type: FusionAuthService }]; }, propDecorators: { state: [{
150
- type: Input
151
- }] } });
152
-
153
- class FusionAuthLogoutButtonComponent {
154
- constructor(fusionAuth) {
155
- this.fusionAuth = fusionAuth;
156
- }
157
- logout() {
158
- this.fusionAuth.logout();
159
- }
160
- }
161
- FusionAuthLogoutButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthLogoutButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component });
162
- FusionAuthLogoutButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FusionAuthLogoutButtonComponent, selector: "fa-logout", ngImport: i0, template: "<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n", styles: [".fa-logout-button{padding:7px 13px;border-radius:3px;display:block;border:solid 1px #083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:12px;text-align:center;color:#083b94}.fa-logout-button:hover{cursor:pointer}\n"] });
163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthLogoutButtonComponent, decorators: [{
164
- type: Component,
165
- args: [{ selector: 'fa-logout', template: "<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n", styles: [".fa-logout-button{padding:7px 13px;border-radius:3px;display:block;border:solid 1px #083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:12px;text-align:center;color:#083b94}.fa-logout-button:hover{cursor:pointer}\n"] }]
166
- }], ctorParameters: function () { return [{ type: FusionAuthService }]; } });
167
-
168
- class FusionAuthRegisterButtonComponent {
169
- constructor(fusionAuth) {
170
- this.fusionAuth = fusionAuth;
171
- }
172
- register() {
173
- this.fusionAuth.startRegistration(this.state);
174
- }
175
- }
176
- FusionAuthRegisterButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthRegisterButtonComponent, deps: [{ token: FusionAuthService }], target: i0.ɵɵFactoryTarget.Component });
177
- FusionAuthRegisterButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: FusionAuthRegisterButtonComponent, selector: "fa-register", inputs: { state: "state" }, ngImport: i0, template: "<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] });
178
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthRegisterButtonComponent, decorators: [{
179
- type: Component,
180
- args: [{ selector: 'fa-register', template: "<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n", styles: [".fa-button{padding:16px 16px 13px;border-radius:8px;background-color:#083b94;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;font-size:18px;font-weight:600;text-align:center;color:#fff;width:400px}.fa-button:hover{cursor:pointer}\n"] }]
181
- }], ctorParameters: function () { return [{ type: FusionAuthService }]; }, propDecorators: { state: [{
182
- type: Input
183
- }] } });
184
-
185
- class FusionAuthModule {
186
- static forRoot(fusionAuthConfig) {
187
- return {
188
- ngModule: FusionAuthModule,
189
- providers: [
190
- { provide: FusionAuthService, useValue: new FusionAuthService(fusionAuthConfig) }
191
- ],
192
- };
193
- }
194
- }
195
- FusionAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
196
- FusionAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthModule, declarations: [FusionAuthLoginButtonComponent,
197
- FusionAuthLogoutButtonComponent,
198
- FusionAuthRegisterButtonComponent], exports: [FusionAuthLoginButtonComponent,
199
- FusionAuthLogoutButtonComponent,
200
- FusionAuthRegisterButtonComponent] });
201
- FusionAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthModule, imports: [[]] });
202
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FusionAuthModule, decorators: [{
203
- type: NgModule,
204
- args: [{
205
- declarations: [
206
- FusionAuthLoginButtonComponent,
207
- FusionAuthLogoutButtonComponent,
208
- FusionAuthRegisterButtonComponent,
209
- ],
210
- imports: [],
211
- exports: [
212
- FusionAuthLoginButtonComponent,
213
- FusionAuthLogoutButtonComponent,
214
- FusionAuthRegisterButtonComponent,
215
- ]
216
- }]
217
- }] });
218
-
219
- /*
220
- * Public API Surface of fusionauth-angular-sdk
221
- */
222
-
223
- /**
224
- * Generated bundle index. Do not edit.
225
- */
226
-
227
- export { FusionAuthLoginButtonComponent, FusionAuthLogoutButtonComponent, FusionAuthModule, FusionAuthRegisterButtonComponent, FusionAuthService };
228
- //# sourceMappingURL=fusionauth-angular-sdk.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fusionauth-angular-sdk.mjs","sources":["../../../projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/fusion-auth.module.ts","../../../projects/fusionauth-angular-sdk/src/public-api.ts","../../../projects/fusionauth-angular-sdk/src/fusionauth-angular-sdk.ts"],"sourcesContent":["import { FusionAuthConfig, UserInfo } from './types';\n\n/**\n * Service class to use with FusionAuth backend endpoints.\n */\nexport class FusionAuthService {\n\n constructor(\n private config: FusionAuthConfig,\n ) { }\n\n /**\n * Calls the 'me' endpoint to retrieve user info.\n * @return {Promise<UserInfo>} the user info response.\n */\n async getUserInfo(): Promise<UserInfo> {\n const path = !!this.config.mePath\n ? this.config.mePath\n : '/app/me';\n const uri = this.getUrlForPath(path);\n const resp = await fetch(uri.href, {\n credentials: 'include',\n });\n return JSON.parse(await resp.text()) as UserInfo;\n }\n\n /**\n * Checks for the 'app.at_exp' cookie and if present sets a timer to refresh the access token.\n * Will attempt to refresh the configured seconds before the access token expires (default is ten seconds).\n */\n initAutoRefresh(): void {\n const exp = this.getExpTime();\n if (exp) {\n const refreshBeforeSeconds = this.config.autoRefreshSecondsBeforeExpiry\n ? this.config.autoRefreshSecondsBeforeExpiry\n : 10;\n const now = new Date().getTime();\n const refreshTime = exp - (refreshBeforeSeconds * 1000);\n let timeTillThen = refreshTime - now;\n if (timeTillThen <= 0) {\n timeTillThen = 0;\n }\n setTimeout(async () => {\n try {\n await this.refreshToken();\n this.initAutoRefresh();\n } catch (e) {\n console.error(e)\n }\n }, timeTillThen);\n }\n }\n\n /**\n * Checks that the 'app.at_exp' cookie is present and for a time in the future to determine logged-in state.\n * @return {boolean} app.at_exp is present and not for a time in the past\n */\n isLoggedIn(): boolean {\n return (this.getExpTime() ?? 0) > new Date().getTime();\n }\n\n /**\n * Calls the configured 'refresh' endpoint to attempt to refresh the access token cookie.\n */\n async refreshToken(): Promise<void> {\n const path = !!this.config.tokenRefreshPath\n ? `${this.config.tokenRefreshPath}/${this.config.clientId}`\n : `/app/refresh/${this.config.clientId}`;\n const uri = this.getUrlForPath(path);\n const resp = await fetch(uri.href, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'text/plain',\n }\n });\n if (!(resp.status >= 200 && resp.status < 300)) {\n throw new Error('error refreshing access token in fusionauth');\n }\n }\n\n /**\n * Invokes a redirect to the configured 'login' endpoint.\n */\n startLogin(state?: string): void {\n const path = !!this.config.loginPath\n ? this.config.loginPath\n : '/app/login';\n !!state ? this.doRedirectForPath(path, {state}) : this.doRedirectForPath(path);\n }\n\n /**\n * Invokes a redirect to the configured 'refresh' endpoint.\n */\n startRegistration(state?: string): void {\n const path = !!this.config.registerPath\n ? this.config.registerPath\n : '/app/register';\n !!state ? this.doRedirectForPath(path, {state}) : this.doRedirectForPath(path);\n }\n\n /**\n * Invokes a redirect to the configured 'logout' endpoint.\n */\n logout(): void {\n const path = !!this.config.logoutPath\n ? this.config.logoutPath\n : '/app/logout';\n this.doRedirectForPath(path);\n }\n\n private doRedirectForPath(path: string, params: Record<string,any> = {}) {\n path = path + `/${this.config.clientId}`;\n if (this.config.redirectUri) {\n params['redirect_uri'] = this.config.redirectUri;\n }\n let location = this.getUrlForPath(path, params) ;\n window.location.assign(location);\n }\n\n private getUrlForPath(path: string, params: Record<string, any> = {}): URL {\n let url = new URL(this.config.serverUrl);\n url.pathname = path;\n if (Object.entries(params).length > 0) {\n const urlParams = new URLSearchParams(params);\n url.search = urlParams.toString();\n }\n return url;\n }\n\n private getExpTime(): number | null {\n const expCookie = document.cookie.split('; ')\n .map(c => c.split('='))\n .find(([name]) => name === 'app.at_exp');\n return expCookie ? parseInt(expCookie[1]) * 1000 : null;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n selector: 'fa-login',\n templateUrl: './fusion-auth-login-button.component.html',\n styleUrls: ['./fusion-auth-login-button.component.scss']\n})\nexport class FusionAuthLoginButtonComponent {\n @Input() state: string | undefined;\n\n constructor(private fusionAuth: FusionAuthService) {}\n\n login() {\n this.fusionAuth.startLogin(this.state);\n }\n}\n","<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n","import { Component } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n selector: 'fa-logout',\n templateUrl: './fusion-auth-logout-button.component.html',\n styleUrls: ['./fusion-auth-logout-button.component.scss']\n})\nexport class FusionAuthLogoutButtonComponent {\n constructor(\n private fusionAuth: FusionAuthService,\n ) {}\n\n logout() {\n this.fusionAuth.logout();\n }\n}\n","<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n","import { Component, Input } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n selector: 'fa-register',\n templateUrl: './fusion-auth-register-button.component.html',\n styleUrls: ['./fusion-auth-register-button.component.scss']\n})\nexport class FusionAuthRegisterButtonComponent {\n @Input() state: string | undefined;\n\n constructor(\n private fusionAuth: FusionAuthService,\n ) {}\n\n register() {\n this.fusionAuth.startRegistration(this.state);\n }\n}\n","<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n","import { ModuleWithProviders, NgModule} from '@angular/core';\nimport { FusionAuthConfig } from './types';\nimport { FusionAuthService } from './fusion-auth.service';\nimport { FusionAuthLoginButtonComponent } from './components/fusionauth-login.button/fusion-auth-login-button.component';\nimport {\n FusionAuthLogoutButtonComponent\n} from './components/fusionauth-logout.button/fusion-auth-logout-button.component';\nimport {\n FusionAuthRegisterButtonComponent\n} from './components/fusionauth-register.button/fusion-auth-register-button.component';\n\n@NgModule({\n declarations: [\n FusionAuthLoginButtonComponent,\n FusionAuthLogoutButtonComponent,\n FusionAuthRegisterButtonComponent,\n ],\n imports: [\n ],\n exports: [\n FusionAuthLoginButtonComponent,\n FusionAuthLogoutButtonComponent,\n FusionAuthRegisterButtonComponent,\n ]\n})\nexport class FusionAuthModule {\n static forRoot(fusionAuthConfig: FusionAuthConfig): ModuleWithProviders<FusionAuthModule> {\n return {\n ngModule: FusionAuthModule,\n providers: [\n { provide: FusionAuthService, useValue: new FusionAuthService(fusionAuthConfig) }\n ],\n }\n }\n}\n","/*\n * Public API Surface of fusionauth-angular-sdk\n */\n\nexport * from './lib/fusion-auth.service';\nexport * from './lib/components/fusionauth-login.button/fusion-auth-login-button.component';\nexport * from './lib/components/fusionauth-logout.button/fusion-auth-logout-button.component';\nexport * from './lib/components/fusionauth-register.button/fusion-auth-register-button.component';\nexport * from './lib/fusion-auth.module';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FusionAuthService"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fusionauth-angular-sdk.mjs","sources":["../../../projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts","../../../projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.html","../../../projects/fusionauth-angular-sdk/src/lib/fusion-auth.module.ts","../../../projects/fusionauth-angular-sdk/src/public-api.ts","../../../projects/fusionauth-angular-sdk/src/fusionauth-angular-sdk.ts"],"sourcesContent":["import { FusionAuthConfig, UserInfo } from './types';\n\n/**\n * Service class to use with FusionAuth backend endpoints.\n */\nexport class FusionAuthService {\n\n constructor(\n private config: FusionAuthConfig,\n ) { }\n\n /**\n * Calls the 'me' endpoint to retrieve user info.\n * @return {Promise<UserInfo>} the user info response.\n */\n async getUserInfo(): Promise<UserInfo> {\n const path = !!this.config.mePath\n ? this.config.mePath\n : '/app/me';\n const uri = this.getUrlForPath(path);\n const resp = await fetch(uri.href, {\n credentials: 'include',\n });\n return JSON.parse(await resp.text()) as UserInfo;\n }\n\n /**\n * Checks for the 'app.at_exp' cookie and if present sets a timer to refresh the access token.\n * Will attempt to refresh the configured seconds before the access token expires (default is ten seconds).\n */\n initAutoRefresh(): void {\n const exp = this.getExpTime();\n if (exp) {\n const refreshBeforeSeconds = this.config.autoRefreshSecondsBeforeExpiry\n ? this.config.autoRefreshSecondsBeforeExpiry\n : 10;\n const now = new Date().getTime();\n const refreshTime = exp - (refreshBeforeSeconds * 1000);\n let timeTillThen = refreshTime - now;\n if (timeTillThen <= 0) {\n timeTillThen = 0;\n }\n setTimeout(async () => {\n try {\n await this.refreshToken();\n this.initAutoRefresh();\n } catch (e) {\n console.error(e)\n }\n }, timeTillThen);\n }\n }\n\n /**\n * Checks that the 'app.at_exp' cookie is present and for a time in the future to determine logged-in state.\n * @return {boolean} app.at_exp is present and not for a time in the past\n */\n isLoggedIn(): boolean {\n return (this.getExpTime() ?? 0) > new Date().getTime();\n }\n\n /**\n * Calls the configured 'refresh' endpoint to attempt to refresh the access token cookie.\n */\n async refreshToken(): Promise<void> {\n const path = !!this.config.tokenRefreshPath\n ? `${this.config.tokenRefreshPath}/${this.config.clientId}`\n : `/app/refresh/${this.config.clientId}`;\n const uri = this.getUrlForPath(path);\n const resp = await fetch(uri.href, {\n method: 'POST',\n credentials: 'include',\n headers: {\n 'Content-Type': 'text/plain',\n }\n });\n if (!(resp.status >= 200 && resp.status < 300)) {\n throw new Error('error refreshing access token in fusionauth');\n }\n }\n\n /**\n * Invokes a redirect to the configured 'login' endpoint.\n */\n startLogin(state?: string): void {\n const path = !!this.config.loginPath\n ? this.config.loginPath\n : '/app/login';\n !!state ? this.doRedirectForPath(path, {state}) : this.doRedirectForPath(path);\n }\n\n /**\n * Invokes a redirect to the configured 'refresh' endpoint.\n */\n startRegistration(state?: string): void {\n const path = !!this.config.registerPath\n ? this.config.registerPath\n : '/app/register';\n !!state ? this.doRedirectForPath(path, {state}) : this.doRedirectForPath(path);\n }\n\n /**\n * Invokes a redirect to the configured 'logout' endpoint.\n */\n logout(): void {\n const path = !!this.config.logoutPath\n ? this.config.logoutPath\n : '/app/logout';\n this.doRedirectForPath(path);\n }\n\n private doRedirectForPath(path: string, params: Record<string,any> = {}) {\n path = path + `/${this.config.clientId}`;\n if (this.config.redirectUri) {\n params['redirect_uri'] = this.config.redirectUri;\n }\n let location = this.getUrlForPath(path, params) ;\n window.location.assign(location);\n }\n\n private getUrlForPath(path: string, params: Record<string, any> = {}): URL {\n let url = new URL(this.config.serverUrl);\n url.pathname = path;\n if (Object.entries(params).length > 0) {\n const urlParams = new URLSearchParams(params);\n url.search = urlParams.toString();\n }\n return url;\n }\n\n private getExpTime(): number | null {\n const expCookie = document.cookie.split('; ')\n .map(c => c.split('='))\n .find(([name]) => name === 'app.at_exp');\n return expCookie ? parseInt(expCookie[1]) * 1000 : null;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n selector: 'fa-login',\n templateUrl: './fusion-auth-login-button.component.html',\n styleUrls: ['./fusion-auth-login-button.component.scss']\n})\nexport class FusionAuthLoginButtonComponent {\n @Input() state: string | undefined;\n\n constructor(private fusionAuth: FusionAuthService) {}\n\n login() {\n this.fusionAuth.startLogin(this.state);\n }\n}\n","<button class=\"fa-button\" (click)=\"login()\">\n <span>Login</span>\n</button>\n","import { Component } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n selector: 'fa-logout',\n templateUrl: './fusion-auth-logout-button.component.html',\n styleUrls: ['./fusion-auth-logout-button.component.scss']\n})\nexport class FusionAuthLogoutButtonComponent {\n constructor(\n private fusionAuth: FusionAuthService,\n ) {}\n\n logout() {\n this.fusionAuth.logout();\n }\n}\n","<button class=\"fa-logout-button\" (click)=\"logout()\">\n <span>logout</span>\n</button>\n","import { Component, Input } from '@angular/core';\nimport { FusionAuthService } from '../../fusion-auth.service';\n\n@Component({\n selector: 'fa-register',\n templateUrl: './fusion-auth-register-button.component.html',\n styleUrls: ['./fusion-auth-register-button.component.scss']\n})\nexport class FusionAuthRegisterButtonComponent {\n @Input() state: string | undefined;\n\n constructor(\n private fusionAuth: FusionAuthService,\n ) {}\n\n register() {\n this.fusionAuth.startRegistration(this.state);\n }\n}\n","<button class=\"fa-button\" (click)=\"register()\">\n <span>Register Now</span>\n</button>\n","import { ModuleWithProviders, NgModule} from '@angular/core';\nimport { FusionAuthConfig } from './types';\nimport { FusionAuthService } from './fusion-auth.service';\nimport { FusionAuthLoginButtonComponent } from './components/fusionauth-login.button/fusion-auth-login-button.component';\nimport {\n FusionAuthLogoutButtonComponent\n} from './components/fusionauth-logout.button/fusion-auth-logout-button.component';\nimport {\n FusionAuthRegisterButtonComponent\n} from './components/fusionauth-register.button/fusion-auth-register-button.component';\n\n@NgModule({\n declarations: [\n FusionAuthLoginButtonComponent,\n FusionAuthLogoutButtonComponent,\n FusionAuthRegisterButtonComponent,\n ],\n imports: [\n ],\n exports: [\n FusionAuthLoginButtonComponent,\n FusionAuthLogoutButtonComponent,\n FusionAuthRegisterButtonComponent,\n ]\n})\nexport class FusionAuthModule {\n static forRoot(fusionAuthConfig: FusionAuthConfig): ModuleWithProviders<FusionAuthModule> {\n return {\n ngModule: FusionAuthModule,\n providers: [\n { provide: FusionAuthService, useValue: new FusionAuthService(fusionAuthConfig) }\n ],\n }\n }\n}\n","/*\n * Public API Surface of fusionauth-angular-sdk\n */\n\nexport * from './lib/fusion-auth.service';\nexport * from './lib/components/fusionauth-login.button/fusion-auth-login-button.component';\nexport * from './lib/components/fusionauth-logout.button/fusion-auth-logout-button.component';\nexport * from './lib/components/fusionauth-register.button/fusion-auth-register-button.component';\nexport * from './lib/fusion-auth.module';\nexport * from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FusionAuthService"],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes