kinde-angular
Version:
Angular wrapper for the Kinde TypeScript SDK
56 lines • 11.6 kB
JavaScript
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=