2019-08-31 20:51:14 -07:00
|
|
|
import { ApiError } from 'wherehows-web/utils/api/errors/errors';
|
|
|
|
import { typeOf } from '@ember/utils';
|
|
|
|
|
2018-01-24 15:41:46 -08:00
|
|
|
/**
|
|
|
|
* Defines available api version types
|
|
|
|
*/
|
2019-08-31 20:51:14 -07:00
|
|
|
export enum ApiVersion {
|
|
|
|
v1 = 'v1',
|
|
|
|
v2 = 'v2'
|
|
|
|
}
|
2018-01-24 15:41:46 -08:00
|
|
|
|
2017-08-18 03:42:40 -07:00
|
|
|
/**
|
|
|
|
* Defines the root path for wherehows front-end api requests
|
2019-08-31 20:51:14 -07:00
|
|
|
* @param {ApiVersion} [version = ApiVersion.v1] the
|
2018-01-24 15:41:46 -08:00
|
|
|
* @return {string}
|
2017-08-18 03:42:40 -07:00
|
|
|
*/
|
2019-08-31 20:51:14 -07:00
|
|
|
export const getApiRoot = (version: ApiVersion = ApiVersion.v1): string => `/api/${version}`;
|
2018-02-21 14:41:05 -08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Enumerates the currently available Api statuses
|
|
|
|
* @type {number}
|
|
|
|
*/
|
2018-02-22 14:26:19 -08:00
|
|
|
export enum ApiResponseStatus {
|
2018-02-21 14:41:05 -08:00
|
|
|
NotFound = 404,
|
|
|
|
UnAuthorized = 401,
|
|
|
|
InternalServerError = 500
|
|
|
|
}
|
2018-02-28 16:31:37 -08:00
|
|
|
|
2018-07-19 16:18:06 -07:00
|
|
|
/**
|
|
|
|
* Type guard discriminates an error object as an instance of ApiError
|
|
|
|
* @param {Error} e
|
|
|
|
* @return {boolean}
|
|
|
|
*/
|
2019-09-04 21:46:02 -07:00
|
|
|
const isApiError = (e: Error): e is ApiError =>
|
|
|
|
typeOf(((e as unknown) as Record<string, unknown>).status) !== 'undefined';
|
2018-07-19 16:18:06 -07:00
|
|
|
|
2018-02-28 16:31:37 -08:00
|
|
|
/**
|
|
|
|
* Convenience function to ascertain if an api error is a not found code
|
|
|
|
* @param {Error} e
|
|
|
|
* @return {boolean}
|
|
|
|
*/
|
2019-08-31 20:51:14 -07:00
|
|
|
export const isNotFoundApiError = (e: Error): boolean => {
|
|
|
|
// We assert ApiError here as it is an extension of Erorr and we don't always expect to be able to specifically
|
|
|
|
// check against instanceof ApiError
|
|
|
|
return isApiError(e) && e.status === ApiResponseStatus.NotFound;
|
|
|
|
};
|
2018-03-20 11:32:51 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks that a server response status is a server exception
|
|
|
|
* @param {Error} e
|
|
|
|
* @return {boolean}
|
|
|
|
*/
|
2019-08-31 20:51:14 -07:00
|
|
|
export const isServerExceptionApiError = (e: Error): boolean =>
|
2018-07-19 16:18:06 -07:00
|
|
|
isApiError(e) && e.status >= ApiResponseStatus.InternalServerError;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks that a server response status is an unauthorized error
|
|
|
|
* @param {Error} e
|
|
|
|
* @return {boolean}
|
|
|
|
*/
|
2019-08-31 20:51:14 -07:00
|
|
|
export const isUnAuthorizedApiError = (e: Error): boolean =>
|
|
|
|
isApiError(e) && e.status === ApiResponseStatus.UnAuthorized;
|