UNPKG

oidc-client-rx

Version:

ReactiveX enhanced OIDC and OAuth2 protocol support for browser-based JavaScript applications

43 lines (42 loc) 2.44 kB
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 };