UNPKG

@deejayy/api-caller

Version:

Simple Api Caller library for Angular

1 lines 31.6 kB
{"version":3,"file":"deejayy-api-caller.mjs","sources":["../../../projects/api-caller/src/lib/model/api-state-id.ts","../../../projects/api-caller/src/lib/store/api.actions.ts","../../../projects/api-caller/src/lib/store/api.state.ts","../../../projects/api-caller/src/lib/store/api.selectors.ts","../../../projects/api-caller/src/lib/service/api-connector.ts","../../../projects/api-caller/src/lib/service/api-caller.service.ts","../../../projects/api-caller/src/lib/helper/produce-on.ts","../../../projects/api-caller/src/lib/store/api.reducer.ts","../../../projects/api-caller/src/lib/store/api.effects.ts","../../../projects/api-caller/src/lib/api-caller.module.ts","../../../projects/api-caller/src/deejayy-api-caller.ts"],"sourcesContent":["export const apiStateId: string = '@deejayy/api-caller';\n","import { createAction, props } from '@ngrx/store';\n\nimport { ApiCallItem, ApiInterface } from '../model/api-call-item.model';\nimport { Payload } from '../helper/payload.model';\n\nexport class ApiActions {\n public static ApiGet = createAction('[API] Get', props<Payload<ApiCallItem>>());\n public static ApiGetCancel = createAction('[API] Get Cancel', props<Payload<ApiCallItem>>());\n public static ApiGetSuccess = createAction('[API] Get Success', props<ApiInterface>());\n public static ApiGetFail = createAction('[API] Get Fail', props<ApiInterface>());\n public static ApiGetFromCache = createAction('[API] Get From Cache', props<Payload<ApiCallItem>>());\n public static ApiClearState = createAction('[API] Clear State', props<Payload<ApiCallItem>>());\n public static ApiClearAllState = createAction('[API] Clear Full State');\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nexport interface ApiState {\n loading: boolean;\n success: boolean;\n error: boolean;\n data: any;\n headers: Record<string, string>;\n errorData: HttpErrorResponse;\n fired: Date | undefined;\n returned: Date | undefined;\n}\n\nexport type GlobalApiState = Record<string, ApiState>;\n\nexport interface ApiResultState<T = any> {\n loading$: Observable<boolean>;\n success$: Observable<boolean>;\n error$: Observable<boolean>;\n finished$: Observable<boolean>;\n data$: Observable<T>;\n headers$: Observable<Record<string, string>>;\n errorData$: Observable<HttpErrorResponse>;\n}\n\nexport const initialApiCallerGlobalState: GlobalApiState = {};\n\nexport const initialApiCallerState: ApiState = {\n loading: false,\n success: false,\n error: false,\n data: null,\n headers: {},\n errorData: new HttpErrorResponse({}),\n fired: undefined,\n returned: undefined,\n};\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport { ApiCallItem } from '../model/api-call-item.model';\nimport { apiStateId } from '../model/api-state-id';\nimport { ApiState, GlobalApiState, initialApiCallerState } from './api.state';\n\nexport const getStateId = (payload: ApiCallItem): string => `${payload.api ?? ''}${payload.idOverride ?? payload.path}`;\n\nconst getApiState = createFeatureSelector<GlobalApiState>(apiStateId);\nconst getApiSubState = (stateId: string) =>\n createSelector(getApiState, (state: GlobalApiState) =>\n state?.[stateId] ? state[stateId] ?? initialApiCallerState : initialApiCallerState,\n );\n\nexport class ApiSelectors {\n public static isLoading = (stateId: string) =>\n createSelector(getApiSubState(stateId), (state: ApiState) => state.loading);\n\n public static getResponse = (stateId: string) =>\n createSelector(getApiSubState(stateId), (state: ApiState) => state.data);\n\n public static getHeaders = (stateId: string) =>\n createSelector(getApiSubState(stateId), (state: ApiState) => state.headers);\n\n public static getErrorData = (stateId: string) =>\n createSelector(getApiSubState(stateId), (state: ApiState) => state.errorData);\n\n public static isFailed = (stateId: string) =>\n createSelector(getApiSubState(stateId), (state: ApiState) => state.error);\n\n public static isSucceeded = (stateId: string) =>\n createSelector(getApiSubState(stateId), (state: ApiState) => state.success);\n\n public static isFinished = (stateId: string) =>\n createSelector(getApiSubState(stateId), (state: ApiState) => state.success || state.error);\n\n public static isCached = (stateId: string, cacheTimeout?: number) =>\n createSelector(getApiSubState(stateId), (state: ApiState) => {\n if (state.returned && cacheTimeout) {\n if (new Date().getTime() - state.returned.getTime() > cacheTimeout) {\n return false;\n }\n }\n return state.data !== undefined && state.data !== null;\n });\n}\n","import { Observable } from 'rxjs';\nimport { ApiInterface } from '../model/api-call-item.model';\n\nexport class ApiConnector {\n public tokenData$!: Observable<string>;\n public defaultApiUrl!: string;\n public errorHandler!: (payload: ApiInterface) => void;\n}\n","import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http';\nimport { Injectable, Optional } from '@angular/core';\nimport { Store, select } from '@ngrx/store';\nimport { Observable, of } from 'rxjs';\nimport { mergeMap, take } from 'rxjs/operators';\n\nimport { Payload } from '../helper/payload.model';\nimport { ApiCallItem, ApiInterface, SimplifiedHttpOptions } from '../model/api-call-item.model';\nimport { apiStateId } from '../model/api-state-id';\nimport { ApiActions } from '../store/api.actions';\nimport { ApiSelectors, getStateId } from '../store/api.selectors';\nimport { ApiResultState, ApiState } from '../store/api.state';\nimport { ApiConnector } from './api-connector';\n\n@Injectable()\nexport class ApiCallerService {\n public tokenData$: Observable<string> = of(\n `[${apiStateId}] Can't send requests with authorization, token provider not found`,\n );\n\n public defaultApiUrl: string = '/';\n public errorHandler: (payload: ApiInterface) => void = (payload: ApiInterface) => {\n console.warn(`[${apiStateId}] Unhandled API error occurred, code: ${payload.response.status}`);\n };\n\n constructor(\n private http: HttpClient,\n private store: Store<ApiState>,\n @Optional() private apiConnector?: ApiConnector,\n ) {\n if (!this.apiConnector) {\n console.warn(`[${apiStateId}] apiConnector not provided, check README.md`);\n } else {\n this.tokenData$ = this.getTokenData();\n this.defaultApiUrl = this.getDefaultApiUrl();\n this.errorHandler = this.getErrorHandler();\n }\n }\n\n public getDefaultApiUrl(): string {\n return this.apiConnector?.defaultApiUrl ?? this.defaultApiUrl;\n }\n\n public getTokenData(): Observable<string> {\n return this.apiConnector?.tokenData$ ?? this.tokenData$;\n }\n\n public getErrorHandler(): (payload: ApiInterface) => void {\n return this.apiConnector?.errorHandler ?? this.errorHandler;\n }\n\n public handleError(payload: ApiInterface) {\n if (!payload.request?.localErrorHandling) {\n return this.getErrorHandler()(payload);\n }\n\n return 'Handled locally';\n }\n\n public getApiCallPayload(apiCallItem: ApiCallItem): Payload<ApiCallItem> {\n return {\n payload: {\n ...apiCallItem,\n api: apiCallItem.api ?? this.getDefaultApiUrl(),\n },\n };\n }\n\n public callApi<ResponseType>(apiCallItem: ApiCallItem): ApiResultState<ResponseType> {\n // Workaround to avoid \"TypeError: Cannot freeze\" error, native primitives (like FileList) cannot be passed to the state manager\n // See: https://stackoverflow.com/a/53092520\n if (apiCallItem.binaryUpload) {\n apiCallItem.payload =\n apiCallItem.payload && apiCallItem.payload.length > 0 ? { ...apiCallItem.payload } : undefined;\n }\n this.store.dispatch(ApiActions.ApiGet(this.getApiCallPayload(apiCallItem)));\n return this.createApiResults<ResponseType>(apiCallItem);\n }\n\n public resetApi(apiCallItem: ApiCallItem) {\n this.store.dispatch(ApiActions.ApiClearState(this.getApiCallPayload(apiCallItem)));\n }\n\n public cancelRequest(apiCallItem: ApiCallItem) {\n this.store.dispatch(ApiActions.ApiGetCancel(this.getApiCallPayload(apiCallItem)));\n }\n\n public resetAllApi() {\n this.store.dispatch(ApiActions.ApiClearAllState());\n }\n\n public createApiResults<ResponseType>(apiCallItem: ApiCallItem): ApiResultState<ResponseType> {\n const stateId = getStateId(this.getApiCallPayload(apiCallItem).payload);\n return {\n loading$: this.store.pipe(select(ApiSelectors.isLoading(stateId))),\n data$: this.store.pipe(select(ApiSelectors.getResponse(stateId))),\n errorData$: this.store.pipe(select(ApiSelectors.getErrorData(stateId))),\n error$: this.store.pipe(select(ApiSelectors.isFailed(stateId))),\n success$: this.store.pipe(select(ApiSelectors.isSucceeded(stateId))),\n finished$: this.store.pipe(select(ApiSelectors.isFinished(stateId))),\n headers$: this.store.pipe(select(ApiSelectors.getHeaders(stateId))),\n };\n }\n\n // eslint-disable-next-line complexity\n public makeHeaders(call: ApiCallItem, options: SimplifiedHttpOptions) {\n let headers = new HttpHeaders();\n\n if (call.binaryUpload) {\n if (call.payload) {\n const formData: FormData = new FormData();\n formData.append(call.binaryUpload, call.payload[0] as Blob);\n options.body = formData;\n } else {\n console.warn(`[${apiStateId}] No file selected for upload but binaryUpload field name is set`);\n }\n }\n\n if (call.payloadType === 'urlEncoded') {\n headers = headers.append('Content-Type', 'application/x-www-form-urlencoded');\n const encodedData = Object.keys(call.payload as Record<string, unknown>)\n .map(\n (key) =>\n `${encodeURIComponent(key)}=${encodeURIComponent(\n (call.payload as Record<string, unknown>)[key] as string,\n )}`,\n )\n .join('&');\n options.body = encodedData;\n }\n\n if (call.payloadType === 'formData') {\n const formData = new FormData();\n Object.keys(call.payload as Record<string, unknown>).forEach((key) =>\n formData.append(key, (call.payload as Record<string, unknown>)[key] as string),\n );\n options.body = formData;\n }\n\n if (call.extraHeaders && Object.keys(call.extraHeaders).length > 0) {\n Object.keys(call.extraHeaders).forEach((key) => {\n if (call.extraHeaders?.[key] !== undefined) {\n headers.append(key, call.extraHeaders[key]!);\n }\n });\n }\n\n return headers;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, complexity\n public makeRequest(call: ApiCallItem): Observable<HttpResponse<any>> {\n const method = call.method ?? (call.payload ? 'POST' : 'GET');\n const { api } = call;\n const url = `${api ?? ''}${call.path}`;\n const options: SimplifiedHttpOptions = { body: call.payload, observe: 'response' };\n const headers = this.makeHeaders(call, options);\n\n if (call.binaryResponse) {\n options.responseType = 'blob';\n }\n\n if (call.sendCookies) {\n options.withCredentials = true;\n }\n\n if (call.needsAuth) {\n return this.getTokenData().pipe(\n take(1),\n mergeMap((token) => {\n options.headers = headers.set('Authorization', `Bearer ${token}`);\n return this.http.request(method, url, options);\n }),\n );\n }\n\n return this.http.request(method, url, options);\n }\n}\n","import { Draft, produce, enableMapSet } from 'immer';\nimport { ActionCreator, ActionType, on, ReducerTypes, Creator } from '@ngrx/store';\n\nenableMapSet();\n\nexport const produceOn = <C1 extends ActionCreator, S>(\n actionType: C1,\n callback: (draft: Draft<S>, action: ActionType<C1>) => void,\n): ReducerTypes<S, ActionCreator<string, Creator<C1[]>>[]> =>\n on(actionType, (state, action) => produce(state, (draft: Draft<S>) => callback(draft, action)));\n","import { HttpErrorResponse, HttpResponse } from '@angular/common/http';\nimport { createReducer } from '@ngrx/store';\nimport { Draft } from 'immer';\n\nimport { Payload } from '../helper/payload.model';\nimport { produceOn } from '../helper/produce-on';\nimport { ApiCallItem, ApiInterface } from '../model/api-call-item.model';\nimport { ApiActions } from './api.actions';\nimport { getStateId } from './api.selectors';\nimport { GlobalApiState, initialApiCallerGlobalState, initialApiCallerState } from './api.state';\n\nexport const apiGet = (draft: Draft<GlobalApiState>, action: Payload<ApiCallItem>) => {\n const stateId = getStateId(action.payload);\n draft[stateId] = {\n ...(draft[stateId] ?? initialApiCallerState),\n loading: true,\n error: false,\n success: false,\n fired: new Date(),\n };\n};\n\nexport const apiGetSuccess = (draft: Draft<GlobalApiState>, action: ApiInterface) => {\n const stateId = getStateId(action.request);\n draft[stateId] = {\n ...(draft[stateId] ?? initialApiCallerState),\n loading: false,\n error: false,\n success: true,\n returned: new Date(),\n headers: action.headers,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: (action.response as HttpResponse<any>)?.body,\n };\n};\n\nexport const apiGetFail = (draft: Draft<GlobalApiState>, action: ApiInterface) => {\n const stateId = getStateId(action.request);\n draft[stateId] = {\n ...(draft[stateId] ?? initialApiCallerState),\n loading: false,\n error: true,\n success: false,\n returned: new Date(),\n headers: action.headers,\n errorData: action.response as HttpErrorResponse,\n };\n};\n\nexport const apiGetFromCache = (draft: Draft<GlobalApiState>, action: Payload<ApiCallItem>) => {\n const stateId = getStateId(action.payload);\n draft[stateId] = {\n ...(draft[stateId] ?? initialApiCallerState),\n loading: false,\n error: false,\n success: true,\n };\n};\n\nexport const apiClearState = (draft: Draft<GlobalApiState>, action: Payload<ApiCallItem>) => {\n const stateId = getStateId(action.payload);\n draft[stateId] = initialApiCallerState;\n};\n\nexport const apiClearAllState = () => ({});\n\nexport const apiReducer = createReducer(\n initialApiCallerGlobalState,\n produceOn(ApiActions.ApiGet, apiGet),\n produceOn(ApiActions.ApiGetSuccess, apiGetSuccess),\n produceOn(ApiActions.ApiGetFail, apiGetFail),\n produceOn(ApiActions.ApiGetFromCache, apiGetFromCache),\n produceOn(ApiActions.ApiClearState, apiClearState),\n produceOn(ApiActions.ApiClearAllState, apiClearAllState),\n);\n","import { HttpResponse, HttpResponseBase } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { select, Store } from '@ngrx/store';\nimport { Observable, of } from 'rxjs';\nimport { catchError, filter, map, mergeMap, take, takeUntil } from 'rxjs/operators';\n\nimport { ApiCallItem } from '../model/api-call-item.model';\nimport { ApiCallerService } from '../service/api-caller.service';\nimport { ApiActions } from './api.actions';\nimport { ApiSelectors, getStateId } from './api.selectors';\nimport { ApiState } from './api.state';\n\n@Injectable()\nexport class ApiEffects {\n private parseHeaders(response: HttpResponseBase): Record<string, string> {\n return response?.headers\n ?.keys()\n .map((key) => {\n return { [key]: response.headers.get(key) ?? '' };\n })\n .reduce((acc, curr) => ({ ...acc, ...curr }), {});\n }\n\n public handleSuccess(request: ApiCallItem) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (response: HttpResponse<any>) => {\n return ApiActions.ApiGetSuccess({ request, response, headers: this.parseHeaders(response) });\n };\n }\n\n public handleError(request: ApiCallItem) {\n return (response: HttpResponseBase) =>\n of(ApiActions.ApiGetFail({ request, response, headers: this.parseHeaders(response) }));\n }\n\n public mergeWithCache(request: ApiCallItem) {\n return (isCached: boolean) => {\n return request.useCache && isCached\n ? of(ApiActions.ApiGetFromCache({ payload: request }))\n : this.apiService\n .makeRequest(request)\n .pipe(\n takeUntil(\n this.actions$.pipe(\n ofType(ApiActions.ApiGetCancel),\n filter((cancelledRequest) => getStateId(cancelledRequest.payload) === getStateId(request)),\n ),\n ),\n )\n .pipe(map(this.handleSuccess(request)), catchError(this.handleError(request)));\n };\n }\n\n public getApiEffect = ({ payload }: { payload: ApiCallItem }) => {\n const stateId = getStateId(payload);\n return this.store\n .pipe(select(ApiSelectors.isCached(stateId, payload.cacheTimeout)))\n .pipe(take(1), mergeMap(this.mergeWithCache(payload)));\n };\n\n public getApi$: Observable<ApiActions> = createEffect(() =>\n this.actions$.pipe(ofType(ApiActions.ApiGet), mergeMap(this.getApiEffect)),\n );\n\n public getApiFail$: Observable<void | string> = createEffect(\n () =>\n this.actions$.pipe(\n ofType(ApiActions.ApiGetFail),\n map((action) => this.apiService.handleError(action)),\n ),\n { dispatch: false },\n );\n\n constructor(private actions$: Actions, private apiService: ApiCallerService, private store: Store<ApiState>) {}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { StoreModule } from '@ngrx/store';\nimport { EffectsModule } from '@ngrx/effects';\nimport { apiReducer } from './store/api.reducer';\nimport { ApiEffects } from './store/api.effects';\nimport { ApiCallerService } from './service/api-caller.service';\nimport { apiStateId } from './model/api-state-id';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n HttpClientModule,\n StoreModule.forFeature(apiStateId, apiReducer),\n EffectsModule.forFeature([ApiEffects]),\n ],\n providers: [ApiCallerService],\n})\nexport class ApiCallerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3.ApiConnector","i1","i2.ApiCallerService","i3","i2"],"mappings":"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"}