@wandzai/utils 1.0.73 → 1.0.74

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wandzai/utils",
3
- "version": "1.0.73",
3
+ "version": "1.0.74",
4
4
  "description": "Common used utilities library",
5
5
  "main": "src/index",
6
6
  "scripts": {
package/src/common.d.ts CHANGED
@@ -11,7 +11,7 @@ export declare const upperCaseFirstCharOfEachWord: (str: string) => string;
11
11
  export declare const upperCaseFirstCharOfEachWordSplitBySpace: (str: string) => string;
12
12
  export declare const jsonToConsistentString: (jsonObj: any) => string;
13
13
  export declare const booleanStringToBoolean: (value: string) => value is "true";
14
- export declare const booleanStringToNumber: (value: string) => 0 | 1;
14
+ export declare const booleanStringToNumber: (value: string) => 1 | 0;
15
15
  export declare const normalizeSfResponseObjKeys: (obj: Record<string, any>) => {
16
16
  [k: string]: any;
17
17
  };
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,47 @@ function buildQueryString(params) {
44
45
  });
45
46
  return queryParams.toString();
46
47
  }
48
+ function getErrorDetails(error) {
49
+ if (error?.code) {
50
+ return `${error.code}: ${error.message || 'No further details'}`;
51
+ }
52
+ if (Array.isArray(error?.errors)) {
53
+ const innerErrors = error.errors.map((e) => getErrorDetails(e)).join('; ');
54
+ const errorName = error.name || 'AggregateError';
55
+ return `${errorName}: [${innerErrors}]`;
56
+ }
57
+ return error?.message || String(error);
58
+ }
59
+ async function retryWithBackoff(fn, logger, options = {
60
+ retries: 3,
61
+ baseDelayMs: 500,
62
+ }) {
63
+ const { retries, baseDelayMs } = options;
64
+ for (let attempt = 1; attempt <= retries; attempt++) {
65
+ try {
66
+ logger.log(`Attempt #${attempt} of ${retries}`);
67
+ return await fn();
68
+ }
69
+ catch (error) {
70
+ const status = error?.response?.status;
71
+ const RETRYABLE_STATUS_CODES = [502, 503, 504];
72
+ const isRetryableError = !status || RETRYABLE_STATUS_CODES.includes(status);
73
+ const isLastAttempt = attempt === retries;
74
+ const errorDetails = getErrorDetails(error);
75
+ if (!isRetryableError || isLastAttempt) {
76
+ if (isLastAttempt) {
77
+ logger.error(`All ${retries} retries failed: ${errorDetails}`);
78
+ }
79
+ else {
80
+ logger.error(`Non-retryable error (HTTP ${status}): ${errorDetails}`);
81
+ }
82
+ throw new Error(errorDetails);
83
+ }
84
+ logger.warn(`Retry #${attempt} failed: ${errorDetails}`);
85
+ const delayMs = baseDelayMs * 2 ** (attempt - 1);
86
+ await new Promise((res) => setTimeout(res, delayMs));
87
+ }
88
+ }
89
+ throw new Error('Unexpected retry loop failure');
90
+ }
47
91
  //# 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":";;AAOA,oDAIC;AAED,gDAIC;AAQD,sDAkBC;AAQD,4CAYC;AA9DD,2CAA2C;AAM3C,SAAgB,oBAAoB,CAAC,GAAY;IAC/C,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC;QACnC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QAC7D,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;AAC/B,CAAC;AAED,SAAgB,kBAAkB,CAAC,WAAgC;IACjE,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;SAC5B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;SAClG,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAQD,SAAgB,qBAAqB,CAAC,OAAe;IACnD,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,qBAAqB,KAAK,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAE5C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,IAAI,CAAC;YAEH,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAW,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAQD,SAAgB,gBAAgB,CAAC,MAA2B;IAC1D,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;IAE1C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../../libs/utils/src/http.ts"],"names":[],"mappings":";;AAQA,oDAIC;AAED,gDAIC;AAQD,sDAkBC;AAQD,4CAYC;AAkBD,4CAyCC;AA1HD,2CAA2C;AAO3C,SAAgB,oBAAoB,CAAC,GAAY;IAC/C,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC;QACnC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QAC7D,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;AAC/B,CAAC;AAED,SAAgB,kBAAkB,CAAC,WAAgC;IACjE,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;SAC5B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;SAClG,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAQD,SAAgB,qBAAqB,CAAC,OAAe;IACnD,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,qBAAqB,KAAK,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAE5C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,IAAI,CAAC;YAEH,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAW,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAQD,SAAgB,gBAAgB,CAAC,MAA2B;IAC1D,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;IAE1C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,eAAe,CAAC,KAAU;IACjC,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC;QAChB,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,IAAI,oBAAoB,EAAE,CAAC;IACnE,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;QAEjC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,gBAAgB,CAAC;QACjD,OAAO,GAAG,SAAS,MAAM,WAAW,GAAG,CAAC;IAC1C,CAAC;IAED,OAAO,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,EAAoB,EACpB,MAAc,EACd,OAAO,GAAG;IACR,OAAO,EAAE,CAAC;IACV,WAAW,EAAE,GAAG;CACjB;IAED,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEzC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,YAAY,OAAO,OAAO,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;YAGvC,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/C,MAAM,gBAAgB,GAAG,CAAC,MAAM,IAAI,sBAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5E,MAAM,aAAa,GAAG,OAAO,KAAK,OAAO,CAAC;YAE1C,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YAE5C,IAAI,CAAC,gBAAgB,IAAI,aAAa,EAAE,CAAC;gBACvC,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,CAAC,KAAK,CAAC,OAAO,OAAO,oBAAoB,YAAY,EAAE,CAAC,CAAC;gBACjE,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,KAAK,CAAC,6BAA6B,MAAM,MAAM,YAAY,EAAE,CAAC,CAAC;gBACxE,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAChC,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,UAAU,OAAO,YAAY,YAAY,EAAE,CAAC,CAAC;YAEzD,MAAM,OAAO,GAAG,WAAW,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YACjD,MAAM,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACnD,CAAC"}