Index

projects/resilient-http-client/src/lib/util/rx/resilience.rx-operator.ts

applyResilience
Default value : <T>(config: IResilienceConfig, uuid: string): MonoTypeOperatorFunction<T> => { const userRetryOrCancelSubject = new Subject<boolean>(); let retryCount = 0; return retry<T>({ delay: (error) => of(error).pipe( concatMap((err) => { if (isRetryDisabled(config) || !config.retryOnStatusCodeList.includes(err.status)) { const topicSpecificMessageOrEmpty = config.topicToConfigDict[config.topic]?.failMessage || ''; config.onFail(config.topic, uuid, topicSpecificMessageOrEmpty); throw err; } retryCount = retryCount + 1; const retries = retryCount; if (retryCount <= config.retryIntervalInMillisList.length) { return of(err).pipe( tap(() => config.onRequestRetry( config.topic, uuid, retries, config.retryIntervalInMillisList[retries - 1], err.status, ), ), delay(config.retryIntervalInMillisList[retryCount - 1]), ); } else { retryCount = 0; if (waitForUserDecision(config)) { config.onWaitingForUserDecision( config.topic, uuid, retries, err.status, userRetryOrCancelSubject, ); return userRetryOrCancelSubject.asObservable().pipe( take(1), map((shouldRetry) => { if (shouldRetry) { config.onRequestRetry( config.topic, uuid, retries, config.retryIntervalInMillisList[retries - 1], err.status, ); return of(err); } const topicSpecificMessageOrEmpty = config.topicToConfigDict[config.topic]?.failMessage || ''; config.onFail(config.topic, uuid, topicSpecificMessageOrEmpty); throw err; }), ); } else { const topicSpecificMessageOrEmpty = config.topicToConfigDict[config.topic]?.failMessage || ''; config.onFail(config.topic, uuid, topicSpecificMessageOrEmpty); throw err; } } }), ), }); }
getTopicSpecificBooleanOrDefault
Default value : (config: IResilienceConfig, propertyName: TTopicPropName): boolean => { const topicConfig = config.topicToConfigDict[config.topic]; const isDefinedByTopicConfig = topicConfig && topicConfig[propertyName] !== undefined; return isDefinedByTopicConfig ? (topicConfig[propertyName] as boolean) : config[propertyName]; }
isRetryDisabled
Default value : (config: IResilienceConfig): boolean => getTopicSpecificBooleanOrDefault(config, 'disableRetry')
shouldLogResult
Default value : (config: IResilienceConfig): boolean => getTopicSpecificBooleanOrDefault(config, 'logResult')
shouldTrace
Default value : (config: IResilienceConfig): boolean => getTopicSpecificBooleanOrDefault(config, 'trace')
waitForUserDecision
Default value : (config: IResilienceConfig): boolean => getTopicSpecificBooleanOrDefault(config, 'waitForUserDecision')

projects/resilient-http-client/src/lib/util/rx/resilience.rx-operator.config.ts

DEFAULT_RESILIENCE_CONFIG
Type : Partial<IResilienceConfig>
Default value : { isDelayedAfterMs: 3000, disableRetry: false, logResult: false, trace: false, waitForUserDecision: false, retryOnStatusCodeList: [ HttpStatusCode.RequestTimeout, HttpStatusCode.TooManyRequests, HttpStatusCode.InternalServerError, HttpStatusCode.BadGateway, HttpStatusCode.ServiceUnavailable, HttpStatusCode.GatewayTimeout, ], retryIntervalInMillisList: [0, 200, 500, 1000, 1000], topicToConfigDict: {}, onWaitingForUserDecision: (): void => {}, onFail: (): void => {}, onRequestDelayed: (): void => {}, onRequestRetry: (): void => {}, onRequestStart: (): void => {}, onRequestFinalize: (): void => {}, }

results matching ""

    No results matching ""