@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,56 @@
|
|
|
1
|
+
import { AzureMonitorLogExporter } from '@azure/monitor-opentelemetry-exporter';
|
|
2
|
+
import { resourceFromAttributes } from '@opentelemetry/resources';
|
|
3
|
+
import { BatchLogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs';
|
|
4
|
+
import { ATTR_SERVICE_INSTANCE_ID, ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
|
|
5
|
+
import { ResolutionContext } from 'inversify';
|
|
6
|
+
import * as winston from 'winston';
|
|
7
|
+
import { AzFunctionsTransport } from './log-transport.service';
|
|
8
|
+
import {
|
|
9
|
+
LOG_LEVELS,
|
|
10
|
+
Logger,
|
|
11
|
+
LOGGER_NAME_META_KEY,
|
|
12
|
+
LOGGER_NAME_PROVIDER,
|
|
13
|
+
LoggerFactory,
|
|
14
|
+
OtelConfiguration,
|
|
15
|
+
} from './logger.model';
|
|
16
|
+
|
|
17
|
+
export function bindWinstonLogger(context: ResolutionContext): winston.Logger {
|
|
18
|
+
const transport = context.get(AzFunctionsTransport);
|
|
19
|
+
return winston.createLogger({
|
|
20
|
+
level: 'silly',
|
|
21
|
+
levels: LOG_LEVELS,
|
|
22
|
+
format: winston.format.combine(winston.format.timestamp(), winston.format.splat(), winston.format.metadata()),
|
|
23
|
+
transports: [transport],
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function bindLoggerFactory(context: ResolutionContext): LoggerFactory {
|
|
28
|
+
const logger = context.get(winston.Logger);
|
|
29
|
+
const loggerNameProvider = context.get(LOGGER_NAME_PROVIDER, { optional: true });
|
|
30
|
+
return (loggerName?: string): Logger => {
|
|
31
|
+
let derivedLoggerName = loggerName;
|
|
32
|
+
if (loggerName !== undefined) {
|
|
33
|
+
return logger.child({ loggerName });
|
|
34
|
+
}
|
|
35
|
+
if (loggerNameProvider !== undefined) {
|
|
36
|
+
const obj = {};
|
|
37
|
+
Error.captureStackTrace(obj);
|
|
38
|
+
const stack = (obj as { stack?: string }).stack;
|
|
39
|
+
const stackEntry = stack?.split('\n')[2];
|
|
40
|
+
derivedLoggerName = loggerNameProvider(stackEntry);
|
|
41
|
+
}
|
|
42
|
+
return logger.child({ [LOGGER_NAME_META_KEY]: derivedLoggerName ?? '' });
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function bindOtelLoggerProvider(otelConfiguration: OtelConfiguration): LoggerProvider {
|
|
47
|
+
const connectionString = otelConfiguration?.applicationInsightsConnectionString;
|
|
48
|
+
return new LoggerProvider({
|
|
49
|
+
resource: resourceFromAttributes({
|
|
50
|
+
[ATTR_SERVICE_NAME]: otelConfiguration?.serviceName,
|
|
51
|
+
[ATTR_SERVICE_INSTANCE_ID]: otelConfiguration?.serviceInstanceId,
|
|
52
|
+
[ATTR_SERVICE_VERSION]: otelConfiguration?.serviceVersion,
|
|
53
|
+
}),
|
|
54
|
+
processors: [new BatchLogRecordProcessor(new AzureMonitorLogExporter({ connectionString }))],
|
|
55
|
+
});
|
|
56
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ContainerModule } from 'inversify';
|
|
2
|
+
import * as winston from 'winston';
|
|
3
|
+
import { bindLoggerFactory, bindOtelLoggerProvider, bindWinstonLogger } from './bindings';
|
|
4
|
+
import { LogLevelService } from './log-level.service';
|
|
5
|
+
import { AzFunctionsTransport } from './log-transport.service';
|
|
6
|
+
import { DEFAULT_LOG_LEVEL, LOGGER_FACTORY, LOGGER_PROVIDER, LoggerConfiguration } from './logger.model';
|
|
7
|
+
import { OtelLogger } from './otel.logger';
|
|
8
|
+
|
|
9
|
+
export * from './logger.model';
|
|
10
|
+
export * from './logger.utils';
|
|
11
|
+
export * from './trie-search.service';
|
|
12
|
+
|
|
13
|
+
export function provideLoggerModule(loggerConfiguration?: LoggerConfiguration): ContainerModule {
|
|
14
|
+
return new ContainerModule(options => {
|
|
15
|
+
options.bind(LogLevelService).toSelf();
|
|
16
|
+
options.bind(AzFunctionsTransport).toSelf();
|
|
17
|
+
options.bind(winston.Logger).toDynamicValue(context => bindWinstonLogger(context));
|
|
18
|
+
options.bind(LOGGER_FACTORY).toFactory(context => bindLoggerFactory(context));
|
|
19
|
+
options.bind(DEFAULT_LOG_LEVEL).toConstantValue(loggerConfiguration?.defaultLogLevel ?? 'info');
|
|
20
|
+
if (loggerConfiguration?.otelConfiguration !== undefined) {
|
|
21
|
+
const otelConfiguration = loggerConfiguration.otelConfiguration;
|
|
22
|
+
options.bind(OtelLogger).toSelf();
|
|
23
|
+
options.bind(LOGGER_PROVIDER).toDynamicValue(() => bindOtelLoggerProvider(otelConfiguration));
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { inject, injectable, optional } from 'inversify';
|
|
2
|
+
import { DEFAULT_LOG_LEVEL, LOG_LEVEL_PROVIDER, LogLevel, LogLevelProvider } from './logger.model';
|
|
3
|
+
|
|
4
|
+
@injectable()
|
|
5
|
+
export class LogLevelService {
|
|
6
|
+
constructor(
|
|
7
|
+
@inject(LOG_LEVEL_PROVIDER) @optional() private readonly logLevelsProvider: LogLevelProvider | undefined,
|
|
8
|
+
@inject(DEFAULT_LOG_LEVEL) private readonly defaultLogLevel: LogLevel,
|
|
9
|
+
) {}
|
|
10
|
+
|
|
11
|
+
getLogLevel(loggerName: string | undefined): LogLevel {
|
|
12
|
+
return this.logLevelsProvider?.getLogLevel(loggerName) ?? this.defaultLogLevel;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { InvocationContext } from '@azure/functions';
|
|
2
|
+
import { ORIGINAL_INVOCATION_CONTEXT_VALUE_KEY, PLATFORM_CONTEXT_MANAGER, PlatformContextManager } from 'context';
|
|
3
|
+
import { inject, injectable, optional } from 'inversify';
|
|
4
|
+
import * as Transport from 'winston-transport';
|
|
5
|
+
import { LogLevelService } from './log-level.service';
|
|
6
|
+
import {
|
|
7
|
+
CONTEXT_LOGGER_METADATA,
|
|
8
|
+
DEFAULT_LOG_LEVEL,
|
|
9
|
+
LOG_LEVELS,
|
|
10
|
+
LOGGER_NAME_META_KEY,
|
|
11
|
+
LogLevel,
|
|
12
|
+
PlatformLogInfo,
|
|
13
|
+
} from './logger.model';
|
|
14
|
+
import { sanitizeMetadata, SanitizerOptions } from './logger.utils';
|
|
15
|
+
import { OtelLogger } from './otel.logger';
|
|
16
|
+
|
|
17
|
+
function isLogLevel(level: string): level is LogLevel {
|
|
18
|
+
return level in LOG_LEVELS;
|
|
19
|
+
}
|
|
20
|
+
export type InvocationContextLogger = Pick<InvocationContext, 'log' | 'trace' | 'debug' | 'info' | 'warn' | 'error'>;
|
|
21
|
+
|
|
22
|
+
export const LOG_METHOD_MAP: Record<LogLevel, keyof InvocationContextLogger> = {
|
|
23
|
+
error: 'error',
|
|
24
|
+
warn: 'warn',
|
|
25
|
+
info: 'info',
|
|
26
|
+
http: 'info',
|
|
27
|
+
verbose: 'info',
|
|
28
|
+
debug: 'debug',
|
|
29
|
+
silly: 'trace',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const SANITIZER_OPTIONS: Partial<Record<LogLevel, SanitizerOptions>> = {
|
|
33
|
+
error: {
|
|
34
|
+
maxDepth: Number.MAX_VALUE,
|
|
35
|
+
maxArrayLength: Number.MAX_VALUE,
|
|
36
|
+
maxKeysCount: Number.MAX_VALUE,
|
|
37
|
+
maxStringLength: Number.MAX_VALUE,
|
|
38
|
+
},
|
|
39
|
+
warn: { maxDepth: 10 },
|
|
40
|
+
http: { maxDepth: 5, maxArrayLength: 10 },
|
|
41
|
+
verbose: { maxDepth: 10 },
|
|
42
|
+
debug: { maxDepth: 20, maxArrayLength: 25, maxKeysCount: 25, maxStringLength: 1000 },
|
|
43
|
+
silly: {
|
|
44
|
+
maxDepth: Number.MAX_VALUE,
|
|
45
|
+
maxArrayLength: Number.MAX_VALUE,
|
|
46
|
+
maxKeysCount: Number.MAX_VALUE,
|
|
47
|
+
maxStringLength: Number.MAX_VALUE,
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
interface LogMetadata {
|
|
52
|
+
timestamp: string;
|
|
53
|
+
[LOGGER_NAME_META_KEY]?: string;
|
|
54
|
+
message?: string;
|
|
55
|
+
stack?: string;
|
|
56
|
+
cause?: unknown;
|
|
57
|
+
details?: unknown;
|
|
58
|
+
name?: string;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
interface LogInfo {
|
|
62
|
+
level: LogLevel;
|
|
63
|
+
message: string;
|
|
64
|
+
metadata: LogMetadata;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@injectable()
|
|
68
|
+
export class AzFunctionsTransport extends Transport {
|
|
69
|
+
constructor(
|
|
70
|
+
@inject(PLATFORM_CONTEXT_MANAGER)
|
|
71
|
+
private readonly platformContextManager: PlatformContextManager,
|
|
72
|
+
@inject(DEFAULT_LOG_LEVEL)
|
|
73
|
+
private readonly defaultLogLevel: LogLevel,
|
|
74
|
+
@inject(OtelLogger)
|
|
75
|
+
@optional()
|
|
76
|
+
private readonly logger: OtelLogger | undefined,
|
|
77
|
+
private readonly logLevelsService: LogLevelService,
|
|
78
|
+
) {
|
|
79
|
+
super();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
83
|
+
log(info: any, next: () => void): any {
|
|
84
|
+
setImmediate(() => {
|
|
85
|
+
this.emit('logged', info);
|
|
86
|
+
});
|
|
87
|
+
const {
|
|
88
|
+
level,
|
|
89
|
+
metadata: { loggerName },
|
|
90
|
+
} = info;
|
|
91
|
+
const currentLogLevel = isLogLevel(level) ? level : this.defaultLogLevel;
|
|
92
|
+
const availableLogLevel = this.logLevelsService.getLogLevel(loggerName);
|
|
93
|
+
|
|
94
|
+
if (LOG_LEVELS[currentLogLevel] <= LOG_LEVELS[availableLogLevel]) {
|
|
95
|
+
this.logInternal({
|
|
96
|
+
level: currentLogLevel,
|
|
97
|
+
message: info.message,
|
|
98
|
+
metadata: info.metadata,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
next();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
private logInternal<T extends LogInfo>(info: T): void {
|
|
105
|
+
const platformContext = this.platformContextManager.active();
|
|
106
|
+
const invocationContext = platformContext?.invocationContext;
|
|
107
|
+
const platformLogInfo = this.getPlatformLogInfo(info, invocationContext);
|
|
108
|
+
if (this.logger !== undefined) {
|
|
109
|
+
this.logger.log(platformLogInfo);
|
|
110
|
+
} else {
|
|
111
|
+
const fallbackLogger: InvocationContextLogger =
|
|
112
|
+
platformContext?.getValue<InvocationContext>(ORIGINAL_INVOCATION_CONTEXT_VALUE_KEY) ?? console;
|
|
113
|
+
const logMethod = LOG_METHOD_MAP[info.level];
|
|
114
|
+
if (platformLogInfo.metadata !== undefined) {
|
|
115
|
+
fallbackLogger[logMethod](platformLogInfo.message, platformLogInfo.metadata);
|
|
116
|
+
} else {
|
|
117
|
+
fallbackLogger[logMethod](platformLogInfo.message);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
private getPlatformLogInfo<T extends LogInfo>(logInfo: T, invocationContext?: InvocationContext): PlatformLogInfo {
|
|
123
|
+
const {
|
|
124
|
+
level,
|
|
125
|
+
message,
|
|
126
|
+
metadata: { timestamp, loggerName, ...rest },
|
|
127
|
+
} = logInfo;
|
|
128
|
+
const metadata = this.getContextMetadata(level);
|
|
129
|
+
Object.assign(metadata, rest);
|
|
130
|
+
const extension =
|
|
131
|
+
Object.keys(metadata).length > 0
|
|
132
|
+
? { metadata: sanitizeMetadata(metadata, SANITIZER_OPTIONS[logInfo.level]) }
|
|
133
|
+
: {};
|
|
134
|
+
return {
|
|
135
|
+
level,
|
|
136
|
+
timestamp: new Date(timestamp),
|
|
137
|
+
message,
|
|
138
|
+
loggerName: loggerName ?? 'unknown',
|
|
139
|
+
invocationId: invocationContext?.invocationId,
|
|
140
|
+
traceContext: invocationContext?.traceContext,
|
|
141
|
+
operationName: invocationContext?.functionName,
|
|
142
|
+
...extension,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
private getContextMetadata(level: LogLevel): object {
|
|
147
|
+
const contextLoggerMetadata = this.platformContextManager.active()?.getValue(CONTEXT_LOGGER_METADATA);
|
|
148
|
+
let metadata: object = {};
|
|
149
|
+
if (contextLoggerMetadata !== undefined) {
|
|
150
|
+
let distance = Number.MAX_VALUE;
|
|
151
|
+
for (const metaLevel of Object.keys(contextLoggerMetadata)) {
|
|
152
|
+
const typedMetaLevel = metaLevel as LogLevel;
|
|
153
|
+
const newDistance = LOG_LEVELS[level] - LOG_LEVELS[typedMetaLevel];
|
|
154
|
+
if (newDistance >= 0 && newDistance < distance) {
|
|
155
|
+
distance = newDistance;
|
|
156
|
+
metadata = contextLoggerMetadata[typedMetaLevel]!;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return metadata;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { TraceContext } from '@azure/functions';
|
|
2
|
+
import { AnyValueMap } from '@opentelemetry/api-logs';
|
|
3
|
+
import { LoggerProvider } from '@opentelemetry/sdk-logs';
|
|
4
|
+
import { createPlatformContextValueKey } from 'context';
|
|
5
|
+
import { serviceIdentifier } from 'shared';
|
|
6
|
+
import * as winston from 'winston';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Log levels for the logger.
|
|
10
|
+
*/
|
|
11
|
+
export const LOG_LEVELS = {
|
|
12
|
+
error: 0,
|
|
13
|
+
warn: 1,
|
|
14
|
+
info: 2,
|
|
15
|
+
http: 3,
|
|
16
|
+
verbose: 4,
|
|
17
|
+
debug: 5,
|
|
18
|
+
silly: 6,
|
|
19
|
+
} as const;
|
|
20
|
+
|
|
21
|
+
export const LOGGER_NAME_META_KEY = 'loggerName';
|
|
22
|
+
|
|
23
|
+
export type ContextLoggerMetadata = Partial<Record<LogLevel, object>>;
|
|
24
|
+
export const CONTEXT_LOGGER_METADATA = createPlatformContextValueKey<ContextLoggerMetadata>(
|
|
25
|
+
'AzFunctionsContext.Logger.Metadata',
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Log levels for the logger.
|
|
30
|
+
*
|
|
31
|
+
* @see LOG_LEVELS
|
|
32
|
+
*/
|
|
33
|
+
export type LogLevel = keyof typeof LOG_LEVELS;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* IoC container identifier for the default log level used by the logger.
|
|
37
|
+
*/
|
|
38
|
+
export const DEFAULT_LOG_LEVEL = serviceIdentifier<LogLevel>('AzFunctions.DefaultLogLevel');
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* A logger interface that provides logging methods for different log levels.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* @Injectable()
|
|
46
|
+
* class MyService {
|
|
47
|
+
* private readonly logger: Logger;
|
|
48
|
+
*
|
|
49
|
+
* constructor(@Inject(LOGGER_FACTORY) loggerFactory: LoggerFactory) {
|
|
50
|
+
* this.logger = loggerFactory('MyService');
|
|
51
|
+
* }
|
|
52
|
+
*
|
|
53
|
+
* doSomething() {
|
|
54
|
+
* this.logger.info('Doing something...');
|
|
55
|
+
* }
|
|
56
|
+
* }
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export type Logger = Pick<winston.Logger, LogLevel>;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* A prefix for all system loggers used by the AzFunctions platform. This prefix is used to identify loggers that are part of the platform's internal logging system.
|
|
63
|
+
*/
|
|
64
|
+
export const SYSTEM_LOGGER_NAME_PREFIX = '#az-functions';
|
|
65
|
+
export const LOGGER_PROVIDER = serviceIdentifier<LoggerProvider>('AzFunctions.LoggerProvider');
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* An IoC container identifier for a service that provides log levels for loggers.
|
|
69
|
+
*
|
|
70
|
+
* This service can be used to determine the log level for a specific logger based on its name.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts
|
|
74
|
+
* @Injectable()
|
|
75
|
+
* class MyLogLevelProvider implements LogLevelProvider {
|
|
76
|
+
* getLogLevel(loggerName?: string): LogLevel | undefined {
|
|
77
|
+
* if (loggerName?.startsWith('MyService')) {
|
|
78
|
+
* return 'debug';
|
|
79
|
+
* }
|
|
80
|
+
* return undefined;
|
|
81
|
+
* }
|
|
82
|
+
* }
|
|
83
|
+
* ...
|
|
84
|
+
* export const LoggerModule = new ContainerModule(({ bind }) => {
|
|
85
|
+
* ...
|
|
86
|
+
* bind(LOG_LEVEL_PROVIDER).to(MyLogLevelProvider);
|
|
87
|
+
* ...
|
|
88
|
+
* });
|
|
89
|
+
* ...
|
|
90
|
+
* startPlatform({
|
|
91
|
+
* ...
|
|
92
|
+
* modules: [
|
|
93
|
+
* ...
|
|
94
|
+
* LoggerModule,
|
|
95
|
+
* ...
|
|
96
|
+
* ],
|
|
97
|
+
* });
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export const LOG_LEVEL_PROVIDER = serviceIdentifier<LogLevelProvider>('AzFunctions.LogLevelProvider');
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* An identifier for a logger factory function that creates a logger instance.
|
|
104
|
+
*
|
|
105
|
+
* @param loggerName - The name of the logger. If not provided, the logger name will be derived from the call stack.
|
|
106
|
+
* @returns A logger instance.
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```ts
|
|
110
|
+
* @Injectable()
|
|
111
|
+
* class MyService {
|
|
112
|
+
* private readonly logger: Logger;
|
|
113
|
+
*
|
|
114
|
+
* constructor(@Inject(LOGGER_FACTORY) loggerFactory: LoggerFactory) {
|
|
115
|
+
* this.logger = loggerFactory('MyService');
|
|
116
|
+
* }
|
|
117
|
+
*
|
|
118
|
+
* doSomething() {
|
|
119
|
+
* this.logger.info('Doing something...');
|
|
120
|
+
* }
|
|
121
|
+
* }
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export const LOGGER_FACTORY = serviceIdentifier<LoggerFactory>('AzFunctions.LoggerFactory');
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* A factory function that creates a logger instance.
|
|
128
|
+
*
|
|
129
|
+
* @param loggerName - The name of the logger. If not provided, the logger name will be derived from the call stack.
|
|
130
|
+
* @returns A logger instance.
|
|
131
|
+
*/
|
|
132
|
+
export type LoggerFactory = (loggerName?: string) => Logger;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* A IoC container identifier for a function that provides a logger name based on the call stack.
|
|
136
|
+
|
|
137
|
+
@example
|
|
138
|
+
```ts
|
|
139
|
+
export const LoggerModule = new ContainerModule(({ bind }) => {
|
|
140
|
+
...
|
|
141
|
+
bind(LOGGER_NAME_PROVIDER).toFactory(() => {
|
|
142
|
+
const regexp =
|
|
143
|
+
/^\s*at\s+(?:new\s+)?([A-Za-z0-9_$]+)\s+\(.*packages[\\/]examples[\\/]backend[\\/]src[\\/](.+)\/[^\\/]+:\d+:\d+\)$/;
|
|
144
|
+
return (stackEntry?: string) => {
|
|
145
|
+
const stackLines = stackEntry?.split('\n') ?? [];
|
|
146
|
+
let callerLine = stackLines.shift();
|
|
147
|
+
while (callerLine !== undefined) {
|
|
148
|
+
const match = regexp.exec(callerLine.trim());
|
|
149
|
+
if (match !== null) {
|
|
150
|
+
return `${LOGGER_NAME_PREFIX}.${match[2]?.replace(/\//g, '.')}.${match[1]}`;
|
|
151
|
+
} else {
|
|
152
|
+
callerLine = stackLines.shift();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
...
|
|
157
|
+
});
|
|
158
|
+
...
|
|
159
|
+
|
|
160
|
+
startPlatform({
|
|
161
|
+
...
|
|
162
|
+
modules: [
|
|
163
|
+
...
|
|
164
|
+
LoggerModule,
|
|
165
|
+
...
|
|
166
|
+
],
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
```
|
|
170
|
+
*/
|
|
171
|
+
export const LOGGER_NAME_PROVIDER = serviceIdentifier<LoggerNameProvider>('AzFunctions.LoggerNameProvider');
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* A function that provides a logger name based on the call stack.
|
|
175
|
+
*
|
|
176
|
+
* @param stackEntry - An optional stack entry from which to derive the logger name.
|
|
177
|
+
* @returns A logger name or undefined if it cannot be derived.
|
|
178
|
+
*/
|
|
179
|
+
export type LoggerNameProvider = (stackEntry?: string) => string | undefined;
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* An interface for a service that provides log levels for loggers.
|
|
183
|
+
*
|
|
184
|
+
* This service can be used to determine the log level for a specific logger based on its name.
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```ts
|
|
188
|
+
* @Injectable()
|
|
189
|
+
* class MyLogLevelProvider implements LogLevelProvider {
|
|
190
|
+
* getLogLevel(loggerName?: string): LogLevel | undefined {
|
|
191
|
+
* if (loggerName?.startsWith('MyService')) {
|
|
192
|
+
* return 'debug';
|
|
193
|
+
* }
|
|
194
|
+
* return undefined;
|
|
195
|
+
* }
|
|
196
|
+
* }
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
export interface LogLevelProvider {
|
|
200
|
+
/**
|
|
201
|
+
* Gets the log level for a specific logger based on its name.
|
|
202
|
+
*
|
|
203
|
+
* @param loggerName - The name of the logger for which to get the log level.
|
|
204
|
+
* @returns The log level for the specified logger, or undefined if no specific log level is set and default log level should be used.
|
|
205
|
+
*/
|
|
206
|
+
getLogLevel(loggerName?: string): LogLevel | undefined;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Configuration options for OpenTelemetry (Otel) logging.
|
|
211
|
+
*
|
|
212
|
+
* This interface defines the configuration options required to set up OpenTelemetry logging in an application.
|
|
213
|
+
* It includes the connection string for Application Insights, as well as optional service metadata such as name, instance ID, and version.
|
|
214
|
+
*
|
|
215
|
+
* @param applicationInsightsConnectionString - The connection string for Application Insights, used to send telemetry data.
|
|
216
|
+
* @param serviceName - (Optional) The name of the service being monitored. This is used to identify the service in telemetry data.
|
|
217
|
+
* @param serviceInstanceId - (Optional) A unique identifier for the specific instance of the service. This can be used to differentiate between multiple instances of the same service.
|
|
218
|
+
* @param serviceVersion - (Optional) The version of the service being monitored. This can be used to track changes and updates to the service over time.
|
|
219
|
+
*
|
|
220
|
+
* @example
|
|
221
|
+
* ```ts
|
|
222
|
+
* const otelConfiguration: OtelConfiguration | undefined =
|
|
223
|
+
* process.env.APPLICATIONINSIGHTS_CONNECTION_STRING !== undefined
|
|
224
|
+
* ? {
|
|
225
|
+
* applicationInsightsConnectionString: process.env.APPLICATIONINSIGHTS_CONNECTION_STRING,
|
|
226
|
+
* serviceName: process.env.WEBSITE_DEPLOYMENT_ID,
|
|
227
|
+
* serviceVersion: '1.0.0',
|
|
228
|
+
* serviceInstanceId: process.env.WEBSITE_INSTANCE_ID,
|
|
229
|
+
* }
|
|
230
|
+
* : undefined;
|
|
231
|
+
* ...
|
|
232
|
+
* startPlatform({
|
|
233
|
+
* ...
|
|
234
|
+
* loggerConfiguration: {
|
|
235
|
+
* otelConfiguration,
|
|
236
|
+
* },
|
|
237
|
+
* });
|
|
238
|
+
* ```
|
|
239
|
+
*/
|
|
240
|
+
export interface OtelConfiguration {
|
|
241
|
+
applicationInsightsConnectionString: string;
|
|
242
|
+
serviceName?: string;
|
|
243
|
+
serviceInstanceId?: string;
|
|
244
|
+
serviceVersion?: string;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export interface LoggerConfiguration {
|
|
248
|
+
defaultLogLevel?: LogLevel;
|
|
249
|
+
otelConfiguration?: OtelConfiguration;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export interface PlatformLogInfo {
|
|
253
|
+
level: LogLevel;
|
|
254
|
+
timestamp: Date;
|
|
255
|
+
message: string;
|
|
256
|
+
invocationId?: string;
|
|
257
|
+
traceContext?: TraceContext;
|
|
258
|
+
operationName?: string;
|
|
259
|
+
loggerName: string;
|
|
260
|
+
metadata?: AnyValueMap;
|
|
261
|
+
}
|