{
    "rules": {
      "apps": {
        "$app_id": {
          "contacts": {
            ".read": "auth != null",
            "$uid":{
                ".write": "$uid === auth.uid",
                ".indexOn": ["timestamp"]       
            }
          },
          "groups":{
            ".read": false,
            ".write": "auth != null",
            "$group_id":{
                ".validate":"newData.hasChildren(['name','members', 'owner'])"
            }
          },
          "presence": {
            ".read": "auth != null",
            "$uid":{
                ".write": "$uid === auth.uid"
            }
          },
          "typings": {
            ".read": "auth != null",
            ".write": "auth != null",
            "$recipient_id":{
              ".indexOn": ["timestamp"]                
              } 
          },          
          "users":{            
            "$uid":{
                ".read": "$uid === auth.uid",
                ".write": "$uid === auth.uid",
                "messages" : {
                  "$recipient_id":{
                    ".validate": "(!newData.hasChildren(['status']) || ( newData.hasChildren(['status']) && newData.child('status').isNumber() && newData.child('status').val()==200) )",
                    ".indexOn": ["timestamp"]                
                    }      
                },
                "conversations":{
                  ".indexOn": ["timestamp"]                 
                },
                "archived_conversations":{
                  ".indexOn": ["timestamp"]
                },
                "instances": {
                  ".read": "true",
                  ".write": "true"
                }
            }
          }
        }	
      }
    }
  }