firestore.projects.databases.backupSchedules.create

enum_GoogleFirestoreAdminV1WeeklyRecurrenceDay := [ "DAY_OF_WEEK_UNSPECIFIED", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" ]

valid {
    input.Body.dailyRecurrence.STRING == STRING
    input.Body.retention == STRING
    input.Body.weeklyRecurrence.day == enum_GoogleFirestoreAdminV1WeeklyRecurrenceDay[_]
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.backupSchedules.delete

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.backupSchedules.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.backupSchedules.list

valid {
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.backupSchedules.patch

enum_GoogleFirestoreAdminV1WeeklyRecurrenceDay := [ "DAY_OF_WEEK_UNSPECIFIED", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" ]

valid {
    input.Body.dailyRecurrence.STRING == STRING
    input.Body.retention == STRING
    input.Body.weeklyRecurrence.day == enum_GoogleFirestoreAdminV1WeeklyRecurrenceDay[_]
    input.ReqMap.name == STRING
    input.Qs.updateMask == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.bulkDeleteDocuments

valid {
    input.Body.collectionIds[_] == STRING
    input.Body.namespaceIds[_] == STRING
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.collectionGroups.fields.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.collectionGroups.fields.list

valid {
    input.ReqMap.parent == STRING
    input.Qs.filter == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.collectionGroups.fields.patch

enum_GoogleFirestoreAdminV1IndexApiScope := [ "ANY_API", "DATASTORE_MODE_API" ]
enum_GoogleFirestoreAdminV1IndexFieldArrayConfig := [ "ARRAY_CONFIG_UNSPECIFIED", "CONTAINS" ]
enum_GoogleFirestoreAdminV1IndexFieldOrder := [ "ORDER_UNSPECIFIED", "ASCENDING", "DESCENDING" ]
enum_GoogleFirestoreAdminV1IndexQueryScope := [ "QUERY_SCOPE_UNSPECIFIED", "COLLECTION", "COLLECTION_GROUP", "COLLECTION_RECURSIVE" ]
enum_GoogleFirestoreAdminV1IndexState := [ "STATE_UNSPECIFIED", "CREATING", "READY", "NEEDS_REPAIR" ]

valid {
    input.Body.indexConfig.ancestorField == STRING
    input.Body.indexConfig.indexes[_].apiScope == enum_GoogleFirestoreAdminV1IndexApiScope[_]
    input.Body.indexConfig.indexes[_].fields[_].arrayConfig == enum_GoogleFirestoreAdminV1IndexFieldArrayConfig[_]
    input.Body.indexConfig.indexes[_].fields[_].fieldPath == STRING
    input.Body.indexConfig.indexes[_].fields[_].order == enum_GoogleFirestoreAdminV1IndexFieldOrder[_]
    input.Body.indexConfig.indexes[_].fields[_].vectorConfig.dimension == INTEGER
    input.Body.indexConfig.indexes[_].fields[_].vectorConfig.flat.STRING == STRING
    input.Body.indexConfig.indexes[_].name == STRING
    input.Body.indexConfig.indexes[_].queryScope == enum_GoogleFirestoreAdminV1IndexQueryScope[_]
    input.Body.indexConfig.indexes[_].state == enum_GoogleFirestoreAdminV1IndexState[_]
    input.Body.indexConfig.reverting == BOOLEAN
    input.Body.indexConfig.usesAncestorConfig == BOOLEAN
    input.Body.name == STRING
    input.Body.ttlConfig == {}
    input.ReqMap.name == STRING
    input.Qs.updateMask == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.collectionGroups.indexes.create

enum_GoogleFirestoreAdminV1IndexApiScope := [ "ANY_API", "DATASTORE_MODE_API" ]
enum_GoogleFirestoreAdminV1IndexFieldArrayConfig := [ "ARRAY_CONFIG_UNSPECIFIED", "CONTAINS" ]
enum_GoogleFirestoreAdminV1IndexFieldOrder := [ "ORDER_UNSPECIFIED", "ASCENDING", "DESCENDING" ]
enum_GoogleFirestoreAdminV1IndexQueryScope := [ "QUERY_SCOPE_UNSPECIFIED", "COLLECTION", "COLLECTION_GROUP", "COLLECTION_RECURSIVE" ]
enum_GoogleFirestoreAdminV1IndexState := [ "STATE_UNSPECIFIED", "CREATING", "READY", "NEEDS_REPAIR" ]

valid {
    input.Body.apiScope == enum_GoogleFirestoreAdminV1IndexApiScope[_]
    input.Body.fields[_].arrayConfig == enum_GoogleFirestoreAdminV1IndexFieldArrayConfig[_]
    input.Body.fields[_].fieldPath == STRING
    input.Body.fields[_].order == enum_GoogleFirestoreAdminV1IndexFieldOrder[_]
    input.Body.fields[_].vectorConfig.dimension == INTEGER
    input.Body.fields[_].vectorConfig.flat.STRING == STRING
    input.Body.name == STRING
    input.Body.queryScope == enum_GoogleFirestoreAdminV1IndexQueryScope[_]
    input.Body.state == enum_GoogleFirestoreAdminV1IndexState[_]
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.collectionGroups.indexes.delete

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.collectionGroups.indexes.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.collectionGroups.indexes.list

valid {
    input.ReqMap.parent == STRING
    input.Qs.filter == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.create

enum_GoogleFirestoreAdminV1DatabaseAppEngineIntegrationMode := [ "APP_ENGINE_INTEGRATION_MODE_UNSPECIFIED", "ENABLED", "DISABLED" ]
enum_GoogleFirestoreAdminV1DatabaseConcurrencyMode := [ "CONCURRENCY_MODE_UNSPECIFIED", "OPTIMISTIC", "PESSIMISTIC", "OPTIMISTIC_WITH_ENTITY_GROUPS" ]
enum_GoogleFirestoreAdminV1DatabaseDeleteProtectionState := [ "DELETE_PROTECTION_STATE_UNSPECIFIED", "DELETE_PROTECTION_DISABLED", "DELETE_PROTECTION_ENABLED" ]
enum_GoogleFirestoreAdminV1DatabasePointInTimeRecoveryEnablement := [ "POINT_IN_TIME_RECOVERY_ENABLEMENT_UNSPECIFIED", "POINT_IN_TIME_RECOVERY_ENABLED", "POINT_IN_TIME_RECOVERY_DISABLED" ]
enum_GoogleFirestoreAdminV1DatabaseType := [ "DATABASE_TYPE_UNSPECIFIED", "FIRESTORE_NATIVE", "DATASTORE_MODE" ]

valid {
    input.Body.appEngineIntegrationMode == enum_GoogleFirestoreAdminV1DatabaseAppEngineIntegrationMode[_]
    input.Body.cmekConfig.kmsKeyName == STRING
    input.Body.concurrencyMode == enum_GoogleFirestoreAdminV1DatabaseConcurrencyMode[_]
    input.Body.deleteProtectionState == enum_GoogleFirestoreAdminV1DatabaseDeleteProtectionState[_]
    input.Body.etag == STRING
    input.Body.locationId == STRING
    input.Body.name == STRING
    input.Body.pointInTimeRecoveryEnablement == enum_GoogleFirestoreAdminV1DatabasePointInTimeRecoveryEnablement[_]
    input.Body.type == enum_GoogleFirestoreAdminV1DatabaseType[_]
    input.ReqMap.parent == STRING
    input.Qs.databaseId == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.delete

valid {
    input.ReqMap.name == STRING
    input.Qs.etag == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.batchGet

valid {
    input.Body.documents[_] == STRING
    input.Body.mask.fieldPaths[_] == STRING
    input.Body.newTransaction.readOnly.readTime == STRING
    input.Body.newTransaction.readWrite.retryTransaction == STRING
    input.Body.readTime == STRING
    input.Body.transaction == STRING
    input.ReqMap.database == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.batchWrite

enum_FieldTransformSetToServerValue := [ "SERVER_VALUE_UNSPECIFIED", "REQUEST_TIME" ]
enum_ValueNullValue := [ "NULL_VALUE" ]

valid {
    input.Body.labels.STRING == STRING
    input.Body.writes[_].currentDocument.exists == BOOLEAN
    input.Body.writes[_].currentDocument.updateTime == STRING
    input.Body.writes[_].delete == STRING
    input.Body.writes[_].transform.document == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].arrayValue == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].fieldPath == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.arrayValue.values[_] == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].increment.booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].increment.bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].increment.geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].increment.geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].increment.integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].increment.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].increment.referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.arrayValue.values[_] == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].maximum.booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].maximum.bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].maximum.geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].maximum.geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].maximum.integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].maximum.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].maximum.referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.arrayValue.values[_] == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].minimum.booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].minimum.bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].minimum.geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].minimum.geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].minimum.integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].minimum.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].minimum.referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].arrayValue == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].setToServerValue == enum_FieldTransformSetToServerValue[_]
    input.Body.writes[_].update.createTime == STRING
    input.Body.writes[_].update.fields.STRING.arrayValue.values[_] == NESTED
    input.Body.writes[_].update.fields.STRING.booleanValue == BOOLEAN
    input.Body.writes[_].update.fields.STRING.bytesValue == STRING
    input.Body.writes[_].update.fields.STRING.doubleValue == NUMBER
    input.Body.writes[_].update.fields.STRING.geoPointValue.latitude == NUMBER
    input.Body.writes[_].update.fields.STRING.geoPointValue.longitude == NUMBER
    input.Body.writes[_].update.fields.STRING.integerValue == STRING
    input.Body.writes[_].update.fields.STRING.mapValue.fields.STRING == NESTED
    input.Body.writes[_].update.fields.STRING.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].update.fields.STRING.referenceValue == STRING
    input.Body.writes[_].update.fields.STRING.stringValue == STRING
    input.Body.writes[_].update.fields.STRING.timestampValue == STRING
    input.Body.writes[_].update.name == STRING
    input.Body.writes[_].update.updateTime == STRING
    input.Body.writes[_].updateMask.fieldPaths[_] == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].arrayValue == NESTED
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].integerValue == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].stringValue == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].fieldPath == STRING
    input.Body.writes[_].updateTransforms[_].increment.arrayValue.values[_] == NESTED
    input.Body.writes[_].updateTransforms[_].increment.booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].increment.bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].increment.doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].increment.geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].increment.geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].increment.integerValue == STRING
    input.Body.writes[_].updateTransforms[_].increment.mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].increment.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].increment.referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].increment.stringValue == STRING
    input.Body.writes[_].updateTransforms[_].increment.timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.arrayValue.values[_] == NESTED
    input.Body.writes[_].updateTransforms[_].maximum.booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].maximum.bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].maximum.geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].maximum.geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].maximum.integerValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].maximum.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].maximum.referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.stringValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.arrayValue.values[_] == NESTED
    input.Body.writes[_].updateTransforms[_].minimum.booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].minimum.bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].minimum.geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].minimum.geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].minimum.integerValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].minimum.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].minimum.referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.stringValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].arrayValue == NESTED
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].integerValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].stringValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].setToServerValue == enum_FieldTransformSetToServerValue[_]
    input.ReqMap.database == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.beginTransaction

