@fusionauth/angular-sdk 0.1.5 → 1.0.1

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 (27) hide show
  1. package/README.md +42 -69
  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/core.mjs +241 -0
  6. package/esm2022/lib/fusion-auth.module.mjs +43 -0
  7. package/esm2022/lib/fusion-auth.service.mjs +91 -0
  8. package/esm2022/lib/types.mjs +2 -0
  9. package/fesm2022/fusionauth-angular-sdk.mjs +429 -0
  10. package/fesm2022/fusionauth-angular-sdk.mjs.map +1 -0
  11. package/lib/components/fusionauth-login.button/fusion-auth-login-button.component.d.ts +1 -1
  12. package/lib/components/fusionauth-register.button/fusion-auth-register-button.component.d.ts +1 -1
  13. package/lib/core.d.ts +57 -0
  14. package/lib/fusion-auth.service.d.ts +26 -17
  15. package/lib/types.d.ts +44 -2
  16. package/package.json +9 -21
  17. package/esm2020/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.mjs +0 -18
  18. package/esm2020/lib/components/fusionauth-register.button/fusion-auth-register-button.component.mjs +0 -20
  19. package/esm2020/lib/fusion-auth.module.mjs +0 -40
  20. package/esm2020/lib/fusion-auth.service.mjs +0 -126
  21. package/esm2020/lib/types.mjs +0 -2
  22. package/fesm2015/fusionauth-angular-sdk.mjs +0 -228
  23. package/fesm2015/fusionauth-angular-sdk.mjs.map +0 -1
  24. package/fesm2020/fusionauth-angular-sdk.mjs +0 -222
  25. package/fesm2020/fusionauth-angular-sdk.mjs.map +0 -1
  26. /package/{esm2020 → esm2022}/fusionauth-angular-sdk.mjs +0 -0
  27. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
package/lib/core.d.ts ADDED
@@ -0,0 +1,57 @@
1
+ /// <reference types="node" />
2
+ declare class g {
3
+ constructor(e: any);
4
+ getMeUrl(): URL;
5
+ getLoginUrl(e: any): URL;
6
+ getRegisterUrl(e: any): URL;
7
+ getLogoutUrl(): URL;
8
+ getTokenRefreshUrl(): URL;
9
+ generateUrl(e: any, t: any): URL;
10
+ generateURLSearchParams(e: any): URLSearchParams;
11
+ }
12
+ declare class o {
13
+ /**
14
+ * Parses document.cookie for the access token expiration cookie value.
15
+ * @returns {(number | null)} The moment of expiration in milliseconds since epoch.
16
+ */
17
+ static getAccessTokenExpirationMoment(e?: string): number | null;
18
+ }
19
+ declare class p {
20
+ constructor(e: any);
21
+ /** Refresh token a single time */
22
+ refreshToken(): Promise<void>;
23
+ /** Initializes continuous automatic token refresh. */
24
+ initAutoRefresh(e: number | undefined, t: any): NodeJS.Timeout | undefined;
25
+ }
26
+ declare class T {
27
+ constructor(e: any);
28
+ startLogin(e: any): void;
29
+ startRegister(e: any): void;
30
+ startLogout(): void;
31
+ fetchUserInfo(): Promise<any>;
32
+ refreshToken(): Promise<any>;
33
+ initAutoRefresh(): any;
34
+ handlePostRedirect(e: any): void;
35
+ get isLoggedIn(): boolean;
36
+ get accessTokenExpirationMoment(): number | null;
37
+ scheduleTokenExpirationEvent(): void;
38
+ }
39
+ declare function U(): void;
40
+ declare function P(): void;
41
+ declare function E(r: any): {
42
+ assign: any;
43
+ ancestorOrigins: DOMStringList;
44
+ hash: string;
45
+ host: string;
46
+ hostname: string;
47
+ href: string;
48
+ toString(): string;
49
+ origin: string;
50
+ pathname: string;
51
+ port: string;
52
+ protocol: string;
53
+ search: string;
54
+ reload(): void;
55
+ replace(url: string | URL): void;
56
+ };
57
+ export { o as CookieHelpers, T as SDKCore, p as TokenRefresher, g as UrlHelper, U as mockIsLoggedIn, E as mockWindowLocation, P as removeAt_expCookie, };
@@ -1,42 +1,51 @@
1
1
  import { FusionAuthConfig, UserInfo } from './types';
