export type IHTTPMethods = 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'CONNECT' | 'OPTIONS' | 'TRACE' ; export interface IAPIOptions { fetchMethod : ( url : string , options ? : any ) => Promise < any > ; domains : { default : string ; [ key ] : string ; } ; prefixes : { default : string ; [ key ] : string ; } ; encodeParameters ? : boolean ; middlewares ? : APIMiddleware [ ] ; responseMiddleware ? : ResponseMiddleware ; debugAPI ? : boolean ; printNetworkRequests ? : boolean ; disableCache ? : boolean ; cacheExpiration ? : number ; cachePrefix ? : string ; ignoreHeadersWhenCaching ? : boolean ; capServices ? : boolean ; capLimit ? : number ; } export interface IAPIService { path ? : string ; expiration ? : number ; method ? : IHTTPMethods ; domain ? : string ; prefix ? : string ; middlewares ? : APIMiddleware [ ] ; responseMiddleware ? : ResponseMiddleware ; ignoreHeadersWhenCaching ? : boolean ; disableCache ? : boolean ; capService ? : boolean ; capLimit ? : number ; rawData ? : boolean ; } export interface IAPIServices { [ key ] : IAPIService ; } export interface IFetchOptions extends IAPIService { pathParameters ? : { [ key ] : any ; } ; queryParameters ? : { [ key ] : any ; } ; headers ? : { [ key ] : string ; } ; fetchHeaders ? : boolean ; middlewares ? : APIMiddleware [ ] ; responseMiddleware ? : ResponseMiddleware ; fetchOptions ? : any ; } export interface IFetchResponse { success : boolean ; data ? : any ; } export interface ICachedData { success : boolean ; data ? : any ; fresh ? : boolean ; } export interface ICacheDictionary { [ key ] : number ; } export interface IAPICacheDriver { getItem ( key ) : Promise < any > ; setItem ( key , value , callback ? ) : Promise < any > ; removeItem ( key ) : Promise < any > ; } export interface IMiddlewarePaths { fullPath : string ; withoutQueryParams : string ; } export type APIMiddleware = ( serviceDefinition : IAPIService , paths : IMiddlewarePaths , options ? : IFetchOptions ) => any ; export type ResponseMiddleware = ( response : any ) => any ;