code: function SubscriptionOperation(
      log, cb, streamId, resolveLinkTos, userCredentials, eventAppeared,
      subscriptionDropped, verboseLogging, getConnection
  ) {
    //TODO: validations
    //Ensure.NotNull(log, "log");
    //Ensure.NotNull(source, "source");
    //Ensure.NotNull(eventAppeared, "eventAppeared");
    //Ensure.NotNull(getConnection, "getConnection");
  
    this._log = log;
    this._cb = cb;
    this._streamId = streamId || '';
    this._resolveLinkTos = resolveLinkTos;
    this._userCredentials = userCredentials;
    this._eventAppeared = eventAppeared;
    this._subscriptionDropped = subscriptionDropped || function() {};
    this._verboseLogging = verboseLogging;
    this._getConnection = getConnection;
  
    this._correlationId = null;
    this._unsubscribed = false;
    this._subscription = null;
    this._actionExecuting = false;
    this._actionQueue = [];
  }
docs: TODO: nodify eventAppeared and subscriptionDropped, should be emit on subscription