@webex/internal-plugin-support 3.7.0 → 3.8.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 CHANGED
@@ -20,7 +20,8 @@ var _default = exports.default = {
20
20
  support: {
21
21
  appType: '',
22
22
  appVersion: '',
23
- languageCode: ''
23
+ languageCode: '',
24
+ incrementalLogs: false
24
25
  }
25
26
  };
26
27
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_default","exports","default","device","preDiscoveryServices","atlasServiceUrl","process","env","ATLAS_SERVICE_URL","atlas","clientLogs","CLIENT_LOGS_SERVICE_URL","clientLogsServiceUrl","support","appType","appVersion","languageCode"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n device: {\n preDiscoveryServices: {\n atlasServiceUrl: process.env.ATLAS_SERVICE_URL || 'https://atlas-a.wbx2.com/admin/api/v1',\n atlas: process.env.ATLAS_SERVICE_URL || 'https://atlas-a.wbx2.com/admin/api/v1',\n clientLogs: process.env.CLIENT_LOGS_SERVICE_URL || 'https://client-logs-a.wbx2.com/api/v1',\n clientLogsServiceUrl:\n process.env.CLIENT_LOGS_SERVICE_URL || 'https://client-logs-a.wbx2.com/api/v1',\n },\n },\n\n support: {\n appType: '',\n appVersion: '',\n languageCode: '',\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAIe;EACbC,MAAM,EAAE;IACNC,oBAAoB,EAAE;MACpBC,eAAe,EAAEC,OAAO,CAACC,GAAG,CAACC,iBAAiB,IAAI,uCAAuC;MACzFC,KAAK,EAAEH,OAAO,CAACC,GAAG,CAACC,iBAAiB,IAAI,uCAAuC;MAC/EE,UAAU,EAAEJ,OAAO,CAACC,GAAG,CAACI,uBAAuB,IAAI,uCAAuC;MAC1FC,oBAAoB,EAClBN,OAAO,CAACC,GAAG,CAACI,uBAAuB,IAAI;IAC3C;EACF,CAAC;EAEDE,OAAO,EAAE;IACPC,OAAO,EAAE,EAAE;IACXC,UAAU,EAAE,EAAE;IACdC,YAAY,EAAE;EAChB;AACF,CAAC"}
1
+ {"version":3,"names":["_default","exports","default","device","preDiscoveryServices","atlasServiceUrl","process","env","ATLAS_SERVICE_URL","atlas","clientLogs","CLIENT_LOGS_SERVICE_URL","clientLogsServiceUrl","support","appType","appVersion","languageCode","incrementalLogs"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n device: {\n preDiscoveryServices: {\n atlasServiceUrl: process.env.ATLAS_SERVICE_URL || 'https://atlas-a.wbx2.com/admin/api/v1',\n atlas: process.env.ATLAS_SERVICE_URL || 'https://atlas-a.wbx2.com/admin/api/v1',\n clientLogs: process.env.CLIENT_LOGS_SERVICE_URL || 'https://client-logs-a.wbx2.com/api/v1',\n clientLogsServiceUrl:\n process.env.CLIENT_LOGS_SERVICE_URL || 'https://client-logs-a.wbx2.com/api/v1',\n },\n },\n\n support: {\n appType: '',\n appVersion: '',\n languageCode: '',\n incrementalLogs: false,\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAIe;EACbC,MAAM,EAAE;IACNC,oBAAoB,EAAE;MACpBC,eAAe,EAAEC,OAAO,CAACC,GAAG,CAACC,iBAAiB,IAAI,uCAAuC;MACzFC,KAAK,EAAEH,OAAO,CAACC,GAAG,CAACC,iBAAiB,IAAI,uCAAuC;MAC/EE,UAAU,EAAEJ,OAAO,CAACC,GAAG,CAACI,uBAAuB,IAAI,uCAAuC;MAC1FC,oBAAoB,EAClBN,OAAO,CAACC,GAAG,CAACI,uBAAuB,IAAI;IAC3C;EACF,CAAC;EAEDE,OAAO,EAAE;IACPC,OAAO,EAAE,EAAE;IACXC,UAAU,EAAE,EAAE;IACdC,YAAY,EAAE,EAAE;IAChBC,eAAe,EAAE;EACnB;AACF,CAAC"}
package/dist/support.js CHANGED
@@ -45,13 +45,30 @@ var Support = _webexCore.WebexPlugin.extend({
45
45
  return res.body.url;
46
46
  });
47
47
  },
48
+ /**
49
+ * Sends logs to the backend
50
+ *
51
+ * @param {Object} metadata metadata about the logs
52
+ * @param {Array} logs logs to send, if undefined, SDK's logs will be sent
53
+ * @param {Object} options additional options
54
+ * @param {string} options.type 'full' or 'diff', if not specified then the config.incrementalLogs value is used to determine the type,
55
+ * this option only applies if logs parameter is undefined
56
+ * 'diff' means that only the logs since the last log upload will be sent
57
+ * 'full' means that all the logs from internal buffers will be sent
58
+ * @returns {Promise}
59
+ */
48
60
  submitLogs: function submitLogs(metadata, logs) {
49
61
  var _this = this;
62
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
50
63
  var metadataArray = this._constructFileMetadata(metadata);
64
+ var type = options.type;
51
65
 
52
66
  // this is really testing that Ampersand is fully ready. once it's ready, these exist
53
67
  if (!logs && this.webex.logger.sdkBuffer && this.webex.logger.clientBuffer && this.webex.logger.buffer) {
54
- logs = this.webex.logger.formatLogs();
68
+ var diff = type !== undefined ? type === 'diff' : this.config.incrementalLogs;
69
+ logs = this.webex.logger.formatLogs({
70
+ diff: diff
71
+ });
55
72
  }
56
73
  var filename;
57
74
  if (metadata.locusId && metadata.callStart) {
@@ -64,7 +81,7 @@ var Support = _webexCore.WebexPlugin.extend({
64
81
  return _this.webex.credentials.getClientToken();
65
82
  }).then( /*#__PURE__*/function () {
66
83
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(token) {
67
- var headers, initalOpts, finalOpts, options;
84
+ var headers, initalOpts, finalOpts, uploadOptions;
68
85
  return _regenerator.default.wrap(function _callee$(_context) {
69
86
  while (1) switch (_context.prev = _context.next) {
70
87
  case 0:
@@ -79,7 +96,7 @@ var Support = _webexCore.WebexPlugin.extend({
79
96
  service: 'clientLogs',
80
97
  resource: 'logs/meta'
81
98
  };
82
- options = (0, _lodash.defaults)(initalOpts, {
99
+ uploadOptions = (0, _lodash.defaults)(initalOpts, {
83
100
  file: logs,
84
101
  shouldAttemptReauth: false,
85
102
  headers: headers,
@@ -106,7 +123,7 @@ var Support = _webexCore.WebexPlugin.extend({
106
123
  })
107
124
  }
108
125
  });
109
- return _context.abrupt("return", _this.webex.upload(options));
126
+ return _context.abrupt("return", _this.webex.upload(uploadOptions));
110
127
  case 5:
111
128
  case "end":
112
129
  return _context.stop();
@@ -129,7 +146,7 @@ var Support = _webexCore.WebexPlugin.extend({
129
146
  * @returns {array}
130
147
  */
131
148
  _constructFileMetadata: function _constructFileMetadata(metadata) {
132
- var metadataArray = ['locusId', 'appVersion', 'callStart', 'feedbackId', 'correlationId', 'meetingId', 'surveySessionId', 'productAreaTag', 'issueTypeTag', 'locussessionid', 'autoupload'].map(function (key) {
149
+ var metadataArray = ['locusId', 'appVersion', 'callStart', 'feedbackId', 'correlationId', 'meetingId', 'surveySessionId', 'productAreaTag', 'issueTypeTag', 'issueDescTag', 'locussessionid', 'autoupload'].map(function (key) {
133
150
  if (metadata[key]) {
134
151
  return {
135
152
  key: key,
@@ -166,7 +183,7 @@ var Support = _webexCore.WebexPlugin.extend({
166
183
  }
167
184
  return metadataArray;
168
185
  },
169
- version: "3.7.0"
186
+ version: "3.8.0-next.10"
170
187
  });
171
188
  var _default = exports.default = Support;
172
189
  //# sourceMappingURL=support.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_webexCore","require","_lodash","_uuid","_interopRequireDefault","Support","WebexPlugin","extend","namespace","getFeedbackUrl","options","request","method","api","resource","body","defaults","appVersion","config","appType","feedbackId","uuid","v4","languageCode","then","res","url","getSupportUrl","webex","qs","submitLogs","metadata","logs","_this","metadataArray","_constructFileMetadata","logger","sdkBuffer","clientBuffer","buffer","formatLogs","filename","locusId","callStart","concat","sessionId","userId","credentials","getUserToken","catch","getClientToken","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","token","headers","initalOpts","finalOpts","wrap","_callee$","_context","prev","next","authorization","toString","service","file","shouldAttemptReauth","phases","initialize","upload","$uri","session","tempURL","finalize","$body","logFilename","data","internal","device","abrupt","stop","_x","apply","arguments","map","key","value","filter","entry","Boolean","push","support","orgId","version","_default","exports"],"sources":["support.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {defaults} from 'lodash';\nimport uuid from 'uuid';\n\nconst Support = WebexPlugin.extend({\n namespace: 'Support',\n\n getFeedbackUrl(options) {\n options = options || {};\n\n return this.request({\n method: 'POST',\n api: 'conversation',\n resource: 'users/deskFeedbackUrl',\n body: defaults(options, {\n appVersion: this.config.appVersion,\n appType: this.config.appType,\n feedbackId: options.feedbackId || uuid.v4(),\n languageCode: this.config.languageCode,\n }),\n }).then((res) => res.body.url);\n },\n\n getSupportUrl() {\n return this.webex\n .request({\n method: 'GET',\n api: 'conversation',\n resource: 'users/deskSupportUrl',\n qs: {\n languageCode: this.config.languageCode,\n },\n })\n .then((res) => res.body.url);\n },\n\n submitLogs(metadata, logs) {\n const metadataArray = this._constructFileMetadata(metadata);\n\n // this is really testing that Ampersand is fully ready. once it's ready, these exist\n if (\n !logs &&\n this.webex.logger.sdkBuffer &&\n this.webex.logger.clientBuffer &&\n this.webex.logger.buffer\n ) {\n logs = this.webex.logger.formatLogs();\n }\n\n let filename;\n\n if (metadata.locusId && metadata.callStart) {\n filename = `${metadata.locusId}_${metadata.callStart}.txt`;\n } else {\n filename = `${this.webex.sessionId}.txt`;\n }\n\n let userId;\n\n return this.webex.credentials\n .getUserToken()\n .catch(() => this.webex.credentials.getClientToken())\n .then(async (token) => {\n const headers = {authorization: token.toString()};\n\n const initalOpts = {\n service: 'clientLogs',\n resource: 'logs/urls',\n };\n\n const finalOpts = {\n service: 'clientLogs',\n resource: 'logs/meta',\n };\n\n const options = defaults(initalOpts, {\n file: logs,\n shouldAttemptReauth: false,\n headers,\n phases: {\n initialize: {\n body: {\n file: filename,\n },\n },\n upload: {\n $uri: (session) => session.tempURL,\n },\n finalize: defaults(finalOpts, {\n $body: (session) => {\n userId = session.userId;\n\n return {\n filename: session.logFilename,\n data: metadataArray,\n userId: this.webex.internal.device.userId || session.userId,\n };\n },\n }),\n },\n });\n\n return this.webex.upload(options);\n })\n .then((body) => {\n if (userId && !body.userId) {\n body.userId = userId;\n }\n\n return body;\n });\n },\n\n /**\n * Constructs an array of key-value pairs for log upload.\n * @param {*} metadata\n * @returns {array}\n */\n _constructFileMetadata(metadata) {\n const metadataArray = [\n 'locusId',\n 'appVersion',\n 'callStart',\n 'feedbackId',\n 'correlationId',\n 'meetingId',\n 'surveySessionId',\n 'productAreaTag',\n 'issueTypeTag',\n 'locussessionid',\n 'autoupload',\n ]\n .map((key) => {\n if (metadata[key]) {\n return {\n key,\n value: metadata[key],\n };\n }\n\n return null;\n })\n .filter((entry) => Boolean(entry));\n\n if (this.webex.sessionId) {\n metadataArray.push({\n key: 'trackingId',\n value: this.webex.sessionId,\n });\n }\n\n if (this.webex.internal.support.config.appVersion) {\n metadataArray.push({\n key: 'appVersion',\n value: this.webex.internal.support.config.appVersion,\n });\n }\n\n if (this.webex.internal.device.userId) {\n metadataArray.push({\n key: 'userId',\n value: this.webex.internal.device.userId,\n });\n }\n\n if (this.webex.internal.device.orgId) {\n metadataArray.push({\n key: 'orgId',\n value: this.webex.internal.device.orgId,\n });\n }\n\n return metadataArray;\n },\n});\n\nexport default Support;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_webexCore","require","_lodash","_uuid","_interopRequireDefault","Support","WebexPlugin","extend","namespace","getFeedbackUrl","options","request","method","api","resource","body","defaults","appVersion","config","appType","feedbackId","uuid","v4","languageCode","then","res","url","getSupportUrl","webex","qs","submitLogs","metadata","logs","_this","arguments","length","undefined","metadataArray","_constructFileMetadata","type","logger","sdkBuffer","clientBuffer","buffer","diff","incrementalLogs","formatLogs","filename","locusId","callStart","concat","sessionId","userId","credentials","getUserToken","catch","getClientToken","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","token","headers","initalOpts","finalOpts","uploadOptions","wrap","_callee$","_context","prev","next","authorization","toString","service","file","shouldAttemptReauth","phases","initialize","upload","$uri","session","tempURL","finalize","$body","logFilename","data","internal","device","abrupt","stop","_x","apply","map","key","value","filter","entry","Boolean","push","support","orgId","version","_default","exports"],"sources":["support.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {defaults} from 'lodash';\nimport uuid from 'uuid';\n\nconst Support = WebexPlugin.extend({\n namespace: 'Support',\n\n getFeedbackUrl(options) {\n options = options || {};\n\n return this.request({\n method: 'POST',\n api: 'conversation',\n resource: 'users/deskFeedbackUrl',\n body: defaults(options, {\n appVersion: this.config.appVersion,\n appType: this.config.appType,\n feedbackId: options.feedbackId || uuid.v4(),\n languageCode: this.config.languageCode,\n }),\n }).then((res) => res.body.url);\n },\n\n getSupportUrl() {\n return this.webex\n .request({\n method: 'GET',\n api: 'conversation',\n resource: 'users/deskSupportUrl',\n qs: {\n languageCode: this.config.languageCode,\n },\n })\n .then((res) => res.body.url);\n },\n\n /**\n * Sends logs to the backend\n *\n * @param {Object} metadata metadata about the logs\n * @param {Array} logs logs to send, if undefined, SDK's logs will be sent\n * @param {Object} options additional options\n * @param {string} options.type 'full' or 'diff', if not specified then the config.incrementalLogs value is used to determine the type,\n * this option only applies if logs parameter is undefined\n * 'diff' means that only the logs since the last log upload will be sent\n * 'full' means that all the logs from internal buffers will be sent\n * @returns {Promise}\n */\n submitLogs(metadata, logs, options = {}) {\n const metadataArray = this._constructFileMetadata(metadata);\n\n const {type} = options;\n\n // this is really testing that Ampersand is fully ready. once it's ready, these exist\n if (\n !logs &&\n this.webex.logger.sdkBuffer &&\n this.webex.logger.clientBuffer &&\n this.webex.logger.buffer\n ) {\n const diff = type !== undefined ? type === 'diff' : this.config.incrementalLogs;\n\n logs = this.webex.logger.formatLogs({diff});\n }\n\n let filename;\n\n if (metadata.locusId && metadata.callStart) {\n filename = `${metadata.locusId}_${metadata.callStart}.txt`;\n } else {\n filename = `${this.webex.sessionId}.txt`;\n }\n\n let userId;\n\n return this.webex.credentials\n .getUserToken()\n .catch(() => this.webex.credentials.getClientToken())\n .then(async (token) => {\n const headers = {authorization: token.toString()};\n\n const initalOpts = {\n service: 'clientLogs',\n resource: 'logs/urls',\n };\n\n const finalOpts = {\n service: 'clientLogs',\n resource: 'logs/meta',\n };\n\n const uploadOptions = defaults(initalOpts, {\n file: logs,\n shouldAttemptReauth: false,\n headers,\n phases: {\n initialize: {\n body: {\n file: filename,\n },\n },\n upload: {\n $uri: (session) => session.tempURL,\n },\n finalize: defaults(finalOpts, {\n $body: (session) => {\n userId = session.userId;\n\n return {\n filename: session.logFilename,\n data: metadataArray,\n userId: this.webex.internal.device.userId || session.userId,\n };\n },\n }),\n },\n });\n\n return this.webex.upload(uploadOptions);\n })\n .then((body) => {\n if (userId && !body.userId) {\n body.userId = userId;\n }\n\n return body;\n });\n },\n\n /**\n * Constructs an array of key-value pairs for log upload.\n * @param {*} metadata\n * @returns {array}\n */\n _constructFileMetadata(metadata) {\n const metadataArray = [\n 'locusId',\n 'appVersion',\n 'callStart',\n 'feedbackId',\n 'correlationId',\n 'meetingId',\n 'surveySessionId',\n 'productAreaTag',\n 'issueTypeTag',\n 'issueDescTag',\n 'locussessionid',\n 'autoupload',\n ]\n .map((key) => {\n if (metadata[key]) {\n return {\n key,\n value: metadata[key],\n };\n }\n\n return null;\n })\n .filter((entry) => Boolean(entry));\n\n if (this.webex.sessionId) {\n metadataArray.push({\n key: 'trackingId',\n value: this.webex.sessionId,\n });\n }\n\n if (this.webex.internal.support.config.appVersion) {\n metadataArray.push({\n key: 'appVersion',\n value: this.webex.internal.support.config.appVersion,\n });\n }\n\n if (this.webex.internal.device.userId) {\n metadataArray.push({\n key: 'userId',\n value: this.webex.internal.device.userId,\n });\n }\n\n if (this.webex.internal.device.orgId) {\n metadataArray.push({\n key: 'orgId',\n value: this.webex.internal.device.orgId,\n });\n }\n\n return metadataArray;\n },\n});\n\nexport default Support;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -20,13 +20,13 @@
20
20
  ]
21
21
  },
22
22
  "dependencies": {
23
- "@webex/internal-plugin-device": "3.7.0",
24
- "@webex/internal-plugin-search": "3.7.0",
25
- "@webex/test-helper-chai": "3.7.0",
26
- "@webex/test-helper-file": "3.7.0",
27
- "@webex/test-helper-mock-webex": "3.7.0",
28
- "@webex/test-helper-test-users": "3.7.0",
29
- "@webex/webex-core": "3.7.0",
23
+ "@webex/internal-plugin-device": "3.8.0-next.9",
24
+ "@webex/internal-plugin-search": "3.8.0-next.10",
25
+ "@webex/test-helper-chai": "3.8.0-next.9",
26
+ "@webex/test-helper-file": "3.8.0-next.9",
27
+ "@webex/test-helper-mock-webex": "3.8.0-next.9",
28
+ "@webex/test-helper-test-users": "3.8.0-next.9",
29
+ "@webex/webex-core": "3.8.0-next.9",
30
30
  "lodash": "^4.17.21",
31
31
  "uuid": "^3.3.2"
32
32
  },
@@ -46,12 +46,12 @@
46
46
  "@webex/eslint-config-legacy": "0.0.0",
47
47
  "@webex/jest-config-legacy": "0.0.0",
48
48
  "@webex/legacy-tools": "0.0.0",
49
- "@webex/test-helper-chai": "3.7.0",
50
- "@webex/test-helper-mocha": "3.7.0",
51
- "@webex/test-helper-mock-webex": "3.7.0",
52
- "@webex/test-helper-test-users": "3.7.0",
49
+ "@webex/test-helper-chai": "3.8.0-next.9",
50
+ "@webex/test-helper-mocha": "3.8.0-next.9",
51
+ "@webex/test-helper-mock-webex": "3.8.0-next.9",
52
+ "@webex/test-helper-test-users": "3.8.0-next.9",
53
53
  "eslint": "^8.24.0",
54
54
  "prettier": "^2.7.1"
55
55
  },
56
- "version": "3.7.0"
56
+ "version": "3.8.0-next.10"
57
57
  }
package/src/config.js CHANGED
@@ -17,5 +17,6 @@ export default {
17
17
  appType: '',
18
18
  appVersion: '',
19
19
  languageCode: '',
20
+ incrementalLogs: false,
20
21
  },
21
22
  };
package/src/support.js CHANGED
@@ -38,9 +38,23 @@ const Support = WebexPlugin.extend({
38
38
  .then((res) => res.body.url);
39
39
  },
40
40
 
41
- submitLogs(metadata, logs) {
41
+ /**
42
+ * Sends logs to the backend
43
+ *
44
+ * @param {Object} metadata metadata about the logs
45
+ * @param {Array} logs logs to send, if undefined, SDK's logs will be sent
46
+ * @param {Object} options additional options
47
+ * @param {string} options.type 'full' or 'diff', if not specified then the config.incrementalLogs value is used to determine the type,
48
+ * this option only applies if logs parameter is undefined
49
+ * 'diff' means that only the logs since the last log upload will be sent
50
+ * 'full' means that all the logs from internal buffers will be sent
51
+ * @returns {Promise}
52
+ */
53
+ submitLogs(metadata, logs, options = {}) {
42
54
  const metadataArray = this._constructFileMetadata(metadata);
43
55
 
56
+ const {type} = options;
57
+
44
58
  // this is really testing that Ampersand is fully ready. once it's ready, these exist
45
59
  if (
46
60
  !logs &&
@@ -48,7 +62,9 @@ const Support = WebexPlugin.extend({
48
62
  this.webex.logger.clientBuffer &&
49
63
  this.webex.logger.buffer
50
64
  ) {
51
- logs = this.webex.logger.formatLogs();
65
+ const diff = type !== undefined ? type === 'diff' : this.config.incrementalLogs;
66
+
67
+ logs = this.webex.logger.formatLogs({diff});
52
68
  }
53
69
 
54
70
  let filename;
@@ -77,7 +93,7 @@ const Support = WebexPlugin.extend({
77
93
  resource: 'logs/meta',
78
94
  };
79
95
 
80
- const options = defaults(initalOpts, {
96
+ const uploadOptions = defaults(initalOpts, {
81
97
  file: logs,
82
98
  shouldAttemptReauth: false,
83
99
  headers,
@@ -104,7 +120,7 @@ const Support = WebexPlugin.extend({
104
120
  },
105
121
  });
106
122
 
107
- return this.webex.upload(options);
123
+ return this.webex.upload(uploadOptions);
108
124
  })
109
125
  .then((body) => {
110
126
  if (userId && !body.userId) {
@@ -131,6 +147,7 @@ const Support = WebexPlugin.extend({
131
147
  'surveySessionId',
132
148
  'productAreaTag',
133
149
  'issueTypeTag',
150
+ 'issueDescTag',
134
151
  'locussessionid',
135
152
  'autoupload',
136
153
  ]
@@ -3,7 +3,7 @@
3
3
  */
4
4
 
5
5
  /* eslint-disable no-underscore-dangle */
6
-
6
+ import sinon from 'sinon';
7
7
  import Support from '@webex/internal-plugin-support';
8
8
  import {assert} from '@webex/test-helper-chai';
9
9
  import MockWebex from '@webex/test-helper-mock-webex';
@@ -151,12 +151,73 @@ describe('plugin-support', () => {
151
151
 
152
152
  assert.equal(found?.value, autoupload);
153
153
  });
154
+
155
+ it('sends issuedesctag if specified in metadata', () => {
156
+ const issueDescTag = 'issueDescTag';
157
+ const result = webex.internal.support._constructFileMetadata({issueDescTag});
158
+ const found = result.find((attr) => attr.key === 'issueDescTag');
159
+
160
+ assert.equal(found?.value, issueDescTag);
161
+ });
154
162
  });
155
163
 
156
164
  describe('#submitLogs()', () => {
165
+ beforeEach(() => {
166
+ webex.logger = {
167
+ formatLogs: sinon.stub().returns(['fake logs']),
168
+ sdkBuffer: [],
169
+ clientBuffer: [],
170
+ buffer: [],
171
+ };
172
+ webex.upload = sinon.stub().returns(Promise.resolve({}));
173
+ });
174
+
157
175
  it('calls getUserToken', () => {
158
176
  webex.internal.support.submitLogs({});
159
177
  assert.calledOnce(webex.credentials.getUserToken);
160
178
  });
179
+
180
+ [
181
+ {type: undefined, incrementalLogsConfig: true, expectedDiff: true},
182
+ {type: undefined, incrementalLogsConfig: false, expectedDiff: false},
183
+
184
+ {type: 'full', incrementalLogsConfig: true, expectedDiff: false}, // the sendFullLog param overrides the config
185
+ {type: 'full', incrementalLogsConfig: false, expectedDiff: false},
186
+
187
+ {type: 'diff', incrementalLogsConfig: true, expectedDiff: true},
188
+ {type: 'diff', incrementalLogsConfig: false, expectedDiff: true}, // the sendFullLog param overrides the config
189
+ ].forEach(({type, incrementalLogsConfig, expectedDiff}) => {
190
+ it(`submits ${
191
+ expectedDiff ? 'incremental' : 'full'
192
+ } logs if called with options.type=${type} and config.incrementalLogs=${incrementalLogsConfig}`, async () => {
193
+ webex.internal.support.config.incrementalLogs = incrementalLogsConfig;
194
+ if (type !== undefined) {
195
+ await webex.internal.support.submitLogs({}, undefined, {type});
196
+ } else {
197
+ await webex.internal.support.submitLogs({});
198
+ }
199
+
200
+ assert.calledOnceWithExactly(webex.logger.formatLogs, {diff: expectedDiff});
201
+ assert.calledOnce(webex.upload);
202
+
203
+ const uploadArgs = webex.upload.args[0];
204
+
205
+ assert.deepEqual(uploadArgs[0].file, ['fake logs']);
206
+ });
207
+
208
+ it('submits provided logs', async () => {
209
+ webex.internal.support.config.incrementalLogs = incrementalLogsConfig;
210
+ const testLogs = ['test logs'];
211
+
212
+ await webex.internal.support.submitLogs({}, testLogs);
213
+
214
+ assert.notCalled(webex.logger.formatLogs);
215
+ assert.calledOnce(webex.upload);
216
+
217
+ const uploadArgs = webex.upload.args[0];
218
+
219
+ assert.deepEqual(uploadArgs[0].file, ['test logs']);
220
+ });
221
+ });
161
222
  });
162
223
  });