lml-main
Version:
This is now a mono repository published into many standalone packages.
59 lines (50 loc) • 1.52 kB
text/typescript
import { combineEpics } from 'redux-observable'
import * as uuid from 'uuid'
import { AppState } from '../../root/reducers'
import { cosmoApiEpics } from '@lml/cosmo-redux-api'
import { cosmoUiAuthEpic, getAuthHeaders } from '@lml/cosmo-ui-auth'
import { createCosmoUiEpics, CosmoUiConfig } from 'cosmoui'
import * as RxHTTP from 'redux-rx-http'
import { pusherEpics } from './pusher'
import { coreUiEpics } from '@lml/core-ui'
import { config } from '../../config'
import { authEpics } from '../../auth/epics'
const mkTraceID = () => `WEB-UI-${uuid()}`
export const mkHeaders = (state: AppState) => ({
...getAuthHeaders(state, 'Auth'),
'Source': 'ui',
'X-Trace-Id': mkTraceID(),
'Content-Type': 'application/json',
})
export const mkHttpConfig = (state: AppState): RxHTTP.RxHttpRequestBase => ({
json: true,
headers: mkHeaders(state),
baseUrl: `https://${config.API_HOST}`,
})
const rxHttpEpic = RxHTTP.createRxHttpEpic(mkHttpConfig)
const cosmoConfig: CosmoUiConfig = {
edq: {
token: config.EDQ_TOKEN,
url: config.EDQ_URL,
},
gmaps: {
url: config.GOOGLE_MAPS_API_URL,
key: config.GOOGLE_MAPS_API_KEY,
},
}
export interface EpicDependencies {
fetch: RxHTTP.Fetch,
}
export const epicDependencies: EpicDependencies = {
fetch,
}
export const rootEpic = combineEpics(
// external
cosmoApiEpics,
createCosmoUiEpics(cosmoConfig),
rxHttpEpic,
cosmoUiAuthEpic,
pusherEpics,
coreUiEpics,
authEpics,
)