@webex/internal-plugin-support 3.0.0-beta.9 → 3.0.0-beta.90

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,14 +21,12 @@ npm install --save @webex/internal-plugin-support
21
21
  ## Usage
22
22
 
23
23
  ```js
24
-
25
24
  import '@webex/internal-plugin-support';
26
25
 
27
26
  import WebexCore from '@webex/webex-core';
28
27
 
29
28
  const webex = new WebexCore();
30
- webex.internal.support.WHATEVER
31
-
29
+ webex.internal.support.WHATEVER;
32
30
  ```
33
31
 
34
32
  ## Maintainers
package/dist/config.js CHANGED
@@ -1,13 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  _Object$defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
-
9
7
  exports.default = void 0;
10
-
11
8
  /*!
12
9
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
13
10
  */
@@ -1 +1 @@
1
- {"version":3,"names":["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: 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;eAEe;EACbA,MAAM,EAAE;IACNC,oBAAoB,EAAE;MACpBC,eAAe,EAAEC,OAAO,CAACC,GAAR,CAAYC,iBAAZ,IAAiC,uCAD9B;MAEpBC,KAAK,EAAEH,OAAO,CAACC,GAAR,CAAYC,iBAAZ,IAAiC,uCAFpB;MAGpBE,UAAU,EAAEJ,OAAO,CAACC,GAAR,CAAYI,uBAAZ,IAAuC,uCAH/B;MAIpBC,oBAAoB,EAAEN,OAAO,CAACC,GAAR,CAAYI,uBAAZ,IAAuC;IAJzC;EADhB,CADK;EAUbE,OAAO,EAAE;IACPC,OAAO,EAAE,EADF;IAEPC,UAAU,EAAE,EAFL;IAGPC,YAAY,EAAE;EAHP;AAVI,C"}
1
+ {"version":3,"names":["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,eAIe;EACbA,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;AAAA"}
package/dist/index.js CHANGED
@@ -1,31 +1,24 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  _Object$defineProperty(exports, "default", {
12
9
  enumerable: true,
13
10
  get: function get() {
14
11
  return _support.default;
15
12
  }
16
13
  });
17
-
14
+ require("@webex/internal-plugin-device");
18
15
  var _webexCore = require("@webex/webex-core");
19
-
20
16
  var _support = _interopRequireDefault(require("./support"));
21
-
22
17
  var _config = _interopRequireDefault(require("./config"));
23
-
24
- require("@webex/internal-plugin-device");
25
-
26
18
  /*!
27
19
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
28
20
  */
21
+
29
22
  (0, _webexCore.registerInternalPlugin)('support', _support.default, {
30
23
  config: _config.default
31
24
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["registerInternalPlugin","Support","config"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Support from './support';\nimport config from './config';\nimport '@webex/internal-plugin-device';\n\nregisterInternalPlugin('support', Support, {\n config\n});\n\nexport {default} from './support';\n"],"mappings":";;;;;;;;;;;;;;;;;AAIA;;AAEA;;AACA;;AACA;;AARA;AACA;AACA;AAQA,IAAAA,iCAAA,EAAuB,SAAvB,EAAkCC,gBAAlC,EAA2C;EACzCC,MAAM,EAANA;AADyC,CAA3C"}
1
+ {"version":3,"names":["registerInternalPlugin","Support","config"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport '@webex/internal-plugin-device';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Support from './support';\nimport config from './config';\n\nregisterInternalPlugin('support', Support, {\n config,\n});\n\nexport {default} from './support';\n"],"mappings":";;;;;;;;;;;;;AAGA;AAEA;AAEA;AACA;AARA;AACA;AACA;;AAQA,IAAAA,iCAAsB,EAAC,SAAS,EAAEC,gBAAO,EAAE;EACzCC,MAAM,EAANA;AACF,CAAC,CAAC"}
package/dist/support.js CHANGED
@@ -1,28 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = void 0;
12
-
13
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
14
-
15
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
16
-
17
11
  var _defaults2 = _interopRequireDefault(require("lodash/defaults"));
18
-
19
12
  var _webexCore = require("@webex/webex-core");
20
-
21
13
  var _uuid = _interopRequireDefault(require("uuid"));
22
-
23
14
  /*!
24
15
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
25
16
  */
17
+
26
18
  var Support = _webexCore.WebexPlugin.extend({
27
19
  namespace: 'Support',
28
20
  getFeedbackUrl: function getFeedbackUrl(options) {
@@ -55,22 +47,18 @@ var Support = _webexCore.WebexPlugin.extend({
55
47
  },
56
48
  submitLogs: function submitLogs(metadata, logs) {
57
49
  var _this = this;
50
+ var metadataArray = this._constructFileMetadata(metadata);
58
51
 
59
- var metadataArray = this._constructFileMetadata(metadata); // this is really testing that Ampersand is fully ready. once it's ready, these exist
60
-
61
-
52
+ // this is really testing that Ampersand is fully ready. once it's ready, these exist
62
53
  if (!logs && this.webex.logger.sdkBuffer && this.webex.logger.clientBuffer && this.webex.logger.buffer) {
63
54
  logs = this.webex.logger.formatLogs();
64
55
  }
65
-
66
56
  var filename;
67
-
68
57
  if (metadata.locusId && metadata.callStart) {
69
58
  filename = "".concat(metadata.locusId, "_").concat(metadata.callStart, ".txt");
70
59
  } else {
71
60
  filename = "".concat(this.webex.sessionId, ".txt");
72
61
  }
73
-
74
62
  var userId;
75
63
  return this.webex.credentials.getUserToken().catch(function () {
76
64
  return _this.webex.credentials.getClientToken();
@@ -78,57 +66,53 @@ var Support = _webexCore.WebexPlugin.extend({
78
66
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(token) {
79
67
  var headers, initalOpts, finalOpts, options;
80
68
  return _regenerator.default.wrap(function _callee$(_context) {
81
- while (1) {
82
- switch (_context.prev = _context.next) {
83
- case 0:
84
- headers = {
85
- authorization: token.toString()
86
- };
87
- initalOpts = {
88
- service: 'clientLogs',
89
- resource: 'logs/urls'
90
- };
91
- finalOpts = {
92
- service: 'clientLogs',
93
- resource: 'logs/meta'
94
- };
95
- options = (0, _defaults2.default)(initalOpts, {
96
- file: logs,
97
- shouldAttemptReauth: false,
98
- headers: headers,
99
- phases: {
100
- initialize: {
101
- body: {
102
- file: filename
103
- }
104
- },
105
- upload: {
106
- $uri: function $uri(session) {
107
- return session.tempURL;
108
- }
109
- },
110
- finalize: (0, _defaults2.default)(finalOpts, {
111
- $body: function $body(session) {
112
- userId = session.userId;
113
- return {
114
- filename: session.logFilename,
115
- data: metadataArray,
116
- userId: _this.webex.internal.device.userId || session.userId
117
- };
118
- }
119
- })
120
- }
121
- });
122
- return _context.abrupt("return", _this.webex.upload(options));
123
-
124
- case 5:
125
- case "end":
126
- return _context.stop();
127
- }
69
+ while (1) switch (_context.prev = _context.next) {
70
+ case 0:
71
+ headers = {
72
+ authorization: token.toString()
73
+ };
74
+ initalOpts = {
75
+ service: 'clientLogs',
76
+ resource: 'logs/urls'
77
+ };
78
+ finalOpts = {
79
+ service: 'clientLogs',
80
+ resource: 'logs/meta'
81
+ };
82
+ options = (0, _defaults2.default)(initalOpts, {
83
+ file: logs,
84
+ shouldAttemptReauth: false,
85
+ headers: headers,
86
+ phases: {
87
+ initialize: {
88
+ body: {
89
+ file: filename
90
+ }
91
+ },
92
+ upload: {
93
+ $uri: function $uri(session) {
94
+ return session.tempURL;
95
+ }
96
+ },
97
+ finalize: (0, _defaults2.default)(finalOpts, {
98
+ $body: function $body(session) {
99
+ userId = session.userId;
100
+ return {
101
+ filename: session.logFilename,
102
+ data: metadataArray,
103
+ userId: _this.webex.internal.device.userId || session.userId
104
+ };
105
+ }
106
+ })
107
+ }
108
+ });
109
+ return _context.abrupt("return", _this.webex.upload(options));
110
+ case 5:
111
+ case "end":
112
+ return _context.stop();
128
113
  }
129
114
  }, _callee);
130
115
  }));
131
-
132
116
  return function (_x) {
133
117
  return _ref.apply(this, arguments);
134
118
  };
@@ -136,50 +120,48 @@ var Support = _webexCore.WebexPlugin.extend({
136
120
  if (userId && !body.userId) {
137
121
  body.userId = userId;
138
122
  }
139
-
140
123
  return body;
141
124
  });
142
125
  },
126
+ /**
127
+ * Constructs an array of key-value pairs for log upload.
128
+ * @param {*} metadata
129
+ * @returns {array}
130
+ */
143
131
  _constructFileMetadata: function _constructFileMetadata(metadata) {
144
- var metadataArray = ['locusId', 'callStart', 'feedbackId', 'correlationId', 'meetingId'].map(function (key) {
132
+ var metadataArray = ['locusId', 'callStart', 'feedbackId', 'correlationId', 'meetingId', 'surveySessionId', 'productAreaTag', 'issueTypeTag'].map(function (key) {
145
133
  if (metadata[key]) {
146
134
  return {
147
135
  key: key,
148
136
  value: metadata[key]
149
137
  };
150
138
  }
151
-
152
139
  return null;
153
140
  }).filter(function (entry) {
154
141
  return Boolean(entry);
155
142
  });
156
-
157
143
  if (this.webex.sessionId) {
158
144
  metadataArray.push({
159
145
  key: 'trackingId',
160
146
  value: this.webex.sessionId
161
147
  });
162
148
  }
163
-
164
149
  if (this.webex.internal.device.userId) {
165
150
  metadataArray.push({
166
151
  key: 'userId',
167
152
  value: this.webex.internal.device.userId
168
153
  });
169
154
  }
170
-
171
155
  if (this.webex.internal.device.orgId) {
172
156
  metadataArray.push({
173
157
  key: 'orgId',
174
158
  value: this.webex.internal.device.orgId
175
159
  });
176
160
  }
177
-
178
161
  return metadataArray;
179
162
  },
180
- version: "3.0.0-beta.9"
163
+ version: "3.0.0-beta.90"
181
164
  });
182
-
183
165
  var _default = Support;
184
166
  exports.default = _default;
185
167
  //# sourceMappingURL=support.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Support","WebexPlugin","extend","namespace","getFeedbackUrl","options","request","method","api","resource","body","appVersion","config","appType","feedbackId","uuid","v4","languageCode","then","res","url","getSupportUrl","webex","qs","submitLogs","metadata","logs","metadataArray","_constructFileMetadata","logger","sdkBuffer","clientBuffer","buffer","formatLogs","filename","locusId","callStart","sessionId","userId","credentials","getUserToken","catch","getClientToken","token","headers","authorization","toString","initalOpts","service","finalOpts","file","shouldAttemptReauth","phases","initialize","upload","$uri","session","tempURL","finalize","$body","logFilename","data","internal","device","map","key","value","filter","entry","Boolean","push","orgId"],"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 })\n .then((res) => res.body.url);\n },\n\n getSupportUrl() {\n return this.webex.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 (!logs && this.webex.logger.sdkBuffer && this.webex.logger.clientBuffer && this.webex.logger.buffer) {\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 }\n else {\n filename = `${this.webex.sessionId}.txt`;\n }\n\n let userId;\n\n return this.webex.credentials.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 _constructFileMetadata(metadata) {\n const metadataArray = [\n 'locusId',\n 'callStart',\n 'feedbackId',\n 'correlationId',\n 'meetingId'\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.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":";;;;;;;;;;;;;;;;;;AAIA;;AAEA;;AANA;AACA;AACA;AAMA,IAAMA,OAAO,GAAGC,sBAAA,CAAYC,MAAZ,CAAmB;EACjCC,SAAS,EAAE,SADsB;EAGjCC,cAHiC,0BAGlBC,OAHkB,EAGT;IACtBA,OAAO,GAAGA,OAAO,IAAI,EAArB;IAEA,OAAO,KAAKC,OAAL,CAAa;MAClBC,MAAM,EAAE,MADU;MAElBC,GAAG,EAAE,cAFa;MAGlBC,QAAQ,EAAE,uBAHQ;MAIlBC,IAAI,EAAE,wBAASL,OAAT,EAAkB;QACtBM,UAAU,EAAE,KAAKC,MAAL,CAAYD,UADF;QAEtBE,OAAO,EAAE,KAAKD,MAAL,CAAYC,OAFC;QAGtBC,UAAU,EAAET,OAAO,CAACS,UAAR,IAAsBC,aAAA,CAAKC,EAAL,EAHZ;QAItBC,YAAY,EAAE,KAAKL,MAAL,CAAYK;MAJJ,CAAlB;IAJY,CAAb,EAWJC,IAXI,CAWC,UAACC,GAAD;MAAA,OAASA,GAAG,CAACT,IAAJ,CAASU,GAAlB;IAAA,CAXD,CAAP;EAYD,CAlBgC;EAoBjCC,aApBiC,2BAoBjB;IACd,OAAO,KAAKC,KAAL,CAAWhB,OAAX,CAAmB;MACxBC,MAAM,EAAE,KADgB;MAExBC,GAAG,EAAE,cAFmB;MAGxBC,QAAQ,EAAE,sBAHc;MAIxBc,EAAE,EAAE;QACFN,YAAY,EAAE,KAAKL,MAAL,CAAYK;MADxB;IAJoB,CAAnB,EAQJC,IARI,CAQC,UAACC,GAAD;MAAA,OAASA,GAAG,CAACT,IAAJ,CAASU,GAAlB;IAAA,CARD,CAAP;EASD,CA9BgC;EAgCjCI,UAhCiC,sBAgCtBC,QAhCsB,EAgCZC,IAhCY,EAgCN;IAAA;;IACzB,IAAMC,aAAa,GAAG,KAAKC,sBAAL,CAA4BH,QAA5B,CAAtB,CADyB,CAGzB;;;IACA,IAAI,CAACC,IAAD,IAAS,KAAKJ,KAAL,CAAWO,MAAX,CAAkBC,SAA3B,IAAwC,KAAKR,KAAL,CAAWO,MAAX,CAAkBE,YAA1D,IAA0E,KAAKT,KAAL,CAAWO,MAAX,CAAkBG,MAAhG,EAAwG;MACtGN,IAAI,GAAG,KAAKJ,KAAL,CAAWO,MAAX,CAAkBI,UAAlB,EAAP;IACD;;IAED,IAAIC,QAAJ;;IAEA,IAAIT,QAAQ,CAACU,OAAT,IAAoBV,QAAQ,CAACW,SAAjC,EAA4C;MAC1CF,QAAQ,aAAMT,QAAQ,CAACU,OAAf,cAA0BV,QAAQ,CAACW,SAAnC,SAAR;IACD,CAFD,MAGK;MACHF,QAAQ,aAAM,KAAKZ,KAAL,CAAWe,SAAjB,SAAR;IACD;;IAED,IAAIC,MAAJ;IAEA,OAAO,KAAKhB,KAAL,CAAWiB,WAAX,CAAuBC,YAAvB,GACJC,KADI,CACE;MAAA,OAAM,KAAI,CAACnB,KAAL,CAAWiB,WAAX,CAAuBG,cAAvB,EAAN;IAAA,CADF,EAEJxB,IAFI;MAAA,mFAEC,iBAAOyB,KAAP;QAAA;QAAA;UAAA;YAAA;cAAA;gBACEC,OADF,GACY;kBAACC,aAAa,EAAEF,KAAK,CAACG,QAAN;gBAAhB,CADZ;gBAGEC,UAHF,GAGe;kBACjBC,OAAO,EAAE,YADQ;kBAEjBvC,QAAQ,EAAE;gBAFO,CAHf;gBAQEwC,SARF,GAQc;kBAChBD,OAAO,EAAE,YADO;kBAEhBvC,QAAQ,EAAE;gBAFM,CARd;gBAaEJ,OAbF,GAaY,wBAAS0C,UAAT,EAAqB;kBACnCG,IAAI,EAAExB,IAD6B;kBAEnCyB,mBAAmB,EAAE,KAFc;kBAGnCP,OAAO,EAAPA,OAHmC;kBAInCQ,MAAM,EAAE;oBACNC,UAAU,EAAE;sBACV3C,IAAI,EAAE;wBACJwC,IAAI,EAAEhB;sBADF;oBADI,CADN;oBAMNoB,MAAM,EAAE;sBACNC,IAAI,EAAE,cAACC,OAAD;wBAAA,OAAaA,OAAO,CAACC,OAArB;sBAAA;oBADA,CANF;oBASNC,QAAQ,EAAE,wBAAST,SAAT,EAAoB;sBAC5BU,KAAK,EAAE,eAACH,OAAD,EAAa;wBAClBlB,MAAM,GAAGkB,OAAO,CAAClB,MAAjB;wBAEA,OAAO;0BACLJ,QAAQ,EAAEsB,OAAO,CAACI,WADb;0BAELC,IAAI,EAAElC,aAFD;0BAGLW,MAAM,EAAE,KAAI,CAAChB,KAAL,CAAWwC,QAAX,CAAoBC,MAApB,CAA2BzB,MAA3B,IAAqCkB,OAAO,CAAClB;wBAHhD,CAAP;sBAKD;oBAT2B,CAApB;kBATJ;gBAJ2B,CAArB,CAbZ;gBAAA,iCAwCG,KAAI,CAAChB,KAAL,CAAWgC,MAAX,CAAkBjD,OAAlB,CAxCH;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAFD;;MAAA;QAAA;MAAA;IAAA,KA4CJa,IA5CI,CA4CC,UAACR,IAAD,EAAU;MACd,IAAI4B,MAAM,IAAI,CAAC5B,IAAI,CAAC4B,MAApB,EAA4B;QAC1B5B,IAAI,CAAC4B,MAAL,GAAcA,MAAd;MACD;;MAED,OAAO5B,IAAP;IACD,CAlDI,CAAP;EAmDD,CAtGgC;EAwGjCkB,sBAxGiC,kCAwGVH,QAxGU,EAwGA;IAC/B,IAAME,aAAa,GAAG,CACpB,SADoB,EAEpB,WAFoB,EAGpB,YAHoB,EAIpB,eAJoB,EAKpB,WALoB,EAMpBqC,GANoB,CAMhB,UAACC,GAAD,EAAS;MACb,IAAIxC,QAAQ,CAACwC,GAAD,CAAZ,EAAmB;QACjB,OAAO;UACLA,GAAG,EAAHA,GADK;UAELC,KAAK,EAAEzC,QAAQ,CAACwC,GAAD;QAFV,CAAP;MAID;;MAED,OAAO,IAAP;IACD,CAfqB,EAgBnBE,MAhBmB,CAgBZ,UAACC,KAAD;MAAA,OAAWC,OAAO,CAACD,KAAD,CAAlB;IAAA,CAhBY,CAAtB;;IAkBA,IAAI,KAAK9C,KAAL,CAAWe,SAAf,EAA0B;MACxBV,aAAa,CAAC2C,IAAd,CAAmB;QACjBL,GAAG,EAAE,YADY;QAEjBC,KAAK,EAAE,KAAK5C,KAAL,CAAWe;MAFD,CAAnB;IAID;;IAED,IAAI,KAAKf,KAAL,CAAWwC,QAAX,CAAoBC,MAApB,CAA2BzB,MAA/B,EAAuC;MACrCX,aAAa,CAAC2C,IAAd,CAAmB;QACjBL,GAAG,EAAE,QADY;QAEjBC,KAAK,EAAE,KAAK5C,KAAL,CAAWwC,QAAX,CAAoBC,MAApB,CAA2BzB;MAFjB,CAAnB;IAID;;IAED,IAAI,KAAKhB,KAAL,CAAWwC,QAAX,CAAoBC,MAApB,CAA2BQ,KAA/B,EAAsC;MACpC5C,aAAa,CAAC2C,IAAd,CAAmB;QACjBL,GAAG,EAAE,OADY;QAEjBC,KAAK,EAAE,KAAK5C,KAAL,CAAWwC,QAAX,CAAoBC,MAApB,CAA2BQ;MAFjB,CAAnB;IAID;;IAED,OAAO5C,aAAP;EACD,CAjJgC;EAAA;AAAA,CAAnB,CAAhB;;eAoJe3B,O"}
1
+ {"version":3,"names":["Support","WebexPlugin","extend","namespace","getFeedbackUrl","options","request","method","api","resource","body","appVersion","config","appType","feedbackId","uuid","v4","languageCode","then","res","url","getSupportUrl","webex","qs","submitLogs","metadata","logs","metadataArray","_constructFileMetadata","logger","sdkBuffer","clientBuffer","buffer","formatLogs","filename","locusId","callStart","sessionId","userId","credentials","getUserToken","catch","getClientToken","token","headers","authorization","toString","initalOpts","service","finalOpts","file","shouldAttemptReauth","phases","initialize","upload","$uri","session","tempURL","finalize","$body","logFilename","data","internal","device","map","key","value","filter","entry","Boolean","push","orgId"],"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 'callStart',\n 'feedbackId',\n 'correlationId',\n 'meetingId',\n 'surveySessionId',\n 'productAreaTag',\n 'issueTypeTag',\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.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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/internal-plugin-support",
3
- "version": "3.0.0-beta.9",
3
+ "version": "3.0.0-beta.90",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "author": "nickclar <nickclar@cisco.com>",
@@ -21,14 +21,14 @@
21
21
  ]
22
22
  },
23
23
  "dependencies": {
24
- "@webex/internal-plugin-device": "3.0.0-beta.9",
25
- "@webex/internal-plugin-search": "3.0.0-beta.9",
26
- "@webex/internal-plugin-support": "3.0.0-beta.9",
27
- "@webex/test-helper-chai": "3.0.0-beta.9",
28
- "@webex/test-helper-file": "3.0.0-beta.9",
29
- "@webex/test-helper-mock-webex": "3.0.0-beta.9",
30
- "@webex/test-helper-test-users": "3.0.0-beta.9",
31
- "@webex/webex-core": "3.0.0-beta.9",
24
+ "@webex/internal-plugin-device": "3.0.0-beta.90",
25
+ "@webex/internal-plugin-search": "3.0.0-beta.90",
26
+ "@webex/internal-plugin-support": "3.0.0-beta.90",
27
+ "@webex/test-helper-chai": "3.0.0-beta.90",
28
+ "@webex/test-helper-file": "3.0.0-beta.90",
29
+ "@webex/test-helper-mock-webex": "3.0.0-beta.90",
30
+ "@webex/test-helper-test-users": "3.0.0-beta.90",
31
+ "@webex/webex-core": "3.0.0-beta.90",
32
32
  "lodash": "^4.17.21",
33
33
  "uuid": "^3.3.2"
34
34
  }
package/src/config.js CHANGED
@@ -8,13 +8,14 @@ export default {
8
8
  atlasServiceUrl: process.env.ATLAS_SERVICE_URL || 'https://atlas-a.wbx2.com/admin/api/v1',
9
9
  atlas: process.env.ATLAS_SERVICE_URL || 'https://atlas-a.wbx2.com/admin/api/v1',
10
10
  clientLogs: process.env.CLIENT_LOGS_SERVICE_URL || 'https://client-logs-a.wbx2.com/api/v1',
11
- clientLogsServiceUrl: process.env.CLIENT_LOGS_SERVICE_URL || 'https://client-logs-a.wbx2.com/api/v1'
12
- }
11
+ clientLogsServiceUrl:
12
+ process.env.CLIENT_LOGS_SERVICE_URL || 'https://client-logs-a.wbx2.com/api/v1',
13
+ },
13
14
  },
14
15
 
15
16
  support: {
16
17
  appType: '',
17
18
  appVersion: '',
18
- languageCode: ''
19
- }
19
+ languageCode: '',
20
+ },
20
21
  };
package/src/index.js CHANGED
@@ -1,15 +1,15 @@
1
1
  /*!
2
2
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
3
  */
4
+ import '@webex/internal-plugin-device';
4
5
 
5
6
  import {registerInternalPlugin} from '@webex/webex-core';
6
7
 
7
8
  import Support from './support';
8
9
  import config from './config';
9
- import '@webex/internal-plugin-device';
10
10
 
11
11
  registerInternalPlugin('support', Support, {
12
- config
12
+ config,
13
13
  });
14
14
 
15
15
  export {default} from './support';
package/src/support.js CHANGED
@@ -20,21 +20,21 @@ const Support = WebexPlugin.extend({
20
20
  appVersion: this.config.appVersion,
21
21
  appType: this.config.appType,
22
22
  feedbackId: options.feedbackId || uuid.v4(),
23
- languageCode: this.config.languageCode
24
- })
25
- })
26
- .then((res) => res.body.url);
23
+ languageCode: this.config.languageCode,
24
+ }),
25
+ }).then((res) => res.body.url);
27
26
  },
28
27
 
29
28
  getSupportUrl() {
30
- return this.webex.request({
31
- method: 'GET',
32
- api: 'conversation',
33
- resource: 'users/deskSupportUrl',
34
- qs: {
35
- languageCode: this.config.languageCode
36
- }
37
- })
29
+ return this.webex
30
+ .request({
31
+ method: 'GET',
32
+ api: 'conversation',
33
+ resource: 'users/deskSupportUrl',
34
+ qs: {
35
+ languageCode: this.config.languageCode,
36
+ },
37
+ })
38
38
  .then((res) => res.body.url);
39
39
  },
40
40
 
@@ -42,7 +42,12 @@ const Support = WebexPlugin.extend({
42
42
  const metadataArray = this._constructFileMetadata(metadata);
43
43
 
44
44
  // this is really testing that Ampersand is fully ready. once it's ready, these exist
45
- if (!logs && this.webex.logger.sdkBuffer && this.webex.logger.clientBuffer && this.webex.logger.buffer) {
45
+ if (
46
+ !logs &&
47
+ this.webex.logger.sdkBuffer &&
48
+ this.webex.logger.clientBuffer &&
49
+ this.webex.logger.buffer
50
+ ) {
46
51
  logs = this.webex.logger.formatLogs();
47
52
  }
48
53
 
@@ -50,26 +55,26 @@ const Support = WebexPlugin.extend({
50
55
 
51
56
  if (metadata.locusId && metadata.callStart) {
52
57
  filename = `${metadata.locusId}_${metadata.callStart}.txt`;
53
- }
54
- else {
58
+ } else {
55
59
  filename = `${this.webex.sessionId}.txt`;
56
60
  }
57
61
 
58
62
  let userId;
59
63
 
60
- return this.webex.credentials.getUserToken()
64
+ return this.webex.credentials
65
+ .getUserToken()
61
66
  .catch(() => this.webex.credentials.getClientToken())
62
67
  .then(async (token) => {
63
68
  const headers = {authorization: token.toString()};
64
69
 
65
70
  const initalOpts = {
66
71
  service: 'clientLogs',
67
- resource: 'logs/urls'
72
+ resource: 'logs/urls',
68
73
  };
69
74
 
70
75
  const finalOpts = {
71
76
  service: 'clientLogs',
72
- resource: 'logs/meta'
77
+ resource: 'logs/meta',
73
78
  };
74
79
 
75
80
  const options = defaults(initalOpts, {
@@ -79,11 +84,11 @@ const Support = WebexPlugin.extend({
79
84
  phases: {
80
85
  initialize: {
81
86
  body: {
82
- file: filename
83
- }
87
+ file: filename,
88
+ },
84
89
  },
85
90
  upload: {
86
- $uri: (session) => session.tempURL
91
+ $uri: (session) => session.tempURL,
87
92
  },
88
93
  finalize: defaults(finalOpts, {
89
94
  $body: (session) => {
@@ -92,11 +97,11 @@ const Support = WebexPlugin.extend({
92
97
  return {
93
98
  filename: session.logFilename,
94
99
  data: metadataArray,
95
- userId: this.webex.internal.device.userId || session.userId
100
+ userId: this.webex.internal.device.userId || session.userId,
96
101
  };
97
- }
98
- })
99
- }
102
+ },
103
+ }),
104
+ },
100
105
  });
101
106
 
102
107
  return this.webex.upload(options);
@@ -110,48 +115,57 @@ const Support = WebexPlugin.extend({
110
115
  });
111
116
  },
112
117
 
118
+ /**
119
+ * Constructs an array of key-value pairs for log upload.
120
+ * @param {*} metadata
121
+ * @returns {array}
122
+ */
113
123
  _constructFileMetadata(metadata) {
114
124
  const metadataArray = [
115
125
  'locusId',
116
126
  'callStart',
117
127
  'feedbackId',
118
128
  'correlationId',
119
- 'meetingId'
120
- ].map((key) => {
121
- if (metadata[key]) {
122
- return {
123
- key,
124
- value: metadata[key]
125
- };
126
- }
129
+ 'meetingId',
130
+ 'surveySessionId',
131
+ 'productAreaTag',
132
+ 'issueTypeTag',
133
+ ]
134
+ .map((key) => {
135
+ if (metadata[key]) {
136
+ return {
137
+ key,
138
+ value: metadata[key],
139
+ };
140
+ }
127
141
 
128
- return null;
129
- })
142
+ return null;
143
+ })
130
144
  .filter((entry) => Boolean(entry));
131
145
 
132
146
  if (this.webex.sessionId) {
133
147
  metadataArray.push({
134
148
  key: 'trackingId',
135
- value: this.webex.sessionId
149
+ value: this.webex.sessionId,
136
150
  });
137
151
  }
138
152
 
139
153
  if (this.webex.internal.device.userId) {
140
154
  metadataArray.push({
141
155
  key: 'userId',
142
- value: this.webex.internal.device.userId
156
+ value: this.webex.internal.device.userId,
143
157
  });
144
158
  }
145
159
 
146
160
  if (this.webex.internal.device.orgId) {
147
161
  metadataArray.push({
148
162
  key: 'orgId',
149
- value: this.webex.internal.device.orgId
163
+ value: this.webex.internal.device.orgId,
150
164
  });
151
165
  }
152
166
 
153
167
  return metadataArray;
154
- }
168
+ },
155
169
  });
156
170
 
157
171
  export default Support;
@@ -20,46 +20,46 @@ describe('plugin-support', function () {
20
20
 
21
21
  let sampleTextOne = 'sample-text-one.txt';
22
22
 
23
- before('fetch fixtures', () => Promise.all([
24
- fh.fetch(sampleTextOne)
25
- ])
26
- .then((res) => {
27
- [
28
- sampleTextOne
29
- ] = res;
30
- }));
23
+ before('fetch fixtures', () =>
24
+ Promise.all([fh.fetch(sampleTextOne)]).then((res) => {
25
+ [sampleTextOne] = res;
26
+ })
27
+ );
31
28
 
32
29
  // Disabled because rackspace is broken
33
30
  describe('#submitLogs()', () => {
34
31
  describe('when the current user is authorized', () => {
35
- before(() => testUsers.create({count: 1})
36
- .then((users) => {
32
+ before(() =>
33
+ testUsers.create({count: 1}).then((users) => {
37
34
  webex = new WebexCore({
38
35
  credentials: {
39
- authorization: users[0].token
40
- }
36
+ authorization: users[0].token,
37
+ },
41
38
  });
42
39
 
43
40
  return webex.internal.device.register();
44
- }));
45
-
46
- it('uploads logs', () => webex.internal.support.submitLogs({}, sampleTextOne)
47
- .then((body) => {
48
- assert.isDefined(body);
49
- assert.property(body, 'url');
50
- assert.property(body, 'userId');
51
- assert.equal(body.userId, webex.internal.device.userId);
52
41
  })
53
- // Atlas has a really unfortunate rate limit in place, so we're going
54
- // to rely on hope that enough of the node/browser runs don't get rate
55
- // limited to prove this code works.
56
- .catch((err) => {
57
- if (err instanceof TooManyRequests) {
58
- return;
59
- }
42
+ );
43
+
44
+ it('uploads logs', () =>
45
+ webex.internal.support
46
+ .submitLogs({}, sampleTextOne)
47
+ .then((body) => {
48
+ assert.isDefined(body);
49
+ assert.property(body, 'url');
50
+ assert.property(body, 'userId');
51
+ assert.equal(body.userId, webex.internal.device.userId);
52
+ })
53
+ // Atlas has a really unfortunate rate limit in place, so we're going
54
+ // to rely on hope that enough of the node/browser runs don't get rate
55
+ // limited to prove this code works.
56
+ .catch((err) => {
57
+ if (err instanceof TooManyRequests) {
58
+ return;
59
+ }
60
60
 
61
- throw err;
62
- }));
61
+ throw err;
62
+ }));
63
63
  });
64
64
  });
65
65
  });
@@ -16,8 +16,8 @@ describe('plugin-support', function () {
16
16
  beforeEach(() => {
17
17
  webex = new MockWebex({
18
18
  children: {
19
- support: Support
20
- }
19
+ support: Support,
20
+ },
21
21
  });
22
22
 
23
23
  webex.internal.device.userId = 'user-abc-123';
@@ -29,18 +29,20 @@ describe('plugin-support', function () {
29
29
  const result = webex.internal.support._constructFileMetadata({});
30
30
 
31
31
  assert.equal(result.length, 3);
32
- assert.deepEqual(result, [{
33
- key: 'trackingId',
34
- value: 'mock-webex_88888888-4444-4444-4444-aaaaaaaaaaaa'
35
- },
36
- {
37
- key: 'userId',
38
- value: webex.internal.device.userId
39
- },
40
- {
41
- key: 'orgId',
42
- value: webex.internal.device.orgId
43
- }]);
32
+ assert.deepEqual(result, [
33
+ {
34
+ key: 'trackingId',
35
+ value: 'mock-webex_88888888-4444-4444-4444-aaaaaaaaaaaa',
36
+ },
37
+ {
38
+ key: 'userId',
39
+ value: webex.internal.device.userId,
40
+ },
41
+ {
42
+ key: 'orgId',
43
+ value: webex.internal.device.orgId,
44
+ },
45
+ ]);
44
46
  });
45
47
 
46
48
  it('does not send sessionId key if sessionId is not defined', () => {
@@ -66,6 +68,30 @@ describe('plugin-support', function () {
66
68
 
67
69
  assert.isTrue(result.filter((r) => r.key === 'orgId').length === 0);
68
70
  });
71
+
72
+ it('sends surveySessionId if specified in metadata', () => {
73
+ const surveySessionId = 'survey-session-id';
74
+ const result = webex.internal.support._constructFileMetadata({surveySessionId});
75
+ const found = result.find((attr) => attr.key === 'surveySessionId');
76
+
77
+ assert.equal(found?.value, surveySessionId);
78
+ });
79
+
80
+ it('sends productAreaTag if specified in metadata', () => {
81
+ const productAreaTag = 'product-area-tag';
82
+ const result = webex.internal.support._constructFileMetadata({productAreaTag});
83
+ const found = result.find((attr) => attr.key === 'productAreaTag');
84
+
85
+ assert.equal(found?.value, productAreaTag);
86
+ });
87
+
88
+ it('sends issueTypeTag if specified in metadata', () => {
89
+ const issueTypeTag = 'issueTypeTag';
90
+ const result = webex.internal.support._constructFileMetadata({issueTypeTag});
91
+ const found = result.find((attr) => attr.key === 'issueTypeTag');
92
+
93
+ assert.equal(found?.value, issueTypeTag);
94
+ });
69
95
  });
70
96
 
71
97
  describe('#submitLogs()', () => {