@automattic/vip 4.1.6 → 4.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/assets/dev-env.lando.template.yml.ejs +1 -1
  2. package/dist/bin/vip-app-deploy-token-generate.js +110 -78
  3. package/dist/bin/vip-app-deploy-token.js +24 -16
  4. package/dist/bin/vip-app-deploy-validate.js +45 -41
  5. package/dist/bin/vip-app-deploy.js +222 -215
  6. package/dist/bin/vip-app-list.js +59 -43
  7. package/dist/bin/vip-app.js +97 -66
  8. package/dist/bin/vip-backup-db.js +36 -29
  9. package/dist/bin/vip-backup.js +16 -9
  10. package/dist/bin/vip-cache-purge-url.js +93 -55
  11. package/dist/bin/vip-cache.js +23 -14
  12. package/dist/bin/vip-config-envvar-delete.js +74 -73
  13. package/dist/bin/vip-config-envvar-get-all.js +68 -68
  14. package/dist/bin/vip-config-envvar-get.js +46 -46
  15. package/dist/bin/vip-config-envvar-list.js +54 -57
  16. package/dist/bin/vip-config-envvar-set.js +102 -96
  17. package/dist/bin/vip-config-envvar.js +38 -24
  18. package/dist/bin/vip-config-software-get.js +88 -75
  19. package/dist/bin/vip-config-software-update.js +116 -120
  20. package/dist/bin/vip-config-software.js +31 -21
  21. package/dist/bin/vip-config.js +25 -17
  22. package/dist/bin/vip-db-phpmyadmin.js +40 -39
  23. package/dist/bin/vip-db.js +13 -12
  24. package/dist/bin/vip-defensive-mode-configure.js +197 -197
  25. package/dist/bin/vip-defensive-mode-disable.js +43 -35
  26. package/dist/bin/vip-defensive-mode-enable.js +47 -38
  27. package/dist/bin/vip-defensive-mode.js +28 -17
  28. package/dist/bin/vip-dev-env-create.js +147 -104
  29. package/dist/bin/vip-dev-env-destroy.js +48 -39
  30. package/dist/bin/vip-dev-env-envvar-delete.js +60 -49
  31. package/dist/bin/vip-dev-env-envvar-get-all.js +52 -45
  32. package/dist/bin/vip-dev-env-envvar-get.js +48 -37
  33. package/dist/bin/vip-dev-env-envvar-list.js +48 -41
  34. package/dist/bin/vip-dev-env-envvar-set.js +83 -70
  35. package/dist/bin/vip-dev-env-envvar.js +38 -23
  36. package/dist/bin/vip-dev-env-exec.js +81 -74
  37. package/dist/bin/vip-dev-env-import-media.js +34 -26
  38. package/dist/bin/vip-dev-env-import-sql.js +65 -51
  39. package/dist/bin/vip-dev-env-import.js +23 -14
  40. package/dist/bin/vip-dev-env-info.js +59 -50
  41. package/dist/bin/vip-dev-env-list.js +34 -31
  42. package/dist/bin/vip-dev-env-logs.js +59 -49
  43. package/dist/bin/vip-dev-env-purge.js +71 -63
  44. package/dist/bin/vip-dev-env-shell.js +82 -71
  45. package/dist/bin/vip-dev-env-start.js +77 -65
  46. package/dist/bin/vip-dev-env-stop.js +80 -74
  47. package/dist/bin/vip-dev-env-sync-sql.js +80 -72
  48. package/dist/bin/vip-dev-env-sync.js +18 -11
  49. package/dist/bin/vip-dev-env-update.js +93 -84
  50. package/dist/bin/vip-dev-env.js +25 -8
  51. package/dist/bin/vip-edge-workers-build.js +82 -54
  52. package/dist/bin/vip-edge-workers-delete.js +84 -52
  53. package/dist/bin/vip-edge-workers-deploy.js +186 -126
  54. package/dist/bin/vip-edge-workers-disable.js +75 -44
  55. package/dist/bin/vip-edge-workers-enable.js +86 -54
  56. package/dist/bin/vip-edge-workers-get.js +108 -88
  57. package/dist/bin/vip-edge-workers-init.js +83 -53
  58. package/dist/bin/vip-edge-workers-list.js +89 -54
  59. package/dist/bin/vip-edge-workers-new.js +98 -69
  60. package/dist/bin/vip-edge-workers-validate.js +123 -82
  61. package/dist/bin/vip-edge-workers.js +19 -6
  62. package/dist/bin/vip-export-sql.js +75 -69
  63. package/dist/bin/vip-export.js +12 -7
  64. package/dist/bin/vip-import-media-abort.js +99 -73
  65. package/dist/bin/vip-import-media-status.js +83 -51
  66. package/dist/bin/vip-import-media.js +165 -166
  67. package/dist/bin/vip-import-sql-status.js +75 -45
  68. package/dist/bin/vip-import-sql.js +536 -596
  69. package/dist/bin/vip-import-validate-files.js +122 -141
  70. package/dist/bin/vip-import-validate-sql.js +52 -16
  71. package/dist/bin/vip-import.js +16 -7
  72. package/dist/bin/vip-logout.js +17 -13
  73. package/dist/bin/vip-logs.js +209 -183
  74. package/dist/bin/vip-search-replace.js +85 -53
  75. package/dist/bin/vip-slowlogs.js +168 -147
  76. package/dist/bin/vip-sync.js +163 -133
  77. package/dist/bin/vip-whoami.js +71 -35
  78. package/dist/bin/vip-wp.js +506 -549
  79. package/dist/bin/vip.js +161 -116
  80. package/dist/commands/backup-db.js +183 -149
  81. package/dist/commands/dev-env-import-sql.js +162 -117
  82. package/dist/commands/dev-env-sync-sql.js +372 -330
  83. package/dist/commands/export-sql.js +441 -425
  84. package/dist/commands/phpmyadmin.js +232 -212
  85. package/dist/commands/wp-ssh.js +218 -187
  86. package/dist/lib/analytics/clients/tracks.js +84 -91
  87. package/dist/lib/analytics/index.js +27 -27
  88. package/dist/lib/api/app.js +37 -36
  89. package/dist/lib/api/cache-purge.js +17 -20
  90. package/dist/lib/api/constants.js +5 -6
  91. package/dist/lib/api/edge-workers.js +84 -135
  92. package/dist/lib/api/error-debug.js +10 -13
  93. package/dist/lib/api/feature-flags.js +16 -17
  94. package/dist/lib/api/http.js +47 -48
  95. package/dist/lib/api/user.js +17 -18
  96. package/dist/lib/api.js +107 -116
  97. package/dist/lib/app-logs/app-logs.js +24 -25
  98. package/dist/lib/app-slowlogs/app-slowlogs.js +23 -24
  99. package/dist/lib/app-slowlogs/types.js +2 -1
  100. package/dist/lib/app.js +6 -8
  101. package/dist/lib/backup-storage-availability/backup-storage-availability.js +119 -119
  102. package/dist/lib/backup-storage-availability/docker-machine-not-found-error.js +5 -6
  103. package/dist/lib/cli/apiConfig.js +71 -41
  104. package/dist/lib/cli/command.js +1120 -873
  105. package/dist/lib/cli/config.js +29 -29
  106. package/dist/lib/cli/envAlias.js +35 -50
  107. package/dist/lib/cli/exit.js +19 -19
  108. package/dist/lib/cli/format.js +172 -172
  109. package/dist/lib/cli/progress.js +193 -236
  110. package/dist/lib/cli/prompt.js +14 -15
  111. package/dist/lib/cli/runtime-mode.js +5 -6
  112. package/dist/lib/client-file-uploader.js +489 -641
  113. package/dist/lib/config/software.js +206 -212
  114. package/dist/lib/constants/dev-environment.js +40 -37
  115. package/dist/lib/constants/file-size.js +6 -7
  116. package/dist/lib/constants/vipgo.js +24 -12
  117. package/dist/lib/custom-deploy/custom-deploy.js +138 -120
  118. package/dist/lib/database.js +88 -85
  119. package/dist/lib/defensive-mode/api.js +41 -46
  120. package/dist/lib/defensive-mode/cli-helpers.js +40 -40
  121. package/dist/lib/dev-environment/dev-environment-cli.js +776 -735
  122. package/dist/lib/dev-environment/dev-environment-configuration-file.js +224 -191
  123. package/dist/lib/dev-environment/dev-environment-core.js +697 -732
  124. package/dist/lib/dev-environment/dev-environment-database.js +57 -41
  125. package/dist/lib/dev-environment/dev-environment-lando.js +734 -666
  126. package/dist/lib/dev-environment/docker-utils.js +96 -90
  127. package/dist/lib/dev-environment/env-vars.js +61 -59
  128. package/dist/lib/dev-environment/lando-loader.js +6 -7
  129. package/dist/lib/dev-environment/types.js +2 -1
  130. package/dist/lib/edge-workers/confirmation.js +42 -36
  131. package/dist/lib/edge-workers/deployment.js +150 -159
  132. package/dist/lib/edge-workers/index.js +68 -85
  133. package/dist/lib/edge-workers/location.js +26 -26
  134. package/dist/lib/edge-workers/output.js +14 -15
  135. package/dist/lib/edge-workers/project.js +123 -132
  136. package/dist/lib/edge-workers/toolchains/assemblyscript/constants.js +6 -8
  137. package/dist/lib/edge-workers/toolchains/assemblyscript/index.js +100 -101
  138. package/dist/lib/edge-workers/toolchains/assemblyscript/templates.js +31 -33
  139. package/dist/lib/edge-workers/toolchains/index.js +15 -15
  140. package/dist/lib/edge-workers/types.js +10 -38
  141. package/dist/lib/edge-workers/validation.js +161 -150
  142. package/dist/lib/env.js +16 -17
  143. package/dist/lib/envvar/api-delete.js +16 -18
  144. package/dist/lib/envvar/api-get-all.js +15 -19
  145. package/dist/lib/envvar/api-get.js +8 -9
  146. package/dist/lib/envvar/api-list.js +16 -21
  147. package/dist/lib/envvar/api-set.js +20 -19
  148. package/dist/lib/envvar/api.js +34 -29
  149. package/dist/lib/envvar/input.js +29 -34
  150. package/dist/lib/envvar/logging.js +9 -11
  151. package/dist/lib/envvar/read-file.js +6 -7
  152. package/dist/lib/http/download-file.js +76 -44
  153. package/dist/lib/http/proxy-agent.js +37 -40
  154. package/dist/lib/http/proxy-dispatcher.js +69 -71
  155. package/dist/lib/keychain/insecure.js +40 -36
  156. package/dist/lib/keychain/keychain.js +2 -1
  157. package/dist/lib/keychain/secure.js +16 -15
  158. package/dist/lib/keychain.js +22 -22
  159. package/dist/lib/live-backup-copy.js +117 -115
  160. package/dist/lib/logout.js +17 -19
  161. package/dist/lib/media-import/config.js +15 -14
  162. package/dist/lib/media-import/media-file-import.js +9 -13
  163. package/dist/lib/media-import/progress.js +53 -65
  164. package/dist/lib/media-import/status.js +241 -256
  165. package/dist/lib/media-import/utils.js +15 -15
  166. package/dist/lib/node-version-check.js +16 -16
  167. package/dist/lib/promise.js +16 -17
  168. package/dist/lib/read-file.js +48 -16
  169. package/dist/lib/rechallenge/client.js +37 -43
  170. package/dist/lib/rechallenge/errors.js +38 -37
  171. package/dist/lib/rechallenge/flow.js +148 -123
  172. package/dist/lib/rechallenge/index.js +23 -24
  173. package/dist/lib/rechallenge/link.js +153 -151
  174. package/dist/lib/rechallenge/open-browser.js +14 -17
  175. package/dist/lib/rechallenge/token-cache.js +83 -86
  176. package/dist/lib/rechallenge/types.js +5 -14
  177. package/dist/lib/retry.js +93 -129
  178. package/dist/lib/search-and-replace.js +164 -148
  179. package/dist/lib/site-import/db-file-import.js +12 -16
  180. package/dist/lib/site-import/status.js +291 -291
  181. package/dist/lib/token.js +86 -87
  182. package/dist/lib/tracker.js +51 -62
  183. package/dist/lib/types/graphql/rate-limit-exceeded-error.js +2 -1
  184. package/dist/lib/types.js +2 -1
  185. package/dist/lib/user-error.js +6 -8
  186. package/dist/lib/utils.js +81 -87
  187. package/dist/lib/validations/custom-deploy.js +218 -186
  188. package/dist/lib/validations/is-multi-site-sql-dump.js +6 -6
  189. package/dist/lib/validations/is-multi-site.js +83 -50
  190. package/dist/lib/validations/is-multisite-domain-mapped.js +92 -62
  191. package/dist/lib/validations/line-by-line.js +78 -46
  192. package/dist/lib/validations/site-type.js +59 -63
  193. package/dist/lib/validations/sql-insert-parser.js +415 -0
  194. package/dist/lib/validations/sql.js +551 -431
  195. package/dist/lib/validations/utils.js +27 -29
  196. package/dist/lib/vip-import-validate-files.js +481 -490
  197. package/dist/lib/wp/helpers.js +41 -45
  198. package/dist/lib/wp/readline.js +21 -57
  199. package/dist/lib/xdg-data.js +11 -12
  200. package/helpers/mark-cli-executable.js +9 -0
  201. package/node_modules/@apollo/client/CHANGELOG.md +10 -0
  202. package/node_modules/@apollo/client/__cjs/cache/inmemory/helpers.cjs +5 -0
  203. package/node_modules/@apollo/client/__cjs/cache/inmemory/helpers.cjs.map +1 -1
  204. package/node_modules/@apollo/client/__cjs/cache/inmemory/inMemoryCache.cjs +2 -1
  205. package/node_modules/@apollo/client/__cjs/cache/inmemory/inMemoryCache.cjs.map +1 -1
  206. package/node_modules/@apollo/client/__cjs/cache/inmemory/key-extractor.cjs +14 -2
  207. package/node_modules/@apollo/client/__cjs/cache/inmemory/key-extractor.cjs.map +1 -1
  208. package/node_modules/@apollo/client/__cjs/cache/inmemory/policies.cjs +16 -0
  209. package/node_modules/@apollo/client/__cjs/cache/inmemory/policies.cjs.map +1 -1
  210. package/node_modules/@apollo/client/__cjs/cache/inmemory/policies.d.cts +2 -0
  211. package/node_modules/@apollo/client/__cjs/cache/inmemory/writeToStore.cjs +3 -2
  212. package/node_modules/@apollo/client/__cjs/cache/inmemory/writeToStore.cjs.map +1 -1
  213. package/node_modules/@apollo/client/__cjs/core/QueryInfo.cjs +9 -1
  214. package/node_modules/@apollo/client/__cjs/core/QueryInfo.cjs.map +1 -1
  215. package/node_modules/@apollo/client/__cjs/core/QueryInfo.d.cts +1 -1
  216. package/node_modules/@apollo/client/__cjs/core/QueryManager.cjs +10 -3
  217. package/node_modules/@apollo/client/__cjs/core/QueryManager.cjs.map +1 -1
  218. package/node_modules/@apollo/client/__cjs/react/hooks/useFragment.cjs.map +1 -1
  219. package/node_modules/@apollo/client/__cjs/react/hooks/useFragment.d.cts +42 -43
  220. package/node_modules/@apollo/client/__cjs/version.cjs +1 -1
  221. package/node_modules/@apollo/client/cache/inmemory/helpers.js +5 -0
  222. package/node_modules/@apollo/client/cache/inmemory/helpers.js.map +1 -1
  223. package/node_modules/@apollo/client/cache/inmemory/inMemoryCache.js +2 -1
  224. package/node_modules/@apollo/client/cache/inmemory/inMemoryCache.js.map +1 -1
  225. package/node_modules/@apollo/client/cache/inmemory/key-extractor.js +14 -2
  226. package/node_modules/@apollo/client/cache/inmemory/key-extractor.js.map +1 -1
  227. package/node_modules/@apollo/client/cache/inmemory/policies.d.ts +2 -0
  228. package/node_modules/@apollo/client/cache/inmemory/policies.js +17 -1
  229. package/node_modules/@apollo/client/cache/inmemory/policies.js.map +1 -1
  230. package/node_modules/@apollo/client/cache/inmemory/writeToStore.js +3 -2
  231. package/node_modules/@apollo/client/cache/inmemory/writeToStore.js.map +1 -1
  232. package/node_modules/@apollo/client/core/QueryInfo.d.ts +1 -1
  233. package/node_modules/@apollo/client/core/QueryInfo.js +10 -2
  234. package/node_modules/@apollo/client/core/QueryInfo.js.map +1 -1
  235. package/node_modules/@apollo/client/core/QueryManager.js +10 -3
  236. package/node_modules/@apollo/client/core/QueryManager.js.map +1 -1
  237. package/node_modules/@apollo/client/package.json +1 -1
  238. package/node_modules/@apollo/client/react/hooks/useFragment.d.ts +42 -43
  239. package/node_modules/@apollo/client/react/hooks/useFragment.js.map +1 -1
  240. package/node_modules/@apollo/client/react/hooks-compiled/useFragment.d.ts +42 -43
  241. package/node_modules/@apollo/client/react/hooks-compiled/useFragment.js.map +1 -1
  242. package/node_modules/@apollo/client/version.js +1 -1
  243. package/node_modules/@automattic/vip-search-replace/README.md +6 -1
  244. package/node_modules/@automattic/vip-search-replace/lib/index.js +46 -14
  245. package/node_modules/@automattic/vip-search-replace/package.json +1 -1
  246. package/node_modules/@types/node/README.md +1 -1
  247. package/node_modules/@types/node/package.json +2 -2
  248. package/node_modules/@types/node/zlib.d.ts +752 -0
  249. package/node_modules/check-disk-space/README.md +92 -32
  250. package/node_modules/check-disk-space/dist/check-disk-space.d.mts +58 -0
  251. package/node_modules/check-disk-space/dist/check-disk-space.mjs +170 -190
  252. package/node_modules/check-disk-space/package.json +43 -71
  253. package/node_modules/cpu-features/build/Makefile +2 -2
  254. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/filesystem.o.d +1 -1
  255. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_aarch64_linux_or_android.o.d +1 -1
  256. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_aarch64_macos_or_iphone.o.d +1 -1
  257. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_aarch64_windows.o.d +1 -1
  258. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_arm_linux_or_android.o.d +1 -1
  259. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_mips_linux_or_android.o.d +1 -1
  260. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_ppc_linux.o.d +1 -1
  261. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_freebsd.o.d +1 -1
  262. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_linux_or_android.o.d +1 -1
  263. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_macos.o.d +1 -1
  264. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/impl_x86_windows.o.d +1 -1
  265. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/stack_line_reader.o.d +1 -1
  266. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpu_features/deps/cpu_features/src/string_view.o.d +1 -1
  267. package/node_modules/cpu-features/build/Release/.deps/Release/obj.target/cpufeatures/src/binding.o.d +157 -145
  268. package/node_modules/cpu-features/build/Release/cpufeatures.node +0 -0
  269. package/node_modules/cpu-features/build/Release/obj.target/cpufeatures/src/binding.o +0 -0
  270. package/node_modules/cpu-features/build/Release/obj.target/cpufeatures.node +0 -0
  271. package/node_modules/cpu-features/build/config.gypi +100 -31
  272. package/node_modules/cpu-features/build/cpufeatures.target.mk +14 -14
  273. package/node_modules/cpu-features/build/deps/cpu_features/cpu_features.target.mk +14 -14
  274. package/node_modules/ssh2/lib/protocol/crypto/build/Makefile +2 -2
  275. package/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/obj.target/sshcrypto/src/binding.o.d.raw +136 -0
  276. package/node_modules/ssh2/lib/protocol/crypto/build/sshcrypto.target.mk +14 -14
  277. package/node_modules/undici/docs/docs/api/Interceptors.md +15 -2
  278. package/node_modules/undici/lib/dispatcher/client-h2.js +78 -3
  279. package/node_modules/undici/lib/dispatcher/pool-base.js +20 -3
  280. package/node_modules/undici/package.json +3 -3
  281. package/node_modules/undici/types/api.d.ts +1 -1
  282. package/node_modules/undici/types/utility.d.ts +4 -4
  283. package/package.json +44 -13
  284. package/dist/lib/analytics/clients/client.js +0 -1
  285. package/dist/lib/analytics/clients/pendo.js +0 -78
  286. package/helpers/check-version.js +0 -16
  287. package/node_modules/check-disk-space/dist/check-disk-space.cjs +0 -210
  288. package/node_modules/check-disk-space/dist/check-disk-space.d.ts +0 -53
  289. package/node_modules/fetch-retry/.eslintignore +0 -1
  290. package/node_modules/fetch-retry/.eslintrc.yml +0 -20
  291. package/node_modules/fetch-retry/.github/workflows/node.js.yml +0 -32
  292. package/node_modules/fetch-retry/.husky/pre-commit +0 -6
  293. package/node_modules/fetch-retry/.nycrc.json +0 -24
  294. package/node_modules/fetch-retry/.travis.yml +0 -3
  295. package/node_modules/fetch-retry/LICENSE +0 -21
  296. package/node_modules/fetch-retry/README.md +0 -128
  297. package/node_modules/fetch-retry/dist/fetch-retry.umd.js +0 -151
  298. package/node_modules/fetch-retry/index.d.ts +0 -29
  299. package/node_modules/fetch-retry/index.js +0 -143
  300. package/node_modules/fetch-retry/package.json +0 -41
  301. package/node_modules/fetch-retry/rollup.config.js +0 -12
  302. package/node_modules/fetch-retry/test/.eslintrc.yml +0 -7
  303. package/node_modules/fetch-retry/test/integration/index.js +0 -212
  304. package/node_modules/fetch-retry/test/integration/mock-api/index.js +0 -42
  305. package/node_modules/fetch-retry/test/unit/index.js +0 -1169
  306. package/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/obj.target/sshcrypto/src/binding.o.d +0 -265
  307. package/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/obj.target/sshcrypto.node.d +0 -1
  308. package/node_modules/ssh2/lib/protocol/crypto/build/Release/.deps/Release/sshcrypto.node.d +0 -1
  309. package/node_modules/ssh2/lib/protocol/crypto/build/Release/obj.target/sshcrypto/src/binding.o +0 -0
  310. package/node_modules/ssh2/lib/protocol/crypto/build/Release/obj.target/sshcrypto.node +0 -0
  311. package/node_modules/ssh2/lib/protocol/crypto/build/Release/sshcrypto.node +0 -0
