import { merge } from 'lodash' import { OrganizationConfig, SdkConfig } from './interfaces' import { Auth, Elements, Files, Geojson, Iot, Listing, Notifications, Organizations, Privileges, Tickets, } from './services' import { Api } from './services/api' import { ApiConfig, DEFAULT_API_CONFIG } from './services/api/api-config' import { Batch } from './services/edocu/batch' import { Calendar } from './services/edocu/calendar' import { Comments } from './services/edocu/comments' import { Editors } from './services/edocu/editors' import { Exports } from './services/edocu/exports' import { Graph } from './services/edocu/graph' import { History } from './services/edocu/history' import { Registration } from './services/edocu/registration' import { Translations } from './services/edocu/translations' import { WorkRecords } from './services/edocu/workRecords' import { IMI } from './services/imi/imi' import { MainStore, Services } from './stores/mainStore' type BackendApiConfig = Partial & { apiKey: string user: string } export type BackendConfig = BackendApiConfig & OrganizationConfig & SdkConfig const setupBackendApi = (config: BackendApiConfig): Api => { const mergedConfig = merge({}, DEFAULT_API_CONFIG, config) return new Api({ ...mergedConfig, headers: { 'x-api-key': config.apiKey, uid: config.user, }, }) } export const setupBackend = (config: BackendConfig) => { const api = setupBackendApi(config) const mainStore = new MainStore(api, config) return mainStore } export const setupServices = (config: BackendApiConfig): Services => { const api = setupBackendApi(config) return { api, auth: new Auth(api), comments: new Comments(api), privileges: new Privileges(api), elements: new Elements(api), batch: new Batch(api), listing: new Listing(api), exports: new Exports(api), iot: new Iot(api), graph: new Graph(api), editors: new Editors(api), organizations: new Organizations(api), geojson: new Geojson(api), notifications: new Notifications(api), tickets: new Tickets(api), translations: new Translations(api), history: new History(api), calendar: new Calendar(api), workRecords: new WorkRecords(api), registration: new Registration(api), files: new Files(api), imi: new IMI(api), } }