-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4f0f6b5
commit 59a4ab9
Showing
4 changed files
with
161 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
import HttpClient from './http' | ||
|
||
const api = new HttpClient('') | ||
|
||
const getLatestMediums = async () => { | ||
try { | ||
const { data } = await api.get('https://medium.com/feed/@amirzenoozi') | ||
return data | ||
} catch (err: any) { | ||
console.log('Error', err) | ||
throw err | ||
} | ||
} | ||
|
||
export { | ||
getLatestMediums, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
/* eslint-disable no-use-before-define */ | ||
import axios, { type AxiosInstance, type AxiosRequestConfig, type AxiosResponse } from 'axios' | ||
import axiosRetry from 'axios-retry' | ||
|
||
const RETRY_COUNT: number = 3 | ||
const DEFAULT_DELAY: number = 1000 | ||
|
||
class HttpClient { | ||
private readonly axiosInstance: AxiosInstance | ||
|
||
constructor (baseURL: string) { | ||
this.axiosInstance = axios.create({ | ||
baseURL, | ||
headers: { | ||
'Content-Type': 'application/json' | ||
} | ||
}) | ||
|
||
// Adding Retry options to the queries | ||
axiosRetry(this.axiosInstance, { | ||
retries: RETRY_COUNT, | ||
retryDelay: (...arg) => axiosRetry.exponentialDelay(...arg, 1000) | ||
}) | ||
|
||
// Interceptors can be added for global request/response handling | ||
this.axiosInstance.interceptors.response.use( | ||
this.handleSuccessResponse, | ||
this.handleErrorResponse | ||
) | ||
} | ||
|
||
private readonly handleSuccessResponse = async (response: AxiosResponse): Promise<AxiosResponse> => { | ||
await new Promise(resolve => setTimeout(resolve, DEFAULT_DELAY)) | ||
return response | ||
} | ||
|
||
private readonly handleErrorResponse = (error: any): any => { | ||
if (error.response) { | ||
// The request was made and the server responded with a status code | ||
const status = error.response.status | ||
|
||
if (status >= 500 && status < 600) { | ||
return Promise.reject(error) | ||
} else { | ||
return Promise.reject(error) | ||
} | ||
} | ||
} | ||
|
||
public async get<T>(url: string, config?: AxiosRequestConfig) { | ||
return await this.axiosInstance.get<T>(url, config) | ||
} | ||
|
||
public async post<T>(url: string, data?: any, config?: AxiosRequestConfig) { | ||
return await this.axiosInstance.post<T>(url, data, config) | ||
} | ||
|
||
public async put<T>(url: string, data?: any, config?: AxiosRequestConfig) { | ||
return await this.axiosInstance.put<T>(url, data, config) | ||
} | ||
|
||
public async delete<T>(url: string, config?: AxiosRequestConfig) { | ||
return await this.axiosInstance.delete<T>(url, config) | ||
} | ||
} | ||
|
||
export default HttpClient |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2055,6 +2055,13 @@ | |
resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" | ||
integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== | ||
|
||
"@types/axios@^0.14.0": | ||
version "0.14.0" | ||
resolved "https://registry.yarnpkg.com/@types/axios/-/axios-0.14.0.tgz#ec2300fbe7d7dddd7eb9d3abf87999964cafce46" | ||
integrity sha512-KqQnQbdYE54D7oa/UmYVMZKq7CO4l8DEENzOKc4aBRwxCXSlJXGz83flFx5L7AWrOQnmuN3kVsRdt+GZPPjiVQ== | ||
dependencies: | ||
axios "*" | ||
|
||
"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": | ||
version "7.20.5" | ||
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" | ||
|
@@ -3031,6 +3038,22 @@ axe-core@^4.9.1: | |
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.9.1.tgz#fcd0f4496dad09e0c899b44f6c4bb7848da912ae" | ||
integrity sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw== | ||
|
||
axios-retry@^4.4.2: | ||
version "4.4.2" | ||
resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-4.4.2.tgz#cef7c3eb1aa004f6a7e7b1a0918907b10a1986be" | ||
integrity sha512-2fjo9uDNBQjX8+GMEGOFG5TrLMZ3QijjeRYcgBI2MhrsabnvcIAfLxxIhG7+CCD68vPEQY3IM2llV70ZsrqPvA== | ||
dependencies: | ||
is-retry-allowed "^2.2.0" | ||
|
||
axios@*, axios@^1.7.2: | ||
version "1.7.2" | ||
resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" | ||
integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== | ||
dependencies: | ||
follow-redirects "^1.15.6" | ||
form-data "^4.0.0" | ||
proxy-from-env "^1.1.0" | ||
|
||
axobject-query@~3.1.1: | ||
version "3.1.1" | ||
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" | ||
|
@@ -4279,7 +4302,7 @@ enhanced-resolve@^5.17.0: | |
graceful-fs "^4.2.4" | ||
tapable "^2.2.0" | ||
|
||
entities@^2.0.0: | ||
entities@^2.0.0, entities@^2.0.3: | ||
version "2.2.0" | ||
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" | ||
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== | ||
|
@@ -4996,7 +5019,7 @@ flatted@^3.2.9: | |
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" | ||
integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== | ||
|
||
follow-redirects@^1.0.0: | ||
follow-redirects@^1.0.0, follow-redirects@^1.15.6: | ||
version "1.15.6" | ||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" | ||
integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== | ||
|
@@ -5044,6 +5067,15 @@ form-data@^3.0.0: | |
combined-stream "^1.0.8" | ||
mime-types "^2.1.12" | ||
|
||
form-data@^4.0.0: | ||
version "4.0.0" | ||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" | ||
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== | ||
dependencies: | ||
asynckit "^0.4.0" | ||
combined-stream "^1.0.8" | ||
mime-types "^2.1.12" | ||
|
||
[email protected]: | ||
version "0.2.0" | ||
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" | ||
|
@@ -5799,6 +5831,11 @@ is-regexp@^1.0.0: | |
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" | ||
integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== | ||
|
||
is-retry-allowed@^2.2.0: | ||
version "2.2.0" | ||
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" | ||
integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== | ||
|
||
is-root@^2.1.0: | ||
version "2.1.0" | ||
resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" | ||
|
@@ -8097,6 +8134,11 @@ proxy-addr@~2.0.7: | |
forwarded "0.2.0" | ||
ipaddr.js "1.9.1" | ||
|
||
proxy-from-env@^1.1.0: | ||
version "1.1.0" | ||
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" | ||
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== | ||
|
||
psl@^1.1.33: | ||
version "1.9.0" | ||
resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" | ||
|
@@ -8620,6 +8662,14 @@ rollup@^2.43.1: | |
optionalDependencies: | ||
fsevents "~2.3.2" | ||
|
||
rss-parser@^3.13.0: | ||
version "3.13.0" | ||
resolved "https://registry.yarnpkg.com/rss-parser/-/rss-parser-3.13.0.tgz#f1f83b0a85166b8310ec531da6fbaa53ff0f50f0" | ||
integrity sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w== | ||
dependencies: | ||
entities "^2.0.3" | ||
xml2js "^0.5.0" | ||
|
||
run-parallel@^1.1.9: | ||
version "1.2.0" | ||
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" | ||
|
@@ -8683,6 +8733,11 @@ sass@^1.69.5: | |
immutable "^4.0.0" | ||
source-map-js ">=0.6.2 <2.0.0" | ||
|
||
sax@>=0.6.0: | ||
version "1.4.1" | ||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" | ||
integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== | ||
|
||
sax@~1.2.4: | ||
version "1.2.4" | ||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" | ||
|
@@ -10358,6 +10413,19 @@ xml-name-validator@^3.0.0: | |
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" | ||
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== | ||
|
||
xml2js@^0.5.0: | ||
version "0.5.0" | ||
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" | ||
integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== | ||
dependencies: | ||
sax ">=0.6.0" | ||
xmlbuilder "~11.0.0" | ||
|
||
xmlbuilder@~11.0.0: | ||
version "11.0.1" | ||
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" | ||
integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== | ||
|
||
xmlchars@^2.2.0: | ||
version "2.2.0" | ||
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" | ||
|