valid {
    input.Body.options.readOnly.readTime == STRING
    input.Body.options.readWrite.retryTransaction == STRING
    input.ReqMap.database == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.commit

enum_FieldTransformSetToServerValue := [ "SERVER_VALUE_UNSPECIFIED", "REQUEST_TIME" ]
enum_ValueNullValue := [ "NULL_VALUE" ]

valid {
    input.Body.transaction == STRING
    input.Body.writes[_].currentDocument.exists == BOOLEAN
    input.Body.writes[_].currentDocument.updateTime == STRING
    input.Body.writes[_].delete == STRING
    input.Body.writes[_].transform.document == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].arrayValue == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].fieldPath == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.arrayValue.values[_] == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].increment.booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].increment.bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].increment.geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].increment.geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].increment.integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].increment.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].increment.referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.arrayValue.values[_] == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].maximum.booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].maximum.bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].maximum.geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].maximum.geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].maximum.integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].maximum.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].maximum.referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.arrayValue.values[_] == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].minimum.booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].minimum.bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].minimum.geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].minimum.geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].minimum.integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].minimum.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].minimum.referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].arrayValue == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].setToServerValue == enum_FieldTransformSetToServerValue[_]
    input.Body.writes[_].update.createTime == STRING
    input.Body.writes[_].update.fields.STRING.arrayValue.values[_] == NESTED
    input.Body.writes[_].update.fields.STRING.booleanValue == BOOLEAN
    input.Body.writes[_].update.fields.STRING.bytesValue == STRING
    input.Body.writes[_].update.fields.STRING.doubleValue == NUMBER
    input.Body.writes[_].update.fields.STRING.geoPointValue.latitude == NUMBER
    input.Body.writes[_].update.fields.STRING.geoPointValue.longitude == NUMBER
    input.Body.writes[_].update.fields.STRING.integerValue == STRING
    input.Body.writes[_].update.fields.STRING.mapValue.fields.STRING == NESTED
    input.Body.writes[_].update.fields.STRING.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].update.fields.STRING.referenceValue == STRING
    input.Body.writes[_].update.fields.STRING.stringValue == STRING
    input.Body.writes[_].update.fields.STRING.timestampValue == STRING
    input.Body.writes[_].update.name == STRING
    input.Body.writes[_].update.updateTime == STRING
    input.Body.writes[_].updateMask.fieldPaths[_] == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].arrayValue == NESTED
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].integerValue == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].stringValue == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].fieldPath == STRING
    input.Body.writes[_].updateTransforms[_].increment.arrayValue.values[_] == NESTED
    input.Body.writes[_].updateTransforms[_].increment.booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].increment.bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].increment.doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].increment.geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].increment.geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].increment.integerValue == STRING
    input.Body.writes[_].updateTransforms[_].increment.mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].increment.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].increment.referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].increment.stringValue == STRING
    input.Body.writes[_].updateTransforms[_].increment.timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.arrayValue.values[_] == NESTED
    input.Body.writes[_].updateTransforms[_].maximum.booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].maximum.bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].maximum.geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].maximum.geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].maximum.integerValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].maximum.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].maximum.referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.stringValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.arrayValue.values[_] == NESTED
    input.Body.writes[_].updateTransforms[_].minimum.booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].minimum.bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].minimum.geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].minimum.geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].minimum.integerValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].minimum.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].minimum.referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.stringValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].arrayValue == NESTED
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].integerValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].stringValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].setToServerValue == enum_FieldTransformSetToServerValue[_]
    input.ReqMap.database == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.createDocument

