@webex/internal-plugin-dss 3.10.0 → 3.11.0-next.10
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/dist/config.js.map +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/dss-batcher.js.map +1 -1
- package/dist/dss-errors.js +6 -8
- package/dist/dss-errors.js.map +1 -1
- package/dist/dss.js +53 -14
- package/dist/dss.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +8 -8
- package/src/dss.ts +56 -4
- package/test/integration/spec/dss.js +69 -0
- package/test/unit/spec/dss.ts +265 -2
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_default","exports","default","dss","requestTimeout","batcherWait","batcherMaxCalls","batcherMaxWait"],"sources":["config.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n dss: {\n /**\n * Timeout before DSS request fails, in milliseconds.\n * @type {Number}\n */\n requestTimeout: 6000,\n\n /**\n * Debounce wait (ms) before sending a dss request (gap between lookups that will trigger a request)\n * @type {Number}\n */\n batcherWait: 50,\n\n /**\n * Maximum queue size before sending a dss request\n * @type {Number}\n */\n batcherMaxCalls: 50,\n\n /**\n * Debounce max wait (ms) before sending a dss request (time from first lookup that will trigger a request)\n * @type {Number}\n */\n batcherMaxWait: 150,\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAIe;EACbC,GAAG,EAAE;IACH;AACJ;AACA;AACA;IACIC,cAAc,EAAE,IAAI;IAEpB;AACJ;AACA;AACA;IACIC,WAAW,EAAE,EAAE;IAEf;AACJ;AACA;AACA;IACIC,eAAe,EAAE,EAAE;IAEnB;AACJ;AACA;AACA;IACIC,cAAc,EAAE;EAClB;AACF,CAAC"}
|
|
1
|
+
{"version":3,"names":["_default","exports","default","dss","requestTimeout","batcherWait","batcherMaxCalls","batcherMaxWait"],"sources":["config.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n dss: {\n /**\n * Timeout before DSS request fails, in milliseconds.\n * @type {Number}\n */\n requestTimeout: 6000,\n\n /**\n * Debounce wait (ms) before sending a dss request (gap between lookups that will trigger a request)\n * @type {Number}\n */\n batcherWait: 50,\n\n /**\n * Maximum queue size before sending a dss request\n * @type {Number}\n */\n batcherMaxCalls: 50,\n\n /**\n * Debounce max wait (ms) before sending a dss request (time from first lookup that will trigger a request)\n * @type {Number}\n */\n batcherMaxWait: 150,\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAIe;EACbC,GAAG,EAAE;IACH;AACJ;AACA;AACA;IACIC,cAAc,EAAE,IAAI;IAEpB;AACJ;AACA;AACA;IACIC,WAAW,EAAE,EAAE;IAEf;AACJ;AACA;AACA;IACIC,eAAe,EAAE,EAAE;IAEnB;AACJ;AACA;AACA;IACIC,cAAc,EAAE;EAClB;AACF,CAAC","ignoreList":[]}
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DSS_REGISTERED","exports","DSS_UNREGISTERED","DSS_LOOKUP_MERCURY_EVENT","DSS_SEARCH_MERCURY_EVENT","DSS_LOOKUP_RESULT","DSS_RESULT","DSS_SERVICE_NAME","SEARCH_TYPES","PERSON","CALLING_SERVICE","EXTERNAL_CALLING","ROOM","ROBOT","LOOKUP_DATA_PATH","LOOKUP_FOUND_PATH","LOOKUP_NOT_FOUND_PATH","LOOKUP_REQUEST_KEY","SEARCH_DATA_PATH"],"sources":["constants.ts"],"sourcesContent":["export const DSS_REGISTERED = 'dss:registered';\nexport const DSS_UNREGISTERED = 'dss:unregistered';\nexport const DSS_LOOKUP_MERCURY_EVENT = 'event:directory.lookup';\nexport const DSS_SEARCH_MERCURY_EVENT = 'event:directory.search';\nexport const DSS_LOOKUP_RESULT = 'dss:lookup.result';\nexport const DSS_RESULT = 'dss:result';\nexport const DSS_SERVICE_NAME = 'directorySearch';\nexport const SEARCH_TYPES = {\n PERSON: 'PERSON',\n CALLING_SERVICE: 'CALLING_SERVICE',\n EXTERNAL_CALLING: 'EXTERNAL_CALLING',\n ROOM: 'ROOM',\n ROBOT: 'ROBOT',\n};\nexport const LOOKUP_DATA_PATH = 'lookupResult.entities';\nexport const LOOKUP_FOUND_PATH = 'lookupResult.entitiesFound';\nexport const LOOKUP_NOT_FOUND_PATH = 'lookupResult.entitiesNotFound';\nexport const LOOKUP_REQUEST_KEY = 'lookupValues';\nexport const SEARCH_DATA_PATH = 'directoryEntities';\n"],"mappings":";;;;;;;AAAO,IAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG,gBAAgB;AACvC,IAAME,gBAAgB,GAAAD,OAAA,CAAAC,gBAAA,GAAG,kBAAkB;AAC3C,IAAMC,wBAAwB,GAAAF,OAAA,CAAAE,wBAAA,GAAG,wBAAwB;AACzD,IAAMC,wBAAwB,GAAAH,OAAA,CAAAG,wBAAA,GAAG,wBAAwB;AACzD,IAAMC,iBAAiB,GAAAJ,OAAA,CAAAI,iBAAA,GAAG,mBAAmB;AAC7C,IAAMC,UAAU,GAAAL,OAAA,CAAAK,UAAA,GAAG,YAAY;AAC/B,IAAMC,gBAAgB,GAAAN,OAAA,CAAAM,gBAAA,GAAG,iBAAiB;AAC1C,IAAMC,YAAY,GAAAP,OAAA,CAAAO,YAAA,GAAG;EAC1BC,MAAM,EAAE,QAAQ;EAChBC,eAAe,EAAE,iBAAiB;EAClCC,gBAAgB,EAAE,kBAAkB;EACpCC,IAAI,EAAE,MAAM;EACZC,KAAK,EAAE;AACT,CAAC;AACM,IAAMC,gBAAgB,GAAAb,OAAA,CAAAa,gBAAA,GAAG,uBAAuB;AAChD,IAAMC,iBAAiB,GAAAd,OAAA,CAAAc,iBAAA,GAAG,4BAA4B;AACtD,IAAMC,qBAAqB,GAAAf,OAAA,CAAAe,qBAAA,GAAG,+BAA+B;AAC7D,IAAMC,kBAAkB,GAAAhB,OAAA,CAAAgB,kBAAA,GAAG,cAAc;AACzC,IAAMC,gBAAgB,GAAAjB,OAAA,CAAAiB,gBAAA,GAAG,mBAAmB"}
|
|
1
|
+
{"version":3,"names":["DSS_REGISTERED","exports","DSS_UNREGISTERED","DSS_LOOKUP_MERCURY_EVENT","DSS_SEARCH_MERCURY_EVENT","DSS_LOOKUP_RESULT","DSS_RESULT","DSS_SERVICE_NAME","SEARCH_TYPES","PERSON","CALLING_SERVICE","EXTERNAL_CALLING","ROOM","ROBOT","LOOKUP_DATA_PATH","LOOKUP_FOUND_PATH","LOOKUP_NOT_FOUND_PATH","LOOKUP_REQUEST_KEY","SEARCH_DATA_PATH"],"sources":["constants.ts"],"sourcesContent":["export const DSS_REGISTERED = 'dss:registered';\nexport const DSS_UNREGISTERED = 'dss:unregistered';\nexport const DSS_LOOKUP_MERCURY_EVENT = 'event:directory.lookup';\nexport const DSS_SEARCH_MERCURY_EVENT = 'event:directory.search';\nexport const DSS_LOOKUP_RESULT = 'dss:lookup.result';\nexport const DSS_RESULT = 'dss:result';\nexport const DSS_SERVICE_NAME = 'directorySearch';\nexport const SEARCH_TYPES = {\n PERSON: 'PERSON',\n CALLING_SERVICE: 'CALLING_SERVICE',\n EXTERNAL_CALLING: 'EXTERNAL_CALLING',\n ROOM: 'ROOM',\n ROBOT: 'ROBOT',\n};\nexport const LOOKUP_DATA_PATH = 'lookupResult.entities';\nexport const LOOKUP_FOUND_PATH = 'lookupResult.entitiesFound';\nexport const LOOKUP_NOT_FOUND_PATH = 'lookupResult.entitiesNotFound';\nexport const LOOKUP_REQUEST_KEY = 'lookupValues';\nexport const SEARCH_DATA_PATH = 'directoryEntities';\n"],"mappings":";;;;;;;AAAO,IAAMA,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG,gBAAgB;AACvC,IAAME,gBAAgB,GAAAD,OAAA,CAAAC,gBAAA,GAAG,kBAAkB;AAC3C,IAAMC,wBAAwB,GAAAF,OAAA,CAAAE,wBAAA,GAAG,wBAAwB;AACzD,IAAMC,wBAAwB,GAAAH,OAAA,CAAAG,wBAAA,GAAG,wBAAwB;AACzD,IAAMC,iBAAiB,GAAAJ,OAAA,CAAAI,iBAAA,GAAG,mBAAmB;AAC7C,IAAMC,UAAU,GAAAL,OAAA,CAAAK,UAAA,GAAG,YAAY;AAC/B,IAAMC,gBAAgB,GAAAN,OAAA,CAAAM,gBAAA,GAAG,iBAAiB;AAC1C,IAAMC,YAAY,GAAAP,OAAA,CAAAO,YAAA,GAAG;EAC1BC,MAAM,EAAE,QAAQ;EAChBC,eAAe,EAAE,iBAAiB;EAClCC,gBAAgB,EAAE,kBAAkB;EACpCC,IAAI,EAAE,MAAM;EACZC,KAAK,EAAE;AACT,CAAC;AACM,IAAMC,gBAAgB,GAAAb,OAAA,CAAAa,gBAAA,GAAG,uBAAuB;AAChD,IAAMC,iBAAiB,GAAAd,OAAA,CAAAc,iBAAA,GAAG,4BAA4B;AACtD,IAAMC,qBAAqB,GAAAf,OAAA,CAAAe,qBAAA,GAAG,+BAA+B;AAC7D,IAAMC,kBAAkB,GAAAhB,OAAA,CAAAgB,kBAAA,GAAG,cAAc;AACzC,IAAMC,gBAAgB,GAAAjB,OAAA,CAAAiB,gBAAA,GAAG,mBAAmB","ignoreList":[]}
|
package/dist/dss-batcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_webexCore","require","DssBatcher","Batcher","extend","namespace","props","resource","type","required","setOnce","allowNull","dataPath","entitiesFoundPath","entitiesNotFoundPath","requestKey","submitHttpRequest","payload","parent","_request","foundPath","notFoundPath","params","lookupValues","handleHttpSuccess","res","_this","successItems","foundArray","map","requestValue","index","entity","resultArray","failureItems","notFoundArray","_promise","default","all","concat","item","acceptItem","didItemFail","resolve","handleItemFailure","getDeferredForResponse","then","defer","handleItemSuccess","fingerprintRequest","fingerprintResponse","_default","exports"],"sources":["dss-batcher.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.\n */\n/* eslint-disable no-underscore-dangle */\n\nimport {Batcher} from '@webex/webex-core';\n\n/**\n * @class\n */\nconst DssBatcher = Batcher.extend({\n namespace: 'DSS',\n\n props: {\n resource: {\n type: 'string',\n required: true,\n setOnce: true,\n allowNull: false,\n },\n dataPath: {\n type: 'string',\n required: true,\n setOnce: true,\n allowNull: false,\n },\n entitiesFoundPath: {\n type: 'string',\n required: true,\n setOnce: true,\n allowNull: false,\n },\n entitiesNotFoundPath: {\n type: 'string',\n required: true,\n setOnce: true,\n allowNull: false,\n },\n requestKey: {\n type: 'string',\n required: true,\n setOnce: true,\n allowNull: false,\n },\n },\n\n /**\n * Submits the DSS request\n * @param {Object} payload\n * @returns {Promise<Array>}\n */\n submitHttpRequest(payload: unknown) {\n return this.parent._request({\n dataPath: this.dataPath,\n foundPath: this.entitiesFoundPath,\n notFoundPath: this.entitiesNotFoundPath,\n resource: this.resource,\n params: {\n lookupValues: payload,\n },\n });\n },\n\n /**\n * Actions taken when the http request returns a success\n * @param {Promise<Array>} res\n * @returns {Promise<undefined>}\n */\n handleHttpSuccess(res) {\n const successItems = res.foundArray.map((requestValue, index) => ({\n requestValue,\n entity: res.resultArray[index],\n }));\n const failureItems = res.notFoundArray.map((requestValue) => ({requestValue, entity: null}));\n\n return Promise.all(successItems.concat(failureItems).map((item) => this.acceptItem(item)));\n },\n\n /**\n * Checks if the item was found\n * @param {Object} item\n * @returns {Promise<Boolean>}\n */\n didItemFail(item) {\n return Promise.resolve(item.entity === null);\n },\n\n /**\n * Finds the Defer for the specified item and resolves its promise with null\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n handleItemFailure(item) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.resolve(null);\n });\n },\n\n /**\n * Finds the Defer for the specified item and resolves its promise\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n handleItemSuccess(item) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.resolve(item.entity);\n });\n },\n\n /**\n * Returns a promise with the unique key for the item\n * @param {Object} item\n * @returns {Promise}\n */\n fingerprintRequest(item) {\n return Promise.resolve(item);\n },\n\n /**\n * Returns a promise with the unique key for the item\n * @param {Object} item\n * @returns {Promise}\n */\n fingerprintResponse(item) {\n return Promise.resolve(item.requestValue);\n },\n});\n\nexport default DssBatcher;\n"],"mappings":";;;;;;;;;AAKA,IAAAA,UAAA,GAAAC,OAAA;AALA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA,IAAMC,UAAU,GAAGC,kBAAO,CAACC,MAAM,CAAC;EAChCC,SAAS,EAAE,KAAK;EAEhBC,KAAK,EAAE;IACLC,QAAQ,EAAE;MACRC,IAAI,EAAE,QAAQ;MACdC,QAAQ,EAAE,IAAI;MACdC,OAAO,EAAE,IAAI;MACbC,SAAS,EAAE;IACb,CAAC;IACDC,QAAQ,EAAE;MACRJ,IAAI,EAAE,QAAQ;MACdC,QAAQ,EAAE,IAAI;MACdC,OAAO,EAAE,IAAI;MACbC,SAAS,EAAE;IACb,CAAC;IACDE,iBAAiB,EAAE;MACjBL,IAAI,EAAE,QAAQ;MACdC,QAAQ,EAAE,IAAI;MACdC,OAAO,EAAE,IAAI;MACbC,SAAS,EAAE;IACb,CAAC;IACDG,oBAAoB,EAAE;MACpBN,IAAI,EAAE,QAAQ;MACdC,QAAQ,EAAE,IAAI;MACdC,OAAO,EAAE,IAAI;MACbC,SAAS,EAAE;IACb,CAAC;IACDI,UAAU,EAAE;MACVP,IAAI,EAAE,QAAQ;MACdC,QAAQ,EAAE,IAAI;MACdC,OAAO,EAAE,IAAI;MACbC,SAAS,EAAE;IACb;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;EACEK,iBAAiB,
|
|
1
|
+
{"version":3,"names":["_webexCore","require","DssBatcher","Batcher","extend","namespace","props","resource","type","required","setOnce","allowNull","dataPath","entitiesFoundPath","entitiesNotFoundPath","requestKey","submitHttpRequest","payload","parent","_request","foundPath","notFoundPath","params","lookupValues","handleHttpSuccess","res","_this","successItems","foundArray","map","requestValue","index","entity","resultArray","failureItems","notFoundArray","_promise","default","all","concat","item","acceptItem","didItemFail","resolve","handleItemFailure","getDeferredForResponse","then","defer","handleItemSuccess","fingerprintRequest","fingerprintResponse","_default","exports"],"sources":["dss-batcher.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.\n */\n/* eslint-disable no-underscore-dangle */\n\nimport {Batcher} from '@webex/webex-core';\n\n/**\n * @class\n */\nconst DssBatcher = Batcher.extend({\n namespace: 'DSS',\n\n props: {\n resource: {\n type: 'string',\n required: true,\n setOnce: true,\n allowNull: false,\n },\n dataPath: {\n type: 'string',\n required: true,\n setOnce: true,\n allowNull: false,\n },\n entitiesFoundPath: {\n type: 'string',\n required: true,\n setOnce: true,\n allowNull: false,\n },\n entitiesNotFoundPath: {\n type: 'string',\n required: true,\n setOnce: true,\n allowNull: false,\n },\n requestKey: {\n type: 'string',\n required: true,\n setOnce: true,\n allowNull: false,\n },\n },\n\n /**\n * Submits the DSS request\n * @param {Object} payload\n * @returns {Promise<Array>}\n */\n submitHttpRequest(payload: unknown) {\n return this.parent._request({\n dataPath: this.dataPath,\n foundPath: this.entitiesFoundPath,\n notFoundPath: this.entitiesNotFoundPath,\n resource: this.resource,\n params: {\n lookupValues: payload,\n },\n });\n },\n\n /**\n * Actions taken when the http request returns a success\n * @param {Promise<Array>} res\n * @returns {Promise<undefined>}\n */\n handleHttpSuccess(res) {\n const successItems = res.foundArray.map((requestValue, index) => ({\n requestValue,\n entity: res.resultArray[index],\n }));\n const failureItems = res.notFoundArray.map((requestValue) => ({requestValue, entity: null}));\n\n return Promise.all(successItems.concat(failureItems).map((item) => this.acceptItem(item)));\n },\n\n /**\n * Checks if the item was found\n * @param {Object} item\n * @returns {Promise<Boolean>}\n */\n didItemFail(item) {\n return Promise.resolve(item.entity === null);\n },\n\n /**\n * Finds the Defer for the specified item and resolves its promise with null\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n handleItemFailure(item) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.resolve(null);\n });\n },\n\n /**\n * Finds the Defer for the specified item and resolves its promise\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n handleItemSuccess(item) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.resolve(item.entity);\n });\n },\n\n /**\n * Returns a promise with the unique key for the item\n * @param {Object} item\n * @returns {Promise}\n */\n fingerprintRequest(item) {\n return Promise.resolve(item);\n },\n\n /**\n * Returns a promise with the unique key for the item\n * @param {Object} item\n * @returns {Promise}\n */\n fingerprintResponse(item) {\n return Promise.resolve(item.requestValue);\n },\n});\n\nexport default DssBatcher;\n"],"mappings":"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","ignoreList":[]}
|
package/dist/dss-errors.js
CHANGED
|
@@ -10,18 +10,16 @@ exports.DssTimeoutError = void 0;
|
|
|
10
10
|
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
11
11
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
12
12
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
13
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
14
13
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
15
14
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
15
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
16
16
|
var _common = require("@webex/common");
|
|
17
|
-
function
|
|
18
|
-
function _isNativeReflectConstruct() {
|
|
17
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? _Reflect$construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
|
|
18
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
19
19
|
/**
|
|
20
20
|
* Thrown when an expected DSS respond is not received in a timely manner.
|
|
21
21
|
*/
|
|
22
22
|
var DssTimeoutError = exports.DssTimeoutError = /*#__PURE__*/function (_Exception) {
|
|
23
|
-
(0, _inherits2.default)(DssTimeoutError, _Exception);
|
|
24
|
-
var _super = _createSuper(DssTimeoutError);
|
|
25
23
|
/**
|
|
26
24
|
* Construct DssTimeoutError
|
|
27
25
|
* @param {DssTimeoutErrorParams} details
|
|
@@ -29,7 +27,7 @@ var DssTimeoutError = exports.DssTimeoutError = /*#__PURE__*/function (_Exceptio
|
|
|
29
27
|
// eslint-disable-next-line no-useless-constructor
|
|
30
28
|
function DssTimeoutError(details) {
|
|
31
29
|
(0, _classCallCheck2.default)(this, DssTimeoutError);
|
|
32
|
-
return
|
|
30
|
+
return _callSuper(this, DssTimeoutError, [details]);
|
|
33
31
|
}
|
|
34
32
|
|
|
35
33
|
/**
|
|
@@ -38,12 +36,12 @@ var DssTimeoutError = exports.DssTimeoutError = /*#__PURE__*/function (_Exceptio
|
|
|
38
36
|
* @param {DssTimeoutErrorParams} details
|
|
39
37
|
* @returns {string}
|
|
40
38
|
*/
|
|
41
|
-
(0,
|
|
39
|
+
(0, _inherits2.default)(DssTimeoutError, _Exception);
|
|
40
|
+
return (0, _createClass2.default)(DssTimeoutError, [{
|
|
42
41
|
key: "parse",
|
|
43
42
|
value: function parse(details) {
|
|
44
43
|
return "The DSS did not respond within ".concat(details.timeout, " ms.") + "\n Request Id: ".concat(details.requestId) + "\n Resource: ".concat(details.resource) + "\n Params: ".concat((0, _stringify.default)(details.params));
|
|
45
44
|
}
|
|
46
45
|
}]);
|
|
47
|
-
return DssTimeoutError;
|
|
48
46
|
}(_common.Exception);
|
|
49
47
|
//# sourceMappingURL=dss-errors.js.map
|
package/dist/dss-errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_common","require","
|
|
1
|
+
{"version":3,"names":["_common","require","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","DssTimeoutError","exports","_Exception","details","_classCallCheck2","_inherits2","_createClass2","key","value","parse","concat","timeout","requestId","resource","_stringify","params","Exception"],"sources":["dss-errors.ts"],"sourcesContent":["import {Exception} from '@webex/common';\nimport {RequestOptions} from './types';\n\ninterface DssTimeoutErrorParams extends Required<Pick<RequestOptions, 'resource' | 'params'>> {\n requestId: string;\n timeout: number;\n}\n\n/**\n * Thrown when an expected DSS respond is not received in a timely manner.\n */\nexport class DssTimeoutError extends Exception {\n /**\n * Construct DssTimeoutError\n * @param {DssTimeoutErrorParams} details\n */\n // eslint-disable-next-line no-useless-constructor\n constructor(details: DssTimeoutErrorParams) {\n super(details);\n }\n\n /**\n * Parse Error details\n *\n * @param {DssTimeoutErrorParams} details\n * @returns {string}\n */\n parse(details: DssTimeoutErrorParams) {\n return (\n `The DSS did not respond within ${details.timeout} ms.` +\n `\\n Request Id: ${details.requestId}` +\n `\\n Resource: ${details.resource}` +\n `\\n Params: ${JSON.stringify(details.params)}`\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAAwC,SAAAC,WAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,WAAAD,CAAA,OAAAE,gBAAA,CAAAC,OAAA,EAAAH,CAAA,OAAAI,2BAAA,CAAAD,OAAA,EAAAJ,CAAA,EAAAM,yBAAA,KAAAC,kBAAA,CAAAN,CAAA,EAAAC,CAAA,YAAAC,gBAAA,CAAAC,OAAA,EAAAJ,CAAA,EAAAQ,WAAA,IAAAP,CAAA,CAAAQ,KAAA,CAAAT,CAAA,EAAAE,CAAA;AAAA,SAAAI,0BAAA,cAAAN,CAAA,IAAAU,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAN,kBAAA,CAAAG,OAAA,iCAAAV,CAAA,aAAAM,yBAAA,YAAAA,0BAAA,aAAAN,CAAA;AAQxC;AACA;AACA;AAFA,IAGac,eAAe,GAAAC,OAAA,CAAAD,eAAA,0BAAAE,UAAA;EAC1B;AACF;AACA;AACA;EACE;EACA,SAAAF,gBAAYG,OAA8B,EAAE;IAAA,IAAAC,gBAAA,CAAAd,OAAA,QAAAU,eAAA;IAAA,OAAAf,UAAA,OAAAe,eAAA,GACpCG,OAAO;EACf;;EAEA;AACF;AACA;AACA;AACA;AACA;EALE,IAAAE,UAAA,CAAAf,OAAA,EAAAU,eAAA,EAAAE,UAAA;EAAA,WAAAI,aAAA,CAAAhB,OAAA,EAAAU,eAAA;IAAAO,GAAA;IAAAC,KAAA,EAMA,SAAAC,KAAKA,CAACN,OAA8B,EAAE;MACpC,OACE,kCAAAO,MAAA,CAAkCP,OAAO,CAACQ,OAAO,8BAAAD,MAAA,CAC/BP,OAAO,CAACS,SAAS,CAAE,mBAAAF,MAAA,CACrBP,OAAO,CAACU,QAAQ,CAAE,iBAAAH,MAAA,CACpB,IAAAI,UAAA,CAAAxB,OAAA,EAAea,OAAO,CAACY,MAAM,CAAC,CAAE;IAElD;EAAC;AAAA,EAvBkCC,iBAAS","ignoreList":[]}
|
package/dist/dss.js
CHANGED
|
@@ -83,16 +83,14 @@ var DSS = _webexCore.WebexPlugin.extend({
|
|
|
83
83
|
* @memberof DSS
|
|
84
84
|
*/
|
|
85
85
|
unregister: function unregister() {
|
|
86
|
-
var _this2 = this;
|
|
87
86
|
if (!this.registered) {
|
|
88
87
|
this.logger.info('DSS->unregister#INFO, DSS plugin already unregistered');
|
|
89
88
|
return _promise.default.resolve();
|
|
90
89
|
}
|
|
91
90
|
this.stopListeningForEvents();
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
});
|
|
91
|
+
this.trigger(_constants.DSS_UNREGISTERED);
|
|
92
|
+
this.registered = false;
|
|
93
|
+
return _promise.default.resolve();
|
|
96
94
|
},
|
|
97
95
|
/**
|
|
98
96
|
* registers for DSS events through mercury
|
|
@@ -100,12 +98,12 @@ var DSS = _webexCore.WebexPlugin.extend({
|
|
|
100
98
|
* @private
|
|
101
99
|
*/
|
|
102
100
|
listenForEvents: function listenForEvents() {
|
|
103
|
-
var
|
|
101
|
+
var _this2 = this;
|
|
104
102
|
this.webex.internal.mercury.on(_constants.DSS_LOOKUP_MERCURY_EVENT, function (envelope) {
|
|
105
|
-
|
|
103
|
+
_this2._handleEvent(envelope.data);
|
|
106
104
|
});
|
|
107
105
|
this.webex.internal.mercury.on(_constants.DSS_SEARCH_MERCURY_EVENT, function (envelope) {
|
|
108
|
-
|
|
106
|
+
_this2._handleEvent(envelope.data);
|
|
109
107
|
});
|
|
110
108
|
},
|
|
111
109
|
/**
|
|
@@ -149,7 +147,7 @@ var DSS = _webexCore.WebexPlugin.extend({
|
|
|
149
147
|
* @throws {DssTimeoutError} when server does not respond in the specified timeframe
|
|
150
148
|
*/
|
|
151
149
|
_request: function _request(options) {
|
|
152
|
-
var
|
|
150
|
+
var _this3 = this;
|
|
153
151
|
var resource = options.resource,
|
|
154
152
|
params = options.params,
|
|
155
153
|
dataPath = options.dataPath,
|
|
@@ -163,7 +161,7 @@ var DSS = _webexCore.WebexPlugin.extend({
|
|
|
163
161
|
var notFoundArray;
|
|
164
162
|
return new _promise.default(function (resolve, reject) {
|
|
165
163
|
var timer = new _commonTimers.Timer(function () {
|
|
166
|
-
|
|
164
|
+
_this3.stopListening(_this3, eventName);
|
|
167
165
|
reject(new _dssErrors.DssTimeoutError({
|
|
168
166
|
requestId: requestId,
|
|
169
167
|
timeout: timeout,
|
|
@@ -171,7 +169,7 @@ var DSS = _webexCore.WebexPlugin.extend({
|
|
|
171
169
|
params: params
|
|
172
170
|
}));
|
|
173
171
|
}, timeout);
|
|
174
|
-
|
|
172
|
+
_this3.listenTo(_this3, eventName, function (data) {
|
|
175
173
|
timer.reset();
|
|
176
174
|
var resultData = (0, _lodash.get)(data, dataPath, []);
|
|
177
175
|
var found;
|
|
@@ -214,10 +212,10 @@ var DSS = _webexCore.WebexPlugin.extend({
|
|
|
214
212
|
resolveValue.notFoundArray = notFoundArray;
|
|
215
213
|
}
|
|
216
214
|
resolve(resolveValue);
|
|
217
|
-
|
|
215
|
+
_this3.stopListening(_this3, eventName);
|
|
218
216
|
}
|
|
219
217
|
});
|
|
220
|
-
|
|
218
|
+
_this3.webex.request({
|
|
221
219
|
service: _constants.DSS_SERVICE_NAME,
|
|
222
220
|
resource: resource,
|
|
223
221
|
method: 'POST',
|
|
@@ -337,6 +335,47 @@ var DSS = _webexCore.WebexPlugin.extend({
|
|
|
337
335
|
return null;
|
|
338
336
|
});
|
|
339
337
|
},
|
|
338
|
+
/**
|
|
339
|
+
* Retrieves basic information about entities by phone numbers within an organization.
|
|
340
|
+
* Supports up to 5 phone numbers per request. For larger batches, client should chunk
|
|
341
|
+
* requests into groups of 5.
|
|
342
|
+
* @param {string[]} phoneNumbers - Array of phone numbers to lookup in E.164 format (max 5)
|
|
343
|
+
* @returns {Promise<RequestResult>} Resolves with object containing:
|
|
344
|
+
* - resultArray: Array of matched entities
|
|
345
|
+
* - foundArray: Array of phone numbers that were found
|
|
346
|
+
* - notFoundArray: Array of phone numbers that were not found
|
|
347
|
+
* @throws {Error} When more than 5 phone numbers provided
|
|
348
|
+
* @throws {DssTimeoutError} When server does not respond in the specified timeframe
|
|
349
|
+
* @example
|
|
350
|
+
* const result = await webex.internal.dss.lookupByPhoneNumbers(['+15551234567']);
|
|
351
|
+
* console.log('Found:', result.foundArray);
|
|
352
|
+
* console.log('Entities:', result.resultArray);
|
|
353
|
+
*/
|
|
354
|
+
lookupByPhoneNumbers: function lookupByPhoneNumbers(phoneNumbers) {
|
|
355
|
+
var _this4 = this;
|
|
356
|
+
if (!phoneNumbers || phoneNumbers.length === 0) {
|
|
357
|
+
return _promise.default.resolve({
|
|
358
|
+
resultArray: [],
|
|
359
|
+
foundArray: [],
|
|
360
|
+
notFoundArray: []
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
if (phoneNumbers.length > 5) {
|
|
364
|
+
this.logger.error("DSS->lookupByPhoneNumbers#ERROR, Maximum of 5 phone numbers allowed, received: ".concat(phoneNumbers.length));
|
|
365
|
+
return _promise.default.reject(new Error("lookupByPhoneNumbers accepts a maximum of 5 phone numbers. Received: ".concat(phoneNumbers.length, ". Please batch requests on the client side if needed.")));
|
|
366
|
+
}
|
|
367
|
+
var resource = "/lookup/orgid/".concat(this.webex.internal.device.orgId, "/phonenumbers");
|
|
368
|
+
return this._request({
|
|
369
|
+
dataPath: _constants.LOOKUP_DATA_PATH,
|
|
370
|
+
foundPath: _constants.LOOKUP_FOUND_PATH,
|
|
371
|
+
notFoundPath: _constants.LOOKUP_NOT_FOUND_PATH,
|
|
372
|
+
resource: resource,
|
|
373
|
+
params: (0, _defineProperty2.default)({}, _constants.LOOKUP_REQUEST_KEY, phoneNumbers)
|
|
374
|
+
}).catch(function (error) {
|
|
375
|
+
_this4.logger.error("DSS->lookupByPhoneNumbers#ERROR, Phone number lookup failure, ".concat(error.message));
|
|
376
|
+
return _promise.default.reject(error);
|
|
377
|
+
});
|
|
378
|
+
},
|
|
340
379
|
/**
|
|
341
380
|
* Search for information about entities
|
|
342
381
|
* @param {Object} options
|
|
@@ -397,7 +436,7 @@ var DSS = _webexCore.WebexPlugin.extend({
|
|
|
397
436
|
return _promise.default.reject(error);
|
|
398
437
|
});
|
|
399
438
|
},
|
|
400
|
-
version: "3.
|
|
439
|
+
version: "3.11.0-next.10"
|
|
401
440
|
});
|
|
402
441
|
var _default = exports.default = DSS;
|
|
403
442
|
//# sourceMappingURL=dss.js.map
|
package/dist/dss.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_lodash","_commonTimers","_constants","_dssBatcher","_dssErrors","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","DSS","WebexPlugin","extend","namespace","registered","initialize","_len","args","Array","_key","_apply","prototype","batchers","register","_this","webex","canAuthorize","logger","error","_promise","reject","Error","info","resolve","internal","mercury","connect","then","listenForEvents","trigger","DSS_REGISTERED","catch","concat","message","unregister","_this2","stopListeningForEvents","disconnect","DSS_UNREGISTERED","_this3","on","DSS_LOOKUP_MERCURY_EVENT","envelope","_handleEvent","data","DSS_SEARCH_MERCURY_EVENT","off","_getResultEventName","requestId","DSS_RESULT","DSS_LOOKUP_RESULT","_request","options","_this4","resource","params","dataPath","foundPath","notFoundPath","timeout","config","requestTimeout","uuid","v4","eventName","result","expectedSeqNums","notFoundArray","timer","Timer","stopListening","DssTimeoutError","listenTo","reset","resultData","get","found","sequence","finished","range","map","String","done","isEqual","_keys","cancel","resultArray","foundArray","index","seqResult","_toConsumableArray2","resolveValue","request","service","DSS_SERVICE_NAME","method","contentType","body","start","_batchedLookup","lookupValue","LOOKUP_DATA_PATH","entitiesFoundPath","LOOKUP_FOUND_PATH","entitiesNotFoundPath","LOOKUP_NOT_FOUND_PATH","requestKey","LOOKUP_REQUEST_KEY","DssBatcher","parent","lookupDetail","id","device","orgId","_ref","lookup","entityProviderType","_options$shouldBatch","shouldBatch","_ref2","lookupByEmail","email","_ref3","search","requestedTypes","resultSize","queryString","includeCommonAreaPhones","includeOnlyPairableDevices","includePersonalDevices","SEARCH_DATA_PATH","_ref4","searchPlaces","_this5","isOnlySchedulableRooms","version","_default","exports"],"sources":["dss.ts"],"sourcesContent":["/* eslint-disable no-underscore-dangle */\n/*!\n * Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.\n */\n/* eslint-disable no-underscore-dangle */\nimport uuid from 'uuid';\nimport {WebexPlugin} from '@webex/webex-core';\nimport '@webex/internal-plugin-mercury';\nimport {range, isEqual, get} from 'lodash';\n\nimport {Timer} from '@webex/common-timers';\nimport type {\n SearchOptions,\n LookupDetailOptions,\n LookupOptions,\n LookupByEmailOptions,\n SearchPlaceOptions,\n} from './types';\nimport {\n DSS_REGISTERED,\n DSS_UNREGISTERED,\n DSS_LOOKUP_MERCURY_EVENT,\n DSS_LOOKUP_RESULT,\n DSS_SERVICE_NAME,\n DSS_SEARCH_MERCURY_EVENT,\n DSS_RESULT,\n LOOKUP_DATA_PATH,\n LOOKUP_FOUND_PATH,\n LOOKUP_NOT_FOUND_PATH,\n LOOKUP_REQUEST_KEY,\n SEARCH_DATA_PATH,\n} from './constants';\nimport DssBatcher from './dss-batcher';\nimport {DssTimeoutError} from './dss-errors';\nimport {BatcherOptions, RequestOptions, RequestResult} from './types';\n\nconst DSS = WebexPlugin.extend({\n namespace: 'DSS',\n\n /**\n * registered value indicating events registration is successful\n * @instance\n * @type {Boolean}\n * @memberof DSS\n */\n registered: false,\n\n /**\n * Initializer\n * @private\n * @param {Object} attrs\n * @param {Object} options\n * @returns {undefined}\n */\n initialize(...args) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, args);\n this.batchers = {};\n },\n\n /**\n * Explicitly sets up the DSS plugin by connecting to mercury, and listening for DSS events.\n * @returns {Promise}\n * @public\n * @memberof DSS\n */\n register() {\n if (!this.webex.canAuthorize) {\n this.logger.error('DSS->register#ERROR, Unable to register, SDK cannot authorize');\n\n return Promise.reject(new Error('SDK cannot authorize'));\n }\n\n if (this.registered) {\n this.logger.info('dss->register#INFO, DSS plugin already registered');\n\n return Promise.resolve();\n }\n\n return this.webex.internal.mercury\n .connect()\n .then(() => {\n this.listenForEvents();\n this.trigger(DSS_REGISTERED);\n this.registered = true;\n })\n .catch((error) => {\n this.logger.error(`DSS->register#ERROR, Unable to register, ${error.message}`);\n\n return Promise.reject(error);\n });\n },\n\n /**\n * Explicitly tears down the DSS plugin by disconnecting from mercury, and stops listening to DSS events\n * @returns {Promise}\n * @public\n * @memberof DSS\n */\n unregister() {\n if (!this.registered) {\n this.logger.info('DSS->unregister#INFO, DSS plugin already unregistered');\n\n return Promise.resolve();\n }\n\n this.stopListeningForEvents();\n\n return this.webex.internal.mercury.disconnect().then(() => {\n this.trigger(DSS_UNREGISTERED);\n this.registered = false;\n });\n },\n\n /**\n * registers for DSS events through mercury\n * @returns {undefined}\n * @private\n */\n listenForEvents() {\n this.webex.internal.mercury.on(DSS_LOOKUP_MERCURY_EVENT, (envelope) => {\n this._handleEvent(envelope.data);\n });\n this.webex.internal.mercury.on(DSS_SEARCH_MERCURY_EVENT, (envelope) => {\n this._handleEvent(envelope.data);\n });\n },\n\n /**\n * unregisteres all the DSS events from mercury\n * @returns {undefined}\n * @private\n */\n stopListeningForEvents() {\n this.webex.internal.mercury.off(DSS_LOOKUP_MERCURY_EVENT);\n this.webex.internal.mercury.off(DSS_SEARCH_MERCURY_EVENT);\n },\n\n /**\n * constructs the event name based on request id\n * @param {UUID} requestId the id of the request\n * @returns {string}\n */\n _getResultEventName(requestId) {\n return `${DSS_RESULT}${requestId}`;\n },\n\n /**\n * Takes incoming data and triggers correct events\n * @param {Object} data the event data\n * @returns {undefined}\n */\n _handleEvent(data) {\n this.trigger(this._getResultEventName(data.requestId), data);\n this.trigger(DSS_LOOKUP_RESULT, data);\n },\n\n /**\n * Makes the request to the directory service\n * @param {Object} options\n * @param {string} options.resource the URL to query\n * @param {Mixed} options.params additional params for the body of the request\n * @param {string} options.dataPath the path to get the data in the result object\n * @param {string} [options.foundPath] the path to get the lookups of the found data\n * @param {string} [options.notFoundPath] the path to get the lookups of the not found data\n * @returns {Promise<Object>} result Resolves with an object\n * @returns {Array} result.resultArray an array of entities found\n * @returns {Array} result.foundArray an array of the lookups of the found entities (if foundPath provided)\n * @returns {Array} result.notFoundArray an array of the lookups of the not found entities (if notFoundPath provided)\n * @throws {DssTimeoutError} when server does not respond in the specified timeframe\n */\n _request(options: RequestOptions): Promise<RequestResult> {\n const {resource, params, dataPath, foundPath, notFoundPath} = options;\n\n const timeout = this.config.requestTimeout;\n const requestId = uuid.v4();\n const eventName = this._getResultEventName(requestId);\n const result = {};\n let expectedSeqNums: string[];\n let notFoundArray: unknown[];\n\n return new Promise((resolve, reject) => {\n const timer = new Timer(() => {\n this.stopListening(this, eventName);\n reject(new DssTimeoutError({requestId, timeout, resource, params}));\n }, timeout);\n\n this.listenTo(this, eventName, (data) => {\n timer.reset();\n const resultData = get(data, dataPath, []);\n let found;\n\n if (foundPath) {\n found = get(data, foundPath, []);\n }\n result[data.sequence] = foundPath ? {resultData, found} : {resultData};\n\n if (data.finished) {\n expectedSeqNums = range(data.sequence + 1).map(String);\n if (notFoundPath) {\n notFoundArray = get(data, notFoundPath, []);\n }\n }\n\n const done = isEqual(expectedSeqNums, Object.keys(result));\n\n if (done) {\n timer.cancel();\n\n const resultArray: any[] = [];\n const foundArray: any[] = [];\n\n expectedSeqNums.forEach((index) => {\n const seqResult = result[index];\n\n if (seqResult) {\n resultArray.push(...seqResult.resultData);\n if (foundPath) {\n foundArray.push(...seqResult.found);\n }\n }\n });\n const resolveValue: RequestResult = {\n resultArray,\n };\n\n if (foundPath) {\n resolveValue.foundArray = foundArray;\n }\n if (notFoundPath) {\n resolveValue.notFoundArray = notFoundArray;\n }\n resolve(resolveValue);\n this.stopListening(this, eventName);\n }\n });\n this.webex.request({\n service: DSS_SERVICE_NAME,\n resource,\n method: 'POST',\n contentType: 'application/json',\n body: {requestId, ...params},\n });\n timer.start();\n });\n },\n\n /**\n * Uses a batcher to make the request to the directory service\n * @param {Object} options\n * @param {string} options.resource the URL to query\n * @param {string} options.value the id or email to lookup\n * @returns {Promise} Resolves with an array of entities found\n * @throws {DssTimeoutError} when server does not respond in the specified timeframe\n */\n _batchedLookup(options: BatcherOptions) {\n const {resource, lookupValue} = options;\n const dataPath = LOOKUP_DATA_PATH;\n const entitiesFoundPath = LOOKUP_FOUND_PATH;\n const entitiesNotFoundPath = LOOKUP_NOT_FOUND_PATH;\n const requestKey = LOOKUP_REQUEST_KEY;\n\n this.batchers[resource] =\n this.batchers[resource] ||\n new DssBatcher({\n resource,\n dataPath,\n entitiesFoundPath,\n entitiesNotFoundPath,\n requestKey,\n parent: this,\n });\n\n return this.batchers[resource].request(lookupValue);\n },\n\n /**\n * Retrieves detailed information about an entity\n * @param {Object} options\n * @param {UUID} options.id the id of the entity to lookup\n * @returns {Promise} Resolves with the entity found or null if not found\n * @throws {DssTimeoutError} when server does not respond in the specified timeframe\n */\n lookupDetail(options: LookupDetailOptions) {\n const {id} = options;\n\n const resource = `/lookup/orgid/${this.webex.internal.device.orgId}/identity/${id}/detail`;\n\n return this._request({\n dataPath: LOOKUP_DATA_PATH,\n foundPath: LOOKUP_FOUND_PATH,\n resource,\n }).then(({resultArray, foundArray}) => {\n // TODO: find out what is actually returned!\n if (foundArray[0] === id) {\n return resultArray[0];\n }\n\n return null;\n });\n },\n\n /**\n * Retrieves basic information about an entity within an organization\n * @param {Object} options\n * @param {UUID} options.id the id of the entity to lookup\n * @param {UUID} [options.entityProviderType] the provider to query\n * @param {Boolean} options.shouldBatch whether to batch the query, set to false for single immediate result (defaults to true)\n * @returns {Promise} Resolves with the entity found or null if not found\n * @throws {DssTimeoutError} when server does not respond in the specified timeframe\n */\n lookup(options: LookupOptions) {\n const {id, entityProviderType, shouldBatch = true} = options;\n\n const resource = entityProviderType\n ? `/lookup/orgid/${this.webex.internal.device.orgId}/entityprovidertype/${entityProviderType}`\n : `/lookup/orgid/${this.webex.internal.device.orgId}/identities`;\n\n if (shouldBatch) {\n return this._batchedLookup({\n resource,\n lookupValue: id,\n });\n }\n\n return this._request({\n dataPath: LOOKUP_DATA_PATH,\n foundPath: LOOKUP_FOUND_PATH,\n resource,\n params: {\n [LOOKUP_REQUEST_KEY]: [id],\n },\n }).then(({resultArray, foundArray}) => {\n if (foundArray[0] === id) {\n return resultArray[0];\n }\n\n return null;\n });\n },\n\n /**\n * Retrieves basic information about an enitity within an organization\n * @param {Object} options\n * @param {UUID} options.email the email of the entity to lookup\n * @returns {Promise} Resolves with the entity found or rejects if not found\n * @throws {DssTimeoutError} when server does not respond in the specified timeframe\n */\n lookupByEmail(options: LookupByEmailOptions) {\n const {email} = options;\n const resource = `/lookup/orgid/${this.webex.internal.device.orgId}/emails`;\n\n return this._request({\n dataPath: LOOKUP_DATA_PATH,\n foundPath: LOOKUP_FOUND_PATH,\n resource,\n params: {\n [LOOKUP_REQUEST_KEY]: [email],\n },\n }).then(({resultArray, foundArray}) => {\n if (foundArray[0] === email) {\n return resultArray[0];\n }\n\n return null;\n });\n },\n\n /**\n * Search for information about entities\n * @param {Object} options\n * @param {SearchType[]} options.requestedTypes an array of search types from: PERSON, CALLING_SERVICE, EXTERNAL_CALLING, ROOM, ROBOT\n * @param {string[]} options.queryString A query string that will be transformed into a Directory search filter query. It is used to search the following fields: username, givenName, familyName, displayName and email\n * @param {number} options.resultSize The maximum number of results returned from each provider\n * @param {boolean} options.includePersonalDevices If true, includes personal devices associated with users in the search results.\n * @param {boolean} options.includeCommonAreaPhones If true, includes common area phones in the search results.\n * @param {boolean} options.includeOnlyPairableDevices If true, include the devices that are pairable in the search results.\n * @returns {Promise} Resolves with an array of entities found\n * @throws {DssTimeoutError} when server does not respond in the specified timeframe\n */\n search(options: SearchOptions) {\n const {\n requestedTypes,\n resultSize,\n queryString,\n includeCommonAreaPhones,\n includeOnlyPairableDevices,\n includePersonalDevices,\n } = options;\n\n return this._request({\n dataPath: SEARCH_DATA_PATH,\n resource: `/search/orgid/${this.webex.internal.device.orgId}/entities`,\n params: {\n queryString,\n resultSize,\n requestedTypes,\n includeCommonAreaPhones,\n includeOnlyPairableDevices,\n includePersonalDevices,\n },\n }).then(({resultArray}) => resultArray);\n },\n\n /**\n * Search for information about places\n * @param {Object} options\n * @param {string} options.queryString A query string that will be transformed into a Directory search filter query. It is used to search the following fields: placeName, displayName.\n * @param {number} options.resultSize The maximum number of results returned from each provider\n * @returns {Promise} Resolves with an array of entities found\n */\n searchPlaces(options: SearchPlaceOptions) {\n const {resultSize, queryString, isOnlySchedulableRooms} = options;\n\n return this._request({\n dataPath: 'directoryEntities',\n resource: `/search/orgid/${this.webex.internal.device.orgId}/places`,\n params: {\n queryString,\n resultSize,\n isOnlySchedulableRooms,\n },\n }).catch((error) => {\n this.logger.error(`DSS->search place#ERROR, search place failure, ${error.message}`);\n\n return Promise.reject(error);\n });\n },\n});\n\nexport default DSS;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_lodash","_commonTimers","_constants","_dssBatcher","_dssErrors","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","DSS","WebexPlugin","extend","namespace","registered","initialize","_len","args","Array","_key","_apply","prototype","batchers","register","_this","webex","canAuthorize","logger","error","_promise","reject","Error","info","resolve","internal","mercury","connect","then","listenForEvents","trigger","DSS_REGISTERED","catch","concat","message","unregister","stopListeningForEvents","DSS_UNREGISTERED","_this2","on","DSS_LOOKUP_MERCURY_EVENT","envelope","_handleEvent","data","DSS_SEARCH_MERCURY_EVENT","off","_getResultEventName","requestId","DSS_RESULT","DSS_LOOKUP_RESULT","_request","options","_this3","resource","params","dataPath","foundPath","notFoundPath","timeout","config","requestTimeout","uuid","v4","eventName","result","expectedSeqNums","notFoundArray","timer","Timer","stopListening","DssTimeoutError","listenTo","reset","resultData","get","found","sequence","finished","range","map","String","done","isEqual","_keys","cancel","resultArray","foundArray","index","seqResult","_toConsumableArray2","resolveValue","request","service","DSS_SERVICE_NAME","method","contentType","body","start","_batchedLookup","lookupValue","LOOKUP_DATA_PATH","entitiesFoundPath","LOOKUP_FOUND_PATH","entitiesNotFoundPath","LOOKUP_NOT_FOUND_PATH","requestKey","LOOKUP_REQUEST_KEY","DssBatcher","parent","lookupDetail","id","device","orgId","_ref","lookup","entityProviderType","_options$shouldBatch","shouldBatch","_ref2","lookupByEmail","email","_ref3","lookupByPhoneNumbers","phoneNumbers","_this4","search","requestedTypes","resultSize","queryString","includeCommonAreaPhones","includeOnlyPairableDevices","includePersonalDevices","SEARCH_DATA_PATH","_ref4","searchPlaces","_this5","isOnlySchedulableRooms","version","_default","exports"],"sources":["dss.ts"],"sourcesContent":["/* eslint-disable no-underscore-dangle */\n/*!\n * Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.\n */\n/* eslint-disable no-underscore-dangle */\nimport uuid from 'uuid';\nimport {WebexPlugin} from '@webex/webex-core';\nimport '@webex/internal-plugin-mercury';\nimport {range, isEqual, get} from 'lodash';\n\nimport {Timer} from '@webex/common-timers';\nimport type {\n SearchOptions,\n LookupDetailOptions,\n LookupOptions,\n LookupByEmailOptions,\n SearchPlaceOptions,\n} from './types';\nimport {\n DSS_REGISTERED,\n DSS_UNREGISTERED,\n DSS_LOOKUP_MERCURY_EVENT,\n DSS_LOOKUP_RESULT,\n DSS_SERVICE_NAME,\n DSS_SEARCH_MERCURY_EVENT,\n DSS_RESULT,\n LOOKUP_DATA_PATH,\n LOOKUP_FOUND_PATH,\n LOOKUP_NOT_FOUND_PATH,\n LOOKUP_REQUEST_KEY,\n SEARCH_DATA_PATH,\n} from './constants';\nimport DssBatcher from './dss-batcher';\nimport {DssTimeoutError} from './dss-errors';\nimport {BatcherOptions, RequestOptions, RequestResult} from './types';\n\nconst DSS = WebexPlugin.extend({\n namespace: 'DSS',\n\n /**\n * registered value indicating events registration is successful\n * @instance\n * @type {Boolean}\n * @memberof DSS\n */\n registered: false,\n\n /**\n * Initializer\n * @private\n * @param {Object} attrs\n * @param {Object} options\n * @returns {undefined}\n */\n initialize(...args) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, args);\n this.batchers = {};\n },\n\n /**\n * Explicitly sets up the DSS plugin by connecting to mercury, and listening for DSS events.\n * @returns {Promise}\n * @public\n * @memberof DSS\n */\n register() {\n if (!this.webex.canAuthorize) {\n this.logger.error('DSS->register#ERROR, Unable to register, SDK cannot authorize');\n\n return Promise.reject(new Error('SDK cannot authorize'));\n }\n\n if (this.registered) {\n this.logger.info('dss->register#INFO, DSS plugin already registered');\n\n return Promise.resolve();\n }\n\n return this.webex.internal.mercury\n .connect()\n .then(() => {\n this.listenForEvents();\n this.trigger(DSS_REGISTERED);\n this.registered = true;\n })\n .catch((error) => {\n this.logger.error(`DSS->register#ERROR, Unable to register, ${error.message}`);\n\n return Promise.reject(error);\n });\n },\n\n /**\n * Explicitly tears down the DSS plugin by disconnecting from mercury, and stops listening to DSS events\n * @returns {Promise}\n * @public\n * @memberof DSS\n */\n unregister() {\n if (!this.registered) {\n this.logger.info('DSS->unregister#INFO, DSS plugin already unregistered');\n\n return Promise.resolve();\n }\n\n this.stopListeningForEvents();\n\n this.trigger(DSS_UNREGISTERED);\n this.registered = false;\n\n return Promise.resolve();\n },\n\n /**\n * registers for DSS events through mercury\n * @returns {undefined}\n * @private\n */\n listenForEvents() {\n this.webex.internal.mercury.on(DSS_LOOKUP_MERCURY_EVENT, (envelope) => {\n this._handleEvent(envelope.data);\n });\n this.webex.internal.mercury.on(DSS_SEARCH_MERCURY_EVENT, (envelope) => {\n this._handleEvent(envelope.data);\n });\n },\n\n /**\n * unregisteres all the DSS events from mercury\n * @returns {undefined}\n * @private\n */\n stopListeningForEvents() {\n this.webex.internal.mercury.off(DSS_LOOKUP_MERCURY_EVENT);\n this.webex.internal.mercury.off(DSS_SEARCH_MERCURY_EVENT);\n },\n\n /**\n * constructs the event name based on request id\n * @param {UUID} requestId the id of the request\n * @returns {string}\n */\n _getResultEventName(requestId) {\n return `${DSS_RESULT}${requestId}`;\n },\n\n /**\n * Takes incoming data and triggers correct events\n * @param {Object} data the event data\n * @returns {undefined}\n */\n _handleEvent(data) {\n this.trigger(this._getResultEventName(data.requestId), data);\n this.trigger(DSS_LOOKUP_RESULT, data);\n },\n\n /**\n * Makes the request to the directory service\n * @param {Object} options\n * @param {string} options.resource the URL to query\n * @param {Mixed} options.params additional params for the body of the request\n * @param {string} options.dataPath the path to get the data in the result object\n * @param {string} [options.foundPath] the path to get the lookups of the found data\n * @param {string} [options.notFoundPath] the path to get the lookups of the not found data\n * @returns {Promise<Object>} result Resolves with an object\n * @returns {Array} result.resultArray an array of entities found\n * @returns {Array} result.foundArray an array of the lookups of the found entities (if foundPath provided)\n * @returns {Array} result.notFoundArray an array of the lookups of the not found entities (if notFoundPath provided)\n * @throws {DssTimeoutError} when server does not respond in the specified timeframe\n */\n _request(options: RequestOptions): Promise<RequestResult> {\n const {resource, params, dataPath, foundPath, notFoundPath} = options;\n\n const timeout = this.config.requestTimeout;\n const requestId = uuid.v4();\n const eventName = this._getResultEventName(requestId);\n const result = {};\n let expectedSeqNums: string[];\n let notFoundArray: unknown[];\n\n return new Promise((resolve, reject) => {\n const timer = new Timer(() => {\n this.stopListening(this, eventName);\n reject(new DssTimeoutError({requestId, timeout, resource, params}));\n }, timeout);\n\n this.listenTo(this, eventName, (data) => {\n timer.reset();\n const resultData = get(data, dataPath, []);\n let found;\n\n if (foundPath) {\n found = get(data, foundPath, []);\n }\n result[data.sequence] = foundPath ? {resultData, found} : {resultData};\n\n if (data.finished) {\n expectedSeqNums = range(data.sequence + 1).map(String);\n if (notFoundPath) {\n notFoundArray = get(data, notFoundPath, []);\n }\n }\n\n const done = isEqual(expectedSeqNums, Object.keys(result));\n\n if (done) {\n timer.cancel();\n\n const resultArray: any[] = [];\n const foundArray: any[] = [];\n\n expectedSeqNums.forEach((index) => {\n const seqResult = result[index];\n\n if (seqResult) {\n resultArray.push(...seqResult.resultData);\n if (foundPath) {\n foundArray.push(...seqResult.found);\n }\n }\n });\n const resolveValue: RequestResult = {\n resultArray,\n };\n\n if (foundPath) {\n resolveValue.foundArray = foundArray;\n }\n if (notFoundPath) {\n resolveValue.notFoundArray = notFoundArray;\n }\n resolve(resolveValue);\n this.stopListening(this, eventName);\n }\n });\n this.webex.request({\n service: DSS_SERVICE_NAME,\n resource,\n method: 'POST',\n contentType: 'application/json',\n body: {requestId, ...params},\n });\n timer.start();\n });\n },\n\n /**\n * Uses a batcher to make the request to the directory service\n * @param {Object} options\n * @param {string} options.resource the URL to query\n * @param {string} options.value the id or email to lookup\n * @returns {Promise} Resolves with an array of entities found\n * @throws {DssTimeoutError} when server does not respond in the specified timeframe\n */\n _batchedLookup(options: BatcherOptions) {\n const {resource, lookupValue} = options;\n const dataPath = LOOKUP_DATA_PATH;\n const entitiesFoundPath = LOOKUP_FOUND_PATH;\n const entitiesNotFoundPath = LOOKUP_NOT_FOUND_PATH;\n const requestKey = LOOKUP_REQUEST_KEY;\n\n this.batchers[resource] =\n this.batchers[resource] ||\n new DssBatcher({\n resource,\n dataPath,\n entitiesFoundPath,\n entitiesNotFoundPath,\n requestKey,\n parent: this,\n });\n\n return this.batchers[resource].request(lookupValue);\n },\n\n /**\n * Retrieves detailed information about an entity\n * @param {Object} options\n * @param {UUID} options.id the id of the entity to lookup\n * @returns {Promise} Resolves with the entity found or null if not found\n * @throws {DssTimeoutError} when server does not respond in the specified timeframe\n */\n lookupDetail(options: LookupDetailOptions) {\n const {id} = options;\n\n const resource = `/lookup/orgid/${this.webex.internal.device.orgId}/identity/${id}/detail`;\n\n return this._request({\n dataPath: LOOKUP_DATA_PATH,\n foundPath: LOOKUP_FOUND_PATH,\n resource,\n }).then(({resultArray, foundArray}) => {\n // TODO: find out what is actually returned!\n if (foundArray[0] === id) {\n return resultArray[0];\n }\n\n return null;\n });\n },\n\n /**\n * Retrieves basic information about an entity within an organization\n * @param {Object} options\n * @param {UUID} options.id the id of the entity to lookup\n * @param {UUID} [options.entityProviderType] the provider to query\n * @param {Boolean} options.shouldBatch whether to batch the query, set to false for single immediate result (defaults to true)\n * @returns {Promise} Resolves with the entity found or null if not found\n * @throws {DssTimeoutError} when server does not respond in the specified timeframe\n */\n lookup(options: LookupOptions) {\n const {id, entityProviderType, shouldBatch = true} = options;\n\n const resource = entityProviderType\n ? `/lookup/orgid/${this.webex.internal.device.orgId}/entityprovidertype/${entityProviderType}`\n : `/lookup/orgid/${this.webex.internal.device.orgId}/identities`;\n\n if (shouldBatch) {\n return this._batchedLookup({\n resource,\n lookupValue: id,\n });\n }\n\n return this._request({\n dataPath: LOOKUP_DATA_PATH,\n foundPath: LOOKUP_FOUND_PATH,\n resource,\n params: {\n [LOOKUP_REQUEST_KEY]: [id],\n },\n }).then(({resultArray, foundArray}) => {\n if (foundArray[0] === id) {\n return resultArray[0];\n }\n\n return null;\n });\n },\n\n /**\n * Retrieves basic information about an enitity within an organization\n * @param {Object} options\n * @param {UUID} options.email the email of the entity to lookup\n * @returns {Promise} Resolves with the entity found or rejects if not found\n * @throws {DssTimeoutError} when server does not respond in the specified timeframe\n */\n lookupByEmail(options: LookupByEmailOptions) {\n const {email} = options;\n const resource = `/lookup/orgid/${this.webex.internal.device.orgId}/emails`;\n\n return this._request({\n dataPath: LOOKUP_DATA_PATH,\n foundPath: LOOKUP_FOUND_PATH,\n resource,\n params: {\n [LOOKUP_REQUEST_KEY]: [email],\n },\n }).then(({resultArray, foundArray}) => {\n if (foundArray[0] === email) {\n return resultArray[0];\n }\n\n return null;\n });\n },\n\n /**\n * Retrieves basic information about entities by phone numbers within an organization.\n * Supports up to 5 phone numbers per request. For larger batches, client should chunk\n * requests into groups of 5.\n * @param {string[]} phoneNumbers - Array of phone numbers to lookup in E.164 format (max 5)\n * @returns {Promise<RequestResult>} Resolves with object containing:\n * - resultArray: Array of matched entities\n * - foundArray: Array of phone numbers that were found\n * - notFoundArray: Array of phone numbers that were not found\n * @throws {Error} When more than 5 phone numbers provided\n * @throws {DssTimeoutError} When server does not respond in the specified timeframe\n * @example\n * const result = await webex.internal.dss.lookupByPhoneNumbers(['+15551234567']);\n * console.log('Found:', result.foundArray);\n * console.log('Entities:', result.resultArray);\n */\n lookupByPhoneNumbers(phoneNumbers: string[]): Promise<RequestResult> {\n if (!phoneNumbers || phoneNumbers.length === 0) {\n return Promise.resolve({resultArray: [], foundArray: [], notFoundArray: []});\n }\n\n if (phoneNumbers.length > 5) {\n this.logger.error(\n `DSS->lookupByPhoneNumbers#ERROR, Maximum of 5 phone numbers allowed, received: ${phoneNumbers.length}`\n );\n\n return Promise.reject(\n new Error(\n `lookupByPhoneNumbers accepts a maximum of 5 phone numbers. Received: ${phoneNumbers.length}. Please batch requests on the client side if needed.`\n )\n );\n }\n\n const resource = `/lookup/orgid/${this.webex.internal.device.orgId}/phonenumbers`;\n\n return this._request({\n dataPath: LOOKUP_DATA_PATH,\n foundPath: LOOKUP_FOUND_PATH,\n notFoundPath: LOOKUP_NOT_FOUND_PATH,\n resource,\n params: {\n [LOOKUP_REQUEST_KEY]: phoneNumbers,\n },\n }).catch((error) => {\n this.logger.error(\n `DSS->lookupByPhoneNumbers#ERROR, Phone number lookup failure, ${error.message}`\n );\n\n return Promise.reject(error);\n });\n },\n\n /**\n * Search for information about entities\n * @param {Object} options\n * @param {SearchType[]} options.requestedTypes an array of search types from: PERSON, CALLING_SERVICE, EXTERNAL_CALLING, ROOM, ROBOT\n * @param {string[]} options.queryString A query string that will be transformed into a Directory search filter query. It is used to search the following fields: username, givenName, familyName, displayName and email\n * @param {number} options.resultSize The maximum number of results returned from each provider\n * @param {boolean} options.includePersonalDevices If true, includes personal devices associated with users in the search results.\n * @param {boolean} options.includeCommonAreaPhones If true, includes common area phones in the search results.\n * @param {boolean} options.includeOnlyPairableDevices If true, include the devices that are pairable in the search results.\n * @returns {Promise} Resolves with an array of entities found\n * @throws {DssTimeoutError} when server does not respond in the specified timeframe\n */\n search(options: SearchOptions) {\n const {\n requestedTypes,\n resultSize,\n queryString,\n includeCommonAreaPhones,\n includeOnlyPairableDevices,\n includePersonalDevices,\n } = options;\n\n return this._request({\n dataPath: SEARCH_DATA_PATH,\n resource: `/search/orgid/${this.webex.internal.device.orgId}/entities`,\n params: {\n queryString,\n resultSize,\n requestedTypes,\n includeCommonAreaPhones,\n includeOnlyPairableDevices,\n includePersonalDevices,\n },\n }).then(({resultArray}) => resultArray);\n },\n\n /**\n * Search for information about places\n * @param {Object} options\n * @param {string} options.queryString A query string that will be transformed into a Directory search filter query. It is used to search the following fields: placeName, displayName.\n * @param {number} options.resultSize The maximum number of results returned from each provider\n * @returns {Promise} Resolves with an array of entities found\n */\n searchPlaces(options: SearchPlaceOptions) {\n const {resultSize, queryString, isOnlySchedulableRooms} = options;\n\n return this._request({\n dataPath: 'directoryEntities',\n resource: `/search/orgid/${this.webex.internal.device.orgId}/places`,\n params: {\n queryString,\n resultSize,\n isOnlySchedulableRooms,\n },\n }).catch((error) => {\n this.logger.error(`DSS->search place#ERROR, search place failure, ${error.message}`);\n\n return Promise.reject(error);\n });\n },\n});\n\nexport default DSS;\n"],"mappings":"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","ignoreList":[]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_webexCore","require","_dss","_interopRequireDefault","_config","registerInternalPlugin","DSS","config"],"sources":["index.ts"],"sourcesContent":["import {registerInternalPlugin} from '@webex/webex-core';\n\nimport DSS from './dss';\nimport config from './config';\n\nregisterInternalPlugin('dss', DSS, {config});\n\nexport {default} from './dss';\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAEA,IAAAC,IAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAD,sBAAA,CAAAF,OAAA;AAEA,IAAAI,iCAAsB,EAAC,KAAK,EAAEC,YAAG,EAAE;EAACC,MAAM,EAANA;AAAM,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_dss","_interopRequireDefault","_config","registerInternalPlugin","DSS","config"],"sources":["index.ts"],"sourcesContent":["import {registerInternalPlugin} from '@webex/webex-core';\n\nimport DSS from './dss';\nimport config from './config';\n\nregisterInternalPlugin('dss', DSS, {config});\n\nexport {default} from './dss';\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAEA,IAAAC,IAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAD,sBAAA,CAAAF,OAAA;AAEA,IAAAI,iCAAsB,EAAC,KAAK,EAAEC,YAAG,EAAE;EAACC,MAAM,EAANA;AAAM,CAAC,CAAC","ignoreList":[]}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EntityProviderType","exports","SearchType"],"sources":["types.ts"],"sourcesContent":["export interface RequestOptions {\n resource: string;\n dataPath: string;\n foundPath?: string;\n notFoundPath?: string;\n params?: Record<string, unknown>;\n}\n\nexport interface RequestResult {\n foundArray?: any[];\n notFoundArray?: any[];\n resultArray: any[];\n}\n\nexport interface LookupDetailOptions {\n id: string;\n}\n\nexport enum EntityProviderType {\n CI_USER = 'CI_USER',\n CI_MACHINE = 'CI_MACHINE',\n CONTACTS = 'CONTACTS',\n CSDM = 'CSDM',\n}\n\nexport interface LookupOptions {\n id: string;\n entityProviderType?: EntityProviderType;\n shouldBatch?: boolean;\n}\n\nexport interface LookupByEmailOptions {\n email: string;\n}\n\n// eslint-disable-next-line no-shadow\nexport enum SearchType {\n PERSON = 'PERSON',\n CALLING_SERVICE = 'CALLING_SERVICE',\n EXTERNAL_CALLING = 'EXTERNAL_CALLING',\n ROOM = 'ROOM',\n ROBOT = 'ROBOT',\n}\n\nexport interface SearchOptions {\n requestedTypes: SearchType[];\n resultSize: number;\n queryString: string;\n includePersonalDevices?: boolean;\n includeCommonAreaPhones?: boolean;\n includeOnlyPairableDevices?: boolean;\n}\n\nexport interface BatcherOptions {\n resource: string;\n lookupValue: string;\n}\n\nexport interface SearchPlaceOptions {\n resultSize: number;\n queryString: string;\n isOnlySchedulableRooms: boolean;\n}\n"],"mappings":";;;;;;;IAkBYA,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA;AAiB9B;AAAA,IACYE,UAAU,GAAAD,OAAA,CAAAC,UAAA,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA"}
|
|
1
|
+
{"version":3,"names":["EntityProviderType","exports","SearchType"],"sources":["types.ts"],"sourcesContent":["export interface RequestOptions {\n resource: string;\n dataPath: string;\n foundPath?: string;\n notFoundPath?: string;\n params?: Record<string, unknown>;\n}\n\nexport interface RequestResult {\n foundArray?: any[];\n notFoundArray?: any[];\n resultArray: any[];\n}\n\nexport interface LookupDetailOptions {\n id: string;\n}\n\nexport enum EntityProviderType {\n CI_USER = 'CI_USER',\n CI_MACHINE = 'CI_MACHINE',\n CONTACTS = 'CONTACTS',\n CSDM = 'CSDM',\n}\n\nexport interface LookupOptions {\n id: string;\n entityProviderType?: EntityProviderType;\n shouldBatch?: boolean;\n}\n\nexport interface LookupByEmailOptions {\n email: string;\n}\n\n// eslint-disable-next-line no-shadow\nexport enum SearchType {\n PERSON = 'PERSON',\n CALLING_SERVICE = 'CALLING_SERVICE',\n EXTERNAL_CALLING = 'EXTERNAL_CALLING',\n ROOM = 'ROOM',\n ROBOT = 'ROBOT',\n}\n\nexport interface SearchOptions {\n requestedTypes: SearchType[];\n resultSize: number;\n queryString: string;\n includePersonalDevices?: boolean;\n includeCommonAreaPhones?: boolean;\n includeOnlyPairableDevices?: boolean;\n}\n\nexport interface BatcherOptions {\n resource: string;\n lookupValue: string;\n}\n\nexport interface SearchPlaceOptions {\n resultSize: number;\n queryString: string;\n isOnlySchedulableRooms: boolean;\n}\n"],"mappings":";;;;;;;IAkBYA,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA;AAiB9B;AAAA,IACYE,UAAU,GAAAD,OAAA,CAAAC,UAAA,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -20,10 +20,10 @@
|
|
|
20
20
|
]
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@webex/common": "3.
|
|
24
|
-
"@webex/common-timers": "3.
|
|
25
|
-
"@webex/internal-plugin-mercury": "3.
|
|
26
|
-
"@webex/webex-core": "3.
|
|
23
|
+
"@webex/common": "3.11.0-next.1",
|
|
24
|
+
"@webex/common-timers": "3.11.0-next.1",
|
|
25
|
+
"@webex/internal-plugin-mercury": "3.11.0-next.9",
|
|
26
|
+
"@webex/webex-core": "3.11.0-next.7",
|
|
27
27
|
"lodash": "^4.17.21",
|
|
28
28
|
"uuid": "^3.3.2"
|
|
29
29
|
},
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
34
34
|
"@webex/jest-config-legacy": "0.0.0",
|
|
35
35
|
"@webex/legacy-tools": "0.0.0",
|
|
36
|
-
"@webex/test-helper-chai": "3.
|
|
37
|
-
"@webex/test-helper-mock-webex": "3.
|
|
38
|
-
"@webex/test-helper-test-users": "3.
|
|
36
|
+
"@webex/test-helper-chai": "3.11.0-next.1",
|
|
37
|
+
"@webex/test-helper-mock-webex": "3.11.0-next.1",
|
|
38
|
+
"@webex/test-helper-test-users": "3.11.0-next.1",
|
|
39
39
|
"eslint": "^8.24.0",
|
|
40
40
|
"prettier": "^2.7.1",
|
|
41
41
|
"sinon": "^9.2.4"
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"test:style": "eslint ./src/**/*.*",
|
|
50
50
|
"test:unit": "webex-legacy-tools test --unit --runner jest"
|
|
51
51
|
},
|
|
52
|
-
"version": "3.
|
|
52
|
+
"version": "3.11.0-next.10"
|
|
53
53
|
}
|
package/src/dss.ts
CHANGED
|
@@ -105,10 +105,10 @@ const DSS = WebexPlugin.extend({
|
|
|
105
105
|
|
|
106
106
|
this.stopListeningForEvents();
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
108
|
+
this.trigger(DSS_UNREGISTERED);
|
|
109
|
+
this.registered = false;
|
|
110
|
+
|
|
111
|
+
return Promise.resolve();
|
|
112
112
|
},
|
|
113
113
|
|
|
114
114
|
/**
|
|
@@ -365,6 +365,58 @@ const DSS = WebexPlugin.extend({
|
|
|
365
365
|
});
|
|
366
366
|
},
|
|
367
367
|
|
|
368
|
+
/**
|
|
369
|
+
* Retrieves basic information about entities by phone numbers within an organization.
|
|
370
|
+
* Supports up to 5 phone numbers per request. For larger batches, client should chunk
|
|
371
|
+
* requests into groups of 5.
|
|
372
|
+
* @param {string[]} phoneNumbers - Array of phone numbers to lookup in E.164 format (max 5)
|
|
373
|
+
* @returns {Promise<RequestResult>} Resolves with object containing:
|
|
374
|
+
* - resultArray: Array of matched entities
|
|
375
|
+
* - foundArray: Array of phone numbers that were found
|
|
376
|
+
* - notFoundArray: Array of phone numbers that were not found
|
|
377
|
+
* @throws {Error} When more than 5 phone numbers provided
|
|
378
|
+
* @throws {DssTimeoutError} When server does not respond in the specified timeframe
|
|
379
|
+
* @example
|
|
380
|
+
* const result = await webex.internal.dss.lookupByPhoneNumbers(['+15551234567']);
|
|
381
|
+
* console.log('Found:', result.foundArray);
|
|
382
|
+
* console.log('Entities:', result.resultArray);
|
|
383
|
+
*/
|
|
384
|
+
lookupByPhoneNumbers(phoneNumbers: string[]): Promise<RequestResult> {
|
|
385
|
+
if (!phoneNumbers || phoneNumbers.length === 0) {
|
|
386
|
+
return Promise.resolve({resultArray: [], foundArray: [], notFoundArray: []});
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
if (phoneNumbers.length > 5) {
|
|
390
|
+
this.logger.error(
|
|
391
|
+
`DSS->lookupByPhoneNumbers#ERROR, Maximum of 5 phone numbers allowed, received: ${phoneNumbers.length}`
|
|
392
|
+
);
|
|
393
|
+
|
|
394
|
+
return Promise.reject(
|
|
395
|
+
new Error(
|
|
396
|
+
`lookupByPhoneNumbers accepts a maximum of 5 phone numbers. Received: ${phoneNumbers.length}. Please batch requests on the client side if needed.`
|
|
397
|
+
)
|
|
398
|
+
);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
const resource = `/lookup/orgid/${this.webex.internal.device.orgId}/phonenumbers`;
|
|
402
|
+
|
|
403
|
+
return this._request({
|
|
404
|
+
dataPath: LOOKUP_DATA_PATH,
|
|
405
|
+
foundPath: LOOKUP_FOUND_PATH,
|
|
406
|
+
notFoundPath: LOOKUP_NOT_FOUND_PATH,
|
|
407
|
+
resource,
|
|
408
|
+
params: {
|
|
409
|
+
[LOOKUP_REQUEST_KEY]: phoneNumbers,
|
|
410
|
+
},
|
|
411
|
+
}).catch((error) => {
|
|
412
|
+
this.logger.error(
|
|
413
|
+
`DSS->lookupByPhoneNumbers#ERROR, Phone number lookup failure, ${error.message}`
|
|
414
|
+
);
|
|
415
|
+
|
|
416
|
+
return Promise.reject(error);
|
|
417
|
+
});
|
|
418
|
+
},
|
|
419
|
+
|
|
368
420
|
/**
|
|
369
421
|
* Search for information about entities
|
|
370
422
|
* @param {Object} options
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
import {assert} from '@webex/test-helper-chai';
|
|
5
|
+
import sinon from 'sinon';
|
|
6
|
+
import MockWebex from '@webex/test-helper-mock-webex';
|
|
7
|
+
import DSS from '@webex/internal-plugin-dss';
|
|
8
|
+
|
|
9
|
+
describe('plugin-dss (browser)', function () {
|
|
10
|
+
this.timeout(10000);
|
|
11
|
+
|
|
12
|
+
let webex;
|
|
13
|
+
let mercury;
|
|
14
|
+
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
mercury = {
|
|
17
|
+
connect: sinon.stub().resolves(),
|
|
18
|
+
disconnect: sinon.stub().resolves(),
|
|
19
|
+
on: sinon.stub(),
|
|
20
|
+
off: sinon.stub(),
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
webex = MockWebex({
|
|
24
|
+
canAuthorize: true,
|
|
25
|
+
children: {
|
|
26
|
+
dss: DSS,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
webex.config.dss = {};
|
|
30
|
+
webex.internal.mercury = mercury;
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
afterEach(() => {
|
|
34
|
+
sinon.restore();
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('registers with mercury and emits DSS_REGISTERED', async () => {
|
|
38
|
+
const triggerSpy = sinon.spy(webex.internal.dss, 'trigger');
|
|
39
|
+
|
|
40
|
+
await webex.internal.dss.register();
|
|
41
|
+
|
|
42
|
+
sinon.assert.calledOnce(mercury.connect);
|
|
43
|
+
sinon.assert.calledWith(
|
|
44
|
+
mercury.on.firstCall,
|
|
45
|
+
'event:directory.lookup',
|
|
46
|
+
sinon.match.func
|
|
47
|
+
);
|
|
48
|
+
sinon.assert.calledWith(
|
|
49
|
+
mercury.on.secondCall,
|
|
50
|
+
'event:directory.search',
|
|
51
|
+
sinon.match.func
|
|
52
|
+
);
|
|
53
|
+
assert.isTrue(webex.internal.dss.registered);
|
|
54
|
+
sinon.assert.calledWith(triggerSpy, 'dss:registered');
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('unregisters from mercury and emits DSS_UNREGISTERED', async () => {
|
|
58
|
+
await webex.internal.dss.register();
|
|
59
|
+
const triggerSpy = sinon.spy(webex.internal.dss, 'trigger');
|
|
60
|
+
|
|
61
|
+
await webex.internal.dss.unregister();
|
|
62
|
+
|
|
63
|
+
sinon.assert.calledOnce(mercury.disconnect);
|
|
64
|
+
sinon.assert.calledWith(mercury.off.firstCall, 'event:directory.lookup');
|
|
65
|
+
sinon.assert.calledWith(mercury.off.secondCall, 'event:directory.search');
|
|
66
|
+
assert.isFalse(webex.internal.dss.registered);
|
|
67
|
+
sinon.assert.calledWith(triggerSpy, 'dss:unregistered');
|
|
68
|
+
});
|
|
69
|
+
});
|
package/test/unit/spec/dss.ts
CHANGED
|
@@ -759,6 +759,268 @@ describe('plugin-dss', () => {
|
|
|
759
759
|
});
|
|
760
760
|
});
|
|
761
761
|
|
|
762
|
+
describe('#lookupByPhoneNumbers', () => {
|
|
763
|
+
// Test data constants
|
|
764
|
+
const PHONE_1 = '+15551234567';
|
|
765
|
+
const PHONE_2 = '+442012345678';
|
|
766
|
+
const PHONE_3 = '+33123456789';
|
|
767
|
+
const PHONE_BATCH = [
|
|
768
|
+
'+15551111111',
|
|
769
|
+
'+15552222222',
|
|
770
|
+
'+15553333333',
|
|
771
|
+
'+15554444444',
|
|
772
|
+
'+15555555555',
|
|
773
|
+
];
|
|
774
|
+
|
|
775
|
+
const ENTITY_1 = {id: 'user1', displayName: 'John Doe', phoneNumbers: [PHONE_1]};
|
|
776
|
+
const ENTITY_2 = {id: 'user2', displayName: 'Jane Smith', phoneNumbers: [PHONE_2]};
|
|
777
|
+
const ENTITY_3 = {id: 'user3', phoneNumbers: [PHONE_3]};
|
|
778
|
+
|
|
779
|
+
const EMPTY_RESULT = {
|
|
780
|
+
resultArray: [],
|
|
781
|
+
foundArray: [],
|
|
782
|
+
notFoundArray: [],
|
|
783
|
+
};
|
|
784
|
+
|
|
785
|
+
it('returns empty arrays for empty input', async () => {
|
|
786
|
+
const result = await webex.internal.dss.lookupByPhoneNumbers([]);
|
|
787
|
+
|
|
788
|
+
expect(result).to.deep.equal(EMPTY_RESULT);
|
|
789
|
+
});
|
|
790
|
+
|
|
791
|
+
it('rejects when more than 5 phone numbers provided', async () => {
|
|
792
|
+
const phoneNumbers = [...PHONE_BATCH, '+15556666666'];
|
|
793
|
+
|
|
794
|
+
return assert.isRejected(
|
|
795
|
+
webex.internal.dss.lookupByPhoneNumbers(phoneNumbers),
|
|
796
|
+
Error,
|
|
797
|
+
'lookupByPhoneNumbers accepts a maximum of 5 phone numbers. Received: 6. Please batch requests on the client side if needed.'
|
|
798
|
+
);
|
|
799
|
+
});
|
|
800
|
+
|
|
801
|
+
it('works correctly with single phone number found', async () => {
|
|
802
|
+
const {requestId, promise} = await testMakeRequest({
|
|
803
|
+
method: 'lookupByPhoneNumbers',
|
|
804
|
+
resource: '/lookup/orgid/userOrgId/phonenumbers',
|
|
805
|
+
params: [PHONE_1],
|
|
806
|
+
bodyParams: {lookupValues: [PHONE_1]},
|
|
807
|
+
});
|
|
808
|
+
|
|
809
|
+
mercuryCallbacks['event:directory.lookup'](
|
|
810
|
+
createData(requestId, 0, true, 'lookupResult', {
|
|
811
|
+
entities: [ENTITY_1],
|
|
812
|
+
entitiesFound: [PHONE_1],
|
|
813
|
+
entitiesNotFound: [],
|
|
814
|
+
})
|
|
815
|
+
);
|
|
816
|
+
const result = await promise;
|
|
817
|
+
|
|
818
|
+
expect(result).to.deep.equal({
|
|
819
|
+
resultArray: [ENTITY_1],
|
|
820
|
+
foundArray: [PHONE_1],
|
|
821
|
+
notFoundArray: [],
|
|
822
|
+
});
|
|
823
|
+
});
|
|
824
|
+
|
|
825
|
+
it('works correctly with multiple phone numbers, some found', async () => {
|
|
826
|
+
const phoneNumbers = [PHONE_1, PHONE_2, PHONE_3];
|
|
827
|
+
|
|
828
|
+
const {requestId, promise} = await testMakeRequest({
|
|
829
|
+
method: 'lookupByPhoneNumbers',
|
|
830
|
+
resource: '/lookup/orgid/userOrgId/phonenumbers',
|
|
831
|
+
params: phoneNumbers,
|
|
832
|
+
bodyParams: {lookupValues: phoneNumbers},
|
|
833
|
+
});
|
|
834
|
+
|
|
835
|
+
mercuryCallbacks['event:directory.lookup'](
|
|
836
|
+
createData(requestId, 0, true, 'lookupResult', {
|
|
837
|
+
entities: [ENTITY_1, ENTITY_2],
|
|
838
|
+
entitiesFound: [PHONE_1, PHONE_2],
|
|
839
|
+
entitiesNotFound: [PHONE_3],
|
|
840
|
+
})
|
|
841
|
+
);
|
|
842
|
+
const result = await promise;
|
|
843
|
+
|
|
844
|
+
expect(result).to.deep.equal({
|
|
845
|
+
resultArray: [ENTITY_1, ENTITY_2],
|
|
846
|
+
foundArray: [PHONE_1, PHONE_2],
|
|
847
|
+
notFoundArray: [PHONE_3],
|
|
848
|
+
});
|
|
849
|
+
});
|
|
850
|
+
|
|
851
|
+
it('works correctly with all phone numbers not found', async () => {
|
|
852
|
+
const phoneNumbers = [PHONE_1, PHONE_2];
|
|
853
|
+
|
|
854
|
+
const {requestId, promise} = await testMakeRequest({
|
|
855
|
+
method: 'lookupByPhoneNumbers',
|
|
856
|
+
resource: '/lookup/orgid/userOrgId/phonenumbers',
|
|
857
|
+
params: phoneNumbers,
|
|
858
|
+
bodyParams: {lookupValues: phoneNumbers},
|
|
859
|
+
});
|
|
860
|
+
|
|
861
|
+
mercuryCallbacks['event:directory.lookup'](
|
|
862
|
+
createData(requestId, 0, true, 'lookupResult', {
|
|
863
|
+
entities: [],
|
|
864
|
+
entitiesFound: [],
|
|
865
|
+
entitiesNotFound: phoneNumbers,
|
|
866
|
+
})
|
|
867
|
+
);
|
|
868
|
+
const result = await promise;
|
|
869
|
+
|
|
870
|
+
expect(result).to.deep.equal({
|
|
871
|
+
resultArray: [],
|
|
872
|
+
foundArray: [],
|
|
873
|
+
notFoundArray: phoneNumbers,
|
|
874
|
+
});
|
|
875
|
+
});
|
|
876
|
+
|
|
877
|
+
it('works correctly with exactly 5 phone numbers', async () => {
|
|
878
|
+
const {requestId, promise} = await testMakeRequest({
|
|
879
|
+
method: 'lookupByPhoneNumbers',
|
|
880
|
+
resource: '/lookup/orgid/userOrgId/phonenumbers',
|
|
881
|
+
params: PHONE_BATCH,
|
|
882
|
+
bodyParams: {lookupValues: PHONE_BATCH},
|
|
883
|
+
});
|
|
884
|
+
|
|
885
|
+
const entities = PHONE_BATCH.map((phone, index) => ({
|
|
886
|
+
id: `user${index + 1}`,
|
|
887
|
+
phoneNumbers: [phone],
|
|
888
|
+
}));
|
|
889
|
+
|
|
890
|
+
mercuryCallbacks['event:directory.lookup'](
|
|
891
|
+
createData(requestId, 0, true, 'lookupResult', {
|
|
892
|
+
entities,
|
|
893
|
+
entitiesFound: PHONE_BATCH,
|
|
894
|
+
entitiesNotFound: [],
|
|
895
|
+
})
|
|
896
|
+
);
|
|
897
|
+
const result = await promise;
|
|
898
|
+
|
|
899
|
+
expect(result.resultArray).to.have.lengthOf(5);
|
|
900
|
+
expect(result.foundArray).to.deep.equal(PHONE_BATCH);
|
|
901
|
+
expect(result.notFoundArray).to.deep.equal([]);
|
|
902
|
+
});
|
|
903
|
+
|
|
904
|
+
it('handles multiple sequences correctly', async () => {
|
|
905
|
+
const phoneNumbers = [PHONE_1, PHONE_2];
|
|
906
|
+
|
|
907
|
+
const {requestId, promise} = await testMakeRequest({
|
|
908
|
+
method: 'lookupByPhoneNumbers',
|
|
909
|
+
resource: '/lookup/orgid/userOrgId/phonenumbers',
|
|
910
|
+
params: phoneNumbers,
|
|
911
|
+
bodyParams: {lookupValues: phoneNumbers},
|
|
912
|
+
});
|
|
913
|
+
|
|
914
|
+
// Send sequences out of order
|
|
915
|
+
mercuryCallbacks['event:directory.lookup'](
|
|
916
|
+
createData(requestId, 1, false, 'lookupResult', {
|
|
917
|
+
entities: [ENTITY_2],
|
|
918
|
+
entitiesFound: [PHONE_2],
|
|
919
|
+
})
|
|
920
|
+
);
|
|
921
|
+
mercuryCallbacks['event:directory.lookup'](
|
|
922
|
+
createData(requestId, 2, true, 'lookupResult', {
|
|
923
|
+
entities: [],
|
|
924
|
+
entitiesFound: [],
|
|
925
|
+
entitiesNotFound: [PHONE_3],
|
|
926
|
+
})
|
|
927
|
+
);
|
|
928
|
+
mercuryCallbacks['event:directory.lookup'](
|
|
929
|
+
createData(requestId, 0, false, 'lookupResult', {
|
|
930
|
+
entities: [ENTITY_1],
|
|
931
|
+
entitiesFound: [PHONE_1],
|
|
932
|
+
})
|
|
933
|
+
);
|
|
934
|
+
|
|
935
|
+
const result = await promise;
|
|
936
|
+
|
|
937
|
+
expect(result.resultArray).to.deep.equal([ENTITY_1, ENTITY_2]);
|
|
938
|
+
expect(result.foundArray).to.deep.equal([PHONE_1, PHONE_2]);
|
|
939
|
+
expect(result.notFoundArray).to.deep.equal([PHONE_3]);
|
|
940
|
+
});
|
|
941
|
+
|
|
942
|
+
it('fails with default timeout when mercury does not respond', async () => {
|
|
943
|
+
const {promise} = await testMakeRequest({
|
|
944
|
+
method: 'lookupByPhoneNumbers',
|
|
945
|
+
resource: '/lookup/orgid/userOrgId/phonenumbers',
|
|
946
|
+
params: [PHONE_1],
|
|
947
|
+
bodyParams: {lookupValues: [PHONE_1]},
|
|
948
|
+
});
|
|
949
|
+
|
|
950
|
+
promise.catch(() => {}); // to prevent the test from failing due to unhandled promise rejection
|
|
951
|
+
|
|
952
|
+
await clock.tickAsync(6000);
|
|
953
|
+
|
|
954
|
+
return assert.isRejected(
|
|
955
|
+
promise,
|
|
956
|
+
'The DSS did not respond within 6000 ms.' +
|
|
957
|
+
'\n Request Id: randomid' +
|
|
958
|
+
'\n Resource: /lookup/orgid/userOrgId/phonenumbers' +
|
|
959
|
+
`\n Params: {"lookupValues":["${PHONE_1}"]}`
|
|
960
|
+
);
|
|
961
|
+
});
|
|
962
|
+
|
|
963
|
+
it('does not fail with timeout when mercury responds in time', async () => {
|
|
964
|
+
const {requestId, promise} = await testMakeRequest({
|
|
965
|
+
method: 'lookupByPhoneNumbers',
|
|
966
|
+
resource: '/lookup/orgid/userOrgId/phonenumbers',
|
|
967
|
+
params: [PHONE_1],
|
|
968
|
+
bodyParams: {lookupValues: [PHONE_1]},
|
|
969
|
+
});
|
|
970
|
+
|
|
971
|
+
await clock.tickAsync(5999);
|
|
972
|
+
|
|
973
|
+
mercuryCallbacks['event:directory.lookup'](
|
|
974
|
+
createData(requestId, 0, true, 'lookupResult', {
|
|
975
|
+
entities: [ENTITY_1],
|
|
976
|
+
entitiesFound: [PHONE_1],
|
|
977
|
+
entitiesNotFound: [],
|
|
978
|
+
})
|
|
979
|
+
);
|
|
980
|
+
|
|
981
|
+
return assert.isFulfilled(promise);
|
|
982
|
+
});
|
|
983
|
+
|
|
984
|
+
it('fails with timeout when request only partially resolved', async () => {
|
|
985
|
+
const phoneNumbers = [PHONE_1, PHONE_2];
|
|
986
|
+
|
|
987
|
+
const {requestId, promise} = await testMakeRequest({
|
|
988
|
+
method: 'lookupByPhoneNumbers',
|
|
989
|
+
resource: '/lookup/orgid/userOrgId/phonenumbers',
|
|
990
|
+
params: phoneNumbers,
|
|
991
|
+
bodyParams: {lookupValues: phoneNumbers},
|
|
992
|
+
});
|
|
993
|
+
|
|
994
|
+
// Send sequence 2 with finished flag, but missing sequence 1
|
|
995
|
+
mercuryCallbacks['event:directory.lookup'](
|
|
996
|
+
createData(requestId, 2, true, 'lookupResult', {
|
|
997
|
+
entities: [ENTITY_3],
|
|
998
|
+
entitiesFound: [PHONE_3],
|
|
999
|
+
entitiesNotFound: [],
|
|
1000
|
+
})
|
|
1001
|
+
);
|
|
1002
|
+
mercuryCallbacks['event:directory.lookup'](
|
|
1003
|
+
createData(requestId, 0, false, 'lookupResult', {
|
|
1004
|
+
entities: [ENTITY_1],
|
|
1005
|
+
entitiesFound: [PHONE_1],
|
|
1006
|
+
})
|
|
1007
|
+
);
|
|
1008
|
+
// Missing sequence 1
|
|
1009
|
+
|
|
1010
|
+
promise.catch(() => {}); // to prevent the test from failing due to unhandled promise rejection
|
|
1011
|
+
|
|
1012
|
+
await clock.tickAsync(6000);
|
|
1013
|
+
|
|
1014
|
+
return assert.isRejected(
|
|
1015
|
+
promise,
|
|
1016
|
+
'The DSS did not respond within 6000 ms.' +
|
|
1017
|
+
'\n Request Id: randomid' +
|
|
1018
|
+
'\n Resource: /lookup/orgid/userOrgId/phonenumbers' +
|
|
1019
|
+
`\n Params: {"lookupValues":["${PHONE_1}","${PHONE_2}"]}`
|
|
1020
|
+
);
|
|
1021
|
+
});
|
|
1022
|
+
});
|
|
1023
|
+
|
|
762
1024
|
describe('#search', () => {
|
|
763
1025
|
it('calls _request correctly', async () => {
|
|
764
1026
|
webex.internal.device.orgId = 'userOrgId';
|
|
@@ -1005,7 +1267,7 @@ describe('plugin-dss', () => {
|
|
|
1005
1267
|
|
|
1006
1268
|
it('handles a request with foundPath correctly', async () => {
|
|
1007
1269
|
webex.request = sinon.stub();
|
|
1008
|
-
|
|
1270
|
+
uuidStub.returns('randomid');
|
|
1009
1271
|
const promise = webex.internal.dss._request({
|
|
1010
1272
|
resource: '/search/orgid/userOrgId/entities',
|
|
1011
1273
|
params: {some: 'param'},
|
|
@@ -1053,7 +1315,7 @@ describe('plugin-dss', () => {
|
|
|
1053
1315
|
|
|
1054
1316
|
it('handles a request with foundPath and notFoundPath correctly', async () => {
|
|
1055
1317
|
webex.request = sinon.stub();
|
|
1056
|
-
|
|
1318
|
+
uuidStub.returns('randomid');
|
|
1057
1319
|
const promise = webex.internal.dss._request({
|
|
1058
1320
|
resource: '/search/orgid/userOrgId/entities',
|
|
1059
1321
|
params: {some: 'param'},
|
|
@@ -1212,6 +1474,7 @@ describe('plugin-dss', () => {
|
|
|
1212
1474
|
expect(result).to.equal(response2);
|
|
1213
1475
|
});
|
|
1214
1476
|
// TODO - https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-518037
|
|
1477
|
+
// @ts-ignore - it.skip is valid but not in type definitions
|
|
1215
1478
|
it.skip('fails fails when mercury does not respond, later batches can still pass ok', async () => {
|
|
1216
1479
|
// Batch 1
|
|
1217
1480
|
const {
|