@mondaydotcomorg/monday-authorization 3.7.4 → 3.7.5-feat-shaime-delay-retry-when-response-code-is-429-c78b71b

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.
@@ -1,19 +1,26 @@
1
- import { fetch, MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
2
- import { OnRetryCallback, RetryPolicy } from '@mondaydotcomorg/monday-fetch-api';
1
+ import { OnRetryCallback, Response, RetryPolicy, RetryDelayCallback } from '@mondaydotcomorg/monday-fetch-api';
3
2
  import { IgniteClient } from '@mondaydotcomorg/ignite-sdk';
4
3
  import { BaseRequest } from './types/general';
4
+ export declare const MAX_RETRIES = 3;
5
+ export declare const RETRY_DELAY_MS = 20;
5
6
  export declare const logger: import("bunyan");
6
7
  export declare const onRetryCallback: OnRetryCallback;
8
+ /**
9
+ * Exponential backoff retry delay callback
10
+ * Calculates delay as: baseDelay * 2^(attemptCount - 1)
11
+ * Example: attempt 1 -> 100ms, attempt 2 -> 200ms, attempt 3 -> 400ms
12
+ */
13
+ export declare const calcDelayDurationInMs: RetryDelayCallback;
7
14
  export declare class AuthorizationInternalService {
8
15
  static igniteClient?: IgniteClient;
9
16
  static skipAuthorization(requset: BaseRequest): void;
10
17
  static markAuthorized(request: BaseRequest): void;
11
18
  static failIfNotCoveredByAuthorization(request: BaseRequest): void;
12
- static throwOnHttpErrorIfNeeded(response: Awaited<ReturnType<typeof fetch>>, placement: string): void;
19
+ static throwOnHttpErrorIfNeeded(response: Response, placement: string): void;
13
20
  static throwOnHttpError(status: number, placement: string): never;
14
21
  static generateInternalAuthToken(accountId: number, userId: number): string;
15
- static setRequestFetchOptions(customMondayFetchOptions: MondayFetchOptions): void;
16
- static getRequestFetchOptions(): MondayFetchOptions;
22
+ static setRequestFetchOptions(customMondayFetchOptions: RetryPolicy): void;
23
+ static getRequestFetchOptions(): RetryPolicy;
17
24
  static setIgniteClient(client: IgniteClient): void;
18
25
  static getRequestTimeout(): number;
19
26
  static getRetriesPolicy(): RetryPolicy;
@@ -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,EAAyB,eAAe,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AACxG,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;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;CASvC"}
1
+ {"version":3,"file":"authorization-internal-service.d.ts","sourceRoot":"","sources":["../src/authorization-internal-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,eAAe,EACf,QAAQ,EACR,WAAW,EACX,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,MAAM,kBAA2B,CAAC;AAQ/C,eAAO,MAAM,eAAe,EAAE,eAM7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,kBAEnC,CAAC;AAIF,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,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAc5E,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,WAAW;IAOnE,MAAM,CAAC,sBAAsB,IAAI,WAAW;IAI5C,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY;IAI3C,MAAM,CAAC,iBAAiB;IA2BxB,MAAM,CAAC,gBAAgB,IAAI,WAAW;CAavC"}
@@ -25,28 +25,29 @@ 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 = 10;
28
+ const RETRY_DELAY_MS = 20;
29
29
  const logger = MondayLogger__namespace.getLogger();
30
30
  const defaultMondayFetchOptions = {
31
- retries: MAX_RETRIES,
32
- callback: logOnFetchFail,
31
+ useRetries: true,
32
+ maxRetries: MAX_RETRIES,
33
+ retryDelayMS: RETRY_DELAY_MS,
33
34
  };
34
35
  const onRetryCallback = (attempt, error) => {
35
36
  if (attempt == MAX_RETRIES) {
36
37
  logger.error({ tag: 'authorization-service', attempt, error }, 'Authorization attempt failed');
37
38
  }
38
39
  else {
39
- logger.info({ tag: 'authorization-service', attempt, error }, 'Authorization attempt failed, trying again');
40
+ logger.debug({ tag: 'authorization-service', attempt, error }, 'Authorization attempt failed, trying again');
40
41
  }
41
42
  };
42
- function logOnFetchFail(retriesLeft, error) {
43
- if (retriesLeft == 0) {
44
- logger.error({ retriesLeft, error }, 'Authorization attempt failed due to network issues');
45
- }
46
- else {
47
- logger.info({ retriesLeft, error }, 'Authorization attempt failed due to network issues, trying again');
48
- }
49
- }
43
+ /**
44
+ * Exponential backoff retry delay callback
45
+ * Calculates delay as: baseDelay * 2^(attemptCount - 1)
46
+ * Example: attempt 1 -> 100ms, attempt 2 -> 200ms, attempt 3 -> 400ms
47
+ */
48
+ const calcDelayDurationInMs = retryData => {
49
+ return RETRY_DELAY_MS * Math.pow(2, retryData.attemptCount - 1);
50
+ };
50
51
  let mondayFetchOptions = defaultMondayFetchOptions;
51
52
  class AuthorizationInternalService {
52
53
  static igniteClient;
@@ -110,15 +111,22 @@ class AuthorizationInternalService {
110
111
  }
111
112
  static getRetriesPolicy() {
112
113
  const fetchOptions = AuthorizationInternalService.getRequestFetchOptions();
114
+ const retryDelayMS = calcDelayDurationInMs;
113
115
  return {
114
- useRetries: fetchOptions.retries !== undefined,
115
- maxRetries: fetchOptions.retries !== undefined ? fetchOptions.retries : 0,
116
+ useRetries: fetchOptions.useRetries,
117
+ maxRetries: fetchOptions.maxRetries,
116
118
  onRetry: onRetryCallback,
117
- retryDelayMS: fetchOptions.retryDelay ?? RETRY_DELAY_MS,
119
+ retryOn: (_attempt, _error, response) => {
120
+ return [439, 500].includes(response?.status);
121
+ },
122
+ retryDelayMS,
118
123
  };
119
124
  }
120
125
  }
121
126
 
122
127
  exports.AuthorizationInternalService = AuthorizationInternalService;
128
+ exports.MAX_RETRIES = MAX_RETRIES;
129
+ exports.RETRY_DELAY_MS = RETRY_DELAY_MS;
130
+ exports.calcDelayDurationInMs = calcDelayDurationInMs;
123
131
  exports.logger = logger;
124
132
  exports.onRetryCallback = onRetryCallback;
@@ -1,4 +1,4 @@
1
- import { MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
1
+ import { RetryPolicy } from '@mondaydotcomorg/monday-fetch-api';
2
2
  import { IgniteClient } from '@mondaydotcomorg/ignite-sdk';
3
3
  import { Action, AuthorizationObject, AuthorizationParams, AuthorizationResource } from './types/general';
4
4
  import { ScopedAction, ScopedActionPermit, ScopedActionResponseObject, ScopeOptions } from './types/scoped-actions-contracts';
@@ -7,7 +7,7 @@ export interface AuthorizeResponse {
7
7
  unauthorizedIds?: number[];
8
8
  unauthorizedObjects?: AuthorizationObject[];
9
9
  }
10
- export declare function setRequestFetchOptions(customMondayFetchOptions: MondayFetchOptions): void;
10
+ export declare function setRequestFetchOptions(customMondayFetchOptions: RetryPolicy): void;
11
11
  export declare class AuthorizationService {
12
12
  private static get graphApi();
13
13
  private static _graphApi?;
@@ -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,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
+ {"version":3,"file":"authorization-service.d.ts","sourceRoot":"","sources":["../src/authorization-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAClF,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,WAAW,QAE3E;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,19 +1,26 @@
1
- import { fetch, MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
2
- import { OnRetryCallback, RetryPolicy } from '@mondaydotcomorg/monday-fetch-api';
1
+ import { OnRetryCallback, Response, RetryPolicy, RetryDelayCallback } from '@mondaydotcomorg/monday-fetch-api';
3
2
  import { IgniteClient } from '@mondaydotcomorg/ignite-sdk';
4
3
  import { BaseRequest } from './types/general';
4
+ export declare const MAX_RETRIES = 3;
5
+ export declare const RETRY_DELAY_MS = 20;
5
6
  export declare const logger: import("bunyan");
6
7
  export declare const onRetryCallback: OnRetryCallback;
8
+ /**
9
+ * Exponential backoff retry delay callback
10
+ * Calculates delay as: baseDelay * 2^(attemptCount - 1)
11
+ * Example: attempt 1 -> 100ms, attempt 2 -> 200ms, attempt 3 -> 400ms
12
+ */
13
+ export declare const calcDelayDurationInMs: RetryDelayCallback;
7
14
  export declare class AuthorizationInternalService {
8
15
  static igniteClient?: IgniteClient;
9
16
  static skipAuthorization(requset: BaseRequest): void;
10
17
  static markAuthorized(request: BaseRequest): void;
11
18
  static failIfNotCoveredByAuthorization(request: BaseRequest): void;
12
- static throwOnHttpErrorIfNeeded(response: Awaited<ReturnType<typeof fetch>>, placement: string): void;
19
+ static throwOnHttpErrorIfNeeded(response: Response, placement: string): void;
13
20
  static throwOnHttpError(status: number, placement: string): never;
14
21
  static generateInternalAuthToken(accountId: number, userId: number): string;
15
- static setRequestFetchOptions(customMondayFetchOptions: MondayFetchOptions): void;
16
- static getRequestFetchOptions(): MondayFetchOptions;
22
+ static setRequestFetchOptions(customMondayFetchOptions: RetryPolicy): void;
23
+ static getRequestFetchOptions(): RetryPolicy;
17
24
  static setIgniteClient(client: IgniteClient): void;
18
25
  static getRequestTimeout(): number;
19
26
  static getRetriesPolicy(): RetryPolicy;
@@ -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,EAAyB,eAAe,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AACxG,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;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;CASvC"}
1
+ {"version":3,"file":"authorization-internal-service.d.ts","sourceRoot":"","sources":["../../src/authorization-internal-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,eAAe,EACf,QAAQ,EACR,WAAW,EACX,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,MAAM,kBAA2B,CAAC;AAQ/C,eAAO,MAAM,eAAe,EAAE,eAM7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,kBAEnC,CAAC;AAIF,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,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAc5E,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,WAAW;IAOnE,MAAM,CAAC,sBAAsB,IAAI,WAAW;IAI5C,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY;IAI3C,MAAM,CAAC,iBAAiB;IA2BxB,MAAM,CAAC,gBAAgB,IAAI,WAAW;CAavC"}
@@ -3,28 +3,29 @@ 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 = 10;
6
+ const RETRY_DELAY_MS = 20;
7
7
  const logger = MondayLogger.getLogger();
8
8
  const defaultMondayFetchOptions = {
9
- retries: MAX_RETRIES,
10
- callback: logOnFetchFail,
9
+ useRetries: true,
10
+ maxRetries: MAX_RETRIES,
11
+ retryDelayMS: RETRY_DELAY_MS,
11
12
  };
12
13
  const onRetryCallback = (attempt, error) => {
13
14
  if (attempt == MAX_RETRIES) {
14
15
  logger.error({ tag: 'authorization-service', attempt, error }, 'Authorization attempt failed');
15
16
  }
16
17
  else {
17
- logger.info({ tag: 'authorization-service', attempt, error }, 'Authorization attempt failed, trying again');
18
+ logger.debug({ tag: 'authorization-service', attempt, error }, 'Authorization attempt failed, trying again');
18
19
  }
19
20
  };
20
- function logOnFetchFail(retriesLeft, error) {
21
- if (retriesLeft == 0) {
22
- logger.error({ retriesLeft, error }, 'Authorization attempt failed due to network issues');
23
- }
24
- else {
25
- logger.info({ retriesLeft, error }, 'Authorization attempt failed due to network issues, trying again');
26
- }
27
- }
21
+ /**
22
+ * Exponential backoff retry delay callback
23
+ * Calculates delay as: baseDelay * 2^(attemptCount - 1)
24
+ * Example: attempt 1 -> 100ms, attempt 2 -> 200ms, attempt 3 -> 400ms
25
+ */
26
+ const calcDelayDurationInMs = retryData => {
27
+ return RETRY_DELAY_MS * Math.pow(2, retryData.attemptCount - 1);
28
+ };
28
29
  let mondayFetchOptions = defaultMondayFetchOptions;
29
30
  class AuthorizationInternalService {
30
31
  static igniteClient;
@@ -88,13 +89,17 @@ class AuthorizationInternalService {
88
89
  }
89
90
  static getRetriesPolicy() {
90
91
  const fetchOptions = AuthorizationInternalService.getRequestFetchOptions();
92
+ const retryDelayMS = calcDelayDurationInMs;
91
93
  return {
92
- useRetries: fetchOptions.retries !== undefined,
93
- maxRetries: fetchOptions.retries !== undefined ? fetchOptions.retries : 0,
94
+ useRetries: fetchOptions.useRetries,
95
+ maxRetries: fetchOptions.maxRetries,
94
96
  onRetry: onRetryCallback,
95
- retryDelayMS: fetchOptions.retryDelay ?? RETRY_DELAY_MS,
97
+ retryOn: (_attempt, _error, response) => {
98
+ return [439, 500].includes(response?.status);
99
+ },
100
+ retryDelayMS,
96
101
  };
97
102
  }
98
103
  }
99
104
 
100
- export { AuthorizationInternalService, logger, onRetryCallback };
105
+ export { AuthorizationInternalService, MAX_RETRIES, RETRY_DELAY_MS, calcDelayDurationInMs, logger, onRetryCallback };
@@ -1,4 +1,4 @@
1
- import { MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
1
+ import { RetryPolicy } from '@mondaydotcomorg/monday-fetch-api';
2
2
  import { IgniteClient } from '@mondaydotcomorg/ignite-sdk';
3
3
  import { Action, AuthorizationObject, AuthorizationParams, AuthorizationResource } from './types/general';
4
4
  import { ScopedAction, ScopedActionPermit, ScopedActionResponseObject, ScopeOptions } from './types/scoped-actions-contracts';
@@ -7,7 +7,7 @@ export interface AuthorizeResponse {
7
7
  unauthorizedIds?: number[];
8
8
  unauthorizedObjects?: AuthorizationObject[];
9
9
  }
10
- export declare function setRequestFetchOptions(customMondayFetchOptions: MondayFetchOptions): void;
10
+ export declare function setRequestFetchOptions(customMondayFetchOptions: RetryPolicy): void;
11
11
  export declare class AuthorizationService {
12
12
  private static get graphApi();
13
13
  private static _graphApi?;
@@ -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,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
+ {"version":3,"file":"authorization-service.d.ts","sourceRoot":"","sources":["../../src/authorization-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAClF,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,WAAW,QAE3E;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,6 +1,6 @@
1
- import { MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
2
1
  import { MetricsClient } from './metrics-service';
3
2
  import * as TestKit from './testKit';
3
+ import { RetryPolicy } from '@mondaydotcomorg/monday-fetch-api';
4
4
  interface MetricsInitOptions {
5
5
  client?: MetricsClient;
6
6
  serviceName?: string;
@@ -10,7 +10,7 @@ interface MetricsInitOptions {
10
10
  }
11
11
  export interface InitOptions {
12
12
  prometheus?: any;
13
- mondayFetchOptions?: MondayFetchOptions;
13
+ mondayFetchOptions?: RetryPolicy;
14
14
  redisClient?: any;
15
15
  grantedFeatureRedisExpirationInSeconds?: number;
16
16
  metrics?: MetricsInitOptions;
@@ -31,4 +31,5 @@ export { CustomRole, BasicRole, RoleType, RoleCreateRequest, RoleUpdateRequest,
31
31
  export { AttributeAssignment, AttributeOperation, ResourceAttributeDeleteAssignment, ResourceAttributeUpsertOperation, ResourceAttributeDeleteOperation, EntityAttributeDeleteAssignment, EntityAttributeUpsertOperation, EntityAttributeDeleteOperation, ResourceAttributeAssignment as ResourceAttributeAssignmentContract, EntityAttributeAssignment as EntityAttributeAssignmentContract, } from './types/authorization-attributes-contracts';
32
32
  export { BaseAuthorizationAttributesService as IAuthorizationAttributesService } from './base-authorization-attributes-service';
33
33
  export { TestKit };
34
+ export type { RetryPolicy };
34
35
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EAAqB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAChD,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,iBA6BnD;AAED,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AACpF,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,QAAQ,EACR,WAAW,EACX,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACrH,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iCAAiC,EACjC,gCAAgC,EAChC,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,8BAA8B,EAC9B,2BAA2B,IAAI,mCAAmC,EAClE,yBAAyB,IAAI,iCAAiC,GAC/D,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,kCAAkC,IAAI,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAEhI,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAEhE,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAChD,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,iBA6BnD;AAED,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AACpF,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,QAAQ,EACR,WAAW,EACX,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACrH,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iCAAiC,EACjC,gCAAgC,EAChC,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,8BAA8B,EAC9B,2BAA2B,IAAI,mCAAmC,EAClE,yBAAyB,IAAI,iCAAiC,GAC/D,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,kCAAkC,IAAI,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAEhI,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,YAAY,EAAE,WAAW,EAAE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
2
1
  import { MetricsClient } from './metrics-service';
3
2
  import * as TestKit from './testKit';
3
+ import { RetryPolicy } from '@mondaydotcomorg/monday-fetch-api';
4
4
  interface MetricsInitOptions {
5
5
  client?: MetricsClient;
6
6
  serviceName?: string;
@@ -10,7 +10,7 @@ interface MetricsInitOptions {
10
10
  }
11
11
  export interface InitOptions {
12
12
  prometheus?: any;
13
- mondayFetchOptions?: MondayFetchOptions;
13
+ mondayFetchOptions?: RetryPolicy;
14
14
  redisClient?: any;
15
15
  grantedFeatureRedisExpirationInSeconds?: number;
16
16
  metrics?: MetricsInitOptions;
@@ -31,4 +31,5 @@ export { CustomRole, BasicRole, RoleType, RoleCreateRequest, RoleUpdateRequest,
31
31
  export { AttributeAssignment, AttributeOperation, ResourceAttributeDeleteAssignment, ResourceAttributeUpsertOperation, ResourceAttributeDeleteOperation, EntityAttributeDeleteAssignment, EntityAttributeUpsertOperation, EntityAttributeDeleteOperation, ResourceAttributeAssignment as ResourceAttributeAssignmentContract, EntityAttributeAssignment as EntityAttributeAssignmentContract, } from './types/authorization-attributes-contracts';
32
32
  export { BaseAuthorizationAttributesService as IAuthorizationAttributesService } from './base-authorization-attributes-service';
33
33
  export { TestKit };
34
+ export type { RetryPolicy };
34
35
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EAAqB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAChD,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,iBA6BnD;AAED,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AACpF,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,QAAQ,EACR,WAAW,EACX,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACrH,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iCAAiC,EACjC,gCAAgC,EAChC,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,8BAA8B,EAC9B,2BAA2B,IAAI,mCAAmC,EAClE,yBAAyB,IAAI,iCAAiC,GAC/D,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,kCAAkC,IAAI,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAEhI,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAEhE,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,sCAAsC,CAAC,EAAE,MAAM,CAAC;IAChD,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,iBA6BnD;AAED,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AACpF,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,QAAQ,EACR,WAAW,EACX,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACrH,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iCAAiC,EACjC,gCAAgC,EAChC,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,8BAA8B,EAC9B,2BAA2B,IAAI,mCAAmC,EAClE,yBAAyB,IAAI,iCAAiC,GAC/D,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,kCAAkC,IAAI,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAEhI,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,YAAY,EAAE,WAAW,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mondaydotcomorg/monday-authorization",
3
- "version": "3.7.4",
3
+ "version": "3.7.5-feat-shaime-delay-retry-when-response-code-is-429-c78b71b",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "BSD-3-Clause",
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "@mondaydotcomorg/ignite-sdk": "^2.2.7",
24
- "@mondaydotcomorg/monday-fetch": "^0.0.7",
24
+ "@mondaydotcomorg/monday-fetch": "^2.2.0",
25
25
  "@mondaydotcomorg/monday-fetch-api": "^1.0.2",
26
26
  "@mondaydotcomorg/monday-jwt": "^3.0.14",
27
27
  "@mondaydotcomorg/monday-logger": "^4.0.11",
@@ -1,37 +1,44 @@
1
1
  import { signAuthorizationHeader } from '@mondaydotcomorg/monday-jwt';
2
- import { fetch, MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
3
2
  import * as MondayLogger from '@mondaydotcomorg/monday-logger';
4
- import { NullableErrorWithType, OnRetryCallback, RetryPolicy } from '@mondaydotcomorg/monday-fetch-api';
3
+ import {
4
+ NullableErrorWithType,
5
+ OnRetryCallback,
6
+ Response,
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
- const MAX_RETRIES = 3;
10
- const RETRY_DELAY_MS = 10;
14
+ export const MAX_RETRIES = 3;
15
+ export const RETRY_DELAY_MS = 20;
11
16
  export const logger = MondayLogger.getLogger();
12
17
 
13
- const defaultMondayFetchOptions: MondayFetchOptions = {
14
- retries: MAX_RETRIES,
15
- callback: logOnFetchFail,
18
+ const defaultMondayFetchOptions: RetryPolicy = {
19
+ useRetries: true,
20
+ maxRetries: MAX_RETRIES,
21
+ retryDelayMS: RETRY_DELAY_MS,
16
22
  };
17
23
 
18
24
  export const onRetryCallback: OnRetryCallback = (attempt: number, error?: NullableErrorWithType) => {
19
25
  if (attempt == MAX_RETRIES) {
20
26
  logger.error({ tag: 'authorization-service', attempt, error }, 'Authorization attempt failed');
21
27
  } else {
22
- logger.info({ tag: 'authorization-service', attempt, error }, 'Authorization attempt failed, trying again');
28
+ logger.debug({ tag: 'authorization-service', attempt, error }, 'Authorization attempt failed, trying again');
23
29
  }
24
30
  };
25
31
 
26
- function logOnFetchFail(retriesLeft: number, error: Error) {
27
- if (retriesLeft == 0) {
28
- logger.error({ retriesLeft, error }, 'Authorization attempt failed due to network issues');
29
- } else {
30
- logger.info({ retriesLeft, error }, 'Authorization attempt failed due to network issues, trying again');
31
- }
32
- }
32
+ /**
33
+ * Exponential backoff retry delay callback
34
+ * Calculates delay as: baseDelay * 2^(attemptCount - 1)
35
+ * Example: attempt 1 -> 100ms, attempt 2 -> 200ms, attempt 3 -> 400ms
36
+ */
37
+ export const calcDelayDurationInMs: RetryDelayCallback = retryData => {
38
+ return RETRY_DELAY_MS * Math.pow(2, retryData.attemptCount - 1);
39
+ };
33
40
 
34
- let mondayFetchOptions: MondayFetchOptions = defaultMondayFetchOptions;
41
+ let mondayFetchOptions = defaultMondayFetchOptions;
35
42
 
36
43
  export class AuthorizationInternalService {
37
44
  static igniteClient?: IgniteClient;
@@ -49,7 +56,7 @@ export class AuthorizationInternalService {
49
56
  }
50
57
  }
51
58
 
52
- static throwOnHttpErrorIfNeeded(response: Awaited<ReturnType<typeof fetch>>, placement: string): void {
59
+ static throwOnHttpErrorIfNeeded(response: Response, placement: string): void {
53
60
  if (response.ok) {
54
61
  return;
55
62
  }
@@ -75,14 +82,14 @@ export class AuthorizationInternalService {
75
82
  return signAuthorizationHeader({ appName: INTERNAL_APP_NAME, accountId, userId });
76
83
  }
77
84
 
78
- static setRequestFetchOptions(customMondayFetchOptions: MondayFetchOptions) {
85
+ static setRequestFetchOptions(customMondayFetchOptions: RetryPolicy) {
79
86
  mondayFetchOptions = {
80
87
  ...defaultMondayFetchOptions,
81
88
  ...customMondayFetchOptions,
82
89
  };
83
90
  }
84
91
 
85
- static getRequestFetchOptions(): MondayFetchOptions {
92
+ static getRequestFetchOptions(): RetryPolicy {
86
93
  return mondayFetchOptions;
87
94
  }
88
95
 
@@ -119,11 +126,15 @@ export class AuthorizationInternalService {
119
126
 
120
127
  static getRetriesPolicy(): RetryPolicy {
121
128
  const fetchOptions = AuthorizationInternalService.getRequestFetchOptions();
129
+ const retryDelayMS = calcDelayDurationInMs;
122
130
  return {
123
- useRetries: fetchOptions.retries !== undefined,
124
- maxRetries: fetchOptions.retries !== undefined ? fetchOptions.retries : 0,
131
+ useRetries: fetchOptions.useRetries,
132
+ maxRetries: fetchOptions.maxRetries,
125
133
  onRetry: onRetryCallback,
126
- retryDelayMS: fetchOptions.retryDelay ?? RETRY_DELAY_MS,
134
+ retryOn: (_attempt, _error, response) => {
135
+ return [439, 500].includes(response?.status);
136
+ },
137
+ retryDelayMS,
127
138
  };
128
139
  }
129
140
  }
@@ -1,7 +1,6 @@
1
1
  import { performance } from 'perf_hooks';
2
- import { MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
3
2
  import { Api } from '@mondaydotcomorg/trident-backend-api';
4
- import { HttpFetcherError } from '@mondaydotcomorg/monday-fetch-api';
3
+ import { HttpFetcherError, RetryPolicy } from '@mondaydotcomorg/monday-fetch-api';
5
4
  import { getIgniteClient, IgniteClient } from '@mondaydotcomorg/ignite-sdk';
6
5
  import { Action, AuthorizationObject, AuthorizationParams, AuthorizationResource } from './types/general';
7
6
  import { sendAuthorizationCheckResponseTimeMetric } from './prometheus-service';
@@ -29,7 +28,7 @@ export interface AuthorizeResponse {
29
28
  unauthorizedObjects?: AuthorizationObject[];
30
29
  }
31
30
 
32
- export function setRequestFetchOptions(customMondayFetchOptions: MondayFetchOptions) {
31
+ export function setRequestFetchOptions(customMondayFetchOptions: RetryPolicy) {
33
32
  AuthorizationInternalService.setRequestFetchOptions(customMondayFetchOptions);
34
33
  }
35
34
 
package/src/index.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { MondayFetchOptions } from '@mondaydotcomorg/monday-fetch';
2
1
  import { setPrometheus } from './prometheus-service';
3
2
  import { setIgniteClient, setRedisClient, setRequestFetchOptions } from './authorization-service';
4
3
  import { initializeMetrics, MetricsClient } from './metrics-service';
5
4
  import * as TestKit from './testKit';
5
+ import { RetryPolicy } from '@mondaydotcomorg/monday-fetch-api';
6
6
 
7
7
  interface MetricsInitOptions {
8
8
  client?: MetricsClient;
@@ -14,7 +14,7 @@ interface MetricsInitOptions {
14
14
 
15
15
  export interface InitOptions {
16
16
  prometheus?: any;
17
- mondayFetchOptions?: MondayFetchOptions;
17
+ mondayFetchOptions?: RetryPolicy;
18
18
  redisClient?: any;
19
19
  grantedFeatureRedisExpirationInSeconds?: number;
20
20
  metrics?: MetricsInitOptions;
@@ -94,3 +94,5 @@ export {
94
94
  export { BaseAuthorizationAttributesService as IAuthorizationAttributesService } from './base-authorization-attributes-service';
95
95
 
96
96
  export { TestKit };
97
+
98
+ export type { RetryPolicy };