{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnector",
  "definitions": {
    "strmprivacy.api.entities.v1.AzureBlobStorageContainerLocation": {
      "type": "object",
      "properties": {
        "clientSecretCredential": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AzureBlobStorageContainerLocation/definitions/client_secret_credential"
        },
        "containerName": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AzureBlobStorageContainerLocation/definitions/container_name"
        },
        "storageAccountUri": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AzureBlobStorageContainerLocation/definitions/storage_account_uri"
        }
      },
      "patternProperties": {
        "^client_secret_credential$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AzureBlobStorageContainerLocation/definitions/client_secret_credential"
        },
        "^container_name$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AzureBlobStorageContainerLocation/definitions/container_name"
        },
        "^storage_account_uri$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AzureBlobStorageContainerLocation/definitions/storage_account_uri"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "client_secret_credential": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.AzureClientSecretCredential"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.AzureClientSecretCredential client_secret_credential = 3;",
          "description": "The AAD client secret credential used to acquire a token for the AAD application that has the required\n permissions on this Blob Storage Container.",
          "default": {
            
          }
        },
        "container_name": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string container_name = 2;",
          "description": "(-- api-linter: core::0122::name-suffix=disabled\n     aip.dev/not-precedent: We refer to a container name. --)\n Name of the Storage Container",
          "default": ""
        },
        "storage_account_uri": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string storage_account_uri = 1;",
          "description": "The base URI of the Azure Storage Account. Typically this is 'https://<your-account-name>.blob.core.windows.net',\n but Azure users can map this to their own domain or subdomain.",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.ConsentLevelExtractor": {
      "type": "object",
      "properties": {
        "field": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.ConsentLevelExtractor/definitions/field"
        },
        "fieldPatterns": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.ConsentLevelExtractor/definitions/field_patterns"
        }
      },
      "patternProperties": {
        "^field_patterns$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.ConsentLevelExtractor/definitions/field_patterns"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "field": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string field = 1;",
          "default": ""
        },
        "field_patterns": {
          "oneOf": [
            {
              "type": "object",
              "additionalProperties": {
                "oneOf": [
                  {
                    "$ref": "#/definitions/strmprivacy.api.entities.v1.ConsentLevels"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "strmprivacy.api.entities.v1.ConsentLevels",
                "default": {
                  
                }
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "map<string, strmprivacy.api.entities.v1.ConsentLevels> field_patterns = 2;",
          "default": {
            
          }
        }
      }
    },
    "strmprivacy.api.entities.v1.DataType": {
      "type": "object",
      "properties": {
        "csv": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataType/definitions/csv"
        },
        "database": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataType/definitions/database"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "csv": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.CsvConfig"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.CsvConfig csv = 1;",
          "default": {
            
          }
        },
        "database": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.DatabaseConfig"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.DatabaseConfig database = 2;",
          "default": {
            
          }
        }
      }
    },
    "strmprivacy.api.entities.v1.BatchJob": {
      "type": "object",
      "properties": {
        "consent": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/consent"
        },
        "derivedData": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/derived_data"
        },
        "encryptedData": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/encrypted_data"
        },
        "encryption": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/encryption"
        },
        "encryptionKeysData": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/encryption_keys_data"
        },
        "eventContractRef": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/event_contract_ref"
        },
        "policyId": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/policy_id"
        },
        "ref": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/ref"
        },
        "sourceData": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/source_data"
        },
        "states": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/states"
        }
      },
      "patternProperties": {
        "^derived_data$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/derived_data"
        },
        "^encrypted_data$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/encrypted_data"
        },
        "^encryption_keys_data$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/encryption_keys_data"
        },
        "^event_contract_ref$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/event_contract_ref"
        },
        "^policy_id$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/policy_id"
        },
        "^source_data$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob/definitions/source_data"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "consent": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.ConsentConfig"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.ConsentConfig consent = 4;",
          "default": {
            
          }
        },
        "derived_data": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/definitions/strmprivacy.api.entities.v1.DerivedData",
                "title": "strmprivacy.api.entities.v1.DerivedData",
                "default": {
                  
                }
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "repeated strmprivacy.api.entities.v1.DerivedData derived_data = 9;",
          "default": [
            {
              
            }
          ]
        },
        "encrypted_data": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.EncryptedData"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.EncryptedData encrypted_data = 7;",
          "default": {
            
          }
        },
        "encryption": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.EncryptionConfig"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.EncryptionConfig encryption = 5;",
          "default": {
            
          }
        },
        "encryption_keys_data": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.EncryptionKeysData"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.EncryptionKeysData encryption_keys_data = 8;",
          "default": {
            
          }
        },
        "event_contract_ref": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.EventContractRef"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.EventContractRef event_contract_ref = 6;",
          "default": {
            
          }
        },
        "policy_id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string policy_id = 10;",
          "default": ""
        },
        "ref": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJobRef"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.BatchJobRef ref = 1;",
          "default": {
            
          }
        },
        "source_data": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorAndType"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.DataConnectorAndType source_data = 3;",
          "default": {
            
          }
        },
        "states": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJobState",
                "title": "strmprivacy.api.entities.v1.BatchJobState",
                "default": {
                  
                }
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "repeated strmprivacy.api.entities.v1.BatchJobState states = 2;",
          "default": [
            {
              
            }
          ]
        }
      },
      "description": "********************************\nBatch Jobs\nCurrently we only support:\n- CSV as DataFormat type\n- a clean database for every batch job\n- CSV files with a header row, because the header is needed to get the field names\n*******************************"
    },
    "strmprivacy.api.entities.v1.ConsentLevels": {
      "type": "object",
      "properties": {
        "consentLevels": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.ConsentLevels/definitions/consent_levels"
        }
      },
      "patternProperties": {
        "^consent_levels$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.ConsentLevels/definitions/consent_levels"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "consent_levels": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "integer"
                  }
                ],
                "title": "int32"
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "repeated int32 consent_levels = 1;",
          "default": null
        }
      }
    },
    "strmprivacy.api.entities.v1.EncryptionKeysData": {
      "type": "object",
      "properties": {
        "target": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.EncryptionKeysData/definitions/target"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "target": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorAndType"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.DataConnectorAndType target = 1;",
          "default": {
            
          }
        }
      }
    },
    "strmprivacy.api.entities.v1.BatchJobRef": {
      "type": "object",
      "properties": {
        "billingId": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJobRef/definitions/billing_id"
        },
        "id": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJobRef/definitions/id"
        },
        "projectId": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJobRef/definitions/project_id"
        }
      },
      "patternProperties": {
        "^billing_id$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJobRef/definitions/billing_id"
        },
        "^project_id$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJobRef/definitions/project_id"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "billing_id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string billing_id = 1;",
          "default": "",
          "deprecationMessage": "Field \"billing_id\" is marked as deprecated"
        },
        "id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string id = 2;",
          "description": "the UUIDv4 of the job, generated upon creation",
          "default": ""
        },
        "project_id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string project_id = 3;",
          "description": "the UUIDv4 of the STRM Privacy project",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.KeyStreamRef": {
      "type": "object",
      "properties": {
        "billingId": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.KeyStreamRef/definitions/billing_id"
        },
        "name": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.KeyStreamRef/definitions/name"
        },
        "projectId": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.KeyStreamRef/definitions/project_id"
        }
      },
      "patternProperties": {
        "^billing_id$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.KeyStreamRef/definitions/billing_id"
        },
        "^project_id$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.KeyStreamRef/definitions/project_id"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "billing_id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string billing_id = 1;",
          "default": "",
          "deprecationMessage": "Field \"billing_id\" is marked as deprecated"
        },
        "name": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string name = 2;",
          "description": "the name of the stream",
          "default": ""
        },
        "project_id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string project_id = 3;",
          "default": ""
        }
      },
      "description": "refers to a key stream."
    },
    "strmprivacy.api.entities.v1.AzureClientSecretCredential": {
      "type": "object",
      "properties": {
        "clientId": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AzureClientSecretCredential/definitions/client_id"
        },
        "clientSecret": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AzureClientSecretCredential/definitions/client_secret"
        },
        "tenantId": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AzureClientSecretCredential/definitions/tenant_id"
        }
      },
      "patternProperties": {
        "^client_id$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AzureClientSecretCredential/definitions/client_id"
        },
        "^client_secret$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AzureClientSecretCredential/definitions/client_secret"
        },
        "^tenant_id$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AzureClientSecretCredential/definitions/tenant_id"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "client_id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string client_id = 2;",
          "description": "Client ID of the Azure AD Application.",
          "default": ""
        },
        "client_secret": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string client_secret = 3;",
          "description": "Client secret to use for authentication.",
          "default": ""
        },
        "tenant_id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string tenant_id = 1;",
          "description": "Tenant ID of the Azure AD Application.",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.DatabaseType": {
      "enum": [
        "DATABASE_TYPE_UNSPECIFIED",
        0,
        "POSTGRES",
        1,
        "MYSQL",
        2,
        "BIGQUERY",
        3,
        "SNOWFLAKE",
        4
      ],
      "markdownEnumDescriptions": [
        "(or 0) ",
        "(or \"DATABASE_TYPE_UNSPECIFIED\") ",
        "(or 1) ",
        "(or \"POSTGRES\") ",
        "(or 2) ",
        "(or \"MYSQL\") ",
        "(or 3) ",
        "(or \"BIGQUERY\") ",
        "(or 4) ",
        "(or \"SNOWFLAKE\") "
      ]
    },
    "strmprivacy.api.entities.v1.DerivedData": {
      "type": "object",
      "properties": {
        "consentLevelType": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DerivedData/definitions/consent_level_type"
        },
        "consentLevels": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DerivedData/definitions/consent_levels"
        },
        "maskedFields": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DerivedData/definitions/masked_fields"
        },
        "target": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DerivedData/definitions/target"
        }
      },
      "patternProperties": {
        "^consent_level_type$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DerivedData/definitions/consent_level_type"
        },
        "^consent_levels$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DerivedData/definitions/consent_levels"
        },
        "^masked_fields$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DerivedData/definitions/masked_fields"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "consent_level_type": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.ConsentLevelType"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.ConsentLevelType consent_level_type = 3;",
          "default": "CONSENT_LEVEL_TYPE_UNSPECIFIED"
        },
        "consent_levels": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "integer"
                  }
                ],
                "title": "int32"
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "repeated int32 consent_levels = 2;",
          "default": null
        },
        "masked_fields": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.MaskedFields"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.MaskedFields masked_fields = 4;",
          "default": {
            
          }
        },
        "target": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorAndType"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.DataConnectorAndType target = 1;",
          "default": {
            
          }
        }
      }
    },
    "strmprivacy.api.entities.v1.MicroAggregationBatchJob": {
      "type": "object",
      "properties": {
        "aggregationConfig": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationBatchJob/definitions/aggregation_config"
        },
        "dataContractRef": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationBatchJob/definitions/data_contract_ref"
        },
        "ref": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationBatchJob/definitions/ref"
        },
        "sourceData": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationBatchJob/definitions/source_data"
        },
        "states": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationBatchJob/definitions/states"
        },
        "targetData": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationBatchJob/definitions/target_data"
        }
      },
      "patternProperties": {
        "^aggregation_config$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationBatchJob/definitions/aggregation_config"
        },
        "^data_contract_ref$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationBatchJob/definitions/data_contract_ref"
        },
        "^source_data$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationBatchJob/definitions/source_data"
        },
        "^target_data$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationBatchJob/definitions/target_data"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "aggregation_config": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationConfig"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.MicroAggregationConfig aggregation_config = 6;",
          "description": "Configuration specifically for the aggregation algorithm.",
          "default": {
            
          }
        },
        "data_contract_ref": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.DataContractRef"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.DataContractRef data_contract_ref = 5;",
          "default": {
            
          }
        },
        "ref": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJobRef"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.BatchJobRef ref = 1;",
          "default": {
            
          }
        },
        "source_data": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorAndType"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.DataConnectorAndType source_data = 3;",
          "default": {
            
          }
        },
        "states": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJobState",
                "title": "strmprivacy.api.entities.v1.BatchJobState",
                "default": {
                  
                }
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "repeated strmprivacy.api.entities.v1.BatchJobState states = 2;",
          "default": [
            {
              
            }
          ]
        },
        "target_data": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorAndType"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.DataConnectorAndType target_data = 4;",
          "default": {
            
          }
        }
      },
      "description": "********************************\nK-Member Micro-aggregation Batch Job\nCurrently we only support:\n- CSV as DataFormat type\n- CSV files with a header row, because the header is needed to get the field names\n- Numerical, Categorical & Ordinal data\n*******************************"
    },
    "strmprivacy.api.entities.v1.StreamRef": {
      "type": "object",
      "properties": {
        "billingId": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.StreamRef/definitions/billing_id"
        },
        "name": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.StreamRef/definitions/name"
        },
        "projectId": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.StreamRef/definitions/project_id"
        }
      },
      "patternProperties": {
        "^billing_id$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.StreamRef/definitions/billing_id"
        },
        "^project_id$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.StreamRef/definitions/project_id"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "billing_id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string billing_id = 1;",
          "default": "",
          "deprecationMessage": "Field \"billing_id\" is marked as deprecated"
        },
        "name": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string name = 2;",
          "description": "the name of the stream\nconstraints: generic name",
          "default": ""
        },
        "project_id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string project_id = 3;",
          "default": ""
        }
      },
      "description": "refers to a event stream."
    },
    "google.protobuf.Duration": {
      "type": "string",
      "pattern": "s$",
      "default": "0s"
    },
    "google.protobuf.Timestamp": {
      "type": "string",
      "format": "date-time",
      "default": ""
    },
    "strmprivacy.api.entities.v1.BatchJobState": {
      "type": "object",
      "properties": {
        "message": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJobState/definitions/message"
        },
        "state": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJobState/definitions/state"
        },
        "stateTime": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJobState/definitions/state_time"
        }
      },
      "patternProperties": {
        "^state_time$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJobState/definitions/state_time"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "message": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string message = 3;",
          "default": ""
        },
        "state": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJobStateType"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.BatchJobStateType state = 2;",
          "default": "BATCH_JOB_STATE_TYPE_UNSPECIFIED"
        },
        "state_time": {
          "oneOf": [
            {
              "$ref": "#/definitions/google.protobuf.Timestamp"
            },
            {
              "type": "null"
            }
          ],
          "title": "google.protobuf.Timestamp state_time = 1;"
        }
      }
    },
    "strmprivacy.api.entities.v1.CsvConfig": {
      "type": "object",
      "properties": {
        "charset": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.CsvConfig/definitions/charset"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "charset": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string charset = 1;",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.MicroAggregationConfig": {
      "type": "object",
      "properties": {
        "aggregationFields": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationConfig/definitions/aggregation_fields"
        },
        "minimumKAnonymity": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationConfig/definitions/minimum_k_anonymity"
        }
      },
      "patternProperties": {
        "^aggregation_fields$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationConfig/definitions/aggregation_fields"
        },
        "^minimum_k_anonymity$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationConfig/definitions/minimum_k_anonymity"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "aggregation_fields": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "title": "string"
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "repeated string aggregation_fields = 2;",
          "description": "If specified, these fields will be used to aggregate on. Otherwise, fields specified as Quasi Identifiers in the data contract are used instead.",
          "default": null
        },
        "minimum_k_anonymity": {
          "oneOf": [
            {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            {
              "type": "null"
            }
          ],
          "title": "int32 minimum_k_anonymity = 1;",
          "description": "The desired k-anonymity level.",
          "default": 0
        }
      }
    },
    "strmprivacy.api.entities.v1.BatchExporter": {
      "type": "object",
      "properties": {
        "dataConnectorRef": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter/definitions/data_connector_ref"
        },
        "includeExistingEvents": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter/definitions/include_existing_events"
        },
        "interval": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter/definitions/interval"
        },
        "keyStreamRef": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter/definitions/key_stream_ref"
        },
        "pathPrefix": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter/definitions/path_prefix"
        },
        "ref": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter/definitions/ref"
        },
        "sinkName": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter/definitions/sink_name"
        },
        "streamRef": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter/definitions/stream_ref"
        }
      },
      "patternProperties": {
        "^data_connector_ref$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter/definitions/data_connector_ref"
        },
        "^include_existing_events$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter/definitions/include_existing_events"
        },
        "^key_stream_ref$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter/definitions/key_stream_ref"
        },
        "^path_prefix$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter/definitions/path_prefix"
        },
        "^sink_name$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter/definitions/sink_name"
        },
        "^stream_ref$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter/definitions/stream_ref"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "data_connector_ref": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorRef"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.DataConnectorRef data_connector_ref = 8;",
          "default": {
            
          }
        },
        "include_existing_events": {
          "oneOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "title": "bool include_existing_events = 7;",
          "default": false
        },
        "interval": {
          "oneOf": [
            {
              "$ref": "#/definitions/google.protobuf.Duration"
            },
            {
              "type": "null"
            }
          ],
          "title": "google.protobuf.Duration interval = 4;",
          "description": "granularity of seconds, nanos is unused"
        },
        "key_stream_ref": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.KeyStreamRef"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.KeyStreamRef key_stream_ref = 3;",
          "default": {
            
          }
        },
        "path_prefix": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string path_prefix = 6;",
          "default": ""
        },
        "ref": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporterRef"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.BatchExporterRef ref = 1;",
          "default": {
            
          }
        },
        "sink_name": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string sink_name = 5;",
          "description": "(-- api-linter: core::0122::name-suffix=disabled\n     aip.dev/not-precedent: We refer to the sink by name. --)\n Deprecated in favor of data_connector_ref",
          "default": "",
          "deprecationMessage": "Field \"sink_name\" is marked as deprecated"
        },
        "stream_ref": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.StreamRef"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.StreamRef stream_ref = 2;",
          "default": {
            
          }
        }
      },
      "description": "A batch exporter."
    },
    "strmprivacy.api.entities.v1.DataConnectorDependentEntities": {
      "type": "object",
      "properties": {
        "batchExporters": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorDependentEntities/definitions/batch_exporters"
        },
        "batchJobs": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorDependentEntities/definitions/batch_jobs"
        },
        "microAggregationBatchJobs": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorDependentEntities/definitions/micro_aggregation_batch_jobs"
        }
      },
      "patternProperties": {
        "^batch_exporters$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorDependentEntities/definitions/batch_exporters"
        },
        "^batch_jobs$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorDependentEntities/definitions/batch_jobs"
        },
        "^micro_aggregation_batch_jobs$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorDependentEntities/definitions/micro_aggregation_batch_jobs"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "batch_exporters": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporter",
                "title": "strmprivacy.api.entities.v1.BatchExporter",
                "default": {
                  
                }
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "repeated strmprivacy.api.entities.v1.BatchExporter batch_exporters = 1;",
          "default": [
            {
              
            }
          ]
        },
        "batch_jobs": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchJob",
                "title": "strmprivacy.api.entities.v1.BatchJob",
                "default": {
                  
                }
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "repeated strmprivacy.api.entities.v1.BatchJob batch_jobs = 2;",
          "default": [
            {
              
            }
          ]
        },
        "micro_aggregation_batch_jobs": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/definitions/strmprivacy.api.entities.v1.MicroAggregationBatchJob",
                "title": "strmprivacy.api.entities.v1.MicroAggregationBatchJob",
                "default": {
                  
                }
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "repeated strmprivacy.api.entities.v1.MicroAggregationBatchJob micro_aggregation_batch_jobs = 3;",
          "default": [
            {
              
            }
          ]
        }
      }
    },
    "strmprivacy.api.entities.v1.DatabaseConfig": {
      "type": "object",
      "properties": {
        "columns": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DatabaseConfig/definitions/columns"
        },
        "schema": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DatabaseConfig/definitions/schema"
        },
        "table": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DatabaseConfig/definitions/table"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "columns": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "title": "string"
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "repeated string columns = 3;",
          "default": null
        },
        "schema": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string schema = 1;",
          "default": ""
        },
        "table": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string table = 2;",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.EventContractRef": {
      "type": "object",
      "properties": {
        "handle": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.EventContractRef/definitions/handle"
        },
        "name": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.EventContractRef/definitions/name"
        },
        "version": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.EventContractRef/definitions/version"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "handle": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string handle = 1;",
          "description": "constraint: handle should already exist",
          "default": ""
        },
        "name": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string name = 2;",
          "description": "constraints: generic name constraint, unique within handle",
          "default": ""
        },
        "version": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string version = 3;",
          "description": "constraints: semantic version, e.g. 1.12.3",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.BatchExporterRef": {
      "type": "object",
      "properties": {
        "billingId": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporterRef/definitions/billing_id"
        },
        "name": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporterRef/definitions/name"
        },
        "projectId": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporterRef/definitions/project_id"
        }
      },
      "patternProperties": {
        "^billing_id$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporterRef/definitions/billing_id"
        },
        "^project_id$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.BatchExporterRef/definitions/project_id"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "billing_id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string billing_id = 1;",
          "default": "",
          "deprecationMessage": "Field \"billing_id\" is marked as deprecated"
        },
        "name": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string name = 2;",
          "default": ""
        },
        "project_id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string project_id = 3;",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.ConsentLevelType": {
      "enum": [
        "CONSENT_LEVEL_TYPE_UNSPECIFIED",
        0,
        "CUMULATIVE",
        1,
        "GRANULAR",
        2
      ],
      "description": "Consent level is meant to interpret the consent-levels of an event for decryption purposes only.\n\nCumulative means that the highest consent-level in an event must be greater than or equal to the single requested level\nfor the decrypted stream.\n\nGranular means that the set of consent-levels in an event must enclose the set of requested event levels for the\ndecrypted stream.",
      "markdownEnumDescriptions": [
        "(or 0) ",
        "(or \"CONSENT_LEVEL_TYPE_UNSPECIFIED\") ",
        "(or 1) ",
        "(or \"CUMULATIVE\") ",
        "(or 2) ",
        "(or \"GRANULAR\") "
      ]
    },
    "strmprivacy.api.entities.v1.DataConnectorAndType": {
      "type": "object",
      "properties": {
        "dataConnectorRef": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorAndType/definitions/data_connector_ref"
        },
        "dataType": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorAndType/definitions/data_type"
        },
        "fileName": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorAndType/definitions/file_name"
        },
        "pathPrefix": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorAndType/definitions/path_prefix"
        }
      },
      "patternProperties": {
        "^data_connector_ref$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorAndType/definitions/data_connector_ref"
        },
        "^data_type$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorAndType/definitions/data_type"
        },
        "^file_name$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorAndType/definitions/file_name"
        },
        "^path_prefix$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorAndType/definitions/path_prefix"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "data_connector_ref": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorRef"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.DataConnectorRef data_connector_ref = 1;",
          "default": {
            
          }
        },
        "data_type": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.DataType"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.DataType data_type = 4;",
          "default": {
            
          }
        },
        "file_name": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string file_name = 3;",
          "description": "(-- api-linter: core::0122::name-suffix=disabled\n     aip.dev/not-precedent: We think file_name is a better name. --)",
          "default": ""
        },
        "path_prefix": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string path_prefix = 2;",
          "description": "If omitted, files are read from the root of the bucket.",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.MaskedFields.PatternList": {
      "type": "object",
      "properties": {
        "fieldPatterns": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MaskedFields.PatternList/definitions/field_patterns"
        }
      },
      "patternProperties": {
        "^field_patterns$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MaskedFields.PatternList/definitions/field_patterns"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "field_patterns": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "title": "string"
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "repeated string field_patterns = 1;",
          "default": null
        }
      }
    },
    "strmprivacy.api.entities.v1.DataConnector": {
      "type": "object",
      "properties": {
        "azureBlobStorageContainer": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnector/definitions/azure_blob_storage_container"
        },
        "dependentEntities": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnector/definitions/dependent_entities"
        },
        "googleCloudStorageBucket": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnector/definitions/google_cloud_storage_bucket"
        },
        "jdbcLocation": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnector/definitions/jdbc_location"
        },
        "ref": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnector/definitions/ref"
        },
        "s3Bucket": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnector/definitions/s3_bucket"
        },
        "uuid": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnector/definitions/uuid"
        }
      },
      "patternProperties": {
        "^azure_blob_storage_container$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnector/definitions/azure_blob_storage_container"
        },
        "^dependent_entities$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnector/definitions/dependent_entities"
        },
        "^google_cloud_storage_bucket$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnector/definitions/google_cloud_storage_bucket"
        },
        "^jdbc_location$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnector/definitions/jdbc_location"
        },
        "^s3_bucket$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnector/definitions/s3_bucket"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "azure_blob_storage_container": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.AzureBlobStorageContainerLocation"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.AzureBlobStorageContainerLocation azure_blob_storage_container = 4;",
          "default": {
            
          }
        },
        "dependent_entities": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorDependentEntities"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.DataConnectorDependentEntities dependent_entities = 6;",
          "default": {
            
          }
        },
        "google_cloud_storage_bucket": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.GoogleCloudStorageBucketLocation"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.GoogleCloudStorageBucketLocation google_cloud_storage_bucket = 3;",
          "default": {
            
          }
        },
        "jdbc_location": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.JdbcLocation"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.JdbcLocation jdbc_location = 7;",
          "default": {
            
          }
        },
        "ref": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorRef"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.DataConnectorRef ref = 1;",
          "default": {
            
          }
        },
        "s3_bucket": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.AwsS3BucketLocation"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.AwsS3BucketLocation s3_bucket = 2;",
          "default": {
            
          }
        },
        "uuid": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string uuid = 5;",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.DataContractRef": {
      "type": "object",
      "properties": {
        "handle": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataContractRef/definitions/handle"
        },
        "name": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataContractRef/definitions/name"
        },
        "version": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataContractRef/definitions/version"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "handle": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string handle = 1;",
          "description": "constraint: handle should already exist",
          "default": ""
        },
        "name": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string name = 2;",
          "description": "constraints: generic name constraint, unique within handle",
          "default": ""
        },
        "version": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string version = 3;",
          "description": "constraints: semantic version, e.g. 1.12.3",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.DataConnectorRef": {
      "type": "object",
      "properties": {
        "billingId": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorRef/definitions/billing_id"
        },
        "name": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorRef/definitions/name"
        },
        "projectId": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorRef/definitions/project_id"
        }
      },
      "patternProperties": {
        "^billing_id$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorRef/definitions/billing_id"
        },
        "^project_id$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorRef/definitions/project_id"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "billing_id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string billing_id = 1;",
          "default": "",
          "deprecationMessage": "Field \"billing_id\" is marked as deprecated"
        },
        "name": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string name = 2;",
          "default": ""
        },
        "project_id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string project_id = 3;",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.GoogleCloudStorageBucketLocation": {
      "type": "object",
      "properties": {
        "bucketName": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.GoogleCloudStorageBucketLocation/definitions/bucket_name"
        },
        "credentials": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.GoogleCloudStorageBucketLocation/definitions/credentials"
        }
      },
      "patternProperties": {
        "^bucket_name$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.GoogleCloudStorageBucketLocation/definitions/bucket_name"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "bucket_name": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string bucket_name = 1;",
          "description": "(-- api-linter: core::0122::name-suffix=disabled\n     aip.dev/not-precedent: We refer to a bucket name. --)",
          "default": ""
        },
        "credentials": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string credentials = 2;",
          "description": "The Google Cloud Service Account credentials JSON that is used to access the Google Cloud Storage bucket.\n We do not support credentials in P12 format.",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.JdbcLocation": {
      "type": "object",
      "properties": {
        "databaseType": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.JdbcLocation/definitions/database_type"
        },
        "jdbcUri": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.JdbcLocation/definitions/jdbc_uri"
        },
        "privateKey": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.JdbcLocation/definitions/private_key"
        }
      },
      "patternProperties": {
        "^database_type$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.JdbcLocation/definitions/database_type"
        },
        "^jdbc_uri$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.JdbcLocation/definitions/jdbc_uri"
        },
        "^private_key$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.JdbcLocation/definitions/private_key"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "database_type": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.DatabaseType"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.DatabaseType database_type = 3;",
          "default": "DATABASE_TYPE_UNSPECIFIED"
        },
        "jdbc_uri": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string jdbc_uri = 1;",
          "default": ""
        },
        "private_key": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string private_key = 2;",
          "description": "this is a private key for a service account to authenticate with google bigquery. It is added by the cli upon\n creating the jdbc data connector",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.EncryptionConfig": {
      "type": "object",
      "properties": {
        "batchJobGroupId": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.EncryptionConfig/definitions/batch_job_group_id"
        },
        "timestampConfig": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.EncryptionConfig/definitions/timestamp_config"
        }
      },
      "patternProperties": {
        "^batch_job_group_id$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.EncryptionConfig/definitions/batch_job_group_id"
        },
        "^timestamp_config$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.EncryptionConfig/definitions/timestamp_config"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "batch_job_group_id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string batch_job_group_id = 2;",
          "default": ""
        },
        "timestamp_config": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.TimestampConfig"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.TimestampConfig timestamp_config = 1;",
          "default": {
            
          }
        }
      }
    },
    "strmprivacy.api.entities.v1.BatchJobStateType": {
      "enum": [
        "BATCH_JOB_STATE_TYPE_UNSPECIFIED",
        0,
        "PENDING",
        1,
        "STARTED",
        2,
        "ERROR_STARTING",
        3,
        "RUNNING",
        4,
        "FINISHED",
        5,
        "ERROR",
        6
      ],
      "markdownEnumDescriptions": [
        "(or 0) ",
        "(or \"BATCH_JOB_STATE_TYPE_UNSPECIFIED\") ",
        "(or 1) ",
        "(or \"PENDING\") ",
        "(or 2) ",
        "(or \"STARTED\") ",
        "(or 3) ",
        "(or \"ERROR_STARTING\") ",
        "(or 4) ",
        "(or \"RUNNING\") ",
        "(or 5) ",
        "(or \"FINISHED\") ",
        "(or 6) ",
        "(or \"ERROR\") "
      ]
    },
    "strmprivacy.api.entities.v1.ConsentConfig": {
      "type": "object",
      "properties": {
        "consentLevelExtractor": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.ConsentConfig/definitions/consent_level_extractor"
        },
        "defaultConsentLevels": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.ConsentConfig/definitions/default_consent_levels"
        }
      },
      "patternProperties": {
        "^consent_level_extractor$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.ConsentConfig/definitions/consent_level_extractor"
        },
        "^default_consent_levels$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.ConsentConfig/definitions/default_consent_levels"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "consent_level_extractor": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.ConsentLevelExtractor"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.ConsentLevelExtractor consent_level_extractor = 2;",
          "default": {
            
          }
        },
        "default_consent_levels": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "integer"
                  }
                ],
                "title": "int32"
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "repeated int32 default_consent_levels = 1;",
          "default": null
        }
      }
    },
    "strmprivacy.api.entities.v1.MaskedFields": {
      "type": "object",
      "properties": {
        "fieldPatterns": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MaskedFields/definitions/field_patterns"
        },
        "hashType": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MaskedFields/definitions/hash_type"
        },
        "seed": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MaskedFields/definitions/seed"
        }
      },
      "patternProperties": {
        "^field_patterns$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MaskedFields/definitions/field_patterns"
        },
        "^hash_type$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.MaskedFields/definitions/hash_type"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "field_patterns": {
          "oneOf": [
            {
              "type": "object",
              "additionalProperties": {
                "oneOf": [
                  {
                    "$ref": "#/definitions/strmprivacy.api.entities.v1.MaskedFields.PatternList"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "strmprivacy.api.entities.v1.MaskedFields.PatternList",
                "default": {
                  
                }
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "map<string, strmprivacy.api.entities.v1.MaskedFields.PatternList> field_patterns = 3;",
          "description": "map of event-contract-ref vs field patterns\n\nconstraints:\n data-contract-refs should be existing data contracts\n field_patterns should be valid values (checked by events-core)\n the field_patterns list should have no duplicates.",
          "default": {
            
          }
        },
        "hash_type": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string hash_type = 1;",
          "description": "Default Murmurhash3 if empty",
          "default": ""
        },
        "seed": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string seed = 2;",
          "description": "hashing seed",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.TimestampConfig": {
      "type": "object",
      "properties": {
        "defaultTimeZone": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.TimestampConfig/definitions/default_time_zone"
        },
        "field": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.TimestampConfig/definitions/field"
        },
        "format": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.TimestampConfig/definitions/format"
        }
      },
      "patternProperties": {
        "^default_time_zone$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.TimestampConfig/definitions/default_time_zone"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "default_time_zone": {
          "oneOf": [
            {
              "$ref": "#/definitions/google.type.TimeZone"
            },
            {
              "type": "null"
            }
          ],
          "title": "google.type.TimeZone default_time_zone = 3;",
          "default": {
            
          }
        },
        "field": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string field = 1;",
          "description": "generic field name",
          "default": ""
        },
        "format": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string format = 2;",
          "description": "Java Time Format template, see https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html",
          "default": ""
        }
      }
    },
    "google.type.TimeZone": {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/definitions/google.type.TimeZone/definitions/id"
        },
        "version": {
          "$ref": "#/definitions/google.type.TimeZone/definitions/version"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string id = 1;",
          "description": "IANA Time Zone Database time zone, e.g. \"America/New_York\".",
          "default": ""
        },
        "version": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string version = 2;",
          "description": "Optional. IANA Time Zone Database version number, e.g. \"2019a\".",
          "default": ""
        }
      },
      "description": "Represents a time zone from the\n [IANA Time Zone Database](https://www.iana.org/time-zones)."
    },
    "strmprivacy.api.entities.v1.AwsS3BucketLocation": {
      "type": "object",
      "properties": {
        "assumeRoleArn": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AwsS3BucketLocation/definitions/assume_role_arn"
        },
        "bucketName": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AwsS3BucketLocation/definitions/bucket_name"
        },
        "credentials": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AwsS3BucketLocation/definitions/credentials"
        }
      },
      "patternProperties": {
        "^assume_role_arn$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AwsS3BucketLocation/definitions/assume_role_arn"
        },
        "^bucket_name$": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.AwsS3BucketLocation/definitions/bucket_name"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "assume_role_arn": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string assume_role_arn = 3;",
          "description": "The ARN of the role to assume.\nIf present, start an AssumeRole flow to get temporary credentials in another AWS account.\nThis is used when the customer has a separate users account.\nDefault there is no assumed role.",
          "default": ""
        },
        "bucket_name": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string bucket_name = 1;",
          "description": "(-- api-linter: core::0122::name-suffix=disabled\n     aip.dev/not-precedent: We refer to a bucket name. --)",
          "default": ""
        },
        "credentials": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "string credentials = 2;",
          "description": "The AWS IAM credentials that give access to this bucket, in JSON format as returned by the AWS CLI. This means a\n JSON with at least one property: \"AccessKey\", which contains at least the two properties: \"AccessKeyId\" and\n \"SecretAccessKey\".",
          "default": ""
        }
      }
    },
    "strmprivacy.api.entities.v1.EncryptedData": {
      "type": "object",
      "properties": {
        "target": {
          "$ref": "#/definitions/strmprivacy.api.entities.v1.EncryptedData/definitions/target"
        }
      },
      "additionalProperties": {
        "title": "Unknown field"
      },
      "definitions": {
        "target": {
          "oneOf": [
            {
              "$ref": "#/definitions/strmprivacy.api.entities.v1.DataConnectorAndType"
            },
            {
              "type": "null"
            }
          ],
          "title": "strmprivacy.api.entities.v1.DataConnectorAndType target = 1;",
          "default": {
            
          }
        }
      }
    }
  },
  "title": "strmprivacy.api.entities.v1.DataConnector"
}