@betterview/integration-toolkit 7.5.10 → 7.6.10
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.
- package/lib/Network/axios-error-handling.d.ts +7 -1
- package/lib/Network/axios-error-handling.d.ts.map +1 -1
- package/lib/Network/axios-error-handling.js +47 -13
- package/lib/Network/axios-error-handling.js.map +1 -1
- package/lib/Network/index.d.ts +4 -3
- package/lib/Network/index.d.ts.map +1 -1
- package/lib/Network/index.js +4 -4
- package/lib/Network/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -21,6 +21,12 @@ export interface IWrapResult<T> {
|
|
|
21
21
|
headers?: Record<string, string>;
|
|
22
22
|
err?: SimplifiedError;
|
|
23
23
|
}
|
|
24
|
+
export interface IRetryPolicy {
|
|
25
|
+
retryTimes: number;
|
|
26
|
+
retryWaitMs: number;
|
|
27
|
+
shouldRetry: (statusCode: number) => boolean;
|
|
28
|
+
backoffType?: 'constant' | 'exponential';
|
|
29
|
+
}
|
|
24
30
|
/** wraps an axios api call, resulting in a successful promise containing either the requested data or a simplfied error */
|
|
25
|
-
export declare function wrap<T>(axiosApiCall: Promise<AxiosResponse<T> | AxiosError<T
|
|
31
|
+
export declare function wrap<T>(axiosApiCall: Promise<AxiosResponse<T> | AxiosError<T>>, retryPolicy?: IRetryPolicy | undefined, numRetries?: number): Promise<IWrapResult<T>>;
|
|
26
32
|
//# sourceMappingURL=axios-error-handling.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axios-error-handling.d.ts","sourceRoot":"","sources":["../../src/Network/axios-error-handling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"axios-error-handling.d.ts","sourceRoot":"","sources":["../../src/Network/axios-error-handling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAIlD,oBAAY,YAAY,GACpB,cAAc,GACd,aAAa,GACb,sBAAsB,GACtB,YAAY,GACZ,oBAAoB,CAAC;AAEzB,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC;;;;OAIG;IACH,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,yHAAyH;AACzH,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,eAAe,CAa9D;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,GAAG,CAAC,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,WAAW,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC;CAC1C;AAeD,2HAA2H;AAC3H,wBAAsB,IAAI,CAAC,CAAC,EAC1B,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,EACvD,WAAW,GAAE,YAAY,GAAG,SAAqB,EACjD,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CA8BzB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.wrap = exports.simplifyError = void 0;
|
|
4
|
+
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
4
5
|
/** simplifies an axios error, exposing the properties that are commonly used and friendly name to help decision trees */
|
|
5
6
|
function simplifyError(err) {
|
|
6
7
|
let friendly = 'request init failure';
|
|
@@ -31,22 +32,55 @@ function convertStatusCode(code) {
|
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
/** wraps an axios api call, resulting in a successful promise containing either the requested data or a simplfied error */
|
|
34
|
-
async function wrap(axiosApiCall) {
|
|
35
|
-
const result = {};
|
|
35
|
+
async function wrap(axiosApiCall, retryPolicy = undefined, numRetries = 0) {
|
|
36
36
|
try {
|
|
37
|
-
|
|
38
|
-
if (
|
|
39
|
-
throw
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
result.data = r.data;
|
|
37
|
+
const response = await axiosApiCall;
|
|
38
|
+
if (response.isAxiosError)
|
|
39
|
+
throw response;
|
|
40
|
+
if (numRetries > 0)
|
|
41
|
+
console.debug(`Axios request successful after attempt ${numRetries}. host=${response.request?.host ?? ''};path=${response.request?.path ?? ''};`);
|
|
42
|
+
return processResponse(response);
|
|
44
43
|
}
|
|
45
|
-
catch (
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (error.isAxiosError) {
|
|
46
|
+
const err = error;
|
|
47
|
+
await logAxiosError(err);
|
|
48
|
+
if (retryPolicy?.shouldRetry(err.response?.status ?? 0) && numRetries <= retryPolicy?.retryTimes) {
|
|
49
|
+
numRetries++;
|
|
50
|
+
let waitTime = retryPolicy.retryWaitMs ?? 1000;
|
|
51
|
+
const backoffType = retryPolicy.backoffType || 'constant';
|
|
52
|
+
if (backoffType === 'exponential') {
|
|
53
|
+
waitTime = retryPolicy.retryWaitMs * Math.pow(2, numRetries);
|
|
54
|
+
console.debug(`Exponential backoff: retrying in ${waitTime}ms`);
|
|
55
|
+
}
|
|
56
|
+
await sleep(waitTime);
|
|
57
|
+
return wrap(axiosApiCall, retryPolicy, numRetries);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return processError(error);
|
|
48
61
|
}
|
|
49
|
-
return result;
|
|
50
62
|
}
|
|
51
63
|
exports.wrap = wrap;
|
|
64
|
+
async function logAxiosError(error) {
|
|
65
|
+
const logMessage = `Axios error status=${error.response?.status ?? ''} ` +
|
|
66
|
+
`${error.response?.statusText ?? ''}; ` +
|
|
67
|
+
`host=${error.request?.host ?? ''}; ` +
|
|
68
|
+
`path=${error.request?.path ?? ''}; ` +
|
|
69
|
+
`code=${error.request?.code ?? ''}` +
|
|
70
|
+
`message=${error.message};`;
|
|
71
|
+
await console.debug(logMessage);
|
|
72
|
+
}
|
|
73
|
+
function processResponse(response) {
|
|
74
|
+
return {
|
|
75
|
+
data: response.data,
|
|
76
|
+
headers: response.headers
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
async function processError(error) {
|
|
80
|
+
const simpleError = await simplifyError(error);
|
|
81
|
+
return {
|
|
82
|
+
err: simpleError,
|
|
83
|
+
headers: simpleError.responseHeaders
|
|
84
|
+
};
|
|
85
|
+
}
|
|
52
86
|
//# sourceMappingURL=axios-error-handling.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axios-error-handling.js","sourceRoot":"","sources":["../../src/Network/axios-error-handling.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"axios-error-handling.js","sourceRoot":"","sources":["../../src/Network/axios-error-handling.ts"],"names":[],"mappings":"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"}
|
package/lib/Network/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { AxiosRequestConfig } from 'axios';
|
|
2
|
-
import { IWrapResult } from './axios-error-handling';
|
|
3
|
-
export
|
|
2
|
+
import { IRetryPolicy, IWrapResult } from './axios-error-handling';
|
|
3
|
+
export { IRetryPolicy } from './axios-error-handling';
|
|
4
|
+
export declare function get<T = Record<string, any>>(url: string, config?: AxiosRequestConfig, retryPolicy?: IRetryPolicy): Promise<{
|
|
4
5
|
request_url: string;
|
|
5
6
|
result: IWrapResult<T>;
|
|
6
7
|
}>;
|
|
7
|
-
export declare function post<T = any, U = Record<string, any>>(url: string, data: T, config?: AxiosRequestConfig): Promise<{
|
|
8
|
+
export declare function post<T = any, U = Record<string, any>>(url: string, data: T, config?: AxiosRequestConfig, retryPolicy?: IRetryPolicy): Promise<{
|
|
8
9
|
request_url: string;
|
|
9
10
|
result: IWrapResult<U>;
|
|
10
11
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Network/index.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,WAAW,EAAQ,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Network/index.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAQ,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,wBAAsB,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/C,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,kBAAkB,EAC3B,WAAW,CAAC,EAAE,YAAY,GACzB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,CAG1D;AAED,wBAAsB,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,CAAC,EACP,MAAM,CAAC,EAAE,kBAAkB,EAC3B,WAAW,CAAC,EAAE,YAAY,GACzB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,CAG1D"}
|
package/lib/Network/index.js
CHANGED
|
@@ -6,13 +6,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.post = exports.get = void 0;
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
8
|
const axios_error_handling_1 = require("./axios-error-handling");
|
|
9
|
-
async function get(url, config) {
|
|
10
|
-
const result = await (0, axios_error_handling_1.wrap)(axios_1.default.get(url, config));
|
|
9
|
+
async function get(url, config, retryPolicy) {
|
|
10
|
+
const result = await (0, axios_error_handling_1.wrap)(axios_1.default.get(url, config), retryPolicy);
|
|
11
11
|
return { request_url: url, result };
|
|
12
12
|
}
|
|
13
13
|
exports.get = get;
|
|
14
|
-
async function post(url, data, config) {
|
|
15
|
-
const result = await (0, axios_error_handling_1.wrap)(axios_1.default.post(url, data, config));
|
|
14
|
+
async function post(url, data, config, retryPolicy) {
|
|
15
|
+
const result = await (0, axios_error_handling_1.wrap)(axios_1.default.post(url, data, config), retryPolicy);
|
|
16
16
|
return { request_url: url, result };
|
|
17
17
|
}
|
|
18
18
|
exports.post = post;
|
package/lib/Network/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Network/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAkD;AAClD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Network/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAkD;AAClD,iEAAyE;AAIlE,KAAK,UAAU,GAAG,CACvB,GAAW,EACX,MAA2B,EAC3B,WAA0B;IAE1B,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAI,EAAC,eAAK,CAAC,GAAG,CAAI,GAAG,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;IAClE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAPD,kBAOC;AAEM,KAAK,UAAU,IAAI,CACxB,GAAW,EACX,IAAO,EACP,MAA2B,EAC3B,WAA0B;IAE1B,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAI,EAAC,eAAK,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;IACzE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AARD,oBAQC"}
|
package/package.json
CHANGED