2
+ import { Observable } from 'rxjs';
2
3
  /**
3
4
  * Service class to use with FusionAuth backend endpoints.
4
5
  */
5
6
  export declare class FusionAuthService {
6
- private config;
7
+ private core;
8
+ private autoRefreshTimer?;
9
+ private isLoggedInSubject;
7
10
  constructor(config: FusionAuthConfig);
11
+ /** An observable representing whether the user is logged in. */
12
+ isLoggedIn$: Observable<boolean>;
13
+ /** A function that returns whether the user is logged in. This returned value is non-observable. */
14
+ isLoggedIn(): boolean;
8
15
  /**
9
- * Calls the 'me' endpoint to retrieve user info.
10
- * @return {Promise<UserInfo>} the user info response.
16
+ * Refreshes the access token a single time.
17
+ * Automatic token refreshing can be enabled if the SDK is configured with `shouldAutoRefresh`.
11
18
  */
12
- getUserInfo(): Promise<UserInfo>;
19
+ refreshToken(): Promise<void>;
13
20
  /**
14
- * Checks for the 'app.at_exp' cookie and if present sets a timer to refresh the access token.
15
- * Will attempt to refresh the configured seconds before the access token expires (default is ten seconds).
21
+ * Initializes automatic access token refreshing.
22
+ * This is handled automatically if the SDK is configured with `shouldAutoRefresh`.
16
23
  */
17
24
  initAutoRefresh(): void;
18
25
  /**
19
- * Checks that the 'app.at_exp' cookie is present and for a time in the future to determine logged-in state.
20
- * @return {boolean} app.at_exp is present and not for a time in the past
26
+ * Returns an observable request that fetches userInfo, and catches error.
21
27
  */
22
- isLoggedIn(): boolean;
28
+ getUserInfoObservable(callbacks?: {
29
+ onBegin?: () => void;
30
+ onDone?: () => void;
31
+ }): Observable<UserInfo>;
23
32
  /**
24
- * Calls the configured 'refresh' endpoint to attempt to refresh the access token cookie.
33
+ * Fetches userInfo from the 'me' endpoint.
34
+ * @throws {Error} - if an error occurred while fetching.
25
35
  */
26
- refreshToken(): Promise<void>;
36
+ getUserInfo(): Promise<UserInfo>;
27
37
  /**
28
- * Invokes a redirect to the configured 'login' endpoint.
38
+ * Initiates login flow.
39
+ * @param {string} [state] - Optional value to be echoed back to the SDK upon redirect.
29
40
  */
30
41
  startLogin(state?: string): void;
31
42
  /**
32
- * Invokes a redirect to the configured 'refresh' endpoint.
43
+ * Initiates register flow.
44
+ * @param {string} [state] - Optional value to be echoed back to the SDK upon redirect.
33
45
  */
34
46
  startRegistration(state?: string): void;
35
47
  /**
36
- * Invokes a redirect to the configured 'logout' endpoint.
48
+ * Initiates logout flow.
37
49
  */
38
50
  logout(): void;
39
- private doRedirectForPath;
40
- private getUrlForPath;
41
- private getExpTime;
42
51
  }
