docs: function getFormViewModel(formName, config, callback) {
    var cacheTtl = config.cacheOptions && config.cacheOptions.ttl !== undefined ? config.cacheOptions.ttl : config.client.cacheManager.defaultTtl;
    var cachedModel = cache.getCachedItem(formName, cacheTtl);
  
    if (cachedModel) {
      return process.nextTick(function () {
        callback(null, _.cloneDeep(cachedModel));
      });
    }
  
    var form = config.web[formName].form;
    var fields = getFormFields(form);
  
    var model = {
      form: {
        fields: fields
      },
      accountStores: null
    };
  
    // TODO fetch identity providers from Okta so that we can build a list of
    // social login buttons
  
    model.accountStores = [];
  
    cache.setCachedItem(formName, model);
  
    callback(null, _.cloneDeep(model));
  
  }