oidc-client-rx
Version:
ReactiveX enhanced OIDC and OAuth2 protocol support for browser-based JavaScript applications
104 lines (103 loc) • 3.49 kB
JavaScript
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 };