@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
|
@@ -22,17 +22,15 @@ exports.PaymentHttpService = exports.GitHubHttpService = void 0;
|
|
|
22
22
|
const common_1 = require("@nestjs/common");
|
|
23
23
|
const decorators_1 = require("../decorators");
|
|
24
24
|
const http_client_service_1 = require("../services/http-client.service");
|
|
25
|
-
const cache_options_interface_1 = require("../../cache/interfaces/cache-options.interface");
|
|
26
25
|
/**
|
|
27
26
|
* 高级使用示例 - GitHub API客户端
|
|
28
|
-
* 集成现有的三层缓存架构
|
|
29
27
|
*/
|
|
30
28
|
let GitHubHttpService = class GitHubHttpService {
|
|
31
29
|
constructor(httpClient) {
|
|
32
30
|
this.httpClient = httpClient;
|
|
33
31
|
}
|
|
34
32
|
/**
|
|
35
|
-
* 获取用户信息 -
|
|
33
|
+
* 获取用户信息 - 带重试、熔断器和日志
|
|
36
34
|
*/
|
|
37
35
|
getUser(username) {
|
|
38
36
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -40,7 +38,7 @@ let GitHubHttpService = class GitHubHttpService {
|
|
|
40
38
|
});
|
|
41
39
|
}
|
|
42
40
|
/**
|
|
43
|
-
* 搜索仓库 -
|
|
41
|
+
* 搜索仓库 - 带重试
|
|
44
42
|
*/
|
|
45
43
|
searchRepositories(query_1) {
|
|
46
44
|
return __awaiter(this, arguments, void 0, function* (query, sort = 'stars', order = 'desc') {
|
|
@@ -102,7 +100,7 @@ let GitHubHttpService = class GitHubHttpService {
|
|
|
102
100
|
});
|
|
103
101
|
}
|
|
104
102
|
/**
|
|
105
|
-
*
|
|
103
|
+
* 获取仓库详情
|
|
106
104
|
*/
|
|
107
105
|
getRepositoryDetails(owner, repo, options) {
|
|
108
106
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -126,11 +124,6 @@ __decorate([
|
|
|
126
124
|
failureThreshold: 3,
|
|
127
125
|
recoveryTimeoutMs: 30000,
|
|
128
126
|
}),
|
|
129
|
-
(0, decorators_1.HttpCacheable)({
|
|
130
|
-
ttl: 300000, // 5分钟缓存
|
|
131
|
-
layers: ['cls', 'memory', 'redis'], // 使用三层缓存
|
|
132
|
-
namespace: 'github',
|
|
133
|
-
}),
|
|
134
127
|
(0, decorators_1.HttpLogRequest)({
|
|
135
128
|
databaseLog: true,
|
|
136
129
|
logHeaders: true,
|
|
@@ -146,12 +139,6 @@ __decorate([
|
|
|
146
139
|
], GitHubHttpService.prototype, "getUser", null);
|
|
147
140
|
__decorate([
|
|
148
141
|
(0, decorators_1.HttpRetry)({ retries: 3 }),
|
|
149
|
-
(0, decorators_1.HttpCacheable)({
|
|
150
|
-
ttl: 600000, // 10分钟缓存
|
|
151
|
-
layers: ['memory', 'redis'], // 仅使用内存和Redis缓存
|
|
152
|
-
namespace: 'github-search',
|
|
153
|
-
condition: (args) => args[0].length > 2, // 只缓存搜索词长度大于2的请求
|
|
154
|
-
}),
|
|
155
142
|
__metadata("design:type", Function),
|
|
156
143
|
__metadata("design:paramtypes", [String, String, String]),
|
|
157
144
|
__metadata("design:returntype", Promise)
|
|
@@ -162,10 +149,6 @@ __decorate([
|
|
|
162
149
|
port: 8080,
|
|
163
150
|
protocol: 'http',
|
|
164
151
|
}),
|
|
165
|
-
(0, decorators_1.HttpCacheable)({
|
|
166
|
-
ttl: 120000, // 2分钟缓存
|
|
167
|
-
namespace: 'github-repos',
|
|
168
|
-
}),
|
|
169
152
|
__metadata("design:type", Function),
|
|
170
153
|
__metadata("design:paramtypes", [String]),
|
|
171
154
|
__metadata("design:returntype", Promise)
|
|
@@ -175,7 +158,7 @@ __decorate([
|
|
|
175
158
|
logHeaders: true,
|
|
176
159
|
logBody: true,
|
|
177
160
|
databaseLog: true,
|
|
178
|
-
|
|
161
|
+
sanitize: ['authorization', 'x-api-key'],
|
|
179
162
|
}),
|
|
180
163
|
__metadata("design:type", Function),
|
|
181
164
|
__metadata("design:paramtypes", [Object, String]),
|
|
@@ -186,39 +169,14 @@ __decorate([
|
|
|
186
169
|
failureThreshold: 5,
|
|
187
170
|
recoveryTimeoutMs: 60000,
|
|
188
171
|
}),
|
|
189
|
-
(0, decorators_1.HttpCacheable)({
|
|
190
|
-
ttl: 900000, // 15分钟缓存
|
|
191
|
-
namespace: 'github-contributors',
|
|
192
|
-
}),
|
|
193
172
|
__metadata("design:type", Function),
|
|
194
173
|
__metadata("design:paramtypes", [String, String]),
|
|
195
174
|
__metadata("design:returntype", Promise)
|
|
196
175
|
], GitHubHttpService.prototype, "getRepositoryContributors", null);
|
|
197
|
-
__decorate([
|
|
198
|
-
(0, decorators_1.HttpCacheable)({
|
|
199
|
-
ttl: 120000, // 2分钟缓存
|
|
200
|
-
layers: ['memory'], // 仅内存缓存
|
|
201
|
-
namespace: 'github-repo-details',
|
|
202
|
-
condition: (args) => { var _a; return ((_a = args[2]) === null || _a === void 0 ? void 0 : _a.public) === true; }, // 只缓存公开仓库
|
|
203
|
-
unless: (result, args) => (result === null || result === void 0 ? void 0 : result.archived) === true, // 不缓存已归档的仓库
|
|
204
|
-
}),
|
|
205
|
-
__metadata("design:type", Function),
|
|
206
|
-
__metadata("design:paramtypes", [String, String, Object]),
|
|
207
|
-
__metadata("design:returntype", Promise)
|
|
208
|
-
], GitHubHttpService.prototype, "getRepositoryDetails", null);
|
|
209
176
|
exports.GitHubHttpService = GitHubHttpService = __decorate([
|
|
210
177
|
(0, decorators_1.HttpClient)({
|
|
211
178
|
baseURL: 'https://api.github.com',
|
|
212
179
|
timeout: 10000,
|
|
213
|
-
cache: {
|
|
214
|
-
enabled: true,
|
|
215
|
-
defaultTtl: 300000,
|
|
216
|
-
cacheableMethods: ['GET', 'HEAD'],
|
|
217
|
-
cacheableStatusCodes: [200, 304],
|
|
218
|
-
options: {
|
|
219
|
-
layers: [cache_options_interface_1.CacheLayer.MEMORY, cache_options_interface_1.CacheLayer.REDIS], // 使用现有的三层缓存
|
|
220
|
-
},
|
|
221
|
-
},
|
|
222
180
|
logging: {
|
|
223
181
|
enabled: true,
|
|
224
182
|
logRequests: true,
|
|
@@ -227,7 +185,7 @@ exports.GitHubHttpService = GitHubHttpService = __decorate([
|
|
|
227
185
|
logHeaders: true,
|
|
228
186
|
logBody: true,
|
|
229
187
|
maxBodyLength: 1000,
|
|
230
|
-
|
|
188
|
+
sanitize: ['authorization'],
|
|
231
189
|
logLevel: 'info',
|
|
232
190
|
},
|
|
233
191
|
}),
|
|
@@ -257,7 +215,7 @@ let PaymentHttpService = class PaymentHttpService {
|
|
|
257
215
|
});
|
|
258
216
|
}
|
|
259
217
|
/**
|
|
260
|
-
* 查询支付状态
|
|
218
|
+
* 查询支付状态
|
|
261
219
|
*/
|
|
262
220
|
getPaymentStatus(paymentId, apiKey) {
|
|
263
221
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -322,16 +280,6 @@ __decorate([
|
|
|
322
280
|
__metadata("design:paramtypes", [Object, String]),
|
|
323
281
|
__metadata("design:returntype", Promise)
|
|
324
282
|
], PaymentHttpService.prototype, "createPayment", null);
|
|
325
|
-
__decorate([
|
|
326
|
-
(0, decorators_1.HttpCacheable)({
|
|
327
|
-
ttl: 30000, // 30秒缓存
|
|
328
|
-
layers: ['redis'], // 仅Redis缓存,确保多实例共享
|
|
329
|
-
namespace: 'payment-status',
|
|
330
|
-
}),
|
|
331
|
-
__metadata("design:type", Function),
|
|
332
|
-
__metadata("design:paramtypes", [String, String]),
|
|
333
|
-
__metadata("design:returntype", Promise)
|
|
334
|
-
], PaymentHttpService.prototype, "getPaymentStatus", null);
|
|
335
283
|
__decorate([
|
|
336
284
|
(0, decorators_1.HttpRetry)({
|
|
337
285
|
retries: 2,
|
|
@@ -367,7 +315,7 @@ exports.PaymentHttpService = PaymentHttpService = __decorate([
|
|
|
367
315
|
logHeaders: false, // 不记录敏感头信息
|
|
368
316
|
logBody: false, // 不记录支付数据
|
|
369
317
|
maxBodyLength: 1000,
|
|
370
|
-
|
|
318
|
+
sanitize: ['authorization', 'x-api-key', 'x-client-secret'],
|
|
371
319
|
logLevel: 'info',
|
|
372
320
|
},
|
|
373
321
|
}),
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { HttpClientConfig } from '../interfaces/http-client-config.interface';
|
|
2
|
+
/**
|
|
3
|
+
* axiosConfig 透传配置示例
|
|
4
|
+
* 展示如何通过 axiosConfig 直接传递 Axios 原生配置
|
|
5
|
+
*/
|
|
6
|
+
export declare function httpAgentExample(): void;
|
|
7
|
+
export declare function redirectAndValidationExample(): void;
|
|
8
|
+
export declare function responseTypeExample(): void;
|
|
9
|
+
export declare function sizeAndRateLimitExample(): void;
|
|
10
|
+
export declare function paramsSerializationExample(): void;
|
|
11
|
+
export declare function formSerializationExample(): void;
|
|
12
|
+
export declare function securityOptionsExample(): void;
|
|
13
|
+
export declare function abortControllerExample(): void;
|
|
14
|
+
export declare function transitionalOptionsExample(): void;
|
|
15
|
+
export declare function progressEventsExample(): void;
|
|
16
|
+
export declare function comprehensiveConfigExample(): HttpClientConfig;
|
|
17
|
+
export declare function environmentSpecificConfig(): HttpClientConfig;
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.httpAgentExample = httpAgentExample;
|
|
4
|
+
exports.redirectAndValidationExample = redirectAndValidationExample;
|
|
5
|
+
exports.responseTypeExample = responseTypeExample;
|
|
6
|
+
exports.sizeAndRateLimitExample = sizeAndRateLimitExample;
|
|
7
|
+
exports.paramsSerializationExample = paramsSerializationExample;
|
|
8
|
+
exports.formSerializationExample = formSerializationExample;
|
|
9
|
+
exports.securityOptionsExample = securityOptionsExample;
|
|
10
|
+
exports.abortControllerExample = abortControllerExample;
|
|
11
|
+
exports.transitionalOptionsExample = transitionalOptionsExample;
|
|
12
|
+
exports.progressEventsExample = progressEventsExample;
|
|
13
|
+
exports.comprehensiveConfigExample = comprehensiveConfigExample;
|
|
14
|
+
exports.environmentSpecificConfig = environmentSpecificConfig;
|
|
15
|
+
const http_1 = require("http");
|
|
16
|
+
const https_1 = require("https");
|
|
17
|
+
/**
|
|
18
|
+
* axiosConfig 透传配置示例
|
|
19
|
+
* 展示如何通过 axiosConfig 直接传递 Axios 原生配置
|
|
20
|
+
*/
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// 示例 1: 使用 httpAgent 和 httpsAgent 启用连接池
|
|
23
|
+
// ============================================================================
|
|
24
|
+
function httpAgentExample() {
|
|
25
|
+
const config = {
|
|
26
|
+
baseURL: 'https://api.example.com',
|
|
27
|
+
timeout: 30000,
|
|
28
|
+
// 通过 axiosConfig 透传 Axios 原生配置
|
|
29
|
+
axiosConfig: {
|
|
30
|
+
// 启用 HTTP keep-alive 连接池
|
|
31
|
+
httpAgent: new http_1.Agent({
|
|
32
|
+
keepAlive: true,
|
|
33
|
+
keepAliveMsecs: 1000,
|
|
34
|
+
maxSockets: 50,
|
|
35
|
+
maxFreeSockets: 10,
|
|
36
|
+
timeout: 60000,
|
|
37
|
+
}),
|
|
38
|
+
// 启用 HTTPS keep-alive 连接池
|
|
39
|
+
httpsAgent: new https_1.Agent({
|
|
40
|
+
keepAlive: true,
|
|
41
|
+
keepAliveMsecs: 1000,
|
|
42
|
+
maxSockets: 50,
|
|
43
|
+
maxFreeSockets: 10,
|
|
44
|
+
timeout: 60000,
|
|
45
|
+
// 可选:跳过证书验证(不推荐用于生产环境)
|
|
46
|
+
rejectUnauthorized: true,
|
|
47
|
+
}),
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
// 创建 HttpClientService 实例...
|
|
51
|
+
}
|
|
52
|
+
// ============================================================================
|
|
53
|
+
// 示例 2: 配置重定向和响应验证
|
|
54
|
+
// ============================================================================
|
|
55
|
+
function redirectAndValidationExample() {
|
|
56
|
+
const config = {
|
|
57
|
+
baseURL: 'https://api.example.com',
|
|
58
|
+
axiosConfig: {
|
|
59
|
+
// 禁止自动跟随重定向
|
|
60
|
+
maxRedirects: 0,
|
|
61
|
+
// 或者限制重定向次数
|
|
62
|
+
// maxRedirects: 5,
|
|
63
|
+
// 自定义状态码验证逻辑
|
|
64
|
+
validateStatus: (status) => {
|
|
65
|
+
// 将 400-499 视为成功(不抛出异常)
|
|
66
|
+
return status >= 200 && status < 500;
|
|
67
|
+
},
|
|
68
|
+
// 重定向前回调
|
|
69
|
+
beforeRedirect: (options, { headers }) => {
|
|
70
|
+
// 可以在这里修改重定向请求
|
|
71
|
+
if (options.hostname === 'restricted.com') {
|
|
72
|
+
throw new Error('Redirect to restricted domain not allowed');
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// ============================================================================
|
|
79
|
+
// 示例 3: 配置响应类型和数据转换
|
|
80
|
+
// ============================================================================
|
|
81
|
+
function responseTypeExample() {
|
|
82
|
+
const config = {
|
|
83
|
+
baseURL: 'https://api.example.com',
|
|
84
|
+
axiosConfig: {
|
|
85
|
+
// 指定响应类型
|
|
86
|
+
responseType: 'arraybuffer', // 'arraybuffer' | 'document' | 'json' | 'text' | 'stream' | 'blob'
|
|
87
|
+
responseEncoding: 'utf8',
|
|
88
|
+
// 自定义请求/响应转换器
|
|
89
|
+
transformRequest: [
|
|
90
|
+
(data, headers) => {
|
|
91
|
+
// 在发送前修改数据
|
|
92
|
+
if (typeof data === 'object') {
|
|
93
|
+
// 自动添加时间戳
|
|
94
|
+
data.timestamp = Date.now();
|
|
95
|
+
}
|
|
96
|
+
return JSON.stringify(data);
|
|
97
|
+
},
|
|
98
|
+
...require('axios').defaults.transformRequest,
|
|
99
|
+
],
|
|
100
|
+
transformResponse: [
|
|
101
|
+
(data) => {
|
|
102
|
+
// 在接收后修改数据
|
|
103
|
+
if (typeof data === 'string') {
|
|
104
|
+
try {
|
|
105
|
+
const parsed = JSON.parse(data);
|
|
106
|
+
// 统一处理响应格式
|
|
107
|
+
return parsed.data || parsed;
|
|
108
|
+
}
|
|
109
|
+
catch (_a) {
|
|
110
|
+
return data;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return data;
|
|
114
|
+
},
|
|
115
|
+
...require('axios').defaults.transformResponse,
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// ============================================================================
|
|
121
|
+
// 示例 4: 配置大小限制和速率限制
|
|
122
|
+
// ============================================================================
|
|
123
|
+
function sizeAndRateLimitExample() {
|
|
124
|
+
const config = {
|
|
125
|
+
baseURL: 'https://api.example.com',
|
|
126
|
+
axiosConfig: {
|
|
127
|
+
// 响应体大小限制(字节)
|
|
128
|
+
maxContentLength: 10 * 1024 * 1024, // 10MB
|
|
129
|
+
// 请求体大小限制(字节)
|
|
130
|
+
maxBodyLength: 5 * 1024 * 1024, // 5MB
|
|
131
|
+
// 速率限制 [上传 B/s, 下载 B/s]
|
|
132
|
+
maxRate: [1024 * 1024, 2 * 1024 * 1024], // 上传 1MB/s, 下载 2MB/s
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
// ============================================================================
|
|
137
|
+
// 示例 5: 配置参数序列化
|
|
138
|
+
// ============================================================================
|
|
139
|
+
function paramsSerializationExample() {
|
|
140
|
+
const config = {
|
|
141
|
+
baseURL: 'https://api.example.com',
|
|
142
|
+
axiosConfig: {
|
|
143
|
+
paramsSerializer: {
|
|
144
|
+
// 自定义编码函数
|
|
145
|
+
encode: (param) => {
|
|
146
|
+
return encodeURIComponent(param)
|
|
147
|
+
.replace(/%40/gi, '@')
|
|
148
|
+
.replace(/%3A/gi, ':')
|
|
149
|
+
.replace(/%24/g, '$')
|
|
150
|
+
.replace(/%2C/gi, ',')
|
|
151
|
+
.replace(/%20/g, '+');
|
|
152
|
+
},
|
|
153
|
+
// 数组索引格式
|
|
154
|
+
indexes: true, // true=a[0]=b, false=a[]=b, null=a=b
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
// ============================================================================
|
|
160
|
+
// 示例 6: 配置表单序列化
|
|
161
|
+
// ============================================================================
|
|
162
|
+
function formSerializationExample() {
|
|
163
|
+
const config = {
|
|
164
|
+
baseURL: 'https://api.example.com',
|
|
165
|
+
axiosConfig: {
|
|
166
|
+
formSerializer: {
|
|
167
|
+
// 自定义访问器
|
|
168
|
+
visitor: (value, key, path) => {
|
|
169
|
+
// 自定义值转换逻辑
|
|
170
|
+
if (value instanceof Date) {
|
|
171
|
+
return value.toISOString();
|
|
172
|
+
}
|
|
173
|
+
return value;
|
|
174
|
+
},
|
|
175
|
+
// 使用点符号而不是括号
|
|
176
|
+
dots: true,
|
|
177
|
+
// 保留特殊结尾(如 {})
|
|
178
|
+
metaTokens: true,
|
|
179
|
+
// 数组索引格式
|
|
180
|
+
indexes: true,
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
// ============================================================================
|
|
186
|
+
// 示例 7: 配置安全选项
|
|
187
|
+
// ============================================================================
|
|
188
|
+
function securityOptionsExample() {
|
|
189
|
+
const config = {
|
|
190
|
+
baseURL: 'https://api.example.com',
|
|
191
|
+
axiosConfig: {
|
|
192
|
+
// 是否允许绝对 URL 覆盖 baseURL
|
|
193
|
+
allowAbsoluteUrls: true,
|
|
194
|
+
// 跨域请求是否携带凭证
|
|
195
|
+
withCredentials: true,
|
|
196
|
+
// 禁用自动解压
|
|
197
|
+
decompress: false,
|
|
198
|
+
// 使用不安全的 HTTP 解析器(允许无效的 HTTP 头)
|
|
199
|
+
// 警告:仅在与非标准 HTTP 实现交互时使用
|
|
200
|
+
insecureHTTPParser: false,
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
// ============================================================================
|
|
205
|
+
// 示例 8: 使用 AbortSignal 取消请求
|
|
206
|
+
// ============================================================================
|
|
207
|
+
function abortControllerExample() {
|
|
208
|
+
const config = {
|
|
209
|
+
baseURL: 'https://api.example.com',
|
|
210
|
+
axiosConfig: {
|
|
211
|
+
// 可以在每次请求时动态设置
|
|
212
|
+
// signal: new AbortController().signal,
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
// 使用示例:
|
|
216
|
+
// const abortController = new AbortController();
|
|
217
|
+
// config.axiosConfig!.signal = abortController.signal;
|
|
218
|
+
//
|
|
219
|
+
// setTimeout(() => abortController.abort(), 5000); // 5秒后取消
|
|
220
|
+
}
|
|
221
|
+
// ============================================================================
|
|
222
|
+
// 示例 9: 向后兼容选项
|
|
223
|
+
// ============================================================================
|
|
224
|
+
function transitionalOptionsExample() {
|
|
225
|
+
const config = {
|
|
226
|
+
baseURL: 'https://api.example.com',
|
|
227
|
+
axiosConfig: {
|
|
228
|
+
transitional: {
|
|
229
|
+
// 静默 JSON 解析错误(旧行为)
|
|
230
|
+
silentJSONParsing: false,
|
|
231
|
+
// 即使 responseType 不是 'json' 也尝试解析
|
|
232
|
+
forcedJSONParsing: true,
|
|
233
|
+
// 超时时抛出明确的 ETIMEDOUT 错误
|
|
234
|
+
clarifyTimeoutError: true,
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
// ============================================================================
|
|
240
|
+
// 示例 10: 进度事件(浏览器环境)
|
|
241
|
+
// ============================================================================
|
|
242
|
+
function progressEventsExample() {
|
|
243
|
+
const config = {
|
|
244
|
+
baseURL: 'https://api.example.com',
|
|
245
|
+
axiosConfig: {
|
|
246
|
+
// 上传进度
|
|
247
|
+
onUploadProgress: (progressEvent) => {
|
|
248
|
+
const percentCompleted = Math.round((progressEvent.loaded * 100) / (progressEvent.total || 1));
|
|
249
|
+
console.log(`Upload ${percentCompleted}%`);
|
|
250
|
+
},
|
|
251
|
+
// 下载进度
|
|
252
|
+
onDownloadProgress: (progressEvent) => {
|
|
253
|
+
const percentCompleted = Math.round((progressEvent.loaded * 100) / (progressEvent.total || 1));
|
|
254
|
+
console.log(`Download ${percentCompleted}%`);
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
// ============================================================================
|
|
260
|
+
// 示例 11: 综合配置
|
|
261
|
+
// ============================================================================
|
|
262
|
+
function comprehensiveConfigExample() {
|
|
263
|
+
const config = {
|
|
264
|
+
// 显式配置(优先级高)
|
|
265
|
+
baseURL: 'https://api.example.com',
|
|
266
|
+
timeout: 30000,
|
|
267
|
+
// 内置功能配置
|
|
268
|
+
retry: {
|
|
269
|
+
enabled: true,
|
|
270
|
+
retries: 3,
|
|
271
|
+
},
|
|
272
|
+
circuitBreaker: {
|
|
273
|
+
enabled: true,
|
|
274
|
+
failureThreshold: 5,
|
|
275
|
+
},
|
|
276
|
+
logging: {
|
|
277
|
+
enabled: true,
|
|
278
|
+
logLevel: 'info',
|
|
279
|
+
},
|
|
280
|
+
// Axios 原生配置透传(优先级低,会被显式配置覆盖)
|
|
281
|
+
axiosConfig: {
|
|
282
|
+
httpAgent: new http_1.Agent({ keepAlive: true }),
|
|
283
|
+
httpsAgent: new https_1.Agent({ keepAlive: true }),
|
|
284
|
+
maxRedirects: 5,
|
|
285
|
+
responseType: 'json',
|
|
286
|
+
validateStatus: (status) => status >= 200 && status < 300,
|
|
287
|
+
maxContentLength: 10 * 1024 * 1024,
|
|
288
|
+
},
|
|
289
|
+
};
|
|
290
|
+
return config;
|
|
291
|
+
}
|
|
292
|
+
// ============================================================================
|
|
293
|
+
// 示例 12: 环境相关的配置
|
|
294
|
+
// ============================================================================
|
|
295
|
+
function environmentSpecificConfig() {
|
|
296
|
+
const isDevelopment = process.env.NODE_ENV === 'development';
|
|
297
|
+
const config = {
|
|
298
|
+
baseURL: isDevelopment
|
|
299
|
+
? 'https://dev-api.example.com'
|
|
300
|
+
: 'https://api.example.com',
|
|
301
|
+
axiosConfig: {
|
|
302
|
+
// 开发环境使用更宽松的验证
|
|
303
|
+
validateStatus: isDevelopment
|
|
304
|
+
? (status) => status >= 200 && status < 500
|
|
305
|
+
: (status) => status >= 200 && status < 300,
|
|
306
|
+
// 开发环境禁用 keep-alive 以便调试
|
|
307
|
+
httpAgent: isDevelopment ? undefined : new http_1.Agent({ keepAlive: true }),
|
|
308
|
+
},
|
|
309
|
+
};
|
|
310
|
+
return config;
|
|
311
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HttpClientService 灵活返回示例
|
|
3
|
+
* 展示如何根据不同需求获取不同的响应数据
|
|
4
|
+
*/
|
|
5
|
+
import { HttpClientService } from '../services/http-client.service';
|
|
6
|
+
declare function getFullResponseExample(httpClient: HttpClientService): Promise<any>;
|
|
7
|
+
declare function getCustomResponseExample(httpClient: HttpClientService): Promise<any>;
|
|
8
|
+
declare function getPagedResponseExample(httpClient: HttpClientService): Promise<{
|
|
9
|
+
data: any;
|
|
10
|
+
currentPage: number;
|
|
11
|
+
pageSize: number;
|
|
12
|
+
totalPages: number;
|
|
13
|
+
totalItems: number;
|
|
14
|
+
hasNextPage: any;
|
|
15
|
+
hasPrevPage: any;
|
|
16
|
+
}>;
|
|
17
|
+
declare function getRedirectUrlExample(httpClient: HttpClientService): Promise<{
|
|
18
|
+
redirected: boolean;
|
|
19
|
+
url: any;
|
|
20
|
+
data?: undefined;
|
|
21
|
+
} | {
|
|
22
|
+
redirected: boolean;
|
|
23
|
+
data: any;
|
|
24
|
+
url?: undefined;
|
|
25
|
+
}>;
|
|
26
|
+
declare function getDefaultBehaviorExample(httpClient: HttpClientService): Promise<any>;
|
|
27
|
+
declare function conditionalReturnExample(httpClient: HttpClientService, needHeaders: boolean): Promise<any>;
|
|
28
|
+
export { getFullResponseExample, getCustomResponseExample, getPagedResponseExample, getRedirectUrlExample, getDefaultBehaviorExample, conditionalReturnExample, };
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* HttpClientService 灵活返回示例
|
|
4
|
+
* 展示如何根据不同需求获取不同的响应数据
|
|
5
|
+
*/
|
|
6
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
7
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
8
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
9
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
10
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
11
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
12
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.getFullResponseExample = getFullResponseExample;
|
|
17
|
+
exports.getCustomResponseExample = getCustomResponseExample;
|
|
18
|
+
exports.getPagedResponseExample = getPagedResponseExample;
|
|
19
|
+
exports.getRedirectUrlExample = getRedirectUrlExample;
|
|
20
|
+
exports.getDefaultBehaviorExample = getDefaultBehaviorExample;
|
|
21
|
+
exports.conditionalReturnExample = conditionalReturnExample;
|
|
22
|
+
// 示例1: 获取完整响应对象(包含headers, status等)
|
|
23
|
+
function getFullResponseExample(httpClient) {
|
|
24
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
// 返回完整的AxiosResponse对象
|
|
26
|
+
const fullResponse = yield httpClient.get('https://api.example.com/data', {}, // config
|
|
27
|
+
'my-client', // clientName
|
|
28
|
+
{ returnType: 'full' });
|
|
29
|
+
// 现在可以访问headers、status等信息
|
|
30
|
+
console.log('Status:', fullResponse.status);
|
|
31
|
+
console.log('Headers:', fullResponse.headers);
|
|
32
|
+
console.log('Data:', fullResponse.data);
|
|
33
|
+
// 例如检查特定header
|
|
34
|
+
const contentType = fullResponse.headers['content-type'];
|
|
35
|
+
const location = fullResponse.headers['location'];
|
|
36
|
+
return fullResponse.data; // 仍然可以获取data
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// 示例2: 自定义返回格式
|
|
40
|
+
function getCustomResponseExample(httpClient) {
|
|
41
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
// 自定义转换函数 - 只返回需要的字段
|
|
43
|
+
const customResponse = yield httpClient.get('https://api.example.com/users', {}, 'my-client', {
|
|
44
|
+
returnType: 'custom',
|
|
45
|
+
transform: (response) => {
|
|
46
|
+
var _a;
|
|
47
|
+
return ({
|
|
48
|
+
data: response.data,
|
|
49
|
+
totalCount: response.headers['x-total-count'],
|
|
50
|
+
currentPage: response.headers['x-current-page'],
|
|
51
|
+
hasNext: (_a = response.headers['link']) === null || _a === void 0 ? void 0 : _a.includes('rel="next"'),
|
|
52
|
+
});
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
console.log('Total Count:', customResponse.totalCount);
|
|
56
|
+
console.log('Has Next Page:', customResponse.hasNext);
|
|
57
|
+
return customResponse;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
// 示例3: 从headers中提取分页信息
|
|
61
|
+
function getPagedResponseExample(httpClient) {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
var _a, _b;
|
|
64
|
+
const response = yield httpClient.get('https://api.example.com/items?page=1&size=10', {}, 'my-client', { returnType: 'full' });
|
|
65
|
+
// 提取分页信息
|
|
66
|
+
const paginationInfo = {
|
|
67
|
+
data: response.data,
|
|
68
|
+
currentPage: parseInt(response.headers['x-page'] || '1'),
|
|
69
|
+
pageSize: parseInt(response.headers['x-per-page'] || '10'),
|
|
70
|
+
totalPages: parseInt(response.headers['x-total-pages'] || '1'),
|
|
71
|
+
totalItems: parseInt(response.headers['x-total-items'] || '0'),
|
|
72
|
+
hasNextPage: ((_a = response.headers['link']) === null || _a === void 0 ? void 0 : _a.includes('rel="next"')) || false,
|
|
73
|
+
hasPrevPage: ((_b = response.headers['link']) === null || _b === void 0 ? void 0 : _b.includes('rel="prev"')) || false,
|
|
74
|
+
};
|
|
75
|
+
return paginationInfo;
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
// 示例4: 检查重定向URL
|
|
79
|
+
function getRedirectUrlExample(httpClient) {
|
|
80
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
+
const response = yield httpClient.get('https://api.example.com/redirect-me', { maxRedirects: 0 }, // 禁止自动重定向以便捕获Location header
|
|
82
|
+
'my-client', { returnType: 'full' });
|
|
83
|
+
// 对于3xx重定向状态,获取重定向URL
|
|
84
|
+
if (response.status >= 300 && response.status < 400) {
|
|
85
|
+
const redirectUrl = response.headers['location'];
|
|
86
|
+
console.log('Redirect URL:', redirectUrl);
|
|
87
|
+
return { redirected: true, url: redirectUrl };
|
|
88
|
+
}
|
|
89
|
+
return { redirected: false, data: response.data };
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
// 示例5: 向后兼容 - 默认行为(只返回data)
|
|
93
|
+
function getDefaultBehaviorExample(httpClient) {
|
|
94
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
95
|
+
// 不传递returnOptions参数,保持原有行为
|
|
96
|
+
const data = yield httpClient.get('https://api.example.com/simple-data');
|
|
97
|
+
// 直接得到data,无需.response.data
|
|
98
|
+
console.log('Simple data:', data);
|
|
99
|
+
return data;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// 示例6: 条件性返回不同格式
|
|
103
|
+
function conditionalReturnExample(httpClient, needHeaders) {
|
|
104
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
105
|
+
const returnOptions = needHeaders
|
|
106
|
+
? { returnType: 'full' }
|
|
107
|
+
: { returnType: 'data' }; // 默认
|
|
108
|
+
const result = yield httpClient.post('https://api.example.com/process', { action: 'calculate' }, {}, 'my-client', returnOptions);
|
|
109
|
+
if (needHeaders) {
|
|
110
|
+
// 处理完整响应
|
|
111
|
+
const fullResponse = result;
|
|
112
|
+
console.log('Processing time:', fullResponse.headers['x-processing-time']);
|
|
113
|
+
return fullResponse.data;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
// 直接使用data
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
@@ -17,3 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./basic-usage.example"), exports);
|
|
18
18
|
__exportStar(require("./advanced-usage.example"), exports);
|
|
19
19
|
__exportStar(require("./multi-api-configuration.example"), exports);
|
|
20
|
+
__exportStar(require("./axios-config-extended.example"), exports);
|
|
21
|
+
__exportStar(require("./ssl-certificate.example"), exports);
|