docs: @SuppressWarnings({"unused", "WeakerAccess"})
      public void pushEvent(String eventName, Map<String, Object> eventActions) {
  
          if (eventName == null || eventName.equals(""))
              return;
  
          ValidationResult validationResult = validator.isRestrictedEventName(eventName);
          // Check for a restricted event name
          if (validationResult.getErrorCode()>0) {
              pushValidationResult(validationResult);
              return;
          }
  
          if (eventActions == null) {
              eventActions = new HashMap<>();
          }
  
          JSONObject event = new JSONObject();
          try {
              // Validate
              ValidationResult vr = validator.cleanEventName(eventName);
  
              // Check for an error
              if (vr.getErrorCode() != 0)
                  event.put(Constants.ERROR_KEY, getErrorObject(vr));
  
              eventName = vr.getObject().toString();
              JSONObject actions = new JSONObject();
              for (String key : eventActions.keySet()) {
                  Object value = eventActions.get(key);
                  vr = validator.cleanObjectKey(key);
                  key = vr.getObject().toString();
                  // Check for an error
                  if (vr.getErrorCode() != 0)
                      event.put(Constants.ERROR_KEY, getErrorObject(vr));
                  try {
                      vr = validator.cleanObjectValue(value, Validator.ValidationContext.Event);
                  } catch (IllegalArgumentException e) {
                      // The object was neither a String, Boolean, or any number primitives
                      ValidationResult error = new ValidationResult();
                      error.setErrorCode(512);
                      final String err = "For event \"" + eventName + "\": Property value for property " + key + " wasn't a primitive (" + value + ")";
                      error.setErrorDesc(err);
                      getConfigLogger().debug(getAccountId(), err);
                      pushValidationResult(error);
                      // Skip this record
                      continue;
                  }
                  value = vr.getObject();
                  // Check for an error
                  if (vr.getErrorCode() != 0)
                      event.put(Constants.ERROR_KEY, getErrorObject(vr));
                  actions.put(key, value);
              }
              event.put("evtName", eventName);
              event.put("evtData", actions);
              queueEvent(context, event, Constants.RAISED_EVENT);
          } catch (Throwable t) {
              // We won't get here
          }
      }