@mondaydotcomorg/monday-authorization 3.7.3-chore-loosen-auth-resource-types-7913ca9 → 3.7.4-feat-shaime-exponential-backoff-retry-2477e5e
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/dist/authorization-internal-service.d.ts +7 -1
- package/dist/authorization-internal-service.d.ts.map +1 -1
- package/dist/authorization-internal-service.js +14 -2
- package/dist/authorization-service.d.ts.map +1 -1
- package/dist/esm/authorization-internal-service.d.ts +7 -1
- package/dist/esm/authorization-internal-service.d.ts.map +1 -1
- package/dist/esm/authorization-internal-service.mjs +14 -3
- package/dist/esm/authorization-service.d.ts.map +1 -1
- package/dist/esm/testKit/index.d.ts.map +1 -1
- package/dist/testKit/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/authorization-internal-service.ts +23 -3
- package/src/authorization-service.ts +1 -1
- package/src/testKit/index.ts +8 -1
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { fetch, MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
|
|
2
|
-
import { OnRetryCallback, RetryPolicy } from '@mondaydotcomorg/monday-fetch-api';
|
|
2
|
+
import { OnRetryCallback, RetryPolicy, RetryDelayCallback } from '@mondaydotcomorg/monday-fetch-api';
|
|
3
3
|
import { IgniteClient } from '@mondaydotcomorg/ignite-sdk';
|
|
4
4
|
import { BaseRequest } from './types/general';
|
|
5
5
|
export declare const logger: import("bunyan");
|
|
6
6
|
export declare const onRetryCallback: OnRetryCallback;
|
|
7
|
+
/**
|
|
8
|
+
* Exponential backoff retry delay callback
|
|
9
|
+
* Calculates delay as: baseDelay * 2^(attemptCount - 1)
|
|
10
|
+
* Example: attempt 1 -> 100ms, attempt 2 -> 200ms, attempt 3 -> 400ms
|
|
11
|
+
*/
|
|
12
|
+
export declare const exponentialBackoffDelayCallback: RetryDelayCallback;
|
|
7
13
|
export declare class AuthorizationInternalService {
|
|
8
14
|
static igniteClient?: IgniteClient;
|
|
9
15
|
static skipAuthorization(requset: BaseRequest): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization-internal-service.d.ts","sourceRoot":"","sources":["../src/authorization-internal-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,OAAO,
|
|
1
|
+
{"version":3,"file":"authorization-internal-service.d.ts","sourceRoot":"","sources":["../src/authorization-internal-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,OAAO,EAEL,eAAe,EACf,WAAW,EACX,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAK9C,eAAO,MAAM,MAAM,kBAA2B,CAAC;AAO/C,eAAO,MAAM,eAAe,EAAE,eAM7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,EAAE,kBAO7C,CAAC;AAYF,qBAAa,4BAA4B;IACvC,MAAM,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACnC,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIpD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIjD,MAAM,CAAC,+BAA+B,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAMlE,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAcrG,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK;IAQjE,MAAM,CAAC,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAIlE,MAAM,CAAC,sBAAsB,CAAC,wBAAwB,EAAE,kBAAkB;IAO1E,MAAM,CAAC,sBAAsB,IAAI,kBAAkB;IAInD,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY;IAI3C,MAAM,CAAC,iBAAiB;IA2BxB,MAAM,CAAC,gBAAgB,IAAI,WAAW;CAUvC"}
|
|
@@ -25,7 +25,7 @@ const MondayLogger__namespace = /*#__PURE__*/_interopNamespace(MondayLogger);
|
|
|
25
25
|
|
|
26
26
|
const INTERNAL_APP_NAME = 'internal_ms';
|
|
27
27
|
const MAX_RETRIES = 3;
|
|
28
|
-
const RETRY_DELAY_MS =
|
|
28
|
+
const RETRY_DELAY_MS = 20;
|
|
29
29
|
const logger = MondayLogger__namespace.getLogger();
|
|
30
30
|
const defaultMondayFetchOptions = {
|
|
31
31
|
retries: MAX_RETRIES,
|
|
@@ -39,6 +39,16 @@ const onRetryCallback = (attempt, error) => {
|
|
|
39
39
|
logger.info({ tag: 'authorization-service', attempt, error }, 'Authorization attempt failed, trying again');
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
|
+
/**
|
|
43
|
+
* Exponential backoff retry delay callback
|
|
44
|
+
* Calculates delay as: baseDelay * 2^(attemptCount - 1)
|
|
45
|
+
* Example: attempt 1 -> 100ms, attempt 2 -> 200ms, attempt 3 -> 400ms
|
|
46
|
+
*/
|
|
47
|
+
const exponentialBackoffDelayCallback = ({ attemptCount }) => {
|
|
48
|
+
const delay = RETRY_DELAY_MS * Math.pow(2, attemptCount - 1);
|
|
49
|
+
logger.debug({ tag: 'authorization-service', attemptCount, delay }, `Exponential backoff: waiting ${delay}ms before retry attempt ${attemptCount}`);
|
|
50
|
+
return delay;
|
|
51
|
+
};
|
|
42
52
|
function logOnFetchFail(retriesLeft, error) {
|
|
43
53
|
if (retriesLeft == 0) {
|
|
44
54
|
logger.error({ retriesLeft, error }, 'Authorization attempt failed due to network issues');
|
|
@@ -110,15 +120,17 @@ class AuthorizationInternalService {
|
|
|
110
120
|
}
|
|
111
121
|
static getRetriesPolicy() {
|
|
112
122
|
const fetchOptions = AuthorizationInternalService.getRequestFetchOptions();
|
|
123
|
+
const retryDelayMS = exponentialBackoffDelayCallback;
|
|
113
124
|
return {
|
|
114
125
|
useRetries: fetchOptions.retries !== undefined,
|
|
115
126
|
maxRetries: fetchOptions.retries !== undefined ? fetchOptions.retries : 0,
|
|
116
127
|
onRetry: onRetryCallback,
|
|
117
|
-
retryDelayMS
|
|
128
|
+
retryDelayMS,
|
|
118
129
|
};
|
|
119
130
|
}
|
|
120
131
|
}
|
|
121
132
|
|
|
122
133
|
exports.AuthorizationInternalService = AuthorizationInternalService;
|
|
134
|
+
exports.exponentialBackoffDelayCallback = exponentialBackoffDelayCallback;
|
|
123
135
|
exports.logger = logger;
|
|
124
136
|
exports.onRetryCallback = onRetryCallback;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization-service.d.ts","sourceRoot":"","sources":["../src/authorization-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EAAmB,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"authorization-service.d.ts","sourceRoot":"","sources":["../src/authorization-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EAAmB,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAG1G,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,0BAA0B,EAC1B,YAAY,EACb,MAAM,kCAAkC,CAAC;AAY1C,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,mBAAmB,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC7C;AAED,wBAAgB,sBAAsB,CAAC,wBAAwB,EAAE,kBAAkB,QAElF;AAMD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,KAAK,QAAQ,GAK1B;IACD,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAW;IAEpC,OAAO,CAAC,MAAM,KAAK,WAAW,GAK7B;IACD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAc;IAE1C,MAAM,CAAC,eAAe,IAAI,IAAI;IAK9B,MAAM,CAAC,WAAW,CAAC,MAAC;IACpB,MAAM,CAAC,sCAAsC,CAAC,EAAE,MAAM,CAAC;IACvD,MAAM,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IAEnC;;;OAGG;WACU,YAAY,CACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,qBAAqB,EAAE,EAClC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC;WAEhB,YAAY,CACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,2BAA2B,EAAE,mBAAmB,EAAE,GACjD,OAAO,CAAC,iBAAiB,CAAC;IAY7B;;;OAGG;WACU,wBAAwB,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO,GAC1C,OAAO,CAAC,OAAO,CAAC;mBAkBE,6BAA6B;IAclD,OAAO,CAAC,MAAM,CAAC,gBAAgB;WAIlB,gBAAgB,CAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,kBAAkB,CAAC;WAMjB,wBAAwB,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,YAAY,EAAE,GAC5B,OAAO,CAAC,0BAA0B,EAAE,CAAC;mBA4CnB,oBAAoB;mBAUpB,oBAAoB;CAmF1C;AAED,wBAAgB,cAAc,CAC5B,MAAM,KAAA,EACN,sCAAsC,GAAE,MAAiD,QAY1F;AAED,wBAAsB,eAAe,kBAMpC;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,qBAAqB,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAiBjH"}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { fetch, MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
|
|
2
|
-
import { OnRetryCallback, RetryPolicy } from '@mondaydotcomorg/monday-fetch-api';
|
|
2
|
+
import { OnRetryCallback, RetryPolicy, RetryDelayCallback } from '@mondaydotcomorg/monday-fetch-api';
|
|
3
3
|
import { IgniteClient } from '@mondaydotcomorg/ignite-sdk';
|
|
4
4
|
import { BaseRequest } from './types/general';
|
|
5
5
|
export declare const logger: import("bunyan");
|
|
6
6
|
export declare const onRetryCallback: OnRetryCallback;
|
|
7
|
+
/**
|
|
8
|
+
* Exponential backoff retry delay callback
|
|
9
|
+
* Calculates delay as: baseDelay * 2^(attemptCount - 1)
|
|
10
|
+
* Example: attempt 1 -> 100ms, attempt 2 -> 200ms, attempt 3 -> 400ms
|
|
11
|
+
*/
|
|
12
|
+
export declare const exponentialBackoffDelayCallback: RetryDelayCallback;
|
|
7
13
|
export declare class AuthorizationInternalService {
|
|
8
14
|
static igniteClient?: IgniteClient;
|
|
9
15
|
static skipAuthorization(requset: BaseRequest): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization-internal-service.d.ts","sourceRoot":"","sources":["../../src/authorization-internal-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,OAAO,
|
|
1
|
+
{"version":3,"file":"authorization-internal-service.d.ts","sourceRoot":"","sources":["../../src/authorization-internal-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,OAAO,EAEL,eAAe,EACf,WAAW,EACX,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAK9C,eAAO,MAAM,MAAM,kBAA2B,CAAC;AAO/C,eAAO,MAAM,eAAe,EAAE,eAM7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,EAAE,kBAO7C,CAAC;AAYF,qBAAa,4BAA4B;IACvC,MAAM,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACnC,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIpD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIjD,MAAM,CAAC,+BAA+B,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAMlE,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAcrG,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK;IAQjE,MAAM,CAAC,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAIlE,MAAM,CAAC,sBAAsB,CAAC,wBAAwB,EAAE,kBAAkB;IAO1E,MAAM,CAAC,sBAAsB,IAAI,kBAAkB;IAInD,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY;IAI3C,MAAM,CAAC,iBAAiB;IA2BxB,MAAM,CAAC,gBAAgB,IAAI,WAAW;CAUvC"}
|
|
@@ -3,7 +3,7 @@ import * as MondayLogger from '@mondaydotcomorg/monday-logger';
|
|
|
3
3
|
|
|
4
4
|
const INTERNAL_APP_NAME = 'internal_ms';
|
|
5
5
|
const MAX_RETRIES = 3;
|
|
6
|
-
const RETRY_DELAY_MS =
|
|
6
|
+
const RETRY_DELAY_MS = 20;
|
|
7
7
|
const logger = MondayLogger.getLogger();
|
|
8
8
|
const defaultMondayFetchOptions = {
|
|
9
9
|
retries: MAX_RETRIES,
|
|
@@ -17,6 +17,16 @@ const onRetryCallback = (attempt, error) => {
|
|
|
17
17
|
logger.info({ tag: 'authorization-service', attempt, error }, 'Authorization attempt failed, trying again');
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* Exponential backoff retry delay callback
|
|
22
|
+
* Calculates delay as: baseDelay * 2^(attemptCount - 1)
|
|
23
|
+
* Example: attempt 1 -> 100ms, attempt 2 -> 200ms, attempt 3 -> 400ms
|
|
24
|
+
*/
|
|
25
|
+
const exponentialBackoffDelayCallback = ({ attemptCount }) => {
|
|
26
|
+
const delay = RETRY_DELAY_MS * Math.pow(2, attemptCount - 1);
|
|
27
|
+
logger.debug({ tag: 'authorization-service', attemptCount, delay }, `Exponential backoff: waiting ${delay}ms before retry attempt ${attemptCount}`);
|
|
28
|
+
return delay;
|
|
29
|
+
};
|
|
20
30
|
function logOnFetchFail(retriesLeft, error) {
|
|
21
31
|
if (retriesLeft == 0) {
|
|
22
32
|
logger.error({ retriesLeft, error }, 'Authorization attempt failed due to network issues');
|
|
@@ -88,13 +98,14 @@ class AuthorizationInternalService {
|
|
|
88
98
|
}
|
|
89
99
|
static getRetriesPolicy() {
|
|
90
100
|
const fetchOptions = AuthorizationInternalService.getRequestFetchOptions();
|
|
101
|
+
const retryDelayMS = exponentialBackoffDelayCallback;
|
|
91
102
|
return {
|
|
92
103
|
useRetries: fetchOptions.retries !== undefined,
|
|
93
104
|
maxRetries: fetchOptions.retries !== undefined ? fetchOptions.retries : 0,
|
|
94
105
|
onRetry: onRetryCallback,
|
|
95
|
-
retryDelayMS
|
|
106
|
+
retryDelayMS,
|
|
96
107
|
};
|
|
97
108
|
}
|
|
98
109
|
}
|
|
99
110
|
|
|
100
|
-
export { AuthorizationInternalService, logger, onRetryCallback };
|
|
111
|
+
export { AuthorizationInternalService, exponentialBackoffDelayCallback, logger, onRetryCallback };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization-service.d.ts","sourceRoot":"","sources":["../../src/authorization-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EAAmB,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"authorization-service.d.ts","sourceRoot":"","sources":["../../src/authorization-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EAAmB,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAG1G,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,0BAA0B,EAC1B,YAAY,EACb,MAAM,kCAAkC,CAAC;AAY1C,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,mBAAmB,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC7C;AAED,wBAAgB,sBAAsB,CAAC,wBAAwB,EAAE,kBAAkB,QAElF;AAMD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,KAAK,QAAQ,GAK1B;IACD,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAW;IAEpC,OAAO,CAAC,MAAM,KAAK,WAAW,GAK7B;IACD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAc;IAE1C,MAAM,CAAC,eAAe,IAAI,IAAI;IAK9B,MAAM,CAAC,WAAW,CAAC,MAAC;IACpB,MAAM,CAAC,sCAAsC,CAAC,EAAE,MAAM,CAAC;IACvD,MAAM,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IAEnC;;;OAGG;WACU,YAAY,CACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,qBAAqB,EAAE,EAClC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC;WAEhB,YAAY,CACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,2BAA2B,EAAE,mBAAmB,EAAE,GACjD,OAAO,CAAC,iBAAiB,CAAC;IAY7B;;;OAGG;WACU,wBAAwB,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO,GAC1C,OAAO,CAAC,OAAO,CAAC;mBAkBE,6BAA6B;IAclD,OAAO,CAAC,MAAM,CAAC,gBAAgB;WAIlB,gBAAgB,CAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,kBAAkB,CAAC;WAMjB,wBAAwB,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,YAAY,EAAE,GAC5B,OAAO,CAAC,0BAA0B,EAAE,CAAC;mBA4CnB,oBAAoB;mBAUpB,oBAAoB;CAmF1C;AAED,wBAAgB,cAAc,CAC5B,MAAM,KAAA,EACN,sCAAsC,GAAE,MAAiD,QAY1F;AAED,wBAAsB,eAAe,kBAMpC;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,qBAAqB,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAiBjH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testKit/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testKit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,eAAO,MAAM,sBAAsB,GACjC,WAAW,MAAM,EACjB,QAAQ,MAAM,EACd,WAAW,qBAAqB,EAAE,EAClC,QAAQ,MAAM,SAGf,CAAC;AAEF,eAAO,MAAM,yBAAyB,YAErC,CAAC;AA+BF,eAAO,MAAM,8BAA8B,GACzC,QAAQ,MAAM,EACd,gBAAgB,cAAc,EAC9B,gBAAgB,aAAa,MAG3B,SAAS,WAAW,EACpB,UAAU,YAAY,EACtB,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAYhB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testKit/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testKit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,eAAO,MAAM,sBAAsB,GACjC,WAAW,MAAM,EACjB,QAAQ,MAAM,EACd,WAAW,qBAAqB,EAAE,EAClC,QAAQ,MAAM,SAGf,CAAC;AAEF,eAAO,MAAM,yBAAyB,YAErC,CAAC;AA+BF,eAAO,MAAM,8BAA8B,GACzC,QAAQ,MAAM,EACd,gBAAgB,cAAc,EAC9B,gBAAgB,aAAa,MAG3B,SAAS,WAAW,EACpB,UAAU,YAAY,EACtB,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAYhB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mondaydotcomorg/monday-authorization",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.4-feat-shaime-exponential-backoff-retry-2477e5e",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "BSD-3-Clause",
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { signAuthorizationHeader } from '@mondaydotcomorg/monday-jwt';
|
|
2
2
|
import { fetch, MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
|
|
3
3
|
import * as MondayLogger from '@mondaydotcomorg/monday-logger';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
NullableErrorWithType,
|
|
6
|
+
OnRetryCallback,
|
|
7
|
+
RetryPolicy,
|
|
8
|
+
RetryDelayCallback,
|
|
9
|
+
} from '@mondaydotcomorg/monday-fetch-api';
|
|
5
10
|
import { IgniteClient } from '@mondaydotcomorg/ignite-sdk';
|
|
6
11
|
import { BaseRequest } from './types/general';
|
|
7
12
|
|
|
8
13
|
const INTERNAL_APP_NAME = 'internal_ms';
|
|
9
14
|
const MAX_RETRIES = 3;
|
|
10
|
-
const RETRY_DELAY_MS =
|
|
15
|
+
const RETRY_DELAY_MS = 20;
|
|
11
16
|
export const logger = MondayLogger.getLogger();
|
|
12
17
|
|
|
13
18
|
const defaultMondayFetchOptions: MondayFetchOptions = {
|
|
@@ -23,6 +28,20 @@ export const onRetryCallback: OnRetryCallback = (attempt: number, error?: Nullab
|
|
|
23
28
|
}
|
|
24
29
|
};
|
|
25
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Exponential backoff retry delay callback
|
|
33
|
+
* Calculates delay as: baseDelay * 2^(attemptCount - 1)
|
|
34
|
+
* Example: attempt 1 -> 100ms, attempt 2 -> 200ms, attempt 3 -> 400ms
|
|
35
|
+
*/
|
|
36
|
+
export const exponentialBackoffDelayCallback: RetryDelayCallback = ({ attemptCount }) => {
|
|
37
|
+
const delay = RETRY_DELAY_MS * Math.pow(2, attemptCount - 1);
|
|
38
|
+
logger.debug(
|
|
39
|
+
{ tag: 'authorization-service', attemptCount, delay },
|
|
40
|
+
`Exponential backoff: waiting ${delay}ms before retry attempt ${attemptCount}`
|
|
41
|
+
);
|
|
42
|
+
return delay;
|
|
43
|
+
};
|
|
44
|
+
|
|
26
45
|
function logOnFetchFail(retriesLeft: number, error: Error) {
|
|
27
46
|
if (retriesLeft == 0) {
|
|
28
47
|
logger.error({ retriesLeft, error }, 'Authorization attempt failed due to network issues');
|
|
@@ -119,11 +138,12 @@ export class AuthorizationInternalService {
|
|
|
119
138
|
|
|
120
139
|
static getRetriesPolicy(): RetryPolicy {
|
|
121
140
|
const fetchOptions = AuthorizationInternalService.getRequestFetchOptions();
|
|
141
|
+
const retryDelayMS = exponentialBackoffDelayCallback;
|
|
122
142
|
return {
|
|
123
143
|
useRetries: fetchOptions.retries !== undefined,
|
|
124
144
|
maxRetries: fetchOptions.retries !== undefined ? fetchOptions.retries : 0,
|
|
125
145
|
onRetry: onRetryCallback,
|
|
126
|
-
retryDelayMS
|
|
146
|
+
retryDelayMS,
|
|
127
147
|
};
|
|
128
148
|
}
|
|
129
149
|
}
|
|
@@ -3,7 +3,7 @@ import { MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
|
|
|
3
3
|
import { Api } from '@mondaydotcomorg/trident-backend-api';
|
|
4
4
|
import { HttpFetcherError } from '@mondaydotcomorg/monday-fetch-api';
|
|
5
5
|
import { getIgniteClient, IgniteClient } from '@mondaydotcomorg/ignite-sdk';
|
|
6
|
-
import { Action, AuthorizationObject, AuthorizationParams, AuthorizationResource
|
|
6
|
+
import { Action, AuthorizationObject, AuthorizationParams, AuthorizationResource } from './types/general';
|
|
7
7
|
import { sendAuthorizationCheckResponseTimeMetric } from './prometheus-service';
|
|
8
8
|
import { recordAuthorizationTiming } from './metrics-service';
|
|
9
9
|
import {
|
package/src/testKit/index.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Action,
|
|
3
|
+
AuthorizationResource,
|
|
4
|
+
BaseRequest,
|
|
5
|
+
BaseResponse,
|
|
6
|
+
ContextGetter,
|
|
7
|
+
ResourceGetter,
|
|
8
|
+
} from '../types/general';
|
|
2
9
|
import { defaultContextGetter } from '../authorization-middleware';
|
|
3
10
|
import { AuthorizationInternalService } from '../authorization-internal-service';
|
|
4
11
|
import type { NextFunction } from 'express';
|