@webex/plugin-device-manager 3.0.0-beta.13 → 3.0.0-beta.15

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.
@@ -1 +1 @@
1
- {"version":3,"names":["DeviceCollection","devices","get","deviceId","set","device","id","identity","existingDevice","reset","getAll"],"sources":["collection.js"],"sourcesContent":["import {merge} from 'lodash';\n\nconst DeviceCollection = {\n devices: {},\n\n get(deviceId) {\n return this.devices[deviceId];\n },\n\n set(device) {\n const deviceId = device.id || device.identity && device.identity.id;\n // check if the device is already existing, if so then merge else add\n const existingDevice = this.devices[deviceId];\n\n if (existingDevice) {\n // already existing, merge for any new binding information\n merge(existingDevice, device);\n }\n else {\n this.devices[deviceId] = device;\n }\n },\n\n reset() {\n this.devices = {};\n },\n\n getAll() {\n return Object.values(this.devices);\n }\n\n};\n\nexport default DeviceCollection;\n"],"mappings":";;;;;;;;;;;;;;;;AAEA,IAAMA,gBAAgB,GAAG;EACvBC,OAAO,EAAE,EADc;EAGvBC,GAHuB,eAGnBC,QAHmB,EAGT;IACZ,OAAO,KAAKF,OAAL,CAAaE,QAAb,CAAP;EACD,CALsB;EAOvBC,GAPuB,eAOnBC,MAPmB,EAOX;IACV,IAAMF,QAAQ,GAAGE,MAAM,CAACC,EAAP,IAAaD,MAAM,CAACE,QAAP,IAAmBF,MAAM,CAACE,QAAP,CAAgBD,EAAjE,CADU,CAEV;;IACA,IAAME,cAAc,GAAG,KAAKP,OAAL,CAAaE,QAAb,CAAvB;;IAEA,IAAIK,cAAJ,EAAoB;MAClB;MACA,qBAAMA,cAAN,EAAsBH,MAAtB;IACD,CAHD,MAIK;MACH,KAAKJ,OAAL,CAAaE,QAAb,IAAyBE,MAAzB;IACD;EACF,CAnBsB;EAqBvBI,KArBuB,mBAqBf;IACN,KAAKR,OAAL,GAAe,EAAf;EACD,CAvBsB;EAyBvBS,MAzBuB,oBAyBd;IACP,OAAO,qBAAc,KAAKT,OAAnB,CAAP;EACD;AA3BsB,CAAzB;eA+BeD,gB"}
1
+ {"version":3,"names":["DeviceCollection","devices","get","deviceId","set","device","id","identity","existingDevice","reset","getAll"],"sources":["collection.js"],"sourcesContent":["import {merge} from 'lodash';\n\nconst DeviceCollection = {\n devices: {},\n\n get(deviceId) {\n return this.devices[deviceId];\n },\n\n set(device) {\n const deviceId = device.id || (device.identity && device.identity.id);\n // check if the device is already existing, if so then merge else add\n const existingDevice = this.devices[deviceId];\n\n if (existingDevice) {\n // already existing, merge for any new binding information\n merge(existingDevice, device);\n } else {\n this.devices[deviceId] = device;\n }\n },\n\n reset() {\n this.devices = {};\n },\n\n getAll() {\n return Object.values(this.devices);\n },\n};\n\nexport default DeviceCollection;\n"],"mappings":";;;;;;;;;;;;;;;;AAEA,IAAMA,gBAAgB,GAAG;EACvBC,OAAO,EAAE,EADc;EAGvBC,GAHuB,eAGnBC,QAHmB,EAGT;IACZ,OAAO,KAAKF,OAAL,CAAaE,QAAb,CAAP;EACD,CALsB;EAOvBC,GAPuB,eAOnBC,MAPmB,EAOX;IACV,IAAMF,QAAQ,GAAGE,MAAM,CAACC,EAAP,IAAcD,MAAM,CAACE,QAAP,IAAmBF,MAAM,CAACE,QAAP,CAAgBD,EAAlE,CADU,CAEV;;IACA,IAAME,cAAc,GAAG,KAAKP,OAAL,CAAaE,QAAb,CAAvB;;IAEA,IAAIK,cAAJ,EAAoB;MAClB;MACA,qBAAMA,cAAN,EAAsBH,MAAtB;IACD,CAHD,MAGO;MACL,KAAKJ,OAAL,CAAaE,QAAb,IAAyBE,MAAzB;IACD;EACF,CAlBsB;EAoBvBI,KApBuB,mBAoBf;IACN,KAAKR,OAAL,GAAe,EAAf;EACD,CAtBsB;EAwBvBS,MAxBuB,oBAwBd;IACP,OAAO,qBAAc,KAAKT,OAAnB,CAAP;EACD;AA1BsB,CAAzB;eA6BeD,gB"}
@@ -43,19 +43,19 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
43
43
  },
44
44
 
45
45
  /**
46
- * Gets a list of all recent devices associated with the user
47
- * the device list gets populated from Redis
48
- * @returns {Promise<Device>}
49
- */
46
+ * Gets a list of all recent devices associated with the user
47
+ * the device list gets populated from Redis
48
+ * @returns {Promise<Device>}
49
+ */
50
50
  getAll: function getAll() {
51
51
  return _collection.default.getAll();
52
52
  },
53
53
 
54
54
  /**
55
- * Gets a list of all recent devices associated with the user
56
- * the device list gets populated from Redis
57
- * @returns {Promise<Device>}
58
- */
55
+ * Gets a list of all recent devices associated with the user
56
+ * the device list gets populated from Redis
57
+ * @returns {Promise<Device>}
58
+ */
59
59
  refresh: function refresh() {
60
60
  var _this2 = this;
61
61
 
@@ -91,11 +91,11 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
91
91
  },
92
92
 
93
93
  /**
94
- * Search for a device by name
95
- * @param {Object} options
96
- * @param {string} options.searchQuery
97
- * @returns {Promise<Device>}
98
- */
94
+ * Search for a device by name
95
+ * @param {Object} options
96
+ * @param {string} options.searchQuery
97
+ * @returns {Promise<Device>}
98
+ */
99
99
  search: function search(options) {
100
100
  var _this3 = this;
101
101
 
@@ -119,11 +119,11 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
119
119
  },
120
120
 