package/lib/types.d.ts CHANGED
@@ -1,12 +1,54 @@
1
+ /**
2
+ * Config for FusionAuth Angular SDK
3
+ */
1
4
  export interface FusionAuthConfig {
5
+ /**
6
+ * The URL of the server that performs the token exchange.
7
+ */
2
8
  serverUrl: string;
9
+ /**
10
+ * The client id of the application.
11
+ */
3
12
  clientId: string;
4
- redirectUri?: string;
13
+ /**
14
+ * The redirect URI of the application.
15
+ */
16
+ redirectUri: string;
17
+ /**
18
+ * The OAuth2 scope parameter passed to the `/oauth2/authorize` endpoint. If not specified fusionauth will default this to `openid offline_access`.
19
+ */
20
+ scope?: string;
21
+ /**
22
+ * Enables automatic token refreshing. Defaults to false.
23
+ */
24
+ shouldAutoRefresh?: boolean;
25
+ /**
26
+ * The number of seconds before the access token expiry when the auto refresh functionality kicks in if enabled. Default is 10.
27
+ */
5
28
  autoRefreshSecondsBeforeExpiry?: number;
29
+ /**
30
+ * Callback function to be invoked with the `state` value upon redirect from login or register.
31
+ */
32
+ onRedirect?: (state?: string) => void;
33
+ /**
34
+ * The path to the login endpoint.
35
+ */
6
36
  loginPath?: string;
7
- logoutPath?: string;
37
+ /**
38
+ * The path to the register endpoint.
39
+ */
8
40
  registerPath?: string;
41
+ /**
42
+ * The path to the logout endpoint.
43
+ */
44
+ logoutPath?: string;
45
+ /**
46
+ * The path to the token refresh endpoint.
47
+ */
9
48
  tokenRefreshPath?: string;
49
+ /**
50
+ * The path to the me endpoint.
51
+ */
10
52
  mePath?: string;
11
53
  }
