@herrromich/az-functions 1.0.0
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/LICENSE +21 -0
- package/README.md +830 -0
- package/coverage/cobertura-coverage.xml +3482 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/context/forked-invocation-context.ts.html +127 -0
- package/coverage/lcov-report/context/index.html +191 -0
- package/coverage/lcov-report/context/index.ts.html +97 -0
- package/coverage/lcov-report/context/platform-context.manager.ts.html +193 -0
- package/coverage/lcov-report/context/platform-context.model.ts.html +262 -0
- package/coverage/lcov-report/context/platform-context.provider.ts.html +196 -0
- package/coverage/lcov-report/context/platform.execution.context.ts.html +217 -0
- package/coverage/lcov-report/context/wrapped-invocation-context.ts.html +163 -0
- package/coverage/lcov-report/event-hub-handler/azure-event-hub-trigger.model.ts.html +187 -0
- package/coverage/lcov-report/event-hub-handler/azure-event-hub-trigger.service.ts.html +760 -0
- package/coverage/lcov-report/event-hub-handler/decorators/decorators.model.ts.html +292 -0
- package/coverage/lcov-report/event-hub-handler/decorators/decorators.ts.html +778 -0
- package/coverage/lcov-report/event-hub-handler/decorators/index.html +146 -0
- package/coverage/lcov-report/event-hub-handler/decorators/index.ts.html +91 -0
- package/coverage/lcov-report/event-hub-handler/event-hub-handle-method-args-metadata.service.ts.html +130 -0
- package/coverage/lcov-report/event-hub-handler/event-hub-handler-metadata.reader.ts.html +199 -0
- package/coverage/lcov-report/event-hub-handler/event-hub-handler-registration.service.ts.html +220 -0
- package/coverage/lcov-report/event-hub-handler/event-hub-handler.factory.ts.html +283 -0
- package/coverage/lcov-report/event-hub-handler/event-hub-handler.model.ts.html +421 -0
- package/coverage/lcov-report/event-hub-handler/event-hub-handler.provider.ts.html +187 -0
- package/coverage/lcov-report/event-hub-handler/event-hub-trigger-support.factory.ts.html +787 -0
- package/coverage/lcov-report/event-hub-handler/event-hub-trigger-support.service.ts.html +829 -0
- package/coverage/lcov-report/event-hub-handler/event-hub-trigger.model.ts.html +193 -0
- package/coverage/lcov-report/event-hub-handler/event-hub-trigger.service.ts.html +859 -0
- package/coverage/lcov-report/event-hub-handler/event-hub-triggers-registration.service.ts.html +307 -0
- package/coverage/lcov-report/event-hub-handler/index.html +221 -0
- package/coverage/lcov-report/event-hub-handler/index.ts.html +142 -0
- package/coverage/lcov-report/eventhub-handler/decorators/decorators.model.ts.html +277 -0
- package/coverage/lcov-report/eventhub-handler/decorators/decorators.ts.html +679 -0
- package/coverage/lcov-report/eventhub-handler/decorators/index.html +131 -0
- package/coverage/lcov-report/eventhub-handler/eventhub-handler-metadata.reader.ts.html +196 -0
- package/coverage/lcov-report/eventhub-handler/eventhub-handler-registration.service.ts.html +220 -0
- package/coverage/lcov-report/eventhub-handler/eventhub-handler.factory.ts.html +193 -0
- package/coverage/lcov-report/eventhub-handler/eventhub-handler.model.ts.html +406 -0
- package/coverage/lcov-report/eventhub-handler/eventhub-trigger.model.ts.html +187 -0
- package/coverage/lcov-report/eventhub-handler/eventhub-trigger.service.ts.html +760 -0
- package/coverage/lcov-report/eventhub-handler/eventhub-triggers-registration.service.ts.html +304 -0
- package/coverage/lcov-report/eventhub-handler/index.html +206 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/forked-invocation-context.ts.html +127 -0
- package/coverage/lcov-report/function-handler-metadata.reader.ts.html +172 -0
- package/coverage/lcov-report/http-controller/authentication.provider.ts.html +481 -0
- package/coverage/lcov-report/http-controller/authenticator.provider.ts.html +460 -0
- package/coverage/lcov-report/http-controller/azure-http-trigger.service.ts.html +1045 -0
- package/coverage/lcov-report/http-controller/decorators/decorators.model.ts.html +388 -0
- package/coverage/lcov-report/http-controller/decorators/decorators.ts.html +1627 -0
- package/coverage/lcov-report/http-controller/decorators/index.html +146 -0
- package/coverage/lcov-report/http-controller/decorators/index.ts.html +94 -0
- package/coverage/lcov-report/http-controller/http-controller-metadata.reader.ts.html +271 -0
- package/coverage/lcov-report/http-controller/http-controller-metadata.service.ts.html +130 -0
- package/coverage/lcov-report/http-controller/http-controller-platform.model.ts.html +187 -0
- package/coverage/lcov-report/http-controller/http-controller-registration.service.ts.html +241 -0
- package/coverage/lcov-report/http-controller/http-controller.model.ts.html +745 -0
- package/coverage/lcov-report/http-controller/http-handler-support.factory.ts.html +499 -0
- package/coverage/lcov-report/http-controller/http-handler.factory.ts.html +415 -0
- package/coverage/lcov-report/http-controller/http-operation-registration.service.ts.html +328 -0
- package/coverage/lcov-report/http-controller/http-operations-registration.service.ts.html +328 -0
- package/coverage/lcov-report/http-controller/http-request-arg-provider.factory.ts.html +580 -0
- package/coverage/lcov-report/http-controller/http-request-handler.provider.ts.html +388 -0
- package/coverage/lcov-report/http-controller/http-response-processor.factory.ts.html +316 -0
- package/coverage/lcov-report/http-controller/index.html +311 -0
- package/coverage/lcov-report/http-controller/index.ts.html +226 -0
- package/coverage/lcov-report/http-controller/open-api-definition.service.ts.html +568 -0
- package/coverage/lcov-report/http-controller/open-api-metadata.service.ts.html +373 -0
- package/coverage/lcov-report/http-controller/open-api-print.service.ts.html +232 -0
- package/coverage/lcov-report/http-controller/open-api-registration.service.ts.html +220 -0
- package/coverage/lcov-report/http-controller/rest-open-api.regstry.ts.html +262 -0
- package/coverage/lcov-report/http-controller/security/authentication-service.factory.ts.html +280 -0
- package/coverage/lcov-report/http-controller/security/authentication-service.ts.html +115 -0
- package/coverage/lcov-report/http-controller/security/authenticator.provider.ts.html +799 -0
- package/coverage/lcov-report/http-controller/security/bearer-security-authentication.service.ts.html +133 -0
- package/coverage/lcov-report/http-controller/security/index.html +206 -0
- package/coverage/lcov-report/http-controller/security/index.ts.html +94 -0
- package/coverage/lcov-report/http-controller/security/model.ts.html +133 -0
- package/coverage/lcov-report/http-controller/security/operation-authentication.resolver.ts.html +418 -0
- package/coverage/lcov-report/http-controller/security/principal-merge.service.ts.html +163 -0
- package/coverage/lcov-report/http-controller/security/strict-principal-merge.servce.ts.html +154 -0
- package/coverage/lcov-report/http-controller/swagger-handling.service.ts.html +463 -0
- package/coverage/lcov-report/index.html +281 -0
- package/coverage/lcov-report/init.ts.html +97 -0
- package/coverage/lcov-report/ioc-container.utils.ts.html +100 -0
- package/coverage/lcov-report/logger/azure-log-transport.service.ts.html +433 -0
- package/coverage/lcov-report/logger/bindings.ts.html +253 -0
- package/coverage/lcov-report/logger/index.html +221 -0
- package/coverage/lcov-report/logger/index.ts.html +163 -0
- package/coverage/lcov-report/logger/log-level.service.ts.html +127 -0
- package/coverage/lcov-report/logger/log-transport.service.ts.html +571 -0
- package/coverage/lcov-report/logger/logger-factory.provider.ts.html +142 -0
- package/coverage/lcov-report/logger/logger.factory.ts.html +172 -0
- package/coverage/lcov-report/logger/logger.model.ts.html +868 -0
- package/coverage/lcov-report/logger/logger.utils.ts.html +877 -0
- package/coverage/lcov-report/logger/model.ts.html +172 -0
- package/coverage/lcov-report/logger/otel.logger.ts.html +358 -0
- package/coverage/lcov-report/logger/platform.logger.ts.html +229 -0
- package/coverage/lcov-report/logger/trie-search.service.ts.html +616 -0
- package/coverage/lcov-report/platform/azure-platform.ts.html +256 -0
- package/coverage/lcov-report/platform/index.html +176 -0
- package/coverage/lcov-report/platform/index.ts.html +139 -0
- package/coverage/lcov-report/platform/platform-component-metadata.service.ts.html +115 -0
- package/coverage/lcov-report/platform/register-function.factory.ts.html +145 -0
- package/coverage/lcov-report/platform/register-trigger-handler.factory.ts.html +214 -0
- package/coverage/lcov-report/platform/security-context.ts.html +127 -0
- package/coverage/lcov-report/platform/startup.service.ts.html +106 -0
- package/coverage/lcov-report/platform/system-logger-name.provider.ts.html +145 -0
- package/coverage/lcov-report/platform/system.container.ts.html +169 -0
- package/coverage/lcov-report/platform-context.model.ts.html +124 -0
- package/coverage/lcov-report/platform.logger.ts.html +316 -0
- package/coverage/lcov-report/platform.model.ts.html +292 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/security/index.html +146 -0
- package/coverage/lcov-report/security/index.ts.html +91 -0
- package/coverage/lcov-report/security/security-context.ts.html +130 -0
- package/coverage/lcov-report/security/security.model.ts.html +169 -0
- package/coverage/lcov-report/shared/all-settled.util.ts.html +118 -0
- package/coverage/lcov-report/shared/decorators/decorators.model.ts.html +136 -0
- package/coverage/lcov-report/shared/decorators/decorators.ts.html +346 -0
- package/coverage/lcov-report/shared/decorators/index.html +146 -0
- package/coverage/lcov-report/shared/decorators/index.ts.html +91 -0
- package/coverage/lcov-report/shared/function-handler-metadata.reader.ts.html +172 -0
- package/coverage/lcov-report/shared/index.html +176 -0
- package/coverage/lcov-report/shared/index.ts.html +133 -0
- package/coverage/lcov-report/shared/ioc-container.utils.ts.html +115 -0
- package/coverage/lcov-report/shared/platform-context-local-storage.ts.html +133 -0
- package/coverage/lcov-report/shared/platform-context.manager.ts.html +253 -0
- package/coverage/lcov-report/shared/platform.context.provider.ts.html +136 -0
- package/coverage/lcov-report/shared/platform.model.ts.html +298 -0
- package/coverage/lcov-report/shared/security.model.ts.html +142 -0
- package/coverage/lcov-report/shared/trie-search.service.ts.html +337 -0
- package/coverage/lcov-report/shared/trigger-handler-metadata.reader.ts.html +166 -0
- package/coverage/lcov-report/shared/zod-parser-wrapper.service.ts.html +217 -0
- package/coverage/lcov-report/shared/zod-parser-wrapper.ts.html +232 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov-report/src/context/index.html +191 -0
- package/coverage/lcov-report/src/context/index.ts.html +97 -0
- package/coverage/lcov-report/src/context/platform-context.manager.ts.html +193 -0
- package/coverage/lcov-report/src/context/platform-context.model.ts.html +262 -0
- package/coverage/lcov-report/src/context/platform-context.provider.ts.html +196 -0
- package/coverage/lcov-report/src/context/platform.execution.context.ts.html +217 -0
- package/coverage/lcov-report/src/context/wrapped-invocation-context.ts.html +163 -0
- package/coverage/lcov-report/src/event-hub-handler/azure-event-hub-trigger.model.ts.html +187 -0
- package/coverage/lcov-report/src/event-hub-handler/azure-event-hub-trigger.service.ts.html +769 -0
- package/coverage/lcov-report/src/event-hub-handler/decorators/decorators.model.ts.html +313 -0
- package/coverage/lcov-report/src/event-hub-handler/decorators/decorators.ts.html +778 -0
- package/coverage/lcov-report/src/event-hub-handler/decorators/index.html +146 -0
- package/coverage/lcov-report/src/event-hub-handler/decorators/index.ts.html +91 -0
- package/coverage/lcov-report/src/event-hub-handler/event-hub-handle-method-args-metadata.service.ts.html +130 -0
- package/coverage/lcov-report/src/event-hub-handler/event-hub-handler-metadata.reader.ts.html +199 -0
- package/coverage/lcov-report/src/event-hub-handler/event-hub-handler-registration.service.ts.html +220 -0
- package/coverage/lcov-report/src/event-hub-handler/event-hub-handler.factory.ts.html +283 -0
- package/coverage/lcov-report/src/event-hub-handler/event-hub-handler.model.ts.html +421 -0
- package/coverage/lcov-report/src/event-hub-handler/event-hub-handler.provider.ts.html +187 -0
- package/coverage/lcov-report/src/event-hub-handler/event-hub-trigger-support.factory.ts.html +787 -0
- package/coverage/lcov-report/src/event-hub-handler/event-hub-trigger-support.service.ts.html +832 -0
- package/coverage/lcov-report/src/event-hub-handler/event-hub-trigger.model.ts.html +193 -0
- package/coverage/lcov-report/src/event-hub-handler/event-hub-trigger.service.ts.html +859 -0
- package/coverage/lcov-report/src/event-hub-handler/event-hub-triggers-registration.service.ts.html +307 -0
- package/coverage/lcov-report/src/event-hub-handler/index.html +221 -0
- package/coverage/lcov-report/src/event-hub-handler/index.ts.html +142 -0
- package/coverage/lcov-report/src/framework.container.ts.html +157 -0
- package/coverage/lcov-report/src/http-controller/authentication.provider.ts.html +481 -0
- package/coverage/lcov-report/src/http-controller/authenticator.provider.ts.html +460 -0
- package/coverage/lcov-report/src/http-controller/azure-http-trigger.service.ts.html +865 -0
- package/coverage/lcov-report/src/http-controller/decorators/decorators.model.ts.html +553 -0
- package/coverage/lcov-report/src/http-controller/decorators/decorators.ts.html +1633 -0
- package/coverage/lcov-report/src/http-controller/decorators/index.html +146 -0
- package/coverage/lcov-report/src/http-controller/decorators/index.ts.html +94 -0
- package/coverage/lcov-report/src/http-controller/http-controller-metadata.reader.ts.html +271 -0
- package/coverage/lcov-report/src/http-controller/http-controller-metadata.service.ts.html +121 -0
- package/coverage/lcov-report/src/http-controller/http-controller-platform.model.ts.html +187 -0
- package/coverage/lcov-report/src/http-controller/http-controller-registration.service.ts.html +241 -0
- package/coverage/lcov-report/src/http-controller/http-controller.model.ts.html +784 -0
- package/coverage/lcov-report/src/http-controller/http-handler-support.factory.ts.html +481 -0
- package/coverage/lcov-report/src/http-controller/http-handler.factory.ts.html +406 -0
- package/coverage/lcov-report/src/http-controller/http-operation-registration.service.ts.html +328 -0
- package/coverage/lcov-report/src/http-controller/http-operations-registration.service.ts.html +328 -0
- package/coverage/lcov-report/src/http-controller/http-request-arg-provider.factory.ts.html +580 -0
- package/coverage/lcov-report/src/http-controller/http-request-handler.provider.ts.html +388 -0
- package/coverage/lcov-report/src/http-controller/http-response-processor.factory.ts.html +316 -0
- package/coverage/lcov-report/src/http-controller/index.html +311 -0
- package/coverage/lcov-report/src/http-controller/index.ts.html +226 -0
- package/coverage/lcov-report/src/http-controller/open-api-definition.service.ts.html +550 -0
- package/coverage/lcov-report/src/http-controller/open-api-metadata.service.ts.html +373 -0
- package/coverage/lcov-report/src/http-controller/open-api-print.service.ts.html +232 -0
- package/coverage/lcov-report/src/http-controller/open-api-registration.service.ts.html +220 -0
- package/coverage/lcov-report/src/http-controller/rest-open-api.regstry.ts.html +262 -0
- package/coverage/lcov-report/src/http-controller/security/authentication-service.factory.ts.html +280 -0
- package/coverage/lcov-report/src/http-controller/security/authentication-service.ts.html +139 -0
- package/coverage/lcov-report/src/http-controller/security/authenticator.provider.ts.html +799 -0
- package/coverage/lcov-report/src/http-controller/security/bearer-security-authentication.service.ts.html +133 -0
- package/coverage/lcov-report/src/http-controller/security/index.html +206 -0
- package/coverage/lcov-report/src/http-controller/security/index.ts.html +94 -0
- package/coverage/lcov-report/src/http-controller/security/model.ts.html +133 -0
- package/coverage/lcov-report/src/http-controller/security/operation-authentication.resolver.ts.html +418 -0
- package/coverage/lcov-report/src/http-controller/security/principal-merge.service.ts.html +163 -0
- package/coverage/lcov-report/src/http-controller/security/strict-principal-merge.servce.ts.html +154 -0
- package/coverage/lcov-report/src/http-controller/swagger-handling.service.ts.html +463 -0
- package/coverage/lcov-report/src/index.html +161 -0
- package/coverage/lcov-report/src/init.ts.html +97 -0
- package/coverage/lcov-report/src/logger/azure-log-transport.service.ts.html +433 -0
- package/coverage/lcov-report/src/logger/bindings.ts.html +253 -0
- package/coverage/lcov-report/src/logger/index.html +221 -0
- package/coverage/lcov-report/src/logger/index.ts.html +163 -0
- package/coverage/lcov-report/src/logger/log-level.service.ts.html +127 -0
- package/coverage/lcov-report/src/logger/log-transport.service.ts.html +571 -0
- package/coverage/lcov-report/src/logger/logger-factory.provider.ts.html +142 -0
- package/coverage/lcov-report/src/logger/logger.factory.ts.html +172 -0
- package/coverage/lcov-report/src/logger/logger.model.ts.html +868 -0
- package/coverage/lcov-report/src/logger/logger.utils.ts.html +877 -0
- package/coverage/lcov-report/src/logger/otel.logger.ts.html +358 -0
- package/coverage/lcov-report/src/logger/platform.logger.ts.html +229 -0
- package/coverage/lcov-report/src/logger/trie-search.service.ts.html +616 -0
- package/coverage/lcov-report/src/middleware.ts.html +232 -0
- package/coverage/lcov-report/src/platform/azure-platform.ts.html +256 -0
- package/coverage/lcov-report/src/platform/index.html +176 -0
- package/coverage/lcov-report/src/platform/index.ts.html +139 -0
- package/coverage/lcov-report/src/platform/platform-component-metadata.service.ts.html +115 -0
- package/coverage/lcov-report/src/platform/register-function.factory.ts.html +145 -0
- package/coverage/lcov-report/src/platform/register-trigger-handler.factory.ts.html +214 -0
- package/coverage/lcov-report/src/platform/security-context.ts.html +127 -0
- package/coverage/lcov-report/src/platform/startup.service.ts.html +202 -0
- package/coverage/lcov-report/src/platform/system-logger-name.provider.ts.html +145 -0
- package/coverage/lcov-report/src/platform/system.container.ts.html +172 -0
- package/coverage/lcov-report/src/platform.container.ts.html +148 -0
- package/coverage/lcov-report/src/security/index.html +146 -0
- package/coverage/lcov-report/src/security/index.ts.html +91 -0
- package/coverage/lcov-report/src/security/security-context.ts.html +175 -0
- package/coverage/lcov-report/src/security/security.model.ts.html +223 -0
- package/coverage/lcov-report/src/shared/decorators/decorators.model.ts.html +136 -0
- package/coverage/lcov-report/src/shared/decorators/decorators.ts.html +346 -0
- package/coverage/lcov-report/src/shared/decorators/index.html +146 -0
- package/coverage/lcov-report/src/shared/decorators/index.ts.html +91 -0
- package/coverage/lcov-report/src/shared/index.html +176 -0
- package/coverage/lcov-report/src/shared/index.ts.html +133 -0
- package/coverage/lcov-report/src/shared/ioc-container.utils.ts.html +115 -0
- package/coverage/lcov-report/src/shared/platform-context-local-storage.ts.html +133 -0
- package/coverage/lcov-report/src/shared/platform.model.ts.html +298 -0
- package/coverage/lcov-report/src/shared/security.model.ts.html +139 -0
- package/coverage/lcov-report/src/shared/trie-search.service.ts.html +337 -0
- package/coverage/lcov-report/src/shared/trigger-handler-metadata.reader.ts.html +166 -0
- package/coverage/lcov-report/src/shared/zod-parser-wrapper.ts.html +232 -0
- package/coverage/lcov-report/test/index.html +116 -0
- package/coverage/lcov-report/test/utils.ts.html +100 -0
- package/coverage/lcov-report/test-utils/index.html +116 -0
- package/coverage/lcov-report/test-utils/utils.ts.html +100 -0
- package/coverage/lcov-report/trie-search.service.ts.html +469 -0
- package/coverage/lcov-report/trigger-handler-metadata.reader.ts.html +187 -0
- package/coverage/lcov-report/wrapped-invocation-context.ts.html +163 -0
- package/coverage/lcov-report/zod-parser-wrapper.ts.html +232 -0
- package/coverage/lcov.info +3220 -0
- package/dist/assets/swagger-ui/LICENSE +202 -0
- package/dist/assets/swagger-ui/NOTICE +2 -0
- package/dist/assets/swagger-ui/README.md +40 -0
- package/dist/assets/swagger-ui/absolute-path.js +1 -0
- package/dist/assets/swagger-ui/favicon-16x16.png +0 -0
- package/dist/assets/swagger-ui/favicon-32x32.png +0 -0
- package/dist/assets/swagger-ui/index.css +16 -0
- package/dist/assets/swagger-ui/index.html +19 -0
- package/dist/assets/swagger-ui/index.js +1 -0
- package/dist/assets/swagger-ui/log.bundle-sizes.swagger-ui.txt +114 -0
- package/dist/assets/swagger-ui/log.es-bundle-core-sizes.swagger-ui.txt +14 -0
- package/dist/assets/swagger-ui/log.es-bundle-sizes.swagger-ui.txt +114 -0
- package/dist/assets/swagger-ui/oauth2-redirect.html +6 -0
- package/dist/assets/swagger-ui/oauth2-redirect.js +1 -0
- package/dist/assets/swagger-ui/package.json +20 -0
- package/dist/assets/swagger-ui/swagger-initializer.js +1 -0
- package/dist/assets/swagger-ui/swagger-ui-bundle.js +2 -0
- package/dist/assets/swagger-ui/swagger-ui-bundle.js.LICENSE.txt +106 -0
- package/dist/assets/swagger-ui/swagger-ui-bundle.js.map +1 -0
- package/dist/assets/swagger-ui/swagger-ui-es-bundle-core.js +2 -0
- package/dist/assets/swagger-ui/swagger-ui-es-bundle-core.js.LICENSE.txt +35 -0
- package/dist/assets/swagger-ui/swagger-ui-es-bundle-core.js.map +1 -0
- package/dist/assets/swagger-ui/swagger-ui-es-bundle.js +2 -0
- package/dist/assets/swagger-ui/swagger-ui-es-bundle.js.LICENSE.txt +106 -0
- package/dist/assets/swagger-ui/swagger-ui-es-bundle.js.map +1 -0
- package/dist/assets/swagger-ui/swagger-ui-standalone-preset.js +2 -0
- package/dist/assets/swagger-ui/swagger-ui-standalone-preset.js.LICENSE.txt +22 -0
- package/dist/assets/swagger-ui/swagger-ui-standalone-preset.js.map +1 -0
- package/dist/assets/swagger-ui/swagger-ui.css +3 -0
- package/dist/assets/swagger-ui/swagger-ui.css.map +1 -0
- package/dist/assets/swagger-ui/swagger-ui.js +1 -0
- package/dist/assets/swagger-ui/swagger-ui.js.map +1 -0
- package/dist/index.cjs +3 -0
- package/dist/index.cjs.LICENSE.txt +24 -0
- package/dist/src/context/index.d.ts +4 -0
- package/dist/src/context/platform-context.manager.d.ts +23 -0
- package/dist/src/context/platform-context.model.d.ts +56 -0
- package/dist/src/context/platform-context.provider.d.ts +23 -0
- package/dist/src/context/platform.execution.context.d.ts +13 -0
- package/dist/src/context/wrapped-invocation-context.d.ts +5 -0
- package/dist/src/event-hub-handler/decorators/decorators.d.ts +161 -0
- package/dist/src/event-hub-handler/decorators/decorators.model.d.ts +62 -0
- package/dist/src/event-hub-handler/decorators/index.d.ts +2 -0
- package/dist/src/event-hub-handler/event-hub-handler-metadata.reader.d.ts +8 -0
- package/dist/src/event-hub-handler/event-hub-handler-registration.service.d.ts +12 -0
- package/dist/src/event-hub-handler/event-hub-handler.factory.d.ts +13 -0
- package/dist/src/event-hub-handler/event-hub-handler.model.d.ts +101 -0
- package/dist/src/event-hub-handler/event-hub-trigger-support.factory.d.ts +10 -0
- package/dist/src/event-hub-handler/event-hub-trigger.model.d.ts +39 -0
- package/dist/src/event-hub-handler/event-hub-triggers-registration.service.d.ts +18 -0
- package/dist/src/event-hub-handler/index.d.ts +4 -0
- package/dist/src/framework.container.d.ts +6 -0
- package/dist/src/http-controller/decorators/decorators.d.ts +410 -0
- package/dist/src/http-controller/decorators/decorators.model.d.ts +123 -0
- package/dist/src/http-controller/decorators/index.d.ts +3 -0
- package/dist/src/http-controller/http-controller-metadata.reader.d.ts +8 -0
- package/dist/src/http-controller/http-controller-registration.service.d.ts +12 -0
- package/dist/src/http-controller/http-controller.model.d.ts +131 -0
- package/dist/src/http-controller/http-handler-support.factory.d.ts +26 -0
- package/dist/src/http-controller/http-handler.factory.d.ts +16 -0
- package/dist/src/http-controller/http-operations-registration.service.d.ts +22 -0
- package/dist/src/http-controller/http-request-arg-provider.factory.d.ts +12 -0
- package/dist/src/http-controller/http-response-processor.factory.d.ts +10 -0
- package/dist/src/http-controller/index.d.ts +11 -0
- package/dist/src/http-controller/open-api-definition.service.d.ts +29 -0
- package/dist/src/http-controller/open-api-metadata.service.d.ts +11 -0
- package/dist/src/http-controller/open-api-print.service.d.ts +8 -0
- package/dist/src/http-controller/open-api-registration.service.d.ts +17 -0
- package/dist/src/http-controller/security/authentication-service.d.ts +15 -0
- package/dist/src/http-controller/security/authenticator.provider.d.ts +31 -0
- package/dist/src/http-controller/security/bearer-security-authentication.service.d.ts +9 -0
- package/dist/src/http-controller/security/bearer-token.service.d.ts +5 -0
- package/dist/src/http-controller/security/index.d.ts +3 -0
- package/dist/src/http-controller/security/operation-authentication.resolver.d.ts +18 -0
- package/dist/src/http-controller/security/principal-merge.service.d.ts +11 -0
- package/dist/src/http-controller/security/strict-principal-merge.servce.d.ts +5 -0
- package/dist/src/http-controller/swagger-handling.service.d.ts +11 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/init.d.ts +1 -0
- package/dist/src/logger/bindings.d.ts +7 -0
- package/dist/src/logger/index.d.ts +6 -0
- package/dist/src/logger/log-level.service.d.ts +7 -0
- package/dist/src/logger/log-transport.service.d.ts +19 -0
- package/dist/src/logger/logger.model.d.ts +241 -0
- package/dist/src/logger/logger.utils.d.ts +17 -0
- package/dist/src/logger/otel.logger.d.ts +9 -0
- package/dist/src/logger/trie-search.service.d.ts +65 -0
- package/dist/src/middleware.d.ts +10 -0
- package/dist/src/platform/azure-platform.d.ts +15 -0
- package/dist/src/platform/index.d.ts +5 -0
- package/dist/src/platform/model.d.ts +18 -0
- package/dist/src/platform/register-trigger-handler.factory.d.ts +5 -0
- package/dist/src/platform/startup.service.d.ts +36 -0
- package/dist/src/platform/system-logger-name.provider.d.ts +1 -0
- package/dist/src/platform.container.d.ts +3 -0
- package/dist/src/security/index.d.ts +2 -0
- package/dist/src/security/security-context.d.ts +22 -0
- package/dist/src/security/security.model.d.ts +37 -0
- package/dist/src/shared/decorators/decorators.d.ts +37 -0
- package/dist/src/shared/decorators/decorators.model.d.ts +13 -0
- package/dist/src/shared/decorators/index.d.ts +2 -0
- package/dist/src/shared/index.d.ts +8 -0
- package/dist/src/shared/ioc-container.utils.d.ts +7 -0
- package/dist/src/shared/platform.model.d.ts +44 -0
- package/dist/src/shared/trigger-handler-metadata.reader.d.ts +6 -0
- package/dist/src/shared/zod-parser-wrapper.d.ts +5 -0
- package/docs/logging.md +805 -0
- package/package.json +87 -0
- package/src/context/index.ts +4 -0
- package/src/context/platform-context.manager.ts +36 -0
- package/src/context/platform-context.model.ts +59 -0
- package/src/context/platform-context.provider.ts +37 -0
- package/src/context/platform.execution.context.ts +44 -0
- package/src/context/wrapped-invocation-context.ts +26 -0
- package/src/event-hub-handler/decorators/decorators.model.ts +76 -0
- package/src/event-hub-handler/decorators/decorators.ts +231 -0
- package/src/event-hub-handler/decorators/index.ts +2 -0
- package/src/event-hub-handler/event-hub-handler-metadata.reader.ts +38 -0
- package/src/event-hub-handler/event-hub-handler-registration.service.ts +45 -0
- package/src/event-hub-handler/event-hub-handler.factory.ts +66 -0
- package/src/event-hub-handler/event-hub-handler.model.ts +112 -0
- package/src/event-hub-handler/event-hub-trigger-support.factory.ts +234 -0
- package/src/event-hub-handler/event-hub-trigger.model.ts +36 -0
- package/src/event-hub-handler/event-hub-triggers-registration.service.ts +74 -0
- package/src/event-hub-handler/index.ts +19 -0
- package/src/framework.container.ts +24 -0
- package/src/http-controller/decorators/decorators.model.ts +156 -0
- package/src/http-controller/decorators/decorators.ts +516 -0
- package/src/http-controller/decorators/index.ts +3 -0
- package/src/http-controller/http-controller-metadata.reader.ts +62 -0
- package/src/http-controller/http-controller-registration.service.ts +52 -0
- package/src/http-controller/http-controller.model.ts +233 -0
- package/src/http-controller/http-handler-support.factory.ts +132 -0
- package/src/http-controller/http-handler.factory.ts +107 -0
- package/src/http-controller/http-operations-registration.service.ts +81 -0
- package/src/http-controller/http-request-arg-provider.factory.ts +165 -0
- package/src/http-controller/http-response-processor.factory.ts +77 -0
- package/src/http-controller/index.ts +47 -0
- package/src/http-controller/open-api-definition.service.ts +155 -0
- package/src/http-controller/open-api-metadata.service.ts +96 -0
- package/src/http-controller/open-api-print.service.ts +49 -0
- package/src/http-controller/open-api-registration.service.ts +45 -0
- package/src/http-controller/security/authentication-service.ts +18 -0
- package/src/http-controller/security/authenticator.provider.ts +238 -0
- package/src/http-controller/security/bearer-security-authentication.service.ts +16 -0
- package/src/http-controller/security/bearer-token.service.ts +6 -0
- package/src/http-controller/security/index.ts +3 -0
- package/src/http-controller/security/operation-authentication.resolver.ts +111 -0
- package/src/http-controller/security/principal-merge.service.ts +26 -0
- package/src/http-controller/security/strict-principal-merge.servce.ts +23 -0
- package/src/http-controller/swagger-handling.service.ts +126 -0
- package/src/index.ts +80 -0
- package/src/init.ts +4 -0
- package/src/logger/bindings.ts +56 -0
- package/src/logger/index.ts +26 -0
- package/src/logger/log-level.service.ts +14 -0
- package/src/logger/log-transport.service.ts +162 -0
- package/src/logger/logger.model.ts +261 -0
- package/src/logger/logger.utils.ts +264 -0
- package/src/logger/otel.logger.ts +91 -0
- package/src/logger/trie-search.service.ts +177 -0
- package/src/middleware.ts +49 -0
- package/src/platform/azure-platform.ts +57 -0
- package/src/platform/index.ts +18 -0
- package/src/platform/model.ts +19 -0
- package/src/platform/register-trigger-handler.factory.ts +43 -0
- package/src/platform/startup.service.ts +39 -0
- package/src/platform/system-logger-name.provider.ts +20 -0
- package/src/platform.container.ts +21 -0
- package/src/security/index.ts +2 -0
- package/src/security/security-context.ts +30 -0
- package/src/security/security.model.ts +46 -0
- package/src/shared/decorators/decorators.model.ts +17 -0
- package/src/shared/decorators/decorators.ts +87 -0
- package/src/shared/decorators/index.ts +2 -0
- package/src/shared/index.ts +16 -0
- package/src/shared/ioc-container.utils.ts +10 -0
- package/src/shared/platform.model.ts +71 -0
- package/src/shared/trigger-handler-metadata.reader.ts +27 -0
- package/src/shared/zod-parser-wrapper.ts +49 -0
- package/src/test-utilities/index.ts +1 -0
- package/src/test-utilities/utils.ts +5 -0
- package/tsconfig.test.json +8 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { HttpRequest, HttpResponse } from '@azure/functions';
|
|
2
|
+
import { PlatformContextManager } from 'context';
|
|
3
|
+
import { AzFunctionsError } from 'shared';
|
|
4
|
+
import { ZodType } from 'zod';
|
|
5
|
+
import { CONTEXT_LOGGER_METADATA, ContextLoggerMetadata, LogLevel } from './logger.model';
|
|
6
|
+
|
|
7
|
+
export type AnyValueScalar = string | number | boolean;
|
|
8
|
+
export type AnyValueArray = AnyValue[];
|
|
9
|
+
export interface AnyValueMap {
|
|
10
|
+
[attributeKey: string]: AnyValue;
|
|
11
|
+
}
|
|
12
|
+
export type AnyValue = AnyValueScalar | Uint8Array | AnyValueArray | AnyValueMap | null | undefined;
|
|
13
|
+
|
|
14
|
+
const MAX_DEPTH = 5;
|
|
15
|
+
const MAX_TRACE_LENGTH = 10;
|
|
16
|
+
const MAX_ARRAY_LENGTH = 20;
|
|
17
|
+
const MAX_KEYS_COUNT = 20;
|
|
18
|
+
const MAX_STRING_LENGTH = 250;
|
|
19
|
+
|
|
20
|
+
export interface SanitizerOptions {
|
|
21
|
+
maxDepth?: number;
|
|
22
|
+
maxTraceLength?: number;
|
|
23
|
+
maxArrayLength?: number;
|
|
24
|
+
maxKeysCount?: number;
|
|
25
|
+
maxStringLength?: number;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function sanitizeHeaders(headers: Headers) {
|
|
29
|
+
return Array.from(headers.entries()).reduce<Record<string, string>>((acc, [key, val]) => {
|
|
30
|
+
if (!['authorization', 'cookie', 'x-ms'].some(prefix => key.toLowerCase().startsWith(prefix))) {
|
|
31
|
+
acc[key] = val;
|
|
32
|
+
} else {
|
|
33
|
+
acc[key] = '[REDACTED]';
|
|
34
|
+
}
|
|
35
|
+
return acc;
|
|
36
|
+
}, {});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
|
+
function getZodCheckDef(value: any): object | undefined {
|
|
41
|
+
const def = value?._zod?.def;
|
|
42
|
+
if (typeof def === 'object' && def !== null && 'check' in def && typeof def.check === 'string') {
|
|
43
|
+
return def;
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
interface SanitizeContext {
|
|
49
|
+
limits: Required<SanitizerOptions>;
|
|
50
|
+
objectsStack: WeakSet<object>;
|
|
51
|
+
sanitize: (value: unknown, depth: number) => AnyValue;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function truncateList(items: AnyValue[], maxArrayLength: number): AnyValue[] {
|
|
55
|
+
return items.length > maxArrayLength
|
|
56
|
+
? [...items.slice(0, maxArrayLength), `... more ${items.length - maxArrayLength} items`]
|
|
57
|
+
: items;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function truncateEntries(entries: (readonly [string, AnyValue])[], maxKeysCount: number): AnyValueMap {
|
|
61
|
+
if (entries.length > maxKeysCount) {
|
|
62
|
+
return {
|
|
63
|
+
...Object.fromEntries(entries.slice(0, maxKeysCount)),
|
|
64
|
+
__meta__: {
|
|
65
|
+
truncated: true,
|
|
66
|
+
totalKeys: entries.length,
|
|
67
|
+
omittedKeys: entries.length - maxKeysCount,
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return Object.fromEntries(entries);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function sanitizeError(error: Error, depth: number, ctx: SanitizeContext): AnyValue {
|
|
75
|
+
if (depth > ctx.limits.maxDepth) {
|
|
76
|
+
return `[Error<${error.name}>]`;
|
|
77
|
+
}
|
|
78
|
+
const stackLines = error.stack?.split('\n');
|
|
79
|
+
const { maxTraceLength } = ctx.limits;
|
|
80
|
+
return {
|
|
81
|
+
name: error.name,
|
|
82
|
+
message: error.message,
|
|
83
|
+
...(stackLines
|
|
84
|
+
? {
|
|
85
|
+
stack:
|
|
86
|
+
stackLines.length > maxTraceLength
|
|
87
|
+
? [...stackLines.slice(0, maxTraceLength), `... more ${stackLines.length - maxTraceLength} lines`].join(
|
|
88
|
+
'\n',
|
|
89
|
+
)
|
|
90
|
+
: error.stack,
|
|
91
|
+
}
|
|
92
|
+
: {}),
|
|
93
|
+
...(error.cause ? { cause: ctx.sanitize(error.cause, depth + 1) } : {}),
|
|
94
|
+
...(error instanceof AzFunctionsError ? { details: ctx.sanitize(error.details, depth + 1) } : {}),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function sanitizeRequest(value: HttpRequest, depth: number, ctx: SanitizeContext): AnyValue {
|
|
99
|
+
if (depth > ctx.limits.maxDepth) {
|
|
100
|
+
return '[HttpRequest]';
|
|
101
|
+
}
|
|
102
|
+
const headers = sanitizeHeaders(value.headers);
|
|
103
|
+
const contentLength = headers['content-length'];
|
|
104
|
+
return {
|
|
105
|
+
method: value.method,
|
|
106
|
+
url: value.url,
|
|
107
|
+
headers,
|
|
108
|
+
query: Object.fromEntries(value.query.entries()),
|
|
109
|
+
params: value.params,
|
|
110
|
+
...(contentLength ? { body: `[RequestBody<${contentLength}Byte>]` } : {}),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function sanitizeResponse(value: HttpResponse, depth: number, ctx: SanitizeContext): AnyValue {
|
|
115
|
+
if (depth > ctx.limits.maxDepth) {
|
|
116
|
+
return '[HttpResponse]';
|
|
117
|
+
}
|
|
118
|
+
const headers = sanitizeHeaders(value.headers);
|
|
119
|
+
const contentLength = headers['content-length'];
|
|
120
|
+
return {
|
|
121
|
+
status: value.status,
|
|
122
|
+
headers,
|
|
123
|
+
...(contentLength ? { body: `[ResponseBody<${contentLength}>Bytes]` } : {}),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function sanitizeCollection(
|
|
128
|
+
value: unknown[] | Map<unknown, unknown> | Set<unknown>,
|
|
129
|
+
depth: number,
|
|
130
|
+
ctx: SanitizeContext,
|
|
131
|
+
): AnyValue {
|
|
132
|
+
const { maxDepth, maxArrayLength, maxKeysCount } = ctx.limits;
|
|
133
|
+
|
|
134
|
+
if (Array.isArray(value)) {
|
|
135
|
+
if (depth > maxDepth) return `[Array<${value.length}>]`;
|
|
136
|
+
if (value.length === 0) return '[empty Array]';
|
|
137
|
+
return truncateList(
|
|
138
|
+
value.map(v => ctx.sanitize(v, depth + 1)),
|
|
139
|
+
maxArrayLength,
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (value instanceof Map) {
|
|
144
|
+
if (depth > maxDepth) return `[Map<${value.size}>]`;
|
|
145
|
+
if (value.size === 0) return '[empty map]';
|
|
146
|
+
const entries = [...value.entries()].map(([k, v]) => [String(k), ctx.sanitize(v, depth + 1)] as const);
|
|
147
|
+
return truncateEntries(entries, maxKeysCount);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Set
|
|
151
|
+
if (depth > maxDepth) return `[Set<${value.size}>]`;
|
|
152
|
+
if (value.size === 0) return '[empty set]';
|
|
153
|
+
return truncateList(
|
|
154
|
+
[...value].map(v => ctx.sanitize(v, depth + 1)),
|
|
155
|
+
maxArrayLength,
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function sanitizeObject(value: object, depth: number, ctx: SanitizeContext): AnyValue {
|
|
160
|
+
const objectName = value.constructor.name;
|
|
161
|
+
if (depth > ctx.limits.maxDepth) return `[${objectName}]`;
|
|
162
|
+
if (Object.keys(value).length === 0) return `[empty ${objectName}]`;
|
|
163
|
+
if (ctx.objectsStack.has(value)) return '[Circular]';
|
|
164
|
+
|
|
165
|
+
ctx.objectsStack.add(value);
|
|
166
|
+
const entries = truncateEntries(
|
|
167
|
+
Object.entries(value).map(([k, v]) => [k, ctx.sanitize(v, depth + 1)] as const),
|
|
168
|
+
ctx.limits.maxKeysCount,
|
|
169
|
+
);
|
|
170
|
+
ctx.objectsStack.delete(value);
|
|
171
|
+
return entries;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function sanitizePrimitive(value: unknown, maxStringLength: number): AnyValue | typeof UNHANDLED {
|
|
175
|
+
if (value === undefined || value === null || typeof value === 'number' || typeof value === 'boolean') {
|
|
176
|
+
return value;
|
|
177
|
+
}
|
|
178
|
+
if (typeof value === 'string') {
|
|
179
|
+
return value.length > maxStringLength ? `${value.slice(0, maxStringLength)}...` : value;
|
|
180
|
+
}
|
|
181
|
+
if (typeof value === 'symbol') {
|
|
182
|
+
return `[Symbol(${value.description})]`;
|
|
183
|
+
}
|
|
184
|
+
if (typeof value === 'bigint') {
|
|
185
|
+
return value.toString();
|
|
186
|
+
}
|
|
187
|
+
if (value instanceof Date) {
|
|
188
|
+
return value.toISOString();
|
|
189
|
+
}
|
|
190
|
+
if (value instanceof RegExp) {
|
|
191
|
+
return value.toString();
|
|
192
|
+
}
|
|
193
|
+
return UNHANDLED;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const UNHANDLED = Symbol('unhandled');
|
|
197
|
+
|
|
198
|
+
export function sanitizeMetadata(metadata: unknown, options?: SanitizerOptions): AnyValueMap {
|
|
199
|
+
const ctx: SanitizeContext = {
|
|
200
|
+
limits: {
|
|
201
|
+
maxDepth: options?.maxDepth ?? MAX_DEPTH,
|
|
202
|
+
maxTraceLength: options?.maxTraceLength ?? MAX_TRACE_LENGTH,
|
|
203
|
+
maxArrayLength: options?.maxArrayLength ?? MAX_ARRAY_LENGTH,
|
|
204
|
+
maxKeysCount: options?.maxKeysCount ?? MAX_KEYS_COUNT,
|
|
205
|
+
maxStringLength: options?.maxStringLength ?? MAX_STRING_LENGTH,
|
|
206
|
+
},
|
|
207
|
+
objectsStack: new WeakSet(),
|
|
208
|
+
sanitize: (value, depth) => sanitize(value, depth),
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
function sanitize(value: unknown, depth: number): AnyValue {
|
|
212
|
+
const primitive = sanitizePrimitive(value, ctx.limits.maxStringLength);
|
|
213
|
+
if (primitive !== UNHANDLED) {
|
|
214
|
+
return primitive;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if (value instanceof ZodType) {
|
|
218
|
+
return sanitize(value.def, depth + 1);
|
|
219
|
+
}
|
|
220
|
+
const zodCheckDef = getZodCheckDef(value);
|
|
221
|
+
if (zodCheckDef !== undefined) {
|
|
222
|
+
return sanitize(zodCheckDef, depth + 1);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
if (Array.isArray(value) || value instanceof Map || value instanceof Set) {
|
|
226
|
+
return sanitizeCollection(value, depth, ctx);
|
|
227
|
+
}
|
|
228
|
+
if (value instanceof Error) {
|
|
229
|
+
return sanitizeError(value, depth, ctx);
|
|
230
|
+
}
|
|
231
|
+
if (value instanceof HttpRequest) {
|
|
232
|
+
return sanitizeRequest(value, depth, ctx);
|
|
233
|
+
}
|
|
234
|
+
if (value instanceof HttpResponse) {
|
|
235
|
+
return sanitizeResponse(value, depth, ctx);
|
|
236
|
+
}
|
|
237
|
+
if (typeof value === 'object' && value !== null) {
|
|
238
|
+
return sanitizeObject(value, depth, ctx);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
return undefined;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
return sanitize(metadata, 1) as AnyValueMap;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export function adjustContextLoggerMetadata(contextManager: PlatformContextManager, metadata: ContextLoggerMetadata) {
|
|
248
|
+
const currentContext = contextManager.active();
|
|
249
|
+
if (currentContext === undefined) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
const existingMetadata = currentContext.getValue(CONTEXT_LOGGER_METADATA) ?? {};
|
|
253
|
+
const newMetadata: ContextLoggerMetadata = { ...existingMetadata };
|
|
254
|
+
|
|
255
|
+
for (const level in metadata) {
|
|
256
|
+
const typedLevel = level as LogLevel;
|
|
257
|
+
newMetadata[typedLevel] = {
|
|
258
|
+
...newMetadata[typedLevel],
|
|
259
|
+
...metadata[typedLevel],
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
currentContext.setValue(CONTEXT_LOGGER_METADATA, newMetadata);
|
|
264
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { ROOT_CONTEXT, trace } from '@opentelemetry/api';
|
|
2
|
+
import { AnyValueMap, SeverityNumber } from '@opentelemetry/api-logs';
|
|
3
|
+
import { LoggerProvider } from '@opentelemetry/sdk-logs';
|
|
4
|
+
import { inject, injectable } from 'inversify';
|
|
5
|
+
import { LOGGER_PROVIDER, LogLevel, PlatformLogInfo } from './logger.model';
|
|
6
|
+
|
|
7
|
+
const LOG_LEVEL_SEVERITY_MAP: Record<LogLevel, { severityNumber: SeverityNumber; severityText: string }> = {
|
|
8
|
+
error: {
|
|
9
|
+
severityNumber: SeverityNumber.ERROR,
|
|
10
|
+
severityText: 'error',
|
|
11
|
+
},
|
|
12
|
+
warn: {
|
|
13
|
+
severityNumber: SeverityNumber.WARN,
|
|
14
|
+
severityText: 'warn',
|
|
15
|
+
},
|
|
16
|
+
info: {
|
|
17
|
+
severityNumber: SeverityNumber.INFO,
|
|
18
|
+
severityText: 'info',
|
|
19
|
+
},
|
|
20
|
+
http: {
|
|
21
|
+
severityNumber: SeverityNumber.INFO2,
|
|
22
|
+
severityText: 'http',
|
|
23
|
+
},
|
|
24
|
+
verbose: {
|
|
25
|
+
severityNumber: SeverityNumber.INFO3,
|
|
26
|
+
severityText: 'verbose',
|
|
27
|
+
},
|
|
28
|
+
debug: {
|
|
29
|
+
severityNumber: SeverityNumber.DEBUG,
|
|
30
|
+
severityText: 'debug',
|
|
31
|
+
},
|
|
32
|
+
silly: {
|
|
33
|
+
severityNumber: SeverityNumber.TRACE,
|
|
34
|
+
severityText: 'silly',
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const TraceParentRegex = /^\d{2}-([0-9a-z]+)-([0-9a-z]+)-\d{2}$/;
|
|
39
|
+
|
|
40
|
+
@injectable()
|
|
41
|
+
export class OtelLogger {
|
|
42
|
+
constructor(@inject(LOGGER_PROVIDER) private readonly loggerProvider: LoggerProvider) {}
|
|
43
|
+
|
|
44
|
+
log(logInfo: PlatformLogInfo): void {
|
|
45
|
+
const traceContextValues = this.decodeTraceContext(logInfo);
|
|
46
|
+
let context;
|
|
47
|
+
if (traceContextValues !== undefined) {
|
|
48
|
+
context = trace.setSpanContext(ROOT_CONTEXT, {
|
|
49
|
+
traceId: traceContextValues.operationId,
|
|
50
|
+
spanId: traceContextValues.operationParentId,
|
|
51
|
+
traceFlags: 1,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
const logger = this.loggerProvider.getLogger('default');
|
|
55
|
+
logger.emit({
|
|
56
|
+
timestamp: logInfo.timestamp,
|
|
57
|
+
...LOG_LEVEL_SEVERITY_MAP[logInfo.level],
|
|
58
|
+
body: logInfo.message,
|
|
59
|
+
context,
|
|
60
|
+
attributes: this.getCustomDimensions(logInfo),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
private decodeTraceContext(logInfo: PlatformLogInfo): { operationId: string; operationParentId: string } | undefined {
|
|
65
|
+
const { traceContext } = logInfo;
|
|
66
|
+
if (traceContext !== undefined) {
|
|
67
|
+
const traceParent = traceContext.traceParent;
|
|
68
|
+
const traceParentParts = traceParent !== undefined ? TraceParentRegex.exec(traceParent) : null;
|
|
69
|
+
if (traceParentParts !== null && traceParentParts.length >= 3) {
|
|
70
|
+
const operationId = traceParentParts[1]!;
|
|
71
|
+
const operationParentId = traceParentParts[2]!;
|
|
72
|
+
return { operationId, operationParentId };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
private getCustomDimensions(logInfo: PlatformLogInfo): AnyValueMap {
|
|
78
|
+
const { level, loggerName, invocationId, traceContext, metadata } = logInfo;
|
|
79
|
+
const severity = LOG_LEVEL_SEVERITY_MAP[level].severityText;
|
|
80
|
+
return {
|
|
81
|
+
LogLevel: severity,
|
|
82
|
+
Category: traceContext?.attributes?.Category,
|
|
83
|
+
HostInstanceId: traceContext?.attributes?.HostInstanceId,
|
|
84
|
+
ProcessId: traceContext?.attributes?.ProcessId ?? process.pid,
|
|
85
|
+
InvocationId: invocationId,
|
|
86
|
+
LoggerName: loggerName,
|
|
87
|
+
...(metadata !== undefined && Object.getOwnPropertyNames(metadata).length > 0 ? { Metadata: metadata } : {}),
|
|
88
|
+
...traceContext?.attributes,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
interface TrieNode<T> {
|
|
2
|
+
children: Record<string, TrieNode<T>>;
|
|
3
|
+
value?: T;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
interface TraverseResult<T> {
|
|
7
|
+
part: string;
|
|
8
|
+
name: string;
|
|
9
|
+
parentNode?: TraverseResult<T>;
|
|
10
|
+
trieNode: TrieNode<T>;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A service that provides a trie data structure for searching and storing values associated with string keys.
|
|
15
|
+
*
|
|
16
|
+
* This class can be used for providing of log levels for loggers based on their names, where the logger names are structured in a hierarchical manner using a separator (e.g., '.').
|
|
17
|
+
*
|
|
18
|
+
* @template T - The type of values stored in the trie.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* export class TrieSearchLogLevelProvider implements LogLevelProvider {
|
|
22
|
+
* private readonly trieSearchService: TrieSearchService<LogLevel>;
|
|
23
|
+
*
|
|
24
|
+
* constructor(@inject(DEFAULT_LOG_LEVEL) @optional() defaultLogLevel: LogLevel) {
|
|
25
|
+
* this.trieSearchService = new TrieSearchService('.', defaultLogLevel);
|
|
26
|
+
* this.trieSearchService.set(SYSTEM_LOGGER_NAME_PREFIX, 'silly');
|
|
27
|
+
* this.trieSearchService.set(PERSISTENCE_KYSELY_LOGGER_NAME, 'error');
|
|
28
|
+
* }
|
|
29
|
+
*
|
|
30
|
+
* getLogLevel(loggerName: string | undefined): LogLevel | undefined {
|
|
31
|
+
* return this.trieSearchService.find(loggerName);
|
|
32
|
+
* }
|
|
33
|
+
* }
|
|
34
|
+
*/
|
|
35
|
+
export class TrieSearchService<T> {
|
|
36
|
+
private readonly root: Required<TrieNode<T>>;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Creates an instance of TrieSearchService.
|
|
40
|
+
*
|
|
41
|
+
* @param trieSeparator - The separator used to split the keys into parts for the trie structure.
|
|
42
|
+
* @param rootValue - The value associated with the root of the trie.
|
|
43
|
+
*/
|
|
44
|
+
constructor(
|
|
45
|
+
private readonly trieSeparator: string,
|
|
46
|
+
rootValue: T,
|
|
47
|
+
) {
|
|
48
|
+
this.root = { children: {}, value: rootValue };
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Retrieves all key-value pairs in the trie that match the specified prefix.
|
|
53
|
+
*
|
|
54
|
+
* @param prefix - An optional prefix to filter the keys. If provided, only keys starting with this prefix will be included in the result.
|
|
55
|
+
* @returns A record containing all matching key-value pairs.
|
|
56
|
+
*/
|
|
57
|
+
getAll(prefix?: string): Record<string, T> {
|
|
58
|
+
const traverseResult = this.traverse(prefix);
|
|
59
|
+
if (traverseResult.name === (prefix ?? '')) {
|
|
60
|
+
return this.getAllChildren(traverseResult.trieNode, traverseResult.name);
|
|
61
|
+
} else {
|
|
62
|
+
return {};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private getAllChildren(node: TrieNode<T>, name: string): Record<string, T> {
|
|
67
|
+
const result: Record<string, T> = node.value !== undefined ? { [name]: node.value } : {};
|
|
68
|
+
const keys = Object.keys(node.children);
|
|
69
|
+
keys.sort((a, b) => a.localeCompare(b));
|
|
70
|
+
for (const key of keys) {
|
|
71
|
+
const childNode = node.children[key]!;
|
|
72
|
+
const childName = name ? `${name}${this.trieSeparator}${key}` : key;
|
|
73
|
+
Object.assign(result, this.getAllChildren(childNode, childName));
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Finds the value associated with the longest matching prefix of the specified key in the trie.
|
|
80
|
+
*
|
|
81
|
+
* @param key - The key to search for in the trie. If undefined, the root value will be returned.
|
|
82
|
+
* @returns The value associated with the longest matching prefix of the key, or undefined if no match is found.
|
|
83
|
+
*/
|
|
84
|
+
find(key: string | undefined): T {
|
|
85
|
+
let traverseResult = this.traverse(key ?? '');
|
|
86
|
+
let result = traverseResult.trieNode.value;
|
|
87
|
+
while (result === undefined && traverseResult.parentNode !== undefined) {
|
|
88
|
+
traverseResult = traverseResult.parentNode;
|
|
89
|
+
result = traverseResult.trieNode.value;
|
|
90
|
+
}
|
|
91
|
+
return result!;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Retrieves the value associated with the specified key in the trie.
|
|
96
|
+
*
|
|
97
|
+
* @param key - The key to search for in the trie.
|
|
98
|
+
* @returns The value associated with the key, or undefined if the key is not found.
|
|
99
|
+
*/
|
|
100
|
+
get(key: string): T | undefined {
|
|
101
|
+
const traverseResult = this.traverse(key);
|
|
102
|
+
if (traverseResult.name === key) {
|
|
103
|
+
return traverseResult.trieNode.value;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Sets the value associated with the specified key in the trie. If the value is undefined, the key will be removed from the trie.
|
|
109
|
+
*
|
|
110
|
+
* @param key - The key to set or remove in the trie.
|
|
111
|
+
* @param value - The value to associate with the key. If undefined, the key will be removed.
|
|
112
|
+
*/
|
|
113
|
+
set(key: string, value?: T): void {
|
|
114
|
+
const traverseResult = this.traverse(key);
|
|
115
|
+
|
|
116
|
+
if (value !== undefined) {
|
|
117
|
+
const prefix = traverseResult.name;
|
|
118
|
+
const restKey = prefix && key.startsWith(prefix) ? key.substring(traverseResult.name.length + 1) : key;
|
|
119
|
+
this.concatNodes(traverseResult.trieNode, restKey, value);
|
|
120
|
+
} else {
|
|
121
|
+
if (traverseResult.name === key) {
|
|
122
|
+
delete traverseResult.trieNode.value;
|
|
123
|
+
}
|
|
124
|
+
this.removeNodes(traverseResult);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
private traverse(key?: string): TraverseResult<T> {
|
|
129
|
+
const parts = key ? key.split(this.trieSeparator) : [];
|
|
130
|
+
let currentNode: TrieNode<T> = this.root;
|
|
131
|
+
let traverseResult: TraverseResult<T> = { part: '', name: '', trieNode: currentNode };
|
|
132
|
+
|
|
133
|
+
for (const part of parts) {
|
|
134
|
+
if (currentNode.children?.[part] === undefined) {
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
currentNode = currentNode.children[part];
|
|
138
|
+
const name = traverseResult.name ? `${traverseResult.name}${this.trieSeparator}${part}` : part;
|
|
139
|
+
traverseResult = {
|
|
140
|
+
part,
|
|
141
|
+
name,
|
|
142
|
+
parentNode: traverseResult,
|
|
143
|
+
trieNode: currentNode,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
return traverseResult;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
private concatNodes(node: TrieNode<T>, restKey: string, value: T) {
|
|
150
|
+
const parts = restKey ? restKey.split(this.trieSeparator) : [];
|
|
151
|
+
let currentNode = node;
|
|
152
|
+
for (const part of parts) {
|
|
153
|
+
const child = {
|
|
154
|
+
children: {},
|
|
155
|
+
};
|
|
156
|
+
currentNode.children[part] = child;
|
|
157
|
+
currentNode = child;
|
|
158
|
+
}
|
|
159
|
+
currentNode.value = value;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
private removeNodes(traverseResult: TraverseResult<T>) {
|
|
163
|
+
let currentNode = traverseResult.trieNode;
|
|
164
|
+
let part: string | undefined;
|
|
165
|
+
while (traverseResult.parentNode) {
|
|
166
|
+
if (currentNode.children && Object.keys(currentNode.children).length > 0) {
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
currentNode = traverseResult.trieNode;
|
|
170
|
+
part = traverseResult.part;
|
|
171
|
+
traverseResult = traverseResult.parentNode;
|
|
172
|
+
if (currentNode.value === undefined) {
|
|
173
|
+
delete currentNode.children[part];
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { OpenApiPrintService, OpenApiRegistrationService } from 'http-controller';
|
|
2
|
+
import { Container } from 'inversify';
|
|
3
|
+
import { LOGGER_FACTORY, SYSTEM_LOGGER_NAME_PREFIX } from 'logger';
|
|
4
|
+
import { AzurePlatform, PlatformConfiguration } from 'platform';
|
|
5
|
+
import { platformModeSchema } from 'shared';
|
|
6
|
+
import { createContainers } from './framework.container';
|
|
7
|
+
|
|
8
|
+
function registerOpenApi(frameworkContainer: Container, config: PlatformConfiguration) {
|
|
9
|
+
const openApiRegistrationService = frameworkContainer.get(OpenApiRegistrationService);
|
|
10
|
+
openApiRegistrationService.register({
|
|
11
|
+
triggerHandlerClasses: config.triggerHandlerClasses,
|
|
12
|
+
restApplications: config.restApplications,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Starts the platform based on the provided configuration and the current platform mode.
|
|
18
|
+
*
|
|
19
|
+
* The function initializes the necessary containers and services, and then either prints the OpenAPI specification or starts the platform with the registered trigger handlers.
|
|
20
|
+
* @param config The platform configuration.
|
|
21
|
+
* @returns The platform container.
|
|
22
|
+
*/
|
|
23
|
+
export function startPlatform(config: PlatformConfiguration): Container {
|
|
24
|
+
const platformMode = platformModeSchema.parse(process.env.PLATFORM_MODE);
|
|
25
|
+
const { frameworkContainer, platformContainer } = createContainers(config.loggerConfiguration);
|
|
26
|
+
const loggerFactory = frameworkContainer.get(LOGGER_FACTORY);
|
|
27
|
+
const logger = loggerFactory(`${SYSTEM_LOGGER_NAME_PREFIX}.platform`);
|
|
28
|
+
logger.info(`Starting platform in mode: ${platformMode}`);
|
|
29
|
+
try {
|
|
30
|
+
switch (platformMode) {
|
|
31
|
+
case 'print-open-api': {
|
|
32
|
+
registerOpenApi(frameworkContainer, config);
|
|
33
|
+
frameworkContainer.get(OpenApiPrintService).printOpenApi();
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
case 'start': {
|
|
37
|
+
platformContainer.loadSync(...config.modules);
|
|
38
|
+
registerOpenApi(frameworkContainer, config);
|
|
39
|
+
const azurePlatform = frameworkContainer.get(AzurePlatform);
|
|
40
|
+
azurePlatform.start(config.triggerHandlerClasses);
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
} catch (error) {
|
|
45
|
+
logger.error('Error occurred while starting the platform', error);
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
return platformContainer;
|
|
49
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { app } from '@azure/functions';
|
|
2
|
+
import { SwaggerHandlingService } from 'http-controller';
|
|
3
|
+
import { Container, inject, injectable } from 'inversify';
|
|
4
|
+
import { LOGGER_FACTORY, LoggerFactory } from 'logger';
|
|
5
|
+
import { PLATFORM_CONTAINER, TriggerHandlerClass } from 'shared';
|
|
6
|
+
import { REGISTER_TRIGGER_HANDLER_FACTORY, RegisterTriggerHandlerFactory } from './register-trigger-handler.factory';
|
|
7
|
+
import { STARTUP_SERVICE } from './startup.service';
|
|
8
|
+
|
|
9
|
+
@injectable()
|
|
10
|
+
export class AzurePlatform {
|
|
11
|
+
private readonly logger;
|
|
12
|
+
|
|
13
|
+
constructor(
|
|
14
|
+
@inject(LOGGER_FACTORY) loggerFactory: LoggerFactory,
|
|
15
|
+
@inject(PLATFORM_CONTAINER) private readonly platformContainer: Container,
|
|
16
|
+
@inject(REGISTER_TRIGGER_HANDLER_FACTORY) private readonly registerHandler: RegisterTriggerHandlerFactory,
|
|
17
|
+
private readonly swaggerHandlingService: SwaggerHandlingService,
|
|
18
|
+
) {
|
|
19
|
+
this.logger = loggerFactory();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
start(triggerHandlerClasses: TriggerHandlerClass[]) {
|
|
23
|
+
this.logger.info('Starting Azure platform');
|
|
24
|
+
this.registerStartupService();
|
|
25
|
+
this.registerSwaggerUi();
|
|
26
|
+
triggerHandlerClasses.forEach(azureFunctionType => {
|
|
27
|
+
this.registerHandler(azureFunctionType);
|
|
28
|
+
});
|
|
29
|
+
this.logger.info('Azure platform started');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
private registerStartupService(): void {
|
|
33
|
+
this.logger.info('Registering startup service');
|
|
34
|
+
const startupService = this.platformContainer.get(STARTUP_SERVICE, { optional: true });
|
|
35
|
+
if (startupService !== undefined) {
|
|
36
|
+
app.hook.appStart(async () => {
|
|
37
|
+
await startupService.startup();
|
|
38
|
+
});
|
|
39
|
+
this.logger.info('Startup service registered');
|
|
40
|
+
} else {
|
|
41
|
+
this.logger.info('No startup service found');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private registerSwaggerUi() {
|
|
46
|
+
this.logger.info('Registering Swagger UI endpoints');
|
|
47
|
+
app.get('swaggerUi', {
|
|
48
|
+
route: 'spec/{fileName?}',
|
|
49
|
+
handler: async request => await this.swaggerHandlingService.handleSwaggerContent(request),
|
|
50
|
+
});
|
|
51
|
+
app.get('openApiDefinition', {
|
|
52
|
+
route: 'spec/definition/{definitionName}',
|
|
53
|
+
handler: request => this.swaggerHandlingService.handleOpenApiDefinition(request),
|
|
54
|
+
});
|
|
55
|
+
this.logger.info('Swagger UI endpoints registered');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ContainerModule } from 'inversify';
|
|
2
|
+
import { LOGGER_NAME_PROVIDER } from 'logger';
|
|
3
|
+
import { AzurePlatform } from './azure-platform';
|
|
4
|
+
import {
|
|
5
|
+
REGISTER_TRIGGER_HANDLER_FACTORY,
|
|
6
|
+
bindRegisterTriggerHandlerFactory,
|
|
7
|
+
} from './register-trigger-handler.factory';
|
|
8
|
+
import { systemLoggerNameProvider } from './system-logger-name.provider';
|
|
9
|
+
|
|
10
|
+
export * from './azure-platform';
|
|
11
|
+
export * from './model';
|
|
12
|
+
export { IStartupService, STARTUP_SERVICE } from './startup.service';
|
|
13
|
+
|
|
14
|
+
export const PlatformModule = new ContainerModule(options => {
|
|
15
|
+
options.bind(AzurePlatform).toSelf();
|
|
16
|
+
options.bind(REGISTER_TRIGGER_HANDLER_FACTORY).toFactory(bindRegisterTriggerHandlerFactory);
|
|
17
|
+
options.bind(LOGGER_NAME_PROVIDER).toFactory(() => systemLoggerNameProvider);
|
|
18
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { RestApplication } from 'http-controller';
|
|
2
|
+
import { ContainerModule } from 'inversify';
|
|
3
|
+
import { LoggerConfiguration } from 'logger';
|
|
4
|
+
import { TriggerHandlerClass } from 'shared';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Represents the configuration for the platform, including trigger handlers, REST applications, modules, and optional logger configuration.
|
|
8
|
+
*
|
|
9
|
+
* @property triggerHandlerClasses The trigger handler classes to be registered with the platform.
|
|
10
|
+
* @property restApplications Optional REST applications to be registered with the platform.
|
|
11
|
+
* @property modules The container modules to be loaded into the platform container.
|
|
12
|
+
* @property loggerConfiguration Optional logger configuration for the platform.
|
|
13
|
+
*/
|
|
14
|
+
export interface PlatformConfiguration {
|
|
15
|
+
triggerHandlerClasses: TriggerHandlerClass[];
|
|
16
|
+
restApplications?: RestApplication[];
|
|
17
|
+
modules: ContainerModule[];
|
|
18
|
+
loggerConfiguration?: LoggerConfiguration;
|
|
19
|
+
}
|