121
121
  /**
122
- * Caches the device info and also registers to Redis for subsequent fetches
123
- * @param {Object} device
124
- * @param {string} device.id
125
- * @returns {deviceInfo}
126
- */
122
+ * Caches the device info and also registers to Redis for subsequent fetches
123
+ * @param {Object} device
124
+ * @param {string} device.id
125
+ * @returns {deviceInfo}
126
+ */
127
127
  upsert: function upsert(device) {
128
128
  var _this4 = this;
129
129
 
@@ -153,7 +153,8 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
153
153
  }).then(function (res) {
154
154
  var auxDevice = res.body;
155
155
  return _this4._decryptDeviceName(auxDevice);
156
- }).then(function (device) {
156
+ }) // eslint-disable-next-line no-shadow
157
+ .then(function (device) {
157
158
  _collection.default.set(device);
158
159
 
159
160
  return _promise.default.resolve(_collection.default.get(deviceId));
@@ -165,10 +166,10 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
165
166
  },
166
167
 
167
168
  /**
168
- * Retreives device info of a particular device
169
- * @param {string} token
170
- * @returns {Promise<deviceInfo>}
171
- */
169
+ * Retreives device info of a particular device
170
+ * @param {string} token
171
+ * @returns {Promise<deviceInfo>}
172
+ */
172
173
  get: function get(token) {
173
174
  var _this5 = this;
174
175
 
@@ -199,11 +200,11 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
199
200
  },
200
201
 
201
202
  /**
202
- * Unregisters the device from Redis, will not fetch in subsequent loads,
203
- * similar to space.deleteBinding()
204
- * @param {string} deviceId
205
- * @returns {Promise<deviceInfo>}
206
- */
203
+ * Unregisters the device from Redis, will not fetch in subsequent loads,
204
+ * similar to space.deleteBinding()
205
+ * @param {string} deviceId
206
+ * @returns {Promise<deviceInfo>}
207
+ */
207
208
  remove: function remove(deviceId) {
208
209
  var _this6 = this;
209
210
 
@@ -224,12 +225,12 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
224
225
  },
225
226
 
226
227
  /**
227
- * Requests to display PIN on the device
228
- * @param {object} device
229
- * @param {object} options
230
- * @param {object} options.data
231
- * @returns {Promise<deviceInfo>}
232
- */
228
+ * Requests to display PIN on the device
229
+ * @param {object} device
230
+ * @param {object} options
231
+ * @param {object} options.data
232
+ * @returns {Promise<deviceInfo>}
233
+ */
233
234
  requestPin: function requestPin(device) {
234
235
  var _this7 = this;
235
236
 
@@ -276,13 +277,13 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
276
277
  },
277
278
 
278
279
  /**
279
- * pairs the device with the user (manual pairing), also adds it to
280
- * user's recents list for subsequent fetches.
281
- * similar to space.join()
282
- * @param {object} options
283
- * @param {number} options.pin
284
- * @returns {Promise<deviceInfo>}
285
- */
280
+ * pairs the device with the user (manual pairing), also adds it to
281
+ * user's recents list for subsequent fetches.
282
+ * similar to space.join()
283
+ * @param {object} options
284
+ * @param {number} options.pin
285
+ * @returns {Promise<deviceInfo>}
286
+ */
286
287
  pair: function pair() {
287
288
  var _this8 = this;
288
289
 
@@ -315,14 +316,14 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
315
316
  },
316
317
 
317
318
  /**
318
- * unpairs the device with the user (manual/ultrasonic pairing), but still
319
- * keeps in the recents list/does not remove from Redis
320
- * options.removeAllDevices will remove all associated devices to user
321
- * similar to space.leave()
322
- * @param {object} options
323
- * @param {boolean} options.removeAllDevices
324
- * @returns {Promise<deviceInfo>}
325
- */
319
+ * unpairs the device with the user (manual/ultrasonic pairing), but still
320
+ * keeps in the recents list/does not remove from Redis
321
+ * options.removeAllDevices will remove all associated devices to user
322
+ * similar to space.leave()
323
+ * @param {object} options
324
+ * @param {boolean} options.removeAllDevices
325
+ * @returns {Promise<deviceInfo>}
326
+ */
326
327
  unpair: function unpair() {
327
328
  var _this9 = this;
328
329
 
@@ -344,13 +345,13 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
344
345
  },
345
346
 
346
347
  /**
347
- * binds the space to the paired device (if supported)
348
- * similar to space.bindConversation()
349
- * @param {object} options
350
- * @param {boolean} options.url, conversation url
351
- * @param {boolean} options.kmsResourceObjectUrl of the convo
352
- * @returns {Promise<deviceInfo>}
353
- */
348
+ * binds the space to the paired device (if supported)
349
+ * similar to space.bindConversation()
350
+ * @param {object} options
351
+ * @param {boolean} options.url, conversation url
352
+ * @param {boolean} options.kmsResourceObjectUrl of the convo
353
+ * @returns {Promise<deviceInfo>}
354
+ */
354
355
  bindSpace: function bindSpace() {
355
356
  var _this10 = this;
356
357
 
@@ -387,10 +388,10 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
387
388
  },
388
389
 
389
390
  /**
390
- * unbinds the space to the paired device (if supported)
391
- * similar to space.unbindConversation()
392
- * @returns {Promise<deviceInfo>}
393
- */
391
+ * unbinds the space to the paired device (if supported)
392
+ * similar to space.unbindConversation()
393
+ * @returns {Promise<deviceInfo>}
394
+ */
394
395
  unbindSpace: function unbindSpace() {
395
396
  var _this11 = this;
396
397
 
@@ -414,10 +415,10 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
414
415
  },
415
416
 
416
417
  /**
417
- * Gets the audio state of the paired device
418
- * similar to device.getAudioState()
419
- * @returns {Promise<audioState>}
420
- */
418
+ * Gets the audio state of the paired device
419
+ * similar to device.getAudioState()
420
+ * @returns {Promise<audioState>}
421
+ */
421
422
  getAudioState: function getAudioState() {
422
423
  if (!this._pairedDevice) {
423
424
  this.logger.error('DeviceManager#getAudioState: Currently no device is paired');
@@ -428,23 +429,23 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
428
429
  },
429
430
 
430
431
  /**
431
- * Updates audio state of the paired device, should be called every 10 minutes
432
- * or when mic or volume state is changed
433
- * similar to device.putAudioState()
434
- * @param {object} space
435
- * @param {object} audioState
436
- * @returns {Promise<audioState>}
437
- */
432
+ * Updates audio state of the paired device, should be called every 10 minutes
433
+ * or when mic or volume state is changed
434
+ * similar to device.putAudioState()
435
+ * @param {object} space
436
+ * @param {object} audioState
437
+ * @returns {Promise<audioState>}
438
+ */
438
439
  putAudioState: function putAudioState(space) {
439
440
  var audioState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
440
441
  return this.webex.internal.lyra.device.putAudioState(space, audioState);
441
442
  },
442
443
 
443
444
  /**
444
- * Mutes paired device
445
- * similar to device.mute()
446
- * @returns {Promise<audioState>}
447
- */
445
+ * Mutes paired device
446
+ * similar to device.mute()
447
+ * @returns {Promise<audioState>}
448
+ */
448
449
  mute: function mute() {
449
450
  if (!this._pairedDevice) {
450
451
  this.logger.error('DeviceManager#mute: Currently no device is paired');
@@ -455,10 +456,10 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
455
456
  },
456
457
 
457
458
  /**
458
- * Unmutes paired device
459
- * similar to device.unmute()
460
- * @returns {Promise<audioState>}
461
- */
459
+ * Unmutes paired device
460
+ * similar to device.unmute()
461
+ * @returns {Promise<audioState>}
462
+ */
462
463
  unmute: function unmute() {
463
464
  if (!this._pairedDevice) {
464
465
  this.logger.error('DeviceManager#unmute: Currently no device is paired');
@@ -469,10 +470,10 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
469
470
  },
470
471
 
471
472
  /**
472
- * Increases paired device's volume
473
- * similar to device.increaseVolume()
474
- * @returns {Promise<audioState>}
475
- */
473
+ * Increases paired device's volume
474
+ * similar to device.increaseVolume()
475
+ * @returns {Promise<audioState>}
476
+ */
476
477
  increaseVolume: function increaseVolume() {
477
478
  if (!this._pairedDevice) {
478
479
  this.logger.error('DeviceManager#increaseVolume: Currently no device is paired');
@@ -483,10 +484,10 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
483
484
  },
484
485
 
485
486
  /**
486
- * Decreases paired device's volume
487
- * similar to device.decreaseVolume()
488
- * @returns {Promise<audioState>}
489
- */
487
+ * Decreases paired device's volume
488
+ * similar to device.decreaseVolume()
489
+ * @returns {Promise<audioState>}
490
+ */
490
491
  decreaseVolume: function decreaseVolume() {
491
492
  if (!this._pairedDevice) {
492
493
  this.logger.error('DeviceManager#decreaseVolume: Currently no device is paired');
@@ -497,11 +498,11 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
497
498
  },
498
499
 
499
500
  /**
500
- * Sets paired device's volume but should use increase and decrease api instead
501
- * similar to device.setVolume()
502
- * @param {number} level
503
- * @returns {Promise<audioState>}
504
- */
501
+ * Sets paired device's volume but should use increase and decrease api instead
502
+ * similar to device.setVolume()
503
+ * @param {number} level
504
+ * @returns {Promise<audioState>}
505
+ */
505
506
  setVolume: function setVolume() {
506
507
  var level = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
507
508
 
@@ -514,10 +515,10 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
514
515
  },
515
516
 
516
517
  /**
517
- * Utility function to update decrypted device name on device object
518
- * @param {Array} deviceArray
519
- * @returns {device}
520
- */
518
+ * Utility function to update decrypted device name on device object
519
+ * @param {Array} deviceArray
520
+ * @returns {device}
521
+ */
521
522
  _updateDeviceMetadata: function _updateDeviceMetadata() {
522
523
  var _this12 = this;
523
524
 
@@ -545,10 +546,10 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
545
546
  },
546
547
 
547
548
  /**
548
- * Utility function to update decrypted device name on device object
549
- * @param {object} inDevice
550
- * @returns {device}
551
- */
549
+ * Utility function to update decrypted device name on device object
550
+ * @param {object} inDevice
551
+ * @returns {device}
552
+ */
552
553
  _decryptDeviceName: function _decryptDeviceName() {
553
554
  var _this13 = this;
554
555
 
@@ -573,10 +574,10 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
573
574
  },
574
575
 
575
576
  /**
576
- * Utility function to update device info on mercury updates
577
- * @param {object} device
578
- * @returns {device}
579
- */
577
+ * Utility function to update device info on mercury updates
578
+ * @param {object} device
579
+ * @returns {device}
580
+ */
580
581
  _receiveDeviceUpdates: function _receiveDeviceUpdates(device) {
581
582
  var _this14 = this;
582
583
 
@@ -590,6 +591,7 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
590
591
  return this.webex.internal.lyra.space.get({
591
592
  id: deviceId
592
593
  }).then(function (space) {
594
+ // eslint-disable-next-line no-shadow
593
595
  var device = _collection.default.get(deviceId);
594
596
 
595
597
  if (device && space.occupants && (!space.occupants.self || !space.occupants.self.verified)) {
@@ -623,7 +625,7 @@ var DeviceManager = _webexCore.WebexPlugin.extend({
623
625
 
624
626
  return _promise.default.resolve();
625
627
  },
626
- version: "3.0.0-beta.13"
628
+ version: "3.0.0-beta.15"
627
629
  });
628
630
 
629
631
  var _default = DeviceManager;
@@ -1 +1 @@
1
- {"version":3,"names":["DeviceManager","WebexPlugin","extend","namespace","_devicePendingPinChallenge","_pairedDevice","_boundSpace","initialize","webex","internal","mercury","on","data","_receiveDeviceUpdates","getAll","DeviceCollection","refresh","reset","request","api","resource","then","res","body","reject","_updateDeviceMetadata","items","devices","forEach","device","deviceInfo","machineType","LYRA_SPACE","lyra","space","get","catch","err","logger","error","set","search","options","searchQuery","Error","people","searchId","uuid","v4","searchType","searchEntity","includePeople","includeRooms","queryString","upsert","deviceId","id","identity","existingDevice","resolve","method","auxDevice","_decryptDeviceName","token","getAdvertisedEndpoint","advertiser","result","displayName","remove","requestPin","url","dev","occupants","pinChallenge","info","join","passType","verificationInitiation","pair","pin","unpair","leave","bindSpace","kmsResourceObjectUrl","bindConversation","unbindSpace","unbindConversation","getAudioState","putAudioState","audioState","mute","unmute","increaseVolume","decreaseVolume","setVolume","level","deviceArray","length","all","map","index","services","waitForCatalog","deviceClass","UC_CLOUD","updatedDevice","inDevice","metadata","encryptedUserAssignedName","encryptionKeyUrl","encryption","decryptText","decryptedDeviceName","undefined","userAssignedName","spaceUrl","substring","lastIndexOf","self","verified","productName","DEFAULT_PRODUCT_NAME","pairedDeviceId"],"sources":["device-manager.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport {cloneDeep} from 'lodash';\nimport '@webex/internal-plugin-lyra';\nimport '@webex/internal-plugin-search';\nimport {WebexPlugin} from '@webex/webex-core';\nimport uuid from 'uuid';\n\nimport {LYRA_SPACE, UC_CLOUD, DEFAULT_PRODUCT_NAME} from './constants';\nimport DeviceCollection from './collection';\n\nconst DeviceManager = WebexPlugin.extend({\n namespace: 'DeviceManager',\n _devicePendingPinChallenge: null,\n _pairedDevice: null,\n _boundSpace: null,\n\n initialize() {\n // Lyra mercury events listener\n this.webex.internal.mercury.on('event:lyra.space_updated', ({data}) => {\n this._receiveDeviceUpdates(data);\n });\n },\n\n /**\n * Gets a list of all recent devices associated with the user\n * the device list gets populated from Redis\n * @returns {Promise<Device>}\n */\n getAll() {\n return DeviceCollection.getAll();\n },\n\n /**\n * Gets a list of all recent devices associated with the user\n * the device list gets populated from Redis\n * @returns {Promise<Device>}\n */\n refresh() {\n DeviceCollection.reset();\n\n return this.webex.request({\n api: 'wdm',\n resource: 'devices/auxiliary'\n })\n .then((res) => {\n if (!res.body) {\n return Promise.reject();\n }\n\n return this._updateDeviceMetadata(res.body.items)\n .then((devices) => {\n /* eslint-disable consistent-return */\n devices.forEach((device) => {\n if (device.deviceInfo &&\n device.deviceInfo.machineType === LYRA_SPACE) {\n return this.webex.internal.lyra.space.get(device.deviceInfo)\n .catch((err) => {\n this.logger.error('DeviceManager#refresh: failed to receive device info', err);\n });\n }\n });\n /* eslint-enable consistent-return */\n res.body.items.forEach((device) => {\n DeviceCollection.set(device);\n });\n\n return this.getAll();\n });\n })\n .catch((err) => {\n this.logger.error('DeviceManager#refresh: failed to fetch recent devices', err);\n });\n },\n\n /**\n * Search for a device by name\n * @param {Object} options\n * @param {string} options.searchQuery\n * @returns {Promise<Device>}\n */\n search(options) {\n if (!options || !options.searchQuery) {\n this.logger.error('DeviceManager#search: options.searchQuery is required');\n\n return Promise.reject(new Error('DeviceManager#search: options.searchQuery is required'));\n }\n\n return this.webex.internal.search.people({\n searchId: uuid.v4(),\n searchType: 'DEVICE_SEARCH',\n searchEntity: 'device',\n includePeople: false,\n includeRooms: true,\n queryString: options.searchQuery\n })\n .catch((err) => {\n this.logger.error('DeviceManager#search: failed to search a device', err);\n\n throw err;\n });\n },\n\n /**\n * Caches the device info and also registers to Redis for subsequent fetches\n * @param {Object} device\n * @param {string} device.id\n * @returns {deviceInfo}\n */\n upsert(device) {\n const deviceId = device.id || device.identity && device.identity.id;\n\n if (!deviceId) {\n this.logger.error('DeviceManager#upsert: device.id is required');\n\n return Promise.reject(new Error('DeviceManager#upsert: device.id is required'));\n }\n this._pairedDevice = this._devicePendingPinChallenge;\n this._devicePendingPinChallenge = null;\n // check if the device is already existing, if so then merge else add\n const existingDevice = DeviceCollection.get(deviceId);\n\n if (existingDevice) {\n DeviceCollection.set(device);\n\n return Promise.resolve(DeviceCollection.get(deviceId));\n }\n\n // new device requested, add to wdm for subsequent retreivals\n return this.webex.request({\n api: 'wdm',\n method: 'PUT',\n resource: `devices/auxiliary/Room/${deviceId}`\n })\n .then((res) => {\n const auxDevice = res.body;\n\n return this._decryptDeviceName(auxDevice);\n })\n .then((device) => {\n DeviceCollection.set(device);\n\n return Promise.resolve(DeviceCollection.get(deviceId));\n })\n .catch((err) => {\n this.logger.error('DeviceManager#upsert: failed to add/update a device', err);\n\n return Promise.reject(err);\n });\n },\n\n /**\n * Retreives device info of a particular device\n * @param {string} token\n * @returns {Promise<deviceInfo>}\n */\n get(token) {\n if (!token) {\n this.logger.error('DeviceManager#get: token is required');\n\n return Promise.reject(new Error('DeviceManager#get: token is required'));\n }\n let deviceInfo;\n\n return this.webex.internal.lyra.getAdvertisedEndpoint(token)\n .then((res) => {\n deviceInfo = res;\n\n return this.webex.internal.lyra.space.get({id: res.advertiser.id});\n })\n .then((result) => {\n // the deviceInfo doesn't have proper displayName, hence update\n // displayName on deviceInfo for search to work\n if (result && result.identity && result.identity.displayName) {\n deviceInfo.advertiser.displayName = result.identity.displayName;\n }\n\n return deviceInfo;\n })\n .catch((err) => {\n this.logger.error('DeviceManager#get: failed to get device info', err);\n\n return Promise.reject(err);\n });\n },\n\n /**\n * Unregisters the device from Redis, will not fetch in subsequent loads,\n * similar to space.deleteBinding()\n * @param {string} deviceId\n * @returns {Promise<deviceInfo>}\n */\n remove(deviceId) {\n if (!deviceId) {\n this.logger.error('DeviceManager#remove: deviceId is required');\n\n return Promise.reject(new Error('DeviceManager#remove: deviceId is required'));\n }\n\n return this.webex.request({\n method: 'delete',\n api: 'wdm',\n resource: `devices/auxiliary/${deviceId}`\n })\n .catch((error) => {\n this.logger.error('DeviceManager#remove: failed to remove the device', error);\n\n return Promise.reject(error);\n });\n },\n\n /**\n * Requests to display PIN on the device\n * @param {object} device\n * @param {object} options\n * @param {object} options.data\n * @returns {Promise<deviceInfo>}\n */\n requestPin(device, options = {}) {\n const deviceId = device.id || device.identity && device.identity.id;\n\n if (!deviceId) {\n this.logger.error('DeviceManager#requestPin: device.id is required');\n\n return Promise.reject(new Error('DeviceManager#requestPin: device.id is required'));\n }\n const space = {id: deviceId, url: `/spaces/${deviceId}`};\n\n return this.webex.internal.lyra.space.get(space)\n .then((dev) => { // check if the space is pinChallenge capable\n if (dev && dev.occupants && dev.occupants.pinChallenge) {\n this.logger.info('DeviceManager#requestPin: space is PIN challenge capable');\n\n return this.webex.internal.lyra.space.join(space, {\n passType: 'MANUAL',\n verificationInitiation: 'PIN',\n data: options.data\n })\n .then(() => {\n this._devicePendingPinChallenge = dev;\n\n // return the actual device so that it can be upserted on successful\n // PIN exchange\n return dev;\n });\n }\n // pairs with the space if it's not PIN challenge capable\n this.logger.info('DeviceManager#requestPin: space is not PIN challenge capable, probably already occupied, will still return device info');\n\n return this.webex.internal.lyra.space.get(space)\n .then(() => Promise.resolve(dev));\n })\n .catch((err) => {\n this.logger.error('DeviceManager#requestPin: device failed PIN challenge request', err);\n\n return Promise.reject(err);\n });\n },\n\n /**\n * pairs the device with the user (manual pairing), also adds it to\n * user's recents list for subsequent fetches.\n * similar to space.join()\n * @param {object} options\n * @param {number} options.pin\n * @returns {Promise<deviceInfo>}\n */\n pair(options = {}) {\n if (!options.pin) {\n this.logger.error('DeviceManager#pair: options.pin is required');\n\n return Promise.reject(new Error('DeviceManager#pair: options.pin is required'));\n }\n if (this._devicePendingPinChallenge) {\n const space = {id: this._devicePendingPinChallenge.identity.id, url: `/spaces/${this._devicePendingPinChallenge.identity.id}`};\n\n return this.webex.internal.lyra.space.join(space, {\n passType: 'PIN_ANSWER',\n data: options.pin\n })\n .catch((err) => {\n this.logger.error('DeviceManager#pair: incorrect PIN, unable to pair ', err);\n\n return Promise.reject(err);\n })\n .then(() => this.upsert(this._devicePendingPinChallenge));\n }\n this.logger.error('DeviceManager#pair: no device to pair');\n\n return Promise.reject(new Error('DeviceManager#pair: no device to pair'));\n },\n\n /**\n * unpairs the device with the user (manual/ultrasonic pairing), but still\n * keeps in the recents list/does not remove from Redis\n * options.removeAllDevices will remove all associated devices to user\n * similar to space.leave()\n * @param {object} options\n * @param {boolean} options.removeAllDevices\n * @returns {Promise<deviceInfo>}\n */\n unpair(options = {}) {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#unpair: no device to unpair');\n\n return Promise.reject(new Error('DeviceManager#unpair: no device to unpair'));\n }\n const space = {url: `/spaces/${this._pairedDevice.identity.id}`};\n\n return this.webex.internal.lyra.space.leave(space, options)\n .catch((err) => {\n this.logger.error('DeviceManager#unpair: failed to remove device from Lyra', err);\n\n return Promise.reject(err);\n });\n },\n\n /**\n * binds the space to the paired device (if supported)\n * similar to space.bindConversation()\n * @param {object} options\n * @param {boolean} options.url, conversation url\n * @param {boolean} options.kmsResourceObjectUrl of the convo\n * @returns {Promise<deviceInfo>}\n */\n bindSpace(options = {}) {\n if (!options.url) {\n this.logger.error('DeviceManager#pair: options.url is required');\n\n return Promise.reject(new Error('DeviceManager#bindSpace: options.url is required'));\n }\n if (!options.kmsResourceObjectUrl) {\n this.logger.error('DeviceManager#bindSpace: options.kmsResourceObjectUrl is required');\n\n return Promise.reject(new Error('DeviceManager#bindSpace: options.kmsResourceObjectUrl is required'));\n }\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#bindSpace: No device paired currently');\n\n return Promise.reject(new Error('DeviceManager#bindSpace: No device paired currently'));\n }\n const space = {url: `/spaces/${this._pairedDevice.identity.id}`, id: this._pairedDevice.identity.id};\n\n this._boundSpace = {\n kmsResourceObjectUrl: options.kmsResourceObjectUrl,\n url: options.url\n };\n\n return this.webex.internal.lyra.space.bindConversation(space, this._boundSpace)\n .catch((err) => {\n this.logger.error('DeviceManager#bindSpace: failed to bind device to Space');\n\n return Promise.reject(err);\n });\n },\n\n /**\n * unbinds the space to the paired device (if supported)\n * similar to space.unbindConversation()\n * @returns {Promise<deviceInfo>}\n */\n unbindSpace() {\n if (!this._pairedDevice || !this._boundSpace) {\n this.logger.error('DeviceManager#unbindSpace: No space currently bound to the device');\n\n return Promise.reject(new Error('DeviceManager#unbindSpace: No space currently bound to the device'));\n }\n const space = {url: `/spaces/${this._pairedDevice.identity.id}`, id: this._pairedDevice.identity.id};\n\n return this.webex.internal.lyra.space.unbindConversation(space, this._boundSpace)\n .then((res) => {\n this._boundSpace = null;\n\n return Promise.resolve(res);\n })\n .catch((err) => {\n this.logger.error('DeviceManager#unbindSpace: failed to unbind Space to device');\n\n return Promise.reject(err);\n });\n },\n\n /**\n * Gets the audio state of the paired device\n * similar to device.getAudioState()\n * @returns {Promise<audioState>}\n */\n getAudioState() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#getAudioState: Currently no device is paired');\n\n return Promise.reject(new Error('DeviceManager#getAudioState: Currently no device is paired'));\n }\n\n return this.webex.internal.lyra.device.getAudioState(this._pairedDevice);\n },\n\n /**\n * Updates audio state of the paired device, should be called every 10 minutes\n * or when mic or volume state is changed\n * similar to device.putAudioState()\n * @param {object} space\n * @param {object} audioState\n * @returns {Promise<audioState>}\n */\n putAudioState(space, audioState = {}) {\n return this.webex.internal.lyra.device.putAudioState(space, audioState);\n },\n\n /**\n * Mutes paired device\n * similar to device.mute()\n * @returns {Promise<audioState>}\n */\n mute() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#mute: Currently no device is paired');\n\n return Promise.reject(new Error('DeviceManager#mute: Currently no device is paired'));\n }\n\n return this.webex.internal.lyra.device.mute(this._pairedDevice);\n },\n\n /**\n * Unmutes paired device\n * similar to device.unmute()\n * @returns {Promise<audioState>}\n */\n unmute() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#unmute: Currently no device is paired');\n\n return Promise.reject(new Error('DeviceManager#unmute: Currently no device is paired'));\n }\n\n return this.webex.internal.lyra.device.unmute(this._pairedDevice);\n },\n\n /**\n * Increases paired device's volume\n * similar to device.increaseVolume()\n * @returns {Promise<audioState>}\n */\n increaseVolume() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#increaseVolume: Currently no device is paired');\n\n return Promise.reject(new Error('DeviceManager#increaseVolume: Currently no device is paired'));\n }\n\n return this.webex.internal.lyra.device.increaseVolume(this._pairedDevice);\n },\n\n /**\n * Decreases paired device's volume\n * similar to device.decreaseVolume()\n * @returns {Promise<audioState>}\n */\n decreaseVolume() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#decreaseVolume: Currently no device is paired');\n\n return Promise.reject(new Error('DeviceManager#decreaseVolume: Currently no device is paired'));\n }\n\n return this.webex.internal.lyra.device.decreaseVolume(this._pairedDevice);\n },\n\n /**\n * Sets paired device's volume but should use increase and decrease api instead\n * similar to device.setVolume()\n * @param {number} level\n * @returns {Promise<audioState>}\n */\n setVolume(level = 0) {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#setVolume: Currently no device is paired');\n\n return Promise.reject(new Error('DeviceManager#setVolume: Currently no device is paired'));\n }\n\n return this.webex.internal.lyra.device.setVolume(this._pairedDevice, level);\n },\n\n /**\n * Utility function to update decrypted device name on device object\n * @param {Array} deviceArray\n * @returns {device}\n */\n _updateDeviceMetadata(deviceArray = []) {\n if (!deviceArray.length) {\n return Promise.resolve(deviceArray);\n }\n const devices = cloneDeep(deviceArray);\n\n return Promise.all(devices.map(\n (device, index) => this.webex.internal.services.waitForCatalog('postauth')\n .then(() => {\n if (device.deviceClass === UC_CLOUD) {\n device.id = `${this.webex.internal.services.get('wdm')}/${device.id}`;\n }\n\n return this._decryptDeviceName(device);\n })\n .then((updatedDevice) => {\n devices[index] = updatedDevice;\n\n return Promise.resolve();\n })\n ))\n .then(() => Promise.resolve(devices));\n },\n\n /**\n * Utility function to update decrypted device name on device object\n * @param {object} inDevice\n * @returns {device}\n */\n _decryptDeviceName(inDevice = {}) {\n const device = cloneDeep(inDevice);\n\n if (device.metadata &&\n device.metadata.encryptedUserAssignedName &&\n device.metadata.encryptionKeyUrl) {\n return this.webex.internal.encryption.decryptText(\n device.metadata.encryptionKeyUrl, device.metadata.encryptedUserAssignedName\n )\n .then((decryptedDeviceName) => {\n // set userAssignedName as the decypted value, unset encryptedUserAssignedName since it's not needed\n device.metadata.encryptedUserAssignedName = undefined;\n device.metadata.userAssignedName = decryptedDeviceName;\n\n return Promise.resolve(device);\n })\n .catch((err) => {\n // unset encryptedUserAssignedName if failed to decrypt\n device.metadata.encryptedUserAssignedName = undefined;\n this.logger.error('DeviceCollection#_decryptDeviceName: failed to decrypt device name', err);\n });\n }\n\n return Promise.resolve(device);\n },\n\n /**\n * Utility function to update device info on mercury updates\n * @param {object} device\n * @returns {device}\n */\n _receiveDeviceUpdates(device) {\n // we care only the updates are for the registered devices\n if (device && device.spaceUrl) {\n const deviceId = device.spaceUrl.substring(device.spaceUrl.lastIndexOf('/') + 1);\n const existingDevice = DeviceCollection.get(deviceId);\n\n if (existingDevice) {\n return this.webex.internal.lyra.space.get({id: deviceId})\n .then((space) => {\n const device = DeviceCollection.get(deviceId);\n\n if (device &&\n space.occupants &&\n (!space.occupants.self || !space.occupants.self.verified)) {\n device.productName = space.devices && space.devices[0] && space.devices[0].productName ||\n DEFAULT_PRODUCT_NAME;\n // pin challenge is not verified reset _pairedDevice if ids\n // match\n const pairedDeviceId = this._pairedDevice && (this._pairedDevice.id || this._pairedDevice.identity.id);\n\n if (pairedDeviceId === deviceId) {\n this._pairedDevice = null;\n this.logger.info(`DeviceManager#_receiveDeviceUpdates: device ${deviceId} lost pairing`);\n\n return Promise.resolve();\n }\n // we do not want to reset the device pending PIN challenge\n if (this._devicePendingPinChallenge.identity.id !== deviceId) {\n return this.upsert(device);\n }\n\n return Promise.resolve();\n }\n\n return Promise.resolve();\n })\n .catch((err) => {\n this.logger.error('DeviceManager#_receiveDeviceUpdates: failed to receive updates for Lyra space', err);\n });\n }\n }\n\n return Promise.resolve();\n }\n\n\n});\n\nexport default DeviceManager;\n"],"mappings":"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"}
1
+ {"version":3,"names":["DeviceManager","WebexPlugin","extend","namespace","_devicePendingPinChallenge","_pairedDevice","_boundSpace","initialize","webex","internal","mercury","on","data","_receiveDeviceUpdates","getAll","DeviceCollection","refresh","reset","request","api","resource","then","res","body","reject","_updateDeviceMetadata","items","devices","forEach","device","deviceInfo","machineType","LYRA_SPACE","lyra","space","get","catch","err","logger","error","set","search","options","searchQuery","Error","people","searchId","uuid","v4","searchType","searchEntity","includePeople","includeRooms","queryString","upsert","deviceId","id","identity","existingDevice","resolve","method","auxDevice","_decryptDeviceName","token","getAdvertisedEndpoint","advertiser","result","displayName","remove","requestPin","url","dev","occupants","pinChallenge","info","join","passType","verificationInitiation","pair","pin","unpair","leave","bindSpace","kmsResourceObjectUrl","bindConversation","unbindSpace","unbindConversation","getAudioState","putAudioState","audioState","mute","unmute","increaseVolume","decreaseVolume","setVolume","level","deviceArray","length","all","map","index","services","waitForCatalog","deviceClass","UC_CLOUD","updatedDevice","inDevice","metadata","encryptedUserAssignedName","encryptionKeyUrl","encryption","decryptText","decryptedDeviceName","undefined","userAssignedName","spaceUrl","substring","lastIndexOf","self","verified","productName","DEFAULT_PRODUCT_NAME","pairedDeviceId"],"sources":["device-manager.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport {cloneDeep} from 'lodash';\nimport '@webex/internal-plugin-lyra';\nimport '@webex/internal-plugin-search';\nimport {WebexPlugin} from '@webex/webex-core';\nimport uuid from 'uuid';\n\nimport {LYRA_SPACE, UC_CLOUD, DEFAULT_PRODUCT_NAME} from './constants';\nimport DeviceCollection from './collection';\n\nconst DeviceManager = WebexPlugin.extend({\n namespace: 'DeviceManager',\n _devicePendingPinChallenge: null,\n _pairedDevice: null,\n _boundSpace: null,\n\n initialize() {\n // Lyra mercury events listener\n this.webex.internal.mercury.on('event:lyra.space_updated', ({data}) => {\n this._receiveDeviceUpdates(data);\n });\n },\n\n /**\n * Gets a list of all recent devices associated with the user\n * the device list gets populated from Redis\n * @returns {Promise<Device>}\n */\n getAll() {\n return DeviceCollection.getAll();\n },\n\n /**\n * Gets a list of all recent devices associated with the user\n * the device list gets populated from Redis\n * @returns {Promise<Device>}\n */\n refresh() {\n DeviceCollection.reset();\n\n return this.webex\n .request({\n api: 'wdm',\n resource: 'devices/auxiliary',\n })\n .then((res) => {\n if (!res.body) {\n return Promise.reject();\n }\n\n return this._updateDeviceMetadata(res.body.items).then((devices) => {\n /* eslint-disable consistent-return */\n devices.forEach((device) => {\n if (device.deviceInfo && device.deviceInfo.machineType === LYRA_SPACE) {\n return this.webex.internal.lyra.space.get(device.deviceInfo).catch((err) => {\n this.logger.error('DeviceManager#refresh: failed to receive device info', err);\n });\n }\n });\n /* eslint-enable consistent-return */\n res.body.items.forEach((device) => {\n DeviceCollection.set(device);\n });\n\n return this.getAll();\n });\n })\n .catch((err) => {\n this.logger.error('DeviceManager#refresh: failed to fetch recent devices', err);\n });\n },\n\n /**\n * Search for a device by name\n * @param {Object} options\n * @param {string} options.searchQuery\n * @returns {Promise<Device>}\n */\n search(options) {\n if (!options || !options.searchQuery) {\n this.logger.error('DeviceManager#search: options.searchQuery is required');\n\n return Promise.reject(new Error('DeviceManager#search: options.searchQuery is required'));\n }\n\n return this.webex.internal.search\n .people({\n searchId: uuid.v4(),\n searchType: 'DEVICE_SEARCH',\n searchEntity: 'device',\n includePeople: false,\n includeRooms: true,\n queryString: options.searchQuery,\n })\n .catch((err) => {\n this.logger.error('DeviceManager#search: failed to search a device', err);\n\n throw err;\n });\n },\n\n /**\n * Caches the device info and also registers to Redis for subsequent fetches\n * @param {Object} device\n * @param {string} device.id\n * @returns {deviceInfo}\n */\n upsert(device) {\n const deviceId = device.id || (device.identity && device.identity.id);\n\n if (!deviceId) {\n this.logger.error('DeviceManager#upsert: device.id is required');\n\n return Promise.reject(new Error('DeviceManager#upsert: device.id is required'));\n }\n this._pairedDevice = this._devicePendingPinChallenge;\n this._devicePendingPinChallenge = null;\n // check if the device is already existing, if so then merge else add\n const existingDevice = DeviceCollection.get(deviceId);\n\n if (existingDevice) {\n DeviceCollection.set(device);\n\n return Promise.resolve(DeviceCollection.get(deviceId));\n }\n\n // new device requested, add to wdm for subsequent retreivals\n return (\n this.webex\n .request({\n api: 'wdm',\n method: 'PUT',\n resource: `devices/auxiliary/Room/${deviceId}`,\n })\n .then((res) => {\n const auxDevice = res.body;\n\n return this._decryptDeviceName(auxDevice);\n })\n // eslint-disable-next-line no-shadow\n .then((device) => {\n DeviceCollection.set(device);\n\n return Promise.resolve(DeviceCollection.get(deviceId));\n })\n .catch((err) => {\n this.logger.error('DeviceManager#upsert: failed to add/update a device', err);\n\n return Promise.reject(err);\n })\n );\n },\n\n /**\n * Retreives device info of a particular device\n * @param {string} token\n * @returns {Promise<deviceInfo>}\n */\n get(token) {\n if (!token) {\n this.logger.error('DeviceManager#get: token is required');\n\n return Promise.reject(new Error('DeviceManager#get: token is required'));\n }\n let deviceInfo;\n\n return this.webex.internal.lyra\n .getAdvertisedEndpoint(token)\n .then((res) => {\n deviceInfo = res;\n\n return this.webex.internal.lyra.space.get({id: res.advertiser.id});\n })\n .then((result) => {\n // the deviceInfo doesn't have proper displayName, hence update\n // displayName on deviceInfo for search to work\n if (result && result.identity && result.identity.displayName) {\n deviceInfo.advertiser.displayName = result.identity.displayName;\n }\n\n return deviceInfo;\n })\n .catch((err) => {\n this.logger.error('DeviceManager#get: failed to get device info', err);\n\n return Promise.reject(err);\n });\n },\n\n /**\n * Unregisters the device from Redis, will not fetch in subsequent loads,\n * similar to space.deleteBinding()\n * @param {string} deviceId\n * @returns {Promise<deviceInfo>}\n */\n remove(deviceId) {\n if (!deviceId) {\n this.logger.error('DeviceManager#remove: deviceId is required');\n\n return Promise.reject(new Error('DeviceManager#remove: deviceId is required'));\n }\n\n return this.webex\n .request({\n method: 'delete',\n api: 'wdm',\n resource: `devices/auxiliary/${deviceId}`,\n })\n .catch((error) => {\n this.logger.error('DeviceManager#remove: failed to remove the device', error);\n\n return Promise.reject(error);\n });\n },\n\n /**\n * Requests to display PIN on the device\n * @param {object} device\n * @param {object} options\n * @param {object} options.data\n * @returns {Promise<deviceInfo>}\n */\n requestPin(device, options = {}) {\n const deviceId = device.id || (device.identity && device.identity.id);\n\n if (!deviceId) {\n this.logger.error('DeviceManager#requestPin: device.id is required');\n\n return Promise.reject(new Error('DeviceManager#requestPin: device.id is required'));\n }\n const space = {id: deviceId, url: `/spaces/${deviceId}`};\n\n return this.webex.internal.lyra.space\n .get(space)\n .then((dev) => {\n // check if the space is pinChallenge capable\n if (dev && dev.occupants && dev.occupants.pinChallenge) {\n this.logger.info('DeviceManager#requestPin: space is PIN challenge capable');\n\n return this.webex.internal.lyra.space\n .join(space, {\n passType: 'MANUAL',\n verificationInitiation: 'PIN',\n data: options.data,\n })\n .then(() => {\n this._devicePendingPinChallenge = dev;\n\n // return the actual device so that it can be upserted on successful\n // PIN exchange\n return dev;\n });\n }\n // pairs with the space if it's not PIN challenge capable\n this.logger.info(\n 'DeviceManager#requestPin: space is not PIN challenge capable, probably already occupied, will still return device info'\n );\n\n return this.webex.internal.lyra.space.get(space).then(() => Promise.resolve(dev));\n })\n .catch((err) => {\n this.logger.error('DeviceManager#requestPin: device failed PIN challenge request', err);\n\n return Promise.reject(err);\n });\n },\n\n /**\n * pairs the device with the user (manual pairing), also adds it to\n * user's recents list for subsequent fetches.\n * similar to space.join()\n * @param {object} options\n * @param {number} options.pin\n * @returns {Promise<deviceInfo>}\n */\n pair(options = {}) {\n if (!options.pin) {\n this.logger.error('DeviceManager#pair: options.pin is required');\n\n return Promise.reject(new Error('DeviceManager#pair: options.pin is required'));\n }\n if (this._devicePendingPinChallenge) {\n const space = {\n id: this._devicePendingPinChallenge.identity.id,\n url: `/spaces/${this._devicePendingPinChallenge.identity.id}`,\n };\n\n return this.webex.internal.lyra.space\n .join(space, {\n passType: 'PIN_ANSWER',\n data: options.pin,\n })\n .catch((err) => {\n this.logger.error('DeviceManager#pair: incorrect PIN, unable to pair ', err);\n\n return Promise.reject(err);\n })\n .then(() => this.upsert(this._devicePendingPinChallenge));\n }\n this.logger.error('DeviceManager#pair: no device to pair');\n\n return Promise.reject(new Error('DeviceManager#pair: no device to pair'));\n },\n\n /**\n * unpairs the device with the user (manual/ultrasonic pairing), but still\n * keeps in the recents list/does not remove from Redis\n * options.removeAllDevices will remove all associated devices to user\n * similar to space.leave()\n * @param {object} options\n * @param {boolean} options.removeAllDevices\n * @returns {Promise<deviceInfo>}\n */\n unpair(options = {}) {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#unpair: no device to unpair');\n\n return Promise.reject(new Error('DeviceManager#unpair: no device to unpair'));\n }\n const space = {url: `/spaces/${this._pairedDevice.identity.id}`};\n\n return this.webex.internal.lyra.space.leave(space, options).catch((err) => {\n this.logger.error('DeviceManager#unpair: failed to remove device from Lyra', err);\n\n return Promise.reject(err);\n });\n },\n\n /**\n * binds the space to the paired device (if supported)\n * similar to space.bindConversation()\n * @param {object} options\n * @param {boolean} options.url, conversation url\n * @param {boolean} options.kmsResourceObjectUrl of the convo\n * @returns {Promise<deviceInfo>}\n */\n bindSpace(options = {}) {\n if (!options.url) {\n this.logger.error('DeviceManager#pair: options.url is required');\n\n return Promise.reject(new Error('DeviceManager#bindSpace: options.url is required'));\n }\n if (!options.kmsResourceObjectUrl) {\n this.logger.error('DeviceManager#bindSpace: options.kmsResourceObjectUrl is required');\n\n return Promise.reject(\n new Error('DeviceManager#bindSpace: options.kmsResourceObjectUrl is required')\n );\n }\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#bindSpace: No device paired currently');\n\n return Promise.reject(new Error('DeviceManager#bindSpace: No device paired currently'));\n }\n const space = {\n url: `/spaces/${this._pairedDevice.identity.id}`,\n id: this._pairedDevice.identity.id,\n };\n\n this._boundSpace = {\n kmsResourceObjectUrl: options.kmsResourceObjectUrl,\n url: options.url,\n };\n\n return this.webex.internal.lyra.space.bindConversation(space, this._boundSpace).catch((err) => {\n this.logger.error('DeviceManager#bindSpace: failed to bind device to Space');\n\n return Promise.reject(err);\n });\n },\n\n /**\n * unbinds the space to the paired device (if supported)\n * similar to space.unbindConversation()\n * @returns {Promise<deviceInfo>}\n */\n unbindSpace() {\n if (!this._pairedDevice || !this._boundSpace) {\n this.logger.error('DeviceManager#unbindSpace: No space currently bound to the device');\n\n return Promise.reject(\n new Error('DeviceManager#unbindSpace: No space currently bound to the device')\n );\n }\n const space = {\n url: `/spaces/${this._pairedDevice.identity.id}`,\n id: this._pairedDevice.identity.id,\n };\n\n return this.webex.internal.lyra.space\n .unbindConversation(space, this._boundSpace)\n .then((res) => {\n this._boundSpace = null;\n\n return Promise.resolve(res);\n })\n .catch((err) => {\n this.logger.error('DeviceManager#unbindSpace: failed to unbind Space to device');\n\n return Promise.reject(err);\n });\n },\n\n /**\n * Gets the audio state of the paired device\n * similar to device.getAudioState()\n * @returns {Promise<audioState>}\n */\n getAudioState() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#getAudioState: Currently no device is paired');\n\n return Promise.reject(\n new Error('DeviceManager#getAudioState: Currently no device is paired')\n );\n }\n\n return this.webex.internal.lyra.device.getAudioState(this._pairedDevice);\n },\n\n /**\n * Updates audio state of the paired device, should be called every 10 minutes\n * or when mic or volume state is changed\n * similar to device.putAudioState()\n * @param {object} space\n * @param {object} audioState\n * @returns {Promise<audioState>}\n */\n putAudioState(space, audioState = {}) {\n return this.webex.internal.lyra.device.putAudioState(space, audioState);\n },\n\n /**\n * Mutes paired device\n * similar to device.mute()\n * @returns {Promise<audioState>}\n */\n mute() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#mute: Currently no device is paired');\n\n return Promise.reject(new Error('DeviceManager#mute: Currently no device is paired'));\n }\n\n return this.webex.internal.lyra.device.mute(this._pairedDevice);\n },\n\n /**\n * Unmutes paired device\n * similar to device.unmute()\n * @returns {Promise<audioState>}\n */\n unmute() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#unmute: Currently no device is paired');\n\n return Promise.reject(new Error('DeviceManager#unmute: Currently no device is paired'));\n }\n\n return this.webex.internal.lyra.device.unmute(this._pairedDevice);\n },\n\n /**\n * Increases paired device's volume\n * similar to device.increaseVolume()\n * @returns {Promise<audioState>}\n */\n increaseVolume() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#increaseVolume: Currently no device is paired');\n\n return Promise.reject(\n new Error('DeviceManager#increaseVolume: Currently no device is paired')\n );\n }\n\n return this.webex.internal.lyra.device.increaseVolume(this._pairedDevice);\n },\n\n /**\n * Decreases paired device's volume\n * similar to device.decreaseVolume()\n * @returns {Promise<audioState>}\n */\n decreaseVolume() {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#decreaseVolume: Currently no device is paired');\n\n return Promise.reject(\n new Error('DeviceManager#decreaseVolume: Currently no device is paired')\n );\n }\n\n return this.webex.internal.lyra.device.decreaseVolume(this._pairedDevice);\n },\n\n /**\n * Sets paired device's volume but should use increase and decrease api instead\n * similar to device.setVolume()\n * @param {number} level\n * @returns {Promise<audioState>}\n */\n setVolume(level = 0) {\n if (!this._pairedDevice) {\n this.logger.error('DeviceManager#setVolume: Currently no device is paired');\n\n return Promise.reject(new Error('DeviceManager#setVolume: Currently no device is paired'));\n }\n\n return this.webex.internal.lyra.device.setVolume(this._pairedDevice, level);\n },\n\n /**\n * Utility function to update decrypted device name on device object\n * @param {Array} deviceArray\n * @returns {device}\n */\n _updateDeviceMetadata(deviceArray = []) {\n if (!deviceArray.length) {\n return Promise.resolve(deviceArray);\n }\n const devices = cloneDeep(deviceArray);\n\n return Promise.all(\n devices.map((device, index) =>\n this.webex.internal.services\n .waitForCatalog('postauth')\n .then(() => {\n if (device.deviceClass === UC_CLOUD) {\n device.id = `${this.webex.internal.services.get('wdm')}/${device.id}`;\n }\n\n return this._decryptDeviceName(device);\n })\n .then((updatedDevice) => {\n devices[index] = updatedDevice;\n\n return Promise.resolve();\n })\n )\n ).then(() => Promise.resolve(devices));\n },\n\n /**\n * Utility function to update decrypted device name on device object\n * @param {object} inDevice\n * @returns {device}\n */\n _decryptDeviceName(inDevice = {}) {\n const device = cloneDeep(inDevice);\n\n if (\n device.metadata &&\n device.metadata.encryptedUserAssignedName &&\n device.metadata.encryptionKeyUrl\n ) {\n return this.webex.internal.encryption\n .decryptText(device.metadata.encryptionKeyUrl, device.metadata.encryptedUserAssignedName)\n .then((decryptedDeviceName) => {\n // set userAssignedName as the decypted value, unset encryptedUserAssignedName since it's not needed\n device.metadata.encryptedUserAssignedName = undefined;\n device.metadata.userAssignedName = decryptedDeviceName;\n\n return Promise.resolve(device);\n })\n .catch((err) => {\n // unset encryptedUserAssignedName if failed to decrypt\n device.metadata.encryptedUserAssignedName = undefined;\n this.logger.error(\n 'DeviceCollection#_decryptDeviceName: failed to decrypt device name',\n err\n );\n });\n }\n\n return Promise.resolve(device);\n },\n\n /**\n * Utility function to update device info on mercury updates\n * @param {object} device\n * @returns {device}\n */\n _receiveDeviceUpdates(device) {\n // we care only the updates are for the registered devices\n if (device && device.spaceUrl) {\n const deviceId = device.spaceUrl.substring(device.spaceUrl.lastIndexOf('/') + 1);\n const existingDevice = DeviceCollection.get(deviceId);\n\n if (existingDevice) {\n return this.webex.internal.lyra.space\n .get({id: deviceId})\n .then((space) => {\n // eslint-disable-next-line no-shadow\n const device = DeviceCollection.get(deviceId);\n\n if (\n device &&\n space.occupants &&\n (!space.occupants.self || !space.occupants.self.verified)\n ) {\n device.productName =\n (space.devices && space.devices[0] && space.devices[0].productName) ||\n DEFAULT_PRODUCT_NAME;\n // pin challenge is not verified reset _pairedDevice if ids\n // match\n const pairedDeviceId =\n this._pairedDevice && (this._pairedDevice.id || this._pairedDevice.identity.id);\n\n if (pairedDeviceId === deviceId) {\n this._pairedDevice = null;\n this.logger.info(\n `DeviceManager#_receiveDeviceUpdates: device ${deviceId} lost pairing`\n );\n\n return Promise.resolve();\n }\n // we do not want to reset the device pending PIN challenge\n if (this._devicePendingPinChallenge.identity.id !== deviceId) {\n return this.upsert(device);\n }\n\n return Promise.resolve();\n }\n\n return Promise.resolve();\n })\n .catch((err) => {\n this.logger.error(\n 'DeviceManager#_receiveDeviceUpdates: failed to receive updates for Lyra space',\n err\n );\n });\n }\n }\n\n return Promise.resolve();\n },\n});\n\nexport default DeviceManager;\n"],"mappings":"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"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["registerPlugin","DeviceManager","config"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* globals */\n\nimport '@webex/internal-plugin-device';\nimport {registerPlugin} from '@webex/webex-core';\n\nimport DeviceManager from './device-manager';\nimport config from './config';\n\nregisterPlugin('devicemanager', DeviceManager, {\n config\n});\n\nexport {default} from './device-manager';\nexport {default as config} from './config';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAMA;;AACA;;AAEA;;AACA;;AAVA;AACA;AACA;;AAEA;AAQA,IAAAA,yBAAA,EAAe,eAAf,EAAgCC,sBAAhC,EAA+C;EAC7CC,MAAM,EAANA;AAD6C,CAA/C"}
1
+ {"version":3,"names":["registerPlugin","DeviceManager","config"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* globals */\n\nimport '@webex/internal-plugin-device';\nimport {registerPlugin} from '@webex/webex-core';\n\nimport DeviceManager from './device-manager';\nimport config from './config';\n\nregisterPlugin('devicemanager', DeviceManager, {\n config,\n});\n\nexport {default} from './device-manager';\nexport {default as config} from './config';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAMA;;AACA;;AAEA;;AACA;;AAVA;AACA;AACA;;AAEA;AAQA,IAAAA,yBAAA,EAAe,eAAf,EAAgCC,sBAAhC,EAA+C;EAC7CC,MAAM,EAANA;AAD6C,CAA/C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-device-manager",
3
- "version": "3.0.0-beta.13",
3
+ "version": "3.0.0-beta.15",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "contributors": [
@@ -23,15 +23,15 @@
23
23
  ]
24
24
  },
25
25
  "dependencies": {
26
- "@webex/internal-plugin-calendar": "3.0.0-beta.13",
27
- "@webex/internal-plugin-device": "3.0.0-beta.13",
28
- "@webex/internal-plugin-lyra": "3.0.0-beta.13",
29
- "@webex/internal-plugin-search": "3.0.0-beta.13",
30
- "@webex/plugin-authorization": "3.0.0-beta.13",
31
- "@webex/plugin-device-manager": "3.0.0-beta.13",
32
- "@webex/plugin-logger": "3.0.0-beta.13",
33
- "@webex/test-helper-chai": "3.0.0-beta.13",
34
- "@webex/webex-core": "3.0.0-beta.13",
26
+ "@webex/internal-plugin-calendar": "3.0.0-beta.15",
27
+ "@webex/internal-plugin-device": "3.0.0-beta.15",
28
+ "@webex/internal-plugin-lyra": "3.0.0-beta.15",
29
+ "@webex/internal-plugin-search": "3.0.0-beta.15",
30
+ "@webex/plugin-authorization": "3.0.0-beta.15",
31
+ "@webex/plugin-device-manager": "3.0.0-beta.15",
32
+ "@webex/plugin-logger": "3.0.0-beta.15",
33
+ "@webex/test-helper-chai": "3.0.0-beta.15",
34
+ "@webex/webex-core": "3.0.0-beta.15",
35
35
  "lodash": "^4.17.21",
36
36
  "uuid": "^3.3.2"
37
37
  }