@webex/internal-plugin-presence 3.0.0-beta.15 → 3.0.0-beta.151
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.js +0 -3
- package/dist/config.js.map +1 -1
- package/dist/constants.js +0 -9
- package/dist/constants.js.map +1 -1
- package/dist/index.js +1 -10
- package/dist/index.js.map +1 -1
- package/dist/presence-batcher.js +0 -15
- package/dist/presence-batcher.js.map +1 -1
- package/dist/presence-worker.js +17 -52
- package/dist/presence-worker.js.map +1 -1
- package/dist/presence.js +5 -44
- package/dist/presence.js.map +1 -1
- package/package.json +9 -9
- package/test/integration/spec/presence.js +2 -1
package/dist/config.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
_Object$defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
|
|
9
7
|
exports.default = void 0;
|
|
10
|
-
|
|
11
8
|
/*!
|
|
12
9
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
13
10
|
*/
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["presence","batcherWait","batcherMaxCalls","batcherMaxWait"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n presence: {\n batcherWait: 50,\n batcherMaxCalls: 50,\n batcherMaxWait: 150,\n },\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["presence","batcherWait","batcherMaxCalls","batcherMaxWait"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n presence: {\n batcherWait: 50,\n batcherMaxCalls: 50,\n batcherMaxWait: 150,\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,eAIe;EACbA,QAAQ,EAAE;IACRC,WAAW,EAAE,EAAE;IACfC,eAAe,EAAE,EAAE;IACnBC,cAAc,EAAE;EAClB;AACF,CAAC;AAAA"}
|
package/dist/constants.js
CHANGED
|
@@ -1,32 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
_Object$defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
|
|
9
7
|
exports.UPDATE_PRESENCE_DELAY = exports.SUBSCRIPTION_DELAY = exports.PRESENCE_UPDATE = exports.PREMATURE_EXPIRATION_SUBSCRIPTION_TIME = exports.GROUNDSKEEPER_INTERVAL = exports.FETCH_DELAY = exports.EXPIRED_PRESENCE_TIME = exports.ENVELOPE_TYPE = exports.DEFAULT_SUBSCRIPTION_TTL = exports.APHELEIA_SUBSCRIPTION_UPDATE = void 0;
|
|
10
8
|
var GROUNDSKEEPER_INTERVAL = 20 * 1000; // 20 seconds in ms
|
|
11
|
-
|
|
12
9
|
exports.GROUNDSKEEPER_INTERVAL = GROUNDSKEEPER_INTERVAL;
|
|
13
10
|
var FETCH_DELAY = 300; // ms
|
|
14
|
-
|
|
15
11
|
exports.FETCH_DELAY = FETCH_DELAY;
|
|
16
12
|
var UPDATE_PRESENCE_DELAY = 60 * 1000; // 1 minute in ms
|
|
17
|
-
|
|
18
13
|
exports.UPDATE_PRESENCE_DELAY = UPDATE_PRESENCE_DELAY;
|
|
19
14
|
var EXPIRED_PRESENCE_TIME = 10 * 60 * 1000; // 10 minutes in ms
|
|
20
|
-
|
|
21
15
|
exports.EXPIRED_PRESENCE_TIME = EXPIRED_PRESENCE_TIME;
|
|
22
16
|
var SUBSCRIPTION_DELAY = 60 * 1000; // 1 minute in ms
|
|
23
|
-
|
|
24
17
|
exports.SUBSCRIPTION_DELAY = SUBSCRIPTION_DELAY;
|
|
25
18
|
var PREMATURE_EXPIRATION_SUBSCRIPTION_TIME = 60 * 1000; // 1 minute in ms
|
|
26
|
-
|
|
27
19
|
exports.PREMATURE_EXPIRATION_SUBSCRIPTION_TIME = PREMATURE_EXPIRATION_SUBSCRIPTION_TIME;
|
|
28
20
|
var DEFAULT_SUBSCRIPTION_TTL = 10 * 60 * 1000; // 10 minutes in ms
|
|
29
|
-
|
|
30
21
|
exports.DEFAULT_SUBSCRIPTION_TTL = DEFAULT_SUBSCRIPTION_TTL;
|
|
31
22
|
var APHELEIA_SUBSCRIPTION_UPDATE = 'event:apheleia.subscription_update';
|
|
32
23
|
exports.APHELEIA_SUBSCRIPTION_UPDATE = APHELEIA_SUBSCRIPTION_UPDATE;
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["GROUNDSKEEPER_INTERVAL","FETCH_DELAY","UPDATE_PRESENCE_DELAY","EXPIRED_PRESENCE_TIME","SUBSCRIPTION_DELAY","PREMATURE_EXPIRATION_SUBSCRIPTION_TIME","DEFAULT_SUBSCRIPTION_TTL","APHELEIA_SUBSCRIPTION_UPDATE","PRESENCE_UPDATE","ENVELOPE_TYPE","SUBSCRIPTION","PRESENCE","DELETE"],"sources":["constants.js"],"sourcesContent":["export const GROUNDSKEEPER_INTERVAL = 20 * 1000; // 20 seconds in ms\n\nexport const FETCH_DELAY = 300; // ms\n\nexport const UPDATE_PRESENCE_DELAY = 60 * 1000; // 1 minute in ms\nexport const EXPIRED_PRESENCE_TIME = 10 * 60 * 1000; // 10 minutes in ms\n\nexport const SUBSCRIPTION_DELAY = 60 * 1000; // 1 minute in ms\nexport const PREMATURE_EXPIRATION_SUBSCRIPTION_TIME = 60 * 1000; // 1 minute in ms\nexport const DEFAULT_SUBSCRIPTION_TTL = 10 * 60 * 1000; // 10 minutes in ms\n\nexport const APHELEIA_SUBSCRIPTION_UPDATE = 'event:apheleia.subscription_update';\nexport const PRESENCE_UPDATE = 'updated';\n\nexport const ENVELOPE_TYPE = {\n SUBSCRIPTION: 'subscription',\n PRESENCE: 'presence',\n DELETE: 'delete',\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["GROUNDSKEEPER_INTERVAL","FETCH_DELAY","UPDATE_PRESENCE_DELAY","EXPIRED_PRESENCE_TIME","SUBSCRIPTION_DELAY","PREMATURE_EXPIRATION_SUBSCRIPTION_TIME","DEFAULT_SUBSCRIPTION_TTL","APHELEIA_SUBSCRIPTION_UPDATE","PRESENCE_UPDATE","ENVELOPE_TYPE","SUBSCRIPTION","PRESENCE","DELETE"],"sources":["constants.js"],"sourcesContent":["export const GROUNDSKEEPER_INTERVAL = 20 * 1000; // 20 seconds in ms\n\nexport const FETCH_DELAY = 300; // ms\n\nexport const UPDATE_PRESENCE_DELAY = 60 * 1000; // 1 minute in ms\nexport const EXPIRED_PRESENCE_TIME = 10 * 60 * 1000; // 10 minutes in ms\n\nexport const SUBSCRIPTION_DELAY = 60 * 1000; // 1 minute in ms\nexport const PREMATURE_EXPIRATION_SUBSCRIPTION_TIME = 60 * 1000; // 1 minute in ms\nexport const DEFAULT_SUBSCRIPTION_TTL = 10 * 60 * 1000; // 10 minutes in ms\n\nexport const APHELEIA_SUBSCRIPTION_UPDATE = 'event:apheleia.subscription_update';\nexport const PRESENCE_UPDATE = 'updated';\n\nexport const ENVELOPE_TYPE = {\n SUBSCRIPTION: 'subscription',\n PRESENCE: 'presence',\n DELETE: 'delete',\n};\n"],"mappings":";;;;;;;AAAO,IAAMA,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAA;AAE1C,IAAMC,WAAW,GAAG,GAAG,CAAC,CAAC;AAAA;AAEzB,IAAMC,qBAAqB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAA;AACzC,IAAMC,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAA;AAE9C,IAAMC,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAA;AACtC,IAAMC,sCAAsC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAA;AAC1D,IAAMC,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAA;AAEjD,IAAMC,4BAA4B,GAAG,oCAAoC;AAAC;AAC1E,IAAMC,eAAe,GAAG,SAAS;AAAC;AAElC,IAAMC,aAAa,GAAG;EAC3BC,YAAY,EAAE,cAAc;EAC5BC,QAAQ,EAAE,UAAU;EACpBC,MAAM,EAAE;AACV,CAAC;AAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,35 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
|
|
11
8
|
_Object$defineProperty(exports, "default", {
|
|
12
9
|
enumerable: true,
|
|
13
10
|
get: function get() {
|
|
14
11
|
return _presence.default;
|
|
15
12
|
}
|
|
16
13
|
});
|
|
17
|
-
|
|
18
14
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
19
|
-
|
|
20
15
|
var _has2 = _interopRequireDefault(require("lodash/has"));
|
|
21
|
-
|
|
22
16
|
require("@webex/internal-plugin-device");
|
|
23
|
-
|
|
24
17
|
var _webexCore = require("@webex/webex-core");
|
|
25
|
-
|
|
26
18
|
var _presence = _interopRequireDefault(require("./presence"));
|
|
27
|
-
|
|
28
19
|
var _config = _interopRequireDefault(require("./config"));
|
|
29
|
-
|
|
30
20
|
/*!
|
|
31
21
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
32
22
|
*/
|
|
23
|
+
|
|
33
24
|
(0, _webexCore.registerInternalPlugin)('presence', _presence.default, {
|
|
34
25
|
payloadTransformer: {
|
|
35
26
|
predicates: [{
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["registerInternalPlugin","Presence","payloadTransformer","predicates","name","direction","test","ctx","response","resolve","extract","transforms","fn","body","status","eventType","config"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {has} from 'lodash';\n\nimport Presence from './presence';\nimport config from './config';\n\nregisterInternalPlugin('presence', Presence, {\n payloadTransformer: {\n predicates: [\n {\n name: 'normalizeSingleStatusResponse',\n direction: 'inbound',\n test(ctx, response) {\n // POST to /apheleia/api/v1/events\n return Promise.resolve(has(response, 'body.eventType') && has(response, 'body.subject'));\n },\n extract(response) {\n return Promise.resolve(response);\n },\n },\n ],\n transforms: [\n {\n name: 'normalizeSingleStatusResponse',\n direction: 'inbound',\n fn(ctx, response) {\n response.body.status = response.body.eventType;\n },\n },\n ],\n },\n config,\n});\n\nexport {default} from './presence';\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["registerInternalPlugin","Presence","payloadTransformer","predicates","name","direction","test","ctx","response","resolve","extract","transforms","fn","body","status","eventType","config"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {has} from 'lodash';\n\nimport Presence from './presence';\nimport config from './config';\n\nregisterInternalPlugin('presence', Presence, {\n payloadTransformer: {\n predicates: [\n {\n name: 'normalizeSingleStatusResponse',\n direction: 'inbound',\n test(ctx, response) {\n // POST to /apheleia/api/v1/events\n return Promise.resolve(has(response, 'body.eventType') && has(response, 'body.subject'));\n },\n extract(response) {\n return Promise.resolve(response);\n },\n },\n ],\n transforms: [\n {\n name: 'normalizeSingleStatusResponse',\n direction: 'inbound',\n fn(ctx, response) {\n response.body.status = response.body.eventType;\n },\n },\n ],\n },\n config,\n});\n\nexport {default} from './presence';\n"],"mappings":";;;;;;;;;;;;;;;AAIA;AAEA;AAGA;AACA;AAVA;AACA;AACA;;AAUA,IAAAA,iCAAsB,EAAC,UAAU,EAAEC,iBAAQ,EAAE;EAC3CC,kBAAkB,EAAE;IAClBC,UAAU,EAAE,CACV;MACEC,IAAI,EAAE,+BAA+B;MACrCC,SAAS,EAAE,SAAS;MACpBC,IAAI,gBAACC,GAAG,EAAEC,QAAQ,EAAE;QAClB;QACA,OAAO,iBAAQC,OAAO,CAAC,mBAAID,QAAQ,EAAE,gBAAgB,CAAC,IAAI,mBAAIA,QAAQ,EAAE,cAAc,CAAC,CAAC;MAC1F,CAAC;MACDE,OAAO,mBAACF,QAAQ,EAAE;QAChB,OAAO,iBAAQC,OAAO,CAACD,QAAQ,CAAC;MAClC;IACF,CAAC,CACF;IACDG,UAAU,EAAE,CACV;MACEP,IAAI,EAAE,+BAA+B;MACrCC,SAAS,EAAE,SAAS;MACpBO,EAAE,cAACL,GAAG,EAAEC,QAAQ,EAAE;QAChBA,QAAQ,CAACK,IAAI,CAACC,MAAM,GAAGN,QAAQ,CAACK,IAAI,CAACE,SAAS;MAChD;IACF,CAAC;EAEL,CAAC;EACDC,MAAM,EAANA;AACF,CAAC,CAAC"}
|
package/dist/presence-batcher.js
CHANGED
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
|
|
11
8
|
exports.default = void 0;
|
|
12
|
-
|
|
13
9
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
14
|
-
|
|
15
10
|
var _webexCore = require("@webex/webex-core");
|
|
16
|
-
|
|
17
11
|
/*!
|
|
18
12
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
19
13
|
*/
|
|
@@ -24,7 +18,6 @@ var _webexCore = require("@webex/webex-core");
|
|
|
24
18
|
*/
|
|
25
19
|
var PresenceBatcher = _webexCore.Batcher.extend({
|
|
26
20
|
namespace: 'Presence',
|
|
27
|
-
|
|
28
21
|
/**
|
|
29
22
|
* @instance
|
|
30
23
|
* @memberof PresenceBatcher
|
|
@@ -33,12 +26,10 @@ var PresenceBatcher = _webexCore.Batcher.extend({
|
|
|
33
26
|
*/
|
|
34
27
|
handleHttpSuccess: function handleHttpSuccess(res) {
|
|
35
28
|
var _this = this;
|
|
36
|
-
|
|
37
29
|
return _promise.default.all(res.body.statusList.map(function (presenceResponse) {
|
|
38
30
|
return _this.handleItemSuccess(presenceResponse.subject, presenceResponse);
|
|
39
31
|
}));
|
|
40
32
|
},
|
|
41
|
-
|
|
42
33
|
/**
|
|
43
34
|
* @instance
|
|
44
35
|
* @memberof PresenceBatcher
|
|
@@ -51,7 +42,6 @@ var PresenceBatcher = _webexCore.Batcher.extend({
|
|
|
51
42
|
defer.reject(response);
|
|
52
43
|
});
|
|
53
44
|
},
|
|
54
|
-
|
|
55
45
|
/**
|
|
56
46
|
* @instance
|
|
57
47
|
* @memberof PresenceBatcher
|
|
@@ -64,7 +54,6 @@ var PresenceBatcher = _webexCore.Batcher.extend({
|
|
|
64
54
|
defer.resolve(response);
|
|
65
55
|
});
|
|
66
56
|
},
|
|
67
|
-
|
|
68
57
|
/**
|
|
69
58
|
* @instance
|
|
70
59
|
* @memberof PresenceBatcher
|
|
@@ -74,7 +63,6 @@ var PresenceBatcher = _webexCore.Batcher.extend({
|
|
|
74
63
|
fingerprintRequest: function fingerprintRequest(id) {
|
|
75
64
|
return _promise.default.resolve(id);
|
|
76
65
|
},
|
|
77
|
-
|
|
78
66
|
/**
|
|
79
67
|
* @instance
|
|
80
68
|
* @memberof PresenceBatcher
|
|
@@ -84,7 +72,6 @@ var PresenceBatcher = _webexCore.Batcher.extend({
|
|
|
84
72
|
fingerprintResponse: function fingerprintResponse(id) {
|
|
85
73
|
return _promise.default.resolve(id);
|
|
86
74
|
},
|
|
87
|
-
|
|
88
75
|
/**
|
|
89
76
|
* @instance
|
|
90
77
|
* @memberof PresenceBatcher
|
|
@@ -94,7 +81,6 @@ var PresenceBatcher = _webexCore.Batcher.extend({
|
|
|
94
81
|
prepareRequest: function prepareRequest(ids) {
|
|
95
82
|
return _promise.default.resolve(ids);
|
|
96
83
|
},
|
|
97
|
-
|
|
98
84
|
/**
|
|
99
85
|
* @instance
|
|
100
86
|
* @memberof PresenceBatcher
|
|
@@ -112,7 +98,6 @@ var PresenceBatcher = _webexCore.Batcher.extend({
|
|
|
112
98
|
});
|
|
113
99
|
}
|
|
114
100
|
});
|
|
115
|
-
|
|
116
101
|
var _default = PresenceBatcher;
|
|
117
102
|
exports.default = _default;
|
|
118
103
|
//# sourceMappingURL=presence-batcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PresenceBatcher","Batcher","extend","namespace","handleHttpSuccess","res","all","body","statusList","map","presenceResponse","handleItemSuccess","subject","handleItemFailure","item","response","getDeferredForResponse","then","defer","reject","resolve","fingerprintRequest","id","fingerprintResponse","prepareRequest","ids","submitHttpRequest","subjects","webex","request","method","api","resource"],"sources":["presence-batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Batcher} from '@webex/webex-core';\n\n/**\n * @class\n * @ignore\n */\nconst PresenceBatcher = Batcher.extend({\n namespace: 'Presence',\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {HttpResponseObject} res\n * @returns {Promise}\n */\n handleHttpSuccess(res) {\n return Promise.all(\n res.body.statusList.map((presenceResponse) =>\n this.handleItemSuccess(presenceResponse.subject, presenceResponse)\n )\n );\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} item\n * @param {Object} response\n * @returns {Promise}\n */\n handleItemFailure(item, response) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.reject(response);\n });\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} item\n * @param {Object} response\n * @returns {Promise}\n */\n handleItemSuccess(item, response) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.resolve(response);\n });\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} id\n * @returns {Promise<string>}\n */\n fingerprintRequest(id) {\n return Promise.resolve(id);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} id\n * @returns {Promise<string>}\n */\n fingerprintResponse(id) {\n return Promise.resolve(id);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {Array} ids\n * @returns {Promise<Array>}\n */\n prepareRequest(ids) {\n return Promise.resolve(ids);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {Object} subjects\n * @returns {Promise<HttpResponseObject>}\n */\n submitHttpRequest(subjects) {\n return this.webex.request({\n method: 'POST',\n api: 'apheleia',\n resource: 'compositions',\n body: {subjects},\n });\n },\n});\n\nexport default PresenceBatcher;\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["PresenceBatcher","Batcher","extend","namespace","handleHttpSuccess","res","all","body","statusList","map","presenceResponse","handleItemSuccess","subject","handleItemFailure","item","response","getDeferredForResponse","then","defer","reject","resolve","fingerprintRequest","id","fingerprintResponse","prepareRequest","ids","submitHttpRequest","subjects","webex","request","method","api","resource"],"sources":["presence-batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Batcher} from '@webex/webex-core';\n\n/**\n * @class\n * @ignore\n */\nconst PresenceBatcher = Batcher.extend({\n namespace: 'Presence',\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {HttpResponseObject} res\n * @returns {Promise}\n */\n handleHttpSuccess(res) {\n return Promise.all(\n res.body.statusList.map((presenceResponse) =>\n this.handleItemSuccess(presenceResponse.subject, presenceResponse)\n )\n );\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} item\n * @param {Object} response\n * @returns {Promise}\n */\n handleItemFailure(item, response) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.reject(response);\n });\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} item\n * @param {Object} response\n * @returns {Promise}\n */\n handleItemSuccess(item, response) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.resolve(response);\n });\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} id\n * @returns {Promise<string>}\n */\n fingerprintRequest(id) {\n return Promise.resolve(id);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} id\n * @returns {Promise<string>}\n */\n fingerprintResponse(id) {\n return Promise.resolve(id);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {Array} ids\n * @returns {Promise<Array>}\n */\n prepareRequest(ids) {\n return Promise.resolve(ids);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {Object} subjects\n * @returns {Promise<HttpResponseObject>}\n */\n submitHttpRequest(subjects) {\n return this.webex.request({\n method: 'POST',\n api: 'apheleia',\n resource: 'compositions',\n body: {subjects},\n });\n },\n});\n\nexport default PresenceBatcher;\n"],"mappings":";;;;;;;;;AAIA;AAJA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA,IAAMA,eAAe,GAAGC,kBAAO,CAACC,MAAM,CAAC;EACrCC,SAAS,EAAE,UAAU;EAErB;AACF;AACA;AACA;AACA;AACA;EACEC,iBAAiB,6BAACC,GAAG,EAAE;IAAA;IACrB,OAAO,iBAAQC,GAAG,CAChBD,GAAG,CAACE,IAAI,CAACC,UAAU,CAACC,GAAG,CAAC,UAACC,gBAAgB;MAAA,OACvC,KAAI,CAACC,iBAAiB,CAACD,gBAAgB,CAACE,OAAO,EAAEF,gBAAgB,CAAC;IAAA,EACnE,CACF;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEG,iBAAiB,6BAACC,IAAI,EAAEC,QAAQ,EAAE;IAChC,OAAO,IAAI,CAACC,sBAAsB,CAACF,IAAI,CAAC,CAACG,IAAI,CAAC,UAACC,KAAK,EAAK;MACvDA,KAAK,CAACC,MAAM,CAACJ,QAAQ,CAAC;IACxB,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEJ,iBAAiB,6BAACG,IAAI,EAAEC,QAAQ,EAAE;IAChC,OAAO,IAAI,CAACC,sBAAsB,CAACF,IAAI,CAAC,CAACG,IAAI,CAAC,UAACC,KAAK,EAAK;MACvDA,KAAK,CAACE,OAAO,CAACL,QAAQ,CAAC;IACzB,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEM,kBAAkB,8BAACC,EAAE,EAAE;IACrB,OAAO,iBAAQF,OAAO,CAACE,EAAE,CAAC;EAC5B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEC,mBAAmB,+BAACD,EAAE,EAAE;IACtB,OAAO,iBAAQF,OAAO,CAACE,EAAE,CAAC;EAC5B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEE,cAAc,0BAACC,GAAG,EAAE;IAClB,OAAO,iBAAQL,OAAO,CAACK,GAAG,CAAC;EAC7B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEC,iBAAiB,6BAACC,QAAQ,EAAE;IAC1B,OAAO,IAAI,CAACC,KAAK,CAACC,OAAO,CAAC;MACxBC,MAAM,EAAE,MAAM;MACdC,GAAG,EAAE,UAAU;MACfC,QAAQ,EAAE,cAAc;MACxBzB,IAAI,EAAE;QAACoB,QAAQ,EAARA;MAAQ;IACjB,CAAC,CAAC;EACJ;AACF,CAAC,CAAC;AAAC,eAEY3B,eAAe;AAAA"}
|
package/dist/presence-worker.js
CHANGED
|
@@ -1,35 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
|
|
11
8
|
exports.default = void 0;
|
|
12
|
-
|
|
13
9
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
14
|
-
|
|
15
10
|
var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign"));
|
|
16
|
-
|
|
17
11
|
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
18
|
-
|
|
19
12
|
var _entries = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/entries"));
|
|
20
|
-
|
|
21
13
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
|
|
22
|
-
|
|
23
14
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
24
|
-
|
|
25
15
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
26
|
-
|
|
27
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
28
|
-
|
|
29
17
|
var _debounce2 = _interopRequireDefault(require("lodash/debounce"));
|
|
30
|
-
|
|
31
18
|
var _constants = require("./constants");
|
|
32
|
-
|
|
33
19
|
/**
|
|
34
20
|
* Presence Worker
|
|
35
21
|
* Manages fetches and subscriptions for presence
|
|
@@ -45,33 +31,25 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
45
31
|
(0, _classCallCheck2.default)(this, PresenceWorker);
|
|
46
32
|
(0, _defineProperty2.default)(this, "debouncedFetch", (0, _debounce2.default)(this.checkFetchers, _constants.FETCH_DELAY));
|
|
47
33
|
this.presences = {}; // current presence objects; updated time
|
|
48
|
-
|
|
49
34
|
this.watchers = {}; // counter of visible presence-required objects
|
|
50
|
-
|
|
51
35
|
this.fetchers = {}; // waiting to get presence object
|
|
52
|
-
|
|
53
36
|
this.flights = {}; // in flight to get presence object
|
|
54
|
-
|
|
55
37
|
this.campers = {}; // waiting to subscribe; updated time
|
|
56
|
-
|
|
57
38
|
this.subscribers = {}; // current subscriptions; expiration time
|
|
58
39
|
}
|
|
40
|
+
|
|
59
41
|
/**
|
|
60
42
|
* Connect to the mercury for presence and starts worker.
|
|
61
43
|
* @param {object} webex
|
|
62
44
|
* @returns {undefined}
|
|
63
45
|
*/
|
|
64
|
-
|
|
65
|
-
|
|
66
46
|
(0, _createClass2.default)(PresenceWorker, [{
|
|
67
47
|
key: "initialize",
|
|
68
48
|
value: function initialize(webex) {
|
|
69
49
|
var _this = this;
|
|
70
|
-
|
|
71
50
|
if (!webex || !webex.internal) {
|
|
72
51
|
throw new Error('Must initialize Presence Worker with webex!');
|
|
73
52
|
}
|
|
74
|
-
|
|
75
53
|
this.webex = webex;
|
|
76
54
|
var mercury = this.webex.internal.mercury.connected ? _promise.default.resolve() : this.webex.internal.mercury.connect();
|
|
77
55
|
mercury.then(function () {
|
|
@@ -79,12 +57,12 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
79
57
|
});
|
|
80
58
|
setInterval(this.groundskeeper.bind(this), _constants.GROUNDSKEEPER_INTERVAL);
|
|
81
59
|
}
|
|
60
|
+
|
|
82
61
|
/**
|
|
83
62
|
* Trigger a subscription update event.
|
|
84
63
|
* @param {string} event
|
|
85
64
|
* @returns {undefined}
|
|
86
65
|
*/
|
|
87
|
-
|
|
88
66
|
}, {
|
|
89
67
|
key: "subscriptionUpdate",
|
|
90
68
|
value: function subscriptionUpdate(event) {
|
|
@@ -94,52 +72,48 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
94
72
|
payload: event.data
|
|
95
73
|
});
|
|
96
74
|
}
|
|
75
|
+
|
|
97
76
|
/**
|
|
98
77
|
* Retrieves and subscribes to a user's presence.
|
|
99
78
|
* @param {string} id
|
|
100
79
|
* @returns {undefined}
|
|
101
80
|
*/
|
|
102
|
-
|
|
103
81
|
}, {
|
|
104
82
|
key: "enqueue",
|
|
105
83
|
value: function enqueue(id) {
|
|
106
84
|
var now = new Date().getTime();
|
|
107
|
-
|
|
108
85
|
if (this.watchers[id]) {
|
|
109
86
|
this.watchers[id] += 1;
|
|
110
87
|
} else {
|
|
111
88
|
this.watchers[id] = 1;
|
|
112
89
|
}
|
|
113
|
-
|
|
114
90
|
if (this.subscribers[id]) {
|
|
115
91
|
return;
|
|
116
92
|
}
|
|
117
|
-
|
|
118
93
|
if (!this.campers[id]) {
|
|
119
94
|
this.campers[id] = now;
|
|
120
|
-
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Retrieve presence if:
|
|
121
98
|
// not in flight or
|
|
122
99
|
// don't already have the presence or
|
|
123
100
|
// presence has gone stale
|
|
124
|
-
|
|
125
|
-
|
|
126
101
|
if (!this.flights[id] && (!this.presences[id] || this.presences[id] < now - _constants.UPDATE_PRESENCE_DELAY)) {
|
|
127
102
|
this.fetchers[id] = id;
|
|
128
103
|
this.debouncedFetch();
|
|
129
104
|
}
|
|
130
105
|
}
|
|
106
|
+
|
|
131
107
|
/**
|
|
132
108
|
* Retract from subscribing to a user's presence.
|
|
133
109
|
* @param {string} id
|
|
134
110
|
* @returns {undefined}
|
|
135
111
|
*/
|
|
136
|
-
|
|
137
112
|
}, {
|
|
138
113
|
key: "dequeue",
|
|
139
114
|
value: function dequeue(id) {
|
|
140
115
|
if (this.watchers[id]) {
|
|
141
116
|
this.watchers[id] -= 1;
|
|
142
|
-
|
|
143
117
|
if (this.watchers[id] <= 0) {
|
|
144
118
|
delete this.watchers[id];
|
|
145
119
|
delete this.fetchers[id];
|
|
@@ -147,16 +121,15 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
147
121
|
}
|
|
148
122
|
}
|
|
149
123
|
}
|
|
124
|
+
|
|
150
125
|
/**
|
|
151
126
|
* Retrieve users' presences.
|
|
152
127
|
* @returns {undefined}
|
|
153
128
|
*/
|
|
154
|
-
|
|
155
129
|
}, {
|
|
156
130
|
key: "checkFetchers",
|
|
157
131
|
value: function checkFetchers() {
|
|
158
132
|
var _this2 = this;
|
|
159
|
-
|
|
160
133
|
var boarding = this.fetchers;
|
|
161
134
|
(0, _assign.default)(this.flights, boarding);
|
|
162
135
|
this.fetchers = {};
|
|
@@ -167,7 +140,6 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
167
140
|
delete _this2.flights[id];
|
|
168
141
|
_this2.presences[id] = now;
|
|
169
142
|
});
|
|
170
|
-
|
|
171
143
|
_this2.webex.internal.presence.emitEvent(_constants.PRESENCE_UPDATE, {
|
|
172
144
|
type: _constants.ENVELOPE_TYPE.PRESENCE,
|
|
173
145
|
payload: response
|
|
@@ -183,13 +155,13 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
183
155
|
*/
|
|
184
156
|
function checkCampers() {
|
|
185
157
|
var _this3 = this;
|
|
186
|
-
|
|
187
158
|
var now = new Date().getTime();
|
|
188
159
|
var subscribers = [];
|
|
189
160
|
(0, _entries.default)(this.campers).forEach(function (camper) {
|
|
190
161
|
var id = camper[0];
|
|
191
|
-
var time = camper[1];
|
|
162
|
+
var time = camper[1];
|
|
192
163
|
|
|
164
|
+
// Subscribe if they've been camping for a minute
|
|
193
165
|
if (time < now - _constants.SUBSCRIPTION_DELAY) {
|
|
194
166
|
delete _this3.campers[id];
|
|
195
167
|
_this3.subscribers[id] = null;
|
|
@@ -198,22 +170,20 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
198
170
|
});
|
|
199
171
|
return subscribers;
|
|
200
172
|
}
|
|
173
|
+
|
|
201
174
|
/**
|
|
202
175
|
* Determine if we should re-subscribe or remove users' subscriptions.
|
|
203
176
|
* @returns {Array}: User ids to re-subscribe.
|
|
204
177
|
*/
|
|
205
|
-
|
|
206
178
|
}, {
|
|
207
179
|
key: "checkSubscriptions",
|
|
208
180
|
value: function checkSubscriptions() {
|
|
209
181
|
var _this4 = this;
|
|
210
|
-
|
|
211
182
|
var now = new Date().getTime();
|
|
212
183
|
var renewIds = [];
|
|
213
184
|
(0, _entries.default)(this.subscribers).forEach(function (subscription) {
|
|
214
185
|
var id = subscription[0];
|
|
215
186
|
var expiration = subscription[1];
|
|
216
|
-
|
|
217
187
|
if (expiration) {
|
|
218
188
|
// Renew subscription if they're about to expire
|
|
219
189
|
if (_this4.watchers[id] && now > expiration - _constants.PREMATURE_EXPIRATION_SUBSCRIPTION_TIME) {
|
|
@@ -225,30 +195,29 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
225
195
|
});
|
|
226
196
|
return renewIds;
|
|
227
197
|
}
|
|
198
|
+
|
|
228
199
|
/**
|
|
229
200
|
* Remove expired presence objects.
|
|
230
201
|
* @returns {undefined}
|
|
231
202
|
*/
|
|
232
|
-
|
|
233
203
|
}, {
|
|
234
204
|
key: "cleanPresences",
|
|
235
205
|
value: function cleanPresences() {
|
|
236
206
|
var _this5 = this;
|
|
237
|
-
|
|
238
207
|
var trash = [];
|
|
239
|
-
|
|
240
208
|
var tenMinutesAgo = new Date().getTime() - _constants.EXPIRED_PRESENCE_TIME;
|
|
241
|
-
|
|
242
209
|
(0, _entries.default)(this.presences).forEach(function (presence) {
|
|
243
210
|
var id = presence[0];
|
|
244
|
-
var lastUpdated = presence[1];
|
|
211
|
+
var lastUpdated = presence[1];
|
|
245
212
|
|
|
213
|
+
// Delete the object if it is stale
|
|
246
214
|
if (lastUpdated < tenMinutesAgo) {
|
|
247
215
|
delete _this5.presences[id];
|
|
248
216
|
trash.push(id);
|
|
249
217
|
}
|
|
250
|
-
});
|
|
218
|
+
});
|
|
251
219
|
|
|
220
|
+
// Tells client to delete it too
|
|
252
221
|
if (trash.length) {
|
|
253
222
|
this.webex.internal.presence.emitEvent(_constants.PRESENCE_UPDATE, {
|
|
254
223
|
type: _constants.ENVELOPE_TYPE.DELETE,
|
|
@@ -256,6 +225,7 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
256
225
|
});
|
|
257
226
|
}
|
|
258
227
|
}
|
|
228
|
+
|
|
259
229
|
/**
|
|
260
230
|
* Execute chores on an interval.
|
|
261
231
|
* Checks if we should make new subscribe,
|
|
@@ -264,16 +234,13 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
264
234
|
* removes expired presence objects.
|
|
265
235
|
* @returns {undefined}
|
|
266
236
|
*/
|
|
267
|
-
|
|
268
237
|
}, {
|
|
269
238
|
key: "groundskeeper",
|
|
270
239
|
value: function groundskeeper() {
|
|
271
240
|
var _this6 = this;
|
|
272
|
-
|
|
273
241
|
var campers = this.checkCampers();
|
|
274
242
|
var renewSubscriptions = this.checkSubscriptions();
|
|
275
243
|
var ids = [].concat((0, _toConsumableArray2.default)(campers), (0, _toConsumableArray2.default)(renewSubscriptions));
|
|
276
|
-
|
|
277
244
|
if (ids.length) {
|
|
278
245
|
this.webex.internal.presence.subscribe(ids).then(function (body) {
|
|
279
246
|
var now = new Date().getTime();
|
|
@@ -289,12 +256,10 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
289
256
|
});
|
|
290
257
|
});
|
|
291
258
|
}
|
|
292
|
-
|
|
293
259
|
this.cleanPresences();
|
|
294
260
|
}
|
|
295
261
|
}]);
|
|
296
262
|
return PresenceWorker;
|
|
297
263
|
}();
|
|
298
|
-
|
|
299
264
|
exports.default = PresenceWorker;
|
|
300
265
|
//# sourceMappingURL=presence-worker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PresenceWorker","checkFetchers","FETCH_DELAY","presences","watchers","fetchers","flights","campers","subscribers","webex","internal","Error","mercury","connected","resolve","connect","then","on","APHELEIA_SUBSCRIPTION_UPDATE","subscriptionUpdate","bind","setInterval","groundskeeper","GROUNDSKEEPER_INTERVAL","event","data","subject","Date","getTime","presence","emitEvent","PRESENCE_UPDATE","type","ENVELOPE_TYPE","SUBSCRIPTION","payload","id","now","UPDATE_PRESENCE_DELAY","debouncedFetch","boarding","list","response","statusList","forEach","PRESENCE","camper","time","SUBSCRIPTION_DELAY","push","renewIds","subscription","expiration","PREMATURE_EXPIRATION_SUBSCRIPTION_TIME","trash","tenMinutesAgo","EXPIRED_PRESENCE_TIME","lastUpdated","length","DELETE","checkCampers","renewSubscriptions","checkSubscriptions","ids","subscribe","body","responses","responseCode","ttl","subscriptionTtl","status","DEFAULT_SUBSCRIPTION_TTL","cleanPresences"],"sources":["presence-worker.js"],"sourcesContent":["import {debounce} from 'lodash';\n\nimport {\n FETCH_DELAY,\n GROUNDSKEEPER_INTERVAL,\n SUBSCRIPTION_DELAY,\n UPDATE_PRESENCE_DELAY,\n EXPIRED_PRESENCE_TIME,\n PREMATURE_EXPIRATION_SUBSCRIPTION_TIME,\n DEFAULT_SUBSCRIPTION_TTL,\n APHELEIA_SUBSCRIPTION_UPDATE,\n PRESENCE_UPDATE,\n ENVELOPE_TYPE,\n} from './constants';\n\n/**\n * Presence Worker\n * Manages fetches and subscriptions for presence\n * @class\n */\nexport default class PresenceWorker {\n /**\n * Constructs a presence worker to execute and\n * maintain tasks related to presence upkeep.\n * @returns {undefined}\n */\n constructor() {\n this.presences = {}; // current presence objects; updated time\n this.watchers = {}; // counter of visible presence-required objects\n this.fetchers = {}; // waiting to get presence object\n this.flights = {}; // in flight to get presence object\n this.campers = {}; // waiting to subscribe; updated time\n this.subscribers = {}; // current subscriptions; expiration time\n }\n\n /**\n * Connect to the mercury for presence and starts worker.\n * @param {object} webex\n * @returns {undefined}\n */\n initialize(webex) {\n if (!webex || !webex.internal) {\n throw new Error('Must initialize Presence Worker with webex!');\n }\n\n this.webex = webex;\n\n const mercury = this.webex.internal.mercury.connected\n ? Promise.resolve()\n : this.webex.internal.mercury.connect();\n\n mercury.then(() => {\n this.webex.internal.mercury.on(\n APHELEIA_SUBSCRIPTION_UPDATE,\n this.subscriptionUpdate.bind(this)\n );\n });\n\n setInterval(this.groundskeeper.bind(this), GROUNDSKEEPER_INTERVAL);\n }\n\n /**\n * Trigger a subscription update event.\n * @param {string} event\n * @returns {undefined}\n */\n subscriptionUpdate(event) {\n this.presences[event.data.subject] = new Date().getTime();\n\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\n type: ENVELOPE_TYPE.SUBSCRIPTION,\n payload: event.data,\n });\n }\n\n /**\n * Retrieves and subscribes to a user's presence.\n * @param {string} id\n * @returns {undefined}\n */\n enqueue(id) {\n const now = new Date().getTime();\n\n if (this.watchers[id]) {\n this.watchers[id] += 1;\n } else {\n this.watchers[id] = 1;\n }\n\n if (this.subscribers[id]) {\n return;\n }\n\n if (!this.campers[id]) {\n this.campers[id] = now;\n }\n\n // Retrieve presence if:\n // not in flight or\n // don't already have the presence or\n // presence has gone stale\n if (\n !this.flights[id] &&\n (!this.presences[id] || this.presences[id] < now - UPDATE_PRESENCE_DELAY)\n ) {\n this.fetchers[id] = id;\n this.debouncedFetch();\n }\n }\n\n /**\n * Retract from subscribing to a user's presence.\n * @param {string} id\n * @returns {undefined}\n */\n dequeue(id) {\n if (this.watchers[id]) {\n this.watchers[id] -= 1;\n\n if (this.watchers[id] <= 0) {\n delete this.watchers[id];\n delete this.fetchers[id];\n delete this.campers[id];\n }\n }\n }\n\n /**\n * Retrieve users' presences.\n * @returns {undefined}\n */\n checkFetchers() {\n const boarding = this.fetchers;\n\n Object.assign(this.flights, boarding);\n this.fetchers = {};\n\n this.webex.internal.presence.list(Object.keys(boarding)).then((response) => {\n const now = new Date().getTime();\n\n response.statusList.forEach((presence) => {\n const id = presence.subject;\n\n delete this.flights[id];\n this.presences[id] = now;\n });\n\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\n type: ENVELOPE_TYPE.PRESENCE,\n payload: response,\n });\n });\n }\n\n debouncedFetch = debounce(this.checkFetchers, FETCH_DELAY);\n\n /**\n * Determine if we should subscribe to users' presences.\n * @returns {Array}: User ids to subscribe.\n */\n checkCampers() {\n const now = new Date().getTime();\n const subscribers = [];\n\n Object.entries(this.campers).forEach((camper) => {\n const id = camper[0];\n const time = camper[1];\n\n // Subscribe if they've been camping for a minute\n if (time < now - SUBSCRIPTION_DELAY) {\n delete this.campers[id];\n this.subscribers[id] = null;\n subscribers.push(id);\n }\n });\n\n return subscribers;\n }\n\n /**\n * Determine if we should re-subscribe or remove users' subscriptions.\n * @returns {Array}: User ids to re-subscribe.\n */\n checkSubscriptions() {\n const now = new Date().getTime();\n\n const renewIds = [];\n\n Object.entries(this.subscribers).forEach((subscription) => {\n const id = subscription[0];\n const expiration = subscription[1];\n\n if (expiration) {\n // Renew subscription if they're about to expire\n if (this.watchers[id] && now > expiration - PREMATURE_EXPIRATION_SUBSCRIPTION_TIME) {\n renewIds.push(id);\n } else if (now > expiration) {\n delete this.subscribers[id];\n }\n }\n });\n\n return renewIds;\n }\n\n /**\n * Remove expired presence objects.\n * @returns {undefined}\n */\n cleanPresences() {\n const trash = [];\n const tenMinutesAgo = new Date().getTime() - EXPIRED_PRESENCE_TIME;\n\n Object.entries(this.presences).forEach((presence) => {\n const id = presence[0];\n const lastUpdated = presence[1];\n\n // Delete the object if it is stale\n if (lastUpdated < tenMinutesAgo) {\n delete this.presences[id];\n trash.push(id);\n }\n });\n\n // Tells client to delete it too\n if (trash.length) {\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\n type: ENVELOPE_TYPE.DELETE,\n payload: trash,\n });\n }\n }\n\n /**\n * Execute chores on an interval.\n * Checks if we should make new subscribe,\n * checks if we should re-subscribe,\n * removes expired subscriptions,\n * removes expired presence objects.\n * @returns {undefined}\n */\n groundskeeper() {\n const campers = this.checkCampers();\n const renewSubscriptions = this.checkSubscriptions();\n\n const ids = [...campers, ...renewSubscriptions];\n\n if (ids.length) {\n this.webex.internal.presence.subscribe(ids).then((body) => {\n const now = new Date().getTime();\n\n body.responses.forEach((response) => {\n if (response.responseCode === 200) {\n const ttl = response.subscriptionTtl * 1000;\n\n this.subscribers[response.subject] = now + ttl;\n this.presences[response.status.subject] = now;\n } else {\n // If it errored for any reason, set the ttl so we clean it out eventually\n this.subscribers[response.subject] = now + DEFAULT_SUBSCRIPTION_TTL;\n }\n });\n });\n }\n\n this.cleanPresences();\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["PresenceWorker","checkFetchers","FETCH_DELAY","presences","watchers","fetchers","flights","campers","subscribers","webex","internal","Error","mercury","connected","resolve","connect","then","on","APHELEIA_SUBSCRIPTION_UPDATE","subscriptionUpdate","bind","setInterval","groundskeeper","GROUNDSKEEPER_INTERVAL","event","data","subject","Date","getTime","presence","emitEvent","PRESENCE_UPDATE","type","ENVELOPE_TYPE","SUBSCRIPTION","payload","id","now","UPDATE_PRESENCE_DELAY","debouncedFetch","boarding","list","response","statusList","forEach","PRESENCE","camper","time","SUBSCRIPTION_DELAY","push","renewIds","subscription","expiration","PREMATURE_EXPIRATION_SUBSCRIPTION_TIME","trash","tenMinutesAgo","EXPIRED_PRESENCE_TIME","lastUpdated","length","DELETE","checkCampers","renewSubscriptions","checkSubscriptions","ids","subscribe","body","responses","responseCode","ttl","subscriptionTtl","status","DEFAULT_SUBSCRIPTION_TTL","cleanPresences"],"sources":["presence-worker.js"],"sourcesContent":["import {debounce} from 'lodash';\n\nimport {\n FETCH_DELAY,\n GROUNDSKEEPER_INTERVAL,\n SUBSCRIPTION_DELAY,\n UPDATE_PRESENCE_DELAY,\n EXPIRED_PRESENCE_TIME,\n PREMATURE_EXPIRATION_SUBSCRIPTION_TIME,\n DEFAULT_SUBSCRIPTION_TTL,\n APHELEIA_SUBSCRIPTION_UPDATE,\n PRESENCE_UPDATE,\n ENVELOPE_TYPE,\n} from './constants';\n\n/**\n * Presence Worker\n * Manages fetches and subscriptions for presence\n * @class\n */\nexport default class PresenceWorker {\n /**\n * Constructs a presence worker to execute and\n * maintain tasks related to presence upkeep.\n * @returns {undefined}\n */\n constructor() {\n this.presences = {}; // current presence objects; updated time\n this.watchers = {}; // counter of visible presence-required objects\n this.fetchers = {}; // waiting to get presence object\n this.flights = {}; // in flight to get presence object\n this.campers = {}; // waiting to subscribe; updated time\n this.subscribers = {}; // current subscriptions; expiration time\n }\n\n /**\n * Connect to the mercury for presence and starts worker.\n * @param {object} webex\n * @returns {undefined}\n */\n initialize(webex) {\n if (!webex || !webex.internal) {\n throw new Error('Must initialize Presence Worker with webex!');\n }\n\n this.webex = webex;\n\n const mercury = this.webex.internal.mercury.connected\n ? Promise.resolve()\n : this.webex.internal.mercury.connect();\n\n mercury.then(() => {\n this.webex.internal.mercury.on(\n APHELEIA_SUBSCRIPTION_UPDATE,\n this.subscriptionUpdate.bind(this)\n );\n });\n\n setInterval(this.groundskeeper.bind(this), GROUNDSKEEPER_INTERVAL);\n }\n\n /**\n * Trigger a subscription update event.\n * @param {string} event\n * @returns {undefined}\n */\n subscriptionUpdate(event) {\n this.presences[event.data.subject] = new Date().getTime();\n\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\n type: ENVELOPE_TYPE.SUBSCRIPTION,\n payload: event.data,\n });\n }\n\n /**\n * Retrieves and subscribes to a user's presence.\n * @param {string} id\n * @returns {undefined}\n */\n enqueue(id) {\n const now = new Date().getTime();\n\n if (this.watchers[id]) {\n this.watchers[id] += 1;\n } else {\n this.watchers[id] = 1;\n }\n\n if (this.subscribers[id]) {\n return;\n }\n\n if (!this.campers[id]) {\n this.campers[id] = now;\n }\n\n // Retrieve presence if:\n // not in flight or\n // don't already have the presence or\n // presence has gone stale\n if (\n !this.flights[id] &&\n (!this.presences[id] || this.presences[id] < now - UPDATE_PRESENCE_DELAY)\n ) {\n this.fetchers[id] = id;\n this.debouncedFetch();\n }\n }\n\n /**\n * Retract from subscribing to a user's presence.\n * @param {string} id\n * @returns {undefined}\n */\n dequeue(id) {\n if (this.watchers[id]) {\n this.watchers[id] -= 1;\n\n if (this.watchers[id] <= 0) {\n delete this.watchers[id];\n delete this.fetchers[id];\n delete this.campers[id];\n }\n }\n }\n\n /**\n * Retrieve users' presences.\n * @returns {undefined}\n */\n checkFetchers() {\n const boarding = this.fetchers;\n\n Object.assign(this.flights, boarding);\n this.fetchers = {};\n\n this.webex.internal.presence.list(Object.keys(boarding)).then((response) => {\n const now = new Date().getTime();\n\n response.statusList.forEach((presence) => {\n const id = presence.subject;\n\n delete this.flights[id];\n this.presences[id] = now;\n });\n\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\n type: ENVELOPE_TYPE.PRESENCE,\n payload: response,\n });\n });\n }\n\n debouncedFetch = debounce(this.checkFetchers, FETCH_DELAY);\n\n /**\n * Determine if we should subscribe to users' presences.\n * @returns {Array}: User ids to subscribe.\n */\n checkCampers() {\n const now = new Date().getTime();\n const subscribers = [];\n\n Object.entries(this.campers).forEach((camper) => {\n const id = camper[0];\n const time = camper[1];\n\n // Subscribe if they've been camping for a minute\n if (time < now - SUBSCRIPTION_DELAY) {\n delete this.campers[id];\n this.subscribers[id] = null;\n subscribers.push(id);\n }\n });\n\n return subscribers;\n }\n\n /**\n * Determine if we should re-subscribe or remove users' subscriptions.\n * @returns {Array}: User ids to re-subscribe.\n */\n checkSubscriptions() {\n const now = new Date().getTime();\n\n const renewIds = [];\n\n Object.entries(this.subscribers).forEach((subscription) => {\n const id = subscription[0];\n const expiration = subscription[1];\n\n if (expiration) {\n // Renew subscription if they're about to expire\n if (this.watchers[id] && now > expiration - PREMATURE_EXPIRATION_SUBSCRIPTION_TIME) {\n renewIds.push(id);\n } else if (now > expiration) {\n delete this.subscribers[id];\n }\n }\n });\n\n return renewIds;\n }\n\n /**\n * Remove expired presence objects.\n * @returns {undefined}\n */\n cleanPresences() {\n const trash = [];\n const tenMinutesAgo = new Date().getTime() - EXPIRED_PRESENCE_TIME;\n\n Object.entries(this.presences).forEach((presence) => {\n const id = presence[0];\n const lastUpdated = presence[1];\n\n // Delete the object if it is stale\n if (lastUpdated < tenMinutesAgo) {\n delete this.presences[id];\n trash.push(id);\n }\n });\n\n // Tells client to delete it too\n if (trash.length) {\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\n type: ENVELOPE_TYPE.DELETE,\n payload: trash,\n });\n }\n }\n\n /**\n * Execute chores on an interval.\n * Checks if we should make new subscribe,\n * checks if we should re-subscribe,\n * removes expired subscriptions,\n * removes expired presence objects.\n * @returns {undefined}\n */\n groundskeeper() {\n const campers = this.checkCampers();\n const renewSubscriptions = this.checkSubscriptions();\n\n const ids = [...campers, ...renewSubscriptions];\n\n if (ids.length) {\n this.webex.internal.presence.subscribe(ids).then((body) => {\n const now = new Date().getTime();\n\n body.responses.forEach((response) => {\n if (response.responseCode === 200) {\n const ttl = response.subscriptionTtl * 1000;\n\n this.subscribers[response.subject] = now + ttl;\n this.presences[response.status.subject] = now;\n } else {\n // If it errored for any reason, set the ttl so we clean it out eventually\n this.subscribers[response.subject] = now + DEFAULT_SUBSCRIPTION_TTL;\n }\n });\n });\n }\n\n this.cleanPresences();\n }\n}\n"],"mappings":"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"}
|
package/dist/presence.js
CHANGED
|
@@ -1,40 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
|
|
11
8
|
exports.default = void 0;
|
|
12
|
-
|
|
13
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
|
|
14
|
-
|
|
15
10
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
16
|
-
|
|
17
11
|
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/is-array"));
|
|
18
|
-
|
|
19
12
|
require("@webex/internal-plugin-device");
|
|
20
|
-
|
|
21
13
|
var _webexCore = require("@webex/webex-core");
|
|
22
|
-
|
|
23
14
|
var _presenceBatcher = _interopRequireDefault(require("./presence-batcher"));
|
|
24
|
-
|
|
25
15
|
var _presenceWorker = _interopRequireDefault(require("./presence-worker"));
|
|
26
|
-
|
|
27
16
|
/*!
|
|
28
17
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
29
18
|
*/
|
|
19
|
+
|
|
30
20
|
var defaultSubscriptionTtl = 600;
|
|
31
21
|
var USER = 'user';
|
|
32
22
|
var USER_PRESENCE_ENABLED = 'user-presence-enabled';
|
|
23
|
+
|
|
33
24
|
/**
|
|
34
25
|
* @class
|
|
35
26
|
* @extends WebexPlugin
|
|
36
27
|
*/
|
|
37
|
-
|
|
38
28
|
var Presence = _webexCore.WebexPlugin.extend({
|
|
39
29
|
namespace: 'Presence',
|
|
40
30
|
children: {
|
|
@@ -48,21 +38,18 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
48
38
|
type: 'any'
|
|
49
39
|
}
|
|
50
40
|
},
|
|
51
|
-
|
|
52
41
|
/**
|
|
53
42
|
* Initialize the presence worker for client
|
|
54
43
|
* @returns {undefined}
|
|
55
44
|
*/
|
|
56
45
|
initialize: function initialize() {
|
|
57
46
|
var _this = this;
|
|
58
|
-
|
|
59
47
|
this.webex.once('ready', function () {
|
|
60
48
|
if (_this.config.initializeWorker) {
|
|
61
49
|
_this.worker.initialize(_this.webex);
|
|
62
50
|
}
|
|
63
51
|
});
|
|
64
52
|
},
|
|
65
|
-
|
|
66
53
|
/**
|
|
67
54
|
* Trigger an event.
|
|
68
55
|
* @param {string} event
|
|
@@ -74,7 +61,6 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
74
61
|
this.trigger(event, payload);
|
|
75
62
|
}
|
|
76
63
|
},
|
|
77
|
-
|
|
78
64
|
/**
|
|
79
65
|
* Enables presence feature
|
|
80
66
|
* @returns {Promise<boolean>} resolves with true, if successful
|
|
@@ -84,7 +70,6 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
84
70
|
return response.value;
|
|
85
71
|
});
|
|
86
72
|
},
|
|
87
|
-
|
|
88
73
|
/**
|
|
89
74
|
* Disables presence feature
|
|
90
75
|
* @returns {Promise<boolean>} resolves with false, if successful
|
|
@@ -94,7 +79,6 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
94
79
|
return response.value;
|
|
95
80
|
});
|
|
96
81
|
},
|
|
97
|
-
|
|
98
82
|
/**
|
|
99
83
|
* Returns true if presence is enabled, false otherwise
|
|
100
84
|
* @returns {Promise<boolean>} resolves with true if presence is enabled
|
|
@@ -102,7 +86,6 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
102
86
|
isEnabled: function isEnabled() {
|
|
103
87
|
return this.webex.internal.feature.getFeature(USER, USER_PRESENCE_ENABLED);
|
|
104
88
|
},
|
|
105
|
-
|
|
106
89
|
/**
|
|
107
90
|
* The status object
|
|
108
91
|
* @typedef {Object} PresenceStatusObject
|
|
@@ -122,7 +105,6 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
122
105
|
* @property {string} lastSeenDeviceUrl: Resource Identifier of the last device to post presence activity for
|
|
123
106
|
* this user.
|
|
124
107
|
*/
|
|
125
|
-
|
|
126
108
|
/**
|
|
127
109
|
* Gets the current presence status of a given person id
|
|
128
110
|
* @param {string} personId
|
|
@@ -132,7 +114,6 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
132
114
|
if (!personId) {
|
|
133
115
|
return _promise.default.reject(new Error('A person id is required'));
|
|
134
116
|
}
|
|
135
|
-
|
|
136
117
|
return this.webex.request({
|
|
137
118
|
method: 'GET',
|
|
138
119
|
service: 'apheleia',
|
|
@@ -141,12 +122,10 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
141
122
|
return response.body;
|
|
142
123
|
});
|
|
143
124
|
},
|
|
144
|
-
|
|
145
125
|
/**
|
|
146
126
|
* @typedef {Object} PresenceStatusesObject
|
|
147
127
|
* @property {Array.<PresenceStatusObject>} statusList
|
|
148
128
|
*/
|
|
149
|
-
|
|
150
129
|
/**
|
|
151
130
|
* Gets the current presence statuses of an array of people ids
|
|
152
131
|
* @param {Array} personIds
|
|
@@ -154,11 +133,9 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
154
133
|
*/
|
|
155
134
|
list: function list(personIds) {
|
|
156
135
|
var _this2 = this;
|
|
157
|
-
|
|
158
136
|
if (!personIds || !(0, _isArray.default)(personIds)) {
|
|
159
137
|
return _promise.default.reject(new Error('An array of person ids is required'));
|
|
160
138
|
}
|
|
161
|
-
|
|
162
139
|
return _promise.default.all(personIds.map(function (id) {
|
|
163
140
|
return _this2.batcher.request(id);
|
|
164
141
|
})).then(function (presences) {
|
|
@@ -167,7 +144,6 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
167
144
|
};
|
|
168
145
|
});
|
|
169
146
|
},
|
|
170
|
-
|
|
171
147
|
/**
|
|
172
148
|
* Subscribes to a person's presence status updates
|
|
173
149
|
* Updates are sent via mercury events `apheleia.subscription_update`
|
|
@@ -177,27 +153,22 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
177
153
|
*/
|
|
178
154
|
subscribe: function subscribe(personIds) {
|
|
179
155
|
var _this3 = this;
|
|
180
|
-
|
|
181
156
|
var subscriptionTtl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultSubscriptionTtl;
|
|
182
157
|
var subjects;
|
|
183
158
|
var batches = [];
|
|
184
159
|
var batchLimit = 50;
|
|
185
|
-
|
|
186
160
|
if (!personIds) {
|
|
187
161
|
return _promise.default.reject(new Error('A person id is required'));
|
|
188
162
|
}
|
|
189
|
-
|
|
190
163
|
if ((0, _isArray.default)(personIds)) {
|
|
191
164
|
subjects = personIds;
|
|
192
165
|
} else {
|
|
193
166
|
subjects = [personIds];
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
|
|
167
|
+
}
|
|
168
|
+
// Limit batches to 50 ids per request
|
|
197
169
|
for (var i = 0; i < subjects.length; i += batchLimit) {
|
|
198
170
|
batches.push(subjects.slice(i, i + batchLimit));
|
|
199
171
|
}
|
|
200
|
-
|
|
201
172
|
return _promise.default.all(batches.map(function (ids) {
|
|
202
173
|
return _this3.webex.request({
|
|
203
174
|
method: 'POST',
|
|
@@ -213,13 +184,11 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
213
184
|
});
|
|
214
185
|
})).then(function (idBatches) {
|
|
215
186
|
var _ref;
|
|
216
|
-
|
|
217
187
|
return {
|
|
218
188
|
responses: (_ref = []).concat.apply(_ref, (0, _toConsumableArray2.default)(idBatches))
|
|
219
189
|
};
|
|
220
190
|
});
|
|
221
191
|
},
|
|
222
|
-
|
|
223
192
|
/**
|
|
224
193
|
* Unsubscribes from a person or group of people's presence subscription
|
|
225
194
|
* @param {string | Array} personIds
|
|
@@ -227,17 +196,14 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
227
196
|
*/
|
|
228
197
|
unsubscribe: function unsubscribe(personIds) {
|
|
229
198
|
var subjects;
|
|
230
|
-
|
|
231
199
|
if (!personIds) {
|
|
232
200
|
return _promise.default.reject(new Error('A person id is required'));
|
|
233
201
|
}
|
|
234
|
-
|
|
235
202
|
if ((0, _isArray.default)(personIds)) {
|
|
236
203
|
subjects = personIds;
|
|
237
204
|
} else {
|
|
238
205
|
subjects = [personIds];
|
|
239
206
|
}
|
|
240
|
-
|
|
241
207
|
return this.webex.request({
|
|
242
208
|
method: 'POST',
|
|
243
209
|
api: 'apheleia',
|
|
@@ -249,7 +215,6 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
249
215
|
}
|
|
250
216
|
});
|
|
251
217
|
},
|
|
252
|
-
|
|
253
218
|
/**
|
|
254
219
|
* Sets the status of the current user
|
|
255
220
|
* @param {string} status - active | inactive | ooo | dnd
|
|
@@ -260,7 +225,6 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
260
225
|
if (!status) {
|
|
261
226
|
return _promise.default.reject(new Error('A status is required'));
|
|
262
227
|
}
|
|
263
|
-
|
|
264
228
|
return this.webex.request({
|
|
265
229
|
method: 'POST',
|
|
266
230
|
api: 'apheleia',
|
|
@@ -274,7 +238,6 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
274
238
|
return response.body;
|
|
275
239
|
});
|
|
276
240
|
},
|
|
277
|
-
|
|
278
241
|
/**
|
|
279
242
|
* Retrieves and subscribes to a user's presence.
|
|
280
243
|
* @param {string} id
|
|
@@ -283,7 +246,6 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
283
246
|
enqueue: function enqueue(id) {
|
|
284
247
|
return this.worker.enqueue(id);
|
|
285
248
|
},
|
|
286
|
-
|
|
287
249
|
/**
|
|
288
250
|
* Retract from subscribing to a user's presence.
|
|
289
251
|
* @param {string} id
|
|
@@ -292,9 +254,8 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
292
254
|
dequeue: function dequeue(id) {
|
|
293
255
|
return this.worker.dequeue(id);
|
|
294
256
|
},
|
|
295
|
-
version: "3.0.0-beta.
|
|
257
|
+
version: "3.0.0-beta.151"
|
|
296
258
|
});
|
|
297
|
-
|
|
298
259
|
var _default2 = Presence;
|
|
299
260
|
exports.default = _default2;
|
|
300
261
|
//# sourceMappingURL=presence.js.map
|
package/dist/presence.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["defaultSubscriptionTtl","USER","USER_PRESENCE_ENABLED","Presence","WebexPlugin","extend","namespace","children","batcher","PresenceBatcher","session","worker","default","PresenceWorker","type","initialize","webex","once","config","initializeWorker","emitEvent","event","payload","trigger","enable","internal","feature","setFeature","then","response","value","disable","isEnabled","getFeature","get","personId","reject","Error","request","method","service","resource","body","list","personIds","all","map","id","presences","statusList","subscribe","subscriptionTtl","subjects","batches","batchLimit","i","length","push","slice","ids","api","includeStatus","responses","idBatches","concat","unsubscribe","setStatus","status","ttl","subject","device","userId","eventType","enqueue","dequeue"],"sources":["presence.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\n\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport PresenceBatcher from './presence-batcher';\nimport PresenceWorker from './presence-worker';\n\nconst defaultSubscriptionTtl = 600;\nconst USER = 'user';\nconst USER_PRESENCE_ENABLED = 'user-presence-enabled';\n\n/**\n * @class\n * @extends WebexPlugin\n */\nconst Presence = WebexPlugin.extend({\n namespace: 'Presence',\n\n children: {\n batcher: PresenceBatcher,\n },\n\n session: {\n worker: {\n default() {\n return new PresenceWorker();\n },\n type: 'any',\n },\n },\n\n /**\n * Initialize the presence worker for client\n * @returns {undefined}\n */\n initialize() {\n this.webex.once('ready', () => {\n if (this.config.initializeWorker) {\n this.worker.initialize(this.webex);\n }\n });\n },\n\n /**\n * Trigger an event.\n * @param {string} event\n * @param {string} payload\n * @returns {undefined}\n */\n emitEvent(event, payload) {\n if (payload.type && payload.payload) {\n this.trigger(event, payload);\n }\n },\n\n /**\n * Enables presence feature\n * @returns {Promise<boolean>} resolves with true, if successful\n */\n enable() {\n return this.webex.internal.feature\n .setFeature(USER, USER_PRESENCE_ENABLED, true)\n .then((response) => response.value);\n },\n\n /**\n * Disables presence feature\n * @returns {Promise<boolean>} resolves with false, if successful\n */\n disable() {\n return this.webex.internal.feature\n .setFeature(USER, USER_PRESENCE_ENABLED, false)\n .then((response) => response.value);\n },\n\n /**\n * Returns true if presence is enabled, false otherwise\n * @returns {Promise<boolean>} resolves with true if presence is enabled\n */\n isEnabled() {\n return this.webex.internal.feature.getFeature(USER, USER_PRESENCE_ENABLED);\n },\n\n /**\n * The status object\n * @typedef {Object} PresenceStatusObject\n * @property {string} url: Public resource identifier for presence\n * @property {string} subject: User ID for the user the returned composed presence represents\n * @property {string} status: Current composed presence state\n * @property {string} statusTime: DateTime in RFC3339 format that the current status began\n * @property {string} lastActive: DateTime in RFC3339 format that the service last saw activity from the user.\n * @property {string} expires: DEPRECATED - DateTime in RFC3339 format that represents when the current\n * status will expire. Will not exist if expiresTTL is -1.\n * @property {Number} expiresTTL: TTL in seconds until the status will expire. If TTL is -1 the current\n * status has no known expiration.\n * @property {string} expiresTime: DateTime in RFC3339 format that the current status will expire. Missing\n * field means no known expiration.\n * @property {Object} vectorCounters: Used for packet ordering and tracking.\n * @property {Boolean} suppressNotifications: Indicates if notification suppression is recommended for this status.\n * @property {string} lastSeenDeviceUrl: Resource Identifier of the last device to post presence activity for\n * this user.\n */\n\n /**\n * Gets the current presence status of a given person id\n * @param {string} personId\n * @returns {Promise<PresenceStatusObject>} resolves with status object of person\n */\n get(personId) {\n if (!personId) {\n return Promise.reject(new Error('A person id is required'));\n }\n\n return this.webex\n .request({\n method: 'GET',\n service: 'apheleia',\n resource: `compositions?userId=${personId}`,\n })\n .then((response) => response.body);\n },\n\n /**\n * @typedef {Object} PresenceStatusesObject\n * @property {Array.<PresenceStatusObject>} statusList\n */\n /**\n * Gets the current presence statuses of an array of people ids\n * @param {Array} personIds\n * @returns {Promise<PresenceStatusesObject>} resolves with an object with key of `statusList` array\n */\n list(personIds) {\n if (!personIds || !Array.isArray(personIds)) {\n return Promise.reject(new Error('An array of person ids is required'));\n }\n\n return Promise.all(personIds.map((id) => this.batcher.request(id))).then((presences) => ({\n statusList: presences,\n }));\n },\n\n /**\n * Subscribes to a person's presence status updates\n * Updates are sent via mercury events `apheleia.subscription_update`\n * @param {string | Array} personIds\n * @param {number} subscriptionTtl - Requested length of subscriptions in seconds.\n * @returns {Promise}\n */\n subscribe(personIds, subscriptionTtl = defaultSubscriptionTtl) {\n let subjects;\n const batches = [];\n const batchLimit = 50;\n\n if (!personIds) {\n return Promise.reject(new Error('A person id is required'));\n }\n if (Array.isArray(personIds)) {\n subjects = personIds;\n } else {\n subjects = [personIds];\n }\n // Limit batches to 50 ids per request\n for (let i = 0; i < subjects.length; i += batchLimit) {\n batches.push(subjects.slice(i, i + batchLimit));\n }\n\n return Promise.all(\n batches.map((ids) =>\n this.webex\n .request({\n method: 'POST',\n api: 'apheleia',\n resource: 'subscriptions',\n body: {\n subjects: ids,\n subscriptionTtl,\n includeStatus: true,\n },\n })\n .then((response) => response.body.responses)\n )\n ).then((idBatches) => ({responses: [].concat(...idBatches)}));\n },\n\n /**\n * Unsubscribes from a person or group of people's presence subscription\n * @param {string | Array} personIds\n * @returns {Promise}\n */\n unsubscribe(personIds) {\n let subjects;\n\n if (!personIds) {\n return Promise.reject(new Error('A person id is required'));\n }\n if (Array.isArray(personIds)) {\n subjects = personIds;\n } else {\n subjects = [personIds];\n }\n\n return this.webex.request({\n method: 'POST',\n api: 'apheleia',\n resource: 'subscriptions',\n body: {\n subjects,\n subscriptionTtl: 0,\n includeStatus: true,\n },\n });\n },\n\n /**\n * Sets the status of the current user\n * @param {string} status - active | inactive | ooo | dnd\n * @param {number} ttl - Time To Live for the event in seconds.\n * @returns {Promise}\n */\n setStatus(status, ttl) {\n if (!status) {\n return Promise.reject(new Error('A status is required'));\n }\n\n return this.webex\n .request({\n method: 'POST',\n api: 'apheleia',\n resource: 'events',\n body: {\n subject: this.webex.internal.device.userId,\n eventType: status,\n ttl,\n },\n })\n .then((response) => response.body);\n },\n\n /**\n * Retrieves and subscribes to a user's presence.\n * @param {string} id\n * @returns {undefined}\n */\n enqueue(id) {\n return this.worker.enqueue(id);\n },\n\n /**\n * Retract from subscribing to a user's presence.\n * @param {string} id\n * @returns {undefined}\n */\n dequeue(id) {\n return this.worker.dequeue(id);\n },\n});\n\nexport default Presence;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["defaultSubscriptionTtl","USER","USER_PRESENCE_ENABLED","Presence","WebexPlugin","extend","namespace","children","batcher","PresenceBatcher","session","worker","default","PresenceWorker","type","initialize","webex","once","config","initializeWorker","emitEvent","event","payload","trigger","enable","internal","feature","setFeature","then","response","value","disable","isEnabled","getFeature","get","personId","reject","Error","request","method","service","resource","body","list","personIds","all","map","id","presences","statusList","subscribe","subscriptionTtl","subjects","batches","batchLimit","i","length","push","slice","ids","api","includeStatus","responses","idBatches","concat","unsubscribe","setStatus","status","ttl","subject","device","userId","eventType","enqueue","dequeue"],"sources":["presence.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\n\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport PresenceBatcher from './presence-batcher';\nimport PresenceWorker from './presence-worker';\n\nconst defaultSubscriptionTtl = 600;\nconst USER = 'user';\nconst USER_PRESENCE_ENABLED = 'user-presence-enabled';\n\n/**\n * @class\n * @extends WebexPlugin\n */\nconst Presence = WebexPlugin.extend({\n namespace: 'Presence',\n\n children: {\n batcher: PresenceBatcher,\n },\n\n session: {\n worker: {\n default() {\n return new PresenceWorker();\n },\n type: 'any',\n },\n },\n\n /**\n * Initialize the presence worker for client\n * @returns {undefined}\n */\n initialize() {\n this.webex.once('ready', () => {\n if (this.config.initializeWorker) {\n this.worker.initialize(this.webex);\n }\n });\n },\n\n /**\n * Trigger an event.\n * @param {string} event\n * @param {string} payload\n * @returns {undefined}\n */\n emitEvent(event, payload) {\n if (payload.type && payload.payload) {\n this.trigger(event, payload);\n }\n },\n\n /**\n * Enables presence feature\n * @returns {Promise<boolean>} resolves with true, if successful\n */\n enable() {\n return this.webex.internal.feature\n .setFeature(USER, USER_PRESENCE_ENABLED, true)\n .then((response) => response.value);\n },\n\n /**\n * Disables presence feature\n * @returns {Promise<boolean>} resolves with false, if successful\n */\n disable() {\n return this.webex.internal.feature\n .setFeature(USER, USER_PRESENCE_ENABLED, false)\n .then((response) => response.value);\n },\n\n /**\n * Returns true if presence is enabled, false otherwise\n * @returns {Promise<boolean>} resolves with true if presence is enabled\n */\n isEnabled() {\n return this.webex.internal.feature.getFeature(USER, USER_PRESENCE_ENABLED);\n },\n\n /**\n * The status object\n * @typedef {Object} PresenceStatusObject\n * @property {string} url: Public resource identifier for presence\n * @property {string} subject: User ID for the user the returned composed presence represents\n * @property {string} status: Current composed presence state\n * @property {string} statusTime: DateTime in RFC3339 format that the current status began\n * @property {string} lastActive: DateTime in RFC3339 format that the service last saw activity from the user.\n * @property {string} expires: DEPRECATED - DateTime in RFC3339 format that represents when the current\n * status will expire. Will not exist if expiresTTL is -1.\n * @property {Number} expiresTTL: TTL in seconds until the status will expire. If TTL is -1 the current\n * status has no known expiration.\n * @property {string} expiresTime: DateTime in RFC3339 format that the current status will expire. Missing\n * field means no known expiration.\n * @property {Object} vectorCounters: Used for packet ordering and tracking.\n * @property {Boolean} suppressNotifications: Indicates if notification suppression is recommended for this status.\n * @property {string} lastSeenDeviceUrl: Resource Identifier of the last device to post presence activity for\n * this user.\n */\n\n /**\n * Gets the current presence status of a given person id\n * @param {string} personId\n * @returns {Promise<PresenceStatusObject>} resolves with status object of person\n */\n get(personId) {\n if (!personId) {\n return Promise.reject(new Error('A person id is required'));\n }\n\n return this.webex\n .request({\n method: 'GET',\n service: 'apheleia',\n resource: `compositions?userId=${personId}`,\n })\n .then((response) => response.body);\n },\n\n /**\n * @typedef {Object} PresenceStatusesObject\n * @property {Array.<PresenceStatusObject>} statusList\n */\n /**\n * Gets the current presence statuses of an array of people ids\n * @param {Array} personIds\n * @returns {Promise<PresenceStatusesObject>} resolves with an object with key of `statusList` array\n */\n list(personIds) {\n if (!personIds || !Array.isArray(personIds)) {\n return Promise.reject(new Error('An array of person ids is required'));\n }\n\n return Promise.all(personIds.map((id) => this.batcher.request(id))).then((presences) => ({\n statusList: presences,\n }));\n },\n\n /**\n * Subscribes to a person's presence status updates\n * Updates are sent via mercury events `apheleia.subscription_update`\n * @param {string | Array} personIds\n * @param {number} subscriptionTtl - Requested length of subscriptions in seconds.\n * @returns {Promise}\n */\n subscribe(personIds, subscriptionTtl = defaultSubscriptionTtl) {\n let subjects;\n const batches = [];\n const batchLimit = 50;\n\n if (!personIds) {\n return Promise.reject(new Error('A person id is required'));\n }\n if (Array.isArray(personIds)) {\n subjects = personIds;\n } else {\n subjects = [personIds];\n }\n // Limit batches to 50 ids per request\n for (let i = 0; i < subjects.length; i += batchLimit) {\n batches.push(subjects.slice(i, i + batchLimit));\n }\n\n return Promise.all(\n batches.map((ids) =>\n this.webex\n .request({\n method: 'POST',\n api: 'apheleia',\n resource: 'subscriptions',\n body: {\n subjects: ids,\n subscriptionTtl,\n includeStatus: true,\n },\n })\n .then((response) => response.body.responses)\n )\n ).then((idBatches) => ({responses: [].concat(...idBatches)}));\n },\n\n /**\n * Unsubscribes from a person or group of people's presence subscription\n * @param {string | Array} personIds\n * @returns {Promise}\n */\n unsubscribe(personIds) {\n let subjects;\n\n if (!personIds) {\n return Promise.reject(new Error('A person id is required'));\n }\n if (Array.isArray(personIds)) {\n subjects = personIds;\n } else {\n subjects = [personIds];\n }\n\n return this.webex.request({\n method: 'POST',\n api: 'apheleia',\n resource: 'subscriptions',\n body: {\n subjects,\n subscriptionTtl: 0,\n includeStatus: true,\n },\n });\n },\n\n /**\n * Sets the status of the current user\n * @param {string} status - active | inactive | ooo | dnd\n * @param {number} ttl - Time To Live for the event in seconds.\n * @returns {Promise}\n */\n setStatus(status, ttl) {\n if (!status) {\n return Promise.reject(new Error('A status is required'));\n }\n\n return this.webex\n .request({\n method: 'POST',\n api: 'apheleia',\n resource: 'events',\n body: {\n subject: this.webex.internal.device.userId,\n eventType: status,\n ttl,\n },\n })\n .then((response) => response.body);\n },\n\n /**\n * Retrieves and subscribes to a user's presence.\n * @param {string} id\n * @returns {undefined}\n */\n enqueue(id) {\n return this.worker.enqueue(id);\n },\n\n /**\n * Retract from subscribing to a user's presence.\n * @param {string} id\n * @returns {undefined}\n */\n dequeue(id) {\n return this.worker.dequeue(id);\n },\n});\n\nexport default Presence;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/internal-plugin-presence",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.151",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
"sinon": "^9.2.4"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
27
|
-
"@webex/internal-plugin-mercury": "3.0.0-beta.
|
|
28
|
-
"@webex/internal-plugin-presence": "3.0.0-beta.
|
|
29
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
30
|
-
"@webex/test-helper-mocha": "3.0.0-beta.
|
|
31
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
32
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
33
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
26
|
+
"@webex/internal-plugin-device": "3.0.0-beta.151",
|
|
27
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.151",
|
|
28
|
+
"@webex/internal-plugin-presence": "3.0.0-beta.151",
|
|
29
|
+
"@webex/test-helper-chai": "3.0.0-beta.151",
|
|
30
|
+
"@webex/test-helper-mocha": "3.0.0-beta.151",
|
|
31
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.151",
|
|
32
|
+
"@webex/test-helper-test-users": "3.0.0-beta.151",
|
|
33
|
+
"@webex/webex-core": "3.0.0-beta.151",
|
|
34
34
|
"lodash": "^4.17.21"
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -11,7 +11,8 @@ import testUsers from '@webex/test-helper-test-users';
|
|
|
11
11
|
import {expectEvent} from '@webex/test-helper-mocha';
|
|
12
12
|
import sinon from 'sinon';
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
// SPARK-413317
|
|
15
|
+
describe.skip('plugin-presence', function () {
|
|
15
16
|
this.timeout(10000);
|
|
16
17
|
describe('Presence', () => {
|
|
17
18
|
let mccoy, spock;
|