@webex/internal-plugin-presence 3.0.0-bnr.5 → 3.0.0-next.1
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/.eslintrc.js +6 -0
- package/babel.config.js +3 -0
- package/dist/config.js +1 -2
- package/dist/config.js.map +1 -1
- package/dist/constants.js +14 -20
- package/dist/constants.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/presence-batcher.js +1 -2
- package/dist/presence-batcher.js.map +1 -1
- package/dist/presence-worker.js +3 -4
- package/dist/presence-worker.js.map +1 -1
- package/dist/presence.js +2 -3
- package/dist/presence.js.map +1 -1
- package/jest.config.js +3 -0
- package/package.json +30 -11
- package/process +1 -0
- package/test/integration/spec/presence.js +2 -1
- package/test/unit/spec/presence-worker.js +7 -4
- package/test/unit/spec/presence.js +2 -1
- package/dist/internal-plugin-presence.d.ts +0 -8
- package/dist/tsdoc-metadata.json +0 -11
- package/dist/types/config.d.ts +0 -8
- package/dist/types/constants.d.ts +0 -14
- package/dist/types/index.d.ts +0 -1
- package/dist/types/presence-batcher.d.ts +0 -6
- package/dist/types/presence-worker.d.ts +0 -68
- package/dist/types/presence.d.ts +0 -6
package/.eslintrc.js
ADDED
package/babel.config.js
ADDED
package/dist/config.js
CHANGED
|
@@ -8,12 +8,11 @@ exports.default = void 0;
|
|
|
8
8
|
/*!
|
|
9
9
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
10
10
|
*/
|
|
11
|
-
var _default = {
|
|
11
|
+
var _default = exports.default = {
|
|
12
12
|
presence: {
|
|
13
13
|
batcherWait: 50,
|
|
14
14
|
batcherMaxCalls: 50,
|
|
15
15
|
batcherMaxWait: 150
|
|
16
16
|
}
|
|
17
17
|
};
|
|
18
|
-
exports.default = _default;
|
|
19
18
|
//# sourceMappingURL=config.js.map
|
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":";;;;;;;AAAA;AACA;AACA;AAFA,
|
|
1
|
+
{"version":3,"names":["_default","exports","default","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,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAIe;EACbC,QAAQ,EAAE;IACRC,WAAW,EAAE,EAAE;IACfC,eAAe,EAAE,EAAE;IACnBC,cAAc,EAAE;EAClB;AACF,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -5,28 +5,22 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
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;
|
|
8
|
-
var GROUNDSKEEPER_INTERVAL = 20 * 1000; // 20 seconds in ms
|
|
9
|
-
|
|
10
|
-
var FETCH_DELAY = 300; // ms
|
|
11
|
-
|
|
12
|
-
var UPDATE_PRESENCE_DELAY = 60 * 1000; // 1 minute in ms
|
|
13
|
-
exports.
|
|
14
|
-
|
|
15
|
-
exports.
|
|
16
|
-
var
|
|
17
|
-
exports.
|
|
18
|
-
|
|
19
|
-
exports.
|
|
20
|
-
var
|
|
21
|
-
exports.
|
|
22
|
-
var APHELEIA_SUBSCRIPTION_UPDATE = 'event:apheleia.subscription_update';
|
|
23
|
-
exports.APHELEIA_SUBSCRIPTION_UPDATE = APHELEIA_SUBSCRIPTION_UPDATE;
|
|
24
|
-
var PRESENCE_UPDATE = 'updated';
|
|
25
|
-
exports.PRESENCE_UPDATE = PRESENCE_UPDATE;
|
|
26
|
-
var ENVELOPE_TYPE = {
|
|
8
|
+
var GROUNDSKEEPER_INTERVAL = exports.GROUNDSKEEPER_INTERVAL = 20 * 1000; // 20 seconds in ms
|
|
9
|
+
|
|
10
|
+
var FETCH_DELAY = exports.FETCH_DELAY = 300; // ms
|
|
11
|
+
|
|
12
|
+
var UPDATE_PRESENCE_DELAY = exports.UPDATE_PRESENCE_DELAY = 60 * 1000; // 1 minute in ms
|
|
13
|
+
var EXPIRED_PRESENCE_TIME = exports.EXPIRED_PRESENCE_TIME = 10 * 60 * 1000; // 10 minutes in ms
|
|
14
|
+
|
|
15
|
+
var SUBSCRIPTION_DELAY = exports.SUBSCRIPTION_DELAY = 60 * 1000; // 1 minute in ms
|
|
16
|
+
var PREMATURE_EXPIRATION_SUBSCRIPTION_TIME = exports.PREMATURE_EXPIRATION_SUBSCRIPTION_TIME = 60 * 1000; // 1 minute in ms
|
|
17
|
+
var DEFAULT_SUBSCRIPTION_TTL = exports.DEFAULT_SUBSCRIPTION_TTL = 10 * 60 * 1000; // 10 minutes in ms
|
|
18
|
+
|
|
19
|
+
var APHELEIA_SUBSCRIPTION_UPDATE = exports.APHELEIA_SUBSCRIPTION_UPDATE = 'event:apheleia.subscription_update';
|
|
20
|
+
var PRESENCE_UPDATE = exports.PRESENCE_UPDATE = 'updated';
|
|
21
|
+
var ENVELOPE_TYPE = exports.ENVELOPE_TYPE = {
|
|
27
22
|
SUBSCRIPTION: 'subscription',
|
|
28
23
|
PRESENCE: 'presence',
|
|
29
24
|
DELETE: 'delete'
|
|
30
25
|
};
|
|
31
|
-
exports.ENVELOPE_TYPE = ENVELOPE_TYPE;
|
|
32
26
|
//# sourceMappingURL=constants.js.map
|
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":";;;;;;;AAAO,IAAMA,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC
|
|
1
|
+
{"version":3,"names":["GROUNDSKEEPER_INTERVAL","exports","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,GAAAC,OAAA,CAAAD,sBAAA,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;;AAE1C,IAAME,WAAW,GAAAD,OAAA,CAAAC,WAAA,GAAG,GAAG,CAAC,CAAC;;AAEzB,IAAMC,qBAAqB,GAAAF,OAAA,CAAAE,qBAAA,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACzC,IAAMC,qBAAqB,GAAAH,OAAA,CAAAG,qBAAA,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;;AAE9C,IAAMC,kBAAkB,GAAAJ,OAAA,CAAAI,kBAAA,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACtC,IAAMC,sCAAsC,GAAAL,OAAA,CAAAK,sCAAA,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAC1D,IAAMC,wBAAwB,GAAAN,OAAA,CAAAM,wBAAA,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;;AAEjD,IAAMC,4BAA4B,GAAAP,OAAA,CAAAO,4BAAA,GAAG,oCAAoC;AACzE,IAAMC,eAAe,GAAAR,OAAA,CAAAQ,eAAA,GAAG,SAAS;AAEjC,IAAMC,aAAa,GAAAT,OAAA,CAAAS,aAAA,GAAG;EAC3BC,YAAY,EAAE,cAAc;EAC5BC,QAAQ,EAAE,UAAU;EACpBC,MAAM,EAAE;AACV,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,9 +12,9 @@ _Object$defineProperty(exports, "default", {
|
|
|
12
12
|
}
|
|
13
13
|
});
|
|
14
14
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
15
|
-
var _has2 = _interopRequireDefault(require("lodash/has"));
|
|
16
15
|
require("@webex/internal-plugin-device");
|
|
17
16
|
var _webexCore = require("@webex/webex-core");
|
|
17
|
+
var _lodash = require("lodash");
|
|
18
18
|
var _presence = _interopRequireDefault(require("./presence"));
|
|
19
19
|
var _config = _interopRequireDefault(require("./config"));
|
|
20
20
|
/*!
|
|
@@ -28,7 +28,7 @@ var _config = _interopRequireDefault(require("./config"));
|
|
|
28
28
|
direction: 'inbound',
|
|
29
29
|
test: function test(ctx, response) {
|
|
30
30
|
// POST to /apheleia/api/v1/events
|
|
31
|
-
return _promise.default.resolve((0,
|
|
31
|
+
return _promise.default.resolve((0, _lodash.has)(response, 'body.eventType') && (0, _lodash.has)(response, 'body.subject'));
|
|
32
32
|
},
|
|
33
33
|
extract: function extract(response) {
|
|
34
34
|
return _promise.default.resolve(response);
|
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":["require","_webexCore","_lodash","_presence","_interopRequireDefault","_config","registerInternalPlugin","Presence","payloadTransformer","predicates","name","direction","test","ctx","response","_promise","default","resolve","has","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":";;;;;;;;;;;;;;AAIAA,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAEA,IAAAG,SAAA,GAAAC,sBAAA,CAAAJ,OAAA;AACA,IAAAK,OAAA,GAAAD,sBAAA,CAAAJ,OAAA;AAVA;AACA;AACA;;AAUA,IAAAM,iCAAsB,EAAC,UAAU,EAAEC,iBAAQ,EAAE;EAC3CC,kBAAkB,EAAE;IAClBC,UAAU,EAAE,CACV;MACEC,IAAI,EAAE,+BAA+B;MACrCC,SAAS,EAAE,SAAS;MACpBC,IAAI,WAAAA,KAACC,GAAG,EAAEC,QAAQ,EAAE;QAClB;QACA,OAAOC,QAAA,CAAAC,OAAA,CAAQC,OAAO,CAAC,IAAAC,WAAG,EAACJ,QAAQ,EAAE,gBAAgB,CAAC,IAAI,IAAAI,WAAG,EAACJ,QAAQ,EAAE,cAAc,CAAC,CAAC;MAC1F,CAAC;MACDK,OAAO,WAAAA,QAACL,QAAQ,EAAE;QAChB,OAAOC,QAAA,CAAAC,OAAA,CAAQC,OAAO,CAACH,QAAQ,CAAC;MAClC;IACF,CAAC,CACF;IACDM,UAAU,EAAE,CACV;MACEV,IAAI,EAAE,+BAA+B;MACrCC,SAAS,EAAE,SAAS;MACpBU,EAAE,WAAAA,GAACR,GAAG,EAAEC,QAAQ,EAAE;QAChBA,QAAQ,CAACQ,IAAI,CAACC,MAAM,GAAGT,QAAQ,CAACQ,IAAI,CAACE,SAAS;MAChD;IACF,CAAC;EAEL,CAAC;EACDC,MAAM,EAANA;AACF,CAAC,CAAC"}
|
package/dist/presence-batcher.js
CHANGED
|
@@ -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":";;;;;;;;;AAIA;AAJA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA,
|
|
1
|
+
{"version":3,"names":["_webexCore","require","PresenceBatcher","Batcher","extend","namespace","handleHttpSuccess","res","_this","_promise","default","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","_default","exports"],"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,IAAAA,UAAA,GAAAC,OAAA;AAJA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA,IAAMC,eAAe,GAAGC,kBAAO,CAACC,MAAM,CAAC;EACrCC,SAAS,EAAE,UAAU;EAErB;AACF;AACA;AACA;AACA;AACA;EACEC,iBAAiB,WAAAA,kBAACC,GAAG,EAAE;IAAA,IAAAC,KAAA;IACrB,OAAOC,QAAA,CAAAC,OAAA,CAAQC,GAAG,CAChBJ,GAAG,CAACK,IAAI,CAACC,UAAU,CAACC,GAAG,CAAC,UAACC,gBAAgB;MAAA,OACvCP,KAAI,CAACQ,iBAAiB,CAACD,gBAAgB,CAACE,OAAO,EAAEF,gBAAgB,CAAC;IAAA,CACpE,CACF,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEG,iBAAiB,WAAAA,kBAACC,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,WAAAA,kBAACG,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,WAAAA,mBAACC,EAAE,EAAE;IACrB,OAAOlB,QAAA,CAAAC,OAAA,CAAQe,OAAO,CAACE,EAAE,CAAC;EAC5B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEC,mBAAmB,WAAAA,oBAACD,EAAE,EAAE;IACtB,OAAOlB,QAAA,CAAAC,OAAA,CAAQe,OAAO,CAACE,EAAE,CAAC;EAC5B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEE,cAAc,WAAAA,eAACC,GAAG,EAAE;IAClB,OAAOrB,QAAA,CAAAC,OAAA,CAAQe,OAAO,CAACK,GAAG,CAAC;EAC7B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEC,iBAAiB,WAAAA,kBAACC,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,IAAAM,QAAA,GAAAC,OAAA,CAAA7B,OAAA,GAEYR,eAAe"}
|
package/dist/presence-worker.js
CHANGED
|
@@ -14,14 +14,14 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2
|
|
|
14
14
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
15
15
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
16
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
17
|
-
var
|
|
17
|
+
var _lodash = require("lodash");
|
|
18
18
|
var _constants = require("./constants");
|
|
19
19
|
/**
|
|
20
20
|
* Presence Worker
|
|
21
21
|
* Manages fetches and subscriptions for presence
|
|
22
22
|
* @class
|
|
23
23
|
*/
|
|
24
|
-
var PresenceWorker = /*#__PURE__*/function () {
|
|
24
|
+
var PresenceWorker = exports.default = /*#__PURE__*/function () {
|
|
25
25
|
/**
|
|
26
26
|
* Constructs a presence worker to execute and
|
|
27
27
|
* maintain tasks related to presence upkeep.
|
|
@@ -29,7 +29,7 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
29
29
|
*/
|
|
30
30
|
function PresenceWorker() {
|
|
31
31
|
(0, _classCallCheck2.default)(this, PresenceWorker);
|
|
32
|
-
(0, _defineProperty2.default)(this, "debouncedFetch", (0,
|
|
32
|
+
(0, _defineProperty2.default)(this, "debouncedFetch", (0, _lodash.debounce)(this.checkFetchers, _constants.FETCH_DELAY));
|
|
33
33
|
this.presences = {}; // current presence objects; updated time
|
|
34
34
|
this.watchers = {}; // counter of visible presence-required objects
|
|
35
35
|
this.fetchers = {}; // waiting to get presence object
|
|
@@ -261,5 +261,4 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
261
261
|
}]);
|
|
262
262
|
return PresenceWorker;
|
|
263
263
|
}();
|
|
264
|
-
exports.default = PresenceWorker;
|
|
265
264
|
//# 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":["_lodash","require","_constants","PresenceWorker","exports","default","_classCallCheck2","_defineProperty2","debounce","checkFetchers","FETCH_DELAY","presences","watchers","fetchers","flights","campers","subscribers","_createClass2","key","value","initialize","webex","_this","internal","Error","mercury","connected","_promise","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","enqueue","id","now","UPDATE_PRESENCE_DELAY","debouncedFetch","dequeue","_this2","boarding","_assign","list","_keys","response","statusList","forEach","PRESENCE","checkCampers","_this3","_entries","camper","time","SUBSCRIPTION_DELAY","push","checkSubscriptions","_this4","renewIds","subscription","expiration","PREMATURE_EXPIRATION_SUBSCRIPTION_TIME","cleanPresences","_this5","trash","tenMinutesAgo","EXPIRED_PRESENCE_TIME","lastUpdated","length","DELETE","_this6","renewSubscriptions","ids","concat","_toConsumableArray2","subscribe","body","responses","responseCode","ttl","subscriptionTtl","status","DEFAULT_SUBSCRIPTION_TTL"],"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
|
@@ -254,8 +254,7 @@ var Presence = _webexCore.WebexPlugin.extend({
|
|
|
254
254
|
dequeue: function dequeue(id) {
|
|
255
255
|
return this.worker.dequeue(id);
|
|
256
256
|
},
|
|
257
|
-
version: "3.0.0-
|
|
257
|
+
version: "3.0.0-next.1"
|
|
258
258
|
});
|
|
259
|
-
var _default2 = Presence;
|
|
260
|
-
exports.default = _default2;
|
|
259
|
+
var _default2 = exports.default = Presence;
|
|
261
260
|
//# 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":["require","_webexCore","_presenceBatcher","_interopRequireDefault","_presenceWorker","defaultSubscriptionTtl","USER","USER_PRESENCE_ENABLED","Presence","WebexPlugin","extend","namespace","children","batcher","PresenceBatcher","session","worker","default","_default","PresenceWorker","type","initialize","_this","webex","once","config","initializeWorker","emitEvent","event","payload","trigger","enable","internal","feature","setFeature","then","response","value","disable","isEnabled","getFeature","get","personId","_promise","reject","Error","request","method","service","resource","concat","body","list","personIds","_this2","_isArray","all","map","id","presences","statusList","subscribe","_this3","subscriptionTtl","arguments","length","undefined","subjects","batches","batchLimit","i","push","slice","ids","api","includeStatus","responses","idBatches","_ref","apply","_toConsumableArray2","unsubscribe","setStatus","status","ttl","subject","device","userId","eventType","enqueue","dequeue","version","_default2","exports"],"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/jest.config.js
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/internal-plugin-presence",
|
|
3
|
-
"version": "3.0.0-bnr.5",
|
|
4
3
|
"description": "",
|
|
5
4
|
"license": "MIT",
|
|
6
5
|
"main": "dist/index.js",
|
|
@@ -20,17 +19,37 @@
|
|
|
20
19
|
]
|
|
21
20
|
},
|
|
22
21
|
"devDependencies": {
|
|
22
|
+
"@babel/core": "^7.17.10",
|
|
23
|
+
"@webex/babel-config-legacy": "0.0.0",
|
|
24
|
+
"@webex/eslint-config-legacy": "0.0.0",
|
|
25
|
+
"@webex/jest-config-legacy": "0.0.0",
|
|
26
|
+
"@webex/legacy-tools": "0.0.0",
|
|
27
|
+
"@webex/test-helper-chai": "3.0.0-next.1",
|
|
28
|
+
"@webex/test-helper-mocha": "3.0.0-next.1",
|
|
29
|
+
"@webex/test-helper-mock-webex": "3.0.0-next.1",
|
|
30
|
+
"@webex/test-helper-test-users": "3.0.0-next.1",
|
|
31
|
+
"eslint": "^8.24.0",
|
|
32
|
+
"prettier": "^2.7.1",
|
|
23
33
|
"sinon": "^9.2.4"
|
|
24
34
|
},
|
|
25
35
|
"dependencies": {
|
|
26
|
-
"@webex/internal-plugin-device": "3.0.0-
|
|
27
|
-
"@webex/internal-plugin-mercury": "3.0.0-
|
|
28
|
-
"@webex/
|
|
29
|
-
"@webex/test-helper-
|
|
30
|
-
"@webex/test-helper-
|
|
31
|
-
"@webex/test-helper-
|
|
32
|
-
"@webex/
|
|
33
|
-
"@webex/webex-core": "3.0.0-bnr.5",
|
|
36
|
+
"@webex/internal-plugin-device": "3.0.0-next.1",
|
|
37
|
+
"@webex/internal-plugin-mercury": "3.0.0-next.1",
|
|
38
|
+
"@webex/test-helper-chai": "3.0.0-next.1",
|
|
39
|
+
"@webex/test-helper-mocha": "3.0.0-next.1",
|
|
40
|
+
"@webex/test-helper-mock-webex": "3.0.0-next.1",
|
|
41
|
+
"@webex/test-helper-test-users": "3.0.0-next.1",
|
|
42
|
+
"@webex/webex-core": "3.0.0-next.1",
|
|
34
43
|
"lodash": "^4.17.21"
|
|
35
|
-
}
|
|
36
|
-
|
|
44
|
+
},
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "yarn build:src",
|
|
47
|
+
"build:src": "webex-legacy-tools build -dest \"./dist\" -src \"./src\" -js -ts -maps",
|
|
48
|
+
"deploy:npm": "yarn npm publish",
|
|
49
|
+
"test": "yarn test:style && yarn test:unit && yarn test:integration && yarn test:browser",
|
|
50
|
+
"test:browser": "webex-legacy-tools test --integration --runner karma",
|
|
51
|
+
"test:style": "eslint ./src/**/*.*",
|
|
52
|
+
"test:unit": "webex-legacy-tools test --unit --runner jest"
|
|
53
|
+
},
|
|
54
|
+
"version": "3.0.0-next.1"
|
|
55
|
+
}
|
package/process
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = {browser: true};
|
|
@@ -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;
|
|
@@ -8,13 +8,15 @@ import PresenceWorker from '../../../src/presence-worker';
|
|
|
8
8
|
|
|
9
9
|
const round = (time) => Math.floor(time / 1000);
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
// Skipping as we have registered it as public plugin and MockWebex will create presence under webex object directly instead of webex.internal
|
|
12
|
+
describe.skip('presence-worker', () => {
|
|
12
13
|
describe('PresenceWorker', () => {
|
|
13
14
|
let webex;
|
|
14
15
|
let worker;
|
|
15
16
|
const id = '1234';
|
|
16
17
|
|
|
17
18
|
beforeEach(() => {
|
|
19
|
+
console.log(process.env.WEBEX_CLIENT_ID);
|
|
18
20
|
webex = new MockWebex({
|
|
19
21
|
children: {
|
|
20
22
|
mercury: Mercury,
|
|
@@ -27,12 +29,13 @@ describe('presence-worker', () => {
|
|
|
27
29
|
|
|
28
30
|
describe('#initialize()', () => {
|
|
29
31
|
it('requires webex', () =>
|
|
30
|
-
|
|
32
|
+
expect(() => worker.initialize()).toThrow(/Must initialize Presence Worker with webex!/));
|
|
31
33
|
it('requires webex internal', () =>
|
|
32
|
-
|
|
34
|
+
expect(() => worker.initialize({})).toThrow(/Must initialize Presence Worker with webex!/));
|
|
33
35
|
});
|
|
34
36
|
|
|
35
|
-
|
|
37
|
+
// This selection of tests fail due to `webex-core`'s batcher config being missing.
|
|
38
|
+
describe.skip('#enqueue()', () => {
|
|
36
39
|
it('increments watchers count', () => {
|
|
37
40
|
worker.enqueue(id);
|
|
38
41
|
assert.equal(worker.watchers[id], 1);
|
|
@@ -7,7 +7,8 @@ import sinon from 'sinon';
|
|
|
7
7
|
import Presence from '@webex/internal-plugin-presence';
|
|
8
8
|
import MockWebex from '@webex/test-helper-mock-webex';
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
// Skipping as we have registered it as public plugin and MockWebex will create presence under webex object directly instead of webex.internal
|
|
11
|
+
describe.skip('plugin-presence', () => {
|
|
11
12
|
describe('Presence', () => {
|
|
12
13
|
let webex;
|
|
13
14
|
|
package/dist/tsdoc-metadata.json
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
// This file is read by tools that parse documentation comments conforming to the TSDoc standard.
|
|
2
|
-
// It should be published with your NPM package. It should not be tracked by Git.
|
|
3
|
-
{
|
|
4
|
-
"tsdocVersion": "0.12",
|
|
5
|
-
"toolPackages": [
|
|
6
|
-
{
|
|
7
|
-
"packageName": "@microsoft/api-extractor",
|
|
8
|
-
"packageVersion": "7.34.4"
|
|
9
|
-
}
|
|
10
|
-
]
|
|
11
|
-
}
|
package/dist/types/config.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export const GROUNDSKEEPER_INTERVAL: number;
|
|
2
|
-
export const FETCH_DELAY: 300;
|
|
3
|
-
export const UPDATE_PRESENCE_DELAY: number;
|
|
4
|
-
export const EXPIRED_PRESENCE_TIME: number;
|
|
5
|
-
export const SUBSCRIPTION_DELAY: number;
|
|
6
|
-
export const PREMATURE_EXPIRATION_SUBSCRIPTION_TIME: number;
|
|
7
|
-
export const DEFAULT_SUBSCRIPTION_TTL: number;
|
|
8
|
-
export const APHELEIA_SUBSCRIPTION_UPDATE: "event:apheleia.subscription_update";
|
|
9
|
-
export const PRESENCE_UPDATE: "updated";
|
|
10
|
-
export namespace ENVELOPE_TYPE {
|
|
11
|
-
const SUBSCRIPTION: string;
|
|
12
|
-
const PRESENCE: string;
|
|
13
|
-
const DELETE: string;
|
|
14
|
-
}
|
package/dist/types/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default } from "./presence";
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Presence Worker
|
|
3
|
-
* Manages fetches and subscriptions for presence
|
|
4
|
-
* @class
|
|
5
|
-
*/
|
|
6
|
-
export default class PresenceWorker {
|
|
7
|
-
presences: {};
|
|
8
|
-
watchers: {};
|
|
9
|
-
fetchers: {};
|
|
10
|
-
flights: {};
|
|
11
|
-
campers: {};
|
|
12
|
-
subscribers: {};
|
|
13
|
-
/**
|
|
14
|
-
* Connect to the mercury for presence and starts worker.
|
|
15
|
-
* @param {object} webex
|
|
16
|
-
* @returns {undefined}
|
|
17
|
-
*/
|
|
18
|
-
initialize(webex: object): undefined;
|
|
19
|
-
webex: any;
|
|
20
|
-
/**
|
|
21
|
-
* Trigger a subscription update event.
|
|
22
|
-
* @param {string} event
|
|
23
|
-
* @returns {undefined}
|
|
24
|
-
*/
|
|
25
|
-
subscriptionUpdate(event: string): undefined;
|
|
26
|
-
/**
|
|
27
|
-
* Retrieves and subscribes to a user's presence.
|
|
28
|
-
* @param {string} id
|
|
29
|
-
* @returns {undefined}
|
|
30
|
-
*/
|
|
31
|
-
enqueue(id: string): undefined;
|
|
32
|
-
/**
|
|
33
|
-
* Retract from subscribing to a user's presence.
|
|
34
|
-
* @param {string} id
|
|
35
|
-
* @returns {undefined}
|
|
36
|
-
*/
|
|
37
|
-
dequeue(id: string): undefined;
|
|
38
|
-
/**
|
|
39
|
-
* Retrieve users' presences.
|
|
40
|
-
* @returns {undefined}
|
|
41
|
-
*/
|
|
42
|
-
checkFetchers(): undefined;
|
|
43
|
-
debouncedFetch: import("lodash").DebouncedFunc<() => undefined>;
|
|
44
|
-
/**
|
|
45
|
-
* Determine if we should subscribe to users' presences.
|
|
46
|
-
* @returns {Array}: User ids to subscribe.
|
|
47
|
-
*/
|
|
48
|
-
checkCampers(): any[];
|
|
49
|
-
/**
|
|
50
|
-
* Determine if we should re-subscribe or remove users' subscriptions.
|
|
51
|
-
* @returns {Array}: User ids to re-subscribe.
|
|
52
|
-
*/
|
|
53
|
-
checkSubscriptions(): any[];
|
|
54
|
-
/**
|
|
55
|
-
* Remove expired presence objects.
|
|
56
|
-
* @returns {undefined}
|
|
57
|
-
*/
|
|
58
|
-
cleanPresences(): undefined;
|
|
59
|
-
/**
|
|
60
|
-
* Execute chores on an interval.
|
|
61
|
-
* Checks if we should make new subscribe,
|
|
62
|
-
* checks if we should re-subscribe,
|
|
63
|
-
* removes expired subscriptions,
|
|
64
|
-
* removes expired presence objects.
|
|
65
|
-
* @returns {undefined}
|
|
66
|
-
*/
|
|
67
|
-
groundskeeper(): undefined;
|
|
68
|
-
}
|