enum_ValueNullValue := [ "NULL_VALUE" ]

valid {
    input.Body.createTime == STRING
    input.Body.fields.STRING.arrayValue.values[_] == NESTED
    input.Body.fields.STRING.booleanValue == BOOLEAN
    input.Body.fields.STRING.bytesValue == STRING
    input.Body.fields.STRING.doubleValue == NUMBER
    input.Body.fields.STRING.geoPointValue.latitude == NUMBER
    input.Body.fields.STRING.geoPointValue.longitude == NUMBER
    input.Body.fields.STRING.integerValue == STRING
    input.Body.fields.STRING.mapValue.fields.STRING == NESTED
    input.Body.fields.STRING.nullValue == enum_ValueNullValue[_]
    input.Body.fields.STRING.referenceValue == STRING
    input.Body.fields.STRING.stringValue == STRING
    input.Body.fields.STRING.timestampValue == STRING
    input.Body.name == STRING
    input.Body.updateTime == STRING
    input.ReqMap.collectionId == STRING
    input.ReqMap.parent == STRING
    input.Qs.documentId == STRING
    input.Qs.mask.fieldPaths == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.delete

valid {
    input.ReqMap.name == STRING
    input.Qs.currentDocument.exists == BOOLEAN
    input.Qs.currentDocument.updateTime == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.get

valid {
    input.ReqMap.name == STRING
    input.Qs.mask.fieldPaths == STRING
    input.Qs.readTime == STRING
    input.Qs.transaction == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.list

valid {
    input.ReqMap.collectionId == STRING
    input.ReqMap.parent == STRING
    input.Qs.mask.fieldPaths == STRING
    input.Qs.orderBy == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.Qs.readTime == STRING
    input.Qs.showMissing == BOOLEAN
    input.Qs.transaction == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.listCollectionIds

valid {
    input.Body.pageSize == INTEGER
    input.Body.pageToken == STRING
    input.Body.readTime == STRING
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.listDocuments

valid {
    input.ReqMap.collectionId == STRING
    input.ReqMap.parent == STRING
    input.Qs.mask.fieldPaths == STRING
    input.Qs.orderBy == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.Qs.readTime == STRING
    input.Qs.showMissing == BOOLEAN
    input.Qs.transaction == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.listen

enum_CompositeFilterOp := [ "OPERATOR_UNSPECIFIED", "AND", "OR" ]
enum_FieldFilterOp := [ "OPERATOR_UNSPECIFIED", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "EQUAL", "NOT_EQUAL", "ARRAY_CONTAINS", "IN", "ARRAY_CONTAINS_ANY", "NOT_IN" ]
enum_FindNearestDistanceMeasure := [ "DISTANCE_MEASURE_UNSPECIFIED", "EUCLIDEAN", "COSINE", "DOT_PRODUCT" ]
enum_OrderDirection := [ "DIRECTION_UNSPECIFIED", "ASCENDING", "DESCENDING" ]
enum_UnaryFilterOp := [ "OPERATOR_UNSPECIFIED", "IS_NAN", "IS_NULL", "IS_NOT_NAN", "IS_NOT_NULL" ]
enum_ValueNullValue := [ "NULL_VALUE" ]

valid {
    input.Body.addTarget.documents.documents[_] == STRING
    input.Body.addTarget.expectedCount == INTEGER
    input.Body.addTarget.once == BOOLEAN
    input.Body.addTarget.query.parent == STRING
    input.Body.addTarget.query.structuredQuery.endAt.before == BOOLEAN
    input.Body.addTarget.query.structuredQuery.endAt.values[_].arrayValue.values[_] == NESTED
    input.Body.addTarget.query.structuredQuery.endAt.values[_].booleanValue == BOOLEAN
    input.Body.addTarget.query.structuredQuery.endAt.values[_].bytesValue == STRING
    input.Body.addTarget.query.structuredQuery.endAt.values[_].doubleValue == NUMBER
    input.Body.addTarget.query.structuredQuery.endAt.values[_].geoPointValue.latitude == NUMBER
    input.Body.addTarget.query.structuredQuery.endAt.values[_].geoPointValue.longitude == NUMBER
    input.Body.addTarget.query.structuredQuery.endAt.values[_].integerValue == STRING
    input.Body.addTarget.query.structuredQuery.endAt.values[_].mapValue.fields.STRING == NESTED
    input.Body.addTarget.query.structuredQuery.endAt.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.addTarget.query.structuredQuery.endAt.values[_].referenceValue == STRING
    input.Body.addTarget.query.structuredQuery.endAt.values[_].stringValue == STRING
    input.Body.addTarget.query.structuredQuery.endAt.values[_].timestampValue == STRING
    input.Body.addTarget.query.structuredQuery.findNearest.distanceMeasure == enum_FindNearestDistanceMeasure[_]
    input.Body.addTarget.query.structuredQuery.findNearest.distanceResultField == STRING
    input.Body.addTarget.query.structuredQuery.findNearest.distanceThreshold == NUMBER
    input.Body.addTarget.query.structuredQuery.findNearest.limit == INTEGER
    input.Body.addTarget.query.structuredQuery.findNearest.queryVector.arrayValue.values[_] == NESTED
    input.Body.addTarget.query.structuredQuery.findNearest.queryVector.booleanValue == BOOLEAN
    input.Body.addTarget.query.structuredQuery.findNearest.queryVector.bytesValue == STRING
    input.Body.addTarget.query.structuredQuery.findNearest.queryVector.doubleValue == NUMBER
    input.Body.addTarget.query.structuredQuery.findNearest.queryVector.geoPointValue.latitude == NUMBER
    input.Body.addTarget.query.structuredQuery.findNearest.queryVector.geoPointValue.longitude == NUMBER
    input.Body.addTarget.query.structuredQuery.findNearest.queryVector.integerValue == STRING
    input.Body.addTarget.query.structuredQuery.findNearest.queryVector.mapValue.fields.STRING == NESTED
    input.Body.addTarget.query.structuredQuery.findNearest.queryVector.nullValue == enum_ValueNullValue[_]
    input.Body.addTarget.query.structuredQuery.findNearest.queryVector.referenceValue == STRING
    input.Body.addTarget.query.structuredQuery.findNearest.queryVector.stringValue == STRING
    input.Body.addTarget.query.structuredQuery.findNearest.queryVector.timestampValue == STRING
    input.Body.addTarget.query.structuredQuery.findNearest.vectorField.fieldPath == STRING
    input.Body.addTarget.query.structuredQuery.from[_].allDescendants == BOOLEAN
    input.Body.addTarget.query.structuredQuery.from[_].collectionId == STRING
    input.Body.addTarget.query.structuredQuery.limit == INTEGER
    input.Body.addTarget.query.structuredQuery.offset == INTEGER
    input.Body.addTarget.query.structuredQuery.orderBy[_].direction == enum_OrderDirection[_]
    input.Body.addTarget.query.structuredQuery.orderBy[_].field.fieldPath == STRING
    input.Body.addTarget.query.structuredQuery.select.fields[_].fieldPath == STRING
    input.Body.addTarget.query.structuredQuery.startAt.before == BOOLEAN
    input.Body.addTarget.query.structuredQuery.startAt.values[_].arrayValue.values[_] == NESTED
    input.Body.addTarget.query.structuredQuery.startAt.values[_].booleanValue == BOOLEAN
    input.Body.addTarget.query.structuredQuery.startAt.values[_].bytesValue == STRING
    input.Body.addTarget.query.structuredQuery.startAt.values[_].doubleValue == NUMBER
    input.Body.addTarget.query.structuredQuery.startAt.values[_].geoPointValue.latitude == NUMBER
    input.Body.addTarget.query.structuredQuery.startAt.values[_].geoPointValue.longitude == NUMBER
    input.Body.addTarget.query.structuredQuery.startAt.values[_].integerValue == STRING
    input.Body.addTarget.query.structuredQuery.startAt.values[_].mapValue.fields.STRING == NESTED
    input.Body.addTarget.query.structuredQuery.startAt.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.addTarget.query.structuredQuery.startAt.values[_].referenceValue == STRING
    input.Body.addTarget.query.structuredQuery.startAt.values[_].stringValue == STRING
    input.Body.addTarget.query.structuredQuery.startAt.values[_].timestampValue == STRING
    input.Body.addTarget.query.structuredQuery.where.compositeFilter.filters[_] == NESTED
    input.Body.addTarget.query.structuredQuery.where.compositeFilter.op == enum_CompositeFilterOp[_]
    input.Body.addTarget.query.structuredQuery.where.fieldFilter.field.fieldPath == STRING
    input.Body.addTarget.query.structuredQuery.where.fieldFilter.op == enum_FieldFilterOp[_]
    input.Body.addTarget.query.structuredQuery.where.fieldFilter.value.arrayValue.values[_] == NESTED
    input.Body.addTarget.query.structuredQuery.where.fieldFilter.value.booleanValue == BOOLEAN
    input.Body.addTarget.query.structuredQuery.where.fieldFilter.value.bytesValue == STRING
    input.Body.addTarget.query.structuredQuery.where.fieldFilter.value.doubleValue == NUMBER
    input.Body.addTarget.query.structuredQuery.where.fieldFilter.value.geoPointValue.latitude == NUMBER
    input.Body.addTarget.query.structuredQuery.where.fieldFilter.value.geoPointValue.longitude == NUMBER
    input.Body.addTarget.query.structuredQuery.where.fieldFilter.value.integerValue == STRING
    input.Body.addTarget.query.structuredQuery.where.fieldFilter.value.mapValue.fields.STRING == NESTED
    input.Body.addTarget.query.structuredQuery.where.fieldFilter.value.nullValue == enum_ValueNullValue[_]
    input.Body.addTarget.query.structuredQuery.where.fieldFilter.value.referenceValue == STRING
    input.Body.addTarget.query.structuredQuery.where.fieldFilter.value.stringValue == STRING
    input.Body.addTarget.query.structuredQuery.where.fieldFilter.value.timestampValue == STRING
    input.Body.addTarget.query.structuredQuery.where.unaryFilter.field.fieldPath == STRING
    input.Body.addTarget.query.structuredQuery.where.unaryFilter.op == enum_UnaryFilterOp[_]
    input.Body.addTarget.readTime == STRING
    input.Body.addTarget.resumeToken == STRING
    input.Body.addTarget.targetId == INTEGER
    input.Body.labels.STRING == STRING
    input.Body.removeTarget == INTEGER
    input.ReqMap.database == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.partitionQuery

enum_CompositeFilterOp := [ "OPERATOR_UNSPECIFIED", "AND", "OR" ]
enum_FieldFilterOp := [ "OPERATOR_UNSPECIFIED", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "EQUAL", "NOT_EQUAL", "ARRAY_CONTAINS", "IN", "ARRAY_CONTAINS_ANY", "NOT_IN" ]
enum_FindNearestDistanceMeasure := [ "DISTANCE_MEASURE_UNSPECIFIED", "EUCLIDEAN", "COSINE", "DOT_PRODUCT" ]
enum_OrderDirection := [ "DIRECTION_UNSPECIFIED", "ASCENDING", "DESCENDING" ]
enum_UnaryFilterOp := [ "OPERATOR_UNSPECIFIED", "IS_NAN", "IS_NULL", "IS_NOT_NAN", "IS_NOT_NULL" ]
enum_ValueNullValue := [ "NULL_VALUE" ]

valid {
    input.Body.pageSize == INTEGER
    input.Body.pageToken == STRING
    input.Body.partitionCount == STRING
    input.Body.readTime == STRING
    input.Body.structuredQuery.endAt.before == BOOLEAN
    input.Body.structuredQuery.endAt.values[_].arrayValue.values[_] == NESTED
    input.Body.structuredQuery.endAt.values[_].booleanValue == BOOLEAN
    input.Body.structuredQuery.endAt.values[_].bytesValue == STRING
    input.Body.structuredQuery.endAt.values[_].doubleValue == NUMBER
    input.Body.structuredQuery.endAt.values[_].geoPointValue.latitude == NUMBER
    input.Body.structuredQuery.endAt.values[_].geoPointValue.longitude == NUMBER
    input.Body.structuredQuery.endAt.values[_].integerValue == STRING
    input.Body.structuredQuery.endAt.values[_].mapValue.fields.STRING == NESTED
    input.Body.structuredQuery.endAt.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.structuredQuery.endAt.values[_].referenceValue == STRING
    input.Body.structuredQuery.endAt.values[_].stringValue == STRING
    input.Body.structuredQuery.endAt.values[_].timestampValue == STRING
    input.Body.structuredQuery.findNearest.distanceMeasure == enum_FindNearestDistanceMeasure[_]
    input.Body.structuredQuery.findNearest.distanceResultField == STRING
    input.Body.structuredQuery.findNearest.distanceThreshold == NUMBER
    input.Body.structuredQuery.findNearest.limit == INTEGER
    input.Body.structuredQuery.findNearest.queryVector.arrayValue.values[_] == NESTED
    input.Body.structuredQuery.findNearest.queryVector.booleanValue == BOOLEAN
    input.Body.structuredQuery.findNearest.queryVector.bytesValue == STRING
    input.Body.structuredQuery.findNearest.queryVector.doubleValue == NUMBER
    input.Body.structuredQuery.findNearest.queryVector.geoPointValue.latitude == NUMBER
    input.Body.structuredQuery.findNearest.queryVector.geoPointValue.longitude == NUMBER
    input.Body.structuredQuery.findNearest.queryVector.integerValue == STRING
    input.Body.structuredQuery.findNearest.queryVector.mapValue.fields.STRING == NESTED
    input.Body.structuredQuery.findNearest.queryVector.nullValue == enum_ValueNullValue[_]
    input.Body.structuredQuery.findNearest.queryVector.referenceValue == STRING
    input.Body.structuredQuery.findNearest.queryVector.stringValue == STRING
    input.Body.structuredQuery.findNearest.queryVector.timestampValue == STRING
    input.Body.structuredQuery.findNearest.vectorField.fieldPath == STRING
    input.Body.structuredQuery.from[_].allDescendants == BOOLEAN
    input.Body.structuredQuery.from[_].collectionId == STRING
    input.Body.structuredQuery.limit == INTEGER
    input.Body.structuredQuery.offset == INTEGER
    input.Body.structuredQuery.orderBy[_].direction == enum_OrderDirection[_]
    input.Body.structuredQuery.orderBy[_].field.fieldPath == STRING
    input.Body.structuredQuery.select.fields[_].fieldPath == STRING
    input.Body.structuredQuery.startAt.before == BOOLEAN
    input.Body.structuredQuery.startAt.values[_].arrayValue.values[_] == NESTED
    input.Body.structuredQuery.startAt.values[_].booleanValue == BOOLEAN
    input.Body.structuredQuery.startAt.values[_].bytesValue == STRING
    input.Body.structuredQuery.startAt.values[_].doubleValue == NUMBER
    input.Body.structuredQuery.startAt.values[_].geoPointValue.latitude == NUMBER
    input.Body.structuredQuery.startAt.values[_].geoPointValue.longitude == NUMBER
    input.Body.structuredQuery.startAt.values[_].integerValue == STRING
    input.Body.structuredQuery.startAt.values[_].mapValue.fields.STRING == NESTED
    input.Body.structuredQuery.startAt.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.structuredQuery.startAt.values[_].referenceValue == STRING
    input.Body.structuredQuery.startAt.values[_].stringValue == STRING
    input.Body.structuredQuery.startAt.values[_].timestampValue == STRING
    input.Body.structuredQuery.where.compositeFilter.filters[_] == NESTED
    input.Body.structuredQuery.where.compositeFilter.op == enum_CompositeFilterOp[_]
    input.Body.structuredQuery.where.fieldFilter.field.fieldPath == STRING
    input.Body.structuredQuery.where.fieldFilter.op == enum_FieldFilterOp[_]
    input.Body.structuredQuery.where.fieldFilter.value.arrayValue.values[_] == NESTED
    input.Body.structuredQuery.where.fieldFilter.value.booleanValue == BOOLEAN
    input.Body.structuredQuery.where.fieldFilter.value.bytesValue == STRING
    input.Body.structuredQuery.where.fieldFilter.value.doubleValue == NUMBER
    input.Body.structuredQuery.where.fieldFilter.value.geoPointValue.latitude == NUMBER
    input.Body.structuredQuery.where.fieldFilter.value.geoPointValue.longitude == NUMBER
    input.Body.structuredQuery.where.fieldFilter.value.integerValue == STRING
    input.Body.structuredQuery.where.fieldFilter.value.mapValue.fields.STRING == NESTED
    input.Body.structuredQuery.where.fieldFilter.value.nullValue == enum_ValueNullValue[_]
    input.Body.structuredQuery.where.fieldFilter.value.referenceValue == STRING
    input.Body.structuredQuery.where.fieldFilter.value.stringValue == STRING
    input.Body.structuredQuery.where.fieldFilter.value.timestampValue == STRING
    input.Body.structuredQuery.where.unaryFilter.field.fieldPath == STRING
    input.Body.structuredQuery.where.unaryFilter.op == enum_UnaryFilterOp[_]
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.patch

enum_ValueNullValue := [ "NULL_VALUE" ]

valid {
    input.Body.createTime == STRING
    input.Body.fields.STRING.arrayValue.values[_] == NESTED
    input.Body.fields.STRING.booleanValue == BOOLEAN
    input.Body.fields.STRING.bytesValue == STRING
    input.Body.fields.STRING.doubleValue == NUMBER
    input.Body.fields.STRING.geoPointValue.latitude == NUMBER
    input.Body.fields.STRING.geoPointValue.longitude == NUMBER
    input.Body.fields.STRING.integerValue == STRING
    input.Body.fields.STRING.mapValue.fields.STRING == NESTED
    input.Body.fields.STRING.nullValue == enum_ValueNullValue[_]
    input.Body.fields.STRING.referenceValue == STRING
    input.Body.fields.STRING.stringValue == STRING
    input.Body.fields.STRING.timestampValue == STRING
    input.Body.name == STRING
    input.Body.updateTime == STRING
    input.ReqMap.name == STRING
    input.Qs.currentDocument.exists == BOOLEAN
    input.Qs.currentDocument.updateTime == STRING
    input.Qs.mask.fieldPaths == STRING
    input.Qs.updateMask.fieldPaths == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.rollback

valid {
    input.Body.transaction == STRING
    input.ReqMap.database == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.runAggregationQuery

enum_CompositeFilterOp := [ "OPERATOR_UNSPECIFIED", "AND", "OR" ]
enum_FieldFilterOp := [ "OPERATOR_UNSPECIFIED", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "EQUAL", "NOT_EQUAL", "ARRAY_CONTAINS", "IN", "ARRAY_CONTAINS_ANY", "NOT_IN" ]
enum_FindNearestDistanceMeasure := [ "DISTANCE_MEASURE_UNSPECIFIED", "EUCLIDEAN", "COSINE", "DOT_PRODUCT" ]
enum_OrderDirection := [ "DIRECTION_UNSPECIFIED", "ASCENDING", "DESCENDING" ]
enum_UnaryFilterOp := [ "OPERATOR_UNSPECIFIED", "IS_NAN", "IS_NULL", "IS_NOT_NAN", "IS_NOT_NULL" ]
enum_ValueNullValue := [ "NULL_VALUE" ]

valid {
    input.Body.explainOptions.analyze == BOOLEAN
    input.Body.newTransaction.readOnly.readTime == STRING
    input.Body.newTransaction.readWrite.retryTransaction == STRING
    input.Body.readTime == STRING
    input.Body.structuredAggregationQuery.aggregations[_].alias == STRING
    input.Body.structuredAggregationQuery.aggregations[_].avg.field.fieldPath == STRING
    input.Body.structuredAggregationQuery.aggregations[_].count.upTo == STRING
    input.Body.structuredAggregationQuery.aggregations[_].sum.field.fieldPath == STRING
    input.Body.structuredAggregationQuery.structuredQuery.endAt.before == BOOLEAN
    input.Body.structuredAggregationQuery.structuredQuery.endAt.values[_].arrayValue.values[_] == NESTED
    input.Body.structuredAggregationQuery.structuredQuery.endAt.values[_].booleanValue == BOOLEAN
    input.Body.structuredAggregationQuery.structuredQuery.endAt.values[_].bytesValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.endAt.values[_].doubleValue == NUMBER
    input.Body.structuredAggregationQuery.structuredQuery.endAt.values[_].geoPointValue.latitude == NUMBER
    input.Body.structuredAggregationQuery.structuredQuery.endAt.values[_].geoPointValue.longitude == NUMBER
    input.Body.structuredAggregationQuery.structuredQuery.endAt.values[_].integerValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.endAt.values[_].mapValue.fields.STRING == NESTED
    input.Body.structuredAggregationQuery.structuredQuery.endAt.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.structuredAggregationQuery.structuredQuery.endAt.values[_].referenceValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.endAt.values[_].stringValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.endAt.values[_].timestampValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.distanceMeasure == enum_FindNearestDistanceMeasure[_]
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.distanceResultField == STRING
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.distanceThreshold == NUMBER
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.limit == INTEGER
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.queryVector.arrayValue.values[_] == NESTED
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.queryVector.booleanValue == BOOLEAN
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.queryVector.bytesValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.queryVector.doubleValue == NUMBER
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.queryVector.geoPointValue.latitude == NUMBER
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.queryVector.geoPointValue.longitude == NUMBER
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.queryVector.integerValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.queryVector.mapValue.fields.STRING == NESTED
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.queryVector.nullValue == enum_ValueNullValue[_]
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.queryVector.referenceValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.queryVector.stringValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.queryVector.timestampValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.findNearest.vectorField.fieldPath == STRING
    input.Body.structuredAggregationQuery.structuredQuery.from[_].allDescendants == BOOLEAN
    input.Body.structuredAggregationQuery.structuredQuery.from[_].collectionId == STRING
    input.Body.structuredAggregationQuery.structuredQuery.limit == INTEGER
    input.Body.structuredAggregationQuery.structuredQuery.offset == INTEGER
    input.Body.structuredAggregationQuery.structuredQuery.orderBy[_].direction == enum_OrderDirection[_]
    input.Body.structuredAggregationQuery.structuredQuery.orderBy[_].field.fieldPath == STRING
    input.Body.structuredAggregationQuery.structuredQuery.select.fields[_].fieldPath == STRING
    input.Body.structuredAggregationQuery.structuredQuery.startAt.before == BOOLEAN
    input.Body.structuredAggregationQuery.structuredQuery.startAt.values[_].arrayValue.values[_] == NESTED
    input.Body.structuredAggregationQuery.structuredQuery.startAt.values[_].booleanValue == BOOLEAN
    input.Body.structuredAggregationQuery.structuredQuery.startAt.values[_].bytesValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.startAt.values[_].doubleValue == NUMBER
    input.Body.structuredAggregationQuery.structuredQuery.startAt.values[_].geoPointValue.latitude == NUMBER
    input.Body.structuredAggregationQuery.structuredQuery.startAt.values[_].geoPointValue.longitude == NUMBER
    input.Body.structuredAggregationQuery.structuredQuery.startAt.values[_].integerValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.startAt.values[_].mapValue.fields.STRING == NESTED
    input.Body.structuredAggregationQuery.structuredQuery.startAt.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.structuredAggregationQuery.structuredQuery.startAt.values[_].referenceValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.startAt.values[_].stringValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.startAt.values[_].timestampValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.where.compositeFilter.filters[_] == NESTED
    input.Body.structuredAggregationQuery.structuredQuery.where.compositeFilter.op == enum_CompositeFilterOp[_]
    input.Body.structuredAggregationQuery.structuredQuery.where.fieldFilter.field.fieldPath == STRING
    input.Body.structuredAggregationQuery.structuredQuery.where.fieldFilter.op == enum_FieldFilterOp[_]
    input.Body.structuredAggregationQuery.structuredQuery.where.fieldFilter.value.arrayValue.values[_] == NESTED
    input.Body.structuredAggregationQuery.structuredQuery.where.fieldFilter.value.booleanValue == BOOLEAN
    input.Body.structuredAggregationQuery.structuredQuery.where.fieldFilter.value.bytesValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.where.fieldFilter.value.doubleValue == NUMBER
    input.Body.structuredAggregationQuery.structuredQuery.where.fieldFilter.value.geoPointValue.latitude == NUMBER
    input.Body.structuredAggregationQuery.structuredQuery.where.fieldFilter.value.geoPointValue.longitude == NUMBER
    input.Body.structuredAggregationQuery.structuredQuery.where.fieldFilter.value.integerValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.where.fieldFilter.value.mapValue.fields.STRING == NESTED
    input.Body.structuredAggregationQuery.structuredQuery.where.fieldFilter.value.nullValue == enum_ValueNullValue[_]
    input.Body.structuredAggregationQuery.structuredQuery.where.fieldFilter.value.referenceValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.where.fieldFilter.value.stringValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.where.fieldFilter.value.timestampValue == STRING
    input.Body.structuredAggregationQuery.structuredQuery.where.unaryFilter.field.fieldPath == STRING
    input.Body.structuredAggregationQuery.structuredQuery.where.unaryFilter.op == enum_UnaryFilterOp[_]
    input.Body.transaction == STRING
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.runQuery

enum_CompositeFilterOp := [ "OPERATOR_UNSPECIFIED", "AND", "OR" ]
enum_FieldFilterOp := [ "OPERATOR_UNSPECIFIED", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "EQUAL", "NOT_EQUAL", "ARRAY_CONTAINS", "IN", "ARRAY_CONTAINS_ANY", "NOT_IN" ]
enum_FindNearestDistanceMeasure := [ "DISTANCE_MEASURE_UNSPECIFIED", "EUCLIDEAN", "COSINE", "DOT_PRODUCT" ]
enum_OrderDirection := [ "DIRECTION_UNSPECIFIED", "ASCENDING", "DESCENDING" ]
enum_UnaryFilterOp := [ "OPERATOR_UNSPECIFIED", "IS_NAN", "IS_NULL", "IS_NOT_NAN", "IS_NOT_NULL" ]
enum_ValueNullValue := [ "NULL_VALUE" ]

valid {
    input.Body.explainOptions.analyze == BOOLEAN
    input.Body.newTransaction.readOnly.readTime == STRING
    input.Body.newTransaction.readWrite.retryTransaction == STRING
    input.Body.readTime == STRING
    input.Body.structuredQuery.endAt.before == BOOLEAN
    input.Body.structuredQuery.endAt.values[_].arrayValue.values[_] == NESTED
    input.Body.structuredQuery.endAt.values[_].booleanValue == BOOLEAN
    input.Body.structuredQuery.endAt.values[_].bytesValue == STRING
    input.Body.structuredQuery.endAt.values[_].doubleValue == NUMBER
    input.Body.structuredQuery.endAt.values[_].geoPointValue.latitude == NUMBER
    input.Body.structuredQuery.endAt.values[_].geoPointValue.longitude == NUMBER
    input.Body.structuredQuery.endAt.values[_].integerValue == STRING
    input.Body.structuredQuery.endAt.values[_].mapValue.fields.STRING == NESTED
    input.Body.structuredQuery.endAt.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.structuredQuery.endAt.values[_].referenceValue == STRING
    input.Body.structuredQuery.endAt.values[_].stringValue == STRING
    input.Body.structuredQuery.endAt.values[_].timestampValue == STRING
    input.Body.structuredQuery.findNearest.distanceMeasure == enum_FindNearestDistanceMeasure[_]
    input.Body.structuredQuery.findNearest.distanceResultField == STRING
    input.Body.structuredQuery.findNearest.distanceThreshold == NUMBER
    input.Body.structuredQuery.findNearest.limit == INTEGER
    input.Body.structuredQuery.findNearest.queryVector.arrayValue.values[_] == NESTED
    input.Body.structuredQuery.findNearest.queryVector.booleanValue == BOOLEAN
    input.Body.structuredQuery.findNearest.queryVector.bytesValue == STRING
    input.Body.structuredQuery.findNearest.queryVector.doubleValue == NUMBER
    input.Body.structuredQuery.findNearest.queryVector.geoPointValue.latitude == NUMBER
    input.Body.structuredQuery.findNearest.queryVector.geoPointValue.longitude == NUMBER
    input.Body.structuredQuery.findNearest.queryVector.integerValue == STRING
    input.Body.structuredQuery.findNearest.queryVector.mapValue.fields.STRING == NESTED
    input.Body.structuredQuery.findNearest.queryVector.nullValue == enum_ValueNullValue[_]
    input.Body.structuredQuery.findNearest.queryVector.referenceValue == STRING
    input.Body.structuredQuery.findNearest.queryVector.stringValue == STRING
    input.Body.structuredQuery.findNearest.queryVector.timestampValue == STRING
    input.Body.structuredQuery.findNearest.vectorField.fieldPath == STRING
    input.Body.structuredQuery.from[_].allDescendants == BOOLEAN
    input.Body.structuredQuery.from[_].collectionId == STRING
    input.Body.structuredQuery.limit == INTEGER
    input.Body.structuredQuery.offset == INTEGER
    input.Body.structuredQuery.orderBy[_].direction == enum_OrderDirection[_]
    input.Body.structuredQuery.orderBy[_].field.fieldPath == STRING
    input.Body.structuredQuery.select.fields[_].fieldPath == STRING
    input.Body.structuredQuery.startAt.before == BOOLEAN
    input.Body.structuredQuery.startAt.values[_].arrayValue.values[_] == NESTED
    input.Body.structuredQuery.startAt.values[_].booleanValue == BOOLEAN
    input.Body.structuredQuery.startAt.values[_].bytesValue == STRING
    input.Body.structuredQuery.startAt.values[_].doubleValue == NUMBER
    input.Body.structuredQuery.startAt.values[_].geoPointValue.latitude == NUMBER
    input.Body.structuredQuery.startAt.values[_].geoPointValue.longitude == NUMBER
    input.Body.structuredQuery.startAt.values[_].integerValue == STRING
    input.Body.structuredQuery.startAt.values[_].mapValue.fields.STRING == NESTED
    input.Body.structuredQuery.startAt.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.structuredQuery.startAt.values[_].referenceValue == STRING
    input.Body.structuredQuery.startAt.values[_].stringValue == STRING
    input.Body.structuredQuery.startAt.values[_].timestampValue == STRING
    input.Body.structuredQuery.where.compositeFilter.filters[_] == NESTED
    input.Body.structuredQuery.where.compositeFilter.op == enum_CompositeFilterOp[_]
    input.Body.structuredQuery.where.fieldFilter.field.fieldPath == STRING
    input.Body.structuredQuery.where.fieldFilter.op == enum_FieldFilterOp[_]
    input.Body.structuredQuery.where.fieldFilter.value.arrayValue.values[_] == NESTED
    input.Body.structuredQuery.where.fieldFilter.value.booleanValue == BOOLEAN
    input.Body.structuredQuery.where.fieldFilter.value.bytesValue == STRING
    input.Body.structuredQuery.where.fieldFilter.value.doubleValue == NUMBER
    input.Body.structuredQuery.where.fieldFilter.value.geoPointValue.latitude == NUMBER
    input.Body.structuredQuery.where.fieldFilter.value.geoPointValue.longitude == NUMBER
    input.Body.structuredQuery.where.fieldFilter.value.integerValue == STRING
    input.Body.structuredQuery.where.fieldFilter.value.mapValue.fields.STRING == NESTED
    input.Body.structuredQuery.where.fieldFilter.value.nullValue == enum_ValueNullValue[_]
    input.Body.structuredQuery.where.fieldFilter.value.referenceValue == STRING
    input.Body.structuredQuery.where.fieldFilter.value.stringValue == STRING
    input.Body.structuredQuery.where.fieldFilter.value.timestampValue == STRING
    input.Body.structuredQuery.where.unaryFilter.field.fieldPath == STRING
    input.Body.structuredQuery.where.unaryFilter.op == enum_UnaryFilterOp[_]
    input.Body.transaction == STRING
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.documents.write

enum_FieldTransformSetToServerValue := [ "SERVER_VALUE_UNSPECIFIED", "REQUEST_TIME" ]
enum_ValueNullValue := [ "NULL_VALUE" ]

valid {
    input.Body.labels.STRING == STRING
    input.Body.streamId == STRING
    input.Body.streamToken == STRING
    input.Body.writes[_].currentDocument.exists == BOOLEAN
    input.Body.writes[_].currentDocument.updateTime == STRING
    input.Body.writes[_].delete == STRING
    input.Body.writes[_].transform.document == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].arrayValue == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].appendMissingElements.values[_].timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].fieldPath == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.arrayValue.values[_] == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].increment.booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].increment.bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].increment.geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].increment.geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].increment.integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].increment.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].increment.referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].increment.timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.arrayValue.values[_] == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].maximum.booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].maximum.bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].maximum.geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].maximum.geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].maximum.integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].maximum.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].maximum.referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].maximum.timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.arrayValue.values[_] == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].minimum.booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].minimum.bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].minimum.geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].minimum.geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].minimum.integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].minimum.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].minimum.referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].minimum.timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].arrayValue == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].booleanValue == BOOLEAN
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].bytesValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].doubleValue == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].geoPointValue.latitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].geoPointValue.longitude == NUMBER
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].integerValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].mapValue.fields.STRING == NESTED
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].referenceValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].stringValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].removeAllFromArray.values[_].timestampValue == STRING
    input.Body.writes[_].transform.fieldTransforms[_].setToServerValue == enum_FieldTransformSetToServerValue[_]
    input.Body.writes[_].update.createTime == STRING
    input.Body.writes[_].update.fields.STRING.arrayValue.values[_] == NESTED
    input.Body.writes[_].update.fields.STRING.booleanValue == BOOLEAN
    input.Body.writes[_].update.fields.STRING.bytesValue == STRING
    input.Body.writes[_].update.fields.STRING.doubleValue == NUMBER
    input.Body.writes[_].update.fields.STRING.geoPointValue.latitude == NUMBER
    input.Body.writes[_].update.fields.STRING.geoPointValue.longitude == NUMBER
    input.Body.writes[_].update.fields.STRING.integerValue == STRING
    input.Body.writes[_].update.fields.STRING.mapValue.fields.STRING == NESTED
    input.Body.writes[_].update.fields.STRING.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].update.fields.STRING.referenceValue == STRING
    input.Body.writes[_].update.fields.STRING.stringValue == STRING
    input.Body.writes[_].update.fields.STRING.timestampValue == STRING
    input.Body.writes[_].update.name == STRING
    input.Body.writes[_].update.updateTime == STRING
    input.Body.writes[_].updateMask.fieldPaths[_] == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].arrayValue == NESTED
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].integerValue == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].stringValue == STRING
    input.Body.writes[_].updateTransforms[_].appendMissingElements.values[_].timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].fieldPath == STRING
    input.Body.writes[_].updateTransforms[_].increment.arrayValue.values[_] == NESTED
    input.Body.writes[_].updateTransforms[_].increment.booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].increment.bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].increment.doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].increment.geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].increment.geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].increment.integerValue == STRING
    input.Body.writes[_].updateTransforms[_].increment.mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].increment.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].increment.referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].increment.stringValue == STRING
    input.Body.writes[_].updateTransforms[_].increment.timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.arrayValue.values[_] == NESTED
    input.Body.writes[_].updateTransforms[_].maximum.booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].maximum.bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].maximum.geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].maximum.geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].maximum.integerValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].maximum.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].maximum.referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.stringValue == STRING
    input.Body.writes[_].updateTransforms[_].maximum.timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.arrayValue.values[_] == NESTED
    input.Body.writes[_].updateTransforms[_].minimum.booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].minimum.bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].minimum.geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].minimum.geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].minimum.integerValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].minimum.nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].minimum.referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.stringValue == STRING
    input.Body.writes[_].updateTransforms[_].minimum.timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].arrayValue == NESTED
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].booleanValue == BOOLEAN
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].bytesValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].doubleValue == NUMBER
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].geoPointValue.latitude == NUMBER
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].geoPointValue.longitude == NUMBER
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].integerValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].mapValue.fields.STRING == NESTED
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].nullValue == enum_ValueNullValue[_]
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].referenceValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].stringValue == STRING
    input.Body.writes[_].updateTransforms[_].removeAllFromArray.values[_].timestampValue == STRING
    input.Body.writes[_].updateTransforms[_].setToServerValue == enum_FieldTransformSetToServerValue[_]
    input.ReqMap.database == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.exportDocuments

