diff --git a/dist/kuzzle.js b/dist/kuzzle.js index ae48edefc..cbd8bd10c 100644 --- a/dist/kuzzle.js +++ b/dist/kuzzle.js @@ -444,21 +444,6 @@ module.exports = Kuzzle = function (url, options, cb) { enumerable: true, writable: true }, - loginStrategy: { - value: (options && typeof options.loginStrategy === 'string') ? options.loginStrategy : undefined, - enumerable: true, - writable: false - }, - loginCredentials: { - value: (options && typeof options.loginCredentials === 'object') ? options.loginCredentials : undefined, - enumerable: true, - writable: false - }, - loginExpiresIn: { - value: (options && ['number', 'string'].indexOf(typeof options.loginExpiresIn) !== -1) ? options.loginExpiresIn : undefined, - enumerable: true, - writable: false - }, jwtToken: { value: undefined, enumerable: true, @@ -564,44 +549,18 @@ Kuzzle.prototype.connect = function () { self.socket.once('connect', function () { self.state = 'connected'; - - Object.keys(self.subscriptions).forEach(function (roomId) { - Object.keys(self.subscriptions[roomId]).forEach(function (subscriptionId) { - var subscription = self.subscriptions[roomId][subscriptionId]; - subscription.renew(subscription.callback); - }); - }); - + renewAllSubscriptions.call(self); dequeue.call(self); + emitEvent.call(self, 'connected'); - if (self.loginStrategy) { - self.login(self.loginStrategy, self.loginCredentials, self.loginExpiresIn, function(error) { - self.eventListeners.connected.forEach(function (listener) { - listener.fn(error); - }); - - if (self.connectCB) { - self.connectCB(error, self); - } - }); - } - else { - self.eventListeners.connected.forEach(function (listener) { - listener.fn(); - }); - - if (self.connectCB) { - self.connectCB(null, self); - } + if (self.connectCB) { + self.connectCB(null, self); } }); self.socket.on('connect_error', function (error) { self.state = 'error'; - - self.eventListeners.error.forEach(function (listener) { - listener.fn(); - }); + emitEvent.call(self, 'error'); if (self.connectCB) { self.connectCB(error); @@ -619,9 +578,7 @@ Kuzzle.prototype.connect = function () { self.queuing = true; } - self.eventListeners.disconnected.forEach(function (listener) { - listener.fn(); - }); + emitEvent.call(self, 'disconnected'); }); self.socket.on('reconnect', function () { @@ -629,13 +586,7 @@ Kuzzle.prototype.connect = function () { // renew subscriptions if (self.autoResubscribe) { - Object.keys(self.subscriptions).forEach(function (roomId) { - Object.keys(self.subscriptions[roomId]).forEach(function (subscriptionId) { - var subscription = self.subscriptions[roomId][subscriptionId]; - - subscription.renew(subscription.callback); - }); - }); + renewAllSubscriptions.call(self); } // replay queued requests @@ -645,9 +596,7 @@ Kuzzle.prototype.connect = function () { } // alert listeners - self.eventListeners.reconnected.forEach(function (listener) { - listener.fn(); - }); + emitEvent.call(self, 'reconnected'); }); return this; @@ -677,6 +626,7 @@ Kuzzle.prototype.login = function (strategy, credentials, expiresIn, cb) { this.query({controller: 'auth', action: 'login'}, {body: request}, {}, function(error, response) { if (error === null) { self.jwtToken = response.jwt; + renewAllSubscriptions.call(self); if (typeof cb === 'function') { cb(null, self); @@ -759,9 +709,7 @@ function emitRequest (request, cb) { if (self.jwtToken !== undefined || cb) { self.socket.once(request.requestId, function (response) { if (response.error && response.error.message === 'Token expired') { - self.eventListeners.jwtTokenExpired.forEach(function (listener) { - listener.fn(request, cb); - }); + emitEvent.call(self, 'jwtTokenExpired', request, cb); } if (cb) { @@ -801,6 +749,36 @@ function dequeue () { } } +/** + * Renew all registered subscriptions. Triggered either by a successful connection/reconnection or by a + * successful login attempt + */ +function renewAllSubscriptions() { + var self = this; + + Object.keys(self.subscriptions).forEach(function (roomId) { + Object.keys(self.subscriptions[roomId]).forEach(function (subscriptionId) { + var subscription = self.subscriptions[roomId][subscriptionId]; + subscription.renew(subscription.callback); + }); + }); +} + +/** + * Emits an event to all registered listeners + * + * @param {string} event - name of the target global event + */ +function emitEvent(event) { + var + self = this, + args = Array.prototype.slice.call(arguments, 1); + + self.eventListeners[event].forEach(function (listener) { + listener.fn.apply(self, args); + }); +} + /** * Adds a listener to a Kuzzle global event. When an event is fired, listeners are called in the order of their * insertion. @@ -1327,6 +1305,7 @@ Kuzzle.prototype.stopQueuing = function () { return this; }; + },{"./kuzzleDataCollection":3,"node-uuid":1,"socket.io-client":undefined}],3:[function(require,module,exports){ var KuzzleDocument = require('./kuzzleDocument'), @@ -2529,6 +2508,10 @@ function KuzzleRoom(kuzzleDataCollection, options) { id: { value: uuid.v4() }, + lastRenewal: { + value: null, + writable: true + }, notifier: { value: null, writable: true @@ -2537,6 +2520,10 @@ function KuzzleRoom(kuzzleDataCollection, options) { value: [], writable: true }, + // Delay before allowing a subscription renewal + renewalDelay: { + value: 500 + }, scope: { value: options && options.scope ? options.scope : 'all' }, @@ -2636,6 +2623,7 @@ KuzzleRoom.prototype.count = function (cb) { */ KuzzleRoom.prototype.renew = function (filters, cb) { var + now = Date.now(), subscribeQuery = { scope: this.scope, state: this.state, @@ -2648,37 +2636,46 @@ KuzzleRoom.prototype.renew = function (filters, cb) { filters = null; } + /* + Skip subscription renewal if another one was performed a moment before + */ + if (self.lastRenewal && (now - self.lastRenewal) <= self.renewalDelay) { + return self; + } + + self.lastRenewal = now; + if (filters) { - this.filters = filters; + self.filters = filters; } /* if not yet connected, register itself to the subscriptions list and wait for the main Kuzzle object to renew once online */ - if (this.kuzzle.state !== 'connected') { - this.callback = cb; - this.kuzzle.subscriptions.pending[self.id] = self; - return this; + if (self.kuzzle.state !== 'connected') { + self.callback = cb; + self.kuzzle.subscriptions.pending[self.id] = self; + return self; } - if (this.subscribing) { - this.queue.push({action: 'renew', args: [filters, cb]}); - return this; + if (self.subscribing) { + self.queue.push({action: 'renew', args: [filters, cb]}); + return self; } - this.kuzzle.callbackRequired('KuzzleRoom.renew', cb); + self.kuzzle.callbackRequired('KuzzleRoom.renew', cb); - this.unsubscribe(); - this.roomId = null; - this.subscribing = true; - this.callback = cb; - this.kuzzle.subscriptions.pending[self.id] = self; + self.unsubscribe(); + self.roomId = null; + self.subscribing = true; + self.callback = cb; + self.kuzzle.subscriptions.pending[self.id] = self; - subscribeQuery.body = this.filters; - subscribeQuery = this.kuzzle.addHeaders(subscribeQuery, this.headers); + subscribeQuery.body = self.filters; + subscribeQuery = self.kuzzle.addHeaders(subscribeQuery, this.headers); - self.kuzzle.query(this.collection.buildQueryArgs('subscribe', 'on'), subscribeQuery, {metadata: this.metadata}, function (error, response) { + self.kuzzle.query(self.collection.buildQueryArgs('subscribe', 'on'), subscribeQuery, {metadata: self.metadata}, function (error, response) { delete self.kuzzle.subscriptions.pending[self.id]; self.subscribing = false; @@ -2702,7 +2699,7 @@ KuzzleRoom.prototype.renew = function (filters, cb) { dequeue.call(self); }); - return this; + return self; }; /** diff --git a/dist/kuzzle.min.js b/dist/kuzzle.min.js index 67bf843c7..3a340bcf1 100644 --- a/dist/kuzzle.min.js +++ b/dist/kuzzle.min.js @@ -1,3 +1,3 @@ -// Official Javascript SDK for Kuzzle v1.3.8 - License: Apache-2.0 -!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gb;b++)0===(3&b)&&(a=4294967296*Math.random()),e[b]=a>>>((3&b)<<3)&255;return e},"undefined"!=typeof console&&console.warn&&console.warn("[SECURITY] node-uuid: crypto not usable, falling back to insecure Math.random()")}}function e(){if("function"==typeof a)try{var b=a("crypto").randomBytes;l=j=b&&function(){return b(16)},j()}catch(c){}}function f(a,b,c){var d=b&&c||0,e=0;for(b=b||[],a.toLowerCase().replace(/[0-9a-f]{2}/g,function(a){16>e&&(b[d+e++]=q[a])});16>e;)b[d+e++]=0;return b}function g(a,b){var c=b||0,d=p;return d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]+"-"+d[a[c++]]+d[a[c++]]+"-"+d[a[c++]]+d[a[c++]]+"-"+d[a[c++]]+d[a[c++]]+"-"+d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]}function h(a,b,c){var d=b&&c||0,e=b||[];a=a||{};var f=null!=a.clockseq?a.clockseq:u,h=null!=a.msecs?a.msecs:(new Date).getTime(),i=null!=a.nsecs?a.nsecs:w+1,j=h-v+(i-w)/1e4;if(0>j&&null==a.clockseq&&(f=f+1&16383),(0>j||h>v)&&null==a.nsecs&&(i=0),i>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");v=h,w=i,u=f,h+=122192928e5;var k=(1e4*(268435455&h)+i)%4294967296;e[d++]=k>>>24&255,e[d++]=k>>>16&255,e[d++]=k>>>8&255,e[d++]=255&k;var l=h/4294967296*1e4&268435455;e[d++]=l>>>8&255,e[d++]=255&l,e[d++]=l>>>24&15|16,e[d++]=l>>>16&255,e[d++]=f>>>8|128,e[d++]=255&f;for(var m=a.node||t,n=0;6>n;n++)e[d+n]=m[n];return b?b:g(e)}function i(a,b,c){var d=b&&c||0;"string"==typeof a&&(b="binary"===a?new o(16):null,a=null),a=a||{};var e=a.random||(a.rng||j)();if(e[6]=15&e[6]|64,e[8]=63&e[8]|128,b)for(var f=0;16>f;f++)b[d+f]=e[f];return b||g(e)}var j,k,l,m,n;c?d():e();for(var o="function"==typeof Buffer?Buffer:Array,p=[],q={},r=0;256>r;r++)p[r]=(r+256).toString(16).substr(1),q[p[r]]=r;var s=j(),t=[1|s[0],s[1],s[2],s[3],s[4],s[5]],u=16383&(s[6]<<8|s[7]),v=0,w=0,x=i;x.v1=h,x.v4=i,x.parse=f,x.unparse=g,x.BufferClass=o,x._rng=j,x._mathRNG=k,x._nodeRNG=l,x._whatwgRNG=m,"undefined"!=typeof b&&b.exports?b.exports=x:"function"==typeof define&&define.amd?define(function(){return x}):(n=c.uuid,x.noConflict=function(){return c.uuid=n,x},c.uuid=x)}("undefined"!=typeof window?window:null)},{}],2:[function(a,b,c){function d(){var a=this,b=Date.now(),c=-1;a.queueTTL>0&&(a.offlineQueue.forEach(function(d,e){d.ts0&&a.offlineQueue.length>a.queueMaxSize&&a.offlineQueue.splice(0,a.offlineQueue.length-a.queueMaxSize)}function e(a,b){var c=Date.now(),d=this;(void 0!==d.jwtToken||b)&&d.socket.once(a.requestId,function(c){c.error&&"Token expired"===c.error.message&&d.eventListeners.jwtTokenExpired.forEach(function(c){c.fn(a,b)}),b&&b(c.error,c)}),d.socket.emit("kuzzle",a),d.requestHistory[a.requestId]=c,Object.keys(d.requestHistory).forEach(function(a){d.requestHistory[a]0?(e.call(a,a.offlineQueue[0].query,a.offlineQueue[0].cb),a.offlineQueue.shift(),setTimeout(function(){f.call(a)},Math.max(0,a.replayInterval))):a.queuing=!1}var g=a("node-uuid"),h=a("./kuzzleDataCollection");b.exports=Kuzzle=function(b,c,d){var e=this;if(!(this instanceof Kuzzle))return new Kuzzle(b,c,d);if(d||"function"!=typeof c||(d=c,c=null),!b||""===b)throw new Error("URL argument missing");return Object.defineProperties(this,{collections:{value:{},writable:!0},connectCB:{value:d},eventListeners:{value:{connected:[],error:[],disconnected:[],reconnected:[],jwtTokenExpired:[]}},io:{value:null,writable:!0},queuing:{value:!1,writable:!0},requestHistory:{value:{},writable:!0},socket:{value:null,writable:!0},state:{value:"initializing",writable:!0},subscriptions:{value:{pending:{}},writable:!0},autoReconnect:{value:c&&"boolean"==typeof c.autoReconnect?c.autoReconnect:!0,enumerable:!0},defaultIndex:{value:c&&"string"==typeof c.defaultIndex?c.defaultIndex:void 0,writable:!0,enumerable:!0},reconnectionDelay:{value:c&&"number"==typeof c.reconnectionDelay?c.reconnectionDelay:1e3,enumerable:!0},url:{value:b,enumerable:!0},autoQueue:{value:!1,enumerable:!0,writable:!0},autoReplay:{value:!1,enumerable:!0,writable:!0},autoResubscribe:{value:!0,enumerable:!0,writable:!0},headers:{value:{},enumerable:!0,writable:!0},metadata:{value:{},enumerable:!0,writable:!0},offlineQueue:{value:[],enumerable:!0,writable:!0},queueFilter:{value:null,enumerable:!0,writable:!0},queueMaxSize:{value:500,enumerable:!0,writable:!0},queueTTL:{value:12e4,enumerable:!0,writable:!0},replayInterval:{value:10,enumerable:!0,writable:!0},loginStrategy:{value:c&&"string"==typeof c.loginStrategy?c.loginStrategy:void 0,enumerable:!0,writable:!1},loginCredentials:{value:c&&"object"==typeof c.loginCredentials?c.loginCredentials:void 0,enumerable:!0,writable:!1},loginExpiresIn:{value:c&&-1!==["number","string"].indexOf(typeof c.loginExpiresIn)?c.loginExpiresIn:void 0,enumerable:!0,writable:!1},jwtToken:{value:void 0,enumerable:!0,writable:!0}}),"undefined"!=typeof window&&window.io?this.io=window.io:this.io=a("socket.io-client"),c&&(Object.keys(c).forEach(function(a){e.hasOwnProperty(a)&&Object.getOwnPropertyDescriptor(e,a).writable&&(e[a]=c[a])}),"auto"===c.offlineMode&&this.autoReconnect&&(this.autoQueue=this.autoReplay=this.autoResubscribe=!0)),Object.defineProperty(this,"isValid",{value:function(){if("disconnected"===e.state)throw new Error("This Kuzzle object has been invalidated. Did you try to access it after a disconnect call?")}}),Object.defineProperty(this,"addHeaders",{value:function(a,b){return Object.keys(b).forEach(function(c){a[c]||(a[c]=b[c])}),a}}),Object.defineProperty(this,"callbackRequired",{value:function(a,b){if(!b||"function"!=typeof b)throw new Error(a+": a callback argument is required for read queries")}}),c&&c.connect&&"auto"!==c.connect?this.state="ready":this.connect(),this.bluebird?this.bluebird.promisifyAll(this,{suffix:"Promise",filter:function(a,b,c,d){var e=["getAllStatistics","getServerInfo","getStatistics","listCollections","listIndexes","login","logout","now","query"];return d&&-1!==e.indexOf(a)}}):this},Kuzzle.prototype.connect=function(){var a=this;return-1===["initializing","ready","disconnected","error","offline"].indexOf(this.state)?(a.connectCB&&a.connectCB(null,a),a):(a.state="connecting",a.socket=a.io(a.url,{reconnection:a.autoReconnect,reconnectionDelay:a.reconnectionDelay,forceNew:!0}),a.socket.once("connect",function(){a.state="connected",Object.keys(a.subscriptions).forEach(function(b){Object.keys(a.subscriptions[b]).forEach(function(c){var d=a.subscriptions[b][c];d.renew(d.callback)})}),f.call(a),a.loginStrategy?a.login(a.loginStrategy,a.loginCredentials,a.loginExpiresIn,function(b){a.eventListeners.connected.forEach(function(a){a.fn(b)}),a.connectCB&&a.connectCB(b,a)}):(a.eventListeners.connected.forEach(function(a){a.fn()}),a.connectCB&&a.connectCB(null,a))}),a.socket.on("connect_error",function(b){a.state="error",a.eventListeners.error.forEach(function(a){a.fn()}),a.connectCB&&a.connectCB(b)}),a.socket.on("disconnect",function(){a.state="offline",a.autoReconnect||a.disconnect(),a.autoQueue&&(a.queuing=!0),a.eventListeners.disconnected.forEach(function(a){a.fn()})}),a.socket.on("reconnect",function(){a.state="connected",a.autoResubscribe&&Object.keys(a.subscriptions).forEach(function(b){Object.keys(a.subscriptions[b]).forEach(function(c){var d=a.subscriptions[b][c];d.renew(d.callback)})}),a.autoReplay&&(d.call(a),f.call(a)),a.eventListeners.reconnected.forEach(function(a){a.fn()})}),this)},Kuzzle.prototype.login=function(a,b,c,d){var e=this,f={strategy:a};return d||"function"!=typeof c||(d=c,c=null),Object.keys(b).forEach(function(a){f[a]=b[a]}),-1!==["number","string"].indexOf(typeof c)&&(f.expiresIn=c),this.query({controller:"auth",action:"login"},{body:f},{},function(a,b){if(null===a)e.jwtToken=b.jwt,"function"==typeof d&&d(null,e);else{if("function"!=typeof d)throw new Error(a.message);d(a)}}),e},Kuzzle.prototype.logout=function(a){var b=this,c={action:"logout",controller:"auth",requestId:g.v4(),body:{}};return this.query({controller:"auth",action:"logout"},c,{},function(c){null===c?(b.jwtToken=void 0,"function"==typeof a&&a(null,b)):"function"==typeof a&&a(c)}),b},Kuzzle.prototype.addListener=function(a,b){var c,d=Object.keys(this.eventListeners),e=typeof b;if(this.isValid(),-1===d.indexOf(a))throw new Error("["+a+"] is not a known event. Known events: "+d.toString());if("function"!==e)throw new Error("Invalid listener type: expected a function, got a "+e);return c=g.v1(),this.eventListeners[a].push({id:c,fn:b}),c},Kuzzle.prototype.getAllStatistics=function(a,b){return b||"function"!=typeof a||(b=a,a=null),this.callbackRequired("Kuzzle.getAllStatistics",b),this.query({controller:"admin",action:"getAllStats"},{},a,function(a,c){return a?b(a):void b(null,c.result.hits)}),this},Kuzzle.prototype.getStatistics=function(a,b,c){var d;return c||(1===arguments.length?(c=arguments[0],b=null,a=null):(c=arguments[1],"object"==typeof arguments[0]?(b=arguments[0],a=null):(a=arguments[0],b=null))),d=function(b,d){return b?c(b):void(a?c(null,d.result.hits):c(null,[d.result]))},this.callbackRequired("Kuzzle.getStatistics",c),a?this.query({controller:"admin",action:"getStats"},{body:{startTime:a}},b,d):this.query({controller:"admin",action:"getLastStats"},{},b,d),this},Kuzzle.prototype.dataCollectionFactory=function(a,b,c){if(this.isValid(),1===arguments.length?(b=arguments[0],a=this.defaultIndex):2===arguments.length&&"object"==typeof b&&(c=b,b=a,a=this.defaultIndex),!a)throw new Error("Unable to create a new data collection object: no index specified");return this.collections[a]||(this.collections[a]={}),this.collections[a][b]||(this.collections[a][b]=new h(this,a,b,c)),this.collections[a][b]},Kuzzle.prototype.flushQueue=function(){return this.offlineQueue=[],this},Kuzzle.prototype.listCollections=function(){var a,b,c,d="all",e=Array.prototype.slice.call(arguments);if(e.forEach(function(d){switch(typeof d){case"string":a=d;break;case"object":b=d;break;case"function":c=d}}),!a){if(!this.defaultIndex)throw new Error("Kuzzle.listCollections: index required");a=this.defaultIndex}return this.callbackRequired("Kuzzle.listCollections",c),b&&b.type&&(d=b.type),this.query({index:a,controller:"read",action:"listCollections"},{body:{type:d}},b,function(a,b){return a?c(a):c(null,b.result.collections)}),this},Kuzzle.prototype.listIndexes=function(a,b){return b||"function"!=typeof a||(b=a,a=null),this.callbackRequired("Kuzzle.listIndexes",b),this.query({controller:"read",action:"listIndexes"},{},a,function(a,c){return a?b(a):b(null,c.result.indexes)}),this},Kuzzle.prototype.disconnect=function(){var a;this.logout(),this.state="disconnected",this.socket.close(),this.socket=null;for(a in this.collections)this.collections.hasOwnProperty(a)&&delete this.collections[a]},Kuzzle.prototype.getServerInfo=function(a,b){return b||"function"!=typeof a||(b=a,a=null),this.callbackRequired("Kuzzle.getServerInfo",b),this.query({controller:"read",action:"serverInfo"},{},a,function(a,c){return a?b(a):void b(null,c.result.serverInfo)}),this},Kuzzle.prototype.now=function(a,b){return b||"function"!=typeof a||(b=a,a=null),this.callbackRequired("Kuzzle.now",b),this.query({controller:"read",action:"now"},{},a,function(a,c){return a?b(a):void b(null,c.result.now)}),this},Kuzzle.prototype.query=function(a,b,c,f){var h,i={action:a.action,controller:a.controller,metadata:this.metadata},j=this;if(this.isValid(),f||"function"!=typeof c||(f=c,c=null),c&&(c.metadata&&Object.keys(c.metadata).forEach(function(a){i.metadata[a]=c.metadata[a]}),c.queuable===!1&&"offline"===j.state))return j;b.metadata&&Object.keys(b.metadata).forEach(function(a){i.metadata[a]=b.metadata[a]});for(h in b)"metadata"!==h&&b.hasOwnProperty(h)&&(i[h]=b[h]);return i=j.addHeaders(i,this.headers),void 0!==j.jwtToken&&(i.headers=i.headers||{},i.headers.authorization="Bearer "+j.jwtToken),a.collection&&(i.collection=a.collection),a.index&&(i.index=a.index),i.requestId||(i.requestId=g.v4()),"connected"===j.state||c&&c.queuable===!1?e.call(this,i,f):(j.queuing||-1!==["initializing","connecting"].indexOf(j.state))&&(d.call(this,i,f),j.queueFilter?j.queueFilter(i)&&j.offlineQueue.push({ts:Date.now(),query:i,cb:f}):j.offlineQueue.push({ts:Date.now(),query:i,cb:f})),j},Kuzzle.prototype.removeAllListeners=function(a){var b=Object.keys(this.eventListeners),c=this;if(a){if(-1===b.indexOf(a))throw new Error("["+a+"] is not a known event. Known events: "+b.toString());this.eventListeners[a]=[]}else b.forEach(function(a){c.eventListeners[a]=[]})},Kuzzle.prototype.removeListener=function(a,b){var c=Object.keys(this.eventListeners),d=this;if(-1===c.indexOf(a))throw new Error("["+a+"] is not a known event. Known events: "+c.toString());this.eventListeners[a].forEach(function(c,e){c.id===b&&d.eventListeners[a].splice(e,1)})},Kuzzle.prototype.replayQueue=function(){return"offline"===this.state||this.autoReplay||(d.call(this),f.call(this)),this},Kuzzle.prototype.setDefaultIndex=function(a){if("string"!=typeof a)throw new Error("Invalid default index: ["+a+"] (an index name is expected)");if(0===a.length)throw new Error("Cannot set an empty index as the default index");return this.defaultIndex=a,this},Kuzzle.prototype.setHeaders=function(a,b){var c=this;if("object"!=typeof a||Array.isArray(a))throw new Error("Expected a content object, received a "+typeof a);return b?c.headers=a:Object.keys(a).forEach(function(b){c.headers[b]=a[b]}),c},Kuzzle.prototype.startQueuing=function(){return"offline"!==this.state||this.autoQueue||(this.queuing=!0),this},Kuzzle.prototype.stopQueuing=function(){return"offline"!==this.state||this.autoQueue||(this.queuing=!1),this}},{"./kuzzleDataCollection":3,"node-uuid":1,"socket.io-client":void 0}],3:[function(a,b,c){function d(a,b,c){if(!b||!c)throw new Error("The KuzzleDataCollection object constructor needs an index and a collection arguments");return Object.defineProperties(this,{collection:{value:c,enumerable:!0},index:{value:b,enumerable:!0},kuzzle:{value:a,enumerable:!0},headers:{value:JSON.parse(JSON.stringify(a.headers)),enumerable:!0,writable:!0}}),Object.defineProperty(this,"buildQueryArgs",{value:function(a,b){return{controller:a,action:b,collection:this.collection,index:this.index}}}),this.kuzzle.bluebird?this.kuzzle.bluebird.promisifyAll(this,{suffix:"Promise",filter:function(a,b,c,d){var e=["publishMessage","setHeaders","subscribe"];return d&&-1===e.indexOf(a)}}):this}var e=a("./kuzzleDocument"),f=a("./kuzzleDataMapping"),g=a("./kuzzleRoom");d.prototype.advancedSearch=function(a,b,c){var d,f=this;return c||"function"!=typeof b||(c=b,b=null),f.kuzzle.callbackRequired("KuzzleDataCollection.advancedSearch",c),d=f.kuzzle.addHeaders({body:a},this.headers),f.kuzzle.query(this.buildQueryArgs("read","search"),d,b,function(a,b){var d=[];return a?c(a):(b.result.hits.forEach(function(a){var b=new e(f,a._id,a._source);b.version=a._version,d.push(b)}),void c(null,{total:b.result.total,documents:d}))}),this},d.prototype.count=function(a,b,c){var d;return c||"function"!=typeof b||(c=b,b=null),this.kuzzle.callbackRequired("KuzzleDataCollection.count",c),d=this.kuzzle.addHeaders({body:a},this.headers),this.kuzzle.query(this.buildQueryArgs("read","count"),d,b,function(a,b){return a?c(a):void c(null,b.result.count)}),this},d.prototype.create=function(a,b){var c={};return b||"function"!=typeof a||(b=a,a=null),c=this.kuzzle.addHeaders(c,this.headers),this.kuzzle.query(this.buildQueryArgs("write","createCollection"),c,a,b),this},d.prototype.createDocument=function(a,b,c,d){var f=this,g={},h="create";return a&&"string"!=typeof a&&(d=c,c=b,b=a,a=null),d||"function"!=typeof c||(d=c,c=null),b instanceof e?g=b.toJSON():g.body=b,c&&(h=c.updateIfExist?"createOrUpdate":"create"),a&&(g._id=a),g.persist=!0,g=f.kuzzle.addHeaders(g,f.headers),d?f.kuzzle.query(this.buildQueryArgs("write",h),g,c,function(a,b){var c;return a?d(a):(c=new e(f,b.result._id,b.result._source),c.version=b.result._version,void d(null,c))}):f.kuzzle.query(this.buildQueryArgs("write",h),g,c),this},d.prototype["delete"]=function(a,b){var c={};return b||"function"!=typeof a||(b=a,a=null),c=this.kuzzle.addHeaders(c,this.headers),this.kuzzle.query(this.buildQueryArgs("admin","deleteCollection"),c,a,b),this},d.prototype.deleteDocument=function(a,b,c){var d,e={};return"string"==typeof a?(e._id=a,d="delete"):(e.body=a,d="deleteByQuery"),c||"function"!=typeof b||(c=b,b=null),e=this.kuzzle.addHeaders(e,this.headers),c?this.kuzzle.query(this.buildQueryArgs("write",d),e,b,function(a,b){return a?c(a):void("delete"===d?c(null,[b.result._id]):c(null,b.result.ids))}):this.kuzzle.query(this.buildQueryArgs("write",d),e,b),this},d.prototype.fetchDocument=function(a,b,c){var d={_id:a},f=this;return c||"function"!=typeof b||(c=b,b=null),f.kuzzle.callbackRequired("KuzzleDataCollection.fetch",c),d=f.kuzzle.addHeaders(d,this.headers),f.kuzzle.query(this.buildQueryArgs("read","get"),d,b,function(a,b){var d;return a?c(a):(d=new e(f,b.result._id,b.result._source),d.version=b.result._version,void c(null,d))}),this},d.prototype.fetchAllDocuments=function(a,b){return b||"function"!=typeof a||(b=a,a=null),this.kuzzle.callbackRequired("KuzzleDataCollection.fetchAll",b),this.advancedSearch({},a,b),this},d.prototype.getMapping=function(a,b){var c;return b||"function"!=typeof a||(b=a,a=null),this.kuzzle.callbackRequired("KuzzleDataCollection.getMapping",b),c=new f(this),c.refresh(a,b),this},d.prototype.publishMessage=function(a,b){var c={};return a instanceof e?c=a.toJSON():c.body=a,c=this.kuzzle.addHeaders(c,this.headers),this.kuzzle.query(this.buildQueryArgs("write","publish"),c,b),this},d.prototype.replaceDocument=function(a,b,c,d){var f=this,g={_id:a,body:b};return d||"function"!=typeof c||(d=c,c=null),g=f.kuzzle.addHeaders(g,this.headers),d?f.kuzzle.query(this.buildQueryArgs("write","createOrUpdate"),g,c,function(a,b){var c;return a?d(a):(c=new e(f,b.result._id,b.result._source),c.version=b.result._version,void d(null,c))}):f.kuzzle.query(this.buildQueryArgs("write","createOrUpdate"),g,c),this},d.prototype.subscribe=function(a,b,c){var d;return c||"function"!=typeof b||(c=b,b=null),this.kuzzle.callbackRequired("KuzzleDataCollection.subscribe",c),d=new g(this,b),d.renew(a,c)},d.prototype.truncate=function(a,b){var c={};return b||"function"!=typeof a||(b=a,a=null),c=this.kuzzle.addHeaders(c,this.headers),this.kuzzle.query(this.buildQueryArgs("admin","truncateCollection"),c,a,b),this},d.prototype.updateDocument=function(a,b,c,d){var f={_id:a,body:b},g=this;return d||"function"!=typeof c||(d=c,c=null),f=g.kuzzle.addHeaders(f,this.headers),d?g.kuzzle.query(this.buildQueryArgs("write","update"),f,c,function(a,b){var c;return a?d(a):(c=new e(g,b.result._id),void c.refresh(d))}):g.kuzzle.query(this.buildQueryArgs("write","update"),f,c),g},d.prototype.documentFactory=function(a,b){return new e(this,a,b)},d.prototype.roomFactory=function(a){return new g(this,a)},d.prototype.dataMappingFactory=function(a){return new f(this,a)},d.prototype.setHeaders=function(a,b){return this.kuzzle.setHeaders.call(this,a,b),this},b.exports=d},{"./kuzzleDataMapping":4,"./kuzzleDocument":5,"./kuzzleRoom":6}],4:[function(a,b,c){function d(a,b){return Object.defineProperties(this,{collection:{value:a,eunmerable:!0},kuzzle:{value:a.kuzzle,enumerable:!0},headers:{value:JSON.parse(JSON.stringify(a.headers)),enumerable:!0,writable:!0},mapping:{value:b||{},enumerable:!0,writable:!0}}),this.kuzzle.bluebird?this.kuzzle.bluebird.promisifyAll(this,{suffix:"Promise",filter:function(a,b,c,d){var e=["set","setHeaders"];return d&&-1===e.indexOf(a)}}):this}d.prototype.apply=function(a,b){var c=this,d=this.kuzzle.addHeaders({body:{properties:this.mapping}},this.headers);return b||"function"!=typeof a||(b=a,a=null),c.kuzzle.query(this.collection.buildQueryArgs("admin","putMapping"),d,a,function(d){return d?b?b(d):!1:void c.refresh(a,b)}),this},d.prototype.refresh=function(a,b){var c=this,d=this.kuzzle.addHeaders({},this.headers);return b||"function"!=typeof a||(b=a,a=null),this.kuzzle.query(this.collection.buildQueryArgs("admin","getMapping"),d,a,function(a,d){return a?b?b(a):!1:d.result[c.collection.index]?d.result[c.collection.index].mappings[c.collection.collection]?(c.mapping=d.result[c.collection.index].mappings[c.collection.collection].properties,void(b&&b(null,c))):b?b(new Error("No mapping found for collection "+c.collection.collection)):!1:b?b(new Error("No mapping found for index "+c.collection.index)):!1}),this},d.prototype.set=function(a,b){return this.mapping[a]=b,this},d.prototype.setHeaders=function(a,b){return this.kuzzle.setHeaders.call(this,a,b),this},b.exports=d},{}],5:[function(a,b,c){function d(a,b,c){return Object.defineProperties(this,{queue:{value:[],writable:!0},refreshing:{value:!1,writable:!0},collection:{value:a.collection,enumerable:!0},dataCollection:{value:a,enumerable:!0},kuzzle:{value:a.kuzzle,enumerable:!0},id:{value:void 0,enumerable:!0,writable:!0},content:{value:{},writable:!0,enumerable:!0},headers:{value:JSON.parse(JSON.stringify(a.headers)),enumerable:!0,writable:!0},version:{value:void 0,enumerable:!0,writable:!0}}),!c&&b&&"object"==typeof b&&(c=b,b=null),c&&(c._version&&(this.version=c._version,delete c._version),this.setContent(c,!0)),b&&Object.defineProperty(this,"id",{value:b,enumerable:!0}),this.kuzzle.bluebird?this.kuzzle.bluebird.promisifyAll(this,{suffix:"Promise",filter:function(a,b,c,d){var e=["delete","refresh","save"];return d&&-1!==e.indexOf(a)}}):this}function e(){for(var a;this.queue.length>0;)a=this.queue.shift(),this[a.action].apply(this,a.args)}d.prototype.toJSON=function(){var a={};return this.id&&(a._id=this.id),a.body=this.content,a._version=this.version,a=this.kuzzle.addHeaders(a,this.headers)},d.prototype.toString=function(){return JSON.stringify(this.toJSON())},d.prototype["delete"]=function(a,b){var c=this;if(b||"function"!=typeof a||(b=a,a=null),this.refreshing)return this.queue.push({action:"delete",args:[a,b]}),this;if(!this.id)throw new Error("KuzzleDocument.delete: cannot delete a document without a document ID");return b?this.kuzzle.query(this.dataCollection.buildQueryArgs("write","delete"),this.toJSON(),a,function(a){return a?b(a):void b(null,c)}):this.kuzzle.query(this.dataCollection.buildQueryArgs("write","delete"),this.toJSON(),a),this},d.prototype.refresh=function(a,b){var c=this;if(b||"function"!=typeof a||(b=a,a=null),this.refreshing)return this.queue.push({action:"refresh",args:[a,b]}),this;if(!c.id)throw new Error("KuzzleDocument.refresh: cannot retrieve a document if no ID has been provided");return c.refreshing=!0,c.kuzzle.query(c.dataCollection.buildQueryArgs("read","get"),{_id:c.id},a,function(a,d){return a?(c.refreshing=!1,c.queue=[],b?b(a):!1):(c.version=d.result._version,c.content=d.result._source,b&&b(null,c),c.refreshing=!1,void e.call(c))}),this},d.prototype.save=function(a,b){var c=this.toJSON(),d=this;return a&&void 0===b&&"function"==typeof a&&(b=a,a=null),d.refreshing?(d.queue.push({action:"save",args:[a,b]}),d):(c.persist=!0,d.kuzzle.query(this.dataCollection.buildQueryArgs("write","createOrUpdate"),c,a,function(a,c){return a?b?b(a):!1:(d.id=c.result._id,d.version=c.result._version,void(b&&b(null,d)))}),d)},d.prototype.publish=function(a){var b=this.toJSON();return this.refreshing?(this.queue.push({action:"publish",args:[a]}),this):(this.kuzzle.query(this.dataCollection.buildQueryArgs("write","publish"),b,a),this)},d.prototype.setContent=function(a,b){var c=this;return this.refreshing?(this.queue.push({action:"setContent",args:[a,b]}),this):(b?this.content=a:Object.keys(a).forEach(function(b){c.content[b]=a[b]}),this)},d.prototype.subscribe=function(a,b){var c;if(a&&!b&&"function"==typeof a&&(b=a,a=null),this.kuzzle.callbackRequired("KuzzleDocument.subscribe",b),!this.id)throw new Error("KuzzleDocument.subscribe: cannot subscribe to a document if no ID has been provided");return c={ids:{values:[this.id]}},this.dataCollection.subscribe(c,a,b)},d.prototype.setHeaders=function(a,b){return this.kuzzle.setHeaders.call(this,a,b),this},b.exports=d},{}],6:[function(a,b,c){function d(a,b){return Object.defineProperties(this,{callback:{value:null,writable:!0},channel:{value:null,writable:!0},id:{value:g.v4()},notifier:{value:null,writable:!0},queue:{value:[],writable:!0},scope:{value:b&&b.scope?b.scope:"all"},state:{value:b&&b.state?b.state:"done"},subscribing:{value:!1,writable:!0},users:{value:b&&b.users?b.users:"none"},collection:{value:a,enumerable:!0},kuzzle:{value:a.kuzzle,enumerable:!0},filters:{value:null,enumerable:!0,writable:!0},headers:{value:JSON.parse(JSON.stringify(a.headers)),enumerable:!0,writable:!0},metadata:{value:b&&b.metadata?b.metadata:{},enumerable:!0,writable:!0},roomId:{value:null,enumerable:!0,writable:!0},subscribeToSelf:{value:b&&"boolean"==typeof b.subscribeToSelf?b.subscribeToSelf:!0,enumerable:!0,writable:!0}}),this.kuzzle.bluebird?this.kuzzle.bluebird.promisifyAll(this,{suffix:"Promise",filter:function(a,b,c,d){var e=["count"];return d&&-1!==e.indexOf(a)}}):this}function e(a){return a.error?this.callback(a.error):void(this.kuzzle.requestHistory[a.requestId]?(this.subscribeToSelf&&this.callback(null,a),delete this.kuzzle.requestHistory[a.requestId]):this.callback(null,a))}function f(){for(var a;this.queue.length>0;)a=this.queue.shift(),this[a.action].apply(this,a.args)}var g=a("node-uuid");d.prototype.count=function(a){var b;return this.kuzzle.callbackRequired("KuzzleRoom.count",a),b=this.kuzzle.addHeaders({body:{roomId:this.roomId}},this.headers),this.subscribing?(this.queue.push({action:"count",args:[a]}),this):(this.kuzzle.query(this.collection.buildQueryArgs("subscribe","count"),b,function(b,c){return b?a(b):void a(null,c.result.count)}),this)},d.prototype.renew=function(a,b){var c={scope:this.scope,state:this.state,users:this.users},d=this;return!b&&a&&"function"==typeof a&&(b=a,a=null),a&&(this.filters=a),"connected"!==this.kuzzle.state?(this.callback=b,this.kuzzle.subscriptions.pending[d.id]=d,this):this.subscribing?(this.queue.push({action:"renew",args:[a,b]}),this):(this.kuzzle.callbackRequired("KuzzleRoom.renew",b),this.unsubscribe(),this.roomId=null,this.subscribing=!0,this.callback=b,this.kuzzle.subscriptions.pending[d.id]=d,c.body=this.filters,c=this.kuzzle.addHeaders(c,this.headers),d.kuzzle.query(this.collection.buildQueryArgs("subscribe","on"),c,{metadata:this.metadata},function(a,b){if(delete d.kuzzle.subscriptions.pending[d.id],d.subscribing=!1,a)throw d.queue=[],new Error("Error during Kuzzle subscription: "+a.message);d.roomId=b.result.roomId,d.channel=b.result.channel,d.kuzzle.subscriptions[d.roomId]||(d.kuzzle.subscriptions[d.roomId]={}),d.kuzzle.subscriptions[d.roomId][d.id]=d,d.notifier=e.bind(d),d.kuzzle.socket.on(d.channel,d.notifier),f.call(d)}),this)},d.prototype.unsubscribe=function(){var a,b=this,c=b.roomId;return b.subscribing?(b.queue.push({action:"unsubscribe",args:[]}),b):(c&&(b.kuzzle.socket.off(b.channel,this.notifier),1===Object.keys(b.kuzzle.subscriptions[c]).length?(delete b.kuzzle.subscriptions[c],0===Object.keys(b.kuzzle.subscriptions.pending).length?b.kuzzle.query(b.collection.buildQueryArgs("subscribe","off"),{body:{roomId:c}}):a=setInterval(function(){0===Object.keys(b.kuzzle.subscriptions.pending).length&&(b.kuzzle.subscriptions[c]||b.kuzzle.query(b.collection.buildQueryArgs("subscribe","off"),{body:{roomId:c}}),clearInterval(a))},100)):delete b.kuzzle.subscriptions[c][b.id],b.roomId=null),b)},d.prototype.setHeaders=function(a,b){return this.kuzzle.setHeaders.call(this,a,b),this},b.exports=d},{"node-uuid":1}]},{},[2]); +// Official Javascript SDK for Kuzzle v1.3.9 - License: Apache-2.0 +!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;gb;b++)0===(3&b)&&(a=4294967296*Math.random()),e[b]=a>>>((3&b)<<3)&255;return e},"undefined"!=typeof console&&console.warn&&console.warn("[SECURITY] node-uuid: crypto not usable, falling back to insecure Math.random()")}}function e(){if("function"==typeof a)try{var b=a("crypto").randomBytes;l=j=b&&function(){return b(16)},j()}catch(c){}}function f(a,b,c){var d=b&&c||0,e=0;for(b=b||[],a.toLowerCase().replace(/[0-9a-f]{2}/g,function(a){16>e&&(b[d+e++]=q[a])});16>e;)b[d+e++]=0;return b}function g(a,b){var c=b||0,d=p;return d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]+"-"+d[a[c++]]+d[a[c++]]+"-"+d[a[c++]]+d[a[c++]]+"-"+d[a[c++]]+d[a[c++]]+"-"+d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]+d[a[c++]]}function h(a,b,c){var d=b&&c||0,e=b||[];a=a||{};var f=null!=a.clockseq?a.clockseq:u,h=null!=a.msecs?a.msecs:(new Date).getTime(),i=null!=a.nsecs?a.nsecs:w+1,j=h-v+(i-w)/1e4;if(0>j&&null==a.clockseq&&(f=f+1&16383),(0>j||h>v)&&null==a.nsecs&&(i=0),i>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");v=h,w=i,u=f,h+=122192928e5;var k=(1e4*(268435455&h)+i)%4294967296;e[d++]=k>>>24&255,e[d++]=k>>>16&255,e[d++]=k>>>8&255,e[d++]=255&k;var l=h/4294967296*1e4&268435455;e[d++]=l>>>8&255,e[d++]=255&l,e[d++]=l>>>24&15|16,e[d++]=l>>>16&255,e[d++]=f>>>8|128,e[d++]=255&f;for(var m=a.node||t,n=0;6>n;n++)e[d+n]=m[n];return b?b:g(e)}function i(a,b,c){var d=b&&c||0;"string"==typeof a&&(b="binary"===a?new o(16):null,a=null),a=a||{};var e=a.random||(a.rng||j)();if(e[6]=15&e[6]|64,e[8]=63&e[8]|128,b)for(var f=0;16>f;f++)b[d+f]=e[f];return b||g(e)}var j,k,l,m,n;c?d():e();for(var o="function"==typeof Buffer?Buffer:Array,p=[],q={},r=0;256>r;r++)p[r]=(r+256).toString(16).substr(1),q[p[r]]=r;var s=j(),t=[1|s[0],s[1],s[2],s[3],s[4],s[5]],u=16383&(s[6]<<8|s[7]),v=0,w=0,x=i;x.v1=h,x.v4=i,x.parse=f,x.unparse=g,x.BufferClass=o,x._rng=j,x._mathRNG=k,x._nodeRNG=l,x._whatwgRNG=m,"undefined"!=typeof b&&b.exports?b.exports=x:"function"==typeof define&&define.amd?define(function(){return x}):(n=c.uuid,x.noConflict=function(){return c.uuid=n,x},c.uuid=x)}("undefined"!=typeof window?window:null)},{}],2:[function(a,b,c){function d(){var a=this,b=Date.now(),c=-1;a.queueTTL>0&&(a.offlineQueue.forEach(function(d,e){d.ts0&&a.offlineQueue.length>a.queueMaxSize&&a.offlineQueue.splice(0,a.offlineQueue.length-a.queueMaxSize)}function e(a,b){var c=Date.now(),d=this;(void 0!==d.jwtToken||b)&&d.socket.once(a.requestId,function(c){c.error&&"Token expired"===c.error.message&&h.call(d,"jwtTokenExpired",a,b),b&&b(c.error,c)}),d.socket.emit("kuzzle",a),d.requestHistory[a.requestId]=c,Object.keys(d.requestHistory).forEach(function(a){d.requestHistory[a]0?(e.call(a,a.offlineQueue[0].query,a.offlineQueue[0].cb),a.offlineQueue.shift(),setTimeout(function(){f.call(a)},Math.max(0,a.replayInterval))):a.queuing=!1}function g(){var a=this;Object.keys(a.subscriptions).forEach(function(b){Object.keys(a.subscriptions[b]).forEach(function(c){var d=a.subscriptions[b][c];d.renew(d.callback)})})}function h(a){var b=this,c=Array.prototype.slice.call(arguments,1);b.eventListeners[a].forEach(function(a){a.fn.apply(b,c)})}var i=a("node-uuid"),j=a("./kuzzleDataCollection");b.exports=Kuzzle=function(b,c,d){var e=this;if(!(this instanceof Kuzzle))return new Kuzzle(b,c,d);if(d||"function"!=typeof c||(d=c,c=null),!b||""===b)throw new Error("URL argument missing");return Object.defineProperties(this,{collections:{value:{},writable:!0},connectCB:{value:d},eventListeners:{value:{connected:[],error:[],disconnected:[],reconnected:[],jwtTokenExpired:[]}},io:{value:null,writable:!0},queuing:{value:!1,writable:!0},requestHistory:{value:{},writable:!0},socket:{value:null,writable:!0},state:{value:"initializing",writable:!0},subscriptions:{value:{pending:{}},writable:!0},autoReconnect:{value:c&&"boolean"==typeof c.autoReconnect?c.autoReconnect:!0,enumerable:!0},defaultIndex:{value:c&&"string"==typeof c.defaultIndex?c.defaultIndex:void 0,writable:!0,enumerable:!0},reconnectionDelay:{value:c&&"number"==typeof c.reconnectionDelay?c.reconnectionDelay:1e3,enumerable:!0},url:{value:b,enumerable:!0},autoQueue:{value:!1,enumerable:!0,writable:!0},autoReplay:{value:!1,enumerable:!0,writable:!0},autoResubscribe:{value:!0,enumerable:!0,writable:!0},headers:{value:{},enumerable:!0,writable:!0},metadata:{value:{},enumerable:!0,writable:!0},offlineQueue:{value:[],enumerable:!0,writable:!0},queueFilter:{value:null,enumerable:!0,writable:!0},queueMaxSize:{value:500,enumerable:!0,writable:!0},queueTTL:{value:12e4,enumerable:!0,writable:!0},replayInterval:{value:10,enumerable:!0,writable:!0},jwtToken:{value:void 0,enumerable:!0,writable:!0}}),"undefined"!=typeof window&&window.io?this.io=window.io:this.io=a("socket.io-client"),c&&(Object.keys(c).forEach(function(a){e.hasOwnProperty(a)&&Object.getOwnPropertyDescriptor(e,a).writable&&(e[a]=c[a])}),"auto"===c.offlineMode&&this.autoReconnect&&(this.autoQueue=this.autoReplay=this.autoResubscribe=!0)),Object.defineProperty(this,"isValid",{value:function(){if("disconnected"===e.state)throw new Error("This Kuzzle object has been invalidated. Did you try to access it after a disconnect call?")}}),Object.defineProperty(this,"addHeaders",{value:function(a,b){return Object.keys(b).forEach(function(c){a[c]||(a[c]=b[c])}),a}}),Object.defineProperty(this,"callbackRequired",{value:function(a,b){if(!b||"function"!=typeof b)throw new Error(a+": a callback argument is required for read queries")}}),c&&c.connect&&"auto"!==c.connect?this.state="ready":this.connect(),this.bluebird?this.bluebird.promisifyAll(this,{suffix:"Promise",filter:function(a,b,c,d){var e=["getAllStatistics","getServerInfo","getStatistics","listCollections","listIndexes","login","logout","now","query"];return d&&-1!==e.indexOf(a)}}):this},Kuzzle.prototype.connect=function(){var a=this;return-1===["initializing","ready","disconnected","error","offline"].indexOf(this.state)?(a.connectCB&&a.connectCB(null,a),a):(a.state="connecting",a.socket=a.io(a.url,{reconnection:a.autoReconnect,reconnectionDelay:a.reconnectionDelay,forceNew:!0}),a.socket.once("connect",function(){a.state="connected",g.call(a),f.call(a),h.call(a,"connected"),a.connectCB&&a.connectCB(null,a)}),a.socket.on("connect_error",function(b){a.state="error",h.call(a,"error"),a.connectCB&&a.connectCB(b)}),a.socket.on("disconnect",function(){a.state="offline",a.autoReconnect||a.disconnect(),a.autoQueue&&(a.queuing=!0),h.call(a,"disconnected")}),a.socket.on("reconnect",function(){a.state="connected",a.autoResubscribe&&g.call(a),a.autoReplay&&(d.call(a),f.call(a)),h.call(a,"reconnected")}),this)},Kuzzle.prototype.login=function(a,b,c,d){var e=this,f={strategy:a};return d||"function"!=typeof c||(d=c,c=null),Object.keys(b).forEach(function(a){f[a]=b[a]}),-1!==["number","string"].indexOf(typeof c)&&(f.expiresIn=c),this.query({controller:"auth",action:"login"},{body:f},{},function(a,b){if(null===a)e.jwtToken=b.jwt,g.call(e),"function"==typeof d&&d(null,e);else{if("function"!=typeof d)throw new Error(a.message);d(a)}}),e},Kuzzle.prototype.logout=function(a){var b=this,c={action:"logout",controller:"auth",requestId:i.v4(),body:{}};return this.query({controller:"auth",action:"logout"},c,{},function(c){null===c?(b.jwtToken=void 0,"function"==typeof a&&a(null,b)):"function"==typeof a&&a(c)}),b},Kuzzle.prototype.addListener=function(a,b){var c,d=Object.keys(this.eventListeners),e=typeof b;if(this.isValid(),-1===d.indexOf(a))throw new Error("["+a+"] is not a known event. Known events: "+d.toString());if("function"!==e)throw new Error("Invalid listener type: expected a function, got a "+e);return c=i.v1(),this.eventListeners[a].push({id:c,fn:b}),c},Kuzzle.prototype.getAllStatistics=function(a,b){return b||"function"!=typeof a||(b=a,a=null),this.callbackRequired("Kuzzle.getAllStatistics",b),this.query({controller:"admin",action:"getAllStats"},{},a,function(a,c){return a?b(a):void b(null,c.result.hits)}),this},Kuzzle.prototype.getStatistics=function(a,b,c){var d;return c||(1===arguments.length?(c=arguments[0],b=null,a=null):(c=arguments[1],"object"==typeof arguments[0]?(b=arguments[0],a=null):(a=arguments[0],b=null))),d=function(b,d){return b?c(b):void(a?c(null,d.result.hits):c(null,[d.result]))},this.callbackRequired("Kuzzle.getStatistics",c),a?this.query({controller:"admin",action:"getStats"},{body:{startTime:a}},b,d):this.query({controller:"admin",action:"getLastStats"},{},b,d),this},Kuzzle.prototype.dataCollectionFactory=function(a,b,c){if(this.isValid(),1===arguments.length?(b=arguments[0],a=this.defaultIndex):2===arguments.length&&"object"==typeof b&&(c=b,b=a,a=this.defaultIndex),!a)throw new Error("Unable to create a new data collection object: no index specified");return this.collections[a]||(this.collections[a]={}),this.collections[a][b]||(this.collections[a][b]=new j(this,a,b,c)),this.collections[a][b]},Kuzzle.prototype.flushQueue=function(){return this.offlineQueue=[],this},Kuzzle.prototype.listCollections=function(){var a,b,c,d="all",e=Array.prototype.slice.call(arguments);if(e.forEach(function(d){switch(typeof d){case"string":a=d;break;case"object":b=d;break;case"function":c=d}}),!a){if(!this.defaultIndex)throw new Error("Kuzzle.listCollections: index required");a=this.defaultIndex}return this.callbackRequired("Kuzzle.listCollections",c),b&&b.type&&(d=b.type),this.query({index:a,controller:"read",action:"listCollections"},{body:{type:d}},b,function(a,b){return a?c(a):c(null,b.result.collections)}),this},Kuzzle.prototype.listIndexes=function(a,b){return b||"function"!=typeof a||(b=a,a=null),this.callbackRequired("Kuzzle.listIndexes",b),this.query({controller:"read",action:"listIndexes"},{},a,function(a,c){return a?b(a):b(null,c.result.indexes)}),this},Kuzzle.prototype.disconnect=function(){var a;this.logout(),this.state="disconnected",this.socket.close(),this.socket=null;for(a in this.collections)this.collections.hasOwnProperty(a)&&delete this.collections[a]},Kuzzle.prototype.getServerInfo=function(a,b){return b||"function"!=typeof a||(b=a,a=null),this.callbackRequired("Kuzzle.getServerInfo",b),this.query({controller:"read",action:"serverInfo"},{},a,function(a,c){return a?b(a):void b(null,c.result.serverInfo)}),this},Kuzzle.prototype.now=function(a,b){return b||"function"!=typeof a||(b=a,a=null),this.callbackRequired("Kuzzle.now",b),this.query({controller:"read",action:"now"},{},a,function(a,c){return a?b(a):void b(null,c.result.now)}),this},Kuzzle.prototype.query=function(a,b,c,f){var g,h={action:a.action,controller:a.controller,metadata:this.metadata},j=this;if(this.isValid(),f||"function"!=typeof c||(f=c,c=null),c&&(c.metadata&&Object.keys(c.metadata).forEach(function(a){h.metadata[a]=c.metadata[a]}),c.queuable===!1&&"offline"===j.state))return j;b.metadata&&Object.keys(b.metadata).forEach(function(a){h.metadata[a]=b.metadata[a]});for(g in b)"metadata"!==g&&b.hasOwnProperty(g)&&(h[g]=b[g]);return h=j.addHeaders(h,this.headers),void 0!==j.jwtToken&&(h.headers=h.headers||{},h.headers.authorization="Bearer "+j.jwtToken),a.collection&&(h.collection=a.collection),a.index&&(h.index=a.index),h.requestId||(h.requestId=i.v4()),"connected"===j.state||c&&c.queuable===!1?e.call(this,h,f):(j.queuing||-1!==["initializing","connecting"].indexOf(j.state))&&(d.call(this,h,f),j.queueFilter?j.queueFilter(h)&&j.offlineQueue.push({ts:Date.now(),query:h,cb:f}):j.offlineQueue.push({ts:Date.now(),query:h,cb:f})),j},Kuzzle.prototype.removeAllListeners=function(a){var b=Object.keys(this.eventListeners),c=this;if(a){if(-1===b.indexOf(a))throw new Error("["+a+"] is not a known event. Known events: "+b.toString());this.eventListeners[a]=[]}else b.forEach(function(a){c.eventListeners[a]=[]})},Kuzzle.prototype.removeListener=function(a,b){var c=Object.keys(this.eventListeners),d=this;if(-1===c.indexOf(a))throw new Error("["+a+"] is not a known event. Known events: "+c.toString());this.eventListeners[a].forEach(function(c,e){c.id===b&&d.eventListeners[a].splice(e,1)})},Kuzzle.prototype.replayQueue=function(){return"offline"===this.state||this.autoReplay||(d.call(this),f.call(this)),this},Kuzzle.prototype.setDefaultIndex=function(a){if("string"!=typeof a)throw new Error("Invalid default index: ["+a+"] (an index name is expected)");if(0===a.length)throw new Error("Cannot set an empty index as the default index");return this.defaultIndex=a,this},Kuzzle.prototype.setHeaders=function(a,b){var c=this;if("object"!=typeof a||Array.isArray(a))throw new Error("Expected a content object, received a "+typeof a);return b?c.headers=a:Object.keys(a).forEach(function(b){c.headers[b]=a[b]}),c},Kuzzle.prototype.startQueuing=function(){return"offline"!==this.state||this.autoQueue||(this.queuing=!0),this},Kuzzle.prototype.stopQueuing=function(){return"offline"!==this.state||this.autoQueue||(this.queuing=!1),this}},{"./kuzzleDataCollection":3,"node-uuid":1,"socket.io-client":void 0}],3:[function(a,b,c){function d(a,b,c){if(!b||!c)throw new Error("The KuzzleDataCollection object constructor needs an index and a collection arguments");return Object.defineProperties(this,{collection:{value:c,enumerable:!0},index:{value:b,enumerable:!0},kuzzle:{value:a,enumerable:!0},headers:{value:JSON.parse(JSON.stringify(a.headers)),enumerable:!0,writable:!0}}),Object.defineProperty(this,"buildQueryArgs",{value:function(a,b){return{controller:a,action:b,collection:this.collection,index:this.index}}}),this.kuzzle.bluebird?this.kuzzle.bluebird.promisifyAll(this,{suffix:"Promise",filter:function(a,b,c,d){var e=["publishMessage","setHeaders","subscribe"];return d&&-1===e.indexOf(a)}}):this}var e=a("./kuzzleDocument"),f=a("./kuzzleDataMapping"),g=a("./kuzzleRoom");d.prototype.advancedSearch=function(a,b,c){var d,f=this;return c||"function"!=typeof b||(c=b,b=null),f.kuzzle.callbackRequired("KuzzleDataCollection.advancedSearch",c),d=f.kuzzle.addHeaders({body:a},this.headers),f.kuzzle.query(this.buildQueryArgs("read","search"),d,b,function(a,b){var d=[];return a?c(a):(b.result.hits.forEach(function(a){var b=new e(f,a._id,a._source);b.version=a._version,d.push(b)}),void c(null,{total:b.result.total,documents:d}))}),this},d.prototype.count=function(a,b,c){var d;return c||"function"!=typeof b||(c=b,b=null),this.kuzzle.callbackRequired("KuzzleDataCollection.count",c),d=this.kuzzle.addHeaders({body:a},this.headers),this.kuzzle.query(this.buildQueryArgs("read","count"),d,b,function(a,b){return a?c(a):void c(null,b.result.count)}),this},d.prototype.create=function(a,b){var c={};return b||"function"!=typeof a||(b=a,a=null),c=this.kuzzle.addHeaders(c,this.headers),this.kuzzle.query(this.buildQueryArgs("write","createCollection"),c,a,b),this},d.prototype.createDocument=function(a,b,c,d){var f=this,g={},h="create";return a&&"string"!=typeof a&&(d=c,c=b,b=a,a=null),d||"function"!=typeof c||(d=c,c=null),b instanceof e?g=b.toJSON():g.body=b,c&&(h=c.updateIfExist?"createOrUpdate":"create"),a&&(g._id=a),g.persist=!0,g=f.kuzzle.addHeaders(g,f.headers),d?f.kuzzle.query(this.buildQueryArgs("write",h),g,c,function(a,b){var c;return a?d(a):(c=new e(f,b.result._id,b.result._source),c.version=b.result._version,void d(null,c))}):f.kuzzle.query(this.buildQueryArgs("write",h),g,c),this},d.prototype["delete"]=function(a,b){var c={};return b||"function"!=typeof a||(b=a,a=null),c=this.kuzzle.addHeaders(c,this.headers),this.kuzzle.query(this.buildQueryArgs("admin","deleteCollection"),c,a,b),this},d.prototype.deleteDocument=function(a,b,c){var d,e={};return"string"==typeof a?(e._id=a,d="delete"):(e.body=a,d="deleteByQuery"),c||"function"!=typeof b||(c=b,b=null),e=this.kuzzle.addHeaders(e,this.headers),c?this.kuzzle.query(this.buildQueryArgs("write",d),e,b,function(a,b){return a?c(a):void("delete"===d?c(null,[b.result._id]):c(null,b.result.ids))}):this.kuzzle.query(this.buildQueryArgs("write",d),e,b),this},d.prototype.fetchDocument=function(a,b,c){var d={_id:a},f=this;return c||"function"!=typeof b||(c=b,b=null),f.kuzzle.callbackRequired("KuzzleDataCollection.fetch",c),d=f.kuzzle.addHeaders(d,this.headers),f.kuzzle.query(this.buildQueryArgs("read","get"),d,b,function(a,b){var d;return a?c(a):(d=new e(f,b.result._id,b.result._source),d.version=b.result._version,void c(null,d))}),this},d.prototype.fetchAllDocuments=function(a,b){return b||"function"!=typeof a||(b=a,a=null),this.kuzzle.callbackRequired("KuzzleDataCollection.fetchAll",b),this.advancedSearch({},a,b),this},d.prototype.getMapping=function(a,b){var c;return b||"function"!=typeof a||(b=a,a=null),this.kuzzle.callbackRequired("KuzzleDataCollection.getMapping",b),c=new f(this),c.refresh(a,b),this},d.prototype.publishMessage=function(a,b){var c={};return a instanceof e?c=a.toJSON():c.body=a,c=this.kuzzle.addHeaders(c,this.headers),this.kuzzle.query(this.buildQueryArgs("write","publish"),c,b),this},d.prototype.replaceDocument=function(a,b,c,d){var f=this,g={_id:a,body:b};return d||"function"!=typeof c||(d=c,c=null),g=f.kuzzle.addHeaders(g,this.headers),d?f.kuzzle.query(this.buildQueryArgs("write","createOrUpdate"),g,c,function(a,b){var c;return a?d(a):(c=new e(f,b.result._id,b.result._source),c.version=b.result._version,void d(null,c))}):f.kuzzle.query(this.buildQueryArgs("write","createOrUpdate"),g,c),this},d.prototype.subscribe=function(a,b,c){var d;return c||"function"!=typeof b||(c=b,b=null),this.kuzzle.callbackRequired("KuzzleDataCollection.subscribe",c),d=new g(this,b),d.renew(a,c)},d.prototype.truncate=function(a,b){var c={};return b||"function"!=typeof a||(b=a,a=null),c=this.kuzzle.addHeaders(c,this.headers),this.kuzzle.query(this.buildQueryArgs("admin","truncateCollection"),c,a,b),this},d.prototype.updateDocument=function(a,b,c,d){var f={_id:a,body:b},g=this;return d||"function"!=typeof c||(d=c,c=null),f=g.kuzzle.addHeaders(f,this.headers),d?g.kuzzle.query(this.buildQueryArgs("write","update"),f,c,function(a,b){var c;return a?d(a):(c=new e(g,b.result._id),void c.refresh(d))}):g.kuzzle.query(this.buildQueryArgs("write","update"),f,c),g},d.prototype.documentFactory=function(a,b){return new e(this,a,b)},d.prototype.roomFactory=function(a){return new g(this,a)},d.prototype.dataMappingFactory=function(a){return new f(this,a)},d.prototype.setHeaders=function(a,b){return this.kuzzle.setHeaders.call(this,a,b),this},b.exports=d},{"./kuzzleDataMapping":4,"./kuzzleDocument":5,"./kuzzleRoom":6}],4:[function(a,b,c){function d(a,b){return Object.defineProperties(this,{collection:{value:a,eunmerable:!0},kuzzle:{value:a.kuzzle,enumerable:!0},headers:{value:JSON.parse(JSON.stringify(a.headers)),enumerable:!0,writable:!0},mapping:{value:b||{},enumerable:!0,writable:!0}}),this.kuzzle.bluebird?this.kuzzle.bluebird.promisifyAll(this,{suffix:"Promise",filter:function(a,b,c,d){var e=["set","setHeaders"];return d&&-1===e.indexOf(a)}}):this}d.prototype.apply=function(a,b){var c=this,d=this.kuzzle.addHeaders({body:{properties:this.mapping}},this.headers);return b||"function"!=typeof a||(b=a,a=null),c.kuzzle.query(this.collection.buildQueryArgs("admin","putMapping"),d,a,function(d){return d?b?b(d):!1:void c.refresh(a,b)}),this},d.prototype.refresh=function(a,b){var c=this,d=this.kuzzle.addHeaders({},this.headers);return b||"function"!=typeof a||(b=a,a=null),this.kuzzle.query(this.collection.buildQueryArgs("admin","getMapping"),d,a,function(a,d){return a?b?b(a):!1:d.result[c.collection.index]?d.result[c.collection.index].mappings[c.collection.collection]?(c.mapping=d.result[c.collection.index].mappings[c.collection.collection].properties,void(b&&b(null,c))):b?b(new Error("No mapping found for collection "+c.collection.collection)):!1:b?b(new Error("No mapping found for index "+c.collection.index)):!1}),this},d.prototype.set=function(a,b){return this.mapping[a]=b,this},d.prototype.setHeaders=function(a,b){return this.kuzzle.setHeaders.call(this,a,b),this},b.exports=d},{}],5:[function(a,b,c){function d(a,b,c){return Object.defineProperties(this,{queue:{value:[],writable:!0},refreshing:{value:!1,writable:!0},collection:{value:a.collection,enumerable:!0},dataCollection:{value:a,enumerable:!0},kuzzle:{value:a.kuzzle,enumerable:!0},id:{value:void 0,enumerable:!0,writable:!0},content:{value:{},writable:!0,enumerable:!0},headers:{value:JSON.parse(JSON.stringify(a.headers)),enumerable:!0,writable:!0},version:{value:void 0,enumerable:!0,writable:!0}}),!c&&b&&"object"==typeof b&&(c=b,b=null),c&&(c._version&&(this.version=c._version,delete c._version),this.setContent(c,!0)),b&&Object.defineProperty(this,"id",{value:b,enumerable:!0}),this.kuzzle.bluebird?this.kuzzle.bluebird.promisifyAll(this,{suffix:"Promise",filter:function(a,b,c,d){var e=["delete","refresh","save"];return d&&-1!==e.indexOf(a)}}):this}function e(){for(var a;this.queue.length>0;)a=this.queue.shift(),this[a.action].apply(this,a.args)}d.prototype.toJSON=function(){var a={};return this.id&&(a._id=this.id),a.body=this.content,a._version=this.version,a=this.kuzzle.addHeaders(a,this.headers)},d.prototype.toString=function(){return JSON.stringify(this.toJSON())},d.prototype["delete"]=function(a,b){var c=this;if(b||"function"!=typeof a||(b=a,a=null),this.refreshing)return this.queue.push({action:"delete",args:[a,b]}),this;if(!this.id)throw new Error("KuzzleDocument.delete: cannot delete a document without a document ID");return b?this.kuzzle.query(this.dataCollection.buildQueryArgs("write","delete"),this.toJSON(),a,function(a){return a?b(a):void b(null,c)}):this.kuzzle.query(this.dataCollection.buildQueryArgs("write","delete"),this.toJSON(),a),this},d.prototype.refresh=function(a,b){var c=this;if(b||"function"!=typeof a||(b=a,a=null),this.refreshing)return this.queue.push({action:"refresh",args:[a,b]}),this;if(!c.id)throw new Error("KuzzleDocument.refresh: cannot retrieve a document if no ID has been provided");return c.refreshing=!0,c.kuzzle.query(c.dataCollection.buildQueryArgs("read","get"),{_id:c.id},a,function(a,d){return a?(c.refreshing=!1,c.queue=[],b?b(a):!1):(c.version=d.result._version,c.content=d.result._source,b&&b(null,c),c.refreshing=!1,void e.call(c))}),this},d.prototype.save=function(a,b){var c=this.toJSON(),d=this;return a&&void 0===b&&"function"==typeof a&&(b=a,a=null),d.refreshing?(d.queue.push({action:"save",args:[a,b]}),d):(c.persist=!0,d.kuzzle.query(this.dataCollection.buildQueryArgs("write","createOrUpdate"),c,a,function(a,c){return a?b?b(a):!1:(d.id=c.result._id,d.version=c.result._version,void(b&&b(null,d)))}),d)},d.prototype.publish=function(a){var b=this.toJSON();return this.refreshing?(this.queue.push({action:"publish",args:[a]}),this):(this.kuzzle.query(this.dataCollection.buildQueryArgs("write","publish"),b,a),this)},d.prototype.setContent=function(a,b){var c=this;return this.refreshing?(this.queue.push({action:"setContent",args:[a,b]}),this):(b?this.content=a:Object.keys(a).forEach(function(b){c.content[b]=a[b]}),this)},d.prototype.subscribe=function(a,b){var c;if(a&&!b&&"function"==typeof a&&(b=a,a=null),this.kuzzle.callbackRequired("KuzzleDocument.subscribe",b),!this.id)throw new Error("KuzzleDocument.subscribe: cannot subscribe to a document if no ID has been provided");return c={ids:{values:[this.id]}},this.dataCollection.subscribe(c,a,b)},d.prototype.setHeaders=function(a,b){return this.kuzzle.setHeaders.call(this,a,b),this},b.exports=d},{}],6:[function(a,b,c){function d(a,b){return Object.defineProperties(this,{callback:{value:null,writable:!0},channel:{value:null,writable:!0},id:{value:g.v4()},lastRenewal:{value:null,writable:!0},notifier:{value:null,writable:!0},queue:{value:[],writable:!0},renewalDelay:{value:500},scope:{value:b&&b.scope?b.scope:"all"},state:{value:b&&b.state?b.state:"done"},subscribing:{value:!1,writable:!0},users:{value:b&&b.users?b.users:"none"},collection:{value:a,enumerable:!0},kuzzle:{value:a.kuzzle,enumerable:!0},filters:{value:null,enumerable:!0,writable:!0},headers:{value:JSON.parse(JSON.stringify(a.headers)),enumerable:!0,writable:!0},metadata:{value:b&&b.metadata?b.metadata:{},enumerable:!0,writable:!0},roomId:{value:null,enumerable:!0,writable:!0},subscribeToSelf:{value:b&&"boolean"==typeof b.subscribeToSelf?b.subscribeToSelf:!0,enumerable:!0,writable:!0}}),this.kuzzle.bluebird?this.kuzzle.bluebird.promisifyAll(this,{suffix:"Promise",filter:function(a,b,c,d){var e=["count"];return d&&-1!==e.indexOf(a)}}):this}function e(a){return a.error?this.callback(a.error):void(this.kuzzle.requestHistory[a.requestId]?(this.subscribeToSelf&&this.callback(null,a),delete this.kuzzle.requestHistory[a.requestId]):this.callback(null,a))}function f(){for(var a;this.queue.length>0;)a=this.queue.shift(),this[a.action].apply(this,a.args)}var g=a("node-uuid");d.prototype.count=function(a){var b;return this.kuzzle.callbackRequired("KuzzleRoom.count",a),b=this.kuzzle.addHeaders({body:{roomId:this.roomId}},this.headers),this.subscribing?(this.queue.push({action:"count",args:[a]}),this):(this.kuzzle.query(this.collection.buildQueryArgs("subscribe","count"),b,function(b,c){return b?a(b):void a(null,c.result.count)}),this)},d.prototype.renew=function(a,b){var c=Date.now(),d={scope:this.scope,state:this.state,users:this.users},g=this;return!b&&a&&"function"==typeof a&&(b=a,a=null),g.lastRenewal&&c-g.lastRenewal<=g.renewalDelay?g:(g.lastRenewal=c,a&&(g.filters=a),"connected"!==g.kuzzle.state?(g.callback=b,g.kuzzle.subscriptions.pending[g.id]=g,g):g.subscribing?(g.queue.push({action:"renew",args:[a,b]}),g):(g.kuzzle.callbackRequired("KuzzleRoom.renew",b),g.unsubscribe(),g.roomId=null,g.subscribing=!0,g.callback=b,g.kuzzle.subscriptions.pending[g.id]=g,d.body=g.filters,d=g.kuzzle.addHeaders(d,this.headers),g.kuzzle.query(g.collection.buildQueryArgs("subscribe","on"),d,{metadata:g.metadata},function(a,b){if(delete g.kuzzle.subscriptions.pending[g.id],g.subscribing=!1,a)throw g.queue=[],new Error("Error during Kuzzle subscription: "+a.message);g.roomId=b.result.roomId,g.channel=b.result.channel,g.kuzzle.subscriptions[g.roomId]||(g.kuzzle.subscriptions[g.roomId]={}),g.kuzzle.subscriptions[g.roomId][g.id]=g,g.notifier=e.bind(g),g.kuzzle.socket.on(g.channel,g.notifier),f.call(g)}),g))},d.prototype.unsubscribe=function(){var a,b=this,c=b.roomId;return b.subscribing?(b.queue.push({action:"unsubscribe",args:[]}),b):(c&&(b.kuzzle.socket.off(b.channel,this.notifier),1===Object.keys(b.kuzzle.subscriptions[c]).length?(delete b.kuzzle.subscriptions[c],0===Object.keys(b.kuzzle.subscriptions.pending).length?b.kuzzle.query(b.collection.buildQueryArgs("subscribe","off"),{body:{roomId:c}}):a=setInterval(function(){0===Object.keys(b.kuzzle.subscriptions.pending).length&&(b.kuzzle.subscriptions[c]||b.kuzzle.query(b.collection.buildQueryArgs("subscribe","off"),{body:{roomId:c}}),clearInterval(a))},100)):delete b.kuzzle.subscriptions[c][b.id],b.roomId=null),b)},d.prototype.setHeaders=function(a,b){return this.kuzzle.setHeaders.call(this,a,b),this},b.exports=d},{"node-uuid":1}]},{},[2]); //# sourceMappingURL=kuzzle.min.map \ No newline at end of file diff --git a/dist/kuzzle.min.map b/dist/kuzzle.min.map index 630da917b..a1bbb6d48 100644 --- a/dist/kuzzle.min.map +++ b/dist/kuzzle.min.map @@ -1 +1 @@ -{"version":3,"sources":["kuzzle.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length",1,"module","_window","setupBrowser","_crypto","crypto","msCrypto","_rng","getRandomValues","_rnds8","Uint8Array","_whatwgRNG","_rnds","Array","_mathRNG","Math","random","console","warn","setupNode","_rb","randomBytes","_nodeRNG","parse","buf","offset","ii","toLowerCase","replace","oct","_hexToByte","unparse","bth","_byteToHex","v1","options","b","clockseq","_clockseq","msecs","Date","getTime","nsecs","_lastNSecs","dt","_lastMSecs","tl","tmh","node","_nodeId","v4","BufferClass","rnds","rng","_previousRoot","Buffer","toString","substr","_seedBytes","uuid","define","amd","noConflict","window",2,"cleanQueue","self","this","now","lastDocumentIndex","queueTTL","offlineQueue","forEach","query","index","ts","splice","queueMaxSize","emitRequest","request","cb","undefined","jwtToken","socket","once","requestId","response","error","message","eventListeners","jwtTokenExpired","listener","fn","emit","requestHistory","Object","keys","key","dequeue","shift","setTimeout","max","replayInterval","queuing","KuzzleDataCollection","Kuzzle","url","defineProperties","collections","value","writable","connectCB","connected","disconnected","reconnected","io","state","subscriptions","pending","autoReconnect","enumerable","defaultIndex","reconnectionDelay","autoQueue","autoReplay","autoResubscribe","headers","metadata","queueFilter","loginStrategy","loginCredentials","loginExpiresIn","indexOf","opt","hasOwnProperty","getOwnPropertyDescriptor","offlineMode","defineProperty","header","errorMessagePrefix","callback","connect","bluebird","promisifyAll","suffix","filter","name","func","target","passes","whitelist","prototype","reconnection","forceNew","roomId","subscriptionId","subscription","renew","login","on","disconnect","strategy","credentials","expiresIn","controller","action","body","jwt","logout","addListener","event","listenerId","knownEvents","listenerType","isValid","push","id","getAllStatistics","callbackRequired","err","res","result","hits","getStatistics","timestamp","queryCB","arguments","startTime","dataCollectionFactory","collection","flushQueue","listCollections","collectionType","args","slice","arg","type","listIndexes","indexes","close","getServerInfo","serverInfo","queryArgs","attr","object","meta","queuable","addHeaders","authorization","removeAllListeners","eventName","removeListener","replayQueue","setDefaultIndex","setHeaders","content","isArray","startQueuing","stopQueuing","./kuzzleDataCollection","node-uuid","socket.io-client",3,"kuzzle","JSON","stringify","blacklist","KuzzleDocument","KuzzleDataMapping","KuzzleRoom","advancedSearch","filters","buildQueryArgs","documents","doc","newDocument","_id","_source","version","_version","total","count","create","data","createDocument","document","toJSON","updateIfExist","persist","deleteDocument","ids","fetchDocument","documentId","fetchAllDocuments","getMapping","kuzzleMapping","refresh","publishMessage","replaceDocument","subscribe","room","truncate","updateDocument","documentFactory","roomFactory","dataMappingFactory","mapping","./kuzzleDataMapping","./kuzzleDocument","./kuzzleRoom",4,"kuzzleDataCollection","eunmerable","apply","properties","mappings","set","field",5,"queue","refreshing","dataCollection","setContent","element","save","publish","values",6,"channel","notifier","scope","subscribing","users","subscribeToSelf","notificationCallback","subscribeQuery","unsubscribe","bind","interval","off","setInterval","clearInterval"],"mappings":"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","file":"kuzzle.min.js"} \ No newline at end of file +{"version":3,"sources":["kuzzle.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length",1,"module","_window","setupBrowser","_crypto","crypto","msCrypto","_rng","getRandomValues","_rnds8","Uint8Array","_whatwgRNG","_rnds","Array","_mathRNG","Math","random","console","warn","setupNode","_rb","randomBytes","_nodeRNG","parse","buf","offset","ii","toLowerCase","replace","oct","_hexToByte","unparse","bth","_byteToHex","v1","options","b","clockseq","_clockseq","msecs","Date","getTime","nsecs","_lastNSecs","dt","_lastMSecs","tl","tmh","node","_nodeId","v4","BufferClass","rnds","rng","_previousRoot","Buffer","toString","substr","_seedBytes","uuid","define","amd","noConflict","window",2,"cleanQueue","self","this","now","lastDocumentIndex","queueTTL","offlineQueue","forEach","query","index","ts","splice","queueMaxSize","emitRequest","request","cb","undefined","jwtToken","socket","once","requestId","response","error","message","emitEvent","emit","requestHistory","Object","keys","key","dequeue","shift","setTimeout","max","replayInterval","queuing","renewAllSubscriptions","subscriptions","roomId","subscriptionId","subscription","renew","callback","event","args","prototype","slice","arguments","eventListeners","listener","fn","apply","KuzzleDataCollection","Kuzzle","url","defineProperties","collections","value","writable","connectCB","connected","disconnected","reconnected","jwtTokenExpired","io","state","pending","autoReconnect","enumerable","defaultIndex","reconnectionDelay","autoQueue","autoReplay","autoResubscribe","headers","metadata","queueFilter","opt","hasOwnProperty","getOwnPropertyDescriptor","offlineMode","defineProperty","header","errorMessagePrefix","connect","bluebird","promisifyAll","suffix","filter","name","func","target","passes","whitelist","indexOf","reconnection","forceNew","on","disconnect","login","strategy","credentials","expiresIn","controller","action","body","jwt","logout","addListener","listenerId","knownEvents","listenerType","isValid","push","id","getAllStatistics","callbackRequired","err","res","result","hits","getStatistics","timestamp","queryCB","startTime","dataCollectionFactory","collection","flushQueue","listCollections","collectionType","arg","type","listIndexes","indexes","close","getServerInfo","serverInfo","queryArgs","attr","object","meta","queuable","addHeaders","authorization","removeAllListeners","eventName","removeListener","replayQueue","setDefaultIndex","setHeaders","content","isArray","startQueuing","stopQueuing","./kuzzleDataCollection","node-uuid","socket.io-client",3,"kuzzle","JSON","stringify","blacklist","KuzzleDocument","KuzzleDataMapping","KuzzleRoom","advancedSearch","filters","buildQueryArgs","documents","doc","newDocument","_id","_source","version","_version","total","count","create","data","createDocument","document","toJSON","updateIfExist","persist","deleteDocument","ids","fetchDocument","documentId","fetchAllDocuments","getMapping","kuzzleMapping","refresh","publishMessage","replaceDocument","subscribe","room","truncate","updateDocument","documentFactory","roomFactory","dataMappingFactory","mapping","./kuzzleDataMapping","./kuzzleDocument","./kuzzleRoom",4,"kuzzleDataCollection","eunmerable","properties","mappings","set","field",5,"queue","refreshing","dataCollection","setContent","element","save","publish","values",6,"channel","lastRenewal","notifier","renewalDelay","scope","subscribing","users","subscribeToSelf","notificationCallback","subscribeQuery","unsubscribe","bind","interval","off","setInterval","clearInterval"],"mappings":"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","file":"kuzzle.min.js"} \ No newline at end of file diff --git a/package.json b/package.json index de893bd36..f01e14606 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kuzzle-sdk", - "version": "1.3.8", + "version": "1.3.9", "description": "Official Javascript SDK for Kuzzle", "author": "The Kuzzle Team ", "repository": { diff --git a/src/kuzzle.js b/src/kuzzle.js index 2827e8cc3..22e4fe16d 100644 --- a/src/kuzzle.js +++ b/src/kuzzle.js @@ -169,21 +169,6 @@ module.exports = Kuzzle = function (url, options, cb) { enumerable: true, writable: true }, - loginStrategy: { - value: (options && typeof options.loginStrategy === 'string') ? options.loginStrategy : undefined, - enumerable: true, - writable: false - }, - loginCredentials: { - value: (options && typeof options.loginCredentials === 'object') ? options.loginCredentials : undefined, - enumerable: true, - writable: false - }, - loginExpiresIn: { - value: (options && ['number', 'string'].indexOf(typeof options.loginExpiresIn) !== -1) ? options.loginExpiresIn : undefined, - enumerable: true, - writable: false - }, jwtToken: { value: undefined, enumerable: true, @@ -289,44 +274,18 @@ Kuzzle.prototype.connect = function () { self.socket.once('connect', function () { self.state = 'connected'; - - Object.keys(self.subscriptions).forEach(function (roomId) { - Object.keys(self.subscriptions[roomId]).forEach(function (subscriptionId) { - var subscription = self.subscriptions[roomId][subscriptionId]; - subscription.renew(subscription.callback); - }); - }); - + renewAllSubscriptions.call(self); dequeue.call(self); + emitEvent.call(self, 'connected'); - if (self.loginStrategy) { - self.login(self.loginStrategy, self.loginCredentials, self.loginExpiresIn, function(error) { - self.eventListeners.connected.forEach(function (listener) { - listener.fn(error); - }); - - if (self.connectCB) { - self.connectCB(error, self); - } - }); - } - else { - self.eventListeners.connected.forEach(function (listener) { - listener.fn(); - }); - - if (self.connectCB) { - self.connectCB(null, self); - } + if (self.connectCB) { + self.connectCB(null, self); } }); self.socket.on('connect_error', function (error) { self.state = 'error'; - - self.eventListeners.error.forEach(function (listener) { - listener.fn(); - }); + emitEvent.call(self, 'error'); if (self.connectCB) { self.connectCB(error); @@ -344,9 +303,7 @@ Kuzzle.prototype.connect = function () { self.queuing = true; } - self.eventListeners.disconnected.forEach(function (listener) { - listener.fn(); - }); + emitEvent.call(self, 'disconnected'); }); self.socket.on('reconnect', function () { @@ -354,13 +311,7 @@ Kuzzle.prototype.connect = function () { // renew subscriptions if (self.autoResubscribe) { - Object.keys(self.subscriptions).forEach(function (roomId) { - Object.keys(self.subscriptions[roomId]).forEach(function (subscriptionId) { - var subscription = self.subscriptions[roomId][subscriptionId]; - - subscription.renew(subscription.callback); - }); - }); + renewAllSubscriptions.call(self); } // replay queued requests @@ -370,9 +321,7 @@ Kuzzle.prototype.connect = function () { } // alert listeners - self.eventListeners.reconnected.forEach(function (listener) { - listener.fn(); - }); + emitEvent.call(self, 'reconnected'); }); return this; @@ -402,6 +351,7 @@ Kuzzle.prototype.login = function (strategy, credentials, expiresIn, cb) { this.query({controller: 'auth', action: 'login'}, {body: request}, {}, function(error, response) { if (error === null) { self.jwtToken = response.jwt; + renewAllSubscriptions.call(self); if (typeof cb === 'function') { cb(null, self); @@ -484,9 +434,7 @@ function emitRequest (request, cb) { if (self.jwtToken !== undefined || cb) { self.socket.once(request.requestId, function (response) { if (response.error && response.error.message === 'Token expired') { - self.eventListeners.jwtTokenExpired.forEach(function (listener) { - listener.fn(request, cb); - }); + emitEvent.call(self, 'jwtTokenExpired', request, cb); } if (cb) { @@ -526,6 +474,36 @@ function dequeue () { } } +/** + * Renew all registered subscriptions. Triggered either by a successful connection/reconnection or by a + * successful login attempt + */ +function renewAllSubscriptions() { + var self = this; + + Object.keys(self.subscriptions).forEach(function (roomId) { + Object.keys(self.subscriptions[roomId]).forEach(function (subscriptionId) { + var subscription = self.subscriptions[roomId][subscriptionId]; + subscription.renew(subscription.callback); + }); + }); +} + +/** + * Emits an event to all registered listeners + * + * @param {string} event - name of the target global event + */ +function emitEvent(event) { + var + self = this, + args = Array.prototype.slice.call(arguments, 1); + + self.eventListeners[event].forEach(function (listener) { + listener.fn.apply(self, args); + }); +} + /** * Adds a listener to a Kuzzle global event. When an event is fired, listeners are called in the order of their * insertion. @@ -1051,3 +1029,4 @@ Kuzzle.prototype.stopQueuing = function () { return this; }; + diff --git a/src/kuzzleRoom.js b/src/kuzzleRoom.js index a20e1d031..528434978 100644 --- a/src/kuzzleRoom.js +++ b/src/kuzzleRoom.js @@ -36,6 +36,10 @@ function KuzzleRoom(kuzzleDataCollection, options) { id: { value: uuid.v4() }, + lastRenewal: { + value: null, + writable: true + }, notifier: { value: null, writable: true @@ -44,6 +48,10 @@ function KuzzleRoom(kuzzleDataCollection, options) { value: [], writable: true }, + // Delay before allowing a subscription renewal + renewalDelay: { + value: 500 + }, scope: { value: options && options.scope ? options.scope : 'all' }, @@ -143,6 +151,7 @@ KuzzleRoom.prototype.count = function (cb) { */ KuzzleRoom.prototype.renew = function (filters, cb) { var + now = Date.now(), subscribeQuery = { scope: this.scope, state: this.state, @@ -155,37 +164,46 @@ KuzzleRoom.prototype.renew = function (filters, cb) { filters = null; } + /* + Skip subscription renewal if another one was performed a moment before + */ + if (self.lastRenewal && (now - self.lastRenewal) <= self.renewalDelay) { + return self; + } + + self.lastRenewal = now; + if (filters) { - this.filters = filters; + self.filters = filters; } /* if not yet connected, register itself to the subscriptions list and wait for the main Kuzzle object to renew once online */ - if (this.kuzzle.state !== 'connected') { - this.callback = cb; - this.kuzzle.subscriptions.pending[self.id] = self; - return this; + if (self.kuzzle.state !== 'connected') { + self.callback = cb; + self.kuzzle.subscriptions.pending[self.id] = self; + return self; } - if (this.subscribing) { - this.queue.push({action: 'renew', args: [filters, cb]}); - return this; + if (self.subscribing) { + self.queue.push({action: 'renew', args: [filters, cb]}); + return self; } - this.kuzzle.callbackRequired('KuzzleRoom.renew', cb); + self.kuzzle.callbackRequired('KuzzleRoom.renew', cb); - this.unsubscribe(); - this.roomId = null; - this.subscribing = true; - this.callback = cb; - this.kuzzle.subscriptions.pending[self.id] = self; + self.unsubscribe(); + self.roomId = null; + self.subscribing = true; + self.callback = cb; + self.kuzzle.subscriptions.pending[self.id] = self; - subscribeQuery.body = this.filters; - subscribeQuery = this.kuzzle.addHeaders(subscribeQuery, this.headers); + subscribeQuery.body = self.filters; + subscribeQuery = self.kuzzle.addHeaders(subscribeQuery, this.headers); - self.kuzzle.query(this.collection.buildQueryArgs('subscribe', 'on'), subscribeQuery, {metadata: this.metadata}, function (error, response) { + self.kuzzle.query(self.collection.buildQueryArgs('subscribe', 'on'), subscribeQuery, {metadata: self.metadata}, function (error, response) { delete self.kuzzle.subscriptions.pending[self.id]; self.subscribing = false; @@ -209,7 +227,7 @@ KuzzleRoom.prototype.renew = function (filters, cb) { dequeue.call(self); }); - return this; + return self; }; /** diff --git a/test/kuzzle/constructor.test.js b/test/kuzzle/constructor.test.js index 8dffd295a..f4595fc4c 100644 --- a/test/kuzzle/constructor.test.js +++ b/test/kuzzle/constructor.test.js @@ -74,10 +74,6 @@ describe('Kuzzle constructor', () => { should(kuzzle).have.propertyWithDescriptor('metadata', { enumerable: true, writable: true, configurable: false }); should(kuzzle).have.propertyWithDescriptor('replayInterval', { enumerable: true, writable: true, configurable: false }); should(kuzzle).have.propertyWithDescriptor('reconnectionDelay', { enumerable: true, writable: false, configurable: false }); - - should(kuzzle).have.propertyWithDescriptor('loginStrategy', { enumerable: true, writable: false, configurable: false }); - should(kuzzle).have.propertyWithDescriptor('loginCredentials', { enumerable: true, writable: false, configurable: false }); - should(kuzzle).have.propertyWithDescriptor('loginExpiresIn', { enumerable: true, writable: false, configurable: false }); should(kuzzle).have.propertyWithDescriptor('jwtToken', { enumerable: true, writable: true, configurable: false }); }); @@ -110,10 +106,7 @@ describe('Kuzzle constructor', () => { metadata: {foo: ['bar', 'baz', 'qux'], bar: 'foo'}, replayInterval: 99999, reconnectionDelay: 666, - defaultIndex: 'foobar', - loginStrategy: 'some strategy', - loginCredentials: { user: 'foo', password: 'bar'}, - loginExpiresIn: 777 + defaultIndex: 'foobar' }, kuzzle = new Kuzzle('nowhere', options); @@ -128,9 +121,6 @@ describe('Kuzzle constructor', () => { should(kuzzle.metadata).be.an.Object().and.match(options.metadata); should(kuzzle.replayInterval).be.exactly(options.replayInterval); should(kuzzle.reconnectionDelay).be.exactly(options.reconnectionDelay); - should(kuzzle.loginStrategy).be.exactly(options.loginStrategy); - should(kuzzle.loginCredentials).be.exactly(options.loginCredentials); - should(kuzzle.loginExpiresIn).be.exactly(options.loginExpiresIn); }); it('should handle the offlineMode option properly', () => { @@ -642,50 +632,6 @@ describe('Kuzzle constructor', () => { Kuzzle = proxyquire(kuzzleSource, {'socket.io-client' : iostub}); }); - it('should login after a connection when loginCredentials & loginStrategy are set', function(done) { - Kuzzle = proxyquire(kuzzleSource, { - 'socket.io-client': function () { - var emitter = new EventEmitter; - - /* - since we're stubbing the socket.io socket object, - we need a stubbed 'close' function to make kuzzle.logout() work - */ - emitter.close = function () { - return false; - }; - process.nextTick(() => emitter.emit('connect')); - return emitter; - } - }); - - var - kuzzle = new Kuzzle('nowhere', { - connect: 'manual', - loginStrategy: 'local', - loginCredentials: { - username: 'foo', - password: 'bar' - } - }); - - this.timeout(200); - - kuzzle.login = loginStub; - - kuzzle.connect(); - - setTimeout(() => { - try { - should(loginCalled).be.exactly(true); - done(); - } - catch (e) { - done(e); - } - }, 10); - }); - it('should call the provided callback on a connection & login success', function (done) { var kuzzle; this.timeout(150); diff --git a/test/kuzzle/emitEvent.test.js b/test/kuzzle/emitEvent.test.js new file mode 100644 index 000000000..70b9dd554 --- /dev/null +++ b/test/kuzzle/emitEvent.test.js @@ -0,0 +1,63 @@ +var + should = require('should'), + rewire = require('rewire'), + Kuzzle = rewire('../../src/kuzzle'); + + +describe('Event emitter', () => { + var + emitEvent; + + before(function () { + emitEvent = Kuzzle.__get__('emitEvent'); + }); + + it('should call all added listeners for a given event', function () { + var + listenersCalled = 0, + listener = function () { + listenersCalled++; + }, + context = { + eventListeners: { + foo: [ + {fn: listener}, + {fn: listener}, + {fn: listener} + ] + } + }; + + emitEvent.call(context, 'foo'); + should(listenersCalled).be.eql(3); + }); + + it('should allow providing any number of arguments', function () { + var + argsCount = 0, + listener = function () { + argsCount = arguments.length; + }, + context = { + eventListeners: { + foo: [ + {fn: listener} + ] + } + }; + + emitEvent.call(context, 'foo'); + should(argsCount).be.eql(0); + + emitEvent.call(context, 'foo', 'bar'); + should(argsCount).be.eql(1); + + argsCount = 0; + emitEvent.call(context, 'foo', 'bar', ['foo', 'bar']); + should(argsCount).be.eql(2); + + argsCount = 0; + emitEvent.call(context, 'foo', {foo: 'bar'}, 'bar', ['foo', 'bar']); + should(argsCount).be.eql(3); + }); +}); \ No newline at end of file diff --git a/test/kuzzleRoom/methods.test.js b/test/kuzzleRoom/methods.test.js index 779668937..656b1462b 100644 --- a/test/kuzzleRoom/methods.test.js +++ b/test/kuzzleRoom/methods.test.js @@ -199,6 +199,25 @@ describe('KuzzleRoom methods', function () { done(); }, 10); }); + + it('should not renew subscription if another renewal was performed before the allowed delay', function (done) { + var + renewals = 0, + before = Date.now(), + after; + + kuzzle.query = function () { renewals++; arguments[3](null, result); } + room.renew({}, function () {}); + after = Date.now(); + room.renew({}, function () {}); + room.renew({}, function () {}); + + setTimeout(() => { + should(renewals).be.eql(1); + should(room.lastRenewal).be.within(before, after); + done(); + }, 20); + }); }); describe('#setHeaders', function () {