Skip to content

Instantly share code, notes, and snippets.

@ArkaneKhan
Created May 15, 2018 06:16
Show Gist options
  • Save ArkaneKhan/bab7e3f0ebae4b8e59bde68c141f9481 to your computer and use it in GitHub Desktop.
Save ArkaneKhan/bab7e3f0ebae4b8e59bde68c141f9481 to your computer and use it in GitHub Desktop.
Api sauce code
import { create } from "apisauce";
import {
API_LOG,
BASE_URL,
API_TIMEOUT,
API_SECRET,
API_KEY,
ERROR_SOMETHING_WENT_WRONG,
ERROR_REQUEST_TIMEOUT,
ERROR_SERVER_CONNECTION,
ERROR_NETWORK_NOT_AVAILABLE,
ERROR_REQUEST_CANCEL
} from "../config/WebService";
import Util from "../util";
const api = create({
baseURL: BASE_URL,
headers: {
// api_key: API_KEY,
// api_secret: API_SECRET
// Authorization: `Basic ${base64.encode(`${API_USER_NAME}:${API_PASSWORD}`)}`
},
timeout: API_TIMEOUT
});
class ApiSauce {
async post(url, data, headers) {
if (Util.getToken()) {
headers = {
...headers,
client_token: Util.getToken()
};
}
const response = await api.post(url, data, { headers });
if (__DEV__ && API_LOG) {
console.log(response);
}
return new Promise((resolve, reject) => {
if (response.ok && response.data && !response.data.error) {
resolve(response.data);
} else {
let error = ERROR_SOMETHING_WENT_WRONG;
switch (response.problem) {
case "TIMEOUT_ERROR":
error = ERROR_REQUEST_TIMEOUT;
break;
case "CONNECTION_ERROR":
error = ERROR_SERVER_CONNECTION;
break;
case "NETWORK_ERROR":
error = ERROR_NETWORK_NOT_AVAILABLE;
break;
case "CANCEL_ERROR":
error = ERROR_REQUEST_CANCEL;
break;
default:
// "SERVER_ERROR":
error = { status: response.status, ...ERROR_SOMETHING_WENT_WRONG };
}
if (response.status === 500) {
reject(ERROR_SOMETHING_WENT_WRONG);
}
reject(response.data || error);
}
});
}
async get(url, data, headers) {
if (Util.getToken()) {
headers = {
...headers,
client_token: Util.getToken()
};
}
const response = await api.get(url, data, { headers });
if (__DEV__ && API_LOG) {
console.log(response);
}
return new Promise((resolve, reject) => {
if (response.ok && response.data && !response.data.error) {
resolve(response.data);
} else {
let error = ERROR_SOMETHING_WENT_WRONG;
switch (response.problem) {
case "TIMEOUT_ERROR":
error = ERROR_REQUEST_TIMEOUT;
break;
case "CONNECTION_ERROR":
error = ERROR_SERVER_CONNECTION;
break;
case "NETWORK_ERROR":
error = ERROR_NETWORK_NOT_AVAILABLE;
break;
case "CANCEL_ERROR":
error = ERROR_REQUEST_CANCEL;
break;
default:
// "SERVER_ERROR":
error = { status: response.status, ...ERROR_SOMETHING_WENT_WRONG };
}
if (response.status === 500) {
reject(ERROR_SOMETHING_WENT_WRONG);
}
reject(response.data || error);
}
});
}
}
export default new ApiSauce();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment