oidc-client-rx
Version:
ReactiveX enhanced OIDC and OAuth2 protocol support for browser-based JavaScript applications
43 lines (42 loc) • 2.44 kB
JavaScript
import { Injectable, inject } from "injection-js";
import { Observable, Subject } from "rxjs";
import { tap } from "rxjs/operators";
import { FlowHelper } from "../utils/flowHelper/flow-helper.service.js";
import { UrlService } from "../utils/url/url.service.js";
import { CodeFlowCallbackService } from "./code-flow-callback.service.js";
import { ImplicitFlowCallbackService } from "./implicit-flow-callback.service.js";
function _ts_decorate(decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
}
class CallbackService {
get stsCallback$() {
return this.stsCallbackInternal$.asObservable();
}
isCallback(currentUrl, config) {
if (!currentUrl) return false;
return this.urlService.isCallbackFromSts(currentUrl, config);
}
handleCallbackAndFireEvents(currentCallbackUrl, config, allConfigs) {
let callback$ = new Observable();
if (this.flowHelper.isCurrentFlowCodeFlow(config)) callback$ = this.codeFlowCallbackService.authenticatedCallbackWithCode(currentCallbackUrl, config, allConfigs);
else if (this.flowHelper.isCurrentFlowAnyImplicitFlow(config)) if (currentCallbackUrl?.includes("#")) {
const hash = currentCallbackUrl.substring(currentCallbackUrl.indexOf("#") + 1);
callback$ = this.implicitFlowCallbackService.authenticatedImplicitFlowCallback(config, allConfigs, hash);
} else callback$ = this.implicitFlowCallbackService.authenticatedImplicitFlowCallback(config, allConfigs);
return callback$.pipe(tap(()=>this.stsCallbackInternal$.next()));
}
constructor(){
this.urlService = inject(UrlService);
this.flowHelper = inject(FlowHelper);
this.implicitFlowCallbackService = inject(ImplicitFlowCallbackService);
this.codeFlowCallbackService = inject(CodeFlowCallbackService);
this.stsCallbackInternal$ = new Subject();
}
}
CallbackService = _ts_decorate([
Injectable()
], CallbackService);
export { CallbackService };