valid {
    input.Body.collectionIds[_] == STRING
    input.Body.namespaceIds[_] == STRING
    input.Body.outputUriPrefix == STRING
    input.Body.snapshotTime == STRING
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.importDocuments

valid {
    input.Body.collectionIds[_] == STRING
    input.Body.inputUriPrefix == STRING
    input.Body.namespaceIds[_] == STRING
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.indexes.create

enum_GoogleFirestoreAdminV1beta1IndexFieldMode := [ "MODE_UNSPECIFIED", "ASCENDING", "DESCENDING", "ARRAY_CONTAINS" ]
enum_GoogleFirestoreAdminV1beta1IndexState := [ "STATE_UNSPECIFIED", "CREATING", "READY", "ERROR" ]

valid {
    input.Body.collectionId == STRING
    input.Body.fields[_].fieldPath == STRING
    input.Body.fields[_].mode == enum_GoogleFirestoreAdminV1beta1IndexFieldMode[_]
    input.Body.name == STRING
    input.Body.state == enum_GoogleFirestoreAdminV1beta1IndexState[_]
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.indexes.delete

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.indexes.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.indexes.list

valid {
    input.ReqMap.parent == STRING
    input.Qs.filter == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.list

valid {
    input.ReqMap.parent == STRING
    input.Qs.showDeleted == BOOLEAN
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.operations.cancel

valid {
    input.Body.STRING == STRING
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.operations.delete

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.operations.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.operations.list

valid {
    input.ReqMap.name == STRING
    input.Qs.filter == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.patch

enum_GoogleFirestoreAdminV1DatabaseAppEngineIntegrationMode := [ "APP_ENGINE_INTEGRATION_MODE_UNSPECIFIED", "ENABLED", "DISABLED" ]
enum_GoogleFirestoreAdminV1DatabaseConcurrencyMode := [ "CONCURRENCY_MODE_UNSPECIFIED", "OPTIMISTIC", "PESSIMISTIC", "OPTIMISTIC_WITH_ENTITY_GROUPS" ]
enum_GoogleFirestoreAdminV1DatabaseDeleteProtectionState := [ "DELETE_PROTECTION_STATE_UNSPECIFIED", "DELETE_PROTECTION_DISABLED", "DELETE_PROTECTION_ENABLED" ]
enum_GoogleFirestoreAdminV1DatabasePointInTimeRecoveryEnablement := [ "POINT_IN_TIME_RECOVERY_ENABLEMENT_UNSPECIFIED", "POINT_IN_TIME_RECOVERY_ENABLED", "POINT_IN_TIME_RECOVERY_DISABLED" ]
enum_GoogleFirestoreAdminV1DatabaseType := [ "DATABASE_TYPE_UNSPECIFIED", "FIRESTORE_NATIVE", "DATASTORE_MODE" ]

valid {
    input.Body.appEngineIntegrationMode == enum_GoogleFirestoreAdminV1DatabaseAppEngineIntegrationMode[_]
    input.Body.cmekConfig.kmsKeyName == STRING
    input.Body.concurrencyMode == enum_GoogleFirestoreAdminV1DatabaseConcurrencyMode[_]
    input.Body.deleteProtectionState == enum_GoogleFirestoreAdminV1DatabaseDeleteProtectionState[_]
    input.Body.etag == STRING
    input.Body.locationId == STRING
    input.Body.name == STRING
    input.Body.pointInTimeRecoveryEnablement == enum_GoogleFirestoreAdminV1DatabasePointInTimeRecoveryEnablement[_]
    input.Body.type == enum_GoogleFirestoreAdminV1DatabaseType[_]
    input.ReqMap.name == STRING
    input.Qs.updateMask == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.databases.restore

valid {
    input.Body.backup == STRING
    input.Body.databaseId == STRING
    input.Body.encryptionConfig.customerManagedEncryption.kmsKeyName == STRING
    input.Body.encryptionConfig.googleDefaultEncryption.STRING == STRING
    input.Body.encryptionConfig.useSourceEncryption.STRING == STRING
    input.ReqMap.parent == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.locations.backups.delete

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.locations.backups.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.locations.backups.list

valid {
    input.ReqMap.parent == STRING
    input.Qs.filter == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.locations.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

firestore.projects.locations.list

valid {
    input.ReqMap.name == STRING
    input.Qs.filter == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
}