@webex/internal-plugin-presence 3.0.0-beta.9 → 3.0.0-bnr.0

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/README.md CHANGED
@@ -21,14 +21,12 @@ npm install --save @webex/internal-plugin-presence
21
21
  ## Usage
22
22
 
23
23
  ```js
24
-
25
24
  import '@webex/internal-plugin-presence';
26
25
 
27
26
  import WebexCore from '@webex/webex-core';
28
27
 
29
28
  const webex = new WebexCore();
30
- webex.internal.presence.WHATEVER
31
-
29
+ webex.internal.presence.WHATEVER;
32
30
  ```
33
31
 
34
32
  ## Maintainers
package/dist/config.js CHANGED
@@ -1,13 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  _Object$defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
-
9
7
  exports.default = void 0;
10
-
11
8
  /*!
12
9
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
13
10
  */
@@ -1 +1 @@
1
- {"version":3,"names":["presence","batcherWait","batcherMaxCalls","batcherMaxWait"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n presence: {\n batcherWait: 50,\n batcherMaxCalls: 50,\n batcherMaxWait: 150\n }\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;eAEe;EACbA,QAAQ,EAAE;IACRC,WAAW,EAAE,EADL;IAERC,eAAe,EAAE,EAFT;IAGRC,cAAc,EAAE;EAHR;AADG,C"}
1
+ {"version":3,"names":["presence","batcherWait","batcherMaxCalls","batcherMaxWait"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n presence: {\n batcherWait: 50,\n batcherMaxCalls: 50,\n batcherMaxWait: 150,\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,eAIe;EACbA,QAAQ,EAAE;IACRC,WAAW,EAAE,EAAE;IACfC,eAAe,EAAE,EAAE;IACnBC,cAAc,EAAE;EAClB;AACF,CAAC;AAAA"}
package/dist/constants.js CHANGED
@@ -1,32 +1,23 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  _Object$defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
-
9
7
  exports.UPDATE_PRESENCE_DELAY = exports.SUBSCRIPTION_DELAY = exports.PRESENCE_UPDATE = exports.PREMATURE_EXPIRATION_SUBSCRIPTION_TIME = exports.GROUNDSKEEPER_INTERVAL = exports.FETCH_DELAY = exports.EXPIRED_PRESENCE_TIME = exports.ENVELOPE_TYPE = exports.DEFAULT_SUBSCRIPTION_TTL = exports.APHELEIA_SUBSCRIPTION_UPDATE = void 0;
10
8
  var GROUNDSKEEPER_INTERVAL = 20 * 1000; // 20 seconds in ms
11
-
12
9
  exports.GROUNDSKEEPER_INTERVAL = GROUNDSKEEPER_INTERVAL;
13
10
  var FETCH_DELAY = 300; // ms
14
-
15
11
  exports.FETCH_DELAY = FETCH_DELAY;
16
12
  var UPDATE_PRESENCE_DELAY = 60 * 1000; // 1 minute in ms
17
-
18
13
  exports.UPDATE_PRESENCE_DELAY = UPDATE_PRESENCE_DELAY;
19
14
  var EXPIRED_PRESENCE_TIME = 10 * 60 * 1000; // 10 minutes in ms
20
-
21
15
  exports.EXPIRED_PRESENCE_TIME = EXPIRED_PRESENCE_TIME;
22
16
  var SUBSCRIPTION_DELAY = 60 * 1000; // 1 minute in ms
23
-
24
17
  exports.SUBSCRIPTION_DELAY = SUBSCRIPTION_DELAY;
25
18
  var PREMATURE_EXPIRATION_SUBSCRIPTION_TIME = 60 * 1000; // 1 minute in ms
26
-
27
19
  exports.PREMATURE_EXPIRATION_SUBSCRIPTION_TIME = PREMATURE_EXPIRATION_SUBSCRIPTION_TIME;
28
20
  var DEFAULT_SUBSCRIPTION_TTL = 10 * 60 * 1000; // 10 minutes in ms
29
-
30
21
  exports.DEFAULT_SUBSCRIPTION_TTL = DEFAULT_SUBSCRIPTION_TTL;
31
22
  var APHELEIA_SUBSCRIPTION_UPDATE = 'event:apheleia.subscription_update';
32
23
  exports.APHELEIA_SUBSCRIPTION_UPDATE = APHELEIA_SUBSCRIPTION_UPDATE;
@@ -1 +1 @@
1
- {"version":3,"names":["GROUNDSKEEPER_INTERVAL","FETCH_DELAY","UPDATE_PRESENCE_DELAY","EXPIRED_PRESENCE_TIME","SUBSCRIPTION_DELAY","PREMATURE_EXPIRATION_SUBSCRIPTION_TIME","DEFAULT_SUBSCRIPTION_TTL","APHELEIA_SUBSCRIPTION_UPDATE","PRESENCE_UPDATE","ENVELOPE_TYPE","SUBSCRIPTION","PRESENCE","DELETE"],"sources":["constants.js"],"sourcesContent":["\nexport 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 =\n '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":";;;;;;;;;AACO,IAAMA,sBAAsB,GAAG,KAAK,IAApC,C,CAA0C;;;AAE1C,IAAMC,WAAW,GAAG,GAApB,C,CAAyB;;;AAEzB,IAAMC,qBAAqB,GAAG,KAAK,IAAnC,C,CAAyC;;;AACzC,IAAMC,qBAAqB,GAAG,KAAK,EAAL,GAAU,IAAxC,C,CAA8C;;;AAE9C,IAAMC,kBAAkB,GAAG,KAAK,IAAhC,C,CAAsC;;;AACtC,IAAMC,sCAAsC,GAAG,KAAK,IAApD,C,CAA0D;;;AAC1D,IAAMC,wBAAwB,GAAG,KAAK,EAAL,GAAU,IAA3C,C,CAAiD;;;AAEjD,IAAMC,4BAA4B,GACvC,oCADK;;AAEA,IAAMC,eAAe,GAAG,SAAxB;;AAEA,IAAMC,aAAa,GAAG;EAC3BC,YAAY,EAAE,cADa;EAE3BC,QAAQ,EAAE,UAFiB;EAG3BC,MAAM,EAAE;AAHmB,CAAtB"}
1
+ {"version":3,"names":["GROUNDSKEEPER_INTERVAL","FETCH_DELAY","UPDATE_PRESENCE_DELAY","EXPIRED_PRESENCE_TIME","SUBSCRIPTION_DELAY","PREMATURE_EXPIRATION_SUBSCRIPTION_TIME","DEFAULT_SUBSCRIPTION_TTL","APHELEIA_SUBSCRIPTION_UPDATE","PRESENCE_UPDATE","ENVELOPE_TYPE","SUBSCRIPTION","PRESENCE","DELETE"],"sources":["constants.js"],"sourcesContent":["export const GROUNDSKEEPER_INTERVAL = 20 * 1000; // 20 seconds in ms\n\nexport const FETCH_DELAY = 300; // ms\n\nexport const UPDATE_PRESENCE_DELAY = 60 * 1000; // 1 minute in ms\nexport const EXPIRED_PRESENCE_TIME = 10 * 60 * 1000; // 10 minutes in ms\n\nexport const SUBSCRIPTION_DELAY = 60 * 1000; // 1 minute in ms\nexport const PREMATURE_EXPIRATION_SUBSCRIPTION_TIME = 60 * 1000; // 1 minute in ms\nexport const DEFAULT_SUBSCRIPTION_TTL = 10 * 60 * 1000; // 10 minutes in ms\n\nexport const APHELEIA_SUBSCRIPTION_UPDATE = 'event:apheleia.subscription_update';\nexport const PRESENCE_UPDATE = 'updated';\n\nexport const ENVELOPE_TYPE = {\n SUBSCRIPTION: 'subscription',\n PRESENCE: 'presence',\n DELETE: 'delete',\n};\n"],"mappings":";;;;;;;AAAO,IAAMA,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAA;AAE1C,IAAMC,WAAW,GAAG,GAAG,CAAC,CAAC;AAAA;AAEzB,IAAMC,qBAAqB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAA;AACzC,IAAMC,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAA;AAE9C,IAAMC,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAA;AACtC,IAAMC,sCAAsC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAA;AAC1D,IAAMC,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAAA;AAEjD,IAAMC,4BAA4B,GAAG,oCAAoC;AAAC;AAC1E,IAAMC,eAAe,GAAG,SAAS;AAAC;AAElC,IAAMC,aAAa,GAAG;EAC3BC,YAAY,EAAE,cAAc;EAC5BC,QAAQ,EAAE,UAAU;EACpBC,MAAM,EAAE;AACV,CAAC;AAAC"}
package/dist/index.js CHANGED
@@ -1,35 +1,26 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  _Object$defineProperty(exports, "default", {
12
9
  enumerable: true,
13
10
  get: function get() {
14
11
  return _presence.default;
15
12
  }
16
13
  });
17
-
18
14
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
19
-
20
15
  var _has2 = _interopRequireDefault(require("lodash/has"));
21
-
22
16
  require("@webex/internal-plugin-device");
23
-
24
17
  var _webexCore = require("@webex/webex-core");
25
-
26
18
  var _presence = _interopRequireDefault(require("./presence"));
27
-
28
19
  var _config = _interopRequireDefault(require("./config"));
29
-
30
20
  /*!
31
21
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
32
22
  */
23
+
33
24
  (0, _webexCore.registerInternalPlugin)('presence', _presence.default, {
34
25
  payloadTransformer: {
35
26
  predicates: [{
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["registerInternalPlugin","Presence","payloadTransformer","predicates","name","direction","test","ctx","response","resolve","extract","transforms","fn","body","status","eventType","config"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {has} from 'lodash';\n\nimport Presence from './presence';\nimport config from './config';\n\nregisterInternalPlugin('presence', Presence, {\n payloadTransformer: {\n predicates: [\n {\n name: 'normalizeSingleStatusResponse',\n direction: 'inbound',\n test(ctx, response) {\n // POST to /apheleia/api/v1/events\n return Promise.resolve(has(response, 'body.eventType') && has(response, 'body.subject'));\n },\n extract(response) {\n return Promise.resolve(response);\n }\n }\n ],\n transforms: [\n {\n name: 'normalizeSingleStatusResponse',\n direction: 'inbound',\n fn(ctx, response) {\n response.body.status = response.body.eventType;\n }\n }\n ]\n },\n config\n});\n\nexport {default} from './presence';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAIA;;AAEA;;AAGA;;AACA;;AAVA;AACA;AACA;AAUA,IAAAA,iCAAA,EAAuB,UAAvB,EAAmCC,iBAAnC,EAA6C;EAC3CC,kBAAkB,EAAE;IAClBC,UAAU,EAAE,CACV;MACEC,IAAI,EAAE,+BADR;MAEEC,SAAS,EAAE,SAFb;MAGEC,IAHF,gBAGOC,GAHP,EAGYC,QAHZ,EAGsB;QAClB;QACA,OAAO,iBAAQC,OAAR,CAAgB,mBAAID,QAAJ,EAAc,gBAAd,KAAmC,mBAAIA,QAAJ,EAAc,cAAd,CAAnD,CAAP;MACD,CANH;MAOEE,OAPF,mBAOUF,QAPV,EAOoB;QAChB,OAAO,iBAAQC,OAAR,CAAgBD,QAAhB,CAAP;MACD;IATH,CADU,CADM;IAclBG,UAAU,EAAE,CACV;MACEP,IAAI,EAAE,+BADR;MAEEC,SAAS,EAAE,SAFb;MAGEO,EAHF,cAGKL,GAHL,EAGUC,QAHV,EAGoB;QAChBA,QAAQ,CAACK,IAAT,CAAcC,MAAd,GAAuBN,QAAQ,CAACK,IAAT,CAAcE,SAArC;MACD;IALH,CADU;EAdM,CADuB;EAyB3CC,MAAM,EAANA;AAzB2C,CAA7C"}
1
+ {"version":3,"names":["registerInternalPlugin","Presence","payloadTransformer","predicates","name","direction","test","ctx","response","resolve","extract","transforms","fn","body","status","eventType","config"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {has} from 'lodash';\n\nimport Presence from './presence';\nimport config from './config';\n\nregisterInternalPlugin('presence', Presence, {\n payloadTransformer: {\n predicates: [\n {\n name: 'normalizeSingleStatusResponse',\n direction: 'inbound',\n test(ctx, response) {\n // POST to /apheleia/api/v1/events\n return Promise.resolve(has(response, 'body.eventType') && has(response, 'body.subject'));\n },\n extract(response) {\n return Promise.resolve(response);\n },\n },\n ],\n transforms: [\n {\n name: 'normalizeSingleStatusResponse',\n direction: 'inbound',\n fn(ctx, response) {\n response.body.status = response.body.eventType;\n },\n },\n ],\n },\n config,\n});\n\nexport {default} from './presence';\n"],"mappings":";;;;;;;;;;;;;;;AAIA;AAEA;AAGA;AACA;AAVA;AACA;AACA;;AAUA,IAAAA,iCAAsB,EAAC,UAAU,EAAEC,iBAAQ,EAAE;EAC3CC,kBAAkB,EAAE;IAClBC,UAAU,EAAE,CACV;MACEC,IAAI,EAAE,+BAA+B;MACrCC,SAAS,EAAE,SAAS;MACpBC,IAAI,gBAACC,GAAG,EAAEC,QAAQ,EAAE;QAClB;QACA,OAAO,iBAAQC,OAAO,CAAC,mBAAID,QAAQ,EAAE,gBAAgB,CAAC,IAAI,mBAAIA,QAAQ,EAAE,cAAc,CAAC,CAAC;MAC1F,CAAC;MACDE,OAAO,mBAACF,QAAQ,EAAE;QAChB,OAAO,iBAAQC,OAAO,CAACD,QAAQ,CAAC;MAClC;IACF,CAAC,CACF;IACDG,UAAU,EAAE,CACV;MACEP,IAAI,EAAE,+BAA+B;MACrCC,SAAS,EAAE,SAAS;MACpBO,EAAE,cAACL,GAAG,EAAEC,QAAQ,EAAE;QAChBA,QAAQ,CAACK,IAAI,CAACC,MAAM,GAAGN,QAAQ,CAACK,IAAI,CAACE,SAAS;MAChD;IACF,CAAC;EAEL,CAAC;EACDC,MAAM,EAANA;AACF,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @class
3
+ * @extends WebexPlugin
4
+ */
5
+ declare const Presence: any;
6
+ export default Presence;
7
+
8
+ export { }
@@ -1,19 +1,13 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = void 0;
12
-
13
9
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
14
-
15
10
  var _webexCore = require("@webex/webex-core");
16
-
17
11
  /*!
18
12
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
19
13
  */
@@ -24,7 +18,6 @@ var _webexCore = require("@webex/webex-core");
24
18
  */
25
19
  var PresenceBatcher = _webexCore.Batcher.extend({
26
20
  namespace: 'Presence',
27
-
28
21
  /**
29
22
  * @instance
30
23
  * @memberof PresenceBatcher
@@ -33,12 +26,10 @@ var PresenceBatcher = _webexCore.Batcher.extend({
33
26
  */
34
27
  handleHttpSuccess: function handleHttpSuccess(res) {
35
28
  var _this = this;
36
-
37
29
  return _promise.default.all(res.body.statusList.map(function (presenceResponse) {
38
30
  return _this.handleItemSuccess(presenceResponse.subject, presenceResponse);
39
31
  }));
40
32
  },
41
-
42
33
  /**
43
34
  * @instance
44
35
  * @memberof PresenceBatcher
@@ -51,7 +42,6 @@ var PresenceBatcher = _webexCore.Batcher.extend({
51
42
  defer.reject(response);
52
43
  });
53
44
  },
54
-
55
45
  /**
56
46
  * @instance
57
47
  * @memberof PresenceBatcher
@@ -64,7 +54,6 @@ var PresenceBatcher = _webexCore.Batcher.extend({
64
54
  defer.resolve(response);
65
55
  });
66
56
  },
67
-
68
57
  /**
69
58
  * @instance
70
59
  * @memberof PresenceBatcher
@@ -74,7 +63,6 @@ var PresenceBatcher = _webexCore.Batcher.extend({
74
63
  fingerprintRequest: function fingerprintRequest(id) {
75
64
  return _promise.default.resolve(id);
76
65
  },
77
-
78
66
  /**
79
67
  * @instance
80
68
  * @memberof PresenceBatcher
@@ -84,7 +72,6 @@ var PresenceBatcher = _webexCore.Batcher.extend({
84
72
  fingerprintResponse: function fingerprintResponse(id) {
85
73
  return _promise.default.resolve(id);
86
74
  },
87
-
88
75
  /**
89
76
  * @instance
90
77
  * @memberof PresenceBatcher
@@ -94,7 +81,6 @@ var PresenceBatcher = _webexCore.Batcher.extend({
94
81
  prepareRequest: function prepareRequest(ids) {
95
82
  return _promise.default.resolve(ids);
96
83
  },
97
-
98
84
  /**
99
85
  * @instance
100
86
  * @memberof PresenceBatcher
@@ -112,7 +98,6 @@ var PresenceBatcher = _webexCore.Batcher.extend({
112
98
  });
113
99
  }
114
100
  });
115
-
116
101
  var _default = PresenceBatcher;
117
102
  exports.default = _default;
118
103
  //# sourceMappingURL=presence-batcher.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["PresenceBatcher","Batcher","extend","namespace","handleHttpSuccess","res","all","body","statusList","map","presenceResponse","handleItemSuccess","subject","handleItemFailure","item","response","getDeferredForResponse","then","defer","reject","resolve","fingerprintRequest","id","fingerprintResponse","prepareRequest","ids","submitHttpRequest","subjects","webex","request","method","api","resource"],"sources":["presence-batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Batcher} from '@webex/webex-core';\n\n/**\n * @class\n * @ignore\n */\nconst PresenceBatcher = Batcher.extend({\n namespace: 'Presence',\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {HttpResponseObject} res\n * @returns {Promise}\n */\n handleHttpSuccess(res) {\n return Promise.all(res.body.statusList.map((presenceResponse) =>\n this.handleItemSuccess(presenceResponse.subject, presenceResponse)));\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)\n .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)\n .then((defer) => {\n defer.resolve(response);\n });\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} id\n * @returns {Promise<string>}\n */\n fingerprintRequest(id) {\n return Promise.resolve(id);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} id\n * @returns {Promise<string>}\n */\n fingerprintResponse(id) {\n return Promise.resolve(id);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {Array} ids\n * @returns {Promise<Array>}\n */\n prepareRequest(ids) {\n return Promise.resolve(ids);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {Object} subjects\n * @returns {Promise<HttpResponseObject>}\n */\n submitHttpRequest(subjects) {\n return this.webex.request({\n method: 'POST',\n api: 'apheleia',\n resource: 'compositions',\n body: {subjects}\n });\n }\n});\n\nexport default PresenceBatcher;\n"],"mappings":";;;;;;;;;;;;;;AAIA;;AAJA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA,IAAMA,eAAe,GAAGC,kBAAA,CAAQC,MAAR,CAAe;EACrCC,SAAS,EAAE,UAD0B;;EAGrC;AACF;AACA;AACA;AACA;AACA;EACEC,iBATqC,6BASnBC,GATmB,EASd;IAAA;;IACrB,OAAO,iBAAQC,GAAR,CAAYD,GAAG,CAACE,IAAJ,CAASC,UAAT,CAAoBC,GAApB,CAAwB,UAACC,gBAAD;MAAA,OACzC,KAAI,CAACC,iBAAL,CAAuBD,gBAAgB,CAACE,OAAxC,EAAiDF,gBAAjD,CADyC;IAAA,CAAxB,CAAZ,CAAP;EAED,CAZoC;;EAcrC;AACF;AACA;AACA;AACA;AACA;AACA;EACEG,iBArBqC,6BAqBnBC,IArBmB,EAqBbC,QArBa,EAqBH;IAChC,OAAO,KAAKC,sBAAL,CAA4BF,IAA5B,EACJG,IADI,CACC,UAACC,KAAD,EAAW;MACfA,KAAK,CAACC,MAAN,CAAaJ,QAAb;IACD,CAHI,CAAP;EAID,CA1BoC;;EA4BrC;AACF;AACA;AACA;AACA;AACA;AACA;EACEJ,iBAnCqC,6BAmCnBG,IAnCmB,EAmCbC,QAnCa,EAmCH;IAChC,OAAO,KAAKC,sBAAL,CAA4BF,IAA5B,EACJG,IADI,CACC,UAACC,KAAD,EAAW;MACfA,KAAK,CAACE,OAAN,CAAcL,QAAd;IACD,CAHI,CAAP;EAID,CAxCoC;;EA0CrC;AACF;AACA;AACA;AACA;AACA;EACEM,kBAhDqC,8BAgDlBC,EAhDkB,EAgDd;IACrB,OAAO,iBAAQF,OAAR,CAAgBE,EAAhB,CAAP;EACD,CAlDoC;;EAoDrC;AACF;AACA;AACA;AACA;AACA;EACEC,mBA1DqC,+BA0DjBD,EA1DiB,EA0Db;IACtB,OAAO,iBAAQF,OAAR,CAAgBE,EAAhB,CAAP;EACD,CA5DoC;;EA8DrC;AACF;AACA;AACA;AACA;AACA;EACEE,cApEqC,0BAoEtBC,GApEsB,EAoEjB;IAClB,OAAO,iBAAQL,OAAR,CAAgBK,GAAhB,CAAP;EACD,CAtEoC;;EAwErC;AACF;AACA;AACA;AACA;AACA;EACEC,iBA9EqC,6BA8EnBC,QA9EmB,EA8ET;IAC1B,OAAO,KAAKC,KAAL,CAAWC,OAAX,CAAmB;MACxBC,MAAM,EAAE,MADgB;MAExBC,GAAG,EAAE,UAFmB;MAGxBC,QAAQ,EAAE,cAHc;MAIxBzB,IAAI,EAAE;QAACoB,QAAQ,EAARA;MAAD;IAJkB,CAAnB,CAAP;EAMD;AArFoC,CAAf,CAAxB;;eAwFe3B,e"}
1
+ {"version":3,"names":["PresenceBatcher","Batcher","extend","namespace","handleHttpSuccess","res","all","body","statusList","map","presenceResponse","handleItemSuccess","subject","handleItemFailure","item","response","getDeferredForResponse","then","defer","reject","resolve","fingerprintRequest","id","fingerprintResponse","prepareRequest","ids","submitHttpRequest","subjects","webex","request","method","api","resource"],"sources":["presence-batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Batcher} from '@webex/webex-core';\n\n/**\n * @class\n * @ignore\n */\nconst PresenceBatcher = Batcher.extend({\n namespace: 'Presence',\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {HttpResponseObject} res\n * @returns {Promise}\n */\n handleHttpSuccess(res) {\n return Promise.all(\n res.body.statusList.map((presenceResponse) =>\n this.handleItemSuccess(presenceResponse.subject, presenceResponse)\n )\n );\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} item\n * @param {Object} response\n * @returns {Promise}\n */\n handleItemFailure(item, response) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.reject(response);\n });\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} item\n * @param {Object} response\n * @returns {Promise}\n */\n handleItemSuccess(item, response) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.resolve(response);\n });\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} id\n * @returns {Promise<string>}\n */\n fingerprintRequest(id) {\n return Promise.resolve(id);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {string} id\n * @returns {Promise<string>}\n */\n fingerprintResponse(id) {\n return Promise.resolve(id);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {Array} ids\n * @returns {Promise<Array>}\n */\n prepareRequest(ids) {\n return Promise.resolve(ids);\n },\n\n /**\n * @instance\n * @memberof PresenceBatcher\n * @param {Object} subjects\n * @returns {Promise<HttpResponseObject>}\n */\n submitHttpRequest(subjects) {\n return this.webex.request({\n method: 'POST',\n api: 'apheleia',\n resource: 'compositions',\n body: {subjects},\n });\n },\n});\n\nexport default PresenceBatcher;\n"],"mappings":";;;;;;;;;AAIA;AAJA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA,IAAMA,eAAe,GAAGC,kBAAO,CAACC,MAAM,CAAC;EACrCC,SAAS,EAAE,UAAU;EAErB;AACF;AACA;AACA;AACA;AACA;EACEC,iBAAiB,6BAACC,GAAG,EAAE;IAAA;IACrB,OAAO,iBAAQC,GAAG,CAChBD,GAAG,CAACE,IAAI,CAACC,UAAU,CAACC,GAAG,CAAC,UAACC,gBAAgB;MAAA,OACvC,KAAI,CAACC,iBAAiB,CAACD,gBAAgB,CAACE,OAAO,EAAEF,gBAAgB,CAAC;IAAA,EACnE,CACF;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEG,iBAAiB,6BAACC,IAAI,EAAEC,QAAQ,EAAE;IAChC,OAAO,IAAI,CAACC,sBAAsB,CAACF,IAAI,CAAC,CAACG,IAAI,CAAC,UAACC,KAAK,EAAK;MACvDA,KAAK,CAACC,MAAM,CAACJ,QAAQ,CAAC;IACxB,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEJ,iBAAiB,6BAACG,IAAI,EAAEC,QAAQ,EAAE;IAChC,OAAO,IAAI,CAACC,sBAAsB,CAACF,IAAI,CAAC,CAACG,IAAI,CAAC,UAACC,KAAK,EAAK;MACvDA,KAAK,CAACE,OAAO,CAACL,QAAQ,CAAC;IACzB,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEM,kBAAkB,8BAACC,EAAE,EAAE;IACrB,OAAO,iBAAQF,OAAO,CAACE,EAAE,CAAC;EAC5B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEC,mBAAmB,+BAACD,EAAE,EAAE;IACtB,OAAO,iBAAQF,OAAO,CAACE,EAAE,CAAC;EAC5B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEE,cAAc,0BAACC,GAAG,EAAE;IAClB,OAAO,iBAAQL,OAAO,CAACK,GAAG,CAAC;EAC7B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEC,iBAAiB,6BAACC,QAAQ,EAAE;IAC1B,OAAO,IAAI,CAACC,KAAK,CAACC,OAAO,CAAC;MACxBC,MAAM,EAAE,MAAM;MACdC,GAAG,EAAE,UAAU;MACfC,QAAQ,EAAE,cAAc;MACxBzB,IAAI,EAAE;QAACoB,QAAQ,EAARA;MAAQ;IACjB,CAAC,CAAC;EACJ;AACF,CAAC,CAAC;AAAC,eAEY3B,eAAe;AAAA"}
@@ -1,35 +1,21 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = void 0;
12
-
13
9
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
14
-
15
10
  var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign"));
16
-
17
11
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
18
-
19
12
  var _entries = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/entries"));
20
-
21
13
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
22
-
23
14
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
24
-
25
15
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
26
-
27
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
28
-
29
17
  var _debounce2 = _interopRequireDefault(require("lodash/debounce"));
30
-
31
18
  var _constants = require("./constants");
32
-
33
19
  /**
34
20
  * Presence Worker
35
21
  * Manages fetches and subscriptions for presence
@@ -45,33 +31,25 @@ var PresenceWorker = /*#__PURE__*/function () {
45
31
  (0, _classCallCheck2.default)(this, PresenceWorker);
46
32
  (0, _defineProperty2.default)(this, "debouncedFetch", (0, _debounce2.default)(this.checkFetchers, _constants.FETCH_DELAY));
47
33
  this.presences = {}; // current presence objects; updated time
48
-
49
34
  this.watchers = {}; // counter of visible presence-required objects
50
-
51
35
  this.fetchers = {}; // waiting to get presence object
52
-
53
36
  this.flights = {}; // in flight to get presence object
54
-
55
37
  this.campers = {}; // waiting to subscribe; updated time
56
-
57
38
  this.subscribers = {}; // current subscriptions; expiration time
58
39
  }
40
+
59
41
  /**
60
42
  * Connect to the mercury for presence and starts worker.
61
43
  * @param {object} webex
62
44
  * @returns {undefined}
63
45
  */
64
-
65
-
66
46
  (0, _createClass2.default)(PresenceWorker, [{
67
47
  key: "initialize",
68
48
  value: function initialize(webex) {
69
49
  var _this = this;
70
-
71
50
  if (!webex || !webex.internal) {
72
51
  throw new Error('Must initialize Presence Worker with webex!');
73
52
  }
74
-
75
53
  this.webex = webex;
76
54
  var mercury = this.webex.internal.mercury.connected ? _promise.default.resolve() : this.webex.internal.mercury.connect();
77
55
  mercury.then(function () {
@@ -79,12 +57,12 @@ var PresenceWorker = /*#__PURE__*/function () {
79
57
  });
80
58
  setInterval(this.groundskeeper.bind(this), _constants.GROUNDSKEEPER_INTERVAL);
81
59
  }
60
+
82
61
  /**
83
62
  * Trigger a subscription update event.
84
63
  * @param {string} event
85
64
  * @returns {undefined}
86
65
  */
87
-
88
66
  }, {
89
67
  key: "subscriptionUpdate",
90
68
  value: function subscriptionUpdate(event) {
@@ -94,52 +72,48 @@ var PresenceWorker = /*#__PURE__*/function () {
94
72
  payload: event.data
95
73
  });
96
74
  }
75
+
97
76
  /**
98
77
  * Retrieves and subscribes to a user's presence.
99
78
  * @param {string} id
100
79
  * @returns {undefined}
101
80
  */
102
-
103
81
  }, {
104
82
  key: "enqueue",
105
83
  value: function enqueue(id) {
106
84
  var now = new Date().getTime();
107
-
108
85
  if (this.watchers[id]) {
109
86
  this.watchers[id] += 1;
110
87
  } else {
111
88
  this.watchers[id] = 1;
112
89
  }
113
-
114
90
  if (this.subscribers[id]) {
115
91
  return;
116
92
  }
117
-
118
93
  if (!this.campers[id]) {
119
94
  this.campers[id] = now;
120
- } // Retrieve presence if:
95
+ }
96
+
97
+ // Retrieve presence if:
121
98
  // not in flight or
122
99
  // don't already have the presence or
123
100
  // presence has gone stale
124
-
125
-
126
101
  if (!this.flights[id] && (!this.presences[id] || this.presences[id] < now - _constants.UPDATE_PRESENCE_DELAY)) {
127
102
  this.fetchers[id] = id;
128
103
  this.debouncedFetch();
129
104
  }
130
105
  }
106
+
131
107
  /**
132
108
  * Retract from subscribing to a user's presence.
133
109
  * @param {string} id
134
110
  * @returns {undefined}
135
111
  */
136
-
137
112
  }, {
138
113
  key: "dequeue",
139
114
  value: function dequeue(id) {
140
115
  if (this.watchers[id]) {
141
116
  this.watchers[id] -= 1;
142
-
143
117
  if (this.watchers[id] <= 0) {
144
118
  delete this.watchers[id];
145
119
  delete this.fetchers[id];
@@ -147,16 +121,15 @@ var PresenceWorker = /*#__PURE__*/function () {
147
121
  }
148
122
  }
149
123
  }
124
+
150
125
  /**
151
126
  * Retrieve users' presences.
152
127
  * @returns {undefined}
153
128
  */
154
-
155
129
  }, {
156
130
  key: "checkFetchers",
157
131
  value: function checkFetchers() {
158
132
  var _this2 = this;
159
-
160
133
  var boarding = this.fetchers;
161
134
  (0, _assign.default)(this.flights, boarding);
162
135
  this.fetchers = {};
@@ -167,7 +140,6 @@ var PresenceWorker = /*#__PURE__*/function () {
167
140
  delete _this2.flights[id];
168
141
  _this2.presences[id] = now;
169
142
  });
170
-
171
143
  _this2.webex.internal.presence.emitEvent(_constants.PRESENCE_UPDATE, {
172
144
  type: _constants.ENVELOPE_TYPE.PRESENCE,
173
145
  payload: response
@@ -183,13 +155,13 @@ var PresenceWorker = /*#__PURE__*/function () {
183
155
  */
184
156
  function checkCampers() {
185
157
  var _this3 = this;
186
-
187
158
  var now = new Date().getTime();
188
159
  var subscribers = [];
189
160
  (0, _entries.default)(this.campers).forEach(function (camper) {
190
161
  var id = camper[0];
191
- var time = camper[1]; // Subscribe if they've been camping for a minute
162
+ var time = camper[1];
192
163
 
164
+ // Subscribe if they've been camping for a minute
193
165
  if (time < now - _constants.SUBSCRIPTION_DELAY) {
194
166
  delete _this3.campers[id];
195
167
  _this3.subscribers[id] = null;
@@ -198,22 +170,20 @@ var PresenceWorker = /*#__PURE__*/function () {
198
170
  });
199
171
  return subscribers;
200
172
  }
173
+
201
174
  /**
202
175
  * Determine if we should re-subscribe or remove users' subscriptions.
203
176
  * @returns {Array}: User ids to re-subscribe.
204
177
  */
205
-
206
178
  }, {
207
179
  key: "checkSubscriptions",
208
180
  value: function checkSubscriptions() {
209
181
  var _this4 = this;
210
-
211
182
  var now = new Date().getTime();
212
183
  var renewIds = [];
213
184
  (0, _entries.default)(this.subscribers).forEach(function (subscription) {
214
185
  var id = subscription[0];
215
186
  var expiration = subscription[1];
216
-
217
187
  if (expiration) {
218
188
  // Renew subscription if they're about to expire
219
189
  if (_this4.watchers[id] && now > expiration - _constants.PREMATURE_EXPIRATION_SUBSCRIPTION_TIME) {
@@ -225,30 +195,29 @@ var PresenceWorker = /*#__PURE__*/function () {
225
195
  });
226
196
  return renewIds;
227
197
  }
198
+
228
199
  /**
229
200
  * Remove expired presence objects.
230
201
  * @returns {undefined}
231
202
  */
232
-
233
203
  }, {
234
204
  key: "cleanPresences",
235
205
  value: function cleanPresences() {
236
206
  var _this5 = this;
237
-
238
207
  var trash = [];
239
-
240
208
  var tenMinutesAgo = new Date().getTime() - _constants.EXPIRED_PRESENCE_TIME;
241
-
242
209
  (0, _entries.default)(this.presences).forEach(function (presence) {
243
210
  var id = presence[0];
244
- var lastUpdated = presence[1]; // Delete the object if it is stale
211
+ var lastUpdated = presence[1];
245
212
 
213
+ // Delete the object if it is stale
246
214
  if (lastUpdated < tenMinutesAgo) {
247
215
  delete _this5.presences[id];
248
216
  trash.push(id);
249
217
  }
250
- }); // Tells client to delete it too
218
+ });
251
219
 
220
+ // Tells client to delete it too
252
221
  if (trash.length) {
253
222
  this.webex.internal.presence.emitEvent(_constants.PRESENCE_UPDATE, {
254
223
  type: _constants.ENVELOPE_TYPE.DELETE,
@@ -256,6 +225,7 @@ var PresenceWorker = /*#__PURE__*/function () {
256
225
  });
257
226
  }
258
227
  }
228
+
259
229
  /**
260
230
  * Execute chores on an interval.
261
231
  * Checks if we should make new subscribe,
@@ -264,16 +234,13 @@ var PresenceWorker = /*#__PURE__*/function () {
264
234
  * removes expired presence objects.
265
235
  * @returns {undefined}
266
236
  */
267
-
268
237
  }, {
269
238
  key: "groundskeeper",
270
239
  value: function groundskeeper() {
271
240
  var _this6 = this;
272
-
273
241
  var campers = this.checkCampers();
274
242
  var renewSubscriptions = this.checkSubscriptions();
275
243
  var ids = [].concat((0, _toConsumableArray2.default)(campers), (0, _toConsumableArray2.default)(renewSubscriptions));
276
-
277
244
  if (ids.length) {
278
245
  this.webex.internal.presence.subscribe(ids).then(function (body) {
279
246
  var now = new Date().getTime();
@@ -289,12 +256,10 @@ var PresenceWorker = /*#__PURE__*/function () {
289
256
  });
290
257
  });
291
258
  }
292
-
293
259
  this.cleanPresences();
294
260
  }
295
261
  }]);
296
262
  return PresenceWorker;
297
263
  }();
298
-
299
264
  exports.default = PresenceWorker;
300
265
  //# sourceMappingURL=presence-worker.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["PresenceWorker","checkFetchers","FETCH_DELAY","presences","watchers","fetchers","flights","campers","subscribers","webex","internal","Error","mercury","connected","resolve","connect","then","on","APHELEIA_SUBSCRIPTION_UPDATE","subscriptionUpdate","bind","setInterval","groundskeeper","GROUNDSKEEPER_INTERVAL","event","data","subject","Date","getTime","presence","emitEvent","PRESENCE_UPDATE","type","ENVELOPE_TYPE","SUBSCRIPTION","payload","id","now","UPDATE_PRESENCE_DELAY","debouncedFetch","boarding","list","response","statusList","forEach","PRESENCE","camper","time","SUBSCRIPTION_DELAY","push","renewIds","subscription","expiration","PREMATURE_EXPIRATION_SUBSCRIPTION_TIME","trash","tenMinutesAgo","EXPIRED_PRESENCE_TIME","lastUpdated","length","DELETE","checkCampers","renewSubscriptions","checkSubscriptions","ids","subscribe","body","responses","responseCode","ttl","subscriptionTtl","status","DEFAULT_SUBSCRIPTION_TTL","cleanPresences"],"sources":["presence-worker.js"],"sourcesContent":["\nimport {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() : this.webex.internal.mercury.connect();\n\n mercury.then(() => {\n this.webex.internal.mercury.on(APHELEIA_SUBSCRIPTION_UPDATE,\n this.subscriptionUpdate.bind(this));\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 }\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 (!this.flights[id] &&\n (!this.presences[id] ||\n this.presences[id] < now - UPDATE_PRESENCE_DELAY)) {\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\n this.webex.internal.presence.list(Object.keys(boarding))\n .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] &&\n now > expiration - PREMATURE_EXPIRATION_SUBSCRIPTION_TIME) {\n renewIds.push(id);\n }\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 = [\n ...campers,\n ...renewSubscriptions\n ];\n\n if (ids.length) {\n this.webex.internal.presence.subscribe(ids)\n .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 }\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\n"],"mappings":"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"}
1
+ {"version":3,"names":["PresenceWorker","checkFetchers","FETCH_DELAY","presences","watchers","fetchers","flights","campers","subscribers","webex","internal","Error","mercury","connected","resolve","connect","then","on","APHELEIA_SUBSCRIPTION_UPDATE","subscriptionUpdate","bind","setInterval","groundskeeper","GROUNDSKEEPER_INTERVAL","event","data","subject","Date","getTime","presence","emitEvent","PRESENCE_UPDATE","type","ENVELOPE_TYPE","SUBSCRIPTION","payload","id","now","UPDATE_PRESENCE_DELAY","debouncedFetch","boarding","list","response","statusList","forEach","PRESENCE","camper","time","SUBSCRIPTION_DELAY","push","renewIds","subscription","expiration","PREMATURE_EXPIRATION_SUBSCRIPTION_TIME","trash","tenMinutesAgo","EXPIRED_PRESENCE_TIME","lastUpdated","length","DELETE","checkCampers","renewSubscriptions","checkSubscriptions","ids","subscribe","body","responses","responseCode","ttl","subscriptionTtl","status","DEFAULT_SUBSCRIPTION_TTL","cleanPresences"],"sources":["presence-worker.js"],"sourcesContent":["import {debounce} from 'lodash';\n\nimport {\n FETCH_DELAY,\n GROUNDSKEEPER_INTERVAL,\n SUBSCRIPTION_DELAY,\n UPDATE_PRESENCE_DELAY,\n EXPIRED_PRESENCE_TIME,\n PREMATURE_EXPIRATION_SUBSCRIPTION_TIME,\n DEFAULT_SUBSCRIPTION_TTL,\n APHELEIA_SUBSCRIPTION_UPDATE,\n PRESENCE_UPDATE,\n ENVELOPE_TYPE,\n} from './constants';\n\n/**\n * Presence Worker\n * Manages fetches and subscriptions for presence\n * @class\n */\nexport default class PresenceWorker {\n /**\n * Constructs a presence worker to execute and\n * maintain tasks related to presence upkeep.\n * @returns {undefined}\n */\n constructor() {\n this.presences = {}; // current presence objects; updated time\n this.watchers = {}; // counter of visible presence-required objects\n this.fetchers = {}; // waiting to get presence object\n this.flights = {}; // in flight to get presence object\n this.campers = {}; // waiting to subscribe; updated time\n this.subscribers = {}; // current subscriptions; expiration time\n }\n\n /**\n * Connect to the mercury for presence and starts worker.\n * @param {object} webex\n * @returns {undefined}\n */\n initialize(webex) {\n if (!webex || !webex.internal) {\n throw new Error('Must initialize Presence Worker with webex!');\n }\n\n this.webex = webex;\n\n const mercury = this.webex.internal.mercury.connected\n ? Promise.resolve()\n : this.webex.internal.mercury.connect();\n\n mercury.then(() => {\n this.webex.internal.mercury.on(\n APHELEIA_SUBSCRIPTION_UPDATE,\n this.subscriptionUpdate.bind(this)\n );\n });\n\n setInterval(this.groundskeeper.bind(this), GROUNDSKEEPER_INTERVAL);\n }\n\n /**\n * Trigger a subscription update event.\n * @param {string} event\n * @returns {undefined}\n */\n subscriptionUpdate(event) {\n this.presences[event.data.subject] = new Date().getTime();\n\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\n type: ENVELOPE_TYPE.SUBSCRIPTION,\n payload: event.data,\n });\n }\n\n /**\n * Retrieves and subscribes to a user's presence.\n * @param {string} id\n * @returns {undefined}\n */\n enqueue(id) {\n const now = new Date().getTime();\n\n if (this.watchers[id]) {\n this.watchers[id] += 1;\n } else {\n this.watchers[id] = 1;\n }\n\n if (this.subscribers[id]) {\n return;\n }\n\n if (!this.campers[id]) {\n this.campers[id] = now;\n }\n\n // Retrieve presence if:\n // not in flight or\n // don't already have the presence or\n // presence has gone stale\n if (\n !this.flights[id] &&\n (!this.presences[id] || this.presences[id] < now - UPDATE_PRESENCE_DELAY)\n ) {\n this.fetchers[id] = id;\n this.debouncedFetch();\n }\n }\n\n /**\n * Retract from subscribing to a user's presence.\n * @param {string} id\n * @returns {undefined}\n */\n dequeue(id) {\n if (this.watchers[id]) {\n this.watchers[id] -= 1;\n\n if (this.watchers[id] <= 0) {\n delete this.watchers[id];\n delete this.fetchers[id];\n delete this.campers[id];\n }\n }\n }\n\n /**\n * Retrieve users' presences.\n * @returns {undefined}\n */\n checkFetchers() {\n const boarding = this.fetchers;\n\n Object.assign(this.flights, boarding);\n this.fetchers = {};\n\n this.webex.internal.presence.list(Object.keys(boarding)).then((response) => {\n const now = new Date().getTime();\n\n response.statusList.forEach((presence) => {\n const id = presence.subject;\n\n delete this.flights[id];\n this.presences[id] = now;\n });\n\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\n type: ENVELOPE_TYPE.PRESENCE,\n payload: response,\n });\n });\n }\n\n debouncedFetch = debounce(this.checkFetchers, FETCH_DELAY);\n\n /**\n * Determine if we should subscribe to users' presences.\n * @returns {Array}: User ids to subscribe.\n */\n checkCampers() {\n const now = new Date().getTime();\n const subscribers = [];\n\n Object.entries(this.campers).forEach((camper) => {\n const id = camper[0];\n const time = camper[1];\n\n // Subscribe if they've been camping for a minute\n if (time < now - SUBSCRIPTION_DELAY) {\n delete this.campers[id];\n this.subscribers[id] = null;\n subscribers.push(id);\n }\n });\n\n return subscribers;\n }\n\n /**\n * Determine if we should re-subscribe or remove users' subscriptions.\n * @returns {Array}: User ids to re-subscribe.\n */\n checkSubscriptions() {\n const now = new Date().getTime();\n\n const renewIds = [];\n\n Object.entries(this.subscribers).forEach((subscription) => {\n const id = subscription[0];\n const expiration = subscription[1];\n\n if (expiration) {\n // Renew subscription if they're about to expire\n if (this.watchers[id] && now > expiration - PREMATURE_EXPIRATION_SUBSCRIPTION_TIME) {\n renewIds.push(id);\n } else if (now > expiration) {\n delete this.subscribers[id];\n }\n }\n });\n\n return renewIds;\n }\n\n /**\n * Remove expired presence objects.\n * @returns {undefined}\n */\n cleanPresences() {\n const trash = [];\n const tenMinutesAgo = new Date().getTime() - EXPIRED_PRESENCE_TIME;\n\n Object.entries(this.presences).forEach((presence) => {\n const id = presence[0];\n const lastUpdated = presence[1];\n\n // Delete the object if it is stale\n if (lastUpdated < tenMinutesAgo) {\n delete this.presences[id];\n trash.push(id);\n }\n });\n\n // Tells client to delete it too\n if (trash.length) {\n this.webex.internal.presence.emitEvent(PRESENCE_UPDATE, {\n type: ENVELOPE_TYPE.DELETE,\n payload: trash,\n });\n }\n }\n\n /**\n * Execute chores on an interval.\n * Checks if we should make new subscribe,\n * checks if we should re-subscribe,\n * removes expired subscriptions,\n * removes expired presence objects.\n * @returns {undefined}\n */\n groundskeeper() {\n const campers = this.checkCampers();\n const renewSubscriptions = this.checkSubscriptions();\n\n const ids = [...campers, ...renewSubscriptions];\n\n if (ids.length) {\n this.webex.internal.presence.subscribe(ids).then((body) => {\n const now = new Date().getTime();\n\n body.responses.forEach((response) => {\n if (response.responseCode === 200) {\n const ttl = response.subscriptionTtl * 1000;\n\n this.subscribers[response.subject] = now + ttl;\n this.presences[response.status.subject] = now;\n } else {\n // If it errored for any reason, set the ttl so we clean it out eventually\n this.subscribers[response.subject] = now + DEFAULT_SUBSCRIPTION_TTL;\n }\n });\n });\n }\n\n this.cleanPresences();\n }\n}\n"],"mappings":"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"}