@webex/internal-plugin-presence 2.59.1 → 2.59.3-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 -6
- package/README.md +42 -42
- package/babel.config.js +3 -3
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- 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 +42 -42
- package/dist/presence-batcher.js.map +1 -1
- package/dist/presence-worker.js +43 -43
- package/dist/presence-worker.js.map +1 -1
- package/dist/presence.js +75 -75
- package/dist/presence.js.map +1 -1
- package/jest.config.js +3 -3
- package/package.json +19 -18
- package/process +1 -1
- package/src/config.js +11 -11
- package/src/constants.js +19 -19
- package/src/index.js +41 -41
- package/src/presence-batcher.js +100 -100
- package/src/presence-worker.js +268 -268
- package/src/presence.js +262 -262
- package/test/integration/spec/presence.js +213 -213
- package/test/unit/spec/presence-worker.js +264 -264
- package/test/unit/spec/presence.js +68 -68
package/.eslintrc.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const config = {
|
|
2
|
-
root: true,
|
|
3
|
-
extends: ['@webex/eslint-config-legacy'],
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
module.exports = config;
|
|
1
|
+
const config = {
|
|
2
|
+
root: true,
|
|
3
|
+
extends: ['@webex/eslint-config-legacy'],
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
module.exports = config;
|
package/README.md
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
# @webex/internal-plugin-presence
|
|
2
|
-
|
|
3
|
-
[](https://github.com/RichardLitt/standard-readme)
|
|
4
|
-
|
|
5
|
-
> Plugin for the Presence service
|
|
6
|
-
|
|
7
|
-
This is an internal Cisco Webex plugin. As such, it does not strictly adhere to semantic versioning. Use at your own risk. If you're not working on one of our first party clients, please look at our [developer api](https://developer.webex.com/) and stick to our public plugins.
|
|
8
|
-
|
|
9
|
-
- [Install](#install)
|
|
10
|
-
- [Usage](#usage)
|
|
11
|
-
- [Contribute](#contribute)
|
|
12
|
-
- [Maintainers](#maintainers)
|
|
13
|
-
- [License](#license)
|
|
14
|
-
|
|
15
|
-
## Install
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
npm install --save @webex/internal-plugin-presence
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Usage
|
|
22
|
-
|
|
23
|
-
```js
|
|
24
|
-
import '@webex/internal-plugin-presence';
|
|
25
|
-
|
|
26
|
-
import WebexCore from '@webex/webex-core';
|
|
27
|
-
|
|
28
|
-
const webex = new WebexCore();
|
|
29
|
-
webex.internal.presence.WHATEVER;
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Maintainers
|
|
33
|
-
|
|
34
|
-
This package is maintained by [Cisco Webex for Developers](https://developer.webex.com/).
|
|
35
|
-
|
|
36
|
-
## Contribute
|
|
37
|
-
|
|
38
|
-
Pull requests welcome. Please see [CONTRIBUTING.md](https://github.com/webex/webex-js-sdk/blob/master/CONTRIBUTING.md) for more details.
|
|
39
|
-
|
|
40
|
-
## License
|
|
41
|
-
|
|
42
|
-
© 2016-2020 Cisco and/or its affiliates. All Rights Reserved.
|
|
1
|
+
# @webex/internal-plugin-presence
|
|
2
|
+
|
|
3
|
+
[](https://github.com/RichardLitt/standard-readme)
|
|
4
|
+
|
|
5
|
+
> Plugin for the Presence service
|
|
6
|
+
|
|
7
|
+
This is an internal Cisco Webex plugin. As such, it does not strictly adhere to semantic versioning. Use at your own risk. If you're not working on one of our first party clients, please look at our [developer api](https://developer.webex.com/) and stick to our public plugins.
|
|
8
|
+
|
|
9
|
+
- [Install](#install)
|
|
10
|
+
- [Usage](#usage)
|
|
11
|
+
- [Contribute](#contribute)
|
|
12
|
+
- [Maintainers](#maintainers)
|
|
13
|
+
- [License](#license)
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install --save @webex/internal-plugin-presence
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
```js
|
|
24
|
+
import '@webex/internal-plugin-presence';
|
|
25
|
+
|
|
26
|
+
import WebexCore from '@webex/webex-core';
|
|
27
|
+
|
|
28
|
+
const webex = new WebexCore();
|
|
29
|
+
webex.internal.presence.WHATEVER;
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Maintainers
|
|
33
|
+
|
|
34
|
+
This package is maintained by [Cisco Webex for Developers](https://developer.webex.com/).
|
|
35
|
+
|
|
36
|
+
## Contribute
|
|
37
|
+
|
|
38
|
+
Pull requests welcome. Please see [CONTRIBUTING.md](https://github.com/webex/webex-js-sdk/blob/master/CONTRIBUTING.md) for more details.
|
|
39
|
+
|
|
40
|
+
## License
|
|
41
|
+
|
|
42
|
+
© 2016-2020 Cisco and/or its affiliates. All Rights Reserved.
|
package/babel.config.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
const babelConfigLegacy = require('@webex/babel-config-legacy');
|
|
2
|
-
|
|
3
|
-
module.exports = babelConfigLegacy;
|
|
1
|
+
const babelConfigLegacy = require('@webex/babel-config-legacy');
|
|
2
|
+
|
|
3
|
+
module.exports = babelConfigLegacy;
|
package/dist/config.js
CHANGED
|
@@ -5,8 +5,8 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
|
-
/*!
|
|
9
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
8
|
+
/*!
|
|
9
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
10
10
|
*/
|
|
11
11
|
var _default = {
|
|
12
12
|
presence: {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_default","presence","batcherWait","batcherMaxCalls","batcherMaxWait","exports","default"],"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,GAIe;EACbC,QAAQ,EAAE;IACRC,WAAW,EAAE,EAAE;IACfC,eAAe,EAAE,EAAE;IACnBC,cAAc,EAAE;EAClB;AACF,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAN,QAAA"}
|
|
1
|
+
{"version":3,"names":["_default","presence","batcherWait","batcherMaxCalls","batcherMaxWait","exports","default"],"sources":["config.js"],"sourcesContent":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\nexport default {\r\n presence: {\r\n batcherWait: 50,\r\n batcherMaxCalls: 50,\r\n batcherMaxWait: 150,\r\n },\r\n};\r\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,IAAAA,QAAA,GAIe;EACbC,QAAQ,EAAE;IACRC,WAAW,EAAE,EAAE;IACfC,eAAe,EAAE,EAAE;IACnBC,cAAc,EAAE;EAClB;AACF,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAN,QAAA"}
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAAC,OAAA,CAAAD,sBAAA,GAAAA,sBAAA;AAE1C,IAAME,WAAW,GAAG,GAAG,CAAC,CAAC;AAAAD,OAAA,CAAAC,WAAA,GAAAA,WAAA;AAEzB,IAAMC,qBAAqB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAAF,OAAA,CAAAE,qBAAA,GAAAA,qBAAA;AACzC,IAAMC,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAAH,OAAA,CAAAG,qBAAA,GAAAA,qBAAA;AAE9C,IAAMC,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAAJ,OAAA,CAAAI,kBAAA,GAAAA,kBAAA;AACtC,IAAMC,sCAAsC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAAL,OAAA,CAAAK,sCAAA,GAAAA,sCAAA;AAC1D,IAAMC,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAAN,OAAA,CAAAM,wBAAA,GAAAA,wBAAA;AAEjD,IAAMC,4BAA4B,GAAG,oCAAoC;AAACP,OAAA,CAAAO,4BAAA,GAAAA,4BAAA;AAC1E,IAAMC,eAAe,GAAG,SAAS;AAACR,OAAA,CAAAQ,eAAA,GAAAA,eAAA;AAElC,IAAMC,aAAa,GAAG;EAC3BC,YAAY,EAAE,cAAc;EAC5BC,QAAQ,EAAE,UAAU;EACpBC,MAAM,EAAE;AACV,CAAC;AAACZ,OAAA,CAAAS,aAAA,GAAAA,aAAA"}
|
|
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\r\n\r\nexport const FETCH_DELAY = 300; // ms\r\n\r\nexport const UPDATE_PRESENCE_DELAY = 60 * 1000; // 1 minute in ms\r\nexport const EXPIRED_PRESENCE_TIME = 10 * 60 * 1000; // 10 minutes in ms\r\n\r\nexport const SUBSCRIPTION_DELAY = 60 * 1000; // 1 minute in ms\r\nexport const PREMATURE_EXPIRATION_SUBSCRIPTION_TIME = 60 * 1000; // 1 minute in ms\r\nexport const DEFAULT_SUBSCRIPTION_TTL = 10 * 60 * 1000; // 10 minutes in ms\r\n\r\nexport const APHELEIA_SUBSCRIPTION_UPDATE = 'event:apheleia.subscription_update';\r\nexport const PRESENCE_UPDATE = 'updated';\r\n\r\nexport const ENVELOPE_TYPE = {\r\n SUBSCRIPTION: 'subscription',\r\n PRESENCE: 'presence',\r\n DELETE: 'delete',\r\n};\r\n"],"mappings":";;;;;;;AAAO,IAAMA,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAAC,OAAA,CAAAD,sBAAA,GAAAA,sBAAA;AAE1C,IAAME,WAAW,GAAG,GAAG,CAAC,CAAC;AAAAD,OAAA,CAAAC,WAAA,GAAAA,WAAA;AAEzB,IAAMC,qBAAqB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAAF,OAAA,CAAAE,qBAAA,GAAAA,qBAAA;AACzC,IAAMC,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAAH,OAAA,CAAAG,qBAAA,GAAAA,qBAAA;AAE9C,IAAMC,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAAJ,OAAA,CAAAI,kBAAA,GAAAA,kBAAA;AACtC,IAAMC,sCAAsC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAAL,OAAA,CAAAK,sCAAA,GAAAA,sCAAA;AAC1D,IAAMC,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAAN,OAAA,CAAAM,wBAAA,GAAAA,wBAAA;AAEjD,IAAMC,4BAA4B,GAAG,oCAAoC;AAACP,OAAA,CAAAO,4BAAA,GAAAA,4BAAA;AAC1E,IAAMC,eAAe,GAAG,SAAS;AAACR,OAAA,CAAAQ,eAAA,GAAAA,eAAA;AAElC,IAAMC,aAAa,GAAG;EAC3BC,YAAY,EAAE,cAAc;EAC5BC,QAAQ,EAAE,UAAU;EACpBC,MAAM,EAAE;AACV,CAAC;AAACZ,OAAA,CAAAS,aAAA,GAAAA,aAAA"}
|
package/dist/index.js
CHANGED
|
@@ -17,8 +17,8 @@ require("@webex/internal-plugin-device");
|
|
|
17
17
|
var _webexCore = require("@webex/webex-core");
|
|
18
18
|
var _presence = _interopRequireDefault(require("./presence"));
|
|
19
19
|
var _config = _interopRequireDefault(require("./config"));
|
|
20
|
-
/*!
|
|
21
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
20
|
+
/*!
|
|
21
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
(0, _webexCore.registerInternalPlugin)('presence', _presence.default, {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["require","_webexCore","_presence","_interopRequireDefault","_config","registerInternalPlugin","Presence","payloadTransformer","predicates","name","direction","test","ctx","response","_promise","default","resolve","_has2","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;AAGA,IAAAE,SAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAD,sBAAA,CAAAH,OAAA;AAVA;AACA;AACA;;AAUA,IAAAK,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,KAAA,CAAAF,OAAA,EAAIF,QAAQ,EAAE,gBAAgB,CAAC,IAAI,IAAAI,KAAA,CAAAF,OAAA,EAAIF,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"}
|
|
1
|
+
{"version":3,"names":["require","_webexCore","_presence","_interopRequireDefault","_config","registerInternalPlugin","Presence","payloadTransformer","predicates","name","direction","test","ctx","response","_promise","default","resolve","_has2","extract","transforms","fn","body","status","eventType","config"],"sources":["index.js"],"sourcesContent":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\nimport '@webex/internal-plugin-device';\r\n\r\nimport {registerInternalPlugin} from '@webex/webex-core';\r\nimport {has} from 'lodash';\r\n\r\nimport Presence from './presence';\r\nimport config from './config';\r\n\r\nregisterInternalPlugin('presence', Presence, {\r\n payloadTransformer: {\r\n predicates: [\r\n {\r\n name: 'normalizeSingleStatusResponse',\r\n direction: 'inbound',\r\n test(ctx, response) {\r\n // POST to /apheleia/api/v1/events\r\n return Promise.resolve(has(response, 'body.eventType') && has(response, 'body.subject'));\r\n },\r\n extract(response) {\r\n return Promise.resolve(response);\r\n },\r\n },\r\n ],\r\n transforms: [\r\n {\r\n name: 'normalizeSingleStatusResponse',\r\n direction: 'inbound',\r\n fn(ctx, response) {\r\n response.body.status = response.body.eventType;\r\n },\r\n },\r\n ],\r\n },\r\n config,\r\n});\r\n\r\nexport {default} from './presence';\r\n"],"mappings":";;;;;;;;;;;;;;;AAIAA,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AAGA,IAAAE,SAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAD,sBAAA,CAAAH,OAAA;AAVA;AACA;AACA;;AAUA,IAAAK,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,KAAA,CAAAF,OAAA,EAAIF,QAAQ,EAAE,gBAAgB,CAAC,IAAI,IAAAI,KAAA,CAAAF,OAAA,EAAIF,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
|
@@ -8,21 +8,21 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
10
10
|
var _webexCore = require("@webex/webex-core");
|
|
11
|
-
/*!
|
|
12
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
11
|
+
/*!
|
|
12
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
/**
|
|
16
|
-
* @class
|
|
17
|
-
* @ignore
|
|
15
|
+
/**
|
|
16
|
+
* @class
|
|
17
|
+
* @ignore
|
|
18
18
|
*/
|
|
19
19
|
var PresenceBatcher = _webexCore.Batcher.extend({
|
|
20
20
|
namespace: 'Presence',
|
|
21
|
-
/**
|
|
22
|
-
* @instance
|
|
23
|
-
* @memberof PresenceBatcher
|
|
24
|
-
* @param {HttpResponseObject} res
|
|
25
|
-
* @returns {Promise}
|
|
21
|
+
/**
|
|
22
|
+
* @instance
|
|
23
|
+
* @memberof PresenceBatcher
|
|
24
|
+
* @param {HttpResponseObject} res
|
|
25
|
+
* @returns {Promise}
|
|
26
26
|
*/
|
|
27
27
|
handleHttpSuccess: function handleHttpSuccess(res) {
|
|
28
28
|
var _this = this;
|
|
@@ -30,62 +30,62 @@ var PresenceBatcher = _webexCore.Batcher.extend({
|
|
|
30
30
|
return _this.handleItemSuccess(presenceResponse.subject, presenceResponse);
|
|
31
31
|
}));
|
|
32
32
|
},
|
|
33
|
-
/**
|
|
34
|
-
* @instance
|
|
35
|
-
* @memberof PresenceBatcher
|
|
36
|
-
* @param {string} item
|
|
37
|
-
* @param {Object} response
|
|
38
|
-
* @returns {Promise}
|
|
33
|
+
/**
|
|
34
|
+
* @instance
|
|
35
|
+
* @memberof PresenceBatcher
|
|
36
|
+
* @param {string} item
|
|
37
|
+
* @param {Object} response
|
|
38
|
+
* @returns {Promise}
|
|
39
39
|
*/
|
|
40
40
|
handleItemFailure: function handleItemFailure(item, response) {
|
|
41
41
|
return this.getDeferredForResponse(item).then(function (defer) {
|
|
42
42
|
defer.reject(response);
|
|
43
43
|
});
|
|
44
44
|
},
|
|
45
|
-
/**
|
|
46
|
-
* @instance
|
|
47
|
-
* @memberof PresenceBatcher
|
|
48
|
-
* @param {string} item
|
|
49
|
-
* @param {Object} response
|
|
50
|
-
* @returns {Promise}
|
|
45
|
+
/**
|
|
46
|
+
* @instance
|
|
47
|
+
* @memberof PresenceBatcher
|
|
48
|
+
* @param {string} item
|
|
49
|
+
* @param {Object} response
|
|
50
|
+
* @returns {Promise}
|
|
51
51
|
*/
|
|
52
52
|
handleItemSuccess: function handleItemSuccess(item, response) {
|
|
53
53
|
return this.getDeferredForResponse(item).then(function (defer) {
|
|
54
54
|
defer.resolve(response);
|
|
55
55
|
});
|
|
56
56
|
},
|
|
57
|
-
/**
|
|
58
|
-
* @instance
|
|
59
|
-
* @memberof PresenceBatcher
|
|
60
|
-
* @param {string} id
|
|
61
|
-
* @returns {Promise<string>}
|
|
57
|
+
/**
|
|
58
|
+
* @instance
|
|
59
|
+
* @memberof PresenceBatcher
|
|
60
|
+
* @param {string} id
|
|
61
|
+
* @returns {Promise<string>}
|
|
62
62
|
*/
|
|
63
63
|
fingerprintRequest: function fingerprintRequest(id) {
|
|
64
64
|
return _promise.default.resolve(id);
|
|
65
65
|
},
|
|
66
|
-
/**
|
|
67
|
-
* @instance
|
|
68
|
-
* @memberof PresenceBatcher
|
|
69
|
-
* @param {string} id
|
|
70
|
-
* @returns {Promise<string>}
|
|
66
|
+
/**
|
|
67
|
+
* @instance
|
|
68
|
+
* @memberof PresenceBatcher
|
|
69
|
+
* @param {string} id
|
|
70
|
+
* @returns {Promise<string>}
|
|
71
71
|
*/
|
|
72
72
|
fingerprintResponse: function fingerprintResponse(id) {
|
|
73
73
|
return _promise.default.resolve(id);
|
|
74
74
|
},
|
|
75
|
-
/**
|
|
76
|
-
* @instance
|
|
77
|
-
* @memberof PresenceBatcher
|
|
78
|
-
* @param {Array} ids
|
|
79
|
-
* @returns {Promise<Array>}
|
|
75
|
+
/**
|
|
76
|
+
* @instance
|
|
77
|
+
* @memberof PresenceBatcher
|
|
78
|
+
* @param {Array} ids
|
|
79
|
+
* @returns {Promise<Array>}
|
|
80
80
|
*/
|
|
81
81
|
prepareRequest: function prepareRequest(ids) {
|
|
82
82
|
return _promise.default.resolve(ids);
|
|
83
83
|
},
|
|
84
|
-
/**
|
|
85
|
-
* @instance
|
|
86
|
-
* @memberof PresenceBatcher
|
|
87
|
-
* @param {Object} subjects
|
|
88
|
-
* @returns {Promise<HttpResponseObject>}
|
|
84
|
+
/**
|
|
85
|
+
* @instance
|
|
86
|
+
* @memberof PresenceBatcher
|
|
87
|
+
* @param {Object} subjects
|
|
88
|
+
* @returns {Promise<HttpResponseObject>}
|
|
89
89
|
*/
|
|
90
90
|
submitHttpRequest: function submitHttpRequest(subjects) {
|
|
91
91
|
return this.webex.request({
|
|
@@ -1 +1 @@
|
|
|
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,EACnE,CACF;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,GAEYpC,eAAe;AAAAqC,OAAA,CAAA7B,OAAA,GAAA4B,QAAA"}
|
|
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":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\nimport {Batcher} from '@webex/webex-core';\r\n\r\n/**\r\n * @class\r\n * @ignore\r\n */\r\nconst PresenceBatcher = Batcher.extend({\r\n namespace: 'Presence',\r\n\r\n /**\r\n * @instance\r\n * @memberof PresenceBatcher\r\n * @param {HttpResponseObject} res\r\n * @returns {Promise}\r\n */\r\n handleHttpSuccess(res) {\r\n return Promise.all(\r\n res.body.statusList.map((presenceResponse) =>\r\n this.handleItemSuccess(presenceResponse.subject, presenceResponse)\r\n )\r\n );\r\n },\r\n\r\n /**\r\n * @instance\r\n * @memberof PresenceBatcher\r\n * @param {string} item\r\n * @param {Object} response\r\n * @returns {Promise}\r\n */\r\n handleItemFailure(item, response) {\r\n return this.getDeferredForResponse(item).then((defer) => {\r\n defer.reject(response);\r\n });\r\n },\r\n\r\n /**\r\n * @instance\r\n * @memberof PresenceBatcher\r\n * @param {string} item\r\n * @param {Object} response\r\n * @returns {Promise}\r\n */\r\n handleItemSuccess(item, response) {\r\n return this.getDeferredForResponse(item).then((defer) => {\r\n defer.resolve(response);\r\n });\r\n },\r\n\r\n /**\r\n * @instance\r\n * @memberof PresenceBatcher\r\n * @param {string} id\r\n * @returns {Promise<string>}\r\n */\r\n fingerprintRequest(id) {\r\n return Promise.resolve(id);\r\n },\r\n\r\n /**\r\n * @instance\r\n * @memberof PresenceBatcher\r\n * @param {string} id\r\n * @returns {Promise<string>}\r\n */\r\n fingerprintResponse(id) {\r\n return Promise.resolve(id);\r\n },\r\n\r\n /**\r\n * @instance\r\n * @memberof PresenceBatcher\r\n * @param {Array} ids\r\n * @returns {Promise<Array>}\r\n */\r\n prepareRequest(ids) {\r\n return Promise.resolve(ids);\r\n },\r\n\r\n /**\r\n * @instance\r\n * @memberof PresenceBatcher\r\n * @param {Object} subjects\r\n * @returns {Promise<HttpResponseObject>}\r\n */\r\n submitHttpRequest(subjects) {\r\n return this.webex.request({\r\n method: 'POST',\r\n api: 'apheleia',\r\n resource: 'compositions',\r\n body: {subjects},\r\n });\r\n },\r\n});\r\n\r\nexport default PresenceBatcher;\r\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,EACnE,CACF;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,GAEYpC,eAAe;AAAAqC,OAAA,CAAA7B,OAAA,GAAA4B,QAAA"}
|
package/dist/presence-worker.js
CHANGED
|
@@ -16,16 +16,16 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpe
|
|
|
16
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
17
17
|
var _debounce2 = _interopRequireDefault(require("lodash/debounce"));
|
|
18
18
|
var _constants = require("./constants");
|
|
19
|
-
/**
|
|
20
|
-
* Presence Worker
|
|
21
|
-
* Manages fetches and subscriptions for presence
|
|
22
|
-
* @class
|
|
19
|
+
/**
|
|
20
|
+
* Presence Worker
|
|
21
|
+
* Manages fetches and subscriptions for presence
|
|
22
|
+
* @class
|
|
23
23
|
*/
|
|
24
24
|
var PresenceWorker = /*#__PURE__*/function () {
|
|
25
|
-
/**
|
|
26
|
-
* Constructs a presence worker to execute and
|
|
27
|
-
* maintain tasks related to presence upkeep.
|
|
28
|
-
* @returns {undefined}
|
|
25
|
+
/**
|
|
26
|
+
* Constructs a presence worker to execute and
|
|
27
|
+
* maintain tasks related to presence upkeep.
|
|
28
|
+
* @returns {undefined}
|
|
29
29
|
*/
|
|
30
30
|
function PresenceWorker() {
|
|
31
31
|
(0, _classCallCheck2.default)(this, PresenceWorker);
|
|
@@ -38,10 +38,10 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
38
38
|
this.subscribers = {}; // current subscriptions; expiration time
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
/**
|
|
42
|
-
* Connect to the mercury for presence and starts worker.
|
|
43
|
-
* @param {object} webex
|
|
44
|
-
* @returns {undefined}
|
|
41
|
+
/**
|
|
42
|
+
* Connect to the mercury for presence and starts worker.
|
|
43
|
+
* @param {object} webex
|
|
44
|
+
* @returns {undefined}
|
|
45
45
|
*/
|
|
46
46
|
(0, _createClass2.default)(PresenceWorker, [{
|
|
47
47
|
key: "initialize",
|
|
@@ -58,10 +58,10 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
58
58
|
setInterval(this.groundskeeper.bind(this), _constants.GROUNDSKEEPER_INTERVAL);
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
/**
|
|
62
|
-
* Trigger a subscription update event.
|
|
63
|
-
* @param {string} event
|
|
64
|
-
* @returns {undefined}
|
|
61
|
+
/**
|
|
62
|
+
* Trigger a subscription update event.
|
|
63
|
+
* @param {string} event
|
|
64
|
+
* @returns {undefined}
|
|
65
65
|
*/
|
|
66
66
|
}, {
|
|
67
67
|
key: "subscriptionUpdate",
|
|
@@ -73,10 +73,10 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
/**
|
|
77
|
-
* Retrieves and subscribes to a user's presence.
|
|
78
|
-
* @param {string} id
|
|
79
|
-
* @returns {undefined}
|
|
76
|
+
/**
|
|
77
|
+
* Retrieves and subscribes to a user's presence.
|
|
78
|
+
* @param {string} id
|
|
79
|
+
* @returns {undefined}
|
|
80
80
|
*/
|
|
81
81
|
}, {
|
|
82
82
|
key: "enqueue",
|
|
@@ -104,10 +104,10 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
/**
|
|
108
|
-
* Retract from subscribing to a user's presence.
|
|
109
|
-
* @param {string} id
|
|
110
|
-
* @returns {undefined}
|
|
107
|
+
/**
|
|
108
|
+
* Retract from subscribing to a user's presence.
|
|
109
|
+
* @param {string} id
|
|
110
|
+
* @returns {undefined}
|
|
111
111
|
*/
|
|
112
112
|
}, {
|
|
113
113
|
key: "dequeue",
|
|
@@ -122,9 +122,9 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
-
/**
|
|
126
|
-
* Retrieve users' presences.
|
|
127
|
-
* @returns {undefined}
|
|
125
|
+
/**
|
|
126
|
+
* Retrieve users' presences.
|
|
127
|
+
* @returns {undefined}
|
|
128
128
|
*/
|
|
129
129
|
}, {
|
|
130
130
|
key: "checkFetchers",
|
|
@@ -149,9 +149,9 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
149
149
|
}, {
|
|
150
150
|
key: "checkCampers",
|
|
151
151
|
value:
|
|
152
|
-
/**
|
|
153
|
-
* Determine if we should subscribe to users' presences.
|
|
154
|
-
* @returns {Array}: User ids to subscribe.
|
|
152
|
+
/**
|
|
153
|
+
* Determine if we should subscribe to users' presences.
|
|
154
|
+
* @returns {Array}: User ids to subscribe.
|
|
155
155
|
*/
|
|
156
156
|
function checkCampers() {
|
|
157
157
|
var _this3 = this;
|
|
@@ -171,9 +171,9 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
171
171
|
return subscribers;
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
/**
|
|
175
|
-
* Determine if we should re-subscribe or remove users' subscriptions.
|
|
176
|
-
* @returns {Array}: User ids to re-subscribe.
|
|
174
|
+
/**
|
|
175
|
+
* Determine if we should re-subscribe or remove users' subscriptions.
|
|
176
|
+
* @returns {Array}: User ids to re-subscribe.
|
|
177
177
|
*/
|
|
178
178
|
}, {
|
|
179
179
|
key: "checkSubscriptions",
|
|
@@ -196,9 +196,9 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
196
196
|
return renewIds;
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
-
/**
|
|
200
|
-
* Remove expired presence objects.
|
|
201
|
-
* @returns {undefined}
|
|
199
|
+
/**
|
|
200
|
+
* Remove expired presence objects.
|
|
201
|
+
* @returns {undefined}
|
|
202
202
|
*/
|
|
203
203
|
}, {
|
|
204
204
|
key: "cleanPresences",
|
|
@@ -226,13 +226,13 @@ var PresenceWorker = /*#__PURE__*/function () {
|
|
|
226
226
|
}
|
|
227
227
|
}
|
|
228
228
|
|
|
229
|
-
/**
|
|
230
|
-
* Execute chores on an interval.
|
|
231
|
-
* Checks if we should make new subscribe,
|
|
232
|
-
* checks if we should re-subscribe,
|
|
233
|
-
* removes expired subscriptions,
|
|
234
|
-
* removes expired presence objects.
|
|
235
|
-
* @returns {undefined}
|
|
229
|
+
/**
|
|
230
|
+
* Execute chores on an interval.
|
|
231
|
+
* Checks if we should make new subscribe,
|
|
232
|
+
* checks if we should re-subscribe,
|
|
233
|
+
* removes expired subscriptions,
|
|
234
|
+
* removes expired presence objects.
|
|
235
|
+
* @returns {undefined}
|
|
236
236
|
*/
|
|
237
237
|
}, {
|
|
238
238
|
key: "groundskeeper",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_constants","require","PresenceWorker","_classCallCheck2","default","_defineProperty2","_debounce2","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","exports"],"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":["_constants","require","PresenceWorker","_classCallCheck2","default","_defineProperty2","_debounce2","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","exports"],"sources":["presence-worker.js"],"sourcesContent":["import {debounce} from 'lodash';\r\n\r\nimport {\r\n FETCH_DELAY,\r\n GROUNDSKEEPER_INTERVAL,\r\n SUBSCRIPTION_DELAY,\r\n UPDATE_PRESENCE_DELAY,\r\n EXPIRED_PRESENCE_TIME,\r\n PREMATURE_EXPIRATION_SUBSCRIPTION_TIME,\r\n DEFAULT_SUBSCRIPTION_TTL,\r\n APHELEIA_SUBSCRIPTION_UPDATE,\r\n PRESENCE_UPDATE,\r\n ENVELOPE_TYPE,\r\n} from './constants';\r\n\r\n/**\r\n * Presence Worker\r\n * Manages fetches and subscriptions for presence\r\n * @class\r\n */\r\nexport default class PresenceWorker {\r\n /**\r\n * Constructs a presence worker to execute and\r\n * maintain tasks related to presence upkeep.\r\n * @returns {undefined}\r\n */\r\n constructor() {\r\n this.presences = {}; // current presence objects; updated time\r\n this.watchers = {}; // counter of visible presence-required objects\r\n this.fetchers = {}; // waiting to get presence object\r\n this.flights = {}; // in flight to get presence object\r\n this.campers = {}; // waiting to subscribe; updated time\r\n this.subscribers = {}; // current subscriptions; expiration time\r\n }\r\n\r\n /**\r\n * Connect to the mercury for presence and starts worker.\r\n * @param {object} webex\r\n * @returns {undefined}\r\n */\r\n initialize(webex) {\r\n if (!webex || !webex.internal) {\r\n throw new Error('Must initialize Presence Worker with webex!');\r\n }\r\n\r\n this.webex = webex;\r\n\r\n const mercury = this.webex.internal.mercury.connected\r\n ? Promise.resolve()\r\n : this.webex.internal.mercury.connect();\r\n\r\n mercury.then(() => {\r\n this.webex.internal.mercury.on(\r\n APHELEIA_SUBSCRIPTION_UPDATE,\r\n this.subscriptionUpdate.bind(this)\r\n );\r\n });\r\n\r\n setInterval(this.groundskeeper.bind(this), GROUNDSKEEPER_INTERVAL);\r\n }\r\n\r\n /**\r\n * Trigger a subscription update event.\r\n * @param {string} event\r\n * @returns {undefined}\r\n */\r\n subscriptionUpdate(event) {\r\n this.presences[event.data.subject] = new Date().getTime();\r\n\r\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\r\n type: ENVELOPE_TYPE.SUBSCRIPTION,\r\n payload: event.data,\r\n });\r\n }\r\n\r\n /**\r\n * Retrieves and subscribes to a user's presence.\r\n * @param {string} id\r\n * @returns {undefined}\r\n */\r\n enqueue(id) {\r\n const now = new Date().getTime();\r\n\r\n if (this.watchers[id]) {\r\n this.watchers[id] += 1;\r\n } else {\r\n this.watchers[id] = 1;\r\n }\r\n\r\n if (this.subscribers[id]) {\r\n return;\r\n }\r\n\r\n if (!this.campers[id]) {\r\n this.campers[id] = now;\r\n }\r\n\r\n // Retrieve presence if:\r\n // not in flight or\r\n // don't already have the presence or\r\n // presence has gone stale\r\n if (\r\n !this.flights[id] &&\r\n (!this.presences[id] || this.presences[id] < now - UPDATE_PRESENCE_DELAY)\r\n ) {\r\n this.fetchers[id] = id;\r\n this.debouncedFetch();\r\n }\r\n }\r\n\r\n /**\r\n * Retract from subscribing to a user's presence.\r\n * @param {string} id\r\n * @returns {undefined}\r\n */\r\n dequeue(id) {\r\n if (this.watchers[id]) {\r\n this.watchers[id] -= 1;\r\n\r\n if (this.watchers[id] <= 0) {\r\n delete this.watchers[id];\r\n delete this.fetchers[id];\r\n delete this.campers[id];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve users' presences.\r\n * @returns {undefined}\r\n */\r\n checkFetchers() {\r\n const boarding = this.fetchers;\r\n\r\n Object.assign(this.flights, boarding);\r\n this.fetchers = {};\r\n\r\n this.webex.internal.presence.list(Object.keys(boarding)).then((response) => {\r\n const now = new Date().getTime();\r\n\r\n response.statusList.forEach((presence) => {\r\n const id = presence.subject;\r\n\r\n delete this.flights[id];\r\n this.presences[id] = now;\r\n });\r\n\r\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\r\n type: ENVELOPE_TYPE.PRESENCE,\r\n payload: response,\r\n });\r\n });\r\n }\r\n\r\n debouncedFetch = debounce(this.checkFetchers, FETCH_DELAY);\r\n\r\n /**\r\n * Determine if we should subscribe to users' presences.\r\n * @returns {Array}: User ids to subscribe.\r\n */\r\n checkCampers() {\r\n const now = new Date().getTime();\r\n const subscribers = [];\r\n\r\n Object.entries(this.campers).forEach((camper) => {\r\n const id = camper[0];\r\n const time = camper[1];\r\n\r\n // Subscribe if they've been camping for a minute\r\n if (time < now - SUBSCRIPTION_DELAY) {\r\n delete this.campers[id];\r\n this.subscribers[id] = null;\r\n subscribers.push(id);\r\n }\r\n });\r\n\r\n return subscribers;\r\n }\r\n\r\n /**\r\n * Determine if we should re-subscribe or remove users' subscriptions.\r\n * @returns {Array}: User ids to re-subscribe.\r\n */\r\n checkSubscriptions() {\r\n const now = new Date().getTime();\r\n\r\n const renewIds = [];\r\n\r\n Object.entries(this.subscribers).forEach((subscription) => {\r\n const id = subscription[0];\r\n const expiration = subscription[1];\r\n\r\n if (expiration) {\r\n // Renew subscription if they're about to expire\r\n if (this.watchers[id] && now > expiration - PREMATURE_EXPIRATION_SUBSCRIPTION_TIME) {\r\n renewIds.push(id);\r\n } else if (now > expiration) {\r\n delete this.subscribers[id];\r\n }\r\n }\r\n });\r\n\r\n return renewIds;\r\n }\r\n\r\n /**\r\n * Remove expired presence objects.\r\n * @returns {undefined}\r\n */\r\n cleanPresences() {\r\n const trash = [];\r\n const tenMinutesAgo = new Date().getTime() - EXPIRED_PRESENCE_TIME;\r\n\r\n Object.entries(this.presences).forEach((presence) => {\r\n const id = presence[0];\r\n const lastUpdated = presence[1];\r\n\r\n // Delete the object if it is stale\r\n if (lastUpdated < tenMinutesAgo) {\r\n delete this.presences[id];\r\n trash.push(id);\r\n }\r\n });\r\n\r\n // Tells client to delete it too\r\n if (trash.length) {\r\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\r\n type: ENVELOPE_TYPE.DELETE,\r\n payload: trash,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Execute chores on an interval.\r\n * Checks if we should make new subscribe,\r\n * checks if we should re-subscribe,\r\n * removes expired subscriptions,\r\n * removes expired presence objects.\r\n * @returns {undefined}\r\n */\r\n groundskeeper() {\r\n const campers = this.checkCampers();\r\n const renewSubscriptions = this.checkSubscriptions();\r\n\r\n const ids = [...campers, ...renewSubscriptions];\r\n\r\n if (ids.length) {\r\n this.webex.internal.presence.subscribe(ids).then((body) => {\r\n const now = new Date().getTime();\r\n\r\n body.responses.forEach((response) => {\r\n if (response.responseCode === 200) {\r\n const ttl = response.subscriptionTtl * 1000;\r\n\r\n this.subscribers[response.subject] = now + ttl;\r\n this.presences[response.status.subject] = now;\r\n } else {\r\n // If it errored for any reason, set the ttl so we clean it out eventually\r\n this.subscribers[response.subject] = now + DEFAULT_SUBSCRIPTION_TTL;\r\n }\r\n });\r\n });\r\n }\r\n\r\n this.cleanPresences();\r\n }\r\n}\r\n"],"mappings":"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"}
|