@nest-omni/core 4.1.3-2 → 4.1.3-20
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 +10 -0
- package/audit/audit.module.js +63 -1
- package/audit/controllers/audit.controller.d.ts +88 -0
- package/audit/controllers/audit.controller.js +74 -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 +9 -1
- package/audit/decorators/audit-controller.decorator.js +11 -2
- package/audit/decorators/audit-operation.decorator.d.ts +45 -0
- package/audit/decorators/audit-operation.decorator.js +49 -0
- package/audit/decorators/entity-audit.decorator.d.ts +85 -1
- package/audit/decorators/entity-audit.decorator.js +153 -3
- package/audit/decorators/index.d.ts +2 -0
- package/audit/decorators/index.js +2 -0
- package/audit/dto/audit-log-query.dto.d.ts +3 -0
- package/audit/dto/audit-log-query.dto.js +3 -0
- package/audit/dto/begin-transaction.dto.d.ts +3 -0
- package/audit/dto/begin-transaction.dto.js +3 -0
- package/audit/dto/compare-entities.dto.d.ts +3 -0
- package/audit/dto/compare-entities.dto.js +3 -0
- package/audit/dto/pre-check-restore.dto.d.ts +3 -0
- package/audit/dto/pre-check-restore.dto.js +3 -0
- package/audit/dto/restore-entity.dto.d.ts +3 -0
- package/audit/dto/restore-entity.dto.js +3 -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 +11 -0
- package/audit/entities/entity-audit-log.entity.js +57 -2
- package/audit/entities/entity-transaction.entity.d.ts +11 -2
- package/audit/entities/entity-transaction.entity.js +42 -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 +4 -0
- package/audit/entities/manual-operation-log.entity.js +12 -1
- package/audit/entities/operation-template.entity.d.ts +4 -0
- package/audit/entities/operation-template.entity.js +4 -0
- package/audit/enums/audit.enums.d.ts +37 -6
- package/audit/enums/audit.enums.js +40 -7
- package/audit/index.d.ts +4 -1
- package/audit/index.js +34 -1
- package/audit/interceptors/audit-action.interceptor.d.ts +38 -0
- package/audit/interceptors/audit-action.interceptor.js +215 -0
- package/audit/interceptors/audit.interceptor.d.ts +15 -0
- package/audit/interceptors/audit.interceptor.js +23 -1
- package/audit/interceptors/index.d.ts +1 -0
- package/audit/interceptors/index.js +1 -0
- package/audit/interfaces/audit.interfaces.d.ts +187 -2
- package/audit/services/audit-action.service.d.ts +141 -0
- package/audit/services/audit-action.service.js +244 -0
- package/audit/services/audit-context.service.d.ts +97 -0
- package/audit/services/audit-context.service.js +185 -0
- package/audit/services/audit-strategy.service.d.ts +6 -0
- package/audit/services/audit-strategy.service.js +13 -0
- package/audit/services/entity-audit.service.d.ts +230 -3
- package/audit/services/entity-audit.service.js +607 -14
- package/audit/services/index.d.ts +3 -0
- package/audit/services/index.js +3 -0
- package/audit/services/manual-audit-log.service.d.ts +134 -9
- package/audit/services/manual-audit-log.service.js +157 -40
- package/audit/services/multi-database.service.d.ts +9 -2
- package/audit/services/multi-database.service.js +9 -21
- package/audit/services/operation-description.service.d.ts +71 -2
- package/audit/services/operation-description.service.js +231 -20
- package/audit/services/transaction-audit.service.d.ts +30 -0
- package/audit/services/transaction-audit.service.js +53 -5
- package/audit/subscribers/entity-audit.subscriber.d.ts +19 -0
- package/audit/subscribers/entity-audit.subscriber.js +76 -1
- package/cache/cache-metrics.service.d.ts +67 -0
- package/cache/cache-metrics.service.js +68 -4
- package/cache/cache-serialization.service.d.ts +31 -0
- package/cache/cache-serialization.service.js +25 -0
- package/cache/cache.constants.d.ts +9 -0
- package/cache/cache.constants.js +9 -0
- package/cache/cache.health.d.ts +26 -0
- package/cache/cache.health.js +30 -0
- package/cache/cache.module.d.ts +82 -2
- package/cache/cache.module.js +76 -5
- package/cache/cache.service.d.ts +140 -0
- package/cache/cache.service.js +169 -0
- package/cache/cache.warmup.service.d.ts +39 -0
- package/cache/cache.warmup.service.js +32 -0
- package/cache/decorators/cache-evict.decorator.d.ts +47 -0
- package/cache/decorators/cache-evict.decorator.js +56 -0
- package/cache/decorators/cache-put.decorator.d.ts +34 -0
- package/cache/decorators/cache-put.decorator.js +39 -0
- package/cache/decorators/cacheable.decorator.d.ts +40 -0
- package/cache/decorators/cacheable.decorator.js +55 -0
- package/cache/dependencies/callback.dependency.d.ts +33 -0
- package/cache/dependencies/callback.dependency.js +39 -1
- package/cache/dependencies/chain.dependency.d.ts +28 -0
- package/cache/dependencies/chain.dependency.js +34 -0
- package/cache/dependencies/db.dependency.d.ts +83 -7
- package/cache/dependencies/db.dependency.js +89 -14
- package/cache/dependencies/file.dependency.d.ts +32 -0
- package/cache/dependencies/file.dependency.js +34 -0
- package/cache/dependencies/tag.dependency.d.ts +75 -4
- package/cache/dependencies/tag.dependency.js +145 -11
- package/cache/dependencies/time.dependency.d.ts +43 -0
- package/cache/dependencies/time.dependency.js +43 -0
- package/cache/examples/basic-usage.d.ts +15 -0
- package/cache/examples/basic-usage.js +62 -8
- package/cache/index.js +9 -0
- package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
- package/cache/interfaces/cache-options.interface.d.ts +89 -0
- package/cache/interfaces/cache-options.interface.js +6 -0
- package/cache/interfaces/cache-provider.interface.d.ts +78 -0
- package/cache/providers/base-cache.provider.d.ts +14 -0
- package/cache/providers/base-cache.provider.js +16 -0
- package/cache/providers/cls-cache.provider.d.ts +20 -0
- package/cache/providers/cls-cache.provider.js +28 -0
- package/cache/providers/memory-cache.provider.d.ts +43 -0
- package/cache/providers/memory-cache.provider.js +66 -0
- package/cache/providers/redis-cache.provider.d.ts +26 -0
- package/cache/providers/redis-cache.provider.js +29 -0
- package/cache/utils/dependency-manager.util.d.ts +52 -0
- package/cache/utils/dependency-manager.util.js +59 -0
- package/cache/utils/key-generator.util.d.ts +42 -0
- package/cache/utils/key-generator.util.js +53 -1
- package/common/abstract.entity.d.ts +14 -0
- package/common/abstract.entity.js +14 -0
- package/common/boilerplate.polyfill.d.ts +142 -0
- package/common/boilerplate.polyfill.js +18 -1
- package/common/dto/dto-container.d.ts +16 -0
- package/common/dto/dto-container.js +20 -0
- package/common/dto/dto-decorators.d.ts +18 -0
- package/common/dto/dto-decorators.js +14 -0
- package/common/dto/dto-extensions.d.ts +11 -0
- package/common/dto/dto-extensions.js +9 -0
- package/common/dto/dto-service-accessor.d.ts +17 -0
- package/common/dto/dto-service-accessor.js +18 -0
- package/common/dto/dto-transformer.d.ts +12 -0
- package/common/dto/dto-transformer.js +9 -0
- package/common/dto/index.js +2 -0
- package/common/examples/paginate-and-map.example.d.ts +6 -0
- package/common/examples/paginate-and-map.example.js +26 -0
- package/common/utils.d.ts +15 -0
- package/common/utils.js +15 -0
- package/constants/language-code.js +1 -0
- package/decorators/field.decorators.d.ts +1 -1
- package/decorators/field.decorators.js +8 -1
- package/decorators/property.decorators.js +1 -0
- package/decorators/public-route.decorator.js +1 -0
- package/decorators/transform.decorators.d.ts +27 -0
- package/decorators/transform.decorators.js +29 -0
- package/decorators/translate.decorator.js +1 -0
- package/decorators/user.decorator.js +1 -0
- package/decorators/validator.decorators.d.ts +8 -18
- package/decorators/validator.decorators.js +22 -190
- 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/constraint-errors.js +1 -0
- package/helpers/common.helper.d.ts +13 -0
- package/helpers/common.helper.js +13 -0
- package/http-client/config/http-client.config.d.ts +20 -0
- package/http-client/config/http-client.config.js +48 -21
- package/http-client/decorators/http-client.decorators.d.ts +55 -14
- package/http-client/decorators/http-client.decorators.js +154 -78
- package/http-client/entities/http-log.entity.d.ts +217 -8
- package/http-client/entities/http-log.entity.js +7 -22
- package/http-client/errors/http-client.errors.d.ts +57 -0
- package/http-client/errors/http-client.errors.js +58 -0
- package/http-client/examples/advanced-usage.example.d.ts +40 -0
- package/http-client/examples/advanced-usage.example.js +53 -61
- package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
- package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
- package/http-client/examples/basic-usage.example.d.ts +60 -0
- package/http-client/examples/basic-usage.example.js +60 -0
- package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
- package/http-client/examples/multi-api-configuration.example.js +76 -5
- 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/http-client.module.d.ts +48 -2
- package/http-client/http-client.module.js +147 -68
- package/http-client/index.d.ts +1 -1
- package/http-client/index.js +8 -0
- package/http-client/interfaces/api-client-config.interface.d.ts +80 -45
- package/http-client/interfaces/api-client-config.interface.js +3 -0
- package/http-client/interfaces/http-client-config.interface.d.ts +109 -52
- package/http-client/services/api-client-registry.service.d.ts +50 -11
- package/http-client/services/api-client-registry.service.js +90 -250
- package/http-client/services/circuit-breaker.service.d.ts +115 -2
- package/http-client/services/circuit-breaker.service.js +237 -7
- package/http-client/services/http-client.service.d.ts +124 -14
- package/http-client/services/http-client.service.js +437 -148
- package/http-client/services/http-log-query.service.d.ts +83 -0
- package/http-client/services/http-log-query.service.js +121 -13
- package/http-client/services/http-replay.service.d.ts +101 -0
- package/http-client/services/http-replay.service.js +86 -0
- package/http-client/services/index.d.ts +0 -1
- package/http-client/services/index.js +0 -1
- package/http-client/services/log-cleanup.service.d.ts +63 -0
- package/http-client/services/log-cleanup.service.js +54 -2
- package/http-client/services/logging.service.d.ts +116 -7
- package/http-client/services/logging.service.js +349 -86
- package/http-client/utils/call-stack-extractor.util.d.ts +63 -0
- package/http-client/utils/call-stack-extractor.util.js +83 -0
- package/http-client/utils/context-extractor.util.d.ts +49 -0
- package/http-client/utils/context-extractor.util.js +52 -0
- package/http-client/utils/curl-generator.util.d.ts +21 -0
- package/http-client/utils/curl-generator.util.js +44 -3
- package/http-client/utils/index.d.ts +1 -0
- package/http-client/utils/index.js +1 -0
- package/http-client/utils/proxy-environment.util.d.ts +42 -0
- package/http-client/utils/proxy-environment.util.js +148 -0
- package/http-client/utils/request-id.util.d.ts +18 -0
- package/http-client/utils/request-id.util.js +20 -0
- package/http-client/utils/retry-recorder.util.d.ts +42 -0
- package/http-client/utils/retry-recorder.util.js +44 -0
- package/http-client/utils/security-validator.util.d.ts +118 -0
- package/http-client/utils/security-validator.util.js +352 -0
- package/index.d.ts +3 -1
- package/index.js +12 -1
- package/interceptors/translation-interceptor.service.js +5 -0
- package/package.json +11 -7
- package/providers/context.provider.js +2 -0
- package/providers/generator.provider.d.ts +4 -0
- package/providers/generator.provider.js +4 -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/examples/lock-strategy.examples.d.ts +89 -0
- package/redis-lock/examples/lock-strategy.examples.js +130 -15
- package/redis-lock/index.d.ts +2 -0
- package/redis-lock/index.js +8 -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.decorator.d.ts +101 -0
- package/redis-lock/redis-lock.decorator.js +120 -0
- package/redis-lock/redis-lock.module.d.ts +66 -0
- package/redis-lock/redis-lock.module.js +175 -70
- package/redis-lock/redis-lock.service.d.ts +282 -0
- package/redis-lock/redis-lock.service.js +343 -20
- package/setup/bootstrap.setup.d.ts +1 -0
- package/setup/bootstrap.setup.js +21 -0
- package/setup/index.d.ts +1 -0
- package/setup/index.js +1 -0
- package/setup/mode.setup.d.ts +44 -0
- package/setup/mode.setup.js +44 -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 +227 -0
- package/setup/schedule.decorator.js +240 -12
- package/setup/worker.decorator.d.ts +86 -0
- package/setup/worker.decorator.js +97 -0
- package/shared/index.d.ts +1 -1
- package/shared/index.js +1 -1
- package/shared/{serviceRegistryModule.js → service-registry.module.js} +19 -17
- package/shared/services/api-config.service.d.ts +3 -0
- package/shared/services/api-config.service.js +21 -9
- package/shared/services/index.d.ts +0 -1
- package/shared/services/index.js +0 -1
- package/validator-json/decorators.d.ts +17 -0
- package/validator-json/decorators.js +17 -2
- package/validator-json/default.d.ts +6 -0
- package/validator-json/default.js +30 -2
- package/validator-json/defaultConverters.js +1 -0
- package/validator-json/options.d.ts +23 -0
- package/validators/common-validators.d.ts +143 -0
- package/validators/common-validators.js +249 -0
- package/validators/custom-validate.examples.d.ts +23 -0
- package/validators/custom-validate.examples.js +78 -6
- package/validators/custom-validate.validator.d.ts +108 -0
- package/validators/custom-validate.validator.js +85 -0
- package/validators/file-mimetype.validator.d.ts +0 -2
- package/validators/file-mimetype.validator.js +4 -6
- package/validators/index.d.ts +1 -0
- package/validators/index.js +1 -0
- package/validators/is-exists.validator.d.ts +26 -6
- package/validators/is-exists.validator.js +30 -7
- package/validators/is-unique.validator.d.ts +33 -7
- package/validators/is-unique.validator.js +59 -17
- package/validators/skip-empty.validator.d.ts +5 -0
- package/validators/skip-empty.validator.js +5 -0
- package/vault/interfaces/vault-options.interface.d.ts +9 -0
- package/vault/vault-config.loader.d.ts +30 -0
- package/vault/vault-config.loader.js +48 -1
- package/vault/vault-config.service.d.ts +53 -0
- package/vault/vault-config.service.js +57 -0
- package/vault/vault.module.d.ts +4 -0
- package/vault/vault.module.js +4 -0
- package/decorators/examples/validation-decorators.example.d.ts +0 -69
- package/decorators/examples/validation-decorators.example.js +0 -331
- package/http-client/services/cache.service.d.ts +0 -24
- package/http-client/services/cache.service.js +0 -264
- 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
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProxyEnvironmentParser = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
/**
|
|
6
|
+
* 代理环境变量解析工具
|
|
7
|
+
* 支持标准的代理环境变量:HTTP_PROXY, HTTPS_PROXY, NO_PROXY
|
|
8
|
+
*/
|
|
9
|
+
class ProxyEnvironmentParser {
|
|
10
|
+
/**
|
|
11
|
+
* 从环境变量解析代理配置
|
|
12
|
+
* @param protocol 请求协议 (http 或 https)
|
|
13
|
+
* @param targetUrl 目标 URL(用于检查 NO_PROXY)
|
|
14
|
+
* @returns 解析后的代理配置,如果不应使用代理则返回 false
|
|
15
|
+
*/
|
|
16
|
+
static parseFromEnvironment(protocol = 'http', targetUrl) {
|
|
17
|
+
// 获取代理环境变量 (大写和小写都支持)
|
|
18
|
+
const proxyEnv = protocol === 'https'
|
|
19
|
+
? process.env.HTTPS_PROXY ||
|
|
20
|
+
process.env.https_proxy ||
|
|
21
|
+
process.env.HTTP_PROXY ||
|
|
22
|
+
process.env.http_proxy
|
|
23
|
+
: process.env.HTTP_PROXY || process.env.http_proxy;
|
|
24
|
+
// 检查是否应该跳过代理
|
|
25
|
+
if (targetUrl && this.shouldBypassProxy(targetUrl)) {
|
|
26
|
+
this.logger.debug(`Bypassing proxy for ${targetUrl} due to NO_PROXY`);
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
if (!proxyEnv) {
|
|
30
|
+
this.logger.debug('No proxy environment variable found');
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const proxyConfig = this.parseProxyUrl(proxyEnv);
|
|
35
|
+
this.logger.debug(`Parsed proxy configuration from environment: ${JSON.stringify(proxyConfig)}`);
|
|
36
|
+
return proxyConfig;
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
this.logger.warn(`Failed to parse proxy URL from environment: ${error.message}`);
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 解析代理 URL
|
|
45
|
+
* 支持格式: http://proxy:port, http://user:pass@proxy:port
|
|
46
|
+
*/
|
|
47
|
+
static parseProxyUrl(proxyUrl) {
|
|
48
|
+
try {
|
|
49
|
+
const url = new URL(proxyUrl);
|
|
50
|
+
const config = {
|
|
51
|
+
protocol: url.protocol.replace(':', '') || 'http',
|
|
52
|
+
host: url.hostname,
|
|
53
|
+
port: url.port ? parseInt(url.port, 10) : url.protocol === 'https:' ? 443 : 80,
|
|
54
|
+
auth: undefined,
|
|
55
|
+
};
|
|
56
|
+
// 解析认证信息
|
|
57
|
+
if (url.username || url.password) {
|
|
58
|
+
config.auth = {
|
|
59
|
+
username: decodeURIComponent(url.username),
|
|
60
|
+
password: decodeURIComponent(url.password),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return config;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
throw new Error(`Invalid proxy URL format: ${proxyUrl}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 检查是否应该绕过代理
|
|
71
|
+
* 基于 NO_PROXY 环境变量
|
|
72
|
+
*/
|
|
73
|
+
static shouldBypassProxy(targetUrl) {
|
|
74
|
+
const noProxy = process.env.NO_PROXY || process.env.no_proxy;
|
|
75
|
+
if (!noProxy) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const url = new URL(targetUrl);
|
|
80
|
+
const hostname = url.hostname;
|
|
81
|
+
// NO_PROXY 可以是逗号分隔的列表
|
|
82
|
+
const bypassList = noProxy.split(',').map((item) => item.trim().toLowerCase());
|
|
83
|
+
for (const bypass of bypassList) {
|
|
84
|
+
if (!bypass)
|
|
85
|
+
continue;
|
|
86
|
+
// 精确匹配
|
|
87
|
+
if (hostname.toLowerCase() === bypass) {
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
// 通配符匹配 (例如 .example.com)
|
|
91
|
+
if (bypass.startsWith('.') && hostname.toLowerCase().endsWith(bypass)) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
// 后缀匹配 (例如 example.com 匹配 api.example.com)
|
|
95
|
+
if (hostname.toLowerCase().endsWith('.' + bypass)) {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
// 特殊值 * 表示所有域名都绕过
|
|
99
|
+
if (bypass === '*') {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
// IP 地址范围匹配 (简单实现)
|
|
103
|
+
if (this.isIpMatch(hostname, bypass)) {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
this.logger.warn(`Failed to parse target URL for NO_PROXY check: ${error.message}`);
|
|
110
|
+
}
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 简单的 IP 地址匹配
|
|
115
|
+
* 支持精确匹配和 CIDR 表示法
|
|
116
|
+
*/
|
|
117
|
+
static isIpMatch(hostname, pattern) {
|
|
118
|
+
// 精确 IP 匹配
|
|
119
|
+
if (hostname === pattern) {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
// CIDR 匹配 (简化版本,不做完整的 CIDR 计算)
|
|
123
|
+
if (pattern.includes('/')) {
|
|
124
|
+
const [baseIp] = pattern.split('/');
|
|
125
|
+
return hostname.startsWith(baseIp.substring(0, baseIp.lastIndexOf('.')));
|
|
126
|
+
}
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* 获取所有代理相关的环境变量
|
|
131
|
+
*/
|
|
132
|
+
static getProxyEnvironmentVariables() {
|
|
133
|
+
return {
|
|
134
|
+
HTTP_PROXY: process.env.HTTP_PROXY || process.env.http_proxy,
|
|
135
|
+
HTTPS_PROXY: process.env.HTTPS_PROXY || process.env.https_proxy,
|
|
136
|
+
NO_PROXY: process.env.NO_PROXY || process.env.no_proxy,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* 检查是否设置了代理环境变量
|
|
141
|
+
*/
|
|
142
|
+
static hasProxyEnvironment() {
|
|
143
|
+
const vars = this.getProxyEnvironmentVariables();
|
|
144
|
+
return !!(vars.HTTP_PROXY || vars.HTTPS_PROXY);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
exports.ProxyEnvironmentParser = ProxyEnvironmentParser;
|
|
148
|
+
ProxyEnvironmentParser.logger = new common_1.Logger(ProxyEnvironmentParser.name);
|
|
@@ -1,4 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 生成请求ID
|
|
3
|
+
* @returns 唯一的请求ID
|
|
4
|
+
*/
|
|
1
5
|
export declare function generateRequestId(): string;
|
|
6
|
+
/**
|
|
7
|
+
* 生成短请求ID(用于日志)
|
|
8
|
+
* @returns 短格的请求ID
|
|
9
|
+
*/
|
|
2
10
|
export declare function generateShortRequestId(): string;
|
|
11
|
+
/**
|
|
12
|
+
* 验证请求ID格式
|
|
13
|
+
* @param requestId 请求ID
|
|
14
|
+
* @returns 是否为有效的请求ID
|
|
15
|
+
*/
|
|
3
16
|
export declare function isValidRequestId(requestId: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* 从请求头中提取请求ID
|
|
19
|
+
* @param headers 请求头
|
|
20
|
+
* @returns 请求ID或null
|
|
21
|
+
*/
|
|
4
22
|
export declare function extractRequestId(headers: Record<string, string>): string | null;
|
|
@@ -5,17 +5,37 @@ exports.generateShortRequestId = generateShortRequestId;
|
|
|
5
5
|
exports.isValidRequestId = isValidRequestId;
|
|
6
6
|
exports.extractRequestId = extractRequestId;
|
|
7
7
|
const crypto_1 = require("crypto");
|
|
8
|
+
/**
|
|
9
|
+
* 生成请求ID
|
|
10
|
+
* @returns 唯一的请求ID
|
|
11
|
+
*/
|
|
8
12
|
function generateRequestId() {
|
|
9
13
|
return (0, crypto_1.randomUUID)();
|
|
10
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* 生成短请求ID(用于日志)
|
|
17
|
+
* @returns 短格的请求ID
|
|
18
|
+
*/
|
|
11
19
|
function generateShortRequestId() {
|
|
12
20
|
return Math.random().toString(36).substring(2, 15);
|
|
13
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* 验证请求ID格式
|
|
24
|
+
* @param requestId 请求ID
|
|
25
|
+
* @returns 是否为有效的请求ID
|
|
26
|
+
*/
|
|
14
27
|
function isValidRequestId(requestId) {
|
|
28
|
+
// UUID格式验证
|
|
15
29
|
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
16
30
|
return uuidRegex.test(requestId);
|
|
17
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* 从请求头中提取请求ID
|
|
34
|
+
* @param headers 请求头
|
|
35
|
+
* @returns 请求ID或null
|
|
36
|
+
*/
|
|
18
37
|
function extractRequestId(headers) {
|
|
38
|
+
// 常见的请求ID头名称
|
|
19
39
|
const requestIdHeaders = [
|
|
20
40
|
'x-request-id',
|
|
21
41
|
'x-trace-id',
|
|
@@ -1,14 +1,41 @@
|
|
|
1
1
|
import { AxiosError, AxiosRequestConfig } from 'axios';
|
|
2
2
|
import { RetryRecord } from '../entities/http-log.entity';
|
|
3
|
+
/**
|
|
4
|
+
* 请求重试记录器
|
|
5
|
+
*/
|
|
3
6
|
export declare class RetryRecorder {
|
|
4
7
|
private records;
|
|
8
|
+
/**
|
|
9
|
+
* 记录重试尝试
|
|
10
|
+
*/
|
|
5
11
|
static recordRetry(attempt: number, error: AxiosError | any, config: AxiosRequestConfig, delay: number): RetryRecord;
|
|
12
|
+
/**
|
|
13
|
+
* 创建重试记录器实例
|
|
14
|
+
*/
|
|
6
15
|
static create(): RetryRecorder;
|
|
16
|
+
/**
|
|
17
|
+
* 格式化错误信息
|
|
18
|
+
*/
|
|
7
19
|
private static formatError;
|
|
20
|
+
/**
|
|
21
|
+
* 获取重试原因
|
|
22
|
+
*/
|
|
8
23
|
private static getRetryReason;
|
|
24
|
+
/**
|
|
25
|
+
* 过滤敏感头信息
|
|
26
|
+
*/
|
|
9
27
|
private static sanitizeHeaders;
|
|
28
|
+
/**
|
|
29
|
+
* 添加重试记录
|
|
30
|
+
*/
|
|
10
31
|
addRecord(record: RetryRecord): void;
|
|
32
|
+
/**
|
|
33
|
+
* 获取所有重试记录
|
|
34
|
+
*/
|
|
11
35
|
getRecords(): RetryRecord[];
|
|
36
|
+
/**
|
|
37
|
+
* 获取重试统计
|
|
38
|
+
*/
|
|
12
39
|
getStats(): {
|
|
13
40
|
totalRetries: number;
|
|
14
41
|
maxAttempts: number;
|
|
@@ -16,10 +43,25 @@ export declare class RetryRecorder {
|
|
|
16
43
|
averageDelay: number;
|
|
17
44
|
reasons: Record<string, number>;
|
|
18
45
|
};
|
|
46
|
+
/**
|
|
47
|
+
* 重置记录
|
|
48
|
+
*/
|
|
19
49
|
reset(): void;
|
|
50
|
+
/**
|
|
51
|
+
* 获取最后一次重试记录
|
|
52
|
+
*/
|
|
20
53
|
getLastRecord(): RetryRecord | null;
|
|
54
|
+
/**
|
|
55
|
+
* 检查是否有重试记录
|
|
56
|
+
*/
|
|
21
57
|
hasRetries(): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* 获取指定尝试次数的记录
|
|
60
|
+
*/
|
|
22
61
|
getRecordByAttempt(attempt: number): RetryRecord | null;
|
|
62
|
+
/**
|
|
63
|
+
* 获取重试时间线
|
|
64
|
+
*/
|
|
23
65
|
getTimeline(): Array<{
|
|
24
66
|
attempt: number;
|
|
25
67
|
timestamp: Date;
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RetryRecorder = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 请求重试记录器
|
|
6
|
+
*/
|
|
4
7
|
class RetryRecorder {
|
|
5
8
|
constructor() {
|
|
6
9
|
this.records = [];
|
|
7
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* 记录重试尝试
|
|
13
|
+
*/
|
|
8
14
|
static recordRetry(attempt, error, config, delay) {
|
|
9
15
|
var _a;
|
|
10
16
|
return {
|
|
@@ -20,9 +26,15 @@ class RetryRecorder {
|
|
|
20
26
|
},
|
|
21
27
|
};
|
|
22
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* 创建重试记录器实例
|
|
31
|
+
*/
|
|
23
32
|
static create() {
|
|
24
33
|
return new RetryRecorder();
|
|
25
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* 格式化错误信息
|
|
37
|
+
*/
|
|
26
38
|
static formatError(error) {
|
|
27
39
|
var _a;
|
|
28
40
|
if (!error)
|
|
@@ -38,8 +50,12 @@ class RetryRecorder {
|
|
|
38
50
|
}
|
|
39
51
|
return formatted;
|
|
40
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* 获取重试原因
|
|
55
|
+
*/
|
|
41
56
|
static getRetryReason(error) {
|
|
42
57
|
if (!error.response) {
|
|
58
|
+
// 网络错误
|
|
43
59
|
if (error.code === 'ECONNRESET') {
|
|
44
60
|
return 'Connection reset';
|
|
45
61
|
}
|
|
@@ -54,6 +70,7 @@ class RetryRecorder {
|
|
|
54
70
|
}
|
|
55
71
|
return 'Network error';
|
|
56
72
|
}
|
|
73
|
+
// HTTP错误
|
|
57
74
|
const status = error.response.status;
|
|
58
75
|
if (status >= 500) {
|
|
59
76
|
return `Server error: ${status}`;
|
|
@@ -66,6 +83,9 @@ class RetryRecorder {
|
|
|
66
83
|
}
|
|
67
84
|
return `HTTP error: ${status}`;
|
|
68
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* 过滤敏感头信息
|
|
88
|
+
*/
|
|
69
89
|
static sanitizeHeaders(headers) {
|
|
70
90
|
const sanitized = {};
|
|
71
91
|
const sensitiveKeys = [
|
|
@@ -89,12 +109,21 @@ class RetryRecorder {
|
|
|
89
109
|
});
|
|
90
110
|
return sanitized;
|
|
91
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* 添加重试记录
|
|
114
|
+
*/
|
|
92
115
|
addRecord(record) {
|
|
93
116
|
this.records.push(record);
|
|
94
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* 获取所有重试记录
|
|
120
|
+
*/
|
|
95
121
|
getRecords() {
|
|
96
122
|
return [...this.records];
|
|
97
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* 获取重试统计
|
|
126
|
+
*/
|
|
98
127
|
getStats() {
|
|
99
128
|
const totalRetries = this.records.length;
|
|
100
129
|
const maxAttempts = Math.max(...this.records.map((r) => r.attempt), 0);
|
|
@@ -112,20 +141,35 @@ class RetryRecorder {
|
|
|
112
141
|
reasons,
|
|
113
142
|
};
|
|
114
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* 重置记录
|
|
146
|
+
*/
|
|
115
147
|
reset() {
|
|
116
148
|
this.records = [];
|
|
117
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* 获取最后一次重试记录
|
|
152
|
+
*/
|
|
118
153
|
getLastRecord() {
|
|
119
154
|
return this.records.length > 0
|
|
120
155
|
? this.records[this.records.length - 1]
|
|
121
156
|
: null;
|
|
122
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* 检查是否有重试记录
|
|
160
|
+
*/
|
|
123
161
|
hasRetries() {
|
|
124
162
|
return this.records.length > 0;
|
|
125
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* 获取指定尝试次数的记录
|
|
166
|
+
*/
|
|
126
167
|
getRecordByAttempt(attempt) {
|
|
127
168
|
return this.records.find((r) => r.attempt === attempt) || null;
|
|
128
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* 获取重试时间线
|
|
172
|
+
*/
|
|
129
173
|
getTimeline() {
|
|
130
174
|
let cumulativeDelay = 0;
|
|
131
175
|
return this.records.map((record) => {
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSRF防护配置
|
|
3
|
+
*/
|
|
4
|
+
export interface SSRFProtectionConfig {
|
|
5
|
+
/** 是否启用SSRF防护 */
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
/** 允许的URL协议 */
|
|
8
|
+
allowedProtocols: string[];
|
|
9
|
+
/** 禁止访问的IP段(私有网络、本地回环等) */
|
|
10
|
+
blockedIPRanges: string[];
|
|
11
|
+
/** 允许的主机名白名单 */
|
|
12
|
+
allowedHostnames?: string[];
|
|
13
|
+
/** 禁止的主机名黑名单 */
|
|
14
|
+
blockedHostnames?: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* URL验证配置
|
|
18
|
+
*/
|
|
19
|
+
export interface URLValidationConfig {
|
|
20
|
+
/** 最大URL长度 */
|
|
21
|
+
maxURLLength: number;
|
|
22
|
+
/** 是否允许本地回环地址 */
|
|
23
|
+
allowLoopback: boolean;
|
|
24
|
+
/** 是否允许私有网络地址 */
|
|
25
|
+
allowPrivateNetwork: boolean;
|
|
26
|
+
/** 是否允许Link-local地址 */
|
|
27
|
+
allowLinkLocal: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 安全验证工具类
|
|
31
|
+
* 提供URL验证、SSRF防护等功能
|
|
32
|
+
*/
|
|
33
|
+
export declare class SecurityValidator {
|
|
34
|
+
private static readonly logger;
|
|
35
|
+
/**
|
|
36
|
+
* 默认SSRF防护配置
|
|
37
|
+
*/
|
|
38
|
+
private static readonly defaultSSRFConfig;
|
|
39
|
+
/**
|
|
40
|
+
* 默认URL验证配置
|
|
41
|
+
*/
|
|
42
|
+
private static readonly defaultURLConfig;
|
|
43
|
+
/**
|
|
44
|
+
* 验证URL安全性
|
|
45
|
+
* @param url 要验证的URL字符串
|
|
46
|
+
* @param urlConfig URL验证配置
|
|
47
|
+
* @returns 验证结果和错误信息
|
|
48
|
+
*/
|
|
49
|
+
static validateURL(url: string, urlConfig?: Partial<URLValidationConfig>): {
|
|
50
|
+
valid: boolean;
|
|
51
|
+
error?: string;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* SSRF防护检查
|
|
55
|
+
* @param url 要检查的URL
|
|
56
|
+
* @param ssrfConfig SSRF防护配置
|
|
57
|
+
* @returns 检查结果和错误信息
|
|
58
|
+
*/
|
|
59
|
+
static checkSSRF(url: string, ssrfConfig?: Partial<SSRFProtectionConfig>): {
|
|
60
|
+
safe: boolean;
|
|
61
|
+
error?: string;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* 清理和验证URL
|
|
65
|
+
* 综合验证和SSRF防护
|
|
66
|
+
* @param url 要清理的URL
|
|
67
|
+
* @param config 完整的安全配置
|
|
68
|
+
* @returns 清理后的URL和验证结果
|
|
69
|
+
*/
|
|
70
|
+
static sanitizeURL(url: string, config?: {
|
|
71
|
+
urlConfig?: Partial<URLValidationConfig>;
|
|
72
|
+
ssrfConfig?: Partial<SSRFProtectionConfig>;
|
|
73
|
+
}): {
|
|
74
|
+
url: string;
|
|
75
|
+
valid: boolean;
|
|
76
|
+
error?: string;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* 从主机名中提取IP地址
|
|
80
|
+
*/
|
|
81
|
+
private static extractIPAddress;
|
|
82
|
+
/**
|
|
83
|
+
* 验证IP地址
|
|
84
|
+
*/
|
|
85
|
+
private static validateIPAddress;
|
|
86
|
+
/**
|
|
87
|
+
* 检查IP地址是否在阻止的范围内
|
|
88
|
+
*/
|
|
89
|
+
private static checkIPRange;
|
|
90
|
+
/**
|
|
91
|
+
* 检查IP地址是否在指定范围内
|
|
92
|
+
* 简化版本,主要用于常见CIDR范围
|
|
93
|
+
*/
|
|
94
|
+
private static isIPInRange;
|
|
95
|
+
/**
|
|
96
|
+
* 验证主机名格式
|
|
97
|
+
*/
|
|
98
|
+
private static isValidHostname;
|
|
99
|
+
/**
|
|
100
|
+
* 敏感数据检测
|
|
101
|
+
* 检查数据中是否包含敏感信息(如密码、token等)
|
|
102
|
+
* @param data 要检查的数据对象
|
|
103
|
+
* @param additionalPatterns 额外的敏感数据模式
|
|
104
|
+
* @returns 检测结果
|
|
105
|
+
*/
|
|
106
|
+
static detectSensitiveData(data: any, additionalPatterns?: RegExp[]): {
|
|
107
|
+
hasSensitiveData: boolean;
|
|
108
|
+
fields: string[];
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* 获取默认SSRF防护配置
|
|
112
|
+
*/
|
|
113
|
+
static getDefaultSSRFConfig(): SSRFProtectionConfig;
|
|
114
|
+
/**
|
|
115
|
+
* 获取默认URL验证配置
|
|
116
|
+
*/
|
|
117
|
+
static getDefaultURLConfig(): URLValidationConfig;
|
|
118
|
+
}
|