code: function defineService(serviceIdentifier, versions, features) {
      AWS.Service._serviceMap[serviceIdentifier] = true;
      if (!Array.isArray(versions)) {
        features = versions;
        versions = [];
      }
  
      var svc = inherit(AWS.Service, features || {});
  
      if (typeof serviceIdentifier === 'string') {
        AWS.Service.addVersions(svc, versions);
  
        var identifier = svc.serviceIdentifier || serviceIdentifier;
        svc.serviceIdentifier = identifier;
      } else { // defineService called with an API
        svc.prototype.api = serviceIdentifier;
        AWS.Service.defineMethods(svc);
      }
      AWS.SequentialExecutor.call(this.prototype);
      //util.clientSideMonitoring is only available in node
      if (!this.prototype.publisher && AWS.util.clientSideMonitoring) {
        var Publisher = AWS.util.clientSideMonitoring.Publisher;
        var configProvider = AWS.util.clientSideMonitoring.configProvider;
        var publisherConfig = configProvider();
        this.prototype.publisher = new Publisher(publisherConfig);
        if (publisherConfig.enabled) {
          //if csm is enabled in environment, SDK should send all metrics
          AWS.Service._clientSideMonitoring = true;
        }
      }
      AWS.SequentialExecutor.call(svc.prototype);
      AWS.Service.addDefaultMonitoringListeners(svc.prototype);
      return svc;
    }
docs: Defines a new Service class using a service identifier and list of versions
  including an optional set of features (functions) to apply to the class
  prototype.
  
  @param serviceIdentifier [String] the identifier for the service
  @param versions [Array<String>] a list of versions that work with this
  service
  @param features [Object] an object to attach to the prototype
  @return [Class<Service>] the service class defined by this function.