@wandzai/utils 1.0.72 → 1.0.73-5162-1
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/package.json +1 -1
- package/src/http.d.ts +5 -0
- package/src/http.js +28 -0
- package/src/http.js.map +1 -1
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/sentry.d.ts +2 -0
- package/src/sentry.js +22 -0
- package/src/sentry.js.map +1 -0
package/package.json
CHANGED
package/src/http.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { Request } from 'express';
|
|
2
|
+
import { Logger } from '@nestjs/common';
|
|
2
3
|
export declare function getIpFromHttpRequest(req: Request): string;
|
|
3
4
|
export declare function buildUriBodyString(queryParams: Record<string, any>): string;
|
|
4
5
|
export declare function getEncodedQueryParams(fullUrl: string): object;
|
|
5
6
|
export declare function buildQueryString(params: Record<string, any>): string;
|
|
7
|
+
export declare function retryWithBackoff<T>(fn: () => Promise<T>, logger: Logger, options?: {
|
|
8
|
+
retries: number;
|
|
9
|
+
baseDelayMs: number;
|
|
10
|
+
}): Promise<T>;
|
package/src/http.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.getIpFromHttpRequest = getIpFromHttpRequest;
|
|
|
4
4
|
exports.buildUriBodyString = buildUriBodyString;
|
|
5
5
|
exports.getEncodedQueryParams = getEncodedQueryParams;
|
|
6
6
|
exports.buildQueryString = buildQueryString;
|
|
7
|
+
exports.retryWithBackoff = retryWithBackoff;
|
|
7
8
|
const querystring = require("querystring");
|
|
8
9
|
function getIpFromHttpRequest(req) {
|
|
9
10
|
return req.headers['x-forwarded-for']
|
|
@@ -44,4 +45,31 @@ function buildQueryString(params) {
|
|
|
44
45
|
});
|
|
45
46
|
return queryParams.toString();
|
|
46
47
|
}
|
|
48
|
+
async function retryWithBackoff(fn, logger, options = {
|
|
49
|
+
retries: 3,
|
|
50
|
+
baseDelayMs: 500,
|
|
51
|
+
}) {
|
|
52
|
+
const { retries, baseDelayMs } = options;
|
|
53
|
+
for (let attempt = 1; attempt <= retries; attempt++) {
|
|
54
|
+
try {
|
|
55
|
+
logger.log(`Attempt #${attempt} of ${retries}`);
|
|
56
|
+
return await fn();
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
const status = error?.response?.status;
|
|
60
|
+
const isServerError = status >= 500;
|
|
61
|
+
const isLastAttempt = attempt === retries;
|
|
62
|
+
if (!isServerError || isLastAttempt) {
|
|
63
|
+
if (isLastAttempt) {
|
|
64
|
+
logger.error(`All ${retries} retries failed: ${error?.message || error}`);
|
|
65
|
+
}
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
logger.warn(`Retry #${attempt} failed (HTTP ${status}): ${error?.message || error}`);
|
|
69
|
+
const delayMs = baseDelayMs * 2 ** (attempt - 1);
|
|
70
|
+
await new Promise((res) => setTimeout(res, delayMs));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
throw new Error('Unexpected retry loop failure');
|
|
74
|
+
}
|
|
47
75
|
//# sourceMappingURL=http.js.map
|
package/src/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../../libs/utils/src/http.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../../libs/utils/src/http.ts"],"names":[],"mappings":"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"}
|
package/src/index.d.ts
CHANGED
package/src/index.js
CHANGED
|
@@ -28,4 +28,5 @@ __exportStar(require("./schedule"), exports);
|
|
|
28
28
|
__exportStar(require("./cache"), exports);
|
|
29
29
|
__exportStar(require("./interactions"), exports);
|
|
30
30
|
__exportStar(require("./slack"), exports);
|
|
31
|
+
__exportStar(require("./sentry"), exports);
|
|
31
32
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/utils/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,yCAAuB;AACvB,yCAAuB;AACvB,yCAAuB;AACvB,4CAA0B;AAC1B,2CAAyB;AACzB,0CAAwB;AACxB,oDAAkC;AAClC,0CAAwB;AACxB,8CAA4B;AAC5B,6CAA2B;AAC3B,0CAAwB;AACxB,iDAA+B;AAC/B,0CAAwB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/utils/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,yCAAuB;AACvB,yCAAuB;AACvB,yCAAuB;AACvB,4CAA0B;AAC1B,2CAAyB;AACzB,0CAAwB;AACxB,oDAAkC;AAClC,0CAAwB;AACxB,8CAA4B;AAC5B,6CAA2B;AAC3B,0CAAwB;AACxB,iDAA+B;AAC/B,0CAAwB;AACxB,2CAAwB"}
|
package/src/sentry.d.ts
ADDED
package/src/sentry.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shouldSkipSentryError = void 0;
|
|
4
|
+
const shouldSkipSentryError = (err, sentrySkipErrors, sentrySkippedErrorsInput) => {
|
|
5
|
+
const { currentRepo, currentRoute, componentName, info } = sentrySkippedErrorsInput;
|
|
6
|
+
if (!Array.isArray(sentrySkipErrors) || !(err instanceof Error))
|
|
7
|
+
return false;
|
|
8
|
+
const message = err.message;
|
|
9
|
+
return sentrySkipErrors.some((skippedError) => {
|
|
10
|
+
const originMatch = skippedError.origin === currentRepo;
|
|
11
|
+
const textExactMatch = skippedError.errorExactText ? message === skippedError.errorExactText : false;
|
|
12
|
+
const textContainedMatch = skippedError.errorContainedText
|
|
13
|
+
? message.includes(skippedError.errorContainedText)
|
|
14
|
+
: false;
|
|
15
|
+
const componentMatch = skippedError.componentName ? skippedError.componentName === componentName : true;
|
|
16
|
+
const urlMatch = skippedError.url ? skippedError.url === currentRoute : true;
|
|
17
|
+
const infoMatch = skippedError.info ? skippedError.info === info : true;
|
|
18
|
+
return originMatch && (textExactMatch || textContainedMatch) && componentMatch && urlMatch && infoMatch;
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
exports.shouldSkipSentryError = shouldSkipSentryError;
|
|
22
|
+
//# sourceMappingURL=sentry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../../../libs/utils/src/sentry.ts"],"names":[],"mappings":";;;AAEO,MAAM,qBAAqB,GAAG,CAAC,GAAY,EAAE,gBAAwC,EAAE,wBAAmD,EAAW,EAAE;IAC5J,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,wBAAwB,CAAC;IACpF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9E,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAE5B,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE;QAC5C,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,KAAK,WAAW,CAAC;QAExD,MAAM,cAAc,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,KAAK,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;QAErG,MAAM,kBAAkB,GAAG,YAAY,CAAC,kBAAkB;YACxD,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC;YACnD,CAAC,CAAC,KAAK,CAAC;QAEV,MAAM,cAAc,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;QAExG,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7E,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAExE,OAAO,WAAW,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,IAAI,cAAc,IAAI,QAAQ,IAAI,SAAS,CAAC;IAC1G,CAAC,CAAC,CAAC;AACL,CAAC,CAAA;AAtBY,QAAA,qBAAqB,yBAsBjC"}
|