docs: function Strategy(options, verify) {
      if (!verify) {
          throw new TypeError("OAuthWrapStrategy requires a verify callback.");
      }
      if (!options) {
          throw new TypeError("OAuthWrapStrategy requires a options parameter.");
      }
  
      passport.Strategy.call(this);
  
      this.name           = "WRAP";
      this._verify        = verify;
      this._issuerUri     = options.accessTokenUrl;
      this._clientId      = options.clientId;
      this._clientSecret  = options.clientSecret;
      this._audience      = options.audience;
      this._callbackUrl   = options.callbackUrl || "/login";
  
      if (!options.symmetricKey) {
          throw new TypeError("OAuthWrapStrategy requires a options.symmetricKey parameter.");
      }
      if (typeof options.symmetricKey === "string") {
          this._symmetricKey  = options.symmetricKey;
      } else {
          if (options.symmetricKey.encoding) {
              this._symmetricKey = new Buffer(options.symmetricKey.value, options.symmetricKey.encoding);
          } else {
              this._symmetricKey = options.symmetricKey.value;
          }
      }
      if (options.scope) {
          this._scope = (Array.isArray(options.scope)) ? options.scope : [options.scope];
      }
      this._passReqToCallback = options.passReqToCallback;
  }