UNPKG

oidc-client-rx

Version:

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

104 lines (103 loc) 3.49 kB
import { HttpClient, HttpFeatureKind, HttpHeaders, withInterceptors, withLegacyInterceptors } from "@ngify/http"; import { InjectionToken, Optional } from "injection-js"; import { HttpParams } from "./params.js"; const HTTP_FEATURES = new InjectionToken("HTTP_FEATURES"); const HTTP_INTERCEPTOR_FNS = new InjectionToken("HTTP_INTERCEPTOR_FNS"); const HTTP_LEGACY_INTERCEPTORS = new InjectionToken("HTTP_LEGACY_INTERCEPTORS"); const HTTP_BACKEND = new InjectionToken("HTTP_BACKEND"); const HTTP_XSRF_PROTECTION = new InjectionToken("HTTP_XSRF_PROTECTION"); function provideHttpClient(features = []) { return [ { provide: HTTP_INTERCEPTOR_FNS, multi: true, useValue: [] }, { provide: HTTP_LEGACY_INTERCEPTORS, multi: true, useValue: [] }, { provide: HTTP_FEATURES, useFactory: (interceptors)=>{ const normalizedInterceptors = [ interceptors ].flat(Number.MAX_SAFE_INTEGER).filter(Boolean); return normalizedInterceptors.length ? [ withInterceptors(normalizedInterceptors) ] : []; }, multi: true, deps: [ HTTP_INTERCEPTOR_FNS ] }, { provide: HTTP_FEATURES, useFactory: (interceptors)=>{ const normalizedInterceptors = [ interceptors ].flat(Number.MAX_SAFE_INTEGER).filter(Boolean); return normalizedInterceptors.length ? [ withLegacyInterceptors(normalizedInterceptors) ] : []; }, multi: true, deps: [ HTTP_LEGACY_INTERCEPTORS ] }, { provide: HTTP_FEATURES, useFactory: (backend)=>backend ? [ { kind: HttpFeatureKind.Backend, value: backend } ] : [], multi: true, deps: [ [ new Optional(), HTTP_BACKEND ] ] }, { provide: HTTP_FEATURES, useFactory: (interceptor)=>interceptor ? [ { kind: HttpFeatureKind.XsrfProtection, value: interceptor } ] : [], multi: true, deps: [ [ new Optional(), HTTP_XSRF_PROTECTION ] ] }, { provide: HTTP_FEATURES, useValue: features, multi: true }, { provide: HTTP_CLIENT, useFactory: (features)=>{ const normalizedFeatures = [ features ].flat(Number.MAX_SAFE_INTEGER).filter(Boolean); return new HttpClient(...normalizedFeatures); }, deps: [ HTTP_FEATURES ] } ]; } const HTTP_CLIENT = new InjectionToken("HTTP_CLIENT"); export { HttpClient as DefaultHttpClient, HTTP_BACKEND, HTTP_CLIENT, HTTP_FEATURES, HTTP_INTERCEPTOR_FNS, HTTP_LEGACY_INTERCEPTORS, HTTP_XSRF_PROTECTION, HttpHeaders, HttpParams, provideHttpClient };