12
54
  export interface UserInfo {
package/package.json CHANGED
@@ -1,24 +1,15 @@
1
1
  {
2
2
  "name": "@fusionauth/angular-sdk",
3
- "version": "0.1.5",
4
- "private": false,
3
+ "version": "1.0.1",
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",
11
+ "sideEffects": false,
12
+ "module": "fesm2022/fusionauth-angular-sdk.mjs",
22
13
  "typings": "index.d.ts",
23
14
  "exports": {
24
15
  "./package.json": {
@@ -26,12 +17,9 @@
26
17
  },
27
18
  ".": {
28
19
  "types": "./index.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"
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: "15.2.10", ngImport: i0, type: FusionAuthLogoutButtonComponent, deps: [{ token: i1.FusionAuthService }], target: i0.ɵɵFactoryTarget.Component });
13
- FusionAuthLogoutButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", 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: "15.2.10", 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: "15.2.10", ngImport: i0, type: FusionAuthRegisterButtonComponent, deps: [{ token: i1.FusionAuthService }], target: i0.ɵɵFactoryTarget.Component });
13
- FusionAuthRegisterButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", 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: "15.2.10", 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: "15.2.10", ngImport: i0, type: FusionAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18
- FusionAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", 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: "15.2.10", ngImport: i0, type: FusionAuthModule });
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzaW9uLWF1dGgubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZnVzaW9uYXV0aC1hbmd1bGFyLXNkay9zcmMvbGliL2Z1c2lvbi1hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUN6SCxPQUFPLEVBQ0wsK0JBQStCLEVBQ2hDLE1BQU0sMkVBQTJFLENBQUM7QUFDbkYsT0FBTyxFQUNMLGlDQUFpQyxFQUNsQyxNQUFNLCtFQUErRSxDQUFDOztBQWdCdkYsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFrQztRQUMvQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLElBQUksaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsRUFBRTthQUNsRjtTQUNGLENBQUE7SUFDSCxDQUFDOzs4R0FSVSxnQkFBZ0I7K0dBQWhCLGdCQUFnQixpQkFaekIsOEJBQThCO1FBQzlCLCtCQUErQjtRQUMvQixpQ0FBaUMsYUFLakMsOEJBQThCO1FBQzlCLCtCQUErQjtRQUMvQixpQ0FBaUM7K0dBR3hCLGdCQUFnQjs0RkFBaEIsZ0JBQWdCO2tCQWQ1QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWiw4QkFBOEI7d0JBQzlCLCtCQUErQjt3QkFDL0IsaUNBQWlDO3FCQUNsQztvQkFDRCxPQUFPLEVBQUUsRUFDUjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsOEJBQThCO3dCQUM5QiwrQkFBK0I7d0JBQy9CLGlDQUFpQztxQkFDbEM7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGdXNpb25BdXRoQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBGdXNpb25BdXRoU2VydmljZSB9IGZyb20gJy4vZnVzaW9uLWF1dGguc2VydmljZSc7XG5pbXBvcnQgeyBGdXNpb25BdXRoTG9naW5CdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZnVzaW9uYXV0aC1sb2dpbi5idXR0b24vZnVzaW9uLWF1dGgtbG9naW4tYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBGdXNpb25BdXRoTG9nb3V0QnV0dG9uQ29tcG9uZW50XG59IGZyb20gJy4vY29tcG9uZW50cy9mdXNpb25hdXRoLWxvZ291dC5idXR0b24vZnVzaW9uLWF1dGgtbG9nb3V0LWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRnVzaW9uQXV0aFJlZ2lzdGVyQnV0dG9uQ29tcG9uZW50XG59IGZyb20gJy4vY29tcG9uZW50cy9mdXNpb25hdXRoLXJlZ2lzdGVyLmJ1dHRvbi9mdXNpb24tYXV0aC1yZWdpc3Rlci1idXR0b24uY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgRnVzaW9uQXV0aExvZ2luQnV0dG9uQ29tcG9uZW50LFxuICAgIEZ1c2lvbkF1dGhMb2dvdXRCdXR0b25Db21wb25lbnQsXG4gICAgRnVzaW9uQXV0aFJlZ2lzdGVyQnV0dG9uQ29tcG9uZW50LFxuICBdLFxuICBpbXBvcnRzOiBbXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBGdXNpb25BdXRoTG9naW5CdXR0b25Db21wb25lbnQsXG4gICAgRnVzaW9uQXV0aExvZ291dEJ1dHRvbkNvbXBvbmVudCxcbiAgICBGdXNpb25BdXRoUmVnaXN0ZXJCdXR0b25Db21wb25lbnQsXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRnVzaW9uQXV0aE1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KGZ1c2lvbkF1dGhDb25maWc6IEZ1c2lvbkF1dGhDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEZ1c2lvbkF1dGhNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEZ1c2lvbkF1dGhNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBGdXNpb25BdXRoU2VydmljZSwgdXNlVmFsdWU6IG5ldyBGdXNpb25BdXRoU2VydmljZShmdXNpb25BdXRoQ29uZmlnKSB9XG4gICAgICBdLFxuICAgIH1cbiAgfVxufVxuIl19
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVzaW9uLWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Z1c2lvbmF1dGgtYW5ndWxhci1zZGsvc3JjL2xpYi9mdXNpb24tYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUU1QixZQUNVLE1BQXdCO1FBQXhCLFdBQU0sR0FBTixNQUFNLENBQWtCO0lBQzlCLENBQUM7SUFFTDs7O09BR0c7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNmLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUNwQixDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQ2pDLFdBQVcsRUFBRSxTQUFTO1NBQ3ZCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBYSxDQUFDO0lBQ25ELENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlO1FBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlCLElBQUksR0FBRyxFQUFFO1lBQ1AsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLDhCQUE4QjtnQkFDckUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsOEJBQThCO2dCQUM1QyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxNQUFNLFdBQVcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUN4RCxJQUFJLFlBQVksR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDO1lBQ3JDLElBQUksWUFBWSxJQUFJLENBQUMsRUFBRTtnQkFDckIsWUFBWSxHQUFHLENBQUMsQ0FBQzthQUNsQjtZQUNELFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDcEIsSUFBSTtvQkFDRixNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2lCQUN4QjtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDVixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO2lCQUNqQjtZQUNILENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVO1FBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxZQUFZO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtZQUN6QyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1lBQzNELENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7WUFDakMsTUFBTSxFQUFFLE1BQU07WUFDZCxXQUFXLEVBQUUsU0FBUztZQUN0QixPQUFPLEVBQUU7Z0JBQ1AsY0FBYyxFQUFFLFlBQVk7YUFDN0I7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1lBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxLQUFjO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVM7WUFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztZQUN2QixDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsS0FBYztRQUM5QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZO1lBQ3JDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7WUFDMUIsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUNwQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVO1lBQ25DLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVU7WUFDeEIsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQVksRUFBRSxTQUE2QixFQUFFO1FBQ3JFLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDM0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1NBQ2xEO1FBQ0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUU7UUFDakQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFZLEVBQUUsU0FBOEIsRUFBRTtRQUNsRSxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLE1BQU0sU0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ25DO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU8sVUFBVTtRQUNoQixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDMUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLENBQUM7UUFDM0MsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGdXNpb25BdXRoQ29uZmlnLCBVc2VySW5mbyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNlcnZpY2UgY2xhc3MgdG8gdXNlIHdpdGggRnVzaW9uQXV0aCBiYWNrZW5kIGVuZHBvaW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEZ1c2lvbkF1dGhTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZzogRnVzaW9uQXV0aENvbmZpZyxcbiAgKSB7IH1cblxuICAvKipcbiAgICogQ2FsbHMgdGhlICdtZScgZW5kcG9pbnQgdG8gcmV0cmlldmUgdXNlciBpbmZvLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJJbmZvPn0gdGhlIHVzZXIgaW5mbyByZXNwb25zZS5cbiAgICovXG4gIGFzeW5jIGdldFVzZXJJbmZvKCk6IFByb21pc2U8VXNlckluZm8+IHtcbiAgICBjb25zdCBwYXRoID0gISF0aGlzLmNvbmZpZy5tZVBhdGhcbiAgICAgID8gdGhpcy5jb25maWcubWVQYXRoXG4gICAgICA6ICcvYXBwL21lJztcbiAgICBjb25zdCB1cmkgPSB0aGlzLmdldFVybEZvclBhdGgocGF0aCk7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGZldGNoKHVyaS5ocmVmLCB7XG4gICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgIH0pO1xuICAgIHJldHVybiBKU09OLnBhcnNlKGF3YWl0IHJlc3AudGV4dCgpKSBhcyBVc2VySW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgZm9yIHRoZSAnYXBwLmF0X2V4cCcgY29va2llIGFuZCBpZiBwcmVzZW50IHNldHMgYSB0aW1lciB0byByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4uXG4gICAqIFdpbGwgYXR0ZW1wdCB0byByZWZyZXNoIHRoZSBjb25maWd1cmVkIHNlY29uZHMgYmVmb3JlIHRoZSBhY2Nlc3MgdG9rZW4gZXhwaXJlcyAoZGVmYXVsdCBpcyB0ZW4gc2Vjb25kcykuXG4gICAqL1xuICBpbml0QXV0b1JlZnJlc2goKTogdm9pZCB7XG4gICAgY29uc3QgZXhwID0gdGhpcy5nZXRFeHBUaW1lKCk7XG4gICAgaWYgKGV4cCkge1xuICAgICAgY29uc3QgcmVmcmVzaEJlZm9yZVNlY29uZHMgPSB0aGlzLmNvbmZpZy5hdXRvUmVmcmVzaFNlY29uZHNCZWZvcmVFeHBpcnlcbiAgICAgICAgPyB0aGlzLmNvbmZpZy5hdXRvUmVmcmVzaFNlY29uZHNCZWZvcmVFeHBpcnlcbiAgICAgICAgOiAxMDtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgY29uc3QgcmVmcmVzaFRpbWUgPSBleHAgLSAocmVmcmVzaEJlZm9yZVNlY29uZHMgKiAxMDAwKTtcbiAgICAgIGxldCB0aW1lVGlsbFRoZW4gPSByZWZyZXNoVGltZSAtIG5vdztcbiAgICAgIGlmICh0aW1lVGlsbFRoZW4gPD0gMCkge1xuICAgICAgICB0aW1lVGlsbFRoZW4gPSAwO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgICB0aGlzLmluaXRBdXRvUmVmcmVzaCgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICB9XG4gICAgICB9LCB0aW1lVGlsbFRoZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhhdCB0aGUgJ2FwcC5hdF9leHAnIGNvb2tpZSBpcyBwcmVzZW50IGFuZCBmb3IgYSB0aW1lIGluIHRoZSBmdXR1cmUgdG8gZGV0ZXJtaW5lIGxvZ2dlZC1pbiBzdGF0ZS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gYXBwLmF0X2V4cCBpcyBwcmVzZW50IGFuZCBub3QgZm9yIGEgdGltZSBpbiB0aGUgcGFzdFxuICAgKi9cbiAgaXNMb2dnZWRJbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuZ2V0RXhwVGltZSgpID8/IDApID4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgdGhlIGNvbmZpZ3VyZWQgJ3JlZnJlc2gnIGVuZHBvaW50IHRvIGF0dGVtcHQgdG8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGNvb2tpZS5cbiAgICovXG4gIGFzeW5jIHJlZnJlc2hUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXRoID0gISF0aGlzLmNvbmZpZy50b2tlblJlZnJlc2hQYXRoXG4gICAgICA/IGAke3RoaXMuY29uZmlnLnRva2VuUmVmcmVzaFBhdGh9LyR7dGhpcy5jb25maWcuY2xpZW50SWR9YFxuICAgICAgOiBgL2FwcC9yZWZyZXNoLyR7dGhpcy5jb25maWcuY2xpZW50SWR9YDtcbiAgICBjb25zdCB1cmkgPSB0aGlzLmdldFVybEZvclBhdGgocGF0aCk7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IGZldGNoKHVyaS5ocmVmLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC9wbGFpbicsXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCEocmVzcC5zdGF0dXMgPj0gMjAwICYmIHJlc3Auc3RhdHVzIDwgMzAwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdlcnJvciByZWZyZXNoaW5nIGFjY2VzcyB0b2tlbiBpbiBmdXNpb25hdXRoJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZXMgYSByZWRpcmVjdCB0byB0aGUgY29uZmlndXJlZCAnbG9naW4nIGVuZHBvaW50LlxuICAgKi9cbiAgc3RhcnRMb2dpbihzdGF0ZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBhdGggPSAhIXRoaXMuY29uZmlnLmxvZ2luUGF0aFxuICAgICAgPyB0aGlzLmNvbmZpZy5sb2dpblBhdGhcbiAgICAgIDogJy9hcHAvbG9naW4nO1xuICAgICEhc3RhdGUgPyB0aGlzLmRvUmVkaXJlY3RGb3JQYXRoKHBhdGgsIHtzdGF0ZX0pIDogdGhpcy5kb1JlZGlyZWN0Rm9yUGF0aChwYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2VzIGEgcmVkaXJlY3QgdG8gdGhlIGNvbmZpZ3VyZWQgJ3JlZnJlc2gnIGVuZHBvaW50LlxuICAgKi9cbiAgc3RhcnRSZWdpc3RyYXRpb24oc3RhdGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXRoID0gISF0aGlzLmNvbmZpZy5yZWdpc3RlclBhdGhcbiAgICAgID8gdGhpcy5jb25maWcucmVnaXN0ZXJQYXRoXG4gICAgICA6ICcvYXBwL3JlZ2lzdGVyJztcbiAgICAhIXN0YXRlID8gdGhpcy5kb1JlZGlyZWN0Rm9yUGF0aChwYXRoLCB7c3RhdGV9KSA6IHRoaXMuZG9SZWRpcmVjdEZvclBhdGgocGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlcyBhIHJlZGlyZWN0IHRvIHRoZSBjb25maWd1cmVkICdsb2dvdXQnIGVuZHBvaW50LlxuICAgKi9cbiAgbG9nb3V0KCk6IHZvaWQge1xuICAgIGNvbnN0IHBhdGggPSAhIXRoaXMuY29uZmlnLmxvZ291dFBhdGhcbiAgICAgID8gdGhpcy5jb25maWcubG9nb3V0UGF0aFxuICAgICAgOiAnL2FwcC9sb2dvdXQnO1xuICAgIHRoaXMuZG9SZWRpcmVjdEZvclBhdGgocGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGRvUmVkaXJlY3RGb3JQYXRoKHBhdGg6IHN0cmluZywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLGFueT4gPSB7fSkge1xuICAgIHBhdGggPSBwYXRoICsgYC8ke3RoaXMuY29uZmlnLmNsaWVudElkfWA7XG4gICAgaWYgKHRoaXMuY29uZmlnLnJlZGlyZWN0VXJpKSB7XG4gICAgICBwYXJhbXNbJ3JlZGlyZWN0X3VyaSddID0gdGhpcy5jb25maWcucmVkaXJlY3RVcmk7XG4gICAgfVxuICAgIGxldCBsb2NhdGlvbiA9IHRoaXMuZ2V0VXJsRm9yUGF0aChwYXRoLCBwYXJhbXMpIDtcbiAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGxvY2F0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXJsRm9yUGF0aChwYXRoOiBzdHJpbmcsIHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogVVJMIHtcbiAgICBsZXQgdXJsID0gbmV3IFVSTCh0aGlzLmNvbmZpZy5zZXJ2ZXJVcmwpO1xuICAgIHVybC5wYXRobmFtZSA9IHBhdGg7XG4gICAgaWYgKE9iamVjdC5lbnRyaWVzKHBhcmFtcykubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXJhbXMpO1xuICAgICAgdXJsLnNlYXJjaCA9IHVybFBhcmFtcy50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHBUaW1lKCk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IGV4cENvb2tpZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKVxuICAgICAgLm1hcChjID0+IGMuc3BsaXQoJz0nKSlcbiAgICAgIC5maW5kKChbbmFtZV0pID0+IG5hbWUgPT09ICdhcHAuYXRfZXhwJyk7XG4gICAgcmV0dXJuIGV4cENvb2tpZSA/IHBhcnNlSW50KGV4cENvb2tpZVsxXSkgKiAxMDAwIDogbnVsbDtcbiAgfVxufVxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mdXNpb25hdXRoLWFuZ3VsYXItc2RrL3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRnVzaW9uQXV0aENvbmZpZyB7XG4gIHNlcnZlclVybDogc3RyaW5nO1xuICBjbGllbnRJZDogc3RyaW5nO1xuICByZWRpcmVjdFVyaT86IHN0cmluZztcblxuICBhdXRvUmVmcmVzaFNlY29uZHNCZWZvcmVFeHBpcnk/OiBudW1iZXI7XG4gIGxvZ2luUGF0aD86IHN0cmluZztcbiAgbG9nb3V0UGF0aD86IHN0cmluZztcbiAgcmVnaXN0ZXJQYXRoPzogc3RyaW5nO1xuICB0b2tlblJlZnJlc2hQYXRoPzogc3RyaW5nO1xuICBtZVBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckluZm8ge1xuICBhcHBsaWNhdGlvbklkPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgZW1haWxfdmVyaWZpZWQ/OiBib29sZWFuO1xuICBmYW1pbHlfbmFtZT86IHN0cmluZztcbiAgZ2l2ZW5fbmFtZT86IHN0cmluZztcbiAgcGljdHVyZT86IHN0cmluZztcbiAgcm9sZXM/OiBhbnlbXTtcbiAgc2lkPzogc3RyaW5nO1xuICBzdWI/OiBzdHJpbmc7XG4gIHRpZD86IHN0cmluZztcbiAgcGhvbmVfbnVtYmVyPzogc3RyaW5nO1xufVxuIl19