@nest-omni/core 4.1.3-3 → 4.1.3-30
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/audit/audit.module.d.ts +1 -0
- package/audit/audit.module.js +51 -2
- package/audit/controllers/audit.controller.d.ts +57 -1
- package/audit/controllers/audit.controller.js +43 -0
- package/audit/decorators/audit-action.decorator.d.ts +74 -0
- package/audit/decorators/audit-action.decorator.js +42 -0
- package/audit/decorators/audit-controller.decorator.d.ts +1 -1
- package/audit/decorators/audit-controller.decorator.js +2 -2
- package/audit/decorators/audit-operation.decorator.d.ts +0 -7
- package/audit/decorators/audit-operation.decorator.js +0 -7
- package/audit/decorators/entity-audit.decorator.d.ts +78 -2
- package/audit/decorators/entity-audit.decorator.js +145 -4
- package/audit/decorators/index.d.ts +2 -0
- package/audit/decorators/index.js +2 -0
- package/audit/dto/audit-action-query.dto.d.ts +13 -0
- package/audit/dto/audit-action-query.dto.js +77 -0
- package/audit/dto/index.d.ts +1 -0
- package/audit/dto/index.js +1 -0
- package/audit/entities/audit-action-summary.entity.d.ts +23 -0
- package/audit/entities/audit-action-summary.entity.js +101 -0
- package/audit/entities/entity-audit-log.entity.d.ts +7 -2
- package/audit/entities/entity-audit-log.entity.js +45 -9
- package/audit/entities/entity-transaction.entity.d.ts +8 -2
- package/audit/entities/entity-transaction.entity.js +39 -3
- package/audit/entities/index.d.ts +3 -0
- package/audit/entities/index.js +3 -0
- package/audit/entities/manual-operation-log.entity.d.ts +0 -2
- package/audit/entities/manual-operation-log.entity.js +8 -9
- package/audit/enums/audit.enums.d.ts +14 -6
- package/audit/enums/audit.enums.js +18 -9
- package/audit/examples/decorator-value-mapping.example.d.ts +70 -0
- package/audit/examples/decorator-value-mapping.example.js +414 -0
- package/audit/index.d.ts +5 -1
- package/audit/index.js +29 -2
- package/audit/interceptors/audit-action.interceptor.d.ts +39 -0
- package/audit/interceptors/audit-action.interceptor.js +217 -0
- package/audit/interceptors/audit.interceptor.d.ts +1 -0
- package/audit/interceptors/audit.interceptor.js +19 -11
- package/audit/interceptors/index.d.ts +1 -0
- package/audit/interceptors/index.js +1 -0
- package/audit/interfaces/audit.interfaces.d.ts +132 -4
- package/audit/services/audit-action.service.d.ts +142 -0
- package/audit/services/audit-action.service.js +246 -0
- package/audit/services/audit-context.service.d.ts +91 -0
- package/audit/services/audit-context.service.js +170 -0
- package/audit/services/entity-audit.service.d.ts +220 -9
- package/audit/services/entity-audit.service.js +761 -72
- package/audit/services/index.d.ts +3 -0
- package/audit/services/index.js +3 -0
- package/audit/services/manual-audit-log.service.d.ts +23 -23
- package/audit/services/manual-audit-log.service.js +34 -57
- package/audit/services/multi-database.service.d.ts +0 -5
- package/audit/services/multi-database.service.js +0 -24
- package/audit/services/operation-description.service.d.ts +14 -3
- package/audit/services/operation-description.service.js +165 -26
- package/audit/services/transaction-audit.service.d.ts +1 -0
- package/audit/services/transaction-audit.service.js +12 -9
- package/audit/subscribers/entity-audit.subscriber.d.ts +5 -0
- package/audit/subscribers/entity-audit.subscriber.js +69 -5
- package/cache/cache.module.d.ts +7 -8
- package/cache/cache.module.js +15 -13
- package/cache/cache.service.d.ts +6 -4
- package/cache/cache.service.js +24 -12
- package/cache/decorators/cache-put.decorator.js +5 -4
- package/cache/dependencies/callback.dependency.js +9 -0
- package/cache/dependencies/db.dependency.d.ts +43 -12
- package/cache/dependencies/db.dependency.js +46 -18
- package/cache/dependencies/tag.dependency.d.ts +31 -4
- package/cache/dependencies/tag.dependency.js +100 -11
- package/cache/entities/index.d.ts +1 -0
- package/cache/entities/index.js +17 -0
- package/cache/entities/typeorm-cache.entity.d.ts +71 -0
- package/cache/entities/typeorm-cache.entity.js +110 -0
- package/cache/index.d.ts +2 -1
- package/cache/index.js +19 -2
- package/cache/interfaces/cache-options.interface.d.ts +8 -0
- package/cache/providers/index.d.ts +2 -1
- package/cache/providers/index.js +2 -1
- package/cache/providers/lrucache.provider.d.ts +77 -0
- package/cache/providers/lrucache.provider.js +228 -0
- package/cache/providers/redis-cache.provider.d.ts +1 -0
- package/cache/providers/redis-cache.provider.js +8 -6
- package/cache/providers/typeorm-cache.provider.d.ts +211 -0
- package/cache/providers/typeorm-cache.provider.js +483 -0
- package/common/boilerplate.polyfill.d.ts +1 -0
- package/common/boilerplate.polyfill.js +18 -1
- package/common/helpers/validation-metadata-helper.d.ts +112 -0
- package/common/helpers/validation-metadata-helper.js +164 -0
- package/common/index.d.ts +1 -0
- package/common/index.js +4 -0
- package/decorators/examples/field-i18n.example.d.ts +294 -0
- package/decorators/examples/field-i18n.example.js +478 -0
- package/decorators/field.decorators.d.ts +95 -3
- package/decorators/field.decorators.js +152 -18
- package/decorators/transform.decorators.d.ts +0 -2
- package/decorators/transform.decorators.js +0 -23
- package/decorators/translate.decorator.d.ts +26 -0
- package/decorators/translate.decorator.js +26 -1
- package/email-log/email-log.constants.d.ts +8 -0
- package/email-log/email-log.constants.js +11 -0
- package/email-log/email-log.module.d.ts +47 -0
- package/email-log/email-log.module.js +140 -0
- package/email-log/index.d.ts +11 -0
- package/email-log/index.js +48 -0
- package/email-log/interfaces/email-log-options.interface.d.ts +61 -0
- package/email-log/interfaces/email-log-options.interface.js +134 -0
- package/email-log/interfaces/email-log-transport.interface.d.ts +20 -0
- package/email-log/interfaces/email-log-transport.interface.js +2 -0
- package/email-log/interfaces/index.d.ts +2 -0
- package/email-log/interfaces/index.js +18 -0
- package/email-log/providers/email-provider.d.ts +42 -0
- package/email-log/providers/email-provider.js +127 -0
- package/email-log/providers/index.d.ts +1 -0
- package/email-log/providers/index.js +17 -0
- package/email-log/services/email-log-alert.service.d.ts +46 -0
- package/email-log/services/email-log-alert.service.js +162 -0
- package/email-log/services/email-log-formatter.service.d.ts +78 -0
- package/email-log/services/email-log-formatter.service.js +442 -0
- package/email-log/services/email-log-logger.service.d.ts +85 -0
- package/email-log/services/email-log-logger.service.js +168 -0
- package/email-log/services/email-log-rate-limiter.service.d.ts +42 -0
- package/email-log/services/email-log-rate-limiter.service.js +110 -0
- package/email-log/services/email-log-transport.service.d.ts +80 -0
- package/email-log/services/email-log-transport.service.js +271 -0
- package/email-log/services/index.d.ts +5 -0
- package/email-log/services/index.js +21 -0
- package/email-log/transports/index.d.ts +1 -0
- package/email-log/transports/index.js +17 -0
- package/email-log/transports/pino-email.transport.d.ts +56 -0
- package/email-log/transports/pino-email.transport.js +188 -0
- package/email-log/utils/index.d.ts +2 -0
- package/email-log/utils/index.js +18 -0
- package/email-log/utils/log-level.helper.d.ts +46 -0
- package/email-log/utils/log-level.helper.js +74 -0
- package/email-log/utils/pino-transport.utils.d.ts +135 -0
- package/email-log/utils/pino-transport.utils.js +238 -0
- package/file-upload/controllers/file-access.controller.d.ts +23 -0
- package/file-upload/controllers/file-access.controller.js +128 -0
- package/file-upload/decorators/column.decorator.d.ts +151 -0
- package/file-upload/decorators/column.decorator.js +273 -0
- package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
- package/file-upload/decorators/csv-data.decorator.js +85 -0
- package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
- package/file-upload/decorators/csv-import.decorator.js +24 -0
- package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
- package/file-upload/decorators/examples/column-mapping.example.js +122 -0
- package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
- package/file-upload/decorators/excel-data.decorator.js +85 -0
- package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
- package/file-upload/decorators/file-upload.decorator.js +172 -0
- package/file-upload/decorators/index.d.ts +5 -0
- package/file-upload/decorators/index.js +38 -0
- package/file-upload/decorators/process.decorator.d.ts +40 -0
- package/file-upload/decorators/process.decorator.js +52 -0
- package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
- package/file-upload/decorators/validate-data.decorator.js +39 -0
- package/file-upload/dto/create-file.dto.d.ts +24 -0
- package/file-upload/dto/create-file.dto.js +112 -0
- package/file-upload/dto/find-files.dto.d.ts +15 -0
- package/file-upload/dto/find-files.dto.js +76 -0
- package/file-upload/dto/index.d.ts +4 -0
- package/file-upload/dto/index.js +20 -0
- package/file-upload/dto/pagination.dto.d.ts +7 -0
- package/file-upload/dto/pagination.dto.js +39 -0
- package/file-upload/dto/update-file.dto.d.ts +15 -0
- package/file-upload/dto/update-file.dto.js +67 -0
- package/file-upload/entities/file-metadata.entity.d.ts +25 -0
- package/file-upload/entities/file-metadata.entity.js +76 -0
- package/file-upload/entities/file.entity.d.ts +114 -0
- package/file-upload/entities/file.entity.js +350 -0
- package/file-upload/entities/index.d.ts +2 -0
- package/file-upload/entities/index.js +18 -0
- package/file-upload/enums/file-type.enum.d.ts +72 -0
- package/file-upload/enums/file-type.enum.js +212 -0
- package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
- package/file-upload/exceptions/file-upload.exception.js +120 -0
- package/file-upload/exceptions/index.d.ts +1 -0
- package/file-upload/exceptions/index.js +17 -0
- package/file-upload/file-upload.module.d.ts +89 -0
- package/file-upload/file-upload.module.js +292 -0
- package/file-upload/index.d.ts +37 -0
- package/file-upload/index.js +77 -0
- package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
- package/file-upload/interceptors/file-upload.interceptor.js +594 -0
- package/file-upload/interceptors/index.d.ts +1 -0
- package/file-upload/interceptors/index.js +17 -0
- package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
- package/file-upload/interfaces/custom-file-type.interface.js +2 -0
- package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
- package/file-upload/interfaces/file-buffer.interface.js +2 -0
- package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
- package/file-upload/interfaces/file-entity.interface.js +28 -0
- package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
- package/file-upload/interfaces/file-metadata.interface.js +2 -0
- package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
- package/file-upload/interfaces/file-processor.interface.js +2 -0
- package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
- package/file-upload/interfaces/file-upload-options.interface.js +5 -0
- package/file-upload/interfaces/index.d.ts +7 -0
- package/file-upload/interfaces/index.js +24 -0
- package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
- package/file-upload/interfaces/processor-options.interface.js +2 -0
- package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
- package/file-upload/interfaces/storage-provider.interface.js +2 -0
- package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
- package/file-upload/interfaces/upload-options.interface.js +2 -0
- package/file-upload/processors/csv.processor.d.ts +98 -0
- package/file-upload/processors/csv.processor.js +391 -0
- package/file-upload/processors/excel.processor.d.ts +130 -0
- package/file-upload/processors/excel.processor.js +547 -0
- package/file-upload/processors/image.processor.d.ts +199 -0
- package/file-upload/processors/image.processor.js +377 -0
- package/file-upload/providers/index.d.ts +2 -0
- package/file-upload/providers/index.js +18 -0
- package/file-upload/providers/local-storage.provider.d.ts +98 -0
- package/file-upload/providers/local-storage.provider.js +484 -0
- package/file-upload/providers/s3-storage.provider.d.ts +87 -0
- package/file-upload/providers/s3-storage.provider.js +455 -0
- package/file-upload/services/file-signature-validator.service.d.ts +118 -0
- package/file-upload/services/file-signature-validator.service.js +376 -0
- package/file-upload/services/file.service.d.ts +193 -0
- package/file-upload/services/file.service.js +638 -0
- package/file-upload/services/index.d.ts +4 -0
- package/file-upload/services/index.js +20 -0
- package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
- package/file-upload/services/malicious-file-detector.service.js +1234 -0
- package/file-upload/services/mime-registry.service.d.ts +47 -0
- package/file-upload/services/mime-registry.service.js +167 -0
- package/file-upload/utils/checksum.util.d.ts +28 -0
- package/file-upload/utils/checksum.util.js +65 -0
- package/file-upload/utils/dynamic-import.util.d.ts +54 -0
- package/file-upload/utils/dynamic-import.util.js +156 -0
- package/file-upload/utils/filename.util.d.ts +59 -0
- package/file-upload/utils/filename.util.js +184 -0
- package/file-upload/utils/filepath.util.d.ts +70 -0
- package/file-upload/utils/filepath.util.js +152 -0
- package/file-upload/utils/index.d.ts +4 -0
- package/file-upload/utils/index.js +20 -0
- package/filters/bad-request.filter.d.ts +9 -0
- package/filters/bad-request.filter.js +57 -16
- package/http-client/config/http-client.config.d.ts +5 -0
- package/http-client/config/http-client.config.js +27 -14
- package/http-client/decorators/http-client.decorators.d.ts +7 -28
- package/http-client/decorators/http-client.decorators.js +124 -99
- package/http-client/entities/http-log.entity.d.ts +0 -20
- package/http-client/entities/http-log.entity.js +1 -21
- package/http-client/examples/advanced-usage.example.d.ts +4 -5
- package/http-client/examples/advanced-usage.example.js +7 -59
- package/http-client/examples/axios-config-extended.example.d.ts +17 -0
- package/http-client/examples/axios-config-extended.example.js +311 -0
- package/http-client/examples/flexible-response-example.d.ts +28 -0
- package/http-client/examples/flexible-response-example.js +120 -0
- package/http-client/examples/index.d.ts +2 -0
- package/http-client/examples/index.js +2 -0
- package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
- package/http-client/examples/proxy-from-environment.example.js +409 -0
- package/http-client/examples/ssl-certificate.example.d.ts +47 -0
- package/http-client/examples/ssl-certificate.example.js +432 -0
- package/http-client/http-client.module.d.ts +43 -2
- package/http-client/http-client.module.js +150 -90
- package/http-client/index.d.ts +1 -1
- package/http-client/interfaces/api-client-config.interface.d.ts +24 -103
- package/http-client/interfaces/http-client-config.interface.d.ts +137 -62
- package/http-client/services/api-client-registry.service.d.ts +8 -21
- package/http-client/services/api-client-registry.service.js +31 -282
- package/http-client/services/circuit-breaker.service.d.ts +69 -2
- package/http-client/services/circuit-breaker.service.js +185 -7
- package/http-client/services/http-client.service.d.ts +85 -23
- package/http-client/services/http-client.service.js +512 -168
- package/http-client/services/http-log-query.service.js +0 -13
- package/http-client/services/index.d.ts +0 -1
- package/http-client/services/index.js +0 -1
- package/http-client/services/logging.service.d.ts +69 -16
- package/http-client/services/logging.service.js +290 -170
- package/http-client/utils/call-stack-extractor.util.d.ts +26 -0
- package/http-client/utils/call-stack-extractor.util.js +35 -0
- package/http-client/utils/context-extractor.util.d.ts +2 -0
- package/http-client/utils/context-extractor.util.js +17 -3
- package/http-client/utils/curl-generator.util.js +2 -5
- package/http-client/utils/index.d.ts +2 -0
- package/http-client/utils/index.js +2 -0
- package/http-client/utils/proxy-environment.util.d.ts +42 -0
- package/http-client/utils/proxy-environment.util.js +154 -0
- package/http-client/utils/retry-recorder.util.d.ts +0 -4
- package/http-client/utils/retry-recorder.util.js +2 -27
- package/http-client/utils/sanitize.util.d.ts +58 -0
- package/http-client/utils/sanitize.util.js +188 -0
- package/http-client/utils/security-validator.util.d.ts +118 -0
- package/http-client/utils/security-validator.util.js +354 -0
- package/index.d.ts +4 -1
- package/index.js +6 -1
- package/interceptors/translation-interceptor.service.d.ts +7 -0
- package/interceptors/translation-interceptor.service.js +40 -8
- package/ip-filter/constants.d.ts +21 -0
- package/ip-filter/constants.js +24 -0
- package/ip-filter/decorators/index.d.ts +1 -0
- package/ip-filter/decorators/index.js +17 -0
- package/ip-filter/decorators/ip-filter.decorator.d.ts +58 -0
- package/ip-filter/decorators/ip-filter.decorator.js +79 -0
- package/ip-filter/guards/index.d.ts +1 -0
- package/ip-filter/guards/index.js +17 -0
- package/ip-filter/guards/ip-filter.guard.d.ts +62 -0
- package/ip-filter/guards/ip-filter.guard.js +174 -0
- package/ip-filter/index.d.ts +7 -0
- package/ip-filter/index.js +23 -0
- package/ip-filter/interfaces/index.d.ts +4 -0
- package/ip-filter/interfaces/index.js +20 -0
- package/ip-filter/interfaces/ip-filter-async-options.interface.d.ts +15 -0
- package/ip-filter/interfaces/ip-filter-async-options.interface.js +2 -0
- package/ip-filter/interfaces/ip-filter-metadata.interface.d.ts +26 -0
- package/ip-filter/interfaces/ip-filter-metadata.interface.js +2 -0
- package/ip-filter/interfaces/ip-filter-options.interface.d.ts +34 -0
- package/ip-filter/interfaces/ip-filter-options.interface.js +2 -0
- package/ip-filter/interfaces/ip-rule.interface.d.ts +36 -0
- package/ip-filter/interfaces/ip-rule.interface.js +2 -0
- package/ip-filter/ip-filter.module.d.ts +55 -0
- package/ip-filter/ip-filter.module.js +105 -0
- package/ip-filter/services/index.d.ts +1 -0
- package/ip-filter/services/index.js +17 -0
- package/ip-filter/services/ip-filter.service.d.ts +92 -0
- package/ip-filter/services/ip-filter.service.js +238 -0
- package/ip-filter/utils/index.d.ts +1 -0
- package/ip-filter/utils/index.js +17 -0
- package/ip-filter/utils/ip-utils.d.ts +61 -0
- package/ip-filter/utils/ip-utils.js +162 -0
- package/package.json +34 -29
- package/providers/context.provider.d.ts +9 -0
- package/providers/context.provider.js +13 -0
- package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
- package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
- package/redis-lock/index.d.ts +2 -0
- package/redis-lock/index.js +5 -1
- package/redis-lock/lock-heartbeat.service.d.ts +80 -0
- package/redis-lock/lock-heartbeat.service.js +232 -0
- package/redis-lock/redis-lock.module.d.ts +6 -0
- package/redis-lock/redis-lock.module.js +136 -77
- package/redis-lock/redis-lock.service.d.ts +31 -0
- package/redis-lock/redis-lock.service.js +124 -17
- package/setup/bootstrap.setup.d.ts +2 -1
- package/setup/bootstrap.setup.js +3 -2
- package/setup/index.d.ts +1 -0
- package/setup/index.js +1 -0
- package/setup/run-in-mode.decorator.d.ts +56 -0
- package/setup/run-in-mode.decorator.js +92 -0
- package/setup/schedule.decorator.d.ts +1 -0
- package/setup/schedule.decorator.js +28 -13
- package/setup/worker.decorator.js +10 -1
- package/shared/index.d.ts +1 -1
- package/shared/index.js +1 -1
- package/shared/{serviceRegistryModule.js → service-registry.module.js} +28 -17
- package/shared/services/api-config.service.d.ts +41 -0
- package/shared/services/api-config.service.js +166 -8
- package/shared/services/index.d.ts +0 -1
- package/shared/services/index.js +0 -1
- package/validators/custom-validate.validator.d.ts +1 -0
- package/validators/custom-validate.validator.js +1 -0
- package/validators/file-mimetype.validator.d.ts +0 -2
- package/validators/file-mimetype.validator.js +4 -6
- package/validators/is-exists.validator.d.ts +15 -6
- package/validators/is-exists.validator.js +8 -7
- package/validators/is-unique.validator.d.ts +22 -7
- package/validators/is-unique.validator.js +41 -17
- package/vault/vault-config.service.js +1 -1
- package/cache/providers/memory-cache.provider.d.ts +0 -49
- package/cache/providers/memory-cache.provider.js +0 -197
- package/http-client/services/cache.service.d.ts +0 -76
- package/http-client/services/cache.service.js +0 -333
- package/shared/services/validator.service.d.ts +0 -3
- package/shared/services/validator.service.js +0 -20
- /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import { Logger } from '@nestjs/common';
|
|
2
2
|
import { CircuitBreakerConfig } from '../interfaces/http-client-config.interface';
|
|
3
|
+
/**
|
|
4
|
+
* Circuit Breaker 清理配置
|
|
5
|
+
*/
|
|
6
|
+
interface CircuitBreakerCleanupConfig {
|
|
7
|
+
/** 最大空闲时间(毫秒),超过此时间未使用的circuit breaker将被清理 */
|
|
8
|
+
maxIdleTimeMs: number;
|
|
9
|
+
/** 清理间隔(毫秒),定期清理的时间间隔 */
|
|
10
|
+
cleanupIntervalMs: number;
|
|
11
|
+
/** 最大circuit breaker数量,超过此数量时触发LRU清理 */
|
|
12
|
+
maxSize: number;
|
|
13
|
+
}
|
|
3
14
|
/**
|
|
4
15
|
* 熔断器服务
|
|
5
16
|
* 基于Spring Cloud CircuitBreaker的设计理念
|
|
@@ -7,6 +18,11 @@ import { CircuitBreakerConfig } from '../interfaces/http-client-config.interface
|
|
|
7
18
|
export declare class HttpCircuitBreakerService {
|
|
8
19
|
private readonly logger;
|
|
9
20
|
private readonly circuitBreakers;
|
|
21
|
+
private cleanupTimer?;
|
|
22
|
+
/** 默认清理配置 */
|
|
23
|
+
private readonly cleanupConfig;
|
|
24
|
+
constructor();
|
|
25
|
+
onModuleDestroy(): void;
|
|
10
26
|
/**
|
|
11
27
|
* 获取或创建熔断器
|
|
12
28
|
*/
|
|
@@ -14,7 +30,11 @@ export declare class HttpCircuitBreakerService {
|
|
|
14
30
|
/**
|
|
15
31
|
* 执行带熔断保护的请求
|
|
16
32
|
*/
|
|
17
|
-
executeWithCircuitBreaker<T>(key: string, requestFn: () => Promise<T>, config: CircuitBreakerConfig): Promise<T>;
|
|
33
|
+
executeWithCircuitBreaker<T>(key: string, requestFn: () => Promise<T>, config: CircuitBreakerConfig, onStateChange?: (state: string) => void): Promise<T>;
|
|
34
|
+
/**
|
|
35
|
+
* 获取熔断器当前状态
|
|
36
|
+
*/
|
|
37
|
+
getCircuitBreakerState(key: string): string | undefined;
|
|
18
38
|
/**
|
|
19
39
|
* 重置所有熔断器
|
|
20
40
|
*/
|
|
@@ -23,6 +43,39 @@ export declare class HttpCircuitBreakerService {
|
|
|
23
43
|
* 获取所有熔断器状态
|
|
24
44
|
*/
|
|
25
45
|
getAllStates(): Record<string, any>;
|
|
46
|
+
/**
|
|
47
|
+
* 获取Circuit Breaker统计信息
|
|
48
|
+
*/
|
|
49
|
+
getStats(): {
|
|
50
|
+
total: number;
|
|
51
|
+
byState: Record<string, number>;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* 清理空闲的Circuit Breaker
|
|
55
|
+
* 清理超过最大空闲时间的Circuit Breaker
|
|
56
|
+
*/
|
|
57
|
+
cleanupIdle(): number;
|
|
58
|
+
/**
|
|
59
|
+
* 手动触发清理(用于测试)
|
|
60
|
+
*/
|
|
61
|
+
manualCleanup(): number;
|
|
62
|
+
/**
|
|
63
|
+
* 设置清理配置
|
|
64
|
+
*/
|
|
65
|
+
setCleanupConfig(config: Partial<CircuitBreakerCleanupConfig>): void;
|
|
66
|
+
/**
|
|
67
|
+
* 获取清理配置
|
|
68
|
+
*/
|
|
69
|
+
getCleanupConfig(): CircuitBreakerCleanupConfig;
|
|
70
|
+
/**
|
|
71
|
+
* 基于LRU策略清理Circuit Breaker
|
|
72
|
+
* 删除最久未访问的Circuit Breaker直到数量降到maxSize以下
|
|
73
|
+
*/
|
|
74
|
+
private cleanupLRU;
|
|
75
|
+
/**
|
|
76
|
+
* 启动定期清理任务
|
|
77
|
+
*/
|
|
78
|
+
private startCleanupTask;
|
|
26
79
|
}
|
|
27
80
|
/**
|
|
28
81
|
* 熔断器类
|
|
@@ -38,11 +91,21 @@ declare class CircuitBreaker {
|
|
|
38
91
|
private nextAttemptTime;
|
|
39
92
|
private requestCount;
|
|
40
93
|
private windowStartTime;
|
|
94
|
+
private onStateChange?;
|
|
95
|
+
private lastAccessTime;
|
|
41
96
|
constructor(key: string, config: CircuitBreakerConfig, logger: Logger);
|
|
97
|
+
/**
|
|
98
|
+
* 更新最后访问时间
|
|
99
|
+
*/
|
|
100
|
+
updateLastAccessTime(): void;
|
|
101
|
+
/**
|
|
102
|
+
* 获取最后访问时间
|
|
103
|
+
*/
|
|
104
|
+
getLastAccessTime(): number;
|
|
42
105
|
/**
|
|
43
106
|
* 执行请求
|
|
44
107
|
*/
|
|
45
|
-
execute<T>(requestFn: () => Promise<T
|
|
108
|
+
execute<T>(requestFn: () => Promise<T>, onStateChange?: (state: string) => void): Promise<T>;
|
|
46
109
|
/**
|
|
47
110
|
* 重置熔断器
|
|
48
111
|
*/
|
|
@@ -71,6 +134,10 @@ declare class CircuitBreaker {
|
|
|
71
134
|
* 转换到半开状态
|
|
72
135
|
*/
|
|
73
136
|
private transitionToHalfOpen;
|
|
137
|
+
/**
|
|
138
|
+
* 通知状态变化
|
|
139
|
+
*/
|
|
140
|
+
private notifyStateChange;
|
|
74
141
|
/**
|
|
75
142
|
* 重置监控窗口
|
|
76
143
|
*/
|
|
@@ -5,6 +5,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
8
11
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
12
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
13
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -35,25 +38,70 @@ let HttpCircuitBreakerService = HttpCircuitBreakerService_1 = class HttpCircuitB
|
|
|
35
38
|
constructor() {
|
|
36
39
|
this.logger = new common_1.Logger(HttpCircuitBreakerService_1.name);
|
|
37
40
|
this.circuitBreakers = new Map();
|
|
41
|
+
/** 默认清理配置 */
|
|
42
|
+
this.cleanupConfig = {
|
|
43
|
+
maxIdleTimeMs: 30 * 60 * 1000, // 30分钟
|
|
44
|
+
cleanupIntervalMs: 5 * 60 * 1000, // 5分钟
|
|
45
|
+
maxSize: 1000, // 最多1000个circuit breaker
|
|
46
|
+
};
|
|
47
|
+
// 启动定期清理任务
|
|
48
|
+
this.startCleanupTask();
|
|
49
|
+
}
|
|
50
|
+
onModuleDestroy() {
|
|
51
|
+
// 清理定时器
|
|
52
|
+
if (this.cleanupTimer) {
|
|
53
|
+
clearInterval(this.cleanupTimer);
|
|
54
|
+
}
|
|
38
55
|
}
|
|
39
56
|
/**
|
|
40
57
|
* 获取或创建熔断器
|
|
41
58
|
*/
|
|
42
59
|
getCircuitBreaker(key, config) {
|
|
43
|
-
|
|
44
|
-
|
|
60
|
+
let circuitBreaker = this.circuitBreakers.get(key);
|
|
61
|
+
if (!circuitBreaker) {
|
|
62
|
+
this.logger.debug(`Creating new circuit breaker with key: ${key}`);
|
|
63
|
+
circuitBreaker = new CircuitBreaker(key, config, this.logger);
|
|
64
|
+
this.circuitBreakers.set(key, circuitBreaker);
|
|
65
|
+
// 检查是否超过最大数量,如果是则触发LRU清理
|
|
66
|
+
if (this.circuitBreakers.size > this.cleanupConfig.maxSize) {
|
|
67
|
+
this.cleanupLRU();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this.logger.debug(`Reusing existing circuit breaker with key: ${key}`);
|
|
72
|
+
// 更新最后访问时间
|
|
73
|
+
circuitBreaker.updateLastAccessTime();
|
|
45
74
|
}
|
|
46
|
-
return
|
|
75
|
+
return circuitBreaker;
|
|
47
76
|
}
|
|
48
77
|
/**
|
|
49
78
|
* 执行带熔断保护的请求
|
|
50
79
|
*/
|
|
51
|
-
executeWithCircuitBreaker(key, requestFn, config) {
|
|
80
|
+
executeWithCircuitBreaker(key, requestFn, config, onStateChange) {
|
|
52
81
|
return __awaiter(this, void 0, void 0, function* () {
|
|
53
82
|
const circuitBreaker = this.getCircuitBreaker(key, config);
|
|
54
|
-
return circuitBreaker.execute(requestFn);
|
|
83
|
+
return circuitBreaker.execute(requestFn, onStateChange);
|
|
55
84
|
});
|
|
56
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* 获取熔断器当前状态
|
|
88
|
+
*/
|
|
89
|
+
getCircuitBreakerState(key) {
|
|
90
|
+
// Log all current circuit breaker keys for debugging
|
|
91
|
+
this.logger.debug(`Looking for circuit breaker key: ${key}. Available keys: [${Array.from(this.circuitBreakers.keys()).join(', ')}]`);
|
|
92
|
+
const circuitBreaker = this.circuitBreakers.get(key);
|
|
93
|
+
if (!circuitBreaker) {
|
|
94
|
+
this.logger.debug(`Circuit breaker not found for key: ${key}`);
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
const state = circuitBreaker.getState();
|
|
98
|
+
if (!state) {
|
|
99
|
+
this.logger.debug(`Circuit breaker getState() returned undefined for key: ${key}`);
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
this.logger.debug(`Circuit breaker state for ${key}: ${state.state}`);
|
|
103
|
+
return state.state;
|
|
104
|
+
}
|
|
57
105
|
/**
|
|
58
106
|
* 重置所有熔断器
|
|
59
107
|
*/
|
|
@@ -70,10 +118,111 @@ let HttpCircuitBreakerService = HttpCircuitBreakerService_1 = class HttpCircuitB
|
|
|
70
118
|
});
|
|
71
119
|
return states;
|
|
72
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* 获取Circuit Breaker统计信息
|
|
123
|
+
*/
|
|
124
|
+
getStats() {
|
|
125
|
+
const stats = {
|
|
126
|
+
total: this.circuitBreakers.size,
|
|
127
|
+
byState: {
|
|
128
|
+
CLOSED: 0,
|
|
129
|
+
OPEN: 0,
|
|
130
|
+
HALF_OPEN: 0,
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
this.circuitBreakers.forEach((cb) => {
|
|
134
|
+
const state = cb.getState();
|
|
135
|
+
if (state && state.state) {
|
|
136
|
+
stats.byState[state.state]++;
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
return stats;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* 清理空闲的Circuit Breaker
|
|
143
|
+
* 清理超过最大空闲时间的Circuit Breaker
|
|
144
|
+
*/
|
|
145
|
+
cleanupIdle() {
|
|
146
|
+
const now = Date.now();
|
|
147
|
+
const keysToDelete = [];
|
|
148
|
+
this.circuitBreakers.forEach((cb, key) => {
|
|
149
|
+
const lastAccess = cb.getLastAccessTime();
|
|
150
|
+
if (now - lastAccess > this.cleanupConfig.maxIdleTimeMs) {
|
|
151
|
+
keysToDelete.push(key);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
keysToDelete.forEach((key) => {
|
|
155
|
+
this.circuitBreakers.delete(key);
|
|
156
|
+
this.logger.debug(`Removed idle circuit breaker: ${key}`);
|
|
157
|
+
});
|
|
158
|
+
if (keysToDelete.length > 0) {
|
|
159
|
+
this.logger.log(`Cleaned up ${keysToDelete.length} idle circuit breaker(s)`);
|
|
160
|
+
}
|
|
161
|
+
return keysToDelete.length;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* 手动触发清理(用于测试)
|
|
165
|
+
*/
|
|
166
|
+
manualCleanup() {
|
|
167
|
+
return this.cleanupIdle();
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* 设置清理配置
|
|
171
|
+
*/
|
|
172
|
+
setCleanupConfig(config) {
|
|
173
|
+
Object.assign(this.cleanupConfig, config);
|
|
174
|
+
// 重启清理任务
|
|
175
|
+
if (this.cleanupTimer) {
|
|
176
|
+
clearInterval(this.cleanupTimer);
|
|
177
|
+
}
|
|
178
|
+
this.startCleanupTask();
|
|
179
|
+
this.logger.log(`Circuit breaker cleanup config updated: ${JSON.stringify(this.cleanupConfig)}`);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 获取清理配置
|
|
183
|
+
*/
|
|
184
|
+
getCleanupConfig() {
|
|
185
|
+
return Object.assign({}, this.cleanupConfig);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* 基于LRU策略清理Circuit Breaker
|
|
189
|
+
* 删除最久未访问的Circuit Breaker直到数量降到maxSize以下
|
|
190
|
+
*/
|
|
191
|
+
cleanupLRU() {
|
|
192
|
+
const entries = Array.from(this.circuitBreakers.entries());
|
|
193
|
+
// 按最后访问时间排序(最老的在前)
|
|
194
|
+
entries.sort((a, b) => {
|
|
195
|
+
return a[1].getLastAccessTime() - b[1].getLastAccessTime();
|
|
196
|
+
});
|
|
197
|
+
// 计算需要删除的数量
|
|
198
|
+
const toDelete = entries.slice(0, entries.length - this.cleanupConfig.maxSize);
|
|
199
|
+
toDelete.forEach(([key]) => {
|
|
200
|
+
this.circuitBreakers.delete(key);
|
|
201
|
+
this.logger.debug(`Removed LRU circuit breaker: ${key}`);
|
|
202
|
+
});
|
|
203
|
+
if (toDelete.length > 0) {
|
|
204
|
+
this.logger.warn(`LRU cleanup: removed ${toDelete.length} circuit breaker(s) to maintain max size of ${this.cleanupConfig.maxSize}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* 启动定期清理任务
|
|
209
|
+
*/
|
|
210
|
+
startCleanupTask() {
|
|
211
|
+
this.cleanupTimer = setInterval(() => {
|
|
212
|
+
try {
|
|
213
|
+
this.cleanupIdle();
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
this.logger.error('Error during circuit breaker cleanup', error);
|
|
217
|
+
}
|
|
218
|
+
}, this.cleanupConfig.cleanupIntervalMs);
|
|
219
|
+
this.logger.log(`Circuit breaker cleanup task started (interval: ${this.cleanupConfig.cleanupIntervalMs}ms, maxIdleTime: ${this.cleanupConfig.maxIdleTimeMs}ms)`);
|
|
220
|
+
}
|
|
73
221
|
};
|
|
74
222
|
exports.HttpCircuitBreakerService = HttpCircuitBreakerService;
|
|
75
223
|
exports.HttpCircuitBreakerService = HttpCircuitBreakerService = HttpCircuitBreakerService_1 = __decorate([
|
|
76
|
-
(0, common_1.Injectable)()
|
|
224
|
+
(0, common_1.Injectable)(),
|
|
225
|
+
__metadata("design:paramtypes", [])
|
|
77
226
|
], HttpCircuitBreakerService);
|
|
78
227
|
/**
|
|
79
228
|
* 熔断器类
|
|
@@ -90,12 +239,27 @@ class CircuitBreaker {
|
|
|
90
239
|
this.nextAttemptTime = 0;
|
|
91
240
|
this.requestCount = 0;
|
|
92
241
|
this.windowStartTime = Date.now();
|
|
242
|
+
this.lastAccessTime = Date.now(); // 添加最后访问时间跟踪
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* 更新最后访问时间
|
|
246
|
+
*/
|
|
247
|
+
updateLastAccessTime() {
|
|
248
|
+
this.lastAccessTime = Date.now();
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* 获取最后访问时间
|
|
252
|
+
*/
|
|
253
|
+
getLastAccessTime() {
|
|
254
|
+
return this.lastAccessTime;
|
|
93
255
|
}
|
|
94
256
|
/**
|
|
95
257
|
* 执行请求
|
|
96
258
|
*/
|
|
97
|
-
execute(requestFn) {
|
|
259
|
+
execute(requestFn, onStateChange) {
|
|
98
260
|
return __awaiter(this, void 0, void 0, function* () {
|
|
261
|
+
// 保存状态变化回调
|
|
262
|
+
this.onStateChange = onStateChange;
|
|
99
263
|
const currentTime = Date.now();
|
|
100
264
|
// 检查是否需要重置监控窗口
|
|
101
265
|
if (currentTime - this.windowStartTime > this.config.monitoringPeriodMs) {
|
|
@@ -197,6 +361,8 @@ class CircuitBreaker {
|
|
|
197
361
|
this.state = CircuitBreakerState.CLOSED;
|
|
198
362
|
this.failureCount = 0;
|
|
199
363
|
this.successCount = 0;
|
|
364
|
+
// 通知状态变化
|
|
365
|
+
this.notifyStateChange(CircuitBreakerState.CLOSED);
|
|
200
366
|
}
|
|
201
367
|
}
|
|
202
368
|
/**
|
|
@@ -208,6 +374,8 @@ class CircuitBreaker {
|
|
|
208
374
|
this.state = CircuitBreakerState.OPEN;
|
|
209
375
|
this.nextAttemptTime = Date.now() + this.config.recoveryTimeoutMs;
|
|
210
376
|
this.successCount = 0;
|
|
377
|
+
// 通知状态变化
|
|
378
|
+
this.notifyStateChange(CircuitBreakerState.OPEN);
|
|
211
379
|
}
|
|
212
380
|
}
|
|
213
381
|
/**
|
|
@@ -218,6 +386,16 @@ class CircuitBreaker {
|
|
|
218
386
|
this.logger.log(`Circuit breaker ${this.key} transitioned to HALF_OPEN`);
|
|
219
387
|
this.state = CircuitBreakerState.HALF_OPEN;
|
|
220
388
|
this.successCount = 0;
|
|
389
|
+
// 通知状态变化
|
|
390
|
+
this.notifyStateChange(CircuitBreakerState.HALF_OPEN);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* 通知状态变化
|
|
395
|
+
*/
|
|
396
|
+
notifyStateChange(state) {
|
|
397
|
+
if (this.onStateChange) {
|
|
398
|
+
this.onStateChange(state);
|
|
221
399
|
}
|
|
222
400
|
}
|
|
223
401
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { AxiosRequestConfig, AxiosResponse } from 'axios';
|
|
2
2
|
import { HttpClientConfig } from '../interfaces/http-client-config.interface';
|
|
3
|
+
import { ApiKeyConfig, AuthType, BasicAuthConfig, BearerTokenConfig, CustomAuthConfig, OAuth2Config } from '../interfaces/api-client-config.interface';
|
|
3
4
|
import { HttpCircuitBreakerService } from './circuit-breaker.service';
|
|
4
5
|
import { HttpLoggingService } from './logging.service';
|
|
5
|
-
import { HttpCacheService } from './cache.service';
|
|
6
6
|
import { RedisLockService } from '../../redis-lock/redis-lock.service';
|
|
7
7
|
interface ExtendedAxiosRequestConfig extends AxiosRequestConfig {
|
|
8
8
|
metadata?: {
|
|
@@ -11,24 +11,69 @@ interface ExtendedAxiosRequestConfig extends AxiosRequestConfig {
|
|
|
11
11
|
[key: string]: any;
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* 请求返回选项
|
|
16
|
+
*/
|
|
17
|
+
interface RequestReturnOptions {
|
|
18
|
+
/** 返回类型: 'data'(默认) | 'full' | 'custom' */
|
|
19
|
+
returnType?: 'data' | 'full' | 'custom';
|
|
20
|
+
/** 自定义返回转换函数 */
|
|
21
|
+
transform?: (response: AxiosResponse) => any;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 认证配置接口
|
|
25
|
+
*/
|
|
26
|
+
interface AuthConfig {
|
|
27
|
+
type: AuthType;
|
|
28
|
+
config?: ApiKeyConfig | BasicAuthConfig | BearerTokenConfig | OAuth2Config | CustomAuthConfig;
|
|
29
|
+
}
|
|
14
30
|
/**
|
|
15
31
|
* HTTP客户端服务
|
|
16
32
|
* 基于Spring RestTemplate的设计理念,集成axios-retry库
|
|
33
|
+
* 支持两种创建模式:
|
|
34
|
+
* 1. 直接创建: 用于简单的HTTP请求场景
|
|
35
|
+
* 2. API客户端模式: 用于需要认证、统计等高级功能的API客户端
|
|
17
36
|
*/
|
|
18
37
|
export declare class HttpClientService {
|
|
19
38
|
private readonly circuitBreakerService;
|
|
20
39
|
private readonly loggingService;
|
|
21
|
-
private readonly cacheService;
|
|
22
40
|
private readonly redisLockService?;
|
|
23
41
|
private readonly logger;
|
|
24
42
|
private readonly axiosInstance;
|
|
25
43
|
private readonly defaultConfig;
|
|
44
|
+
private readonly authConfig?;
|
|
45
|
+
private readonly clientName?;
|
|
26
46
|
private requestStats;
|
|
27
|
-
constructor(circuitBreakerService: HttpCircuitBreakerService, loggingService: HttpLoggingService,
|
|
47
|
+
constructor(circuitBreakerService: HttpCircuitBreakerService, loggingService: HttpLoggingService, redisLockService?: RedisLockService, config?: HttpClientConfig, clientName?: string, authConfig?: AuthConfig);
|
|
48
|
+
/**
|
|
49
|
+
* 静态工厂方法:创建API客户端模式的 HttpClientService
|
|
50
|
+
* @param dependencies 依赖服务
|
|
51
|
+
* @param config API客户端配置
|
|
52
|
+
* @returns HttpClientService 实例
|
|
53
|
+
*/
|
|
54
|
+
static createApiClient(dependencies: {
|
|
55
|
+
circuitBreakerService: HttpCircuitBreakerService;
|
|
56
|
+
loggingService: HttpLoggingService;
|
|
57
|
+
redisLockService?: RedisLockService;
|
|
58
|
+
}, config: {
|
|
59
|
+
name: string;
|
|
60
|
+
baseURL?: string;
|
|
61
|
+
timeout?: number;
|
|
62
|
+
httpConfig?: HttpClientConfig;
|
|
63
|
+
auth?: AuthConfig;
|
|
64
|
+
}): HttpClientService;
|
|
28
65
|
/**
|
|
29
66
|
* 执行HTTP请求
|
|
67
|
+
* @param config 请求配置
|
|
68
|
+
* @param decoratorContext 装饰器上下文
|
|
69
|
+
* @param clientName 客户端名称
|
|
70
|
+
* @param returnOptions 返回选项
|
|
71
|
+
* - returnType: 'data'(默认)只返回response.data
|
|
72
|
+
* - returnType: 'full'返回完整AxiosResponse对象
|
|
73
|
+
* - returnType: 'custom'使用自定义转换函数
|
|
74
|
+
* - transform: 自定义转换函数,接收完整response返回任意数据
|
|
30
75
|
*/
|
|
31
|
-
request<T = any>(config: ExtendedAxiosRequestConfig, decoratorContext?: any): Promise<T>;
|
|
76
|
+
request<T = any>(config: ExtendedAxiosRequestConfig, decoratorContext?: any, clientName?: string, returnOptions?: RequestReturnOptions): Promise<T>;
|
|
32
77
|
/**
|
|
33
78
|
* 生成curl命令(动态生成,不存储)
|
|
34
79
|
*/
|
|
@@ -45,11 +90,15 @@ export declare class HttpClientService {
|
|
|
45
90
|
* 重置统计信息
|
|
46
91
|
*/
|
|
47
92
|
resetStats(): void;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
93
|
+
/**
|
|
94
|
+
* 获取客户端名称
|
|
95
|
+
*/
|
|
96
|
+
getName(): string | undefined;
|
|
97
|
+
get<T = any>(url: string, config?: AxiosRequestConfig, clientName?: string, returnOptions?: RequestReturnOptions): Promise<T>;
|
|
98
|
+
post<T = any>(url: string, data?: any, config?: AxiosRequestConfig, clientName?: string, returnOptions?: RequestReturnOptions): Promise<T>;
|
|
99
|
+
put<T = any>(url: string, data?: any, config?: AxiosRequestConfig, clientName?: string, returnOptions?: RequestReturnOptions): Promise<T>;
|
|
100
|
+
patch<T = any>(url: string, data?: any, config?: AxiosRequestConfig, clientName?: string, returnOptions?: RequestReturnOptions): Promise<T>;
|
|
101
|
+
delete<T = any>(url: string, config?: AxiosRequestConfig, clientName?: string, returnOptions?: RequestReturnOptions): Promise<T>;
|
|
53
102
|
/**
|
|
54
103
|
* 带等待锁的认证请求方法
|
|
55
104
|
* 用于需要确保只有一个进程执行认证相关操作的场景
|
|
@@ -64,7 +113,7 @@ export declare class HttpClientService {
|
|
|
64
113
|
lockTimeout?: number;
|
|
65
114
|
waitTimeout?: number;
|
|
66
115
|
enableRetry?: boolean;
|
|
67
|
-
}): Promise<T>;
|
|
116
|
+
}, clientName?: string, returnOptions?: RequestReturnOptions): Promise<T>;
|
|
68
117
|
/**
|
|
69
118
|
* 带等待锁的批量认证请求
|
|
70
119
|
* 用于需要批量执行认证相关操作但避免重复认证的场景
|
|
@@ -82,13 +131,19 @@ export declare class HttpClientService {
|
|
|
82
131
|
lockTimeout?: number;
|
|
83
132
|
waitTimeout?: number;
|
|
84
133
|
maxConcurrency?: number;
|
|
85
|
-
}): Promise<Array<T | null>>;
|
|
134
|
+
}, clientName?: string): Promise<Array<T | null>>;
|
|
135
|
+
/**
|
|
136
|
+
* Capture calling context information
|
|
137
|
+
* @returns Calling context with service class and method name
|
|
138
|
+
*/
|
|
139
|
+
private captureCallingContext;
|
|
86
140
|
/**
|
|
87
141
|
* 创建Axios实例并配置axios-retry
|
|
88
142
|
*/
|
|
89
143
|
private createAxiosInstance;
|
|
90
144
|
/**
|
|
91
145
|
* 执行带特性的请求(重试、熔断器等)
|
|
146
|
+
* 返回响应和熔断器状态
|
|
92
147
|
*/
|
|
93
148
|
private executeWithFeatures;
|
|
94
149
|
/**
|
|
@@ -97,31 +152,38 @@ export declare class HttpClientService {
|
|
|
97
152
|
private calculateRetryDelay;
|
|
98
153
|
/**
|
|
99
154
|
* 应用装饰器配置
|
|
155
|
+
* 只在装饰器配置值有效时才覆盖请求配置
|
|
100
156
|
*/
|
|
101
157
|
private applyDecoratorConfig;
|
|
102
|
-
/**
|
|
103
|
-
* 判断是否应该缓存请求
|
|
104
|
-
*/
|
|
105
|
-
private shouldCacheRequest;
|
|
106
158
|
/**
|
|
107
159
|
* 生成熔断器键
|
|
108
160
|
*/
|
|
109
161
|
private generateCircuitBreakerKey;
|
|
110
|
-
/**
|
|
111
|
-
* 更新请求统计
|
|
112
|
-
*/
|
|
113
|
-
private updateStats;
|
|
114
|
-
/**
|
|
115
|
-
* 更新错误统计
|
|
116
|
-
*/
|
|
117
|
-
private updateErrorStats;
|
|
118
162
|
/**
|
|
119
163
|
* 合并默认配置
|
|
120
164
|
*/
|
|
121
165
|
private mergeWithDefaults;
|
|
122
166
|
/**
|
|
123
167
|
* 深度合并对象
|
|
168
|
+
* 只在源值有效(非 undefined)时才覆盖目标值
|
|
124
169
|
*/
|
|
125
170
|
private deepMerge;
|
|
171
|
+
/**
|
|
172
|
+
* 解析代理配置
|
|
173
|
+
* 支持从环境变量或手动配置中读取
|
|
174
|
+
* @param proxyConfig 代理配置
|
|
175
|
+
* @param targetUrl 目标 URL(用于 NO_PROXY 检查)
|
|
176
|
+
* @returns 解析后的代理配置,如果不应使用代理则返回 false 或 undefined
|
|
177
|
+
*/
|
|
178
|
+
private resolveProxyConfig;
|
|
179
|
+
/**
|
|
180
|
+
* 应用认证配置到请求配置
|
|
181
|
+
*/
|
|
182
|
+
private applyAuthToConfig;
|
|
183
|
+
/**
|
|
184
|
+
* 更新请求统计信息
|
|
185
|
+
* 统一管理所有统计,避免在拦截器中重复统计
|
|
186
|
+
*/
|
|
187
|
+
private updateRequestStats;
|
|
126
188
|
}
|
|
127
189
|
export {};
|