omnibase_infra 0.2.5__py3-none-any.whl → 0.2.7__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/constants_topic_patterns.py +26 -0
- omnibase_infra/enums/__init__.py +3 -0
- omnibase_infra/enums/enum_consumer_group_purpose.py +92 -0
- omnibase_infra/enums/enum_handler_source_mode.py +16 -2
- omnibase_infra/errors/__init__.py +4 -0
- omnibase_infra/errors/error_binding_resolution.py +128 -0
- omnibase_infra/event_bus/configs/kafka_event_bus_config.yaml +0 -2
- omnibase_infra/event_bus/event_bus_inmemory.py +64 -10
- omnibase_infra/event_bus/event_bus_kafka.py +105 -47
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +3 -7
- omnibase_infra/event_bus/mixin_kafka_dlq.py +12 -6
- omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +0 -81
- omnibase_infra/event_bus/testing/__init__.py +26 -0
- omnibase_infra/event_bus/testing/adapter_protocol_event_publisher_inmemory.py +418 -0
- omnibase_infra/event_bus/testing/model_publisher_metrics.py +64 -0
- omnibase_infra/handlers/handler_consul.py +2 -0
- omnibase_infra/handlers/mixins/__init__.py +5 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +274 -10
- omnibase_infra/handlers/mixins/mixin_consul_topic_index.py +585 -0
- omnibase_infra/handlers/models/model_filesystem_config.py +4 -4
- omnibase_infra/migrations/001_create_event_ledger.sql +166 -0
- omnibase_infra/migrations/001_drop_event_ledger.sql +18 -0
- omnibase_infra/mixins/mixin_node_introspection.py +189 -19
- omnibase_infra/models/__init__.py +8 -0
- omnibase_infra/models/bindings/__init__.py +59 -0
- omnibase_infra/models/bindings/constants.py +144 -0
- omnibase_infra/models/bindings/model_binding_resolution_result.py +103 -0
- omnibase_infra/models/bindings/model_operation_binding.py +44 -0
- omnibase_infra/models/bindings/model_operation_bindings_subcontract.py +152 -0
- omnibase_infra/models/bindings/model_parsed_binding.py +52 -0
- omnibase_infra/models/discovery/model_introspection_config.py +25 -17
- omnibase_infra/models/dispatch/__init__.py +8 -0
- omnibase_infra/models/dispatch/model_debug_trace_snapshot.py +114 -0
- omnibase_infra/models/dispatch/model_materialized_dispatch.py +141 -0
- omnibase_infra/models/handlers/model_handler_source_config.py +1 -1
- omnibase_infra/models/model_node_identity.py +126 -0
- omnibase_infra/models/projection/model_snapshot_topic_config.py +3 -2
- omnibase_infra/models/registration/__init__.py +9 -0
- omnibase_infra/models/registration/model_event_bus_topic_entry.py +59 -0
- omnibase_infra/models/registration/model_node_event_bus_config.py +99 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +11 -0
- omnibase_infra/models/runtime/__init__.py +9 -0
- omnibase_infra/models/validation/model_coverage_metrics.py +2 -2
- omnibase_infra/nodes/__init__.py +9 -0
- omnibase_infra/nodes/contract_registry_reducer/__init__.py +29 -0
- omnibase_infra/nodes/contract_registry_reducer/contract.yaml +255 -0
- omnibase_infra/nodes/contract_registry_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_contract_registry_state.py +266 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_cleanup_topic_references.py +55 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_deactivate_contract.py +58 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_mark_stale.py +49 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_heartbeat.py +71 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_topic.py +66 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_upsert_contract.py +92 -0
- omnibase_infra/nodes/contract_registry_reducer/node.py +121 -0
- omnibase_infra/nodes/contract_registry_reducer/reducer.py +784 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/registry_infra_contract_registry_reducer.py +101 -0
- omnibase_infra/nodes/handlers/consul/contract.yaml +85 -0
- omnibase_infra/nodes/handlers/db/contract.yaml +72 -0
- omnibase_infra/nodes/handlers/graph/contract.yaml +127 -0
- omnibase_infra/nodes/handlers/http/contract.yaml +74 -0
- omnibase_infra/nodes/handlers/intent/contract.yaml +66 -0
- omnibase_infra/nodes/handlers/mcp/contract.yaml +69 -0
- omnibase_infra/nodes/handlers/vault/contract.yaml +91 -0
- omnibase_infra/nodes/node_ledger_projection_compute/__init__.py +50 -0
- omnibase_infra/nodes/node_ledger_projection_compute/contract.yaml +104 -0
- omnibase_infra/nodes/node_ledger_projection_compute/node.py +284 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/__init__.py +29 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/registry_infra_ledger_projection.py +118 -0
- omnibase_infra/nodes/node_ledger_write_effect/__init__.py +82 -0
- omnibase_infra/nodes/node_ledger_write_effect/contract.yaml +200 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/__init__.py +22 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_append.py +372 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_query.py +597 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/__init__.py +31 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_append_result.py +54 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_entry.py +92 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query.py +53 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query_result.py +41 -0
- omnibase_infra/nodes/node_ledger_write_effect/node.py +89 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/__init__.py +13 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/protocol_ledger_persistence.py +127 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/registry_infra_ledger_write.py +121 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +7 -5
- omnibase_infra/nodes/reducers/models/__init__.py +7 -2
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +11 -0
- omnibase_infra/nodes/reducers/models/model_payload_ledger_append.py +133 -0
- omnibase_infra/nodes/reducers/registration_reducer.py +1 -0
- omnibase_infra/protocols/__init__.py +3 -0
- omnibase_infra/protocols/protocol_dispatch_engine.py +152 -0
- omnibase_infra/runtime/__init__.py +60 -0
- omnibase_infra/runtime/binding_resolver.py +753 -0
- omnibase_infra/runtime/constants_security.py +70 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +9 -0
- omnibase_infra/runtime/contract_loaders/operation_bindings_loader.py +789 -0
- omnibase_infra/runtime/emit_daemon/__init__.py +97 -0
- omnibase_infra/runtime/emit_daemon/cli.py +844 -0
- omnibase_infra/runtime/emit_daemon/client.py +811 -0
- omnibase_infra/runtime/emit_daemon/config.py +535 -0
- omnibase_infra/runtime/emit_daemon/daemon.py +812 -0
- omnibase_infra/runtime/emit_daemon/event_registry.py +477 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_request.py +139 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_response.py +191 -0
- omnibase_infra/runtime/emit_daemon/queue.py +618 -0
- omnibase_infra/runtime/event_bus_subcontract_wiring.py +466 -0
- omnibase_infra/runtime/handler_source_resolver.py +43 -2
- omnibase_infra/runtime/kafka_contract_source.py +984 -0
- omnibase_infra/runtime/models/__init__.py +13 -0
- omnibase_infra/runtime/models/model_contract_load_result.py +224 -0
- omnibase_infra/runtime/models/model_runtime_contract_config.py +268 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +4 -3
- omnibase_infra/runtime/models/model_security_config.py +109 -0
- omnibase_infra/runtime/publisher_topic_scoped.py +294 -0
- omnibase_infra/runtime/runtime_contract_config_loader.py +406 -0
- omnibase_infra/runtime/service_kernel.py +76 -6
- omnibase_infra/runtime/service_message_dispatch_engine.py +558 -15
- omnibase_infra/runtime/service_runtime_host_process.py +770 -20
- omnibase_infra/runtime/transition_notification_publisher.py +3 -2
- omnibase_infra/runtime/util_wiring.py +206 -62
- omnibase_infra/services/mcp/service_mcp_tool_sync.py +27 -9
- omnibase_infra/services/session/config_consumer.py +25 -8
- omnibase_infra/services/session/config_store.py +2 -2
- omnibase_infra/services/session/consumer.py +1 -1
- omnibase_infra/topics/__init__.py +45 -0
- omnibase_infra/topics/platform_topic_suffixes.py +140 -0
- omnibase_infra/topics/util_topic_composition.py +95 -0
- omnibase_infra/types/typed_dict/__init__.py +9 -1
- omnibase_infra/types/typed_dict/typed_dict_envelope_build_params.py +115 -0
- omnibase_infra/utils/__init__.py +9 -0
- omnibase_infra/utils/util_consumer_group.py +232 -0
- omnibase_infra/validation/infra_validators.py +18 -1
- omnibase_infra/validation/validation_exemptions.yaml +192 -0
- {omnibase_infra-0.2.5.dist-info → omnibase_infra-0.2.7.dist-info}/METADATA +3 -3
- {omnibase_infra-0.2.5.dist-info → omnibase_infra-0.2.7.dist-info}/RECORD +139 -52
- {omnibase_infra-0.2.5.dist-info → omnibase_infra-0.2.7.dist-info}/entry_points.txt +1 -0
- {omnibase_infra-0.2.5.dist-info → omnibase_infra-0.2.7.dist-info}/WHEEL +0 -0
- {omnibase_infra-0.2.5.dist-info → omnibase_infra-0.2.7.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Security constants for runtime handler loading.
|
|
4
|
+
|
|
5
|
+
This module defines the trusted namespace prefixes for dynamic handler loading.
|
|
6
|
+
These prefixes form a security boundary - only modules from these namespaces
|
|
7
|
+
can be dynamically imported as handlers.
|
|
8
|
+
|
|
9
|
+
Security Model:
|
|
10
|
+
Namespace allowlisting is the first security boundary for dynamic loading.
|
|
11
|
+
It prevents arbitrary module imports but does not prevent:
|
|
12
|
+
- Dangerous submodules within an allowed namespace
|
|
13
|
+
- Dependency confusion attacks
|
|
14
|
+
- Side effects at import time
|
|
15
|
+
|
|
16
|
+
Additional security layers include:
|
|
17
|
+
- Contract validation (handler_class must match contract schema)
|
|
18
|
+
- Protocol validation (class must implement ProtocolHandler)
|
|
19
|
+
- Optional: signature verification / registry provenance
|
|
20
|
+
|
|
21
|
+
Design Decisions:
|
|
22
|
+
- SPI is NOT included because it contains protocols, not handler implementations
|
|
23
|
+
- Third-party namespaces require explicit config file, not env vars
|
|
24
|
+
- Env vars are only acceptable to point to a config file path
|
|
25
|
+
|
|
26
|
+
Example:
|
|
27
|
+
>>> from omnibase_infra.runtime.constants_security import (
|
|
28
|
+
... TRUSTED_HANDLER_NAMESPACE_PREFIXES,
|
|
29
|
+
... )
|
|
30
|
+
>>> handler_module = "omnibase_infra.handlers.handler_db"
|
|
31
|
+
>>> is_trusted = any(
|
|
32
|
+
... handler_module.startswith(prefix)
|
|
33
|
+
... for prefix in TRUSTED_HANDLER_NAMESPACE_PREFIXES
|
|
34
|
+
... )
|
|
35
|
+
|
|
36
|
+
.. versionadded:: 0.2.8
|
|
37
|
+
Created as part of OMN-1519 security hardening.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
from __future__ import annotations
|
|
41
|
+
|
|
42
|
+
from typing import Final
|
|
43
|
+
|
|
44
|
+
# Default trusted namespace prefixes for handler loading.
|
|
45
|
+
#
|
|
46
|
+
# SECURITY: This is a security boundary. Changes require review.
|
|
47
|
+
#
|
|
48
|
+
# Why these specific namespaces:
|
|
49
|
+
# - omnibase_core.: Core framework components (may contain base handlers)
|
|
50
|
+
# - omnibase_infra.: Infrastructure handlers (db, consul, vault, etc.)
|
|
51
|
+
#
|
|
52
|
+
# Why NOT omnibase_spi.:
|
|
53
|
+
# - SPI contains protocols (interfaces), not implementations
|
|
54
|
+
# - Handlers are implementations that live in infra or application code
|
|
55
|
+
# - Loading protocols as handlers is architecturally incorrect
|
|
56
|
+
#
|
|
57
|
+
# Third-party namespaces must be explicitly configured via security config file.
|
|
58
|
+
TRUSTED_HANDLER_NAMESPACE_PREFIXES: Final[tuple[str, ...]] = (
|
|
59
|
+
"omnibase_core.",
|
|
60
|
+
"omnibase_infra.",
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
# Environment variable name for security config file path.
|
|
64
|
+
# The config file (not the env var) contains the actual security settings.
|
|
65
|
+
# This keeps security configuration auditable and reviewable.
|
|
66
|
+
SECURITY_CONFIG_PATH_ENV_VAR: Final[str] = "ONEX_SECURITY_CONFIG_PATH"
|
|
67
|
+
|
|
68
|
+
# Environment variable to explicitly opt-in to namespace override.
|
|
69
|
+
# Required for emergency operations; logs loudly at startup.
|
|
70
|
+
ALLOW_NAMESPACE_OVERRIDE_ENV_VAR: Final[str] = "ONEX_ALLOW_HANDLER_NAMESPACE_OVERRIDE"
|
|
@@ -8,17 +8,22 @@ pattern where behavior is defined in YAML rather than Python code.
|
|
|
8
8
|
|
|
9
9
|
Components:
|
|
10
10
|
- handler_routing_loader: Load handler routing subcontracts from contract.yaml
|
|
11
|
+
- operation_bindings_loader: Load operation bindings subcontracts from contract.yaml
|
|
11
12
|
|
|
12
13
|
Usage:
|
|
13
14
|
```python
|
|
14
15
|
from omnibase_infra.runtime.contract_loaders import (
|
|
15
16
|
load_handler_routing_subcontract,
|
|
17
|
+
load_operation_bindings_subcontract,
|
|
16
18
|
convert_class_to_handler_key,
|
|
17
19
|
)
|
|
18
20
|
|
|
19
21
|
# Load routing from contract.yaml
|
|
20
22
|
routing = load_handler_routing_subcontract(Path("path/to/contract.yaml"))
|
|
21
23
|
|
|
24
|
+
# Load bindings from contract.yaml
|
|
25
|
+
bindings = load_operation_bindings_subcontract(Path("path/to/contract.yaml"))
|
|
26
|
+
|
|
22
27
|
# Convert class name to handler key
|
|
23
28
|
key = convert_class_to_handler_key("HandlerNodeIntrospected")
|
|
24
29
|
# Returns: "handler-node-introspected"
|
|
@@ -32,6 +37,9 @@ from omnibase_infra.runtime.contract_loaders.handler_routing_loader import (
|
|
|
32
37
|
load_handler_class_info_from_contract,
|
|
33
38
|
load_handler_routing_subcontract,
|
|
34
39
|
)
|
|
40
|
+
from omnibase_infra.runtime.contract_loaders.operation_bindings_loader import (
|
|
41
|
+
load_operation_bindings_subcontract,
|
|
42
|
+
)
|
|
35
43
|
|
|
36
44
|
__all__ = [
|
|
37
45
|
"MAX_CONTRACT_FILE_SIZE_BYTES",
|
|
@@ -39,4 +47,5 @@ __all__ = [
|
|
|
39
47
|
"convert_class_to_handler_key",
|
|
40
48
|
"load_handler_class_info_from_contract",
|
|
41
49
|
"load_handler_routing_subcontract",
|
|
50
|
+
"load_operation_bindings_subcontract",
|
|
42
51
|
]
|