(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o0){prefix="/_matrix/media/v1/thumbnail/"}var fragmentOffset=serverAndMediaId.indexOf("#"),fragment="";if(fragmentOffset>=0){fragment=serverAndMediaId.substr(fragmentOffset);serverAndMediaId=serverAndMediaId.substr(0,fragmentOffset)}return this.credentials.baseUrl+prefix+serverAndMediaId+(utils.keys(params).length===0?"":"?"+utils.encodeParams(params))+fragment},getIdenticonUri:function(identiconString,width,height){if(!identiconString){return}if(!width){width=96}if(!height){height=96}var params={width:width,height:height};var path=utils.encodeUri("/_matrix/media/v1/identicon/$ident",{$ident:identiconString});return this.credentials.baseUrl+path+(utils.keys(params).length===0?"":"?"+utils.encodeParams(params))},getContentUri:function(){var params={access_token:this.credentials.accessToken};return{base:this.credentials.baseUrl,path:"/_matrix/media/v1/upload",params:params}},authedRequest:function(callback,method,path,queryParams,data){if(!queryParams){queryParams={}}queryParams.access_token=this.opts.accessToken;return this.request(callback,method,path,queryParams,data)},request:function(callback,method,path,queryParams,data){return this.requestWithPrefix(callback,method,path,queryParams,data,this.opts.prefix)},authedRequestWithPrefix:function(callback,method,path,queryParams,data,prefix){var fullUri=this.opts.baseUrl+prefix+path;if(!queryParams){queryParams={}}queryParams.access_token=this.opts.accessToken;return this._request(callback,method,fullUri,queryParams,data)},requestWithPrefix:function(callback,method,path,queryParams,data,prefix){var fullUri=this.opts.baseUrl+prefix+path;if(!queryParams){queryParams={}}return this._request(callback,method,fullUri,queryParams,data)},_request:function(callback,method,uri,queryParams,data){if(callback!==undefined&&!utils.isFunction(callback)){throw Error("Expected callback to be a function but got "+typeof callback)}var defer=q.defer();this.opts.request({uri:uri,method:method,withCredentials:false,qs:queryParams,body:data,json:true,_matrix_opts:this.opts},requestCallback(defer,callback,this.opts.onlyData));return defer.promise}};var requestCallback=function(defer,userDefinedCallback,onlyData){userDefinedCallback=userDefinedCallback||function(){};return function(err,response,body){if(!err&&response.statusCode>=400){err=new module.exports.MatrixError(body)}if(err){defer.reject(err);userDefinedCallback(err)}else{var res={code:response.statusCode,headers:response.headers,data:body};defer.resolve(onlyData?body:res);userDefinedCallback(null,onlyData?body:res)}}};module.exports.MatrixError=function MatrixError(errorJson){this.name=errorJson.errcode||"Unknown error code";this.message=errorJson.error||"Unknown message";this.data=errorJson};module.exports.MatrixError.prototype=Object.create(Error.prototype);module.exports.MatrixError.prototype.constructor=module.exports.MatrixError},{"./utils":11,q:15}],3:[function(require,module,exports){"use strict";module.exports.MatrixEvent=require("./models/event").MatrixEvent;module.exports.MatrixInMemoryStore=require("./store/memory").MatrixInMemoryStore;module.exports.MatrixHttpApi=require("./http-api").MatrixHttpApi;module.exports.MatrixError=require("./http-api").MatrixError;module.exports.MatrixClient=require("./client").MatrixClient;module.exports.Room=require("./models/room");module.exports.RoomMember=require("./models/room-member");module.exports.RoomState=require("./models/room-state");module.exports.User=require("./models/user");var request;module.exports.request=function(r){request=r};module.exports.createClient=function(opts){if(typeof opts==="string"){opts={baseUrl:opts}}opts.request=request;return new module.exports.MatrixClient(opts)}},{"./client":1,"./http-api":2,"./models/event":4,"./models/room":8,"./models/room-member":5,"./models/room-state":6,"./models/user":9,"./store/memory":10}],4:[function(require,module,exports){"use strict";module.exports.EventStatus={UNKNOWN:"unknown",SENT:"sent",NOT_SENT:"not_sent",SENDING:"sending",INCOMING:"incoming"};module.exports.MatrixEvent=function MatrixEvent(event){this.event=event||{};this.sender=null;this.target=null;this.status=null;this.forwardLooking=true};module.exports.MatrixEvent.prototype={getId:function(){return this.event.event_id},getSender:function(){return this.event.user_id},getType:function(){return this.event.type},getRoomId:function(){return this.event.room_id},getTs:function(){return this.event.origin_server_ts},getContent:function(){return this.event.content||{}},getPrevContent:function(){return this.event.prev_content||{}},getDirectionalContent:function(){return this.forwardLooking?this.getContent():this.getPrevContent()},getAge:function(){return this.event.age},getStateKey:function(){return this.event.state_key},isState:function(){return this.event.state_key!==undefined}}},{}],5:[function(require,module,exports){"use strict";var EventEmitter=require("events").EventEmitter;var utils=require("../utils");function RoomMember(roomId,userId){this.roomId=roomId;this.userId=userId;this.typing=false;this.name=userId;this.powerLevel=0;this.powerLevelNorm=0;this.user=null;this.membership=null}utils.inherits(RoomMember,EventEmitter);RoomMember.prototype.setMembershipEvent=function(event,roomState){if(event.getType()!=="m.room.member"){return}var oldMembership=this.membership;this.membership=event.getDirectionalContent().membership;var oldName=this.name;this.name=calculateDisplayName(this,event,roomState);if(oldMembership!==this.membership){this.emit("RoomMember.membership",event,this)}if(oldName!==this.name){this.emit("RoomMember.name",event,this)}};RoomMember.prototype.setPowerLevelEvent=function(powerLevelEvent){if(powerLevelEvent.getType()!=="m.room.power_levels"){return}var maxLevel=powerLevelEvent.getContent().users_default||0;utils.forEach(utils.values(powerLevelEvent.getContent().users),function(lvl){maxLevel=Math.max(maxLevel,lvl)});var oldPowerLevel=this.powerLevel;var oldPowerLevelNorm=this.powerLevelNorm;this.powerLevel=powerLevelEvent.getContent().users[this.userId]||powerLevelEvent.getContent().users_default||0;this.powerLevelNorm=0;if(maxLevel>0){this.powerLevelNorm=this.powerLevel*100/maxLevel}if(oldPowerLevel!==this.powerLevel||oldPowerLevelNorm!==this.powerLevelNorm){this.emit("RoomMember.powerLevel",powerLevelEvent,this)}};RoomMember.prototype.setTypingEvent=function(event){if(event.getType()!=="m.typing"){return}var oldTyping=this.typing;this.typing=false;var typingList=event.getContent().user_ids;if(!utils.isArray(typingList)){return}if(typingList.indexOf(this.userId)!==-1){this.typing=true}if(oldTyping!==this.typing){this.emit("RoomMember.typing",event,this)}};RoomMember.prototype.getMembershipState=function(){return this.event.getContent().membership};function calculateDisplayName(member,event,roomState){var displayName=event.getDirectionalContent().displayname;var selfUserId=member.userId;if(!displayName){return selfUserId}if(!roomState){return displayName}var stateEvents=utils.filter(roomState.getStateEvents("m.room.member"),function(e){return e.getContent().displayname===displayName&&e.getSender()!==selfUserId});if(stateEvents.length>1){return displayName+" ("+selfUserId+")"}return displayName}module.exports=RoomMember},{"../utils":11,events:13}],6:[function(require,module,exports){"use strict";var EventEmitter=require("events").EventEmitter;var utils=require("../utils");var RoomMember=require("./room-member");function RoomState(roomId){this.roomId=roomId;this.members={};this.events={};this.paginationToken=null;this._sentinels={}}utils.inherits(RoomState,EventEmitter);RoomState.prototype.getMembers=function(){return utils.values(this.members)};RoomState.prototype.getMember=function(userId){return this.members[userId]||null};RoomState.prototype.getSentinelMember=function(userId){return this._sentinels[userId]||null};RoomState.prototype.getStateEvents=function(eventType,stateKey){if(!this.events[eventType]){return stateKey===undefined?[]:null}if(stateKey===undefined){return utils.values(this.events[eventType])}var event=this.events[eventType][stateKey];return event?event:null};RoomState.prototype.setStateEvents=function(stateEvents){var self=this;utils.forEach(stateEvents,function(event){if(event.getRoomId()!==self.roomId){return}if(!event.isState()){return}if(self.events[event.getType()]===undefined){self.events[event.getType()]={}}self.events[event.getType()][event.getStateKey()]=event;self.emit("RoomState.events",event,self);if(event.getType()==="m.room.member"){var userId=event.getStateKey();var member=self.members[userId];if(!member){member=new RoomMember(event.getRoomId(),userId);self.emit("RoomState.newMember",event,self,member)}var sentinel=new RoomMember(event.getRoomId(),userId);utils.forEach([member,sentinel],function(roomMember){roomMember.setMembershipEvent(event,self);var pwrLvlEvent=self.getStateEvents("m.room.power_levels","");if(pwrLvlEvent){roomMember.setPowerLevelEvent(pwrLvlEvent)}});self._sentinels[userId]=sentinel;self.members[userId]=member;self.emit("RoomState.members",event,self,member)}else if(event.getType()==="m.room.power_levels"){var members=utils.values(self.members);utils.forEach(members,function(member){member.setPowerLevelEvent(event)})}})};RoomState.prototype.setTypingEvent=function(event){utils.forEach(utils.values(this.members),function(member){member.setTypingEvent(event)})};module.exports=RoomState},{"../utils":11,"./room-member":5,events:13}],7:[function(require,module,exports){"use strict";function RoomSummary(roomId,info){this.roomId=roomId;this.info=info}module.exports=RoomSummary},{}],8:[function(require,module,exports){"use strict";var EventEmitter=require("events").EventEmitter;var RoomState=require("./room-state");var RoomSummary=require("./room-summary");var utils=require("../utils");function Room(roomId){this.roomId=roomId;this.name=roomId;this.timeline=[];this.oldState=new RoomState(roomId);this.currentState=new RoomState(roomId);this.summary=null}utils.inherits(Room,EventEmitter);Room.prototype.getMember=function(userId){var member=this.currentState.members[userId];if(!member){return null}return member};Room.prototype.getJoinedMembers=function(){return utils.filter(this.currentState.getMembers(),function(m){return m.membership==="join"})};Room.prototype.addEventsToTimeline=function(events,toStartOfTimeline){var stateContext=toStartOfTimeline?this.oldState:this.currentState;for(var i=0;i1){var Properties=Object(arguments[1]);for(var prop in Properties){if(hasOwn.call(Properties,prop)){obj[prop]=Properties[prop]}}}return obj}}()}ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}})}},{}],12:[function(require,module,exports){ (function(root,factory){if(typeof define==="function"&&define.amd){define([],factory)}else if(typeof exports==="object"){module.exports=factory()}else{root.returnExports=factory()}})(this,function(){var XHR=XMLHttpRequest;if(!XHR)throw new Error("missing XMLHttpRequest");request.log={trace:noop,debug:noop,info:noop,warn:noop,error:noop};var DEFAULT_TIMEOUT=3*60*1e3;function request(options,callback){if(typeof callback!=="function")throw new Error("Bad callback given: "+callback);if(!options)throw new Error("No options given");var options_onResponse=options.onResponse;if(typeof options==="string")options={uri:options};else options=JSON.parse(JSON.stringify(options));options.onResponse=options_onResponse;if(options.verbose)request.log=getLogger();if(options.url){options.uri=options.url;delete options.url}if(!options.uri&&options.uri!=="")throw new Error("options.uri is a required argument");if(typeof options.uri!="string")throw new Error("options.uri must be a string");var unsupported_options=["proxy","_redirectsFollowed","maxRedirects","followRedirect"];for(var i=0;i299)&&body.error){er=new Error("CouchDB error: "+(body.error.reason||body.error.error));for(var key in body)er[key]=body[key];return callback(er,resp,body)}return callback(er,resp,body)}};function noop(){}function getLogger(){var logger={},levels=["trace","debug","info","warn","error"],level,i;for(i=0;i>18&63;h2=bits>>12&63;h3=bits>>6&63;h4=bits&63;tmp_arr[ac++]=b64.charAt(h1)+b64.charAt(h2)+b64.charAt(h3)+b64.charAt(h4)}while(i0&&this._events[type].length>m){this._events[type].warned=true;console.error("(node) warning: possible EventEmitter memory "+"leak detected. %d listeners added. "+"Use emitter.setMaxListeners() to increase limit.",this._events[type].length);if(typeof console.trace==="function"){console.trace()}}}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener))throw TypeError("listener must be a function");var fired=false;function g(){this.removeListener(type,g);if(!fired){fired=true;listener.apply(this,arguments)}}g.listener=listener;this.on(type,g);return this};EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;list=this._events[type];length=list.length;position=-1;if(list===listener||isFunction(list.listener)&&list.listener===listener){delete this._events[type];if(this._events.removeListener)this.emit("removeListener",type,listener)}else if(isObject(list)){for(i=length;i-->0;){if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}}if(position<0)return this;if(list.length===1){list.length=0;delete this._events[type]}else{list.splice(position,1)}if(this._events.removeListener)this.emit("removeListener",type,listener)}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this}if(arguments.length===0){for(key in this._events){if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._events={};return this}listeners=this._events[type];if(isFunction(listeners)){this.removeListener(type,listeners)}else{while(listeners.length)this.removeListener(type,listeners[listeners.length-1])}delete this._events[type];return this};EventEmitter.prototype.listeners=function(type){var ret;if(!this._events||!this._events[type])ret=[];else if(isFunction(this._events[type]))ret=[this._events[type]];else ret=this._events[type].slice();return ret};EventEmitter.listenerCount=function(emitter,type){var ret;if(!emitter._events||!emitter._events[type])ret=0;else if(isFunction(emitter._events[type]))ret=1;else ret=emitter._events[type].length;return ret};function isFunction(arg){return typeof arg==="function"}function isNumber(arg){return typeof arg==="number"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isUndefined(arg){return arg===void 0}},{}],14:[function(require,module,exports){var process=module.exports={};var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){draining=false;if(currentQueue.length){queue=currentQueue.concat(queue)}else{queueIndex=-1}if(queue.length){drainQueue()}}function drainQueue(){if(draining){return}var timeout=setTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex1){for(var i=1;i=length){throw new TypeError}}while(1)}for(;index=qStartingLine&&lineNumber<=qEndingLine}function captureLine(){if(!hasStacks){return}try{throw new Error}catch(e){var lines=e.stack.split("\n");var firstLine=lines[0].indexOf("@")>0?lines[1]:lines[2];var fileNameAndLineNumber=getFileNameAndLineNumber(firstLine);if(!fileNameAndLineNumber){return}qFileName=fileNameAndLineNumber[0];return fileNameAndLineNumber[1]}}function deprecate(callback,name,alternative){return function(){if(typeof console!=="undefined"&&typeof console.warn==="function"){console.warn(name+" is deprecated, use "+alternative+" instead.",new Error("").stack)}return callback.apply(callback,arguments)}}function Q(value){if(value instanceof Promise){return value}if(isPromiseAlike(value)){return coerce(value)}else{return fulfill(value)}}Q.resolve=Q;Q.nextTick=nextTick;Q.longStackSupport=false;if(typeof process==="object"&&process&&process.env&&process.env.Q_DEBUG){Q.longStackSupport=true}Q.defer=defer;function defer(){var messages=[],progressListeners=[],resolvedPromise;var deferred=object_create(defer.prototype);var promise=object_create(Promise.prototype);promise.promiseDispatch=function(resolve,op,operands){var args=array_slice(arguments);if(messages){messages.push(args);if(op==="when"&&operands[1]){progressListeners.push(operands[1])}}else{Q.nextTick(function(){resolvedPromise.promiseDispatch.apply(resolvedPromise,args)})}};promise.valueOf=function(){if(messages){return promise}var nearerValue=nearer(resolvedPromise);if(isPromise(nearerValue)){resolvedPromise=nearerValue}return nearerValue};promise.inspect=function(){if(!resolvedPromise){return{state:"pending"}}return resolvedPromise.inspect()};if(Q.longStackSupport&&hasStacks){try{throw new Error}catch(e){promise.stack=e.stack.substring(e.stack.indexOf("\n")+1)}}function become(newPromise){resolvedPromise=newPromise;promise.source=newPromise;array_reduce(messages,function(undefined,message){Q.nextTick(function(){newPromise.promiseDispatch.apply(newPromise,message)})},void 0);messages=void 0;progressListeners=void 0}deferred.promise=promise;deferred.resolve=function(value){if(resolvedPromise){return}become(Q(value))};deferred.fulfill=function(value){if(resolvedPromise){return}become(fulfill(value))};deferred.reject=function(reason){if(resolvedPromise){return}become(reject(reason))};deferred.notify=function(progress){if(resolvedPromise){return}array_reduce(progressListeners,function(undefined,progressListener){Q.nextTick(function(){progressListener(progress)})},void 0)};return deferred}defer.prototype.makeNodeResolver=function(){var self=this;return function(error,value){if(error){self.reject(error)}else if(arguments.length>2){self.resolve(array_slice(arguments,1))}else{self.resolve(value)}}};Q.Promise=promise;Q.promise=promise;function promise(resolver){if(typeof resolver!=="function"){throw new TypeError("resolver must be a function.")}var deferred=defer();try{resolver(deferred.resolve,deferred.reject,deferred.notify)}catch(reason){deferred.reject(reason)}return deferred.promise}promise.race=race;promise.all=all;promise.reject=reject;promise.resolve=Q;Q.passByCopy=function(object){return object};Promise.prototype.passByCopy=function(){return this};Q.join=function(x,y){return Q(x).join(y)};Promise.prototype.join=function(that){return Q([this,that]).spread(function(x,y){if(x===y){return x}else{throw new Error("Can't join: not the same: "+x+" "+y)}})};Q.race=race;function race(answerPs){return promise(function(resolve,reject){for(var i=0,len=answerPs.length;i