@@ -1,143 +0,0 @@
1
- 'use strict';
2
-
3
- module.exports = function (fetch, defaults) {
4
- defaults = defaults || {};
5
- if (typeof fetch !== 'function') {
6
- throw new ArgumentError('fetch must be a function');
7
- }
8
-
9
- if (typeof defaults !== 'object') {
10
- throw new ArgumentError('defaults must be an object');
11
- }
12
-
13
- if (defaults.retries !== undefined && !isPositiveInteger(defaults.retries)) {
14
- throw new ArgumentError('retries must be a positive integer');
15
- }
16
-
17
- if (defaults.retryDelay !== undefined && !isPositiveInteger(defaults.retryDelay) && typeof defaults.retryDelay !== 'function') {
18
- throw new ArgumentError('retryDelay must be a positive integer or a function returning a positive integer');
19
- }
20
-
21
- if (defaults.retryOn !== undefined && !Array.isArray(defaults.retryOn) && typeof defaults.retryOn !== 'function') {
22
- throw new ArgumentError('retryOn property expects an array or function');
23
- }
24
-
25
- var baseDefaults = {
26
- retries: 3,
27
- retryDelay: 1000,
28
- retryOn: [],
29
- };
30
-
31
- defaults = Object.assign(baseDefaults, defaults);
32
-
33
- return function fetchRetry(input, init) {
34
- var retries = defaults.retries;
35
- var retryDelay = defaults.retryDelay;
36
- var retryOn = defaults.retryOn;
37
-
38
- if (init && init.retries !== undefined) {
39
- if (isPositiveInteger(init.retries)) {
40
- retries = init.retries;
41
- } else {
42
- throw new ArgumentError('retries must be a positive integer');
43
- }
44
- }
45
-
46
- if (init && init.retryDelay !== undefined) {
47
- if (isPositiveInteger(init.retryDelay) || (typeof init.retryDelay === 'function')) {
48
- retryDelay = init.retryDelay;
49
- } else {
50
- throw new ArgumentError('retryDelay must be a positive integer or a function returning a positive integer');
51
- }
52
- }
53
-
54
- if (init && init.retryOn) {
55
- if (Array.isArray(init.retryOn) || (typeof init.retryOn === 'function')) {
56
- retryOn = init.retryOn;
57
- } else {
58
- throw new ArgumentError('retryOn property expects an array or function');
59
- }
60
- }
61
-
62
- // eslint-disable-next-line no-undef
63
- return new Promise(function (resolve, reject) {
64
- var wrappedFetch = function (attempt) {
65
- // As of node 18, this is no longer needed since node comes with native support for fetch:
66
- /* istanbul ignore next */
67
- var _input =
68
- typeof Request !== 'undefined' && input instanceof Request
69
- ? input.clone()
70
- : input;
71
- fetch(_input, init)
72
- .then(function (response) {
73
- if (Array.isArray(retryOn) && retryOn.indexOf(response.status) === -1) {
74
- resolve(response);
75
- } else if (typeof retryOn === 'function') {
76
- try {
77
- // eslint-disable-next-line no-undef
78
- return Promise.resolve(retryOn(attempt, null, response))
79
- .then(function (retryOnResponse) {
80
- if(retryOnResponse) {
81
- retry(attempt, null, response);
82
- } else {
83
- resolve(response);
84
- }
85
- }).catch(reject);
86
- } catch (error) {
87
- reject(error);
88
- }
89
- } else {
90
- if (attempt < retries) {
91
- retry(attempt, null, response);
92
- } else {
93
- resolve(response);
94
- }
95
- }
96
- })
97
- .catch(function (error) {
98
- if (typeof retryOn === 'function') {
99
- try {
100
- // eslint-disable-next-line no-undef
101
- Promise.resolve(retryOn(attempt, error, null))
102
- .then(function (retryOnResponse) {
103
- if(retryOnResponse) {
104
- retry(attempt, error, null);
105
- } else {
106
- reject(error);
107
- }
108
- })
109
- .catch(function(error) {
110
- reject(error);
111
- });
112
- } catch(error) {
113
- reject(error);
114
- }
115
- } else if (attempt < retries) {
116
- retry(attempt, error, null);
117
- } else {
118
- reject(error);
119
- }
120
- });
121
- };
122
-
123
- function retry(attempt, error, response) {
124
- var delay = (typeof retryDelay === 'function') ?
125
- retryDelay(attempt, error, response) : retryDelay;
126
- setTimeout(function () {
127
- wrappedFetch(++attempt);
128
- }, delay);
129
- }
130
-
131
- wrappedFetch(0);
132
- });
133
- };
134
- };
135
-
136
- function isPositiveInteger(value) {
137
- return Number.isInteger(value) && value >= 0;
138
- }
139
-
140
- function ArgumentError(message) {
141
- this.name = 'ArgumentError';
142
- this.message = message;
143
- }
@@ -1,41 +0,0 @@
1
- {
2
- "name": "fetch-retry",
3
- "version": "6.0.0",
4
- "description": "Extend any fetch library with retry functionality",
5
- "repository": "https://github.com/jonbern/fetch-retry.git",
6
- "main": "index.js",
7
- "browser": "dist/fetch-retry.umd.js",
8
- "types": "index.d.ts",
9
- "scripts": {
10
- "lint": "eslint index.js ./test/**/*.js",
11
- "test": "nyc mocha test/**/**.js && npm run lint",
12
- "integration-test": "mocha test/integration/",
13
- "build": "rollup -c",
14
- "prepare": "node -e \"try { require('husky').install() } catch (e) {if (e.code !== 'MODULE_NOT_FOUND') throw e}\""
15
- },
16
- "keywords": [
17
- "fetch",
18
- "retry",
19
- "http",
20
- "retry",
21
- "Fetch API"
22
- ],
23
- "author": "Jon K. Bernhardsen",
24
- "license": "MIT",
25
- "dependencies": {},
26
- "devDependencies": {
27
- "body-parser": "^1.19.0",
28
- "chai": "^4.2.0",
29
- "chai-as-promised": "^7.1.1",
30
- "eslint": "^6.8.0",
31
- "expectations": "^0.7.1",
32
- "express": "^4.17.1",
33
- "husky": "^7.0.0",
34
- "mocha": "^10.2.0",
35
- "node-fetch": "^2.6.9",
36
- "nyc": "^14.1.1",
37
- "rollup": "^2.52.3",
38
- "@rollup/plugin-commonjs": "^19.0.0",
39
- "sinon": "^6.3.5"
40
- }
41
- }
@@ -1,12 +0,0 @@
1
- import commonjs from '@rollup/plugin-commonjs';
2
- import pkg from './package.json';
3
-
4
- export default {
5
- input: 'index.js',
6
- output: {
7
- name: 'fetchRetry',
8
- file: pkg.browser,
9
- format: 'umd'
10
- },
11
- plugins: [commonjs()]
12
- };
@@ -1,7 +0,0 @@
1
- env:
2
- node: true
3
- mocha: true
4
- parserOptions:
5
- ecmaVersion: 10
6
- rules:
7
- no-console: 0
@@ -1,212 +0,0 @@
1
- 'use strict';
2
- const chai = require('chai');
3
- const chaiAsPromised = require('chai-as-promised');
4
- chai.use(chaiAsPromised);
5
- chai.should();
6
- const childProcess = require('child_process');
7
- const fetch = require('node-fetch');
8
- const fetchRetry = require('../../')(fetch);
9
-
10
- describe('fetch-retry integration tests', () => {
11
-
12
- const baseUrl = 'http://localhost:3000/mock';
13
-
14
- before(() => {
15
- const process = childProcess.fork('./test/integration/mock-api/index.js');
16
-
17
- process.on('error', err => {
18
- console.log(err);
19
- });
20
- });
21
-
22
- after(() => {
23
- return fetchRetry(baseUrl + '/stop', {
24
- method: 'POST'
25
- });
26
- });
27
-
28
- const setupResponses = (responses) => {
29
- return fetchRetry(baseUrl, {
30
- method: 'POST',
31
- body: JSON.stringify(responses),
32
- headers: {
33
- 'content-type': 'application/json'
34
- }
35
- });
36
- };
37
-
38
- const getCallCount = () => {
39
- return fetchRetry(`${baseUrl}/calls`)
40
- .then(response => {
41
- return response.text();
42
- })
43
- .then(text => {
44
- return Number.parseInt(text);
45
- });
46
- };
47
-
48
- [
49
- ['with url string', (baseUrl, init) => fetchRetry(baseUrl, init)],
50
- ['with URL type', (baseUrl, init) => {
51
- const url = new URL(baseUrl);
52
- return fetchRetry(url, init);
53
- }],
54
- ['with Request argument', (baseUrl, init) => {
55
- const request = new fetch.Request(baseUrl);
56
- return fetchRetry(request, init);
57
- }],
58
- ].forEach(([usagePatternDescription, fetchInvocation]) => {
59
-
60
- describe(usagePatternDescription, () => {
61
-
62
- [200, 503, 404].forEach(statusCode => {
63
-
64
- describe('when endpoint returns ' + statusCode, () => {
65
-
66
- before(() => {
67
- return setupResponses([statusCode]);
68
- });
69
-
70
- it('does not retry request', () => {
71
- return fetchInvocation(baseUrl)
72
- .then(getCallCount)
73
- .should.eventually.equal(1);
74
- });
75
-
76
- });
77
-
78
- });
79
-
80
- describe('when configured to retry on a specific HTTP code', () => {
81
-
82
- describe('and it never succeeds', () => {
83
-
84
- const retryOn = [503];
85
-
86
- beforeEach(() => {
87
- return setupResponses([503, 503, 503, 503]);
88
- });
89
-
90
- it('retries the request #retries times', () => {
91
- const init = {
92
- retries: 3,
93
- retryDelay: 100,
94
- retryOn
95
- };
96
-
97
- const expectedCallCount = init.retries + 1;
98
-
99
- return fetchInvocation(baseUrl, init)
100
- .then(getCallCount)
101
- .should.eventually.equal(expectedCallCount);
102
- });
103
-
104
- it('eventually resolves the promise with the response of the last request', () => {
105
- const init = {
106
- retries: 3,
107
- retryDelay: 100,
108
- retryOn
109
- };
110
-
111
- const expectedResponse = {
112
- status: 503,
113
- ok: false
114
- };
115
-
116
- return fetchInvocation(baseUrl, init)
117
- .then(response => {
118
- return {
119
- status: response.status,
120
- ok: response.ok
121
- };
122
- })
123
- .should.become(expectedResponse);
124
- });
125
-
126
- });
127
-
128
- describe('and it eventually succeeds', () => {
129
-
130
- const retryOnStatus = 503;
131
- const responses = [503, 503, 200];
132
- const requestsToRetry = responses
133
- .filter(response => response === retryOnStatus)
134
- .length;
135
-
136
- beforeEach(() => {
137
- return setupResponses(responses);
138
- });
139
-
140
- it('retries the request up to #retries times', () => {
141
- const init = {
142
- retries: 3,
143
- retryDelay: 100,
144
- retryOn: [retryOnStatus]
145
- };
146
-
147
- const expectedCallCount = requestsToRetry + 1;
148
-
149
- return fetchInvocation(baseUrl, init)
150
- .then(getCallCount)
151
- .should.eventually.equal(expectedCallCount);
152
- });
153
-
154
- it('eventually resolves the promise with the received response of the last request', () => {
155
- const init = {
156
- retries: 3,
157
- retryDelay: 100,
158
- retryOn: [retryOnStatus]
159
- };
160
-
161
- const expectedResponse = {
162
- status: 200,
163
- ok: true
164
- };
165
-
166
- return fetchInvocation(baseUrl, init)
167
- .then(response => {
168
- return {
169
- status: response.status,
170
- ok: response.ok
171
- };
172
- })
173
- .should.become(expectedResponse);
174
- });
175
-
176
- });
177
-
178
- });
179
-
180
- describe('when configured to retry on a set of HTTP codes', () => {
181
-
182
- describe('and it never succeeds', () => {
183
-
184
- const retryOn = [503, 404];
185
-
186
- beforeEach(() => {
187
- return setupResponses([503, 404, 404, 503]);
188
- });
189
-
190
- it('retries the request #retries times', () => {
191
- const init = {
192
- retries: 3,
193
- retryDelay: 100,
194
- retryOn
195
- };
196
-
197
- const expectedCallCount = init.retries + 1;
198
-
199
- return fetchInvocation(baseUrl, init)
200
- .then(getCallCount)
201
- .should.eventually.equal(expectedCallCount);
202
- });
203
-
204
- });
205
-
206
- });
207
-
208
- });
209
-
210
- });
211
-
212
- });
@@ -1,42 +0,0 @@
1
- const express = require('express');
2
- const app = express();
3
- const bodyParser = require('body-parser');
4
-
5
- app.use(bodyParser.urlencoded({ extended: true }));
6
- app.use(bodyParser.json());
7
-
8
- app.use((req, res, next) => {
9
- res.header('Access-Control-Allow-Origin', '*');
10
- res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
11
- next();
12
- });
13
-
14
- let server;
15
- let calls = 0;
16
- let responses = [];
17
-
18
- app.post('/mock', (req, res) => {
19
- responses = req.body;
20
- calls = 0;
21
- res.status(200).send(responses);
22
- });
23
-
24
- app.get('/mock', (req, res) => {
25
- if (responses.length === 0) {
26
- res.status(501).send('Mock API is not configured to return anything');
27
- } else {
28
- calls++;
29
- res.status(responses.shift()).send();
30
- }
31
- });
32
-
33
- app.get('/mock/calls', (req, res) => {
34
- res.status(200).send(calls.toString());
35
- });
36
-
37
- app.post('/mock/stop', (req, res) => {
38
- res.status(200).send();
39
- server.close();
40
- });
41
-
42
- server = app.listen(3000);