From 2193aceaaa2416dce5949635fc4605b32997eedd Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Wed, 20 Oct 2021 23:52:51 +0300 Subject: [PATCH] Adding timeouts for some http queries --- data_providers/vin01.js | 23 ++++++++++++++++++++--- package-lock.json | 33 +++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/data_providers/vin01.js b/data_providers/vin01.js index 79b2e59..b1069ce 100644 --- a/data_providers/vin01.js +++ b/data_providers/vin01.js @@ -1,4 +1,5 @@ const fetch = require('node-fetch'); +const AbortController = require('abort-controller'); const DebugInfo = require('../models/DebugInfo'); const Vehicle = require('../models/vehicle'); const Utils = require('../utils/utils'); @@ -6,10 +7,26 @@ const Utils = require('../utils/utils'); const baseUrl = 'https://vin01.ru/v2'; const reportBaseUrl = `${baseUrl}/gibddApp.php`; +async function fetchWithTimeout(url, params, timeout) { + const controller = new AbortController(); + const timeoutId = setTimeout(() => { + controller.abort(); + }, timeout); + + let requestParams = params ?? {}; + requestParams.signal = controller.signal; + + try { + return await fetch(url, requestParams); + } finally { + clearInterval(timeoutId); + } +} + class Vin01Provider { static async getVin(number, token) { let url = `${baseUrl}/getVin.php?key=${token}&gosNumber=${encodeURIComponent(number)}`; - let result = await fetch(url); + let result = await fetchWithTimeout(url, null, 12000); let json = await result.json(); if(json.success && json.code == 200) { return json.data.vin; @@ -19,7 +36,7 @@ class Vin01Provider { } static async runCheck(type, vin, token) { - let result = await fetch(reportBaseUrl, { + let result = await fetchWithTimeout(reportBaseUrl, { method: 'POST', body: new URLSearchParams({ typeCheckValue: type, @@ -27,7 +44,7 @@ class Vin01Provider { key: token, token: null }) - }); + }, 15000); console.log('Vin01 response for: ', type); return await result.json(); } diff --git a/package-lock.json b/package-lock.json index 30a625b..bb691b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { + "abort-controller": "^3.0.0", "body-parser": "^1.19.0", "compress": "^0.99.0", "compression": "^1.7.4", @@ -319,6 +320,17 @@ "react-native": "*" } }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -1355,6 +1367,14 @@ "node": ">= 0.6" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/expo-random": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-8.2.1.tgz", @@ -3418,6 +3438,14 @@ "prop-types": "^15.6.1" } }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -4233,6 +4261,11 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, "expo-random": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-8.2.1.tgz", diff --git a/package.json b/package.json index 64e9d8d..eddf188 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "author": "Selim Mustafaev", "license": "MIT", "dependencies": { + "abort-controller": "^3.0.0", "body-parser": "^1.19.0", "compress": "^0.99.0", "compression": "^1.7.4",