Skip to content

Commit e0e8a2a

Browse files
committed
Merge remote-tracking branch 'origin/master' into KUZ-378-whoami
2 parents ab48b00 + 6a40485 commit e0e8a2a

File tree

12 files changed

+219
-121
lines changed

12 files changed

+219
-121
lines changed

.travis.yml

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,7 @@ before_install: npm install -g grunt-cli
1616
install: npm install
1717

1818
after_success:
19-
- echo "Push generated dist folder"
20-
- git config --global user.email "[email protected]"
21-
- git config --global user.name "Travis CI"
22-
- git clone --quiet --branch=${TRAVIS_BRANCH} https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG} travis-build
23-
- cd travis-build
24-
- npm install
25-
- grunt
26-
- git add dist/
27-
- git commit -am "Travis CI - [ci skip] - automatic dist folder"
28-
- git push origin ${TRAVIS_BRANCH}
19+
- chmod 755 ${TRAVIS_BUILD_DIR}/deploy.sh && sh -c "${TRAVIS_BUILD_DIR}/deploy.sh"
2920

3021
env:
3122
global:

deploy.sh

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#! /bin/bash
2+
3+
if [ "${TRAVIS_BRANCH}" = "master" -a "${TRAVIS_PULL_REQUEST}" = "false" ]
4+
then
5+
echo "Push generated dist folder"
6+
git config --global user.email "[email protected]"
7+
git config --global user.name "Travis CI"
8+
git clone --quiet --branch=${TRAVIS_BRANCH} https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG} travis-build
9+
cd travis-build
10+
ln -s ${TRAVIS_BUILD_DIR}/node_modules
11+
grunt
12+
git add dist/
13+
git commit -am "Travis CI - [ci skip] - automatic dist folder"
14+
git push origin ${TRAVIS_BRANCH}
15+
fi
16+
17+
exit 0

dist/kuzzle.js

Lines changed: 52 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -320,13 +320,16 @@ module.exports = Kuzzle = function (url, options, cb) {
320320
},
321321
eventListeners: {
322322
value: {
323-
connected: [],
324-
error: [],
325-
disconnected: [],
326-
reconnected: [],
327-
jwtTokenExpired: []
323+
connected: {lastEmitted: null, listeners: []},
324+
error: {lastEmitted: null, listeners: []},
325+
disconnected: {lastEmitted: null, listeners: []},
326+
reconnected: {lastEmitted: null, listeners: []},
327+
jwtTokenExpired: {lastEmitted: null, listeners: []}
328328
}
329329
},
330+
eventTimeout: {
331+
value: 200
332+
},
330333
io: {
331334
value: null,
332335
writable: true
@@ -503,6 +506,28 @@ module.exports = Kuzzle = function (url, options, cb) {
503506
}
504507
});
505508

509+
/*
510+
* Emit an event to all registered listeners
511+
* An event cannot be emitted multiple times before a timeout has been reached.
512+
*/
513+
Object.defineProperty(this, 'emitEvent', {
514+
value: function emitEvent(event) {
515+
var
516+
now = Date.now(),
517+
args = Array.prototype.slice.call(arguments, 1);
518+
519+
if (this.eventListeners[event].lastEmitted && this.eventListeners[event].lastEmitted >= now - this.eventTimeout) {
520+
return false;
521+
}
522+
523+
this.eventListeners[event].listeners.forEach(function (listener) {
524+
listener.fn.apply(this, args);
525+
});
526+
527+
this.eventListeners[event].lastEmitted = now;
528+
}
529+
});
530+
506531

507532
if (!options || !options.connect || options.connect === 'auto') {
508533
this.connect();
@@ -514,7 +539,9 @@ module.exports = Kuzzle = function (url, options, cb) {
514539
return this.bluebird.promisifyAll(this, {
515540
suffix: 'Promise',
516541
filter: function (name, func, target, passes) {
517-
var whitelist = ['getAllStatistics', 'getServerInfo', 'getStatistics', 'listCollections', 'listIndexes', 'login', 'logout', 'now', 'query'];
542+
var whitelist = ['getAllStatistics', 'getServerInfo', 'getStatistics',
543+
'listCollections', 'listIndexes', 'login', 'logout', 'now', 'query',
544+
'checkToken'];
518545

519546
return passes && whitelist.indexOf(name) !== -1;
520547
}
@@ -551,7 +578,7 @@ Kuzzle.prototype.connect = function () {
551578
self.state = 'connected';
552579
renewAllSubscriptions.call(self);
553580
dequeue.call(self);
554-
emitEvent.call(self, 'connected');
581+
self.emitEvent('connected');
555582

556583
if (self.connectCB) {
557584
self.connectCB(null, self);
@@ -560,7 +587,7 @@ Kuzzle.prototype.connect = function () {
560587

561588
self.socket.on('connect_error', function (error) {
562589
self.state = 'error';
563-
emitEvent.call(self, 'error');
590+
self.emitEvent('error');
564591

565592
if (self.connectCB) {
566593
self.connectCB(error);
@@ -578,7 +605,7 @@ Kuzzle.prototype.connect = function () {
578605
self.queuing = true;
579606
}
580607

581-
emitEvent.call(self, 'disconnected');
608+
self.emitEvent('disconnected');
582609
});
583610

584611
self.socket.on('reconnect', function () {
@@ -596,7 +623,7 @@ Kuzzle.prototype.connect = function () {
596623
}
597624

598625
// alert listeners
599-
emitEvent.call(self, 'reconnected');
626+
self.emitEvent('reconnected');
600627
});
601628

602629
return this;
@@ -719,9 +746,7 @@ Kuzzle.prototype.checkToken = function (token, callback) {
719746
}
720747
};
721748

722-
if (typeof callback !== 'function') {
723-
throw new Error('The provided callback is not a function');
724-
}
749+
this.callbackRequired('Kuzzle.checkToken', callback);
725750

726751
this.query({controller: 'auth', action: 'checkToken'}, request, {}, callback);
727752

@@ -768,7 +793,8 @@ function emitRequest (request, cb) {
768793
if (self.jwtToken !== undefined || cb) {
769794
self.socket.once(request.requestId, function (response) {
770795
if (response.error && response.error.message === 'Token expired') {
771-
emitEvent.call(self, 'jwtTokenExpired', request, cb);
796+
self.jwtToken = undefined;
797+
self.emitEvent('jwtTokenExpired', request, cb);
772798
}
773799

774800
if (cb) {
@@ -823,21 +849,6 @@ function renewAllSubscriptions() {
823849
});
824850
}
825851

826-
/**
827-
* Emits an event to all registered listeners
828-
*
829-
* @param {string} event - name of the target global event
830-
*/
831-
function emitEvent(event) {
832-
var
833-
self = this,
834-
args = Array.prototype.slice.call(arguments, 1);
835-
836-
self.eventListeners[event].forEach(function (listener) {
837-
listener.fn.apply(self, args);
838-
});
839-
}
840-
841852
/**
842853
* Adds a listener to a Kuzzle global event. When an event is fired, listeners are called in the order of their
843854
* insertion.
@@ -865,7 +876,7 @@ Kuzzle.prototype.addListener = function(event, listener) {
865876
}
866877

867878
listenerId = uuid.v1();
868-
this.eventListeners[event].push({id: listenerId, fn: listener});
879+
this.eventListeners[event].listeners.push({id: listenerId, fn: listener});
869880
return listenerId;
870881
};
871882

@@ -1252,10 +1263,10 @@ Kuzzle.prototype.removeAllListeners = function (event) {
12521263
throw new Error('[' + event + '] is not a known event. Known events: ' + knownEvents.toString());
12531264
}
12541265

1255-
this.eventListeners[event] = [];
1266+
this.eventListeners[event].listeners = [];
12561267
} else {
12571268
knownEvents.forEach(function (eventName) {
1258-
self.eventListeners[eventName] = [];
1269+
self.eventListeners[eventName].listeners = [];
12591270
});
12601271
}
12611272
};
@@ -1275,9 +1286,9 @@ Kuzzle.prototype.removeListener = function (event, listenerId) {
12751286
throw new Error('[' + event + '] is not a known event. Known events: ' + knownEvents.toString());
12761287
}
12771288

1278-
this.eventListeners[event].forEach(function (listener, index) {
1289+
this.eventListeners[event].listeners.forEach(function (listener, index) {
12791290
if (listener.id === listenerId) {
1280-
self.eventListeners[event].splice(index, 1);
1291+
self.eventListeners[event].listeners.splice(index, 1);
12811292
}
12821293
});
12831294
};
@@ -2528,7 +2539,8 @@ function dequeue () {
25282539
module.exports = KuzzleDocument;
25292540

25302541
},{}],6:[function(require,module,exports){
2531-
var uuid = require('node-uuid');
2542+
var
2543+
uuid = require('node-uuid');
25322544

25332545
/**
25342546
* This is a global callback pattern, called by all asynchronous functions of the Kuzzle object.
@@ -2834,6 +2846,11 @@ function notificationCallback (data) {
28342846
return this.callback(data.error);
28352847
}
28362848

2849+
if (data.action === 'jwtTokenExpired') {
2850+
this.kuzzle.jwtToken = undefined;
2851+
return this.kuzzle.emitEvent('jwtTokenExpired');
2852+
}
2853+
28372854
if (this.kuzzle.requestHistory[data.requestId]) {
28382855
if (this.subscribeToSelf) {
28392856
this.callback(null, data);

dist/kuzzle.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/kuzzle.min.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "kuzzle-sdk",
3-
"version": "1.4.0",
3+
"version": "1.4.1",
44
"description": "Official Javascript SDK for Kuzzle",
55
"author": "The Kuzzle Team <[email protected]>",
66
"repository": {

src/kuzzle.js

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,16 @@ module.exports = Kuzzle = function (url, options, cb) {
4545
},
4646
eventListeners: {
4747
value: {
48-
connected: [],
49-
error: [],
50-
disconnected: [],
51-
reconnected: [],
52-
jwtTokenExpired: []
48+
connected: {lastEmitted: null, listeners: []},
49+
error: {lastEmitted: null, listeners: []},
50+
disconnected: {lastEmitted: null, listeners: []},
51+
reconnected: {lastEmitted: null, listeners: []},
52+
jwtTokenExpired: {lastEmitted: null, listeners: []}
5353
}
5454
},
55+
eventTimeout: {
56+
value: 200
57+
},
5558
io: {
5659
value: null,
5760
writable: true
@@ -228,6 +231,28 @@ module.exports = Kuzzle = function (url, options, cb) {
228231
}
229232
});
230233

234+
/*
235+
* Emit an event to all registered listeners
236+
* An event cannot be emitted multiple times before a timeout has been reached.
237+
*/
238+
Object.defineProperty(this, 'emitEvent', {
239+
value: function emitEvent(event) {
240+
var
241+
now = Date.now(),
242+
args = Array.prototype.slice.call(arguments, 1);
243+
244+
if (this.eventListeners[event].lastEmitted && this.eventListeners[event].lastEmitted >= now - this.eventTimeout) {
245+
return false;
246+
}
247+
248+
this.eventListeners[event].listeners.forEach(function (listener) {
249+
listener.fn.apply(this, args);
250+
});
251+
252+
this.eventListeners[event].lastEmitted = now;
253+
}
254+
});
255+
231256

232257
if (!options || !options.connect || options.connect === 'auto') {
233258
this.connect();
@@ -278,7 +303,7 @@ Kuzzle.prototype.connect = function () {
278303
self.state = 'connected';
279304
renewAllSubscriptions.call(self);
280305
dequeue.call(self);
281-
emitEvent.call(self, 'connected');
306+
self.emitEvent('connected');
282307

283308
if (self.connectCB) {
284309
self.connectCB(null, self);
@@ -287,7 +312,7 @@ Kuzzle.prototype.connect = function () {
287312

288313
self.socket.on('connect_error', function (error) {
289314
self.state = 'error';
290-
emitEvent.call(self, 'error');
315+
self.emitEvent('error');
291316

292317
if (self.connectCB) {
293318
self.connectCB(error);
@@ -305,7 +330,7 @@ Kuzzle.prototype.connect = function () {
305330
self.queuing = true;
306331
}
307332

308-
emitEvent.call(self, 'disconnected');
333+
self.emitEvent('disconnected');
309334
});
310335

311336
self.socket.on('reconnect', function () {
@@ -323,7 +348,7 @@ Kuzzle.prototype.connect = function () {
323348
}
324349

325350
// alert listeners
326-
emitEvent.call(self, 'reconnected');
351+
self.emitEvent('reconnected');
327352
});
328353

329354
return this;
@@ -510,7 +535,8 @@ function emitRequest (request, cb) {
510535
if (self.jwtToken !== undefined || cb) {
511536
self.socket.once(request.requestId, function (response) {
512537
if (response.error && response.error.message === 'Token expired') {
513-
emitEvent.call(self, 'jwtTokenExpired', request, cb);
538+
self.jwtToken = undefined;
539+
self.emitEvent('jwtTokenExpired', request, cb);
514540
}
515541

516542
if (cb) {
@@ -565,21 +591,6 @@ function renewAllSubscriptions() {
565591
});
566592
}
567593

568-
/**
569-
* Emits an event to all registered listeners
570-
*
571-
* @param {string} event - name of the target global event
572-
*/
573-
function emitEvent(event) {
574-
var
575-
self = this,
576-
args = Array.prototype.slice.call(arguments, 1);
577-
578-
self.eventListeners[event].forEach(function (listener) {
579-
listener.fn.apply(self, args);
580-
});
581-
}
582-
583594
/**
584595
* Adds a listener to a Kuzzle global event. When an event is fired, listeners are called in the order of their
585596
* insertion.
@@ -607,7 +618,7 @@ Kuzzle.prototype.addListener = function(event, listener) {
607618
}
608619

609620
listenerId = uuid.v1();
610-
this.eventListeners[event].push({id: listenerId, fn: listener});
621+
this.eventListeners[event].listeners.push({id: listenerId, fn: listener});
611622
return listenerId;
612623
};
613624

@@ -994,10 +1005,10 @@ Kuzzle.prototype.removeAllListeners = function (event) {
9941005
throw new Error('[' + event + '] is not a known event. Known events: ' + knownEvents.toString());
9951006
}
9961007

997-
this.eventListeners[event] = [];
1008+
this.eventListeners[event].listeners = [];
9981009
} else {
9991010
knownEvents.forEach(function (eventName) {
1000-
self.eventListeners[eventName] = [];
1011+
self.eventListeners[eventName].listeners = [];
10011012
});
10021013
}
10031014
};
@@ -1017,9 +1028,9 @@ Kuzzle.prototype.removeListener = function (event, listenerId) {
10171028
throw new Error('[' + event + '] is not a known event. Known events: ' + knownEvents.toString());
10181029
}
10191030

1020-
this.eventListeners[event].forEach(function (listener, index) {
1031+
this.eventListeners[event].listeners.forEach(function (listener, index) {
10211032
if (listener.id === listenerId) {
1022-
self.eventListeners[event].splice(index, 1);
1033+
self.eventListeners[event].listeners.splice(index, 1);
10231034
}
10241035
});
10251036
};

0 commit comments

Comments
 (0)