@webex/test-users 3.0.0-beta.9 → 3.0.0-beta.91

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,7 +21,7 @@ npm install --save @webex/test-users
21
21
 
22
22
  ## Usage
23
23
 
24
- *Note: This package is NODE only, not for browser usage*
24
+ _Note: This package is NODE only, not for browser usage_
25
25
 
26
26
  With the test users library, you can create and remove Webex test users:
27
27
 
@@ -32,7 +32,7 @@ createTestUser({displayName: 'Test User'}).then((myTestUser) => {
32
32
  // Do something amazing with myTestUser
33
33
 
34
34
  // When done, remove the test user
35
- removeTestUser(myTestUser)
35
+ removeTestUser(myTestUser);
36
36
  });
37
37
  ```
38
38
 
@@ -68,7 +68,7 @@ createTestUser({whistler: true}).then((myTestUser) => {
68
68
  // Do something amazing with myTestUser
69
69
 
70
70
  // When done, remove the test user
71
- removeTestUser(myTestUser)
71
+ removeTestUser(myTestUser);
72
72
  });
73
73
  ```
74
74
 
package/dist/index.js CHANGED
@@ -1,64 +1,49 @@
1
1
  "use strict";
2
2
 
3
3
  var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
4
-
5
- var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
6
-
7
- var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
8
-
4
+ var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
5
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
9
6
  var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
10
-
7
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
8
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
9
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
10
+ var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
11
11
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
12
-
13
12
  _Object$defineProperty(exports, "__esModule", {
14
13
  value: true
15
14
  });
16
-
17
15
  exports.createTestUser = createTestUser;
18
-
19
16
  _Object$defineProperty(exports, "createWhistlerTestUser", {
20
17
  enumerable: true,
21
18
  get: function get() {
22
19
  return _whistler.default;
23
20
  }
24
21
  });
25
-
26
22
  exports.loginTestUser = loginTestUser;
27
23
  exports.removeTestUser = removeTestUser;
28
-
29
24
  _Object$defineProperty(exports, "removeWhistlerTestUser", {
30
25
  enumerable: true,
31
26
  get: function get() {
32
27
  return _whistler.removeTestUser;
33
28
  }
34
29
  });
35
-
36
30
  var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
37
-
38
31
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
39
-
40
- var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign"));
41
-
32
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
42
33
  var _defaultsDeep2 = _interopRequireDefault(require("lodash/defaultsDeep"));
43
-
44
34
  var _assert = _interopRequireDefault(require("assert"));
45
-
46
35
  var _uuid = _interopRequireDefault(require("uuid"));
47
-
48
36
  var _btoa = _interopRequireDefault(require("btoa"));
49
-
50
37
  var _nodeRandomName = _interopRequireDefault(require("node-random-name"));
51
-
52
38
  var _httpCore = require("@webex/http-core");
53
-
54
39
  var _whistler = _interopRequireWildcard(require("./whistler"));
55
-
56
40
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
57
-
58
41
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
59
-
42
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
43
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
60
44
  var BASE_PATH_SECURE = '/users/test_users_s';
61
45
  var BASE_PATH = '/users/test_users';
46
+
62
47
  /**
63
48
  * Computes `expires` and `refresh_token_expires` from `expires_in` and
64
49
  * `refresh_token_expires_in` and creates an `authorization` string.
@@ -66,27 +51,22 @@ var BASE_PATH = '/users/test_users';
66
51
  * @private
67
52
  * @returns {Object}
68
53
  */
69
-
70
54
  function fixToken(token) {
71
55
  var now = (0, _now.default)();
72
-
73
56
  if (token.expires_in && !token.expires) {
74
57
  token.expires = now + token.expires_in * 1000;
75
58
  }
76
-
77
59
  if (token.refresh_token_expires_in && !token.refresh_token_expires) {
78
60
  /* eslint camelcase: [0] */
79
61
  token.refresh_token_expires = now + token.refresh_token_expires_in * 1000;
80
62
  }
81
-
82
63
  if (token.token_type && token.access_token) {
83
64
  token.authorization = "".concat(token.token_type, " ").concat(token.access_token);
84
65
  }
85
-
86
66
  return token;
87
67
  }
88
-
89
68
  var clientToken;
69
+
90
70
  /**
91
71
  * Fetches credentials to talk to the test_users_s endpoint
92
72
  *
@@ -98,16 +78,13 @@ var clientToken;
98
78
  * @private
99
79
  * @returns {String}
100
80
  */
