Name

sn_mab_api.SessionService

Description

This service will provide user, session and environment info

Script

var validVersions = ["utah", "tokyo", "sandiego"];
var fallBackVersion = "utah";
var familyVersionMap = {
  'utah': 23,
  'tokyo': 22,
  'sandiego': 21
};

/**
* Removes spacial characters, changes toLowerCase and trims trailing and leading whitespace
* @param {string} familyVersion
*/
function scrubFamilyVersion(familyVersion) {
  var specialCharactersRemoved = familyVersion.replace(/[^\w\s]/gi, "");
  return specialCharactersRemoved.trim().toLowerCase();
}

/**
* Tries to match the scrubbed family version against our list of validVersions.
* If there is no match then it defaults to our fallBackVersion.
* @param {string} familyVersion
* @returns {string} validFamilyVersion
*/
function determineFamilyVersion(familyVersion) {
  var scrubbedFamilyVersion = scrubFamilyVersion(familyVersion);
  for (var i = 0; i < validVersions.length; i++) {
      var validVersion = validVersions[i];
      if (scrubbedFamilyVersion.includes(validVersion)) return validVersion;
  }
  return fallBackVersion;
}

var SessionService = Class.create();
SessionService.prototype = {
  initialize: function () {},

  type: "SessionService",

  mabApiPropertyNamePrefix: "sn_mab_api.",
  mabApiAllowedPropertyNames: [
      "glide.appcreator.company.code",
      "glide.appcreator.company.friendly_name",
      "instance_name",
      "glide.sg.image_recognition.search.enable",
      "glide.ui.polaris.experience",
  ],

  getFamilyVersion: function () {
      var rawFamilyVersion = gs.getProperty('glide.buildname');
      return determineFamilyVersion(rawFamilyVersion);
  },

  getSessionInfo: function (requestedData) {
      var propertyKeys = requestedData.propertyKeys;
      var preferenceNames = requestedData.preferenceNames;
      var buildNameKey = "glide.buildname";
  	var familyVersionNumberKey = "glide.familyVersionNumber";
      var sessionInfo = {};

      sessionInfo.userId = gs.getUserID();
      sessionInfo.firstName = gs.getUser().getFirstName();
      sessionInfo.lastName = gs.getUser().getLastName();
      sessionInfo.fullName = gs.getUser().getDisplayName();
      sessionInfo.roles = gs.getUser().getRoles();

      if (propertyKeys && propertyKeys.length > 0)
          sessionInfo.propertyValues = this._getPropertyValues(propertyKeys);
      else sessionInfo.propertyValues = {};

      if (preferenceNames && preferenceNames.length > 0)
          sessionInfo.preferenceValues =
              this._getUserPreferenceValues(preferenceNames);

      var rawFamilyVersion = gs.getProperty(buildNameKey);
      var familyVersion = determineFamilyVersion(rawFamilyVersion);
      sessionInfo.propertyValues[buildNameKey] = familyVersion;
  	sessionInfo.propertyValues[familyVersionNumberKey] = familyVersionMap[familyVersion];
      return sessionInfo;
  },

  _getPropertyValues: function (propertyKeys) {
      var propertyValues = {};

      propertyKeys.forEach(function (key) {
          if (
              key &&
              (key.startsWith(this.mabApiPropertyNamePrefix) ||
                  this.mabApiAllowedPropertyNames.indexOf(key) != -1)
          ) {
              var propertyValue = gs.getProperty(key);
              if (propertyValue) propertyValues[key] = propertyValue;
          } else gs.warn(gs.getMessage("{0} property is not accessible through the MAB API", key));
      }, this);

      return propertyValues;
  },

  _getUserPreferenceValues: function (preferenceNames) {
      var preferenceValues = {};

      preferenceNames.forEach(function (name) {
          var preferenceValue = gs.getUser().getPreference(name);
          if (preferenceValue) preferenceValues[name] = preferenceValue;
      }, this);

      return preferenceValues;
  },
};

module.exports = {
  scrubFamilyVersion: scrubFamilyVersion,
  determineFamilyVersion: determineFamilyVersion,
  fallBackVersion: fallBackVersion,
};

Sys ID

66453a26c724301066492f3bf4c260e0

Offical Documentation

Official Docs: