@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 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
- [![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](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
+ [![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](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: {
@@ -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"}
@@ -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"}
@@ -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"}
@@ -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":";;;;;;;;;;;;;;;;;AAEA,IAAAA,UAAA,GAAAC,OAAA;AAaA;AACA;AACA;AACA;AACA;AAJA,IAKqBC,cAAc;EACjC;AACF;AACA;AACA;AACA;EACE,SAAAA,eAAA,EAAc;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAF,cAAA;IAAA,IAAAG,gBAAA,CAAAD,OAAA,0BAgIG,IAAAE,UAAA,CAAAF,OAAA,EAAS,IAAI,CAACG,aAAa,EAAEC,sBAAW,CAAC;IA/HxD,IAAI,CAACC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAACC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAACC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAACC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,IAAI,CAACC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,IAAI,CAACC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;EACzB;;EAEA;AACF;AACA;AACA;AACA;EAJE,IAAAC,aAAA,CAAAX,OAAA,EAAAF,cAAA;IAAAc,GAAA;IAAAC,KAAA,EAKA,SAAAC,WAAWC,KAAK,EAAE;MAAA,IAAAC,KAAA;MAChB,IAAI,CAACD,KAAK,IAAI,CAACA,KAAK,CAACE,QAAQ,EAAE;QAC7B,MAAM,IAAIC,KAAK,CAAC,6CAA6C,CAAC;MAChE;MAEA,IAAI,CAACH,KAAK,GAAGA,KAAK;MAElB,IAAMI,OAAO,GAAG,IAAI,CAACJ,KAAK,CAACE,QAAQ,CAACE,OAAO,CAACC,SAAS,GACjDC,QAAA,CAAArB,OAAA,CAAQsB,OAAO,EAAE,GACjB,IAAI,CAACP,KAAK,CAACE,QAAQ,CAACE,OAAO,CAACI,OAAO,EAAE;MAEzCJ,OAAO,CAACK,IAAI,CAAC,YAAM;QACjBR,KAAI,CAACD,KAAK,CAACE,QAAQ,CAACE,OAAO,CAACM,EAAE,CAC5BC,uCAA4B,EAC5BV,KAAI,CAACW,kBAAkB,CAACC,IAAI,CAACZ,KAAI,CAAC,CACnC;MACH,CAAC,CAAC;MAEFa,WAAW,CAAC,IAAI,CAACC,aAAa,CAACF,IAAI,CAAC,IAAI,CAAC,EAAEG,iCAAsB,CAAC;IACpE;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAnB,GAAA;IAAAC,KAAA,EAKA,SAAAc,mBAAmBK,KAAK,EAAE;MACxB,IAAI,CAAC3B,SAAS,CAAC2B,KAAK,CAACC,IAAI,CAACC,OAAO,CAAC,GAAG,IAAIC,IAAI,EAAE,CAACC,OAAO,EAAE;MAEzD,IAAI,CAACrB,KAAK,CAACE,QAAQ,CAACoB,QAAQ,CAACC,SAAS,CAACC,0BAAe,EAAE;QACtDC,IAAI,EAAEC,wBAAa,CAACC,YAAY;QAChCC,OAAO,EAAEX,KAAK,CAACC;MACjB,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAArB,GAAA;IAAAC,KAAA,EAKA,SAAA+B,QAAQC,EAAE,EAAE;MACV,IAAMC,GAAG,GAAG,IAAIX,IAAI,EAAE,CAACC,OAAO,EAAE;MAEhC,IAAI,IAAI,CAAC9B,QAAQ,CAACuC,EAAE,CAAC,EAAE;QACrB,IAAI,CAACvC,QAAQ,CAACuC,EAAE,CAAC,IAAI,CAAC;MACxB,CAAC,MAAM;QACL,IAAI,CAACvC,QAAQ,CAACuC,EAAE,CAAC,GAAG,CAAC;MACvB;MAEA,IAAI,IAAI,CAACnC,WAAW,CAACmC,EAAE,CAAC,EAAE;QACxB;MACF;MAEA,IAAI,CAAC,IAAI,CAACpC,OAAO,CAACoC,EAAE,CAAC,EAAE;QACrB,IAAI,CAACpC,OAAO,CAACoC,EAAE,CAAC,GAAGC,GAAG;MACxB;;MAEA;MACA;MACA;MACA;MACA,IACE,CAAC,IAAI,CAACtC,OAAO,CAACqC,EAAE,CAAC,KAChB,CAAC,IAAI,CAACxC,SAAS,CAACwC,EAAE,CAAC,IAAI,IAAI,CAACxC,SAAS,CAACwC,EAAE,CAAC,GAAGC,GAAG,GAAGC,gCAAqB,CAAC,EACzE;QACA,IAAI,CAACxC,QAAQ,CAACsC,EAAE,CAAC,GAAGA,EAAE;QACtB,IAAI,CAACG,cAAc,EAAE;MACvB;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAApC,GAAA;IAAAC,KAAA,EAKA,SAAAoC,QAAQJ,EAAE,EAAE;MACV,IAAI,IAAI,CAACvC,QAAQ,CAACuC,EAAE,CAAC,EAAE;QACrB,IAAI,CAACvC,QAAQ,CAACuC,EAAE,CAAC,IAAI,CAAC;QAEtB,IAAI,IAAI,CAACvC,QAAQ,CAACuC,EAAE,CAAC,IAAI,CAAC,EAAE;UAC1B,OAAO,IAAI,CAACvC,QAAQ,CAACuC,EAAE,CAAC;UACxB,OAAO,IAAI,CAACtC,QAAQ,CAACsC,EAAE,CAAC;UACxB,OAAO,IAAI,CAACpC,OAAO,CAACoC,EAAE,CAAC;QACzB;MACF;IACF;;IAEA;AACF;AACA;AACA;EAHE;IAAAjC,GAAA;IAAAC,KAAA,EAIA,SAAAV,cAAA,EAAgB;MAAA,IAAA+C,MAAA;MACd,IAAMC,QAAQ,GAAG,IAAI,CAAC5C,QAAQ;MAE9B,IAAA6C,OAAA,CAAApD,OAAA,EAAc,IAAI,CAACQ,OAAO,EAAE2C,QAAQ,CAAC;MACrC,IAAI,CAAC5C,QAAQ,GAAG,CAAC,CAAC;MAElB,IAAI,CAACQ,KAAK,CAACE,QAAQ,CAACoB,QAAQ,CAACgB,IAAI,CAAC,IAAAC,KAAA,CAAAtD,OAAA,EAAYmD,QAAQ,CAAC,CAAC,CAAC3B,IAAI,CAAC,UAAC+B,QAAQ,EAAK;QAC1E,IAAMT,GAAG,GAAG,IAAIX,IAAI,EAAE,CAACC,OAAO,EAAE;QAEhCmB,QAAQ,CAACC,UAAU,CAACC,OAAO,CAAC,UAACpB,QAAQ,EAAK;UACxC,IAAMQ,EAAE,GAAGR,QAAQ,CAACH,OAAO;UAE3B,OAAOgB,MAAI,CAAC1C,OAAO,CAACqC,EAAE,CAAC;UACvBK,MAAI,CAAC7C,SAAS,CAACwC,EAAE,CAAC,GAAGC,GAAG;QAC1B,CAAC,CAAC;QAEFI,MAAI,CAACnC,KAAK,CAACE,QAAQ,CAACoB,QAAQ,CAACC,SAAS,CAACC,0BAAe,EAAE;UACtDC,IAAI,EAAEC,wBAAa,CAACiB,QAAQ;UAC5Bf,OAAO,EAAEY;QACX,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;EAAC;IAAA3C,GAAA;IAAAC,KAAA;IAID;AACF;AACA;AACA;IACE,SAAA8C,aAAA,EAAe;MAAA,IAAAC,MAAA;MACb,IAAMd,GAAG,GAAG,IAAIX,IAAI,EAAE,CAACC,OAAO,EAAE;MAChC,IAAM1B,WAAW,GAAG,EAAE;MAEtB,IAAAmD,QAAA,CAAA7D,OAAA,EAAe,IAAI,CAACS,OAAO,CAAC,CAACgD,OAAO,CAAC,UAACK,MAAM,EAAK;QAC/C,IAAMjB,EAAE,GAAGiB,MAAM,CAAC,CAAC,CAAC;QACpB,IAAMC,IAAI,GAAGD,MAAM,CAAC,CAAC,CAAC;;QAEtB;QACA,IAAIC,IAAI,GAAGjB,GAAG,GAAGkB,6BAAkB,EAAE;UACnC,OAAOJ,MAAI,CAACnD,OAAO,CAACoC,EAAE,CAAC;UACvBe,MAAI,CAAClD,WAAW,CAACmC,EAAE,CAAC,GAAG,IAAI;UAC3BnC,WAAW,CAACuD,IAAI,CAACpB,EAAE,CAAC;QACtB;MACF,CAAC,CAAC;MAEF,OAAOnC,WAAW;IACpB;;IAEA;AACF;AACA;AACA;EAHE;IAAAE,GAAA;IAAAC,KAAA,EAIA,SAAAqD,mBAAA,EAAqB;MAAA,IAAAC,MAAA;MACnB,IAAMrB,GAAG,GAAG,IAAIX,IAAI,EAAE,CAACC,OAAO,EAAE;MAEhC,IAAMgC,QAAQ,GAAG,EAAE;MAEnB,IAAAP,QAAA,CAAA7D,OAAA,EAAe,IAAI,CAACU,WAAW,CAAC,CAAC+C,OAAO,CAAC,UAACY,YAAY,EAAK;QACzD,IAAMxB,EAAE,GAAGwB,YAAY,CAAC,CAAC,CAAC;QAC1B,IAAMC,UAAU,GAAGD,YAAY,CAAC,CAAC,CAAC;QAElC,IAAIC,UAAU,EAAE;UACd;UACA,IAAIH,MAAI,CAAC7D,QAAQ,CAACuC,EAAE,CAAC,IAAIC,GAAG,GAAGwB,UAAU,GAAGC,iDAAsC,EAAE;YAClFH,QAAQ,CAACH,IAAI,CAACpB,EAAE,CAAC;UACnB,CAAC,MAAM,IAAIC,GAAG,GAAGwB,UAAU,EAAE;YAC3B,OAAOH,MAAI,CAACzD,WAAW,CAACmC,EAAE,CAAC;UAC7B;QACF;MACF,CAAC,CAAC;MAEF,OAAOuB,QAAQ;IACjB;;IAEA;AACF;AACA;AACA;EAHE;IAAAxD,GAAA;IAAAC,KAAA,EAIA,SAAA2D,eAAA,EAAiB;MAAA,IAAAC,MAAA;MACf,IAAMC,KAAK,GAAG,EAAE;MAChB,IAAMC,aAAa,GAAG,IAAIxC,IAAI,EAAE,CAACC,OAAO,EAAE,GAAGwC,gCAAqB;MAElE,IAAAf,QAAA,CAAA7D,OAAA,EAAe,IAAI,CAACK,SAAS,CAAC,CAACoD,OAAO,CAAC,UAACpB,QAAQ,EAAK;QACnD,IAAMQ,EAAE,GAAGR,QAAQ,CAAC,CAAC,CAAC;QACtB,IAAMwC,WAAW,GAAGxC,QAAQ,CAAC,CAAC,CAAC;;QAE/B;QACA,IAAIwC,WAAW,GAAGF,aAAa,EAAE;UAC/B,OAAOF,MAAI,CAACpE,SAAS,CAACwC,EAAE,CAAC;UACzB6B,KAAK,CAACT,IAAI,CAACpB,EAAE,CAAC;QAChB;MACF,CAAC,CAAC;;MAEF;MACA,IAAI6B,KAAK,CAACI,MAAM,EAAE;QAChB,IAAI,CAAC/D,KAAK,CAACE,QAAQ,CAACoB,QAAQ,CAACC,SAAS,CAACC,0BAAe,EAAE;UACtDC,IAAI,EAAEC,wBAAa,CAACsC,MAAM;UAC1BpC,OAAO,EAAE+B;QACX,CAAC,CAAC;MACJ;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA9D,GAAA;IAAAC,KAAA,EAQA,SAAAiB,cAAA,EAAgB;MAAA,IAAAkD,MAAA;MACd,IAAMvE,OAAO,GAAG,IAAI,CAACkD,YAAY,EAAE;MACnC,IAAMsB,kBAAkB,GAAG,IAAI,CAACf,kBAAkB,EAAE;MAEpD,IAAMgB,GAAG,MAAAC,MAAA,KAAAC,mBAAA,CAAApF,OAAA,EAAOS,OAAO,OAAA2E,mBAAA,CAAApF,OAAA,EAAKiF,kBAAkB,EAAC;MAE/C,IAAIC,GAAG,CAACJ,MAAM,EAAE;QACd,IAAI,CAAC/D,KAAK,CAACE,QAAQ,CAACoB,QAAQ,CAACgD,SAAS,CAACH,GAAG,CAAC,CAAC1D,IAAI,CAAC,UAAC8D,IAAI,EAAK;UACzD,IAAMxC,GAAG,GAAG,IAAIX,IAAI,EAAE,CAACC,OAAO,EAAE;UAEhCkD,IAAI,CAACC,SAAS,CAAC9B,OAAO,CAAC,UAACF,QAAQ,EAAK;YACnC,IAAIA,QAAQ,CAACiC,YAAY,KAAK,GAAG,EAAE;cACjC,IAAMC,GAAG,GAAGlC,QAAQ,CAACmC,eAAe,GAAG,IAAI;cAE3CV,MAAI,CAACtE,WAAW,CAAC6C,QAAQ,CAACrB,OAAO,CAAC,GAAGY,GAAG,GAAG2C,GAAG;cAC9CT,MAAI,CAAC3E,SAAS,CAACkD,QAAQ,CAACoC,MAAM,CAACzD,OAAO,CAAC,GAAGY,GAAG;YAC/C,CAAC,MAAM;cACL;cACAkC,MAAI,CAACtE,WAAW,CAAC6C,QAAQ,CAACrB,OAAO,CAAC,GAAGY,GAAG,GAAG8C,mCAAwB;YACrE;UACF,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ;MAEA,IAAI,CAACpB,cAAc,EAAE;IACvB;EAAC;EAAA,OAAA1E,cAAA;AAAA;AAAA+F,OAAA,CAAA7F,OAAA,GAAAF,cAAA"}