Skip to content

Commit d34ef2d

Browse files
feat: implemented axios retry
1 parent 772a0b4 commit d34ef2d

4 files changed

Lines changed: 62 additions & 2 deletions

File tree

app/utils/apiUtils.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { create } from 'apisauce';
2+
import axios from 'axios';
3+
import axiosRetry from 'axios-retry';
24
import snakeCase from 'lodash/snakeCase';
35
import camelCase from 'lodash/camelCase';
46
import { mapKeysDeep } from './index';
@@ -20,10 +22,12 @@ export const generateApiClient = (type = 'github') => {
2022
};
2123

2224
export const createApiClientWithTransForm = (baseURL) => {
23-
const api = create({
25+
const customAxiosInstance = axios.create({
2426
baseURL,
2527
headers: { 'Content-Type': 'application/json' }
2628
});
29+
const api = create({ axiosInstance: customAxiosInstance });
30+
axiosRetry(customAxiosInstance, { retries: 3 });
2731
api.addResponseTransform((response) => {
2832
const { ok, data } = response;
2933
if (ok && data) {

jest.config.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@
4242
"@app(.*)$": "<rootDir>/app/$1",
4343
"@(containers|components|services|utils|themes)(.*)$": "<rootDir>/app/$1/$2",
4444
".*\\.(css|less|styl|scss|sass)$": "<rootDir>/internals/mocks/cssModule.js",
45-
".*\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/internals/mocks/image.js"
45+
".*\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/internals/mocks/image.js",
46+
"^axios$": "axios/dist/node/axios.cjs"
4647
},
4748
"setupFilesAfterEnv": [
4849
"<rootDir>/jest.setup.js",

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@
8787
"@testing-library/react": "12.0.0",
8888
"antd": "^4.9.3",
8989
"apisauce": "2.1.1",
90+
"axios": "^1.2.0",
91+
"axios-retry": "^3.3.1",
9092
"chalk": "4.1.1",
9193
"compression": "1.7.4",
9294
"core-js": "3.6.5",

yarn.lock

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2159,6 +2159,13 @@
21592159
dependencies:
21602160
regenerator-runtime "^0.13.4"
21612161

2162+
"@babel/runtime@^7.15.4":
2163+
version "7.20.1"
2164+
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9"
2165+
integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==
2166+
dependencies:
2167+
regenerator-runtime "^0.13.10"
2168+
21622169
"@babel/template@^7.14.5", "@babel/template@^7.3.3":
21632170
version "7.14.5"
21642171
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4"
@@ -4972,13 +4979,30 @@ axios-mock-adapter@^1.17.0:
49724979
fast-deep-equal "^3.1.3"
49734980
is-buffer "^2.0.3"
49744981

4982+
axios-retry@^3.3.1:
4983+
version "3.3.1"
4984+
resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.3.1.tgz#47624646138aedefbad2ac32f226f4ee94b6dcab"
4985+
integrity sha512-RohAUQTDxBSWLFEnoIG/6bvmy8l3TfpkclgStjl5MDCMBDgapAWCmr1r/9harQfWC8bzLC8job6UcL1A1Yc+/Q==
4986+
dependencies:
4987+
"@babel/runtime" "^7.15.4"
4988+
is-retry-allowed "^2.2.0"
4989+
49754990
axios@^0.21.1:
49764991
version "0.21.1"
49774992
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
49784993
integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
49794994
dependencies:
49804995
follow-redirects "^1.10.0"
49814996

4997+
axios@^1.2.0:
4998+
version "1.2.0"
4999+
resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.0.tgz#1cb65bd75162c70e9f8d118a905126c4a201d383"
5000+
integrity sha512-zT7wZyNYu3N5Bu0wuZ6QccIf93Qk1eV8LOewxgjOZFd2DenOs98cJ7+Y6703d0wkaXGY6/nZd4EweJaHz9uzQw==
5001+
dependencies:
5002+
follow-redirects "^1.15.0"
5003+
form-data "^4.0.0"
5004+
proxy-from-env "^1.1.0"
5005+
49825006
axobject-query@^2.0.2:
49835007
version "2.2.0"
49845008
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
@@ -9295,6 +9319,11 @@ follow-redirects@^1.10.0:
92959319
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43"
92969320
integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==
92979321

9322+
follow-redirects@^1.15.0:
9323+
version "1.15.2"
9324+
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
9325+
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
9326+
92989327
fontfaceobserver@2.1.0:
92999328
version "2.1.0"
93009329
resolved "https://registry.yarnpkg.com/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz#e2705d293e2c585a6531c2a722905657317a2991"
@@ -9360,6 +9389,15 @@ form-data@^3.0.0:
93609389
combined-stream "^1.0.8"
93619390
mime-types "^2.1.12"
93629391

9392+
form-data@^4.0.0:
9393+
version "4.0.0"
9394+
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
9395+
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
9396+
dependencies:
9397+
asynckit "^0.4.0"
9398+
combined-stream "^1.0.8"
9399+
mime-types "^2.1.12"
9400+
93639401
form-data@~2.3.2:
93649402
version "2.3.3"
93659403
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
@@ -11236,6 +11274,11 @@ is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0:
1123611274
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
1123711275
integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
1123811276

11277+
is-retry-allowed@^2.2.0:
11278+
version "2.2.0"
11279+
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d"
11280+
integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==
11281+
1123911282
is-root@2.1.0:
1124011283
version "2.1.0"
1124111284
resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c"
@@ -15078,6 +15121,11 @@ proxy-addr@~2.0.4, proxy-addr@~2.0.5:
1507815121
forwarded "0.2.0"
1507915122
ipaddr.js "1.9.1"
1508015123

15124+
proxy-from-env@^1.1.0:
15125+
version "1.1.0"
15126+
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
15127+
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
15128+
1508115129
prr@~1.0.1:
1508215130
version "1.0.1"
1508315131
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
@@ -16313,6 +16361,11 @@ regenerator-runtime@^0.12.0:
1631316361
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
1631416362
integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==
1631516363

16364+
regenerator-runtime@^0.13.10:
16365+
version "0.13.11"
16366+
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
16367+
integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
16368+
1631616369
regenerator-runtime@^0.13.2:
1631716370
version "0.13.9"
1631816371
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"

0 commit comments

Comments
 (0)