UNPKG

kinde-angular

Version:

Angular wrapper for the Kinde TypeScript SDK

56 lines 11.6 kB
import { Inject, Injectable } from '@angular/core'; import { BehaviorSubject, filter, ReplaySubject, distinctUntilChanged, switchMap, defer, shareReplay, concatMap, of, scan, merge, mergeMap, combineLatestWith } from "rxjs"; import { KINDE_FACTORY_TOKEN } from "./kinde-client-factory.service"; import * as i0 from "@angular/core"; export class AuthStateService { constructor(kindeClient) { this.kindeClient = kindeClient; /** * A variant of Subject that requires an initial value and emits its current value whenever it is subscribed to. * We use BehaviorSubject because we want the initial value to be true */ this.isLoadingSubject$ = new BehaviorSubject(true); /** * A variant of Subject that "replays" old values to new subscribers by emitting them when they first subscribe. * We buffer the last emitted value and emit it to new subscribers if subscribed. */ this._accessToken$ = new ReplaySubject(1); this._user$ = new ReplaySubject(1); this.accessTokenStream$ = this._accessToken$.pipe(scan((acc, token) => ({ prev: acc.current, current: token, }), { prev: null, current: null }), filter(state => state.current !== state.prev)); this.isLoading$ = this.isLoadingSubject$.asObservable(); this.isAuthenticatedStream$ = this.isLoading$.pipe(filter(isLoading => !isLoading && this.kindeClient !== null), distinctUntilChanged(), switchMap(() => merge(defer(() => this.kindeClient.isAuthenticated()), this.accessTokenStream$.pipe(mergeMap(() => this.kindeClient.isAuthenticated()))))); this.isAuthenticated$ = this.isAuthenticatedStream$.pipe(distinctUntilChanged(), shareReplay(1)); this._userCache$ = this.isAuthenticatedStream$.pipe(filter(_ => this.kindeClient !== null), switchMap(isAuthenticated => isAuthenticated ? this.kindeClient.getUser() : of(null)), shareReplay(1)); this.user$ = this.isAuthenticatedStream$.pipe(filter(_ => this.kindeClient !== null), combineLatestWith(this._userCache$), concatMap(([isAuthenticated, cachedUser]) => { if (cachedUser) { return of(cachedUser); } return isAuthenticated ? this.kindeClient.getUserProfile() : of(null); })); this.accessToken$ = this.isAuthenticatedStream$.pipe(filter(_ => this.kindeClient !== null), concatMap(isAuthenticated => isAuthenticated ? this.kindeClient.getToken() : of(null))); } setIsLoading(isLoading) { this.isLoadingSubject$.next(isLoading); } setAccessToken(accessToken) { this._accessToken$.next(accessToken); } setUser(user) { this._user$.next(user); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: AuthStateService, deps: [{ token: KINDE_FACTORY_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: AuthStateService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: AuthStateService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Inject, args: [KINDE_FACTORY_TOKEN] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMva2luZGUtYW5ndWxhci9zcmMvbGliL2F1dGgtc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLE1BQU0sRUFDTixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxFQUFFLEVBQ0YsSUFBSSxFQUNKLEtBQUssRUFDTCxRQUFRLEVBQ1IsaUJBQWlCLEVBQ2xCLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBV3JFLE1BQU0sT0FBTyxnQkFBZ0I7SUFvRTNCLFlBQWlELFdBQStCO1FBQS9CLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQW5FaEY7OztXQUdHO1FBQ0ssc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDL0Q7OztXQUdHO1FBQ0ssa0JBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUU3QyxXQUFNLEdBQUcsSUFBSSxhQUFhLENBQVcsQ0FBQyxDQUFDLENBQUM7UUFFeEMsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ2xELElBQUksQ0FBQyxDQUFDLEdBQXFCLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTztZQUNqQixPQUFPLEVBQUUsS0FBSztTQUNmLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQ2xDLE1BQU0sQ0FBQyxLQUFLLENB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QUFnQixjQUZmLE1BQU07OzJGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQXFFYyxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBmaWx0ZXIsXG4gIFJlcGxheVN1YmplY3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBzd2l0Y2hNYXAsXG4gIGRlZmVyLFxuICBzaGFyZVJlcGxheSxcbiAgY29uY2F0TWFwLFxuICBvZixcbiAgc2NhbixcbiAgbWVyZ2UsXG4gIG1lcmdlTWFwLFxuICBjb21iaW5lTGF0ZXN0V2l0aFxufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgS2luZGVDbGllbnQgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2tpbmRlLWNsaWVudC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IEtJTkRFX0ZBQ1RPUllfVE9LRU4gfSBmcm9tIFwiLi9raW5kZS1jbGllbnQtZmFjdG9yeS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBVc2VyVHlwZSB9IGZyb20gXCJAa2luZGUtb3NzL2tpbmRlLXR5cGVzY3JpcHQtc2RrXCI7XG5cbmludGVyZmFjZSBUb2tlblN0cmVhbVN0YXRlIHtcbiAgcHJldjogc3RyaW5nIHwgbnVsbDtcbiAgY3VycmVudDogc3RyaW5nIHwgbnVsbDtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQXV0aFN0YXRlU2VydmljZSB7XG4gIC8qKlxuICAgKiBBIHZhcmlhbnQgb2YgU3ViamVjdCB0aGF0IHJlcXVpcmVzIGFuIGluaXRpYWwgdmFsdWUgYW5kIGVtaXRzIGl0cyBjdXJyZW50IHZhbHVlIHdoZW5ldmVyIGl0IGlzIHN1YnNjcmliZWQgdG8uXG4gICAqIFdlIHVzZSBCZWhhdmlvclN1YmplY3QgYmVjYXVzZSB3ZSB3YW50IHRoZSBpbml0aWFsIHZhbHVlIHRvIGJlIHRydWVcbiAgICovXG4gIHByaXZhdGUgaXNMb2FkaW5nU3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAvKipcbiAgICogQSB2YXJpYW50IG9mIFN1YmplY3QgdGhhdCBcInJlcGxheXNcIiBvbGQgdmFsdWVzIHRvIG5ldyBzdWJzY3JpYmVycyBieSBlbWl0dGluZyB0aGVtIHdoZW4gdGhleSBmaXJzdCBzdWJzY3JpYmUuXG4gICAqIFdlIGJ1ZmZlciB0aGUgbGFzdCBlbWl0dGVkIHZhbHVlIGFuZCBlbWl0IGl0IHRvIG5ldyBzdWJzY3JpYmVycyBpZiBzdWJzY3JpYmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWNjZXNzVG9rZW4kID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nPigxKTtcblxuICBwcml2YXRlIF91c2VyJCA9IG5ldyBSZXBsYXlTdWJqZWN0PFVzZXJUeXBlPigxKTtcblxuICBwcml2YXRlIGFjY2Vzc1Rva2VuU3RyZWFtJCA9IHRoaXMuX2FjY2Vzc1Rva2VuJC5waXBlKFxuICAgIHNjYW4oKGFjYzogVG9rZW5TdHJlYW1TdGF0ZSwgdG9rZW46IHN0cmluZykgPT4gKHtcbiAgICAgIHByZXY6IGFjYy5jdXJyZW50LFxuICAgICAgY3VycmVudDogdG9rZW4sXG4gICAgfSksIHsgcHJldjogbnVsbCwgY3VycmVudDogbnVsbCB9KSxcbiAgICBmaWx0ZXIoc3RhdGUgPT4gc3RhdGUuY3VycmVudCAhPT0gc3RhdGUucHJldiksXG4gICk7XG5cbiAgaXNMb2FkaW5nJCA9IHRoaXMuaXNMb2FkaW5nU3ViamVjdCQuYXNPYnNlcnZhYmxlKCk7XG4gIGlzQXV0aGVudGljYXRlZFN0cmVhbSQgPSB0aGlzLmlzTG9hZGluZyQucGlwZShcbiAgICBmaWx0ZXIoaXNMb2FkaW5nID0+ICFpc0xvYWRpbmcgJiYgdGhpcy5raW5kZUNsaWVudCAhPT0gbnVsbCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIG1lcmdlKFxuICAgICAgICBkZWZlcigoKSA9PiB0aGlzLmtpbmRlQ2xpZW50IS5pc0F1dGhlbnRpY2F0ZWQoKSksXG4gICAgICAgIHRoaXMuYWNjZXNzVG9rZW5TdHJlYW0kLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5raW5kZUNsaWVudCEuaXNBdXRoZW50aWNhdGVkKCkpLFxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGlzQXV0aGVudGljYXRlZCQgPSB0aGlzLmlzQXV0aGVudGljYXRlZFN0cmVhbSQucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcHJpdmF0ZSBfdXNlckNhY2hlJCA9IHRoaXMuaXNBdXRoZW50aWNhdGVkU3RyZWFtJC5waXBlKFxuICAgIGZpbHRlcihfID0+IHRoaXMua2luZGVDbGllbnQgIT09IG51bGwpLFxuICAgIHN3aXRjaE1hcChpc0F1dGhlbnRpY2F0ZWQgPT5cbiAgICAgIGlzQXV0aGVudGljYXRlZCA/IHRoaXMua2luZGVDbGllbnQhLmdldFVzZXIoKSA6IG9mKG51bGwpXG4gICAgKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHVzZXIkID0gdGhpcy5pc0F1dGhlbnRpY2F0ZWRTdHJlYW0kLnBpcGUoXG4gICAgZmlsdGVyKF8gPT4gdGhpcy5raW5kZUNsaWVudCAhPT0gbnVsbCksXG4gICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy5fdXNlckNhY2hlJCksXG4gICAgY29uY2F0TWFwKChbaXNBdXRoZW50aWNhdGVkLCBjYWNoZWRVc2VyXSkgPT4ge1xuICAgICAgICBpZiAoY2FjaGVkVXNlcikge1xuICAgICAgICAgIHJldHVybiBvZihjYWNoZWRVc2VyKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0F1dGhlbnRpY2F0ZWQgPyB0aGlzLmtpbmRlQ2xpZW50IS5nZXRVc2VyUHJvZmlsZSgpIDogb2YobnVsbClcbiAgICAgIH1cbiAgICApLFxuICApO1xuXG4gIGFjY2Vzc1Rva2VuJCA9IHRoaXMuaXNBdXRoZW50aWNhdGVkU3RyZWFtJC5waXBlKFxuICAgIGZpbHRlcihfID0+IHRoaXMua2luZGVDbGllbnQgIT09IG51bGwpLFxuICAgIGNvbmNhdE1hcChpc0F1dGhlbnRpY2F0ZWQgPT5cbiAgICAgIGlzQXV0aGVudGljYXRlZCA/IHRoaXMua2luZGVDbGllbnQhLmdldFRva2VuKCkgOiBvZihudWxsKVxuICAgICksXG4gIClcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEtJTkRFX0ZBQ1RPUllfVE9LRU4pIHByaXZhdGUga2luZGVDbGllbnQ6IEtpbmRlQ2xpZW50IHwgbnVsbCkge1xuICB9XG5cbiAgc2V0SXNMb2FkaW5nKGlzTG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNMb2FkaW5nU3ViamVjdCQubmV4dChpc0xvYWRpbmcpO1xuICB9XG5cbiAgc2V0QWNjZXNzVG9rZW4oYWNjZXNzVG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2FjY2Vzc1Rva2VuJC5uZXh0KGFjY2Vzc1Rva2VuKTtcbiAgfVxuXG4gIHNldFVzZXIodXNlcjogVXNlclR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLl91c2VyJC5uZXh0KHVzZXIpO1xuICB9XG59XG4iXX0=