@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,45 @@
|
|
|
1
|
+
import { app } from '@azure/functions';
|
|
2
|
+
import { Container, inject, injectable } from 'inversify';
|
|
3
|
+
import { PLATFORM_CONTAINER, TriggerHandlerClass, TriggerHandlerRegistrationService } from 'shared';
|
|
4
|
+
import { EventHubHandlerFactory } from './event-hub-handler.factory';
|
|
5
|
+
import {
|
|
6
|
+
EventhubTriggerRegistration,
|
|
7
|
+
EventHubTriggersRegistrationService,
|
|
8
|
+
} from './event-hub-triggers-registration.service';
|
|
9
|
+
|
|
10
|
+
@injectable()
|
|
11
|
+
export class EventHubHandlerRegistrationService implements TriggerHandlerRegistrationService {
|
|
12
|
+
constructor(
|
|
13
|
+
@inject(PLATFORM_CONTAINER) private readonly platformContainer: Container,
|
|
14
|
+
private readonly eventHubHandlerProvider: EventHubHandlerFactory,
|
|
15
|
+
private readonly triggersRegistrationService: EventHubTriggersRegistrationService,
|
|
16
|
+
) {}
|
|
17
|
+
|
|
18
|
+
register(eventHubHandlerClass: TriggerHandlerClass) {
|
|
19
|
+
this.platformContainer.bind(eventHubHandlerClass).toSelf();
|
|
20
|
+
const handler = this.platformContainer.get(eventHubHandlerClass);
|
|
21
|
+
|
|
22
|
+
this.triggersRegistrationService.registerTriggers(eventHubHandlerClass, triggerRegistration =>
|
|
23
|
+
this.registerTrigger(handler, triggerRegistration),
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
private registerTrigger(handler: object, triggerRegistration: EventhubTriggerRegistration) {
|
|
28
|
+
const { triggerId, triggerMethod, handlerMetadata, triggerMetadata } = triggerRegistration;
|
|
29
|
+
|
|
30
|
+
const handlersPrototype = handler.constructor.prototype;
|
|
31
|
+
const method = async (...args: unknown[]): Promise<unknown> => {
|
|
32
|
+
return await handlersPrototype[triggerMethod].call(handler, ...args);
|
|
33
|
+
};
|
|
34
|
+
const eventhubHandler = this.eventHubHandlerProvider.createHandler(triggerRegistration, method);
|
|
35
|
+
app.eventHub(triggerId, {
|
|
36
|
+
connection: handlerMetadata.connection,
|
|
37
|
+
eventHubName: handlerMetadata.eventHubName,
|
|
38
|
+
consumerGroup: triggerMetadata.consumerGroup,
|
|
39
|
+
cardinality: triggerMetadata.cardinality,
|
|
40
|
+
extraInputs: triggerMetadata.extraInputs,
|
|
41
|
+
extraOutputs: triggerMetadata.extraOutputs,
|
|
42
|
+
handler: eventhubHandler,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { InvocationContext } from '@azure/functions';
|
|
2
|
+
import { PLATFORM_CONTEXT_MANAGER, PLATFORM_CONTEXT_PROVIDER } from 'context';
|
|
3
|
+
import { Container, inject, injectable } from 'inversify';
|
|
4
|
+
import { adjustContextLoggerMetadata, LOGGER_FACTORY, LoggerFactory } from 'logger';
|
|
5
|
+
import { PLATFORM_CONTAINER } from 'shared';
|
|
6
|
+
import { EventHubTriggerSupportFactory } from './event-hub-trigger-support.factory';
|
|
7
|
+
import { EventhubTriggerRegistration } from './event-hub-triggers-registration.service';
|
|
8
|
+
|
|
9
|
+
export type EventHubTriggerHandler = (messages: unknown, invocationContext: InvocationContext) => Promise<void>;
|
|
10
|
+
|
|
11
|
+
@injectable()
|
|
12
|
+
export class EventHubHandlerFactory {
|
|
13
|
+
private readonly logger;
|
|
14
|
+
|
|
15
|
+
constructor(
|
|
16
|
+
@inject(LOGGER_FACTORY) loggerFactory: LoggerFactory,
|
|
17
|
+
@inject(PLATFORM_CONTAINER) private readonly platformContainer: Container,
|
|
18
|
+
private readonly eventHubTriggerService: EventHubTriggerSupportFactory,
|
|
19
|
+
) {
|
|
20
|
+
this.logger = loggerFactory();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
createHandler(
|
|
24
|
+
registrationData: EventhubTriggerRegistration,
|
|
25
|
+
method: (...args: unknown[]) => Promise<unknown>,
|
|
26
|
+
): EventHubTriggerHandler {
|
|
27
|
+
const { triggerId, triggerMetadata } = registrationData;
|
|
28
|
+
const argsProvider = this.eventHubTriggerService.buildArgProviders(
|
|
29
|
+
triggerMetadata.args,
|
|
30
|
+
triggerMetadata.cardinality,
|
|
31
|
+
);
|
|
32
|
+
const contextManager = this.platformContainer.get(PLATFORM_CONTEXT_MANAGER);
|
|
33
|
+
const contextProvider = this.platformContainer.get(PLATFORM_CONTEXT_PROVIDER);
|
|
34
|
+
return async (messages: unknown, invocationContext: InvocationContext): Promise<void> => {
|
|
35
|
+
return contextManager.runWith(contextProvider.providePlatformContext(invocationContext), async () => {
|
|
36
|
+
adjustContextLoggerMetadata(contextManager, {
|
|
37
|
+
error: {
|
|
38
|
+
registrationData,
|
|
39
|
+
},
|
|
40
|
+
warn: {
|
|
41
|
+
triggerId,
|
|
42
|
+
},
|
|
43
|
+
silly: {
|
|
44
|
+
registrationData,
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
try {
|
|
48
|
+
const args = await argsProvider(messages, invocationContext);
|
|
49
|
+
this.logger.debug('Processing Event Hub event started');
|
|
50
|
+
this.logger.silly('Processing Event Hub event started', {
|
|
51
|
+
args,
|
|
52
|
+
triggerMetadata: invocationContext.triggerMetadata,
|
|
53
|
+
messages,
|
|
54
|
+
});
|
|
55
|
+
await method(...args);
|
|
56
|
+
} catch (e) {
|
|
57
|
+
this.logger.error('Error processing Event Hub event', {
|
|
58
|
+
triggerMetadata: invocationContext.triggerMetadata,
|
|
59
|
+
messages,
|
|
60
|
+
error: e,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { InvocationContext } from '@azure/functions';
|
|
2
|
+
import { AzFunctionsSystemError } from 'shared';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
|
|
5
|
+
export class EventHubTriggerDefinitionError extends AzFunctionsSystemError {}
|
|
6
|
+
|
|
7
|
+
export interface EventHubArgProviderInput {
|
|
8
|
+
context: InvocationContext;
|
|
9
|
+
messages: unknown;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type EventHubArgProvider = (input: EventHubArgProviderInput) => unknown;
|
|
13
|
+
export type EventHubAsyncArgsProvider = (messages: unknown, context: InvocationContext) => Promise<unknown[]>;
|
|
14
|
+
|
|
15
|
+
export const EventHubEventDataSchema = z.object({
|
|
16
|
+
partitionContext: z.object({
|
|
17
|
+
fullyQualifiedNamespace: z.string(),
|
|
18
|
+
consumerGroup: z.string(),
|
|
19
|
+
eventHubName: z.string(),
|
|
20
|
+
partitionId: z.string(),
|
|
21
|
+
}),
|
|
22
|
+
enqueuedTimeUtc: z.iso.datetime({ local: true }),
|
|
23
|
+
offset: z.int(),
|
|
24
|
+
partitionKey: z.string().optional(),
|
|
25
|
+
sequenceNumber: z.int(),
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Schema representing the raw Event Hub event data.
|
|
30
|
+
* Includes metadata such as partition InvocationCtx, enqueue time, offset, partition key, and sequence number.
|
|
31
|
+
* Can be used to strongly type the raw event data in handler methods.
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* type EventHubEventData = {
|
|
35
|
+
* partitionContext: {
|
|
36
|
+
* consumerGroupName: string;
|
|
37
|
+
* eventHubPath: string;
|
|
38
|
+
* }
|
|
39
|
+
* enqueuedTimeUtc: string;
|
|
40
|
+
* offset: string;
|
|
41
|
+
* partitionKey: string;
|
|
42
|
+
* sequenceNumber: number;
|
|
43
|
+
* };
|
|
44
|
+
* ```
|
|
45
|
+
* properties:
|
|
46
|
+
* - `partitionContext`: Metadata about the partition, including consumer group name and Event Hub path.
|
|
47
|
+
* - `consumerGroupName`: The name of the consumer group.
|
|
48
|
+
* - `eventHubPath`: The path of the Event Hub.
|
|
49
|
+
* - `enqueuedTimeUtc`: The UTC time when the event was enqueued, in ISO string format.
|
|
50
|
+
* - `offset`: The offset of the event in the partition.
|
|
51
|
+
* - `partitionKey`: The partition key of the event.
|
|
52
|
+
* - `sequenceNumber`: The sequence number of the event in the partition.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```ts
|
|
56
|
+
* const eventData: EventHubEventData = {
|
|
57
|
+
* partitionContext: {
|
|
58
|
+
* consumerGroupName: 'my-consumer-group',
|
|
59
|
+
* eventHubPath: 'my-event-hub',
|
|
60
|
+
* },
|
|
61
|
+
* enqueuedTimeUtc: '2023-10-01T12:00:00Z',
|
|
62
|
+
* offset: '12345',
|
|
63
|
+
* partitionKey: 'my-partition-key',
|
|
64
|
+
* sequenceNumber: 67890,
|
|
65
|
+
* };
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export type EventHubEventData = z.infer<typeof EventHubEventDataSchema>;
|
|
69
|
+
|
|
70
|
+
export type EventHubMessageBaseWrapper<PAYLOAD = unknown, PROPERTIES = undefined, SYSTEM_PROPERTIES = undefined> = {
|
|
71
|
+
payload: PAYLOAD;
|
|
72
|
+
} & (PROPERTIES extends undefined ? object : { properties: PROPERTIES }) &
|
|
73
|
+
(SYSTEM_PROPERTIES extends undefined ? object : { systemProperties: SYSTEM_PROPERTIES });
|
|
74
|
+
|
|
75
|
+
export type SafeWrapper<T, P> = ({ valid: true } & T) | ({ valid: false; error: unknown } & P);
|
|
76
|
+
|
|
77
|
+
export type SafeEventHubMessageWrapper<
|
|
78
|
+
PAYLOAD = unknown,
|
|
79
|
+
PROPERTIES = undefined,
|
|
80
|
+
SYSTEM_PROPERTIES = undefined,
|
|
81
|
+
> = SafeWrapper<
|
|
82
|
+
EventHubMessageBaseWrapper<PAYLOAD, PROPERTIES, SYSTEM_PROPERTIES>,
|
|
83
|
+
EventHubMessageBaseWrapper<unknown, unknown, unknown>
|
|
84
|
+
>;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Wrapper for Event Hub Messages, including payload, properties, system properties, and optionally the raw event data.
|
|
88
|
+
* It allows for flexible typing of the Message components. Can be used to strongly type the Message structure in handler methods.
|
|
89
|
+
*
|
|
90
|
+
* Type Parameters:
|
|
91
|
+
* - `PAYLOAD`: The type of the Message payload.
|
|
92
|
+
* - `PROPERTIES`: The type of the custom properties of the Message. If not provided, properties will be omitted.
|
|
93
|
+
* - `SYSTEM_PROPERTIES`: The type of the system properties of the Message. If not provided, system properties will be omitted.
|
|
94
|
+
* - `EVENT_DATA`: If set to true, includes the raw Event Hub event data in the wrapper.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* const eventPayloadSchema = z.object({ id: z.string(), value: z.number() });
|
|
99
|
+
* type EventPayload = z.infer<typeof eventPayloadSchema>;
|
|
100
|
+
*
|
|
101
|
+
* const eventPropertiesSchema = z.object({ source: z.string() });
|
|
102
|
+
* type EventProperties = z.infer<typeof eventPropertiesSchema>;
|
|
103
|
+
*
|
|
104
|
+
* type MyEventHubMessage = EventHubMessageWrapper<EventPayload, EventProperties, undefined, true>;
|
|
105
|
+
*/
|
|
106
|
+
export type EventHubMessageWrapper<
|
|
107
|
+
PAYLOAD = unknown,
|
|
108
|
+
PROPERTIES = undefined,
|
|
109
|
+
SYSTEM_PROPERTIES = undefined,
|
|
110
|
+
EVENT_DATA extends true | undefined = undefined,
|
|
111
|
+
> = SafeEventHubMessageWrapper<PAYLOAD, PROPERTIES, SYSTEM_PROPERTIES> &
|
|
112
|
+
(EVENT_DATA extends undefined ? object : { eventData: EventHubEventData });
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { injectable } from 'inversify';
|
|
2
|
+
import { HandlerArgsParseError } from 'shared';
|
|
3
|
+
import { z, ZodObject, ZodType } from 'zod';
|
|
4
|
+
import {
|
|
5
|
+
EventHubHandlerArgMetadata,
|
|
6
|
+
EventHubHandlerCardinality,
|
|
7
|
+
EventHubHandlerMessageArgMetadata,
|
|
8
|
+
} from './decorators';
|
|
9
|
+
import {
|
|
10
|
+
EventHubArgProvider,
|
|
11
|
+
EventHubArgProviderInput,
|
|
12
|
+
EventHubAsyncArgsProvider,
|
|
13
|
+
EventHubEventData,
|
|
14
|
+
EventHubEventDataSchema,
|
|
15
|
+
EventHubTriggerDefinitionError,
|
|
16
|
+
SafeWrapper,
|
|
17
|
+
} from './event-hub-handler.model';
|
|
18
|
+
import {
|
|
19
|
+
TriggerMetadataMany,
|
|
20
|
+
triggerMetadataManySchema,
|
|
21
|
+
TriggerMetadataOne,
|
|
22
|
+
triggerMetadataOneSchema,
|
|
23
|
+
} from './event-hub-trigger.model';
|
|
24
|
+
|
|
25
|
+
type EventHubUnknownMessageSchema = ZodObject<{
|
|
26
|
+
payload: ZodType<unknown>;
|
|
27
|
+
properties?: ZodType<unknown>;
|
|
28
|
+
systemProperties?: ZodType<unknown>;
|
|
29
|
+
eventData?: ZodType<EventHubEventData>;
|
|
30
|
+
}>;
|
|
31
|
+
|
|
32
|
+
@injectable()
|
|
33
|
+
export class EventHubTriggerSupportFactory {
|
|
34
|
+
buildArgProviders(
|
|
35
|
+
args: EventHubHandlerArgMetadata[],
|
|
36
|
+
cardinality?: EventHubHandlerCardinality,
|
|
37
|
+
): EventHubAsyncArgsProvider {
|
|
38
|
+
const argProviders: EventHubArgProvider[] = [];
|
|
39
|
+
for (const arg of args) {
|
|
40
|
+
switch (arg.type) {
|
|
41
|
+
case 'invocationContext':
|
|
42
|
+
argProviders.push(({ context }) => context);
|
|
43
|
+
break;
|
|
44
|
+
case 'message':
|
|
45
|
+
if (cardinality === 'many') {
|
|
46
|
+
throw new EventHubTriggerDefinitionError('Decorator "Message" is not allowed with cardinality "many"', {
|
|
47
|
+
details: {
|
|
48
|
+
arg,
|
|
49
|
+
cardinality,
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
argProviders.push(this.getMessageProvider(arg));
|
|
54
|
+
break;
|
|
55
|
+
case 'messages':
|
|
56
|
+
if (cardinality !== 'many') {
|
|
57
|
+
throw new EventHubTriggerDefinitionError('Decorator "Messages" is only allowed with cardinality "many"', {
|
|
58
|
+
details: {
|
|
59
|
+
arg,
|
|
60
|
+
cardinality,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
argProviders.push(this.getMessagesProvider(arg));
|
|
65
|
+
break;
|
|
66
|
+
case 'rawMessage':
|
|
67
|
+
if (cardinality === 'many') {
|
|
68
|
+
throw new EventHubTriggerDefinitionError('Decorator "RawMessage" is not allowed with cardinality "many"', {
|
|
69
|
+
details: {
|
|
70
|
+
arg,
|
|
71
|
+
cardinality,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
argProviders.push(({ messages }) => messages);
|
|
76
|
+
break;
|
|
77
|
+
case 'rawMessages':
|
|
78
|
+
if (cardinality !== 'many') {
|
|
79
|
+
throw new EventHubTriggerDefinitionError(
|
|
80
|
+
'Decorator "RawMessages" is only allowed with cardinality "many"',
|
|
81
|
+
{
|
|
82
|
+
details: {
|
|
83
|
+
arg,
|
|
84
|
+
cardinality,
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
argProviders.push(({ messages }) => messages);
|
|
90
|
+
break;
|
|
91
|
+
case 'undefined':
|
|
92
|
+
argProviders.push(() => undefined);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return this.getArgsProvider(argProviders);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
private getArgsProvider(argProviders: EventHubArgProvider[]): EventHubAsyncArgsProvider {
|
|
100
|
+
return async (messages, context) => {
|
|
101
|
+
return await Promise.allSettled(
|
|
102
|
+
argProviders.map(argProvider => {
|
|
103
|
+
const asyncArgProvider = async () => argProvider({ messages, context });
|
|
104
|
+
return asyncArgProvider();
|
|
105
|
+
}),
|
|
106
|
+
).then(results => {
|
|
107
|
+
const splitResults = results.reduce(
|
|
108
|
+
(aggregator, currentValue) => {
|
|
109
|
+
if (currentValue.status === 'fulfilled') {
|
|
110
|
+
aggregator.fulfilled.push(currentValue.value);
|
|
111
|
+
} else {
|
|
112
|
+
aggregator.rejected.push(currentValue.reason);
|
|
113
|
+
}
|
|
114
|
+
return aggregator;
|
|
115
|
+
},
|
|
116
|
+
{ fulfilled: new Array<unknown>(), rejected: new Array<unknown>() },
|
|
117
|
+
);
|
|
118
|
+
if (splitResults.rejected.length === 0) {
|
|
119
|
+
return splitResults.fulfilled;
|
|
120
|
+
} else {
|
|
121
|
+
throw new HandlerArgsParseError('Error parsing handler arguments', {
|
|
122
|
+
details: {
|
|
123
|
+
rejected: splitResults.rejected,
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
private getMessageProvider(
|
|
132
|
+
argMetadata: EventHubHandlerMessageArgMetadata,
|
|
133
|
+
): (input: EventHubArgProviderInput) => Promise<unknown> {
|
|
134
|
+
const extendedMessageSchema = this.provideExtendedMessageSchema(argMetadata);
|
|
135
|
+
return async (input): Promise<unknown> => {
|
|
136
|
+
const { context, messages: payload } = input;
|
|
137
|
+
let triggerMetadata: TriggerMetadataOne;
|
|
138
|
+
try {
|
|
139
|
+
triggerMetadata = triggerMetadataOneSchema.parse(context.triggerMetadata);
|
|
140
|
+
} catch (e) {
|
|
141
|
+
throw new HandlerArgsParseError('Error parsing trigger metadata', {
|
|
142
|
+
cause: e,
|
|
143
|
+
details: {
|
|
144
|
+
argMetadata,
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
return this.validateMessage(payload, triggerMetadata, extendedMessageSchema, argMetadata);
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
private validateMessage(
|
|
153
|
+
payload: unknown,
|
|
154
|
+
triggerMetadata: TriggerMetadataOne,
|
|
155
|
+
schema: EventHubUnknownMessageSchema,
|
|
156
|
+
argMetadata: EventHubHandlerMessageArgMetadata,
|
|
157
|
+
): SafeWrapper<unknown, unknown> {
|
|
158
|
+
const extendedMessage = {
|
|
159
|
+
payload,
|
|
160
|
+
properties: triggerMetadata.properties,
|
|
161
|
+
systemProperties: triggerMetadata.systemProperties,
|
|
162
|
+
eventData: {
|
|
163
|
+
partitionContext: triggerMetadata.partitionContext,
|
|
164
|
+
enqueuedTimeUtc: triggerMetadata.enqueuedTimeUtc,
|
|
165
|
+
offset: triggerMetadata.offset,
|
|
166
|
+
partitionKey: triggerMetadata.partitionKey,
|
|
167
|
+
sequenceNumber: triggerMetadata.sequenceNumber,
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
const safeParsed = schema.safeParse(extendedMessage);
|
|
171
|
+
if (!safeParsed.success) {
|
|
172
|
+
return {
|
|
173
|
+
valid: false,
|
|
174
|
+
error: new HandlerArgsParseError('Error parsing extended message', {
|
|
175
|
+
cause: safeParsed.error,
|
|
176
|
+
details: { argMetadata },
|
|
177
|
+
}),
|
|
178
|
+
...extendedMessage,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
valid: true,
|
|
183
|
+
...safeParsed.data,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
private getMessagesProvider(
|
|
188
|
+
argMetadata: EventHubHandlerMessageArgMetadata,
|
|
189
|
+
): (input: EventHubArgProviderInput) => unknown {
|
|
190
|
+
const extendedMessageSchema = this.provideExtendedMessageSchema(argMetadata);
|
|
191
|
+
return async ({ context, messages }): Promise<unknown> => {
|
|
192
|
+
if (!Array.isArray(messages)) {
|
|
193
|
+
throw new HandlerArgsParseError('Message should be an array for cardinality "many"', {
|
|
194
|
+
details: {
|
|
195
|
+
argMetadata,
|
|
196
|
+
cardinality: 'many',
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
let triggerMetadata: TriggerMetadataMany;
|
|
201
|
+
try {
|
|
202
|
+
triggerMetadata = triggerMetadataManySchema.parse(context.triggerMetadata);
|
|
203
|
+
} catch (e: unknown) {
|
|
204
|
+
throw new HandlerArgsParseError('Error parsing trigger metadata', {
|
|
205
|
+
cause: e,
|
|
206
|
+
details: {
|
|
207
|
+
argMetadata,
|
|
208
|
+
},
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
return messages.map((payload, index) => {
|
|
212
|
+
const triggerMetadataEntry = {
|
|
213
|
+
enqueuedTimeUtc: triggerMetadata.enqueuedTimeUtcArray[index]!,
|
|
214
|
+
offset: triggerMetadata.offsetArray[index]!,
|
|
215
|
+
partitionKey: triggerMetadata.partitionKeyArray[index]!,
|
|
216
|
+
sequenceNumber: triggerMetadata.sequenceNumberArray[index]!,
|
|
217
|
+
partitionContext: triggerMetadata.partitionContext,
|
|
218
|
+
properties: triggerMetadata.propertiesArray[index]!,
|
|
219
|
+
systemProperties: triggerMetadata.systemPropertiesArray[index]!,
|
|
220
|
+
};
|
|
221
|
+
return this.validateMessage(payload, triggerMetadataEntry, extendedMessageSchema, argMetadata);
|
|
222
|
+
});
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
private provideExtendedMessageSchema(argMetadata: EventHubHandlerMessageArgMetadata): EventHubUnknownMessageSchema {
|
|
227
|
+
return z.object({
|
|
228
|
+
payload: argMetadata.payloadSchema ?? z.unknown(),
|
|
229
|
+
...(argMetadata.propertiesSchema ? { properties: argMetadata.propertiesSchema } : {}),
|
|
230
|
+
...(argMetadata.systemPropertiesSchema ? { systemProperties: argMetadata.systemPropertiesSchema } : {}),
|
|
231
|
+
...(argMetadata.isEventData ? { eventData: EventHubEventDataSchema } : {}),
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
|
|
3
|
+
const partitionContextSchema = z.object({
|
|
4
|
+
fullyQualifiedNamespace: z.string(),
|
|
5
|
+
consumerGroup: z.string(),
|
|
6
|
+
eventHubName: z.string(),
|
|
7
|
+
partitionId: z.string(),
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
export type PartitionContext = z.infer<typeof partitionContextSchema>;
|
|
11
|
+
|
|
12
|
+
const triggerMetadataBaseSchema = z.object({
|
|
13
|
+
partitionContext: partitionContextSchema,
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export const triggerMetadataOneSchema = z.object({
|
|
17
|
+
...triggerMetadataBaseSchema.shape,
|
|
18
|
+
enqueuedTimeUtc: z.iso.datetime({ local: true }),
|
|
19
|
+
offset: z.int(),
|
|
20
|
+
partitionKey: z.string(),
|
|
21
|
+
sequenceNumber: z.int(),
|
|
22
|
+
properties: z.record(z.string(), z.any()),
|
|
23
|
+
systemProperties: z.record(z.string(), z.any()),
|
|
24
|
+
});
|
|
25
|
+
export type TriggerMetadataOne = z.infer<typeof triggerMetadataOneSchema>;
|
|
26
|
+
|
|
27
|
+
export const triggerMetadataManySchema = z.object({
|
|
28
|
+
...triggerMetadataBaseSchema.shape,
|
|
29
|
+
enqueuedTimeUtcArray: z.iso.datetime({ local: true }).array(),
|
|
30
|
+
offsetArray: z.int().array(),
|
|
31
|
+
partitionKeyArray: z.string().array(),
|
|
32
|
+
sequenceNumberArray: z.int().array(),
|
|
33
|
+
propertiesArray: z.record(z.string(), z.any()).array(),
|
|
34
|
+
systemPropertiesArray: z.record(z.string(), z.any()).array(),
|
|
35
|
+
});
|
|
36
|
+
export type TriggerMetadataMany = z.infer<typeof triggerMetadataManySchema>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { inject, injectable } from 'inversify';
|
|
2
|
+
import { LOGGER_FACTORY, LoggerFactory } from 'logger';
|
|
3
|
+
import { TriggerHandlerClass, TriggerHandlerMetadataError } from 'shared';
|
|
4
|
+
import { EventHubHandlerMetadata, EventHubTriggerMetadata } from './decorators/index';
|
|
5
|
+
import { EventHubHandlerMetadataReader } from './event-hub-handler-metadata.reader';
|
|
6
|
+
|
|
7
|
+
export interface EventhubTriggerRegistration {
|
|
8
|
+
triggerId: string;
|
|
9
|
+
triggerMethod: string;
|
|
10
|
+
handlerMetadata: EventHubHandlerMetadata;
|
|
11
|
+
triggerMetadata: EventHubTriggerMetadata;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type RegisterCallback = (triggerRegistration: EventhubTriggerRegistration) => void;
|
|
15
|
+
|
|
16
|
+
@injectable()
|
|
17
|
+
export class EventHubTriggersRegistrationService {
|
|
18
|
+
private readonly logger;
|
|
19
|
+
|
|
20
|
+
constructor(
|
|
21
|
+
@inject(LOGGER_FACTORY) loggerFactory: LoggerFactory,
|
|
22
|
+
private readonly metadataReader: EventHubHandlerMetadataReader,
|
|
23
|
+
) {
|
|
24
|
+
this.logger = loggerFactory();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
registerTriggers(handlerClass: TriggerHandlerClass, registerCallback: RegisterCallback): void {
|
|
28
|
+
const handlerMetadata = this.metadataReader.getHandlerClassMetadata(handlerClass);
|
|
29
|
+
const prototype = handlerClass.prototype;
|
|
30
|
+
this.logger.debug('Registering operations for event hub handler started', {
|
|
31
|
+
class: handlerClass.name,
|
|
32
|
+
metadata: handlerMetadata,
|
|
33
|
+
});
|
|
34
|
+
let operationsCount = 0;
|
|
35
|
+
for (const triggerMethod of Object.getOwnPropertyNames(prototype)) {
|
|
36
|
+
const triggerMetadata = this.getOperationMetadata(handlerClass, triggerMethod);
|
|
37
|
+
if (triggerMetadata === undefined) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const triggerId = triggerMetadata.triggerId ?? triggerMethod;
|
|
41
|
+
const triggerRegistration: EventhubTriggerRegistration = {
|
|
42
|
+
triggerId,
|
|
43
|
+
triggerMethod,
|
|
44
|
+
handlerMetadata: handlerMetadata,
|
|
45
|
+
triggerMetadata,
|
|
46
|
+
};
|
|
47
|
+
registerCallback(triggerRegistration);
|
|
48
|
+
operationsCount++;
|
|
49
|
+
this.logger.debug(
|
|
50
|
+
`Trigger ${triggerId} for method ${triggerMethod} in handler class ${handlerClass.name} registered`,
|
|
51
|
+
{
|
|
52
|
+
class: handlerClass.name,
|
|
53
|
+
...triggerRegistration,
|
|
54
|
+
},
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
this.logger.verbose(`${operationsCount} operation(s) for handler ${handlerClass.name} registered`);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private getOperationMetadata(
|
|
61
|
+
handlerClass: TriggerHandlerClass,
|
|
62
|
+
handlerMethod: string,
|
|
63
|
+
): EventHubTriggerMetadata | undefined {
|
|
64
|
+
try {
|
|
65
|
+
return this.metadataReader.getTriggerMetadata(handlerClass, handlerMethod);
|
|
66
|
+
} catch (error) {
|
|
67
|
+
// if Azure Function class is not EventHub Handler
|
|
68
|
+
if (error instanceof TriggerHandlerMetadataError) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ContainerModule } from 'inversify';
|
|
2
|
+
import { TRIGGER_HANDLER_REGISTRATION_SERVICE } from 'shared';
|
|
3
|
+
import { EVENT_HUB_HANDLER_TYPE } from './decorators';
|
|
4
|
+
import { EventHubHandlerMetadataReader } from './event-hub-handler-metadata.reader';
|
|
5
|
+
import { EventHubHandlerRegistrationService } from './event-hub-handler-registration.service';
|
|
6
|
+
import { EventHubHandlerFactory } from './event-hub-handler.factory';
|
|
7
|
+
import { EventHubTriggerSupportFactory } from './event-hub-trigger-support.factory';
|
|
8
|
+
import { EventHubTriggersRegistrationService } from './event-hub-triggers-registration.service';
|
|
9
|
+
|
|
10
|
+
export * from './decorators';
|
|
11
|
+
export { EventHubMessageWrapper } from './event-hub-handler.model';
|
|
12
|
+
|
|
13
|
+
export const EventHubHandlersModule = new ContainerModule(({ bind }) => {
|
|
14
|
+
bind(EventHubTriggerSupportFactory).toSelf();
|
|
15
|
+
bind(EventHubHandlerMetadataReader).toSelf();
|
|
16
|
+
bind(EventHubHandlerFactory).toSelf();
|
|
17
|
+
bind(TRIGGER_HANDLER_REGISTRATION_SERVICE).to(EventHubHandlerRegistrationService).whenNamed(EVENT_HUB_HANDLER_TYPE);
|
|
18
|
+
bind(EventHubTriggersRegistrationService).toSelf();
|
|
19
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EventHubHandlersModule } from 'event-hub-handler';
|
|
2
|
+
import { HttpControllerModule } from 'http-controller';
|
|
3
|
+
import { Container } from 'inversify';
|
|
4
|
+
import { LOGGER_FACTORY, LoggerConfiguration } from 'logger';
|
|
5
|
+
import { PlatformModule } from 'platform';
|
|
6
|
+
import { PLATFORM_CONTAINER, SharedModule } from 'shared';
|
|
7
|
+
import * as winston from 'winston';
|
|
8
|
+
import { bindLoggerFactory } from './logger/bindings';
|
|
9
|
+
import { providePlatformContainer } from './platform.container';
|
|
10
|
+
|
|
11
|
+
export function createContainers(loggerConfiguration?: LoggerConfiguration): {
|
|
12
|
+
frameworkContainer: Container;
|
|
13
|
+
platformContainer: Container;
|
|
14
|
+
} {
|
|
15
|
+
const frameworkContainer = new Container({
|
|
16
|
+
defaultScope: 'Singleton',
|
|
17
|
+
});
|
|
18
|
+
frameworkContainer.loadSync(SharedModule, PlatformModule, HttpControllerModule, EventHubHandlersModule);
|
|
19
|
+
const platformContainer = providePlatformContainer(loggerConfiguration);
|
|
20
|
+
frameworkContainer.bind(PLATFORM_CONTAINER).toConstantValue(platformContainer);
|
|
21
|
+
frameworkContainer.bind(winston.Logger).toDynamicValue(() => platformContainer.get(winston.Logger));
|
|
22
|
+
frameworkContainer.bind(LOGGER_FACTORY).toDynamicValue(context => bindLoggerFactory(context));
|
|
23
|
+
return { frameworkContainer, platformContainer };
|
|
24
|
+
}
|