omnibase_infra 0.2.1__py3-none-any.whl
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.
- omnibase_infra/__init__.py +101 -0
- omnibase_infra/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +261 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +138 -0
- omnibase_infra/decorators/__init__.py +29 -0
- omnibase_infra/decorators/allow_any.py +109 -0
- omnibase_infra/dlq/__init__.py +90 -0
- omnibase_infra/dlq/constants_dlq.py +57 -0
- omnibase_infra/dlq/models/__init__.py +26 -0
- omnibase_infra/dlq/models/enum_replay_status.py +37 -0
- omnibase_infra/dlq/models/model_dlq_replay_record.py +135 -0
- omnibase_infra/dlq/models/model_dlq_tracking_config.py +184 -0
- omnibase_infra/dlq/service_dlq_tracking.py +611 -0
- omnibase_infra/enums/__init__.py +123 -0
- omnibase_infra/enums/enum_any_type_violation.py +104 -0
- omnibase_infra/enums/enum_backend_type.py +27 -0
- omnibase_infra/enums/enum_capture_outcome.py +42 -0
- omnibase_infra/enums/enum_capture_state.py +88 -0
- omnibase_infra/enums/enum_chain_violation_type.py +119 -0
- omnibase_infra/enums/enum_circuit_state.py +51 -0
- omnibase_infra/enums/enum_confirmation_event_type.py +27 -0
- omnibase_infra/enums/enum_contract_type.py +84 -0
- omnibase_infra/enums/enum_dedupe_strategy.py +46 -0
- omnibase_infra/enums/enum_dispatch_status.py +191 -0
- omnibase_infra/enums/enum_environment.py +46 -0
- omnibase_infra/enums/enum_execution_shape_violation.py +103 -0
- omnibase_infra/enums/enum_handler_error_type.py +101 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -0
- omnibase_infra/enums/enum_handler_source_type.py +87 -0
- omnibase_infra/enums/enum_handler_type.py +77 -0
- omnibase_infra/enums/enum_handler_type_category.py +61 -0
- omnibase_infra/enums/enum_infra_transport_type.py +73 -0
- omnibase_infra/enums/enum_introspection_reason.py +154 -0
- omnibase_infra/enums/enum_message_category.py +213 -0
- omnibase_infra/enums/enum_node_archetype.py +74 -0
- omnibase_infra/enums/enum_node_output_type.py +185 -0
- omnibase_infra/enums/enum_non_retryable_error_category.py +224 -0
- omnibase_infra/enums/enum_policy_type.py +32 -0
- omnibase_infra/enums/enum_registration_state.py +261 -0
- omnibase_infra/enums/enum_registration_status.py +33 -0
- omnibase_infra/enums/enum_registry_response_status.py +28 -0
- omnibase_infra/enums/enum_response_status.py +26 -0
- omnibase_infra/enums/enum_retry_error_category.py +98 -0
- omnibase_infra/enums/enum_security_rule_id.py +103 -0
- omnibase_infra/enums/enum_selection_strategy.py +91 -0
- omnibase_infra/enums/enum_topic_standard.py +42 -0
- omnibase_infra/enums/enum_validation_severity.py +78 -0
- omnibase_infra/errors/__init__.py +156 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +92 -0
- omnibase_infra/errors/error_consul.py +132 -0
- omnibase_infra/errors/error_container_wiring.py +243 -0
- omnibase_infra/errors/error_event_bus_registry.py +102 -0
- omnibase_infra/errors/error_infra.py +608 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +112 -0
- omnibase_infra/errors/error_vault.py +123 -0
- omnibase_infra/event_bus/__init__.py +72 -0
- omnibase_infra/event_bus/configs/kafka_event_bus_config.yaml +86 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +743 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1658 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +184 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +765 -0
- omnibase_infra/event_bus/models/__init__.py +29 -0
- omnibase_infra/event_bus/models/config/__init__.py +20 -0
- omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +725 -0
- omnibase_infra/event_bus/models/model_dlq_event.py +206 -0
- omnibase_infra/event_bus/models/model_dlq_metrics.py +304 -0
- omnibase_infra/event_bus/models/model_event_headers.py +115 -0
- omnibase_infra/event_bus/models/model_event_message.py +60 -0
- omnibase_infra/event_bus/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +75 -0
- omnibase_infra/handlers/filesystem/__init__.py +48 -0
- omnibase_infra/handlers/filesystem/enum_file_system_operation.py +35 -0
- omnibase_infra/handlers/filesystem/model_file_system_request.py +298 -0
- omnibase_infra/handlers/filesystem/model_file_system_result.py +166 -0
- omnibase_infra/handlers/handler_consul.py +787 -0
- omnibase_infra/handlers/handler_db.py +1039 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +1154 -0
- omnibase_infra/handlers/handler_http.py +920 -0
- omnibase_infra/handlers/handler_manifest_persistence.contract.yaml +184 -0
- omnibase_infra/handlers/handler_manifest_persistence.py +1539 -0
- omnibase_infra/handlers/handler_mcp.py +748 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +422 -0
- omnibase_infra/handlers/mcp/__init__.py +19 -0
- omnibase_infra/handlers/mcp/adapter_onex_to_mcp.py +446 -0
- omnibase_infra/handlers/mcp/protocols.py +178 -0
- omnibase_infra/handlers/mcp/transport_streamable_http.py +352 -0
- omnibase_infra/handlers/mixins/__init__.py +42 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +337 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +277 -0
- omnibase_infra/handlers/mixins/mixin_vault_initialization.py +338 -0
- omnibase_infra/handlers/mixins/mixin_vault_retry.py +412 -0
- omnibase_infra/handlers/mixins/mixin_vault_secrets.py +450 -0
- omnibase_infra/handlers/mixins/mixin_vault_token.py +365 -0
- omnibase_infra/handlers/models/__init__.py +286 -0
- omnibase_infra/handlers/models/consul/__init__.py +81 -0
- omnibase_infra/handlers/models/consul/enum_consul_operation_type.py +57 -0
- omnibase_infra/handlers/models/consul/model_consul_deregister_payload.py +51 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_config.py +153 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_payload.py +89 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_found_payload.py +55 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_not_found_payload.py +49 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_recurse_payload.py +50 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_item.py +33 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_put_payload.py +41 -0
- omnibase_infra/handlers/models/consul/model_consul_register_payload.py +53 -0
- omnibase_infra/handlers/models/consul/model_consul_retry_config.py +66 -0
- omnibase_infra/handlers/models/consul/model_payload_consul.py +66 -0
- omnibase_infra/handlers/models/consul/registry_payload_consul.py +214 -0
- omnibase_infra/handlers/models/graph/__init__.py +35 -0
- omnibase_infra/handlers/models/graph/enum_graph_operation_type.py +20 -0
- omnibase_infra/handlers/models/graph/model_graph_execute_payload.py +38 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_config.py +54 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_payload.py +44 -0
- omnibase_infra/handlers/models/graph/model_graph_query_payload.py +40 -0
- omnibase_infra/handlers/models/graph/model_graph_record.py +22 -0
- omnibase_infra/handlers/models/http/__init__.py +50 -0
- omnibase_infra/handlers/models/http/enum_http_operation_type.py +29 -0
- omnibase_infra/handlers/models/http/model_http_body_content.py +45 -0
- omnibase_infra/handlers/models/http/model_http_get_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_http_handler_payload.py +90 -0
- omnibase_infra/handlers/models/http/model_http_post_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_payload_http.py +66 -0
- omnibase_infra/handlers/models/http/registry_payload_http.py +212 -0
- omnibase_infra/handlers/models/mcp/__init__.py +23 -0
- omnibase_infra/handlers/models/mcp/enum_mcp_operation_type.py +24 -0
- omnibase_infra/handlers/models/mcp/model_mcp_handler_config.py +40 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_call.py +32 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_result.py +45 -0
- omnibase_infra/handlers/models/model_consul_handler_response.py +96 -0
- omnibase_infra/handlers/models/model_db_describe_response.py +83 -0
- omnibase_infra/handlers/models/model_db_query_payload.py +95 -0
- omnibase_infra/handlers/models/model_db_query_response.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_config.py +98 -0
- omnibase_infra/handlers/models/model_filesystem_delete_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_delete_result.py +77 -0
- omnibase_infra/handlers/models/model_filesystem_directory_entry.py +75 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_result.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_payload.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_result.py +68 -0
- omnibase_infra/handlers/models/model_filesystem_read_payload.py +62 -0
- omnibase_infra/handlers/models/model_filesystem_read_result.py +61 -0
- omnibase_infra/handlers/models/model_filesystem_write_payload.py +70 -0
- omnibase_infra/handlers/models/model_filesystem_write_result.py +55 -0
- omnibase_infra/handlers/models/model_graph_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_handler_response.py +103 -0
- omnibase_infra/handlers/models/model_http_handler_response.py +101 -0
- omnibase_infra/handlers/models/model_manifest_metadata.py +75 -0
- omnibase_infra/handlers/models/model_manifest_persistence_config.py +62 -0
- omnibase_infra/handlers/models/model_manifest_query_payload.py +90 -0
- omnibase_infra/handlers/models/model_manifest_query_result.py +97 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_payload.py +44 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_result.py +98 -0
- omnibase_infra/handlers/models/model_manifest_store_payload.py +47 -0
- omnibase_infra/handlers/models/model_manifest_store_result.py +67 -0
- omnibase_infra/handlers/models/model_operation_context.py +187 -0
- omnibase_infra/handlers/models/model_qdrant_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_retry_state.py +162 -0
- omnibase_infra/handlers/models/model_vault_handler_response.py +98 -0
- omnibase_infra/handlers/models/qdrant/__init__.py +44 -0
- omnibase_infra/handlers/models/qdrant/enum_qdrant_operation_type.py +26 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_collection_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_delete_payload.py +36 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_config.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_payload.py +54 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_result.py +30 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_upsert_payload.py +36 -0
- omnibase_infra/handlers/models/vault/__init__.py +69 -0
- omnibase_infra/handlers/models/vault/enum_vault_operation_type.py +35 -0
- omnibase_infra/handlers/models/vault/model_payload_vault.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_delete_payload.py +57 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_config.py +148 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_payload.py +101 -0
- omnibase_infra/handlers/models/vault/model_vault_list_payload.py +58 -0
- omnibase_infra/handlers/models/vault/model_vault_renew_token_payload.py +67 -0
- omnibase_infra/handlers/models/vault/model_vault_retry_config.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_secret_payload.py +106 -0
- omnibase_infra/handlers/models/vault/model_vault_write_payload.py +66 -0
- omnibase_infra/handlers/models/vault/registry_payload_vault.py +213 -0
- omnibase_infra/handlers/registration_storage/__init__.py +43 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_mock.py +392 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +915 -0
- omnibase_infra/handlers/registration_storage/models/__init__.py +23 -0
- omnibase_infra/handlers/registration_storage/models/model_delete_registration_request.py +58 -0
- omnibase_infra/handlers/registration_storage/models/model_update_registration_request.py +73 -0
- omnibase_infra/handlers/registration_storage/protocol_registration_persistence.py +191 -0
- omnibase_infra/handlers/service_discovery/__init__.py +43 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_consul.py +747 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_mock.py +258 -0
- omnibase_infra/handlers/service_discovery/models/__init__.py +22 -0
- omnibase_infra/handlers/service_discovery/models/model_discovery_result.py +64 -0
- omnibase_infra/handlers/service_discovery/models/model_registration_result.py +138 -0
- omnibase_infra/handlers/service_discovery/models/model_service_info.py +99 -0
- omnibase_infra/handlers/service_discovery/protocol_discovery_operations.py +170 -0
- omnibase_infra/idempotency/__init__.py +94 -0
- omnibase_infra/idempotency/models/__init__.py +43 -0
- omnibase_infra/idempotency/models/model_idempotency_check_result.py +85 -0
- omnibase_infra/idempotency/models/model_idempotency_guard_config.py +130 -0
- omnibase_infra/idempotency/models/model_idempotency_record.py +86 -0
- omnibase_infra/idempotency/models/model_idempotency_store_health_check_result.py +81 -0
- omnibase_infra/idempotency/models/model_idempotency_store_metrics.py +140 -0
- omnibase_infra/idempotency/models/model_postgres_idempotency_store_config.py +299 -0
- omnibase_infra/idempotency/protocol_idempotency_store.py +184 -0
- omnibase_infra/idempotency/store_inmemory.py +265 -0
- omnibase_infra/idempotency/store_postgres.py +923 -0
- omnibase_infra/infrastructure/__init__.py +0 -0
- omnibase_infra/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +655 -0
- omnibase_infra/mixins/mixin_dict_like_accessors.py +146 -0
- omnibase_infra/mixins/mixin_envelope_extraction.py +119 -0
- omnibase_infra/mixins/mixin_node_introspection.py +2465 -0
- omnibase_infra/mixins/mixin_retry_execution.py +386 -0
- omnibase_infra/mixins/protocol_circuit_breaker_aware.py +133 -0
- omnibase_infra/models/__init__.py +136 -0
- omnibase_infra/models/corpus/__init__.py +17 -0
- omnibase_infra/models/corpus/model_capture_config.py +133 -0
- omnibase_infra/models/corpus/model_capture_result.py +86 -0
- omnibase_infra/models/discovery/__init__.py +42 -0
- omnibase_infra/models/discovery/model_dependency_spec.py +319 -0
- omnibase_infra/models/discovery/model_discovered_capabilities.py +50 -0
- omnibase_infra/models/discovery/model_introspection_config.py +311 -0
- omnibase_infra/models/discovery/model_introspection_performance_metrics.py +169 -0
- omnibase_infra/models/discovery/model_introspection_task_config.py +116 -0
- omnibase_infra/models/dispatch/__init__.py +147 -0
- omnibase_infra/models/dispatch/model_dispatch_context.py +439 -0
- omnibase_infra/models/dispatch/model_dispatch_error.py +336 -0
- omnibase_infra/models/dispatch/model_dispatch_log_context.py +400 -0
- omnibase_infra/models/dispatch/model_dispatch_metadata.py +228 -0
- omnibase_infra/models/dispatch/model_dispatch_metrics.py +496 -0
- omnibase_infra/models/dispatch/model_dispatch_outcome.py +317 -0
- omnibase_infra/models/dispatch/model_dispatch_outputs.py +231 -0
- omnibase_infra/models/dispatch/model_dispatch_result.py +436 -0
- omnibase_infra/models/dispatch/model_dispatch_route.py +279 -0
- omnibase_infra/models/dispatch/model_dispatcher_metrics.py +275 -0
- omnibase_infra/models/dispatch/model_dispatcher_registration.py +352 -0
- omnibase_infra/models/dispatch/model_parsed_topic.py +135 -0
- omnibase_infra/models/dispatch/model_topic_parser.py +725 -0
- omnibase_infra/models/dispatch/model_tracing_context.py +285 -0
- omnibase_infra/models/errors/__init__.py +45 -0
- omnibase_infra/models/errors/model_handler_validation_error.py +594 -0
- omnibase_infra/models/errors/model_infra_error_context.py +99 -0
- omnibase_infra/models/errors/model_message_type_registry_error_context.py +71 -0
- omnibase_infra/models/errors/model_timeout_error_context.py +110 -0
- omnibase_infra/models/handlers/__init__.py +37 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +80 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +185 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
- omnibase_infra/models/health/__init__.py +9 -0
- omnibase_infra/models/health/model_health_check_result.py +40 -0
- omnibase_infra/models/lifecycle/__init__.py +39 -0
- omnibase_infra/models/logging/__init__.py +51 -0
- omnibase_infra/models/logging/model_log_context.py +756 -0
- omnibase_infra/models/model_retry_error_classification.py +78 -0
- omnibase_infra/models/projection/__init__.py +43 -0
- omnibase_infra/models/projection/model_capability_fields.py +112 -0
- omnibase_infra/models/projection/model_registration_projection.py +434 -0
- omnibase_infra/models/projection/model_registration_snapshot.py +322 -0
- omnibase_infra/models/projection/model_sequence_info.py +182 -0
- omnibase_infra/models/projection/model_snapshot_topic_config.py +590 -0
- omnibase_infra/models/projectors/__init__.py +41 -0
- omnibase_infra/models/projectors/model_projector_column.py +289 -0
- omnibase_infra/models/projectors/model_projector_discovery_result.py +65 -0
- omnibase_infra/models/projectors/model_projector_index.py +270 -0
- omnibase_infra/models/projectors/model_projector_schema.py +415 -0
- omnibase_infra/models/projectors/model_projector_validation_error.py +63 -0
- omnibase_infra/models/projectors/util_sql_identifiers.py +115 -0
- omnibase_infra/models/registration/__init__.py +59 -0
- omnibase_infra/models/registration/commands/__init__.py +15 -0
- omnibase_infra/models/registration/commands/model_node_registration_acked.py +108 -0
- omnibase_infra/models/registration/events/__init__.py +56 -0
- omnibase_infra/models/registration/events/model_node_became_active.py +103 -0
- omnibase_infra/models/registration/events/model_node_liveness_expired.py +103 -0
- omnibase_infra/models/registration/events/model_node_registration_accepted.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_received.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_timed_out.py +112 -0
- omnibase_infra/models/registration/events/model_node_registration_initiated.py +107 -0
- omnibase_infra/models/registration/events/model_node_registration_rejected.py +104 -0
- omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +179 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +175 -0
- omnibase_infra/models/registration/model_node_metadata.py +79 -0
- omnibase_infra/models/registration/model_node_registration.py +162 -0
- omnibase_infra/models/registration/model_node_registration_record.py +162 -0
- omnibase_infra/models/registry/__init__.py +29 -0
- omnibase_infra/models/registry/model_domain_constraint.py +202 -0
- omnibase_infra/models/registry/model_message_type_entry.py +271 -0
- omnibase_infra/models/resilience/__init__.py +9 -0
- omnibase_infra/models/resilience/model_circuit_breaker_config.py +227 -0
- omnibase_infra/models/routing/__init__.py +25 -0
- omnibase_infra/models/routing/model_routing_entry.py +52 -0
- omnibase_infra/models/routing/model_routing_subcontract.py +70 -0
- omnibase_infra/models/runtime/__init__.py +40 -0
- omnibase_infra/models/runtime/model_contract_security_config.py +41 -0
- omnibase_infra/models/runtime/model_discovery_error.py +81 -0
- omnibase_infra/models/runtime/model_discovery_result.py +162 -0
- omnibase_infra/models/runtime/model_discovery_warning.py +74 -0
- omnibase_infra/models/runtime/model_failed_plugin_load.py +63 -0
- omnibase_infra/models/runtime/model_handler_contract.py +280 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +120 -0
- omnibase_infra/models/runtime/model_plugin_load_context.py +93 -0
- omnibase_infra/models/runtime/model_plugin_load_summary.py +124 -0
- omnibase_infra/models/security/__init__.py +50 -0
- omnibase_infra/models/security/classification_levels.py +99 -0
- omnibase_infra/models/security/model_environment_policy.py +145 -0
- omnibase_infra/models/security/model_handler_security_policy.py +107 -0
- omnibase_infra/models/security/model_security_error.py +81 -0
- omnibase_infra/models/security/model_security_validation_result.py +328 -0
- omnibase_infra/models/security/model_security_warning.py +67 -0
- omnibase_infra/models/snapshot/__init__.py +27 -0
- omnibase_infra/models/snapshot/model_field_change.py +65 -0
- omnibase_infra/models/snapshot/model_snapshot.py +270 -0
- omnibase_infra/models/snapshot/model_snapshot_diff.py +203 -0
- omnibase_infra/models/snapshot/model_subject_ref.py +81 -0
- omnibase_infra/models/types/__init__.py +71 -0
- omnibase_infra/models/validation/__init__.py +89 -0
- omnibase_infra/models/validation/model_any_type_validation_result.py +118 -0
- omnibase_infra/models/validation/model_any_type_violation.py +141 -0
- omnibase_infra/models/validation/model_category_match_result.py +345 -0
- omnibase_infra/models/validation/model_chain_violation.py +166 -0
- omnibase_infra/models/validation/model_coverage_metrics.py +316 -0
- omnibase_infra/models/validation/model_execution_shape_rule.py +159 -0
- omnibase_infra/models/validation/model_execution_shape_validation.py +208 -0
- omnibase_infra/models/validation/model_execution_shape_validation_result.py +294 -0
- omnibase_infra/models/validation/model_execution_shape_violation.py +122 -0
- omnibase_infra/models/validation/model_localhandler_validation_result.py +139 -0
- omnibase_infra/models/validation/model_localhandler_violation.py +100 -0
- omnibase_infra/models/validation/model_output_validation_params.py +74 -0
- omnibase_infra/models/validation/model_validate_and_raise_params.py +84 -0
- omnibase_infra/models/validation/model_validation_error_params.py +84 -0
- omnibase_infra/models/validation/model_validation_outcome.py +287 -0
- omnibase_infra/nodes/__init__.py +48 -0
- omnibase_infra/nodes/architecture_validator/__init__.py +79 -0
- omnibase_infra/nodes/architecture_validator/contract.yaml +252 -0
- omnibase_infra/nodes/architecture_validator/contract_architecture_validator.yaml +208 -0
- omnibase_infra/nodes/architecture_validator/mixins/__init__.py +16 -0
- omnibase_infra/nodes/architecture_validator/mixins/mixin_file_path_rule.py +92 -0
- omnibase_infra/nodes/architecture_validator/models/__init__.py +36 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_request.py +56 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_result.py +311 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_violation.py +163 -0
- omnibase_infra/nodes/architecture_validator/models/model_rule_check_result.py +265 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_request.py +105 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_result.py +314 -0
- omnibase_infra/nodes/architecture_validator/node.py +262 -0
- omnibase_infra/nodes/architecture_validator/node_architecture_validator.py +383 -0
- omnibase_infra/nodes/architecture_validator/protocols/__init__.py +9 -0
- omnibase_infra/nodes/architecture_validator/protocols/protocol_architecture_rule.py +225 -0
- omnibase_infra/nodes/architecture_validator/registry/__init__.py +28 -0
- omnibase_infra/nodes/architecture_validator/registry/registry_infra_architecture_validator.py +99 -0
- omnibase_infra/nodes/architecture_validator/validators/__init__.py +104 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_direct_dispatch.py +422 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_handler_publishing.py +481 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_orchestrator_fsm.py +491 -0
- omnibase_infra/nodes/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +172 -0
- omnibase_infra/nodes/effects/models/__init__.py +32 -0
- omnibase_infra/nodes/effects/models/model_backend_result.py +190 -0
- omnibase_infra/nodes/effects/models/model_effect_idempotency_config.py +92 -0
- omnibase_infra/nodes/effects/models/model_registry_request.py +132 -0
- omnibase_infra/nodes/effects/models/model_registry_response.py +263 -0
- omnibase_infra/nodes/effects/protocol_consul_client.py +89 -0
- omnibase_infra/nodes/effects/protocol_effect_idempotency_store.py +143 -0
- omnibase_infra/nodes/effects/protocol_postgres_adapter.py +96 -0
- omnibase_infra/nodes/effects/registry_effect.py +525 -0
- omnibase_infra/nodes/effects/store_effect_idempotency_inmemory.py +425 -0
- omnibase_infra/nodes/node_registration_orchestrator/README.md +542 -0
- omnibase_infra/nodes/node_registration_orchestrator/__init__.py +120 -0
- omnibase_infra/nodes/node_registration_orchestrator/contract.yaml +475 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/__init__.py +53 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_introspected.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_registration_acked.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_runtime_tick.py +373 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/__init__.py +62 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_heartbeat.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_introspected.py +609 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_registration_acked.py +458 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_runtime_tick.py +364 -0
- omnibase_infra/nodes/node_registration_orchestrator/introspection_event_router.py +544 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/__init__.py +75 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_intent_payload.py +194 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_registration_intent.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_intent_execution_result.py +50 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_node_liveness_expired.py +107 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_config.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_input.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_output.py +166 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_intent_payload.py +235 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_upsert_intent.py +68 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_execution_result.py +384 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_state.py +60 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registration_intent.py +177 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registry_intent.py +247 -0
- omnibase_infra/nodes/node_registration_orchestrator/node.py +195 -0
- omnibase_infra/nodes/node_registration_orchestrator/plugin.py +909 -0
- omnibase_infra/nodes/node_registration_orchestrator/protocols.py +439 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +525 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +392 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +742 -0
- omnibase_infra/nodes/node_registration_reducer/__init__.py +15 -0
- omnibase_infra/nodes/node_registration_reducer/contract.yaml +301 -0
- omnibase_infra/nodes/node_registration_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/node_registration_reducer/models/model_validation_result.py +113 -0
- omnibase_infra/nodes/node_registration_reducer/node.py +139 -0
- omnibase_infra/nodes/node_registration_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_registration_reducer/registry/registry_infra_node_registration_reducer.py +79 -0
- omnibase_infra/nodes/node_registration_storage_effect/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_storage_effect/contract.yaml +225 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/__init__.py +44 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_delete_result.py +132 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_record.py +199 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_update.py +155 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_details.py +123 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_result.py +117 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_query.py +100 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_result.py +136 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_upsert_result.py +127 -0
- omnibase_infra/nodes/node_registration_storage_effect/node.py +109 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/__init__.py +22 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/protocol_registration_persistence.py +333 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/__init__.py +23 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/registry_infra_registration_storage.py +194 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +682 -0
- omnibase_infra/nodes/node_registry_effect/handlers/__init__.py +70 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_deregister.py +211 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_register.py +212 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_partial_retry.py +416 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_deactivate.py +215 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_upsert.py +208 -0
- omnibase_infra/nodes/node_registry_effect/models/__init__.py +43 -0
- omnibase_infra/nodes/node_registry_effect/models/model_partial_retry_request.py +92 -0
- omnibase_infra/nodes/node_registry_effect/node.py +165 -0
- omnibase_infra/nodes/node_registry_effect/registry/__init__.py +27 -0
- omnibase_infra/nodes/node_registry_effect/registry/registry_infra_registry_effect.py +196 -0
- omnibase_infra/nodes/node_service_discovery_effect/__init__.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/contract.yaml +246 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/__init__.py +67 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_health_status.py +72 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_service_discovery_operation.py +58 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_query.py +99 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_result.py +98 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_health_check_config.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_query_metadata.py +63 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_registration_result.py +130 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_details.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_result.py +119 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_info.py +106 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_registration.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/node.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/__init__.py +14 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/protocol_discovery_operations.py +279 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/__init__.py +13 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/registry_infra_service_discovery.py +214 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +32 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +76 -0
- omnibase_infra/nodes/reducers/models/model_payload_postgres_upsert_registration.py +60 -0
- omnibase_infra/nodes/reducers/models/model_registration_confirmation.py +166 -0
- omnibase_infra/nodes/reducers/models/model_registration_state.py +433 -0
- omnibase_infra/nodes/reducers/registration_reducer.py +1137 -0
- omnibase_infra/observability/__init__.py +143 -0
- omnibase_infra/observability/constants_metrics.py +91 -0
- omnibase_infra/observability/factory_observability_sink.py +525 -0
- omnibase_infra/observability/handlers/__init__.py +118 -0
- omnibase_infra/observability/handlers/handler_logging_structured.py +967 -0
- omnibase_infra/observability/handlers/handler_metrics_prometheus.py +1120 -0
- omnibase_infra/observability/handlers/model_logging_handler_config.py +71 -0
- omnibase_infra/observability/handlers/model_logging_handler_response.py +77 -0
- omnibase_infra/observability/handlers/model_metrics_handler_config.py +172 -0
- omnibase_infra/observability/handlers/model_metrics_handler_payload.py +135 -0
- omnibase_infra/observability/handlers/model_metrics_handler_response.py +101 -0
- omnibase_infra/observability/hooks/__init__.py +74 -0
- omnibase_infra/observability/hooks/hook_observability.py +1223 -0
- omnibase_infra/observability/models/__init__.py +30 -0
- omnibase_infra/observability/models/enum_required_log_context_key.py +77 -0
- omnibase_infra/observability/models/model_buffered_log_entry.py +117 -0
- omnibase_infra/observability/models/model_logging_sink_config.py +73 -0
- omnibase_infra/observability/models/model_metrics_sink_config.py +156 -0
- omnibase_infra/observability/sinks/__init__.py +69 -0
- omnibase_infra/observability/sinks/sink_logging_structured.py +809 -0
- omnibase_infra/observability/sinks/sink_metrics_prometheus.py +710 -0
- omnibase_infra/plugins/__init__.py +27 -0
- omnibase_infra/plugins/examples/__init__.py +28 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer.py +271 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer_error_handling.py +210 -0
- omnibase_infra/plugins/models/__init__.py +21 -0
- omnibase_infra/plugins/models/model_plugin_context.py +76 -0
- omnibase_infra/plugins/models/model_plugin_input_data.py +58 -0
- omnibase_infra/plugins/models/model_plugin_output_data.py +62 -0
- omnibase_infra/plugins/plugin_compute_base.py +435 -0
- omnibase_infra/projectors/__init__.py +30 -0
- omnibase_infra/projectors/contracts/__init__.py +63 -0
- omnibase_infra/projectors/contracts/registration_projector.yaml +370 -0
- omnibase_infra/projectors/projection_reader_registration.py +1559 -0
- omnibase_infra/projectors/snapshot_publisher_registration.py +1329 -0
- omnibase_infra/protocols/__init__.py +99 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -0
- omnibase_infra/protocols/protocol_event_bus_like.py +127 -0
- omnibase_infra/protocols/protocol_event_projector.py +96 -0
- omnibase_infra/protocols/protocol_idempotency_store.py +142 -0
- omnibase_infra/protocols/protocol_message_dispatcher.py +247 -0
- omnibase_infra/protocols/protocol_message_type_registry.py +306 -0
- omnibase_infra/protocols/protocol_plugin_compute.py +368 -0
- omnibase_infra/protocols/protocol_projector_schema_validator.py +82 -0
- omnibase_infra/protocols/protocol_registry_metrics.py +215 -0
- omnibase_infra/protocols/protocol_snapshot_publisher.py +396 -0
- omnibase_infra/protocols/protocol_snapshot_store.py +567 -0
- omnibase_infra/runtime/__init__.py +296 -0
- omnibase_infra/runtime/binding_config_resolver.py +2706 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/contract_handler_discovery.py +582 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +42 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
- omnibase_infra/runtime/enums/__init__.py +18 -0
- omnibase_infra/runtime/enums/enum_config_ref_scheme.py +33 -0
- omnibase_infra/runtime/enums/enum_scheduler_status.py +170 -0
- omnibase_infra/runtime/envelope_validator.py +179 -0
- omnibase_infra/runtime/handler_contract_source.py +669 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2029 -0
- omnibase_infra/runtime/handler_registry.py +321 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +378 -0
- omnibase_infra/runtime/mixins/__init__.py +17 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +757 -0
- omnibase_infra/runtime/models/__init__.py +192 -0
- omnibase_infra/runtime/models/model_batch_lifecycle_result.py +217 -0
- omnibase_infra/runtime/models/model_binding_config.py +168 -0
- omnibase_infra/runtime/models/model_binding_config_cache_stats.py +135 -0
- omnibase_infra/runtime/models/model_binding_config_resolver_config.py +329 -0
- omnibase_infra/runtime/models/model_cached_secret.py +138 -0
- omnibase_infra/runtime/models/model_compute_key.py +138 -0
- omnibase_infra/runtime/models/model_compute_registration.py +97 -0
- omnibase_infra/runtime/models/model_config_cache_entry.py +61 -0
- omnibase_infra/runtime/models/model_config_ref.py +331 -0
- omnibase_infra/runtime/models/model_config_ref_parse_result.py +125 -0
- omnibase_infra/runtime/models/model_domain_plugin_config.py +92 -0
- omnibase_infra/runtime/models/model_domain_plugin_result.py +270 -0
- omnibase_infra/runtime/models/model_duplicate_response.py +54 -0
- omnibase_infra/runtime/models/model_enabled_protocols_config.py +61 -0
- omnibase_infra/runtime/models/model_event_bus_config.py +54 -0
- omnibase_infra/runtime/models/model_failed_component.py +55 -0
- omnibase_infra/runtime/models/model_health_check_response.py +168 -0
- omnibase_infra/runtime/models/model_health_check_result.py +228 -0
- omnibase_infra/runtime/models/model_lifecycle_result.py +245 -0
- omnibase_infra/runtime/models/model_logging_config.py +42 -0
- omnibase_infra/runtime/models/model_optional_correlation_id.py +167 -0
- omnibase_infra/runtime/models/model_optional_string.py +94 -0
- omnibase_infra/runtime/models/model_optional_uuid.py +110 -0
- omnibase_infra/runtime/models/model_policy_context.py +100 -0
- omnibase_infra/runtime/models/model_policy_key.py +138 -0
- omnibase_infra/runtime/models/model_policy_registration.py +139 -0
- omnibase_infra/runtime/models/model_policy_result.py +103 -0
- omnibase_infra/runtime/models/model_policy_type_filter.py +157 -0
- omnibase_infra/runtime/models/model_projector_plugin_loader_config.py +47 -0
- omnibase_infra/runtime/models/model_protocol_registration_config.py +65 -0
- omnibase_infra/runtime/models/model_retry_policy.py +105 -0
- omnibase_infra/runtime/models/model_runtime_config.py +150 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +624 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_metrics.py +233 -0
- omnibase_infra/runtime/models/model_runtime_tick.py +193 -0
- omnibase_infra/runtime/models/model_secret_cache_stats.py +82 -0
- omnibase_infra/runtime/models/model_secret_mapping.py +63 -0
- omnibase_infra/runtime/models/model_secret_resolver_config.py +107 -0
- omnibase_infra/runtime/models/model_secret_resolver_metrics.py +111 -0
- omnibase_infra/runtime/models/model_secret_source_info.py +72 -0
- omnibase_infra/runtime/models/model_secret_source_spec.py +66 -0
- omnibase_infra/runtime/models/model_shutdown_batch_result.py +75 -0
- omnibase_infra/runtime/models/model_shutdown_config.py +94 -0
- omnibase_infra/runtime/projector_plugin_loader.py +1462 -0
- omnibase_infra/runtime/projector_schema_manager.py +565 -0
- omnibase_infra/runtime/projector_shell.py +1102 -0
- omnibase_infra/runtime/protocol_contract_descriptor.py +92 -0
- omnibase_infra/runtime/protocol_contract_source.py +92 -0
- omnibase_infra/runtime/protocol_domain_plugin.py +474 -0
- omnibase_infra/runtime/protocol_handler_discovery.py +221 -0
- omnibase_infra/runtime/protocol_handler_plugin_loader.py +327 -0
- omnibase_infra/runtime/protocol_lifecycle_executor.py +435 -0
- omnibase_infra/runtime/protocol_policy.py +366 -0
- omnibase_infra/runtime/protocols/__init__.py +27 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
- omnibase_infra/runtime/registry/__init__.py +93 -0
- omnibase_infra/runtime/registry/mixin_message_type_query.py +326 -0
- omnibase_infra/runtime/registry/mixin_message_type_registration.py +354 -0
- omnibase_infra/runtime/registry/registry_event_bus_binding.py +268 -0
- omnibase_infra/runtime/registry/registry_message_type.py +542 -0
- omnibase_infra/runtime/registry/registry_protocol_binding.py +444 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1502 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2110 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1573 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +1805 -0
- omnibase_infra/runtime/service_runtime_host_process.py +2260 -0
- omnibase_infra/runtime/util_container_wiring.py +1123 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +566 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/services/__init__.py +68 -0
- omnibase_infra/services/corpus_capture.py +678 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +897 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +682 -0
- omnibase_infra/services/service_timeout_scanner.py +390 -0
- omnibase_infra/services/snapshot/__init__.py +31 -0
- omnibase_infra/services/snapshot/service_snapshot.py +647 -0
- omnibase_infra/services/snapshot/store_inmemory.py +637 -0
- omnibase_infra/services/snapshot/store_postgres.py +1279 -0
- omnibase_infra/shared/__init__.py +8 -0
- omnibase_infra/testing/__init__.py +10 -0
- omnibase_infra/testing/utils.py +23 -0
- omnibase_infra/types/__init__.py +48 -0
- omnibase_infra/types/type_cache_info.py +49 -0
- omnibase_infra/types/type_dsn.py +173 -0
- omnibase_infra/types/type_infra_aliases.py +60 -0
- omnibase_infra/types/typed_dict/__init__.py +21 -0
- omnibase_infra/types/typed_dict/typed_dict_introspection_cache.py +128 -0
- omnibase_infra/types/typed_dict/typed_dict_performance_metrics_cache.py +140 -0
- omnibase_infra/types/typed_dict_capabilities.py +64 -0
- omnibase_infra/utils/__init__.py +89 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_datetime.py +372 -0
- omnibase_infra/utils/util_dsn_validation.py +333 -0
- omnibase_infra/utils/util_env_parsing.py +264 -0
- omnibase_infra/utils/util_error_sanitization.py +457 -0
- omnibase_infra/utils/util_pydantic_validators.py +477 -0
- omnibase_infra/utils/util_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -0
- omnibase_infra/validation/enums/__init__.py +11 -0
- omnibase_infra/validation/enums/enum_contract_violation_severity.py +13 -0
- omnibase_infra/validation/infra_validators.py +1486 -0
- omnibase_infra/validation/linter_contract.py +907 -0
- omnibase_infra/validation/mixin_any_type_classification.py +120 -0
- omnibase_infra/validation/mixin_any_type_exemption.py +580 -0
- omnibase_infra/validation/mixin_any_type_reporting.py +106 -0
- omnibase_infra/validation/mixin_execution_shape_violation_checks.py +596 -0
- omnibase_infra/validation/mixin_node_archetype_detection.py +254 -0
- omnibase_infra/validation/models/__init__.py +15 -0
- omnibase_infra/validation/models/model_contract_lint_result.py +101 -0
- omnibase_infra/validation/models/model_contract_violation.py +41 -0
- omnibase_infra/validation/service_validation_aggregator.py +395 -0
- omnibase_infra/validation/validation_exemptions.yaml +1710 -0
- omnibase_infra/validation/validator_any_type.py +715 -0
- omnibase_infra/validation/validator_chain_propagation.py +839 -0
- omnibase_infra/validation/validator_execution_shape.py +465 -0
- omnibase_infra/validation/validator_localhandler.py +261 -0
- omnibase_infra/validation/validator_registration_security.py +410 -0
- omnibase_infra/validation/validator_routing_coverage.py +1020 -0
- omnibase_infra/validation/validator_runtime_shape.py +915 -0
- omnibase_infra/validation/validator_security.py +410 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.1.dist-info/METADATA +197 -0
- omnibase_infra-0.2.1.dist-info/RECORD +675 -0
- omnibase_infra-0.2.1.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.1.dist-info/entry_points.txt +4 -0
- omnibase_infra-0.2.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Vault Handler Configuration Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic configuration model for HashiCorp Vault
|
|
6
|
+
handler initialization and operation.
|
|
7
|
+
|
|
8
|
+
Security Note:
|
|
9
|
+
The token field uses SecretStr to prevent accidental logging of
|
|
10
|
+
sensitive credentials. Tokens should come from environment variables,
|
|
11
|
+
never from YAML configuration files.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from pydantic import BaseModel, ConfigDict, Field, SecretStr, field_validator
|
|
17
|
+
|
|
18
|
+
from omnibase_infra.handlers.models.vault.model_vault_retry_config import (
|
|
19
|
+
ModelVaultRetryConfig,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ModelVaultHandlerConfig(BaseModel):
|
|
24
|
+
"""Configuration for HashiCorp Vault handler.
|
|
25
|
+
|
|
26
|
+
Security Policy:
|
|
27
|
+
- The token field uses SecretStr to prevent accidental logging
|
|
28
|
+
- Tokens should be provided via environment variables, not config files
|
|
29
|
+
- Never log or expose token values in error messages
|
|
30
|
+
- Use verify_ssl=True in production environments
|
|
31
|
+
|
|
32
|
+
Attributes:
|
|
33
|
+
url: Vault server URL (required, e.g., "https://vault.example.com:8200")
|
|
34
|
+
token: Vault authentication token (SecretStr for security, optional)
|
|
35
|
+
namespace: Vault namespace for Vault Enterprise (optional)
|
|
36
|
+
timeout_seconds: Operation timeout in seconds (1.0-300.0, default 30.0)
|
|
37
|
+
verify_ssl: Whether to verify SSL certificates (default True)
|
|
38
|
+
token_renewal_threshold_seconds: Token renewal threshold in seconds (default 300.0)
|
|
39
|
+
default_token_ttl: Default token TTL in seconds when not provided by Vault (default 3600)
|
|
40
|
+
retry: Retry configuration with exponential backoff
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
>>> from pydantic import SecretStr
|
|
44
|
+
>>> config = ModelVaultHandlerConfig(
|
|
45
|
+
... url="https://vault.example.com:8200",
|
|
46
|
+
... token=SecretStr("s.1234567890abcdefghijklmnopqrstuv"),
|
|
47
|
+
... namespace="engineering",
|
|
48
|
+
... timeout_seconds=30.0,
|
|
49
|
+
... verify_ssl=True,
|
|
50
|
+
... )
|
|
51
|
+
>>> # Token is protected from accidental logging
|
|
52
|
+
>>> print(config.token)
|
|
53
|
+
SecretStr('**********')
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
model_config = ConfigDict(
|
|
57
|
+
strict=True,
|
|
58
|
+
frozen=True,
|
|
59
|
+
extra="forbid",
|
|
60
|
+
from_attributes=True,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
url: str = Field(
|
|
64
|
+
description="Vault server URL (e.g., 'https://vault.example.com:8200')",
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
@field_validator("url")
|
|
68
|
+
@classmethod
|
|
69
|
+
def validate_url_format(cls, v: str) -> str:
|
|
70
|
+
"""Validate that URL has proper format for Vault server."""
|
|
71
|
+
if not v:
|
|
72
|
+
msg = "URL cannot be empty"
|
|
73
|
+
raise ValueError(msg)
|
|
74
|
+
# Check for valid URL scheme
|
|
75
|
+
if not v.startswith(("http://", "https://")):
|
|
76
|
+
msg = "URL must start with http:// or https://"
|
|
77
|
+
raise ValueError(msg)
|
|
78
|
+
# Basic structure validation (scheme + host at minimum)
|
|
79
|
+
parts = v.split("://", 1)
|
|
80
|
+
if len(parts) != 2 or not parts[1]:
|
|
81
|
+
msg = "URL must have format: scheme://host[:port]"
|
|
82
|
+
raise ValueError(msg)
|
|
83
|
+
return v
|
|
84
|
+
|
|
85
|
+
token: SecretStr | None = Field(
|
|
86
|
+
default=None,
|
|
87
|
+
description="Authentication token protected from logging",
|
|
88
|
+
)
|
|
89
|
+
namespace: str | None = Field(
|
|
90
|
+
default=None,
|
|
91
|
+
description="Vault namespace for multi-tenant isolation",
|
|
92
|
+
)
|
|
93
|
+
timeout_seconds: float = Field(
|
|
94
|
+
default=30.0,
|
|
95
|
+
ge=1.0,
|
|
96
|
+
le=300.0,
|
|
97
|
+
description="Maximum time allowed per operation",
|
|
98
|
+
)
|
|
99
|
+
verify_ssl: bool = Field(
|
|
100
|
+
default=True,
|
|
101
|
+
description="Enable SSL certificate verification",
|
|
102
|
+
)
|
|
103
|
+
token_renewal_threshold_seconds: float = Field(
|
|
104
|
+
default=300.0,
|
|
105
|
+
ge=0.0,
|
|
106
|
+
description="Trigger renewal when remaining TTL falls below this value",
|
|
107
|
+
)
|
|
108
|
+
default_token_ttl: int = Field(
|
|
109
|
+
default=3600,
|
|
110
|
+
ge=300,
|
|
111
|
+
le=86400,
|
|
112
|
+
description="Fallback TTL when Vault response does not provide TTL",
|
|
113
|
+
)
|
|
114
|
+
retry: ModelVaultRetryConfig = Field(
|
|
115
|
+
default_factory=ModelVaultRetryConfig,
|
|
116
|
+
description="Retry behavior for failed operations",
|
|
117
|
+
)
|
|
118
|
+
max_concurrent_operations: int = Field(
|
|
119
|
+
default=10,
|
|
120
|
+
ge=1,
|
|
121
|
+
le=100,
|
|
122
|
+
description="Thread pool size for concurrent operations",
|
|
123
|
+
)
|
|
124
|
+
max_queue_size_multiplier: int = Field(
|
|
125
|
+
default=3,
|
|
126
|
+
ge=1,
|
|
127
|
+
le=10,
|
|
128
|
+
description="Multiplier to calculate queue capacity from thread pool size",
|
|
129
|
+
)
|
|
130
|
+
circuit_breaker_enabled: bool = Field(
|
|
131
|
+
default=True,
|
|
132
|
+
description="Enable automatic failure detection and recovery",
|
|
133
|
+
)
|
|
134
|
+
circuit_breaker_failure_threshold: int = Field(
|
|
135
|
+
default=5,
|
|
136
|
+
ge=1,
|
|
137
|
+
le=20,
|
|
138
|
+
description="Consecutive failures required to open circuit",
|
|
139
|
+
)
|
|
140
|
+
circuit_breaker_reset_timeout_seconds: float = Field(
|
|
141
|
+
default=30.0,
|
|
142
|
+
ge=1.0,
|
|
143
|
+
le=300.0,
|
|
144
|
+
description="Wait time before testing recovery after circuit opens",
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
__all__: list[str] = ["ModelVaultHandlerConfig"]
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Vault Handler Payload Model.
|
|
4
|
+
|
|
5
|
+
This module provides the discriminated union type for Vault operation payloads
|
|
6
|
+
and the wrapper model that contains them.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import Annotated
|
|
12
|
+
|
|
13
|
+
from pydantic import BaseModel, ConfigDict, Discriminator, Field, Tag
|
|
14
|
+
|
|
15
|
+
from omnibase_infra.handlers.models.vault.model_vault_delete_payload import (
|
|
16
|
+
ModelVaultDeletePayload,
|
|
17
|
+
)
|
|
18
|
+
from omnibase_infra.handlers.models.vault.model_vault_list_payload import (
|
|
19
|
+
ModelVaultListPayload,
|
|
20
|
+
)
|
|
21
|
+
from omnibase_infra.handlers.models.vault.model_vault_renew_token_payload import (
|
|
22
|
+
ModelVaultRenewTokenPayload,
|
|
23
|
+
)
|
|
24
|
+
from omnibase_infra.handlers.models.vault.model_vault_secret_payload import (
|
|
25
|
+
ModelVaultSecretPayload,
|
|
26
|
+
)
|
|
27
|
+
from omnibase_infra.handlers.models.vault.model_vault_write_payload import (
|
|
28
|
+
ModelVaultWritePayload,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def _vault_payload_discriminator(value: object) -> str:
|
|
33
|
+
"""Discriminator function for VaultPayload union.
|
|
34
|
+
|
|
35
|
+
Determines which payload type to use based on the operation_type field.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
value: The raw value being validated (dict or model instance)
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
The discriminator tag value matching the operation_type
|
|
42
|
+
"""
|
|
43
|
+
if isinstance(value, dict):
|
|
44
|
+
operation_type = value.get("operation_type", "read_secret")
|
|
45
|
+
else:
|
|
46
|
+
operation_type = getattr(value, "operation_type", "read_secret")
|
|
47
|
+
|
|
48
|
+
# Handle both enum values and string values
|
|
49
|
+
if hasattr(operation_type, "value"):
|
|
50
|
+
return str(operation_type.value)
|
|
51
|
+
return str(operation_type)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# Discriminated union of all Vault payload types
|
|
55
|
+
VaultPayload = Annotated[
|
|
56
|
+
Annotated[ModelVaultSecretPayload, Tag("read_secret")]
|
|
57
|
+
| Annotated[ModelVaultWritePayload, Tag("write_secret")]
|
|
58
|
+
| Annotated[ModelVaultDeletePayload, Tag("delete_secret")]
|
|
59
|
+
| Annotated[ModelVaultListPayload, Tag("list_secrets")]
|
|
60
|
+
| Annotated[ModelVaultRenewTokenPayload, Tag("renew_token")],
|
|
61
|
+
Discriminator(_vault_payload_discriminator),
|
|
62
|
+
]
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class ModelVaultHandlerPayload(BaseModel):
|
|
66
|
+
"""Wrapper model for Vault handler payloads.
|
|
67
|
+
|
|
68
|
+
Contains the discriminated union of all possible Vault operation payloads.
|
|
69
|
+
This allows the HandlerVault to return a consistent payload wrapper while
|
|
70
|
+
the actual payload type varies based on the operation.
|
|
71
|
+
|
|
72
|
+
Attributes:
|
|
73
|
+
data: The operation-specific payload (discriminated union)
|
|
74
|
+
|
|
75
|
+
Example:
|
|
76
|
+
>>> from omnibase_infra.handlers.models.vault import ModelVaultSecretPayload
|
|
77
|
+
>>> secret_payload = ModelVaultSecretPayload(
|
|
78
|
+
... data={"username": "admin"},
|
|
79
|
+
... metadata={"version": 1},
|
|
80
|
+
... )
|
|
81
|
+
>>> wrapper = ModelVaultHandlerPayload(data=secret_payload)
|
|
82
|
+
>>> print(wrapper.data.operation_type)
|
|
83
|
+
<EnumVaultOperationType.READ_SECRET: 'read_secret'>
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
model_config = ConfigDict(
|
|
87
|
+
strict=True,
|
|
88
|
+
frozen=True,
|
|
89
|
+
extra="forbid",
|
|
90
|
+
from_attributes=True,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
data: VaultPayload = Field(
|
|
94
|
+
description="Operation-specific payload",
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
__all__: list[str] = [
|
|
99
|
+
"ModelVaultHandlerPayload",
|
|
100
|
+
"VaultPayload",
|
|
101
|
+
]
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Vault List Payload Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for vault.list_secrets operation results.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Literal
|
|
11
|
+
|
|
12
|
+
from pydantic import ConfigDict, Field
|
|
13
|
+
|
|
14
|
+
from omnibase_infra.handlers.models.vault.enum_vault_operation_type import (
|
|
15
|
+
EnumVaultOperationType,
|
|
16
|
+
)
|
|
17
|
+
from omnibase_infra.handlers.models.vault.model_payload_vault import (
|
|
18
|
+
ModelPayloadVault,
|
|
19
|
+
)
|
|
20
|
+
from omnibase_infra.handlers.models.vault.registry_payload_vault import (
|
|
21
|
+
RegistryPayloadVault,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@RegistryPayloadVault.register("list_secrets")
|
|
26
|
+
class ModelVaultListPayload(ModelPayloadVault):
|
|
27
|
+
"""Payload for vault.list_secrets operation result.
|
|
28
|
+
|
|
29
|
+
Contains the list of secret keys at the specified path.
|
|
30
|
+
|
|
31
|
+
Attributes:
|
|
32
|
+
operation_type: Discriminator set to "list_secrets"
|
|
33
|
+
keys: List of secret key names at the path
|
|
34
|
+
|
|
35
|
+
Example:
|
|
36
|
+
>>> payload = ModelVaultListPayload(keys=["db/", "api/", "config"])
|
|
37
|
+
>>> print(payload.keys)
|
|
38
|
+
['db/', 'api/', 'config']
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
model_config = ConfigDict(
|
|
42
|
+
strict=True,
|
|
43
|
+
frozen=True,
|
|
44
|
+
extra="forbid",
|
|
45
|
+
from_attributes=True,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
operation_type: Literal[EnumVaultOperationType.LIST_SECRETS] = Field(
|
|
49
|
+
default=EnumVaultOperationType.LIST_SECRETS,
|
|
50
|
+
description="Operation type discriminator",
|
|
51
|
+
)
|
|
52
|
+
keys: list[str] = Field(
|
|
53
|
+
default_factory=list,
|
|
54
|
+
description="List of secret key names at the path",
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
__all__: list[str] = ["ModelVaultListPayload"]
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Vault Renew Token Payload Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for vault.renew_token operation results.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Literal
|
|
11
|
+
|
|
12
|
+
from pydantic import ConfigDict, Field
|
|
13
|
+
|
|
14
|
+
from omnibase_infra.handlers.models.vault.enum_vault_operation_type import (
|
|
15
|
+
EnumVaultOperationType,
|
|
16
|
+
)
|
|
17
|
+
from omnibase_infra.handlers.models.vault.model_payload_vault import (
|
|
18
|
+
ModelPayloadVault,
|
|
19
|
+
)
|
|
20
|
+
from omnibase_infra.handlers.models.vault.registry_payload_vault import (
|
|
21
|
+
RegistryPayloadVault,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@RegistryPayloadVault.register("renew_token")
|
|
26
|
+
class ModelVaultRenewTokenPayload(ModelPayloadVault):
|
|
27
|
+
"""Payload for vault.renew_token operation result.
|
|
28
|
+
|
|
29
|
+
Contains token renewal information including new TTL.
|
|
30
|
+
|
|
31
|
+
Attributes:
|
|
32
|
+
operation_type: Discriminator set to "renew_token"
|
|
33
|
+
renewable: Whether the token can be renewed again
|
|
34
|
+
lease_duration: New token TTL in seconds
|
|
35
|
+
|
|
36
|
+
Example:
|
|
37
|
+
>>> payload = ModelVaultRenewTokenPayload(
|
|
38
|
+
... renewable=True,
|
|
39
|
+
... lease_duration=3600,
|
|
40
|
+
... )
|
|
41
|
+
>>> print(payload.lease_duration)
|
|
42
|
+
3600
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
model_config = ConfigDict(
|
|
46
|
+
strict=True,
|
|
47
|
+
frozen=True,
|
|
48
|
+
extra="forbid",
|
|
49
|
+
from_attributes=True,
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
operation_type: Literal[EnumVaultOperationType.RENEW_TOKEN] = Field(
|
|
53
|
+
default=EnumVaultOperationType.RENEW_TOKEN,
|
|
54
|
+
description="Operation type discriminator",
|
|
55
|
+
)
|
|
56
|
+
renewable: bool = Field(
|
|
57
|
+
default=False,
|
|
58
|
+
description="Whether the token can be renewed again",
|
|
59
|
+
)
|
|
60
|
+
lease_duration: int = Field(
|
|
61
|
+
default=0,
|
|
62
|
+
ge=0,
|
|
63
|
+
description="New token TTL in seconds",
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
__all__: list[str] = ["ModelVaultRenewTokenPayload"]
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Vault Retry Configuration Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic configuration model for Vault operation
|
|
6
|
+
retry logic with exponential backoff.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ModelVaultRetryConfig(BaseModel):
|
|
15
|
+
"""Configuration for Vault operation retry logic with exponential backoff.
|
|
16
|
+
|
|
17
|
+
Attributes:
|
|
18
|
+
max_attempts: Maximum number of retry attempts (1-10)
|
|
19
|
+
initial_backoff_seconds: Initial backoff delay in seconds (0.01-10.0)
|
|
20
|
+
max_backoff_seconds: Maximum backoff delay in seconds (1.0-60.0)
|
|
21
|
+
exponential_base: Exponential backoff multiplier (1.5-4.0)
|
|
22
|
+
|
|
23
|
+
Example:
|
|
24
|
+
>>> retry_config = ModelVaultRetryConfig(
|
|
25
|
+
... max_attempts=3,
|
|
26
|
+
... initial_backoff_seconds=0.1,
|
|
27
|
+
... max_backoff_seconds=10.0,
|
|
28
|
+
... exponential_base=2.0,
|
|
29
|
+
... )
|
|
30
|
+
>>> # Backoff sequence: 0.1s, 0.2s, 0.4s
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
model_config = ConfigDict(
|
|
34
|
+
strict=True,
|
|
35
|
+
frozen=True,
|
|
36
|
+
extra="forbid",
|
|
37
|
+
from_attributes=True,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
max_attempts: int = Field(
|
|
41
|
+
default=3,
|
|
42
|
+
ge=1,
|
|
43
|
+
le=10,
|
|
44
|
+
description="Maximum retry attempts for failed operations",
|
|
45
|
+
)
|
|
46
|
+
initial_backoff_seconds: float = Field(
|
|
47
|
+
default=0.1,
|
|
48
|
+
ge=0.01,
|
|
49
|
+
le=10.0,
|
|
50
|
+
description="Initial delay before first retry",
|
|
51
|
+
)
|
|
52
|
+
max_backoff_seconds: float = Field(
|
|
53
|
+
default=10.0,
|
|
54
|
+
ge=1.0,
|
|
55
|
+
le=60.0,
|
|
56
|
+
description="Maximum delay cap for exponential backoff",
|
|
57
|
+
)
|
|
58
|
+
exponential_base: float = Field(
|
|
59
|
+
default=2.0,
|
|
60
|
+
ge=1.5,
|
|
61
|
+
le=4.0,
|
|
62
|
+
description="Base multiplier for exponential backoff calculation",
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
__all__: list[str] = ["ModelVaultRetryConfig"]
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Vault Secret Payload Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for vault.read_secret operation results.
|
|
6
|
+
|
|
7
|
+
JsonType Recursion Fix (OMN-1274):
|
|
8
|
+
This module uses ``dict[str, object]`` for the ``data`` and ``metadata``
|
|
9
|
+
fields instead of the recursive ``JsonType`` type alias. Here is why:
|
|
10
|
+
|
|
11
|
+
**The Original Problem:**
|
|
12
|
+
``JsonType`` was defined as a recursive type alias::
|
|
13
|
+
|
|
14
|
+
JsonType = dict[str, "JsonType"] | list["JsonType"] | str | int | float | bool | None
|
|
15
|
+
|
|
16
|
+
Pydantic 2.x performs eager schema generation at class definition time.
|
|
17
|
+
When encountering recursive type aliases, it attempts infinite expansion::
|
|
18
|
+
|
|
19
|
+
JsonType -> dict[str, JsonType] | list[JsonType] | ...
|
|
20
|
+
-> dict[str, dict[str, JsonType] | ...] | ...
|
|
21
|
+
-> ... (RecursionError)
|
|
22
|
+
|
|
23
|
+
**Why dict[str, object] is Correct Here:**
|
|
24
|
+
Vault secrets are always structured as key-value dictionaries:
|
|
25
|
+
|
|
26
|
+
- ``data``: Secret key-value pairs (e.g., {"username": "...", "password": "..."})
|
|
27
|
+
- ``metadata``: Vault metadata (version, created_time, etc.)
|
|
28
|
+
|
|
29
|
+
Neither field needs to support arrays or primitives at the root level,
|
|
30
|
+
making ``dict[str, object]`` the semantically correct choice.
|
|
31
|
+
|
|
32
|
+
Using ``dict[str, object]`` provides:
|
|
33
|
+
- Correct semantics: Vault secrets are always dictionaries
|
|
34
|
+
- Type safety: Pydantic validates the outer structure
|
|
35
|
+
- No recursion: ``object`` avoids the recursive type expansion
|
|
36
|
+
|
|
37
|
+
**Caveats:**
|
|
38
|
+
- Values are typed as ``object`` (no static type checking on values)
|
|
39
|
+
- Callers should validate expected secret structure at runtime
|
|
40
|
+
- For full JSON support (any JSON value), use ``JsonType`` from
|
|
41
|
+
``omnibase_core.types`` (now fixed via TypeAlias pattern)
|
|
42
|
+
|
|
43
|
+
See Also:
|
|
44
|
+
- ADR: ``docs/decisions/adr-any-type-pydantic-workaround.md`` (historical)
|
|
45
|
+
- Pydantic issue: https://github.com/pydantic/pydantic/issues/3278
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
from __future__ import annotations
|
|
49
|
+
|
|
50
|
+
from typing import Literal
|
|
51
|
+
|
|
52
|
+
from pydantic import ConfigDict, Field
|
|
53
|
+
|
|
54
|
+
from omnibase_infra.handlers.models.vault.enum_vault_operation_type import (
|
|
55
|
+
EnumVaultOperationType,
|
|
56
|
+
)
|
|
57
|
+
from omnibase_infra.handlers.models.vault.model_payload_vault import (
|
|
58
|
+
ModelPayloadVault,
|
|
59
|
+
)
|
|
60
|
+
from omnibase_infra.handlers.models.vault.registry_payload_vault import (
|
|
61
|
+
RegistryPayloadVault,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@RegistryPayloadVault.register("read_secret")
|
|
66
|
+
class ModelVaultSecretPayload(ModelPayloadVault):
|
|
67
|
+
"""Payload for vault.read_secret operation result.
|
|
68
|
+
|
|
69
|
+
Contains the secret data retrieved from Vault KV v2 secrets engine
|
|
70
|
+
along with metadata about the secret version.
|
|
71
|
+
|
|
72
|
+
Attributes:
|
|
73
|
+
operation_type: Discriminator set to "read_secret"
|
|
74
|
+
data: The secret data as a key-value dictionary
|
|
75
|
+
metadata: Vault metadata about the secret (version, created_time, etc.)
|
|
76
|
+
|
|
77
|
+
Example:
|
|
78
|
+
>>> payload = ModelVaultSecretPayload(
|
|
79
|
+
... data={"username": "admin", "password": "secret"},
|
|
80
|
+
... metadata={"version": 1, "created_time": "2025-01-01T00:00:00Z"},
|
|
81
|
+
... )
|
|
82
|
+
>>> print(payload.data["username"])
|
|
83
|
+
'admin'
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
model_config = ConfigDict(
|
|
87
|
+
strict=True,
|
|
88
|
+
frozen=True,
|
|
89
|
+
extra="forbid",
|
|
90
|
+
from_attributes=True,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
operation_type: Literal[EnumVaultOperationType.READ_SECRET] = Field(
|
|
94
|
+
default=EnumVaultOperationType.READ_SECRET,
|
|
95
|
+
description="Operation type discriminator",
|
|
96
|
+
)
|
|
97
|
+
data: dict[str, object] = Field(
|
|
98
|
+
description="Secret data as key-value dictionary",
|
|
99
|
+
)
|
|
100
|
+
metadata: dict[str, object] = Field(
|
|
101
|
+
default_factory=dict,
|
|
102
|
+
description="Vault metadata about the secret",
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
__all__: list[str] = ["ModelVaultSecretPayload"]
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Vault Write Payload Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for vault.write_secret operation results.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Literal
|
|
11
|
+
|
|
12
|
+
from pydantic import ConfigDict, Field
|
|
13
|
+
|
|
14
|
+
from omnibase_infra.handlers.models.vault.enum_vault_operation_type import (
|
|
15
|
+
EnumVaultOperationType,
|
|
16
|
+
)
|
|
17
|
+
from omnibase_infra.handlers.models.vault.model_payload_vault import (
|
|
18
|
+
ModelPayloadVault,
|
|
19
|
+
)
|
|
20
|
+
from omnibase_infra.handlers.models.vault.registry_payload_vault import (
|
|
21
|
+
RegistryPayloadVault,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@RegistryPayloadVault.register("write_secret")
|
|
26
|
+
class ModelVaultWritePayload(ModelPayloadVault):
|
|
27
|
+
"""Payload for vault.write_secret operation result.
|
|
28
|
+
|
|
29
|
+
Contains confirmation of secret write operation with version information.
|
|
30
|
+
|
|
31
|
+
Attributes:
|
|
32
|
+
operation_type: Discriminator set to "write_secret"
|
|
33
|
+
version: The version number of the newly written secret
|
|
34
|
+
created_time: Timestamp when the secret version was created
|
|
35
|
+
|
|
36
|
+
Example:
|
|
37
|
+
>>> payload = ModelVaultWritePayload(
|
|
38
|
+
... version=2,
|
|
39
|
+
... created_time="2025-01-01T00:00:00Z",
|
|
40
|
+
... )
|
|
41
|
+
>>> print(payload.version)
|
|
42
|
+
2
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
model_config = ConfigDict(
|
|
46
|
+
strict=True,
|
|
47
|
+
frozen=True,
|
|
48
|
+
extra="forbid",
|
|
49
|
+
from_attributes=True,
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
operation_type: Literal[EnumVaultOperationType.WRITE_SECRET] = Field(
|
|
53
|
+
default=EnumVaultOperationType.WRITE_SECRET,
|
|
54
|
+
description="Operation type discriminator",
|
|
55
|
+
)
|
|
56
|
+
version: int | None = Field(
|
|
57
|
+
default=None,
|
|
58
|
+
description="Version number of the written secret",
|
|
59
|
+
)
|
|
60
|
+
created_time: str | None = Field(
|
|
61
|
+
default=None,
|
|
62
|
+
description="Timestamp when the secret version was created",
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
__all__: list[str] = ["ModelVaultWritePayload"]
|