"""Read models for the enterprise connector control plane.""" from sqlalchemy.dialects.postgresql import ARRAY, JSONB, UUID from app import db from app.core.common.identifiers import new_governance_uid class ConnectorManifestRecord(db.Model): __tablename__ = "connector_manifests" __table_args__ = ( db.UniqueConstraint("connector_id", "connector_version"), {"schema": "public"}, ) uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid) connector_id = db.Column(db.String(64), nullable=False) connector_version = db.Column(db.String(40), nullable=False) sdk_version = db.Column(db.String(20), nullable=False) display_name = db.Column(db.String(200), nullable=False) capabilities = db.Column(JSONB, nullable=False) config_schema = db.Column(JSONB, nullable=False) status = db.Column(db.String(20), nullable=False) class ConnectorPrincipal(db.Model): __tablename__ = "connector_principals" __table_args__ = {"schema": "public"} uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid) connector_id = db.Column(db.String(64), nullable=False) connector_version = db.Column(db.String(40), nullable=False) source_uid = db.Column(UUID(as_uuid=False), nullable=False) business_domain_uid = db.Column(UUID(as_uuid=False), nullable=False) environment = db.Column(db.String(20), nullable=False) allowed_operations = db.Column(ARRAY(db.Text), nullable=False) allowed_scopes = db.Column(JSONB, nullable=False) status = db.Column(db.String(20), nullable=False) source_binding_uid = db.Column(UUID(as_uuid=False)) source_binding_version = db.Column(db.Integer) class ConnectorSourceBinding(db.Model): __tablename__ = "connector_source_bindings" __table_args__ = {"schema": "public"} uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid) binding_version = db.Column(db.Integer, primary_key=True) connector_id = db.Column(db.String(64), nullable=False) connector_version = db.Column(db.String(40), nullable=False) source_uid = db.Column(UUID(as_uuid=False), nullable=False) business_domain_uid = db.Column(UUID(as_uuid=False), nullable=False) environment = db.Column(db.String(20), nullable=False) approved_base_url = db.Column(db.String(2048)) allowed_host = db.Column(db.String(253)) credential_ref = db.Column(db.String(300)) approved_config = db.Column(JSONB, nullable=False) status = db.Column(db.String(20), nullable=False) approved_by = db.Column(UUID(as_uuid=False), nullable=False) class ConnectorRun(db.Model): __tablename__ = "connector_runs" __table_args__ = {"schema": "public"} uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid) idempotency_key = db.Column(db.String(64), nullable=False, unique=True) connector_id = db.Column(db.String(64), nullable=False) connector_version = db.Column(db.String(40), nullable=False) source_uid = db.Column(UUID(as_uuid=False), nullable=False) principal_uid = db.Column(UUID(as_uuid=False)) business_domain_uid = db.Column(UUID(as_uuid=False)) environment = db.Column(db.String(20)) process_key = db.Column(db.String(300)) operation = db.Column(db.String(30), nullable=False) status = db.Column(db.String(20), nullable=False) attempt_count = db.Column(db.Integer, nullable=False) checkpoint = db.Column(JSONB, nullable=False) cursor = db.Column(JSONB, nullable=False) safe_config = db.Column(JSONB, nullable=False) scope = db.Column(JSONB, nullable=False) request_hash = db.Column(db.String(64), nullable=False) client_hint_hash = db.Column(db.String(64)) source_binding_uid = db.Column(UUID(as_uuid=False)) source_binding_version = db.Column(db.Integer) attempt_lease_token = db.Column(UUID(as_uuid=False)) cancel_requested = db.Column(db.Boolean, nullable=False, default=False)