101
-
102
81
  function getClientCredentials(_ref) {
103
82
  var clientId = _ref.clientId,
104
- clientSecret = _ref.clientSecret,
105
- idbrokerUrl = _ref.idbrokerUrl;
106
-
83
+ clientSecret = _ref.clientSecret,
84
+ idbrokerUrl = _ref.idbrokerUrl;
107
85
  if (clientToken) {
108
86
  return _promise.default.resolve(clientToken);
109
87
  }
110
-
111
88
  return (0, _httpCore.request)({
112
89
  method: 'POST',
113
90
  uri: "".concat(idbrokerUrl, "/idb/oauth2/v1/access_token"),
@@ -132,6 +109,7 @@ function getClientCredentials(_ref) {
132
109
  return clientToken;
133
110
  });
134
111
  }
112
+
135
113
  /**
136
114
  * Makes a request authorized with client credentials
137
115
  * @param {Object} options
@@ -142,8 +120,6 @@ function getClientCredentials(_ref) {
142
120
  * @private
143
121
  * @returns {Promise<HttpResponseObject>}
144
122
  */
145
-
146
-
147
123
  function requestWithAuth(options) {
148
124
  return getClientCredentials(options.body).then(function (authorization) {
149
125
  options.headers = options.headers || {};
@@ -151,6 +127,7 @@ function requestWithAuth(options) {
151
127
  return (0, _httpCore.request)(options);
152
128
  });
153
129
  }
130
+
154
131
  /**
155
132
  * @typedef {Object} AccessTokenObject
156
133
  * @property {string} token.access_token
@@ -181,51 +158,44 @@ function requestWithAuth(options) {
181
158
  */
182
159
 
183
160
  /**
184
- * @typedef {Object} TestUserObject
185
- * @property {string} password
186
- * @property {string} emailAddress
187
- * @property {string} displayName
188
- * @property {string} id
189
- * @property {string} userName
190
- * @property {string} email
191
- * @property {string} name
192
- * @property {string} givenName
193
- * @property {string} type
194
- * @property {Array.<string>} entitlements
195
- * @property {string} orgId
196
- * @property {AccessTokenObject} token
197
- */
161
+ * @typedef {Object} TestUserObject
162
+ * @property {string} password
163
+ * @property {string} emailAddress
164
+ * @property {string} displayName
165
+ * @property {string} id
166
+ * @property {string} userName
167
+ * @property {string} email
168
+ * @property {string} name
169
+ * @property {string} givenName
170
+ * @property {string} type
171
+ * @property {Array.<string>} entitlements
172
+ * @property {string} orgId
173
+ * @property {AccessTokenObject} token
174
+ */
198
175
 
199
176
  /**
200
177
  * Creates a test user
201
178
  * @param {CreateUserOptions} options
202
179
  * @returns {Promise.<TestUserObject>}
203
180
  */
204
-
205
-
206
181
  function createTestUser() {
207
182
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
208
183
  var clientId = options.clientId || process.env.WEBEX_CLIENT_ID;
209
184
  var clientSecret = options.clientSecret || process.env.WEBEX_CLIENT_SECRET;
210
185
  var idbrokerUrl = options.idbrokerUrl || process.env.IDBROKER_BASE_URL;
211
186
  var cigServiceUrl = options.cigServiceUrl || process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL || process.env.WEBEX_TEST_USERS_CONVERSATION_SERVICE_URL;
212
-
213
187
  if (!clientId) {
214
188
  throw new Error('options.clientId or process.env.WEBEX_CLIENT_ID must be defined');
215
189
  }
216
-
217
190
  if (!clientSecret) {
218
191
  throw new Error('options.clientSecret or process.env.WEBEX_CLIENT_SECRET must be defined');
219
192
  }
220
-
221
193
  if (!idbrokerUrl) {
222
194
  throw new Error('options.idbrokerUrl or process.env.IDBROKER_BASE_URL must be defined');
223
195
  }
224
-
225
196
  if (!cigServiceUrl) {
226
197
  throw new Error('options.cigServiceUrl or process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL must be defined');
227
198
  }
228
-
229
199
  var body = {
230
200
  authCodeOnly: options.authCodeOnly,
231
201
  clientId: clientId,
@@ -248,15 +218,16 @@ function createTestUser() {
248
218
  json: true,
249
219
  body: body
250
220
  }).then(function (res) {
251
- return (0, _assign.default)({
221
+ return _objectSpread(_objectSpread({
252
222
  password: body.password,
253
223
  emailAddress: res.body.user.email,
254
224
  displayName: res.body.user.name
255
- }, res.body.user, {
225
+ }, res.body.user), {}, {
256
226
  token: fixToken(res.body.token)
257
227
  });
258
228
  });
259
229
  }
230
+
260
231
  /**
261
232
  * Exchanges a user name/password for an access token
262
233
  * @param {Object} options
@@ -268,25 +239,19 @@ function createTestUser() {
268
239
  * @param {string} options.cigServiceUrl
269
240
  * @returns {Promise.<AccessTokenObject>}
270
241
  */
271
-
272
-
273
242
  function loginTestUser(options) {
274
243
  var clientId = options.clientId || process.env.WEBEX_CLIENT_ID;
275
244
  var clientSecret = options.clientSecret || process.env.WEBEX_CLIENT_SECRET;
276
245
  var cigServiceUrl = options.cigServiceUrl || process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL || process.env.WEBEX_TEST_USERS_CONVERSATION_SERVICE_URL;
277
-
278
246
  if (!clientId) {
279
247
  throw new Error('options.clientId or process.env.WEBEX_CLIENT_ID must be defined');
280
248
  }
281
-
282
249
  if (!clientSecret) {
283
250
  throw new Error('options.clientSecret or process.env.WEBEX_CLIENT_SECRET must be defined');
284
251
  }
285
-
286
252
  if (!cigServiceUrl) {
287
253
  throw new Error('options.cigServiceUrl or process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL must be defined');
288
254
  }
289
-
290
255
  return (0, _httpCore.request)({
291
256
  method: 'POST',
292
257
  uri: "".concat(cigServiceUrl).concat(BASE_PATH, "/login"),
@@ -299,6 +264,7 @@ function loginTestUser(options) {
299
264
  return fixToken(res.body);
300
265
  });
301
266
  }
267
+
302
268
  /**
303
269
  * Removes a test user
304
270
  * @param {Object} options
@@ -309,27 +275,21 @@ function loginTestUser(options) {
309
275
  * @param {string} [options.token.refresh_token]
310
276
  * @returns {Promise}
311
277
  */
312
-
313
-
314
278
  function removeTestUser() {
315
279
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
316
280
  var cigServiceUrl = options.cigServiceUrl || process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL || process.env.WEBEX_TEST_USERS_CONVERSATION_SERVICE_URL;
317
-
318
281
  if (!cigServiceUrl) {
319
282
  throw new Error('options.cigServiceUrl or process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL must be defined');
320
283
  }
321
-
322
284
  if (!options.id) {
323
285
  return _promise.default.reject(new Error('options.id is required'));
324
286
  }
325
-
326
287
  if (!options.token) {
327
288
  return loginTestUser(options).then(function (token) {
328
289
  options.token = token;
329
290
  return removeTestUser(options);
330
291
  });
331
292
  }
332
-
333
293
  (0, _assert.default)(options.token.authorization, 'options.token.authorization must be defined');
334
294
  return (0, _httpCore.request)({
335
295
  method: 'POST',
@@ -343,8 +303,8 @@ function removeTestUser() {
343
303
  refresh_token: options.token.refresh_token,
344
304
  user_type: options.userType || 'PERSON'
345
305
  /* eslint-enable camelcase */
346
-
347
306
  },
307
+
348
308
  uri: "".concat(cigServiceUrl).concat(BASE_PATH, "/delete")
349
309
  });
350
310
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["BASE_PATH_SECURE","BASE_PATH","fixToken","token","now","expires_in","expires","refresh_token_expires_in","refresh_token_expires","token_type","access_token","authorization","clientToken","getClientCredentials","clientId","clientSecret","idbrokerUrl","resolve","request","method","uri","json","form","grant_type","scope","client_id","client_secret","headers","btoa","then","res","body","requestWithAuth","options","createTestUser","process","env","WEBEX_CLIENT_ID","WEBEX_CLIENT_SECRET","IDBROKER_BASE_URL","cigServiceUrl","WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL","WEBEX_TEST_USERS_CONVERSATION_SERVICE_URL","Error","authCodeOnly","displayName","randomName","emailTemplate","emailAddress","entitlements","machineType","orgId","password","uuid","v4","roles","scopes","WEBEX_SCOPE","type","user","email","name","loginTestUser","removeTestUser","id","reject","assert","user_id","refresh_token","user_type","userType"],"sources":["index.js"],"sourcesContent":["import assert from 'assert';\n\nimport uuid from 'uuid';\nimport btoa from 'btoa';\nimport _ from 'lodash';\nimport randomName from 'node-random-name';\nimport {request} from '@webex/http-core';\n\nconst BASE_PATH_SECURE = '/users/test_users_s';\nconst BASE_PATH = '/users/test_users';\n\n/**\n * Computes `expires` and `refresh_token_expires` from `expires_in` and\n * `refresh_token_expires_in` and creates an `authorization` string.\n * @param {Object} token\n * @private\n * @returns {Object}\n */\nfunction fixToken(token) {\n const now = Date.now();\n\n if (token.expires_in && !token.expires) {\n token.expires = now + token.expires_in * 1000;\n }\n\n if (token.refresh_token_expires_in && !token.refresh_token_expires) {\n /* eslint camelcase: [0] */\n token.refresh_token_expires = now + token.refresh_token_expires_in * 1000;\n }\n\n if (token.token_type && token.access_token) {\n token.authorization = `${token.token_type} ${token.access_token}`;\n }\n\n return token;\n}\n\nlet clientToken;\n\n/**\n * Fetches credentials to talk to the test_users_s endpoint\n *\n * Caches result in `clientToken` variable for multiple runs\n * @param {Object} options\n * @param {string} options.clientId\n * @param {string} options.clientSecret\n * @param {string} options.idbrokerUrl\n * @private\n * @returns {String}\n */\nfunction getClientCredentials({clientId, clientSecret, idbrokerUrl}) {\n if (clientToken) {\n return Promise.resolve(clientToken);\n }\n\n return request({\n method: 'POST',\n uri: `${idbrokerUrl}/idb/oauth2/v1/access_token`,\n json: true,\n form: {\n grant_type: 'client_credentials',\n scope: 'Identity:SCIM webexsquare:get_conversation',\n client_id: clientId,\n client_secret: clientSecret\n },\n headers: {\n // Note: we can't request's auth hash here because this endpoint expects\n // us to send the auth header *without including \"Basic \"* before the\n // token string\n authorization: btoa(`${clientId}:${clientSecret}`)\n }\n })\n .then((res) => {\n const token = fixToken(res.body);\n\n return `${token.token_type} ${token.access_token}`;\n })\n .then((token) => {\n clientToken = token;\n\n return clientToken;\n });\n}\n\n/**\n * Makes a request authorized with client credentials\n * @param {Object} options\n * @param {Object} options.body\n * @param {string} options.body.clientId\n * @param {string} options.body.clientSecret\n * @param {string} options.body.idbrokerUrl\n * @private\n * @returns {Promise<HttpResponseObject>}\n */\nfunction requestWithAuth(options) {\n return getClientCredentials(options.body)\n .then((authorization) => {\n options.headers = options.headers || {};\n options.headers.authorization = authorization;\n\n return request(options);\n });\n}\n\n/**\n * @typedef {Object} AccessTokenObject\n * @property {string} token.access_token\n * @property {Number} token.expires_in\n * @property {string} token.token_type\n * @property {string} token.refresh_token\n * @property {Number} token.refresh_token_expires_in\n * @property {string} token.expires\n * @property {string} token.refresh_token_expires\n */\n\n/**\n * @typedef {Object} CreateUserOptions\n * @property {boolean} [authCodeOnly] generates auth_code\n * @param {string} [clientId] defaults to WEBEX_CLIENT_ID\n * @param {string} [clientSecret] defaults to WEBEX_CLIENT_SECRET\n * @param {string} [cigServiceUrl] defaults to WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL\n * @property {string} [displayName]\n * @property {string} [emailAddress]\n * @property {Array.<string>} [entitlements]\n * @param {string} [idbrokerUrl] defaults to IDBROKER_BASE_URL\n * @property {string} [machineType] used when creating a machine user/device\n * @property {string} [orgId] organization ID to create the user under\n * @property {string} [password] defaults to a random password\n * @property {string} [roles] defaults to []\n * @property {string} [scope] defaults to WEBEX_SCOPE\n * @property {string} [type] used to create a machine\n */\n\n/**\n * @typedef {Object} TestUserObject\n * @property {string} password\n * @property {string} emailAddress\n * @property {string} displayName\n * @property {string} id\n * @property {string} userName\n * @property {string} email\n * @property {string} name\n * @property {string} givenName\n * @property {string} type\n * @property {Array.<string>} entitlements\n * @property {string} orgId\n * @property {AccessTokenObject} token\n */\n\n/**\n * Creates a test user\n * @param {CreateUserOptions} options\n * @returns {Promise.<TestUserObject>}\n */\nexport function createTestUser(options = {}) {\n const clientId = options.clientId || process.env.WEBEX_CLIENT_ID;\n const clientSecret = options.clientSecret || process.env.WEBEX_CLIENT_SECRET;\n const idbrokerUrl = options.idbrokerUrl || process.env.IDBROKER_BASE_URL;\n const cigServiceUrl = options.cigServiceUrl || process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL || process.env.WEBEX_TEST_USERS_CONVERSATION_SERVICE_URL;\n\n if (!clientId) {\n throw new Error('options.clientId or process.env.WEBEX_CLIENT_ID must be defined');\n }\n\n if (!clientSecret) {\n throw new Error('options.clientSecret or process.env.WEBEX_CLIENT_SECRET must be defined');\n }\n\n if (!idbrokerUrl) {\n throw new Error('options.idbrokerUrl or process.env.IDBROKER_BASE_URL must be defined');\n }\n\n if (!cigServiceUrl) {\n throw new Error('options.cigServiceUrl or process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL must be defined');\n }\n\n const body = {\n authCodeOnly: options.authCodeOnly,\n clientId,\n clientSecret,\n displayName: options.displayName || randomName(),\n emailTemplate: options.emailAddress,\n entitlements: options.entitlements || [\n 'spark',\n 'squaredCallInitiation',\n 'squaredRoomModeration',\n 'squaredInviter',\n 'webExSquared'\n ],\n idbrokerUrl,\n machineType: options.machineType,\n orgId: options.orgId,\n // The five characters on the end are to hit all the password requirements\n password: options.password || `${uuid.v4()}zAY1*`,\n roles: options.roles || [],\n scopes: options.scope || process.env.WEBEX_SCOPE,\n type: options.type\n };\n\n return requestWithAuth({\n method: 'POST',\n uri: `${cigServiceUrl}${BASE_PATH_SECURE}`,\n json: true,\n body\n })\n .then((res) => Object.assign({\n password: body.password,\n emailAddress: res.body.user.email,\n displayName: res.body.user.name\n }, res.body.user, {token: fixToken(res.body.token)}));\n}\n\n/**\n * Exchanges a user name/password for an access token\n * @param {Object} options\n * @param {string} options.id\n * @param {string} options.email\n * @param {string} options.password\n * @param {string} options.clientId\n * @param {string} options.clientSecret\n * @param {string} options.cigServiceUrl\n * @returns {Promise.<AccessTokenObject>}\n */\nexport function loginTestUser(options) {\n const clientId = options.clientId || process.env.WEBEX_CLIENT_ID;\n const clientSecret = options.clientSecret || process.env.WEBEX_CLIENT_SECRET;\n const cigServiceUrl = options.cigServiceUrl || process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL || process.env.WEBEX_TEST_USERS_CONVERSATION_SERVICE_URL;\n\n if (!clientId) {\n throw new Error('options.clientId or process.env.WEBEX_CLIENT_ID must be defined');\n }\n\n if (!clientSecret) {\n throw new Error('options.clientSecret or process.env.WEBEX_CLIENT_SECRET must be defined');\n }\n\n if (!cigServiceUrl) {\n throw new Error('options.cigServiceUrl or process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL must be defined');\n }\n\n return request({\n method: 'POST',\n uri: `${cigServiceUrl}${BASE_PATH}/login`,\n json: true,\n body: _.defaultsDeep(options, {\n clientId,\n clientSecret\n })\n })\n .then((res) => fixToken(res.body));\n}\n\n/**\n * Removes a test user\n * @param {Object} options\n * @param {string} options.id user id to remove\n * @param {string} options.cigServiceUrl\n * @param {Object} options.token\n * @param {string} options.token.authorization\n * @param {string} [options.token.refresh_token]\n * @returns {Promise}\n */\nexport function removeTestUser(options = {}) {\n const cigServiceUrl = options.cigServiceUrl || process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL || process.env.WEBEX_TEST_USERS_CONVERSATION_SERVICE_URL;\n\n if (!cigServiceUrl) {\n throw new Error('options.cigServiceUrl or process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL must be defined');\n }\n\n if (!options.id) {\n return Promise.reject(new Error('options.id is required'));\n }\n\n if (!options.token) {\n return loginTestUser(options)\n .then((token) => {\n options.token = token;\n\n return removeTestUser(options);\n });\n }\n\n assert(options.token.authorization, 'options.token.authorization must be defined');\n\n return request({\n method: 'POST',\n json: true,\n headers: {\n authorization: options.token.authorization\n },\n body: {\n /* eslint-disable camelcase */\n user_id: options.id,\n refresh_token: options.token.refresh_token,\n user_type: options.userType || 'PERSON'\n /* eslint-enable camelcase */\n },\n uri: `${cigServiceUrl}${BASE_PATH}/delete`\n });\n}\n\nexport {\n default as createWhistlerTestUser,\n removeTestUser as removeWhistlerTestUser\n} from './whistler';\n"],"mappings":"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"}
1
+ {"version":3,"names":["BASE_PATH_SECURE","BASE_PATH","fixToken","token","now","expires_in","expires","refresh_token_expires_in","refresh_token_expires","token_type","access_token","authorization","clientToken","getClientCredentials","clientId","clientSecret","idbrokerUrl","resolve","request","method","uri","json","form","grant_type","scope","client_id","client_secret","headers","btoa","then","res","body","requestWithAuth","options","createTestUser","process","env","WEBEX_CLIENT_ID","WEBEX_CLIENT_SECRET","IDBROKER_BASE_URL","cigServiceUrl","WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL","WEBEX_TEST_USERS_CONVERSATION_SERVICE_URL","Error","authCodeOnly","displayName","randomName","emailTemplate","emailAddress","entitlements","machineType","orgId","password","uuid","v4","roles","scopes","WEBEX_SCOPE","type","user","email","name","loginTestUser","removeTestUser","id","reject","assert","user_id","refresh_token","user_type","userType"],"sources":["index.js"],"sourcesContent":["import assert from 'assert';\n\nimport uuid from 'uuid';\nimport btoa from 'btoa';\nimport _ from 'lodash';\nimport randomName from 'node-random-name';\nimport {request} from '@webex/http-core';\n\nconst BASE_PATH_SECURE = '/users/test_users_s';\nconst BASE_PATH = '/users/test_users';\n\n/**\n * Computes `expires` and `refresh_token_expires` from `expires_in` and\n * `refresh_token_expires_in` and creates an `authorization` string.\n * @param {Object} token\n * @private\n * @returns {Object}\n */\nfunction fixToken(token) {\n const now = Date.now();\n\n if (token.expires_in && !token.expires) {\n token.expires = now + token.expires_in * 1000;\n }\n\n if (token.refresh_token_expires_in && !token.refresh_token_expires) {\n /* eslint camelcase: [0] */\n token.refresh_token_expires = now + token.refresh_token_expires_in * 1000;\n }\n\n if (token.token_type && token.access_token) {\n token.authorization = `${token.token_type} ${token.access_token}`;\n }\n\n return token;\n}\n\nlet clientToken;\n\n/**\n * Fetches credentials to talk to the test_users_s endpoint\n *\n * Caches result in `clientToken` variable for multiple runs\n * @param {Object} options\n * @param {string} options.clientId\n * @param {string} options.clientSecret\n * @param {string} options.idbrokerUrl\n * @private\n * @returns {String}\n */\nfunction getClientCredentials({clientId, clientSecret, idbrokerUrl}) {\n if (clientToken) {\n return Promise.resolve(clientToken);\n }\n\n return request({\n method: 'POST',\n uri: `${idbrokerUrl}/idb/oauth2/v1/access_token`,\n json: true,\n form: {\n grant_type: 'client_credentials',\n scope: 'Identity:SCIM webexsquare:get_conversation',\n client_id: clientId,\n client_secret: clientSecret,\n },\n headers: {\n // Note: we can't request's auth hash here because this endpoint expects\n // us to send the auth header *without including \"Basic \"* before the\n // token string\n authorization: btoa(`${clientId}:${clientSecret}`),\n },\n })\n .then((res) => {\n const token = fixToken(res.body);\n\n return `${token.token_type} ${token.access_token}`;\n })\n .then((token) => {\n clientToken = token;\n\n return clientToken;\n });\n}\n\n/**\n * Makes a request authorized with client credentials\n * @param {Object} options\n * @param {Object} options.body\n * @param {string} options.body.clientId\n * @param {string} options.body.clientSecret\n * @param {string} options.body.idbrokerUrl\n * @private\n * @returns {Promise<HttpResponseObject>}\n */\nfunction requestWithAuth(options) {\n return getClientCredentials(options.body).then((authorization) => {\n options.headers = options.headers || {};\n options.headers.authorization = authorization;\n\n return request(options);\n });\n}\n\n/**\n * @typedef {Object} AccessTokenObject\n * @property {string} token.access_token\n * @property {Number} token.expires_in\n * @property {string} token.token_type\n * @property {string} token.refresh_token\n * @property {Number} token.refresh_token_expires_in\n * @property {string} token.expires\n * @property {string} token.refresh_token_expires\n */\n\n/**\n * @typedef {Object} CreateUserOptions\n * @property {boolean} [authCodeOnly] generates auth_code\n * @param {string} [clientId] defaults to WEBEX_CLIENT_ID\n * @param {string} [clientSecret] defaults to WEBEX_CLIENT_SECRET\n * @param {string} [cigServiceUrl] defaults to WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL\n * @property {string} [displayName]\n * @property {string} [emailAddress]\n * @property {Array.<string>} [entitlements]\n * @param {string} [idbrokerUrl] defaults to IDBROKER_BASE_URL\n * @property {string} [machineType] used when creating a machine user/device\n * @property {string} [orgId] organization ID to create the user under\n * @property {string} [password] defaults to a random password\n * @property {string} [roles] defaults to []\n * @property {string} [scope] defaults to WEBEX_SCOPE\n * @property {string} [type] used to create a machine\n */\n\n/**\n * @typedef {Object} TestUserObject\n * @property {string} password\n * @property {string} emailAddress\n * @property {string} displayName\n * @property {string} id\n * @property {string} userName\n * @property {string} email\n * @property {string} name\n * @property {string} givenName\n * @property {string} type\n * @property {Array.<string>} entitlements\n * @property {string} orgId\n * @property {AccessTokenObject} token\n */\n\n/**\n * Creates a test user\n * @param {CreateUserOptions} options\n * @returns {Promise.<TestUserObject>}\n */\nexport function createTestUser(options = {}) {\n const clientId = options.clientId || process.env.WEBEX_CLIENT_ID;\n const clientSecret = options.clientSecret || process.env.WEBEX_CLIENT_SECRET;\n const idbrokerUrl = options.idbrokerUrl || process.env.IDBROKER_BASE_URL;\n const cigServiceUrl =\n options.cigServiceUrl ||\n process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL ||\n process.env.WEBEX_TEST_USERS_CONVERSATION_SERVICE_URL;\n\n if (!clientId) {\n throw new Error('options.clientId or process.env.WEBEX_CLIENT_ID must be defined');\n }\n\n if (!clientSecret) {\n throw new Error('options.clientSecret or process.env.WEBEX_CLIENT_SECRET must be defined');\n }\n\n if (!idbrokerUrl) {\n throw new Error('options.idbrokerUrl or process.env.IDBROKER_BASE_URL must be defined');\n }\n\n if (!cigServiceUrl) {\n throw new Error(\n 'options.cigServiceUrl or process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL must be defined'\n );\n }\n\n const body = {\n authCodeOnly: options.authCodeOnly,\n clientId,\n clientSecret,\n displayName: options.displayName || randomName(),\n emailTemplate: options.emailAddress,\n entitlements: options.entitlements || [\n 'spark',\n 'squaredCallInitiation',\n 'squaredRoomModeration',\n 'squaredInviter',\n 'webExSquared',\n ],\n idbrokerUrl,\n machineType: options.machineType,\n orgId: options.orgId,\n // The five characters on the end are to hit all the password requirements\n password: options.password || `${uuid.v4()}zAY1*`,\n roles: options.roles || [],\n scopes: options.scope || process.env.WEBEX_SCOPE,\n type: options.type,\n };\n\n return requestWithAuth({\n method: 'POST',\n uri: `${cigServiceUrl}${BASE_PATH_SECURE}`,\n json: true,\n body,\n }).then((res) => ({\n password: body.password,\n emailAddress: res.body.user.email,\n displayName: res.body.user.name,\n ...res.body.user,\n token: fixToken(res.body.token),\n }));\n}\n\n/**\n * Exchanges a user name/password for an access token\n * @param {Object} options\n * @param {string} options.id\n * @param {string} options.email\n * @param {string} options.password\n * @param {string} options.clientId\n * @param {string} options.clientSecret\n * @param {string} options.cigServiceUrl\n * @returns {Promise.<AccessTokenObject>}\n */\nexport function loginTestUser(options) {\n const clientId = options.clientId || process.env.WEBEX_CLIENT_ID;\n const clientSecret = options.clientSecret || process.env.WEBEX_CLIENT_SECRET;\n const cigServiceUrl =\n options.cigServiceUrl ||\n process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL ||\n process.env.WEBEX_TEST_USERS_CONVERSATION_SERVICE_URL;\n\n if (!clientId) {\n throw new Error('options.clientId or process.env.WEBEX_CLIENT_ID must be defined');\n }\n\n if (!clientSecret) {\n throw new Error('options.clientSecret or process.env.WEBEX_CLIENT_SECRET must be defined');\n }\n\n if (!cigServiceUrl) {\n throw new Error(\n 'options.cigServiceUrl or process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL must be defined'\n );\n }\n\n return request({\n method: 'POST',\n uri: `${cigServiceUrl}${BASE_PATH}/login`,\n json: true,\n body: _.defaultsDeep(options, {\n clientId,\n clientSecret,\n }),\n }).then((res) => fixToken(res.body));\n}\n\n/**\n * Removes a test user\n * @param {Object} options\n * @param {string} options.id user id to remove\n * @param {string} options.cigServiceUrl\n * @param {Object} options.token\n * @param {string} options.token.authorization\n * @param {string} [options.token.refresh_token]\n * @returns {Promise}\n */\nexport function removeTestUser(options = {}) {\n const cigServiceUrl =\n options.cigServiceUrl ||\n process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL ||\n process.env.WEBEX_TEST_USERS_CONVERSATION_SERVICE_URL;\n\n if (!cigServiceUrl) {\n throw new Error(\n 'options.cigServiceUrl or process.env.WEBEX_TEST_USERS_CI_GATEWAY_SERVICE_URL must be defined'\n );\n }\n\n if (!options.id) {\n return Promise.reject(new Error('options.id is required'));\n }\n\n if (!options.token) {\n return loginTestUser(options).then((token) => {\n options.token = token;\n\n return removeTestUser(options);\n });\n }\n\n assert(options.token.authorization, 'options.token.authorization must be defined');\n\n return request({\n method: 'POST',\n json: true,\n headers: {\n authorization: options.token.authorization,\n },\n body: {\n /* eslint-disable camelcase */\n user_id: options.id,\n refresh_token: options.token.refresh_token,\n user_type: options.userType || 'PERSON',\n /* eslint-enable camelcase */\n },\n uri: `${cigServiceUrl}${BASE_PATH}/delete`,\n });\n}\n\nexport {\n default as createWhistlerTestUser,\n removeTestUser as removeWhistlerTestUser,\n} from './whistler';\n"],"mappings":"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"}
package/dist/whistler.js CHANGED
@@ -1,22 +1,24 @@
1
1
  "use strict";
2
2
 
3
+ var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
4
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
5
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
6
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
7
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
3
8
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
9
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
10
  _Object$defineProperty(exports, "__esModule", {
8
11
  value: true
9
12
  });
10
-
11
13
  exports.default = createTestUser;
12
14
  exports.removeTestUser = removeTestUser;
13
-
14
- var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign"));
15
-
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
16
16
  var _btoa = _interopRequireDefault(require("btoa"));
17
-
18
17
  var _httpCore = require("@webex/http-core");
19
-
18
+ var _nodeRandomName = _interopRequireDefault(require("node-random-name"));
19
+ var _uuid = _interopRequireDefault(require("uuid"));
20
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
21
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
20
22
  /**
21
23
  * Fetches credentials/access_token to talk to the whistler endpoint
22
24
  *
@@ -32,11 +34,11 @@ var _httpCore = require("@webex/http-core");
32
34
  */
33
35
  var getClientCredentials = function getClientCredentials(_ref) {
34
36
  var clientId = _ref.clientId,
35
- clientSecret = _ref.clientSecret,
36
- orgId = _ref.orgId,
37
- idbrokerUrl = _ref.idbrokerUrl,
38
- machineAccount = _ref.machineAccount,
39
- machinePassword = _ref.machinePassword;
37
+ clientSecret = _ref.clientSecret,
38
+ orgId = _ref.orgId,
39
+ idbrokerUrl = _ref.idbrokerUrl,
40
+ machineAccount = _ref.machineAccount,
41
+ machinePassword = _ref.machinePassword;
40
42
  return (0, _httpCore.request)({
41
43
  method: 'POST',
42
44
  uri: "".concat(idbrokerUrl, "/idb/token/").concat(orgId, "/v2/actions/GetBearerToken/invoke"),
@@ -70,15 +72,16 @@ var getClientCredentials = function getClientCredentials(_ref) {
70
72
  return "".concat(res.body.token_type, " ").concat(res.body.access_token);
71
73
  });
72
74
  };
75
+
73
76
  /**
74
- * @typedef {Object} TestUserObject
75
- * @property {string} password
76
- * @property {string} emailAddress
77
- * @property {string} displayName
78
- * @property {string} token
79
- * @property {string} reservationUrl
80
- * @property {object} responseMetaData - whistler given properties
81
- */
77
+ * @typedef {Object} TestUserObject
78
+ * @property {string} password
79
+ * @property {string} emailAddress
80
+ * @property {string} displayName
81
+ * @property {string} token
82
+ * @property {string} reservationUrl
83
+ * @property {object} responseMetaData - whistler given properties
84
+ */
82
85
 
83
86
  /**
84
87
  * @typedef {Object} CreateUserOptions
@@ -97,50 +100,41 @@ var getClientCredentials = function getClientCredentials(_ref) {
97
100
  * @param {CreateUserOptions} options
98
101
  * @returns {Promise.<TestUserObject>}
99
102
  */
100
-
101
-
102
103
  function createTestUser() {
103
104
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
104
105
  var clientId = options.clientId || process.env.WEBEX_CLIENT_ID;
105
106
  var clientSecret = options.clientSecret || process.env.WEBEX_CLIENT_SECRET;
106
- var machineAccount = options.machineAccount || process.env.WHISTLER_MACHINE_ACCOUNT;
107
- var machinePassword = options.machinePassword || process.env.WHISTLER_MACHINE_PASSWORD;
107
+ var machineAccount = options.machineAccount || process.env.WHISTLER_MACHINE_ACCOUNT || (0, _nodeRandomName.default)();
108
+ var machinePassword = options.machinePassword || process.env.WHISTLER_MACHINE_PASSWORD || "".concat(_uuid.default.v4(), "zAY1*");
108
109
  var idbrokerUrl = options.idbrokerUrl || process.env.IDBROKER_BASE_URL;
109
110
  var orgId = options.orgId || process.env.WHISTLER_TEST_ORG_ID;
110
111
  var whistlerServiceUrl = options.whistlerServiceUrl || process.env.WHISTLER_API_SERVICE_URL;
111
112
  var reservationGroup = options.reservationGroup,
112
- userScopes = options.userScopes;
113
-
113
+ userScopes = options.userScopes;
114
114
  if (!clientId) {
115
115
  throw new Error('options.clientId or process.env.WEBEX_CLIENT_ID must be defined');
116
116
  }
117
-
118
117
  if (!clientSecret) {
119
118
  throw new Error('options.clientSecret or process.env.WEBEX_CLIENT_SECRET must be defined');
120
119
  }
121
-
122
120
  if (!machineAccount) {
123
121
  throw new Error('options.machineAccount or process.env.WHISTLER_MACHINE_ACCOUNT must be defined');
124
122
  }
125
-
126
123
  if (!machinePassword) {
127
124
  throw new Error('options.machinePassword or process.env.WHISTLER_MACHINE_PASSWORD must be defined');
128
125
  }
129
-
130
126
  if (!idbrokerUrl) {
131
127
  throw new Error('options.idbrokerUrl or process.env.IDBROKER_BASE_URL must be defined');
132
128
  }
133
-
134
129
  if (!orgId) {
135
130
  throw new Error('options.orgId or process.env.WHISTLER_TEST_ORG_ID must be defined');
136
131
  }
137
-
138
132
  if (!whistlerServiceUrl) {
139
133
  throw new Error('options.whistlerServiceUrl or process.env.WHISTLER_API_SERVICE_URL must be defined');
140
- } // For reservation groups and user scopes
141
- // Please check https://confluence-eng-gpk2.cisco.com/conf/pages/viewpage.action?spaceKey=LOCUS&title=Whistler+APIs#WhistlerAPIs-GET/reservations/testUser
142
-
134
+ }
143
135
 
136
+ // For reservation groups and user scopes
137
+ // Please check https://confluence-eng-gpk2.cisco.com/conf/pages/viewpage.action?spaceKey=LOCUS&title=Whistler+APIs#WhistlerAPIs-GET/reservations/testUser
144
138
  return getClientCredentials({
145
139
  clientId: clientId,
146
140
  clientSecret: clientSecret,
@@ -162,7 +156,7 @@ function createTestUser() {
162
156
  }
163
157
  });
164
158
  }).then(function (res) {
165
- return (0, _assign.default)({
159
+ return _objectSpread({
166
160
  password: res.body.responseMetaData.ciPassword,
167
161
  emailAddress: res.body.responseMetaData.name,
168
162
  displayName: res.body.responseMetaData.webExUserName,
@@ -171,13 +165,12 @@ function createTestUser() {
171
165
  }, res.body.responseMetaData);
172
166
  });
173
167
  }
168
+
174
169
  /**
175
170
  *
176
171
  * @param {Object} options
177
172
  * @returns {Promise}
178
173
  */
179
-
180
-
181
174
  function removeTestUser() {
182
175
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
183
176
  return (0, _httpCore.request)({
@@ -1 +1 @@
1
- {"version":3,"names":["getClientCredentials","clientId","clientSecret","orgId","idbrokerUrl","machineAccount","machinePassword","request","method","uri","json","body","uid","password","then","res","form","assertion","BearerToken","grant_type","scope","self_contained_token","client_id","client_secret","headers","authorization","btoa","token_type","access_token","createTestUser","options","process","env","WEBEX_CLIENT_ID","WEBEX_CLIENT_SECRET","WHISTLER_MACHINE_ACCOUNT","WHISTLER_MACHINE_PASSWORD","IDBROKER_BASE_URL","WHISTLER_TEST_ORG_ID","whistlerServiceUrl","WHISTLER_API_SERVICE_URL","reservationGroup","userScopes","Error","qs","isAccessTokenRequired","responseMetaData","ciPassword","emailAddress","name","displayName","webExUserName","token","ciAccessToken","reservationUrl","removeTestUser"],"sources":["whistler.js"],"sourcesContent":["import btoa from 'btoa';\nimport {request} from '@webex/http-core';\n\n/**\n * Fetches credentials/access_token to talk to the whistler endpoint\n *\n * @param {Object} options\n * @param {string} options.clientId\n * @param {string} options.clientSecret\n * @param {string} options.idbrokerUrl\n * @param {string} options.orgId\n * @param {string} options.machineAccount\n * @param {string} options.machinePassword\n * @private\n * @returns {Promise<string>}\n */\nconst getClientCredentials = ({\n clientId,\n clientSecret,\n orgId,\n idbrokerUrl,\n machineAccount,\n machinePassword\n}) => request({\n method: 'POST',\n uri: `${idbrokerUrl}/idb/token/${orgId}/v2/actions/GetBearerToken/invoke`,\n json: true,\n body: {\n uid: machineAccount,\n password: machinePassword\n }\n})\n .then((res) => request({\n method: 'POST',\n uri: `${idbrokerUrl}/idb/oauth2/v1/access_token`,\n json: true,\n form: {\n assertion: res.body.BearerToken,\n grant_type: 'urn:ietf:params:oauth:grant-type:saml2-bearer',\n scope: 'webexsquare:get_conversation webexsquare:admin',\n self_contained_token: true,\n client_id: clientId,\n client_secret: clientSecret\n },\n headers: {\n // Note: we can't request's auth hash here because this endpoint expects\n // us to send the auth header *without including \"Basic \"* before the\n // token string\n // authorization: `Basic + ${btoa(`${clientId}:${clientSecret}`)}`\n authorization: btoa(`${clientId}:${clientSecret}`)\n }\n }))\n .then((res) => `${res.body.token_type} ${res.body.access_token}`);\n\n/**\n * @typedef {Object} TestUserObject\n * @property {string} password\n * @property {string} emailAddress\n * @property {string} displayName\n * @property {string} token\n * @property {string} reservationUrl\n * @property {object} responseMetaData - whistler given properties\n */\n\n/**\n * @typedef {Object} CreateUserOptions\n * @param {Object} [options]\n * @param {string} [whistlerServiceUrl] defaults to WHISTLER_API_SERVICE_URL\n * @param {string} [options.clientId] defaults to WEBEX_CLIENT_ID\n * @param {string} [options.clientSecret] defaults to WEBEX_CLIENT_SECRET\n * @param {string} [options.idbrokerUrl] defaults to IDBROKER_BASE_URL\n * @param {string} [options.orgId] organization ID to create the user under\n * @param {string} [options.machineAccount] defaults to WHISTLER_MACHINE_ACCOUNT\n * @param {string} [options.machinePassword] defaults to WHISTLER_MACHINE_PASSWORD\n */\n\n/**\n * Creates a test user\n * @param {CreateUserOptions} options\n * @returns {Promise.<TestUserObject>}\n */\nexport default function createTestUser(options = {}) {\n const clientId = options.clientId || process.env.WEBEX_CLIENT_ID;\n const clientSecret = options.clientSecret || process.env.WEBEX_CLIENT_SECRET;\n const machineAccount = options.machineAccount || process.env.WHISTLER_MACHINE_ACCOUNT;\n const machinePassword = options.machinePassword || process.env.WHISTLER_MACHINE_PASSWORD;\n const idbrokerUrl = options.idbrokerUrl || process.env.IDBROKER_BASE_URL;\n const orgId = options.orgId || process.env.WHISTLER_TEST_ORG_ID;\n const whistlerServiceUrl = options.whistlerServiceUrl || process.env.WHISTLER_API_SERVICE_URL;\n const {reservationGroup, userScopes} = options;\n\n if (!clientId) {\n throw new Error('options.clientId or process.env.WEBEX_CLIENT_ID must be defined');\n }\n\n if (!clientSecret) {\n throw new Error('options.clientSecret or process.env.WEBEX_CLIENT_SECRET must be defined');\n }\n\n if (!machineAccount) {\n throw new Error('options.machineAccount or process.env.WHISTLER_MACHINE_ACCOUNT must be defined');\n }\n\n if (!machinePassword) {\n throw new Error('options.machinePassword or process.env.WHISTLER_MACHINE_PASSWORD must be defined');\n }\n if (!idbrokerUrl) {\n throw new Error('options.idbrokerUrl or process.env.IDBROKER_BASE_URL must be defined');\n }\n\n if (!orgId) {\n throw new Error('options.orgId or process.env.WHISTLER_TEST_ORG_ID must be defined');\n }\n\n if (!whistlerServiceUrl) {\n throw new Error('options.whistlerServiceUrl or process.env.WHISTLER_API_SERVICE_URL must be defined');\n }\n\n // For reservation groups and user scopes\n // Please check https://confluence-eng-gpk2.cisco.com/conf/pages/viewpage.action?spaceKey=LOCUS&title=Whistler+APIs#WhistlerAPIs-GET/reservations/testUser\n return getClientCredentials({\n clientId,\n clientSecret,\n machineAccount,\n machinePassword,\n idbrokerUrl,\n orgId\n })\n .then((authorization) => request({\n method: 'GET',\n uri: `${whistlerServiceUrl}/reservations/testUser`,\n qs: {\n reservationGroup,\n userScopes,\n isAccessTokenRequired: true\n },\n headers: {\n authorization\n }\n }))\n .then((res) => Object.assign({\n password: res.body.responseMetaData.ciPassword,\n emailAddress: res.body.responseMetaData.name,\n displayName: res.body.responseMetaData.webExUserName,\n token: res.body.responseMetaData.ciAccessToken,\n reservationUrl: res.body.reservationUrl\n }, res.body.responseMetaData));\n}\n\n/**\n *\n * @param {Object} options\n * @returns {Promise}\n */\nexport function removeTestUser(options = {}) {\n return request({\n method: 'DELETE',\n headers: {\n authorization: `Bearer ${options.token}`\n },\n uri: options.reservationUrl\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMA,oBAAoB,GAAG,SAAvBA,oBAAuB;EAAA,IAC3BC,QAD2B,QAC3BA,QAD2B;EAAA,IAE3BC,YAF2B,QAE3BA,YAF2B;EAAA,IAG3BC,KAH2B,QAG3BA,KAH2B;EAAA,IAI3BC,WAJ2B,QAI3BA,WAJ2B;EAAA,IAK3BC,cAL2B,QAK3BA,cAL2B;EAAA,IAM3BC,eAN2B,QAM3BA,eAN2B;EAAA,OAOvB,IAAAC,iBAAA,EAAQ;IACZC,MAAM,EAAE,MADI;IAEZC,GAAG,YAAKL,WAAL,wBAA8BD,KAA9B,sCAFS;IAGZO,IAAI,EAAE,IAHM;IAIZC,IAAI,EAAE;MACJC,GAAG,EAAEP,cADD;MAEJQ,QAAQ,EAAEP;IAFN;EAJM,CAAR,EASHQ,IATG,CASE,UAACC,GAAD;IAAA,OAAS,IAAAR,iBAAA,EAAQ;MACrBC,MAAM,EAAE,MADa;MAErBC,GAAG,YAAKL,WAAL,gCAFkB;MAGrBM,IAAI,EAAE,IAHe;MAIrBM,IAAI,EAAE;QACJC,SAAS,EAAEF,GAAG,CAACJ,IAAJ,CAASO,WADhB;QAEJC,UAAU,EAAE,+CAFR;QAGJC,KAAK,EAAE,gDAHH;QAIJC,oBAAoB,EAAE,IAJlB;QAKJC,SAAS,EAAErB,QALP;QAMJsB,aAAa,EAAErB;MANX,CAJe;MAYrBsB,OAAO,EAAE;QACP;QACA;QACA;QACA;QACAC,aAAa,EAAE,IAAAC,aAAA,YAAQzB,QAAR,cAAoBC,YAApB;MALR;IAZY,CAAR,CAAT;EAAA,CATF,EA6BHY,IA7BG,CA6BE,UAACC,GAAD;IAAA,iBAAYA,GAAG,CAACJ,IAAJ,CAASgB,UAArB,cAAmCZ,GAAG,CAACJ,IAAJ,CAASiB,YAA5C;EAAA,CA7BF,CAPuB;AAAA,CAA7B;AAsCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AACe,SAASC,cAAT,GAAsC;EAAA,IAAdC,OAAc,uEAAJ,EAAI;EACnD,IAAM7B,QAAQ,GAAG6B,OAAO,CAAC7B,QAAR,IAAoB8B,OAAO,CAACC,GAAR,CAAYC,eAAjD;EACA,IAAM/B,YAAY,GAAG4B,OAAO,CAAC5B,YAAR,IAAwB6B,OAAO,CAACC,GAAR,CAAYE,mBAAzD;EACA,IAAM7B,cAAc,GAAGyB,OAAO,CAACzB,cAAR,IAA0B0B,OAAO,CAACC,GAAR,CAAYG,wBAA7D;EACA,IAAM7B,eAAe,GAAGwB,OAAO,CAACxB,eAAR,IAA2ByB,OAAO,CAACC,GAAR,CAAYI,yBAA/D;EACA,IAAMhC,WAAW,GAAG0B,OAAO,CAAC1B,WAAR,IAAuB2B,OAAO,CAACC,GAAR,CAAYK,iBAAvD;EACA,IAAMlC,KAAK,GAAG2B,OAAO,CAAC3B,KAAR,IAAiB4B,OAAO,CAACC,GAAR,CAAYM,oBAA3C;EACA,IAAMC,kBAAkB,GAAGT,OAAO,CAACS,kBAAR,IAA8BR,OAAO,CAACC,GAAR,CAAYQ,wBAArE;EACA,IAAOC,gBAAP,GAAuCX,OAAvC,CAAOW,gBAAP;EAAA,IAAyBC,UAAzB,GAAuCZ,OAAvC,CAAyBY,UAAzB;;EAEA,IAAI,CAACzC,QAAL,EAAe;IACb,MAAM,IAAI0C,KAAJ,CAAU,iEAAV,CAAN;EACD;;EAED,IAAI,CAACzC,YAAL,EAAmB;IACjB,MAAM,IAAIyC,KAAJ,CAAU,yEAAV,CAAN;EACD;;EAED,IAAI,CAACtC,cAAL,EAAqB;IACnB,MAAM,IAAIsC,KAAJ,CAAU,gFAAV,CAAN;EACD;;EAED,IAAI,CAACrC,eAAL,EAAsB;IACpB,MAAM,IAAIqC,KAAJ,CAAU,kFAAV,CAAN;EACD;;EACD,IAAI,CAACvC,WAAL,EAAkB;IAChB,MAAM,IAAIuC,KAAJ,CAAU,sEAAV,CAAN;EACD;;EAED,IAAI,CAACxC,KAAL,EAAY;IACV,MAAM,IAAIwC,KAAJ,CAAU,mEAAV,CAAN;EACD;;EAED,IAAI,CAACJ,kBAAL,EAAyB;IACvB,MAAM,IAAII,KAAJ,CAAU,oFAAV,CAAN;EACD,CAnCkD,CAqCnD;EACA;;;EACA,OAAO3C,oBAAoB,CAAC;IAC1BC,QAAQ,EAARA,QAD0B;IAE1BC,YAAY,EAAZA,YAF0B;IAG1BG,cAAc,EAAdA,cAH0B;IAI1BC,eAAe,EAAfA,eAJ0B;IAK1BF,WAAW,EAAXA,WAL0B;IAM1BD,KAAK,EAALA;EAN0B,CAAD,CAApB,CAQJW,IARI,CAQC,UAACW,aAAD;IAAA,OAAmB,IAAAlB,iBAAA,EAAQ;MAC/BC,MAAM,EAAE,KADuB;MAE/BC,GAAG,YAAK8B,kBAAL,2BAF4B;MAG/BK,EAAE,EAAE;QACFH,gBAAgB,EAAhBA,gBADE;QAEFC,UAAU,EAAVA,UAFE;QAGFG,qBAAqB,EAAE;MAHrB,CAH2B;MAQ/BrB,OAAO,EAAE;QACPC,aAAa,EAAbA;MADO;IARsB,CAAR,CAAnB;EAAA,CARD,EAoBJX,IApBI,CAoBC,UAACC,GAAD;IAAA,OAAS,qBAAc;MAC3BF,QAAQ,EAAEE,GAAG,CAACJ,IAAJ,CAASmC,gBAAT,CAA0BC,UADT;MAE3BC,YAAY,EAAEjC,GAAG,CAACJ,IAAJ,CAASmC,gBAAT,CAA0BG,IAFb;MAG3BC,WAAW,EAAEnC,GAAG,CAACJ,IAAJ,CAASmC,gBAAT,CAA0BK,aAHZ;MAI3BC,KAAK,EAAErC,GAAG,CAACJ,IAAJ,CAASmC,gBAAT,CAA0BO,aAJN;MAK3BC,cAAc,EAAEvC,GAAG,CAACJ,IAAJ,CAAS2C;IALE,CAAd,EAMZvC,GAAG,CAACJ,IAAJ,CAASmC,gBANG,CAAT;EAAA,CApBD,CAAP;AA2BD;AAED;AACA;AACA;AACA;AACA;;;AACO,SAASS,cAAT,GAAsC;EAAA,IAAdzB,OAAc,uEAAJ,EAAI;EAC3C,OAAO,IAAAvB,iBAAA,EAAQ;IACbC,MAAM,EAAE,QADK;IAEbgB,OAAO,EAAE;MACPC,aAAa,mBAAYK,OAAO,CAACsB,KAApB;IADN,CAFI;IAKb3C,GAAG,EAAEqB,OAAO,CAACwB;EALA,CAAR,CAAP;AAOD"}
1
+ {"version":3,"names":["getClientCredentials","clientId","clientSecret","orgId","idbrokerUrl","machineAccount","machinePassword","request","method","uri","json","body","uid","password","then","res","form","assertion","BearerToken","grant_type","scope","self_contained_token","client_id","client_secret","headers","authorization","btoa","token_type","access_token","createTestUser","options","process","env","WEBEX_CLIENT_ID","WEBEX_CLIENT_SECRET","WHISTLER_MACHINE_ACCOUNT","randomName","WHISTLER_MACHINE_PASSWORD","uuid","v4","IDBROKER_BASE_URL","WHISTLER_TEST_ORG_ID","whistlerServiceUrl","WHISTLER_API_SERVICE_URL","reservationGroup","userScopes","Error","qs","isAccessTokenRequired","responseMetaData","ciPassword","emailAddress","name","displayName","webExUserName","token","ciAccessToken","reservationUrl","removeTestUser"],"sources":["whistler.js"],"sourcesContent":["import btoa from 'btoa';\nimport {request} from '@webex/http-core';\nimport randomName from 'node-random-name';\nimport uuid from 'uuid';\n\n/**\n * Fetches credentials/access_token to talk to the whistler endpoint\n *\n * @param {Object} options\n * @param {string} options.clientId\n * @param {string} options.clientSecret\n * @param {string} options.idbrokerUrl\n * @param {string} options.orgId\n * @param {string} options.machineAccount\n * @param {string} options.machinePassword\n * @private\n * @returns {Promise<string>}\n */\nconst getClientCredentials = ({\n clientId,\n clientSecret,\n orgId,\n idbrokerUrl,\n machineAccount,\n machinePassword,\n}) =>\n request({\n method: 'POST',\n uri: `${idbrokerUrl}/idb/token/${orgId}/v2/actions/GetBearerToken/invoke`,\n json: true,\n body: {\n uid: machineAccount,\n password: machinePassword,\n },\n })\n .then((res) =>\n request({\n method: 'POST',\n uri: `${idbrokerUrl}/idb/oauth2/v1/access_token`,\n json: true,\n form: {\n assertion: res.body.BearerToken,\n grant_type: 'urn:ietf:params:oauth:grant-type:saml2-bearer',\n scope: 'webexsquare:get_conversation webexsquare:admin',\n self_contained_token: true,\n client_id: clientId,\n client_secret: clientSecret,\n },\n headers: {\n // Note: we can't request's auth hash here because this endpoint expects\n // us to send the auth header *without including \"Basic \"* before the\n // token string\n // authorization: `Basic + ${btoa(`${clientId}:${clientSecret}`)}`\n authorization: btoa(`${clientId}:${clientSecret}`),\n },\n })\n )\n .then((res) => `${res.body.token_type} ${res.body.access_token}`);\n\n/**\n * @typedef {Object} TestUserObject\n * @property {string} password\n * @property {string} emailAddress\n * @property {string} displayName\n * @property {string} token\n * @property {string} reservationUrl\n * @property {object} responseMetaData - whistler given properties\n */\n\n/**\n * @typedef {Object} CreateUserOptions\n * @param {Object} [options]\n * @param {string} [whistlerServiceUrl] defaults to WHISTLER_API_SERVICE_URL\n * @param {string} [options.clientId] defaults to WEBEX_CLIENT_ID\n * @param {string} [options.clientSecret] defaults to WEBEX_CLIENT_SECRET\n * @param {string} [options.idbrokerUrl] defaults to IDBROKER_BASE_URL\n * @param {string} [options.orgId] organization ID to create the user under\n * @param {string} [options.machineAccount] defaults to WHISTLER_MACHINE_ACCOUNT\n * @param {string} [options.machinePassword] defaults to WHISTLER_MACHINE_PASSWORD\n */\n\n/**\n * Creates a test user\n * @param {CreateUserOptions} options\n * @returns {Promise.<TestUserObject>}\n */\nexport default function createTestUser(options = {}) {\n const clientId = options.clientId || process.env.WEBEX_CLIENT_ID;\n const clientSecret = options.clientSecret || process.env.WEBEX_CLIENT_SECRET;\n const machineAccount =\n options.machineAccount || process.env.WHISTLER_MACHINE_ACCOUNT || randomName();\n const machinePassword =\n options.machinePassword || process.env.WHISTLER_MACHINE_PASSWORD || `${uuid.v4()}zAY1*`;\n const idbrokerUrl = options.idbrokerUrl || process.env.IDBROKER_BASE_URL;\n const orgId = options.orgId || process.env.WHISTLER_TEST_ORG_ID;\n const whistlerServiceUrl = options.whistlerServiceUrl || process.env.WHISTLER_API_SERVICE_URL;\n const {reservationGroup, userScopes} = options;\n\n if (!clientId) {\n throw new Error('options.clientId or process.env.WEBEX_CLIENT_ID must be defined');\n }\n\n if (!clientSecret) {\n throw new Error('options.clientSecret or process.env.WEBEX_CLIENT_SECRET must be defined');\n }\n\n if (!machineAccount) {\n throw new Error(\n 'options.machineAccount or process.env.WHISTLER_MACHINE_ACCOUNT must be defined'\n );\n }\n\n if (!machinePassword) {\n throw new Error(\n 'options.machinePassword or process.env.WHISTLER_MACHINE_PASSWORD must be defined'\n );\n }\n if (!idbrokerUrl) {\n throw new Error('options.idbrokerUrl or process.env.IDBROKER_BASE_URL must be defined');\n }\n\n if (!orgId) {\n throw new Error('options.orgId or process.env.WHISTLER_TEST_ORG_ID must be defined');\n }\n\n if (!whistlerServiceUrl) {\n throw new Error(\n 'options.whistlerServiceUrl or process.env.WHISTLER_API_SERVICE_URL must be defined'\n );\n }\n\n // For reservation groups and user scopes\n // Please check https://confluence-eng-gpk2.cisco.com/conf/pages/viewpage.action?spaceKey=LOCUS&title=Whistler+APIs#WhistlerAPIs-GET/reservations/testUser\n return getClientCredentials({\n clientId,\n clientSecret,\n machineAccount,\n machinePassword,\n idbrokerUrl,\n orgId,\n })\n .then((authorization) =>\n request({\n method: 'GET',\n uri: `${whistlerServiceUrl}/reservations/testUser`,\n qs: {\n reservationGroup,\n userScopes,\n isAccessTokenRequired: true,\n },\n headers: {\n authorization,\n },\n })\n )\n .then((res) => ({\n password: res.body.responseMetaData.ciPassword,\n emailAddress: res.body.responseMetaData.name,\n displayName: res.body.responseMetaData.webExUserName,\n token: res.body.responseMetaData.ciAccessToken,\n reservationUrl: res.body.reservationUrl,\n ...res.body.responseMetaData,\n }));\n}\n\n/**\n *\n * @param {Object} options\n * @returns {Promise}\n */\nexport function removeTestUser(options = {}) {\n return request({\n method: 'DELETE',\n headers: {\n authorization: `Bearer ${options.token}`,\n },\n uri: options.reservationUrl,\n });\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/test-users",
3
- "version": "3.0.0-beta.9",
3
+ "version": "3.0.0-beta.91",
4
4
  "description": "Cisco Webex Test Users",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -24,9 +24,9 @@
24
24
  "chai-as-promised": "^7.1.1"
25
25
  },
26
26
  "dependencies": {
27
- "@webex/http-core": "3.0.0-beta.9",
28
- "@webex/test-helper-mocha": "3.0.0-beta.9",
29
- "@webex/test-users": "3.0.0-beta.9",
27
+ "@webex/http-core": "3.0.0-beta.91",
28
+ "@webex/test-helper-mocha": "3.0.0-beta.91",
29
+ "@webex/test-users": "3.0.0-beta.91",
30
30
  "btoa": "^1.2.1",
31
31
  "lodash": "^4.17.21",
32
32
  "node-random-name": "^1.0.1",