@kineticdata/react 6.1.1 → 7.0.0-rc1

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.
@@ -5,10 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.singleSignOn = exports.retrieveJwt = exports.logoutDirect = exports.login = void 0;
8
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
8
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
9
9
  var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/regeneratorRuntime"));
10
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
11
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
12
12
  var _axios = _interopRequireDefault(require("axios"));
13
13
  var _helpers = require("../../helpers");
14
14
  var _profile = require("./profile");
@@ -24,48 +24,222 @@ var login = exports.login = function login(_ref) {
24
24
  })["catch"](_http.handleErrors);
25
25
  };
26
26
  var logoutDirect = exports.logoutDirect = function logoutDirect(isSaml) {
27
- return _axios["default"].get(isSaml === true ? "".concat(_helpers.bundle.spaceLocation(), "/app/saml/logout") : "".concat(_helpers.bundle.spaceLocation(), "/app/logout"));
27
+ return _axios["default"].get(isSaml === true ? "".concat(_helpers.bundle.spaceLocation(), "/app/saml2/logout") : "".concat(_helpers.bundle.spaceLocation(), "/app/logout"));
28
28
  };
29
29
  var checkedOrigin = process.env.REACT_APP_API_HOST ? process.env.REACT_APP_API_HOST : typeof window !== 'undefined' ? window.location.origin : null;
30
30
  var clientId = process.env.REACT_APP_OAUTH_CLIENT_ID ? process.env.REACT_APP_OAUTH_CLIENT_ID : process.env.NODE_ENV === 'production' ? 'system' : 'system-dev';
31
- var retrieveJwt = exports.retrieveJwt = function retrieveJwt() {
32
- return new Promise(function (resolve) {
33
- var postParentMessage = window.postMessage;
34
- var iframe = document.createElement('iframe');
35
- iframe.src = _helpers.bundle.spaceLocation() + '/app/oauth/authorize?grant_type=implicit&response_type=token&client_id=' + clientId;
36
- iframe.title = 'oauth jwt iframe';
37
- iframe.style.cssText = 'display: none';
38
- // If iframe is redirected to the login page, then JWT fetch failed
39
- iframe.onload = function () {
40
- if (iframe.contentWindow.location.pathname.endsWith('/app/login')) {
41
- postParentMessage({
42
- type: 'nosession'
43
- }, '*');
44
- }
45
- };
46
- var listener = function listener(e) {
47
- if (e.origin === checkedOrigin && (e.data.token || e.data.type === 'nosession')) {
48
- // If a token is returned, or a 'nosession' message is received, close
49
- // the iframe and return the token (or lack thereof)
50
- window.removeEventListener('message', listener);
51
- document.body.removeChild(iframe);
52
- resolve(e.data.token);
31
+ var base64UrlEncode = function base64UrlEncode(bytes) {
32
+ return btoa(String.fromCharCode.apply(String, (0, _toConsumableArray2["default"])(bytes))).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
33
+ };
34
+ var generateCodeVerifier = function generateCodeVerifier() {
35
+ var array = new Uint8Array(32);
36
+ crypto.getRandomValues(array);
37
+ return base64UrlEncode(array);
38
+ };
39
+ var generateCodeChallenge = /*#__PURE__*/function () {
40
+ var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee(codeVerifier) {
41
+ var data, digest;
42
+ return (0, _regeneratorRuntime2["default"])().wrap(function _callee$(_context) {
43
+ while (1) switch (_context.prev = _context.next) {
44
+ case 0:
45
+ data = new TextEncoder().encode(codeVerifier);
46
+ _context.next = 3;
47
+ return crypto.subtle.digest('SHA-256', data);
48
+ case 3:
49
+ digest = _context.sent;
50
+ return _context.abrupt("return", base64UrlEncode(new Uint8Array(digest)));
51
+ case 5:
52
+ case "end":
53
+ return _context.stop();
53
54
  }
54
- if (e.origin === checkedOrigin && e.data.type === 'ping') {
55
- e.source.postMessage({
56
- type: 'pong'
57
- }, e.origin);
55
+ }, _callee);
56
+ }));
57
+ return function generateCodeChallenge(_x) {
58
+ return _ref2.apply(this, arguments);
59
+ };
60
+ }();
61
+ var exchangeCodeForToken = /*#__PURE__*/function () {
62
+ var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee2(code, codeVerifier, redirectUri) {
63
+ var response;
64
+ return (0, _regeneratorRuntime2["default"])().wrap(function _callee2$(_context2) {
65
+ while (1) switch (_context2.prev = _context2.next) {
66
+ case 0:
67
+ _context2.prev = 0;
68
+ _context2.next = 3;
69
+ return _axios["default"].post("".concat(_helpers.bundle.spaceLocation(), "/app/oauth2/token"), new URLSearchParams({
70
+ grant_type: 'authorization_code',
71
+ code: code,
72
+ redirect_uri: redirectUri,
73
+ client_id: clientId,
74
+ code_verifier: codeVerifier
75
+ }), {
76
+ headers: {
77
+ 'Content-Type': 'application/x-www-form-urlencoded'
78
+ },
79
+ __bypassAuthInterceptor: true,
80
+ __bypassInitInterceptor: true
81
+ });
82
+ case 3:
83
+ response = _context2.sent;
84
+ return _context2.abrupt("return", response.data.access_token);
85
+ case 7:
86
+ _context2.prev = 7;
87
+ _context2.t0 = _context2["catch"](0);
88
+ console.error('there was a problem getting the token:', _context2.t0);
89
+ return _context2.abrupt("return", undefined);
90
+ case 11:
91
+ case "end":
92
+ return _context2.stop();
58
93
  }
59
- };
60
- window.addEventListener('message', listener);
94
+ }, _callee2, null, [[0, 7]]);
95
+ }));
96
+ return function exchangeCodeForToken(_x2, _x3, _x4) {
97
+ return _ref3.apply(this, arguments);
98
+ };
99
+ }();
100
+ var AUTHORIZE_TIMEOUT_MS = 15000;
101
+ var attemptAuthorize = function attemptAuthorize(redirectUri, codeVerifier, codeChallenge) {
102
+ return new Promise(function (resolve, reject) {
103
+ var params = new URLSearchParams({
104
+ response_type: 'code',
105
+ client_id: clientId,
106
+ redirect_uri: redirectUri,
107
+ code_challenge: codeChallenge,
108
+ code_challenge_method: 'S256'
109
+ });
110
+ var iframe = document.createElement('iframe');
111
+ iframe.title = 'oauth jwt iframe';
112
+ iframe.style.display = 'none';
113
+ iframe.src = "".concat(_helpers.bundle.spaceLocation(), "/app/oauth2/authorize?").concat(params);
114
+ iframe.onload = /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee3() {
115
+ var iframeUrl, error, code, token;
116
+ return (0, _regeneratorRuntime2["default"])().wrap(function _callee3$(_context3) {
117
+ while (1) switch (_context3.prev = _context3.next) {
118
+ case 0:
119
+ _context3.prev = 0;
120
+ iframeUrl = new URL(iframe.contentWindow.location.href);
121
+ error = iframeUrl.searchParams.get('error');
122
+ code = iframeUrl.searchParams.get('code');
123
+ if (!iframeUrl.pathname.endsWith('/app/login')) {
124
+ _context3.next = 9;
125
+ break;
126
+ }
127
+ document.body.removeChild(iframe);
128
+ resolve({
129
+ status: 'unauthenticated'
130
+ });
131
+ _context3.next = 24;
132
+ break;
133
+ case 9:
134
+ if (!error) {
135
+ _context3.next = 14;
136
+ break;
137
+ }
138
+ document.body.removeChild(iframe);
139
+ resolve({
140
+ status: 'error',
141
+ error: error
142
+ });
143
+ _context3.next = 24;
144
+ break;
145
+ case 14:
146
+ if (!code) {
147
+ _context3.next = 22;
148
+ break;
149
+ }
150
+ document.body.removeChild(iframe);
151
+ _context3.next = 18;
152
+ return exchangeCodeForToken(code, codeVerifier, redirectUri);
153
+ case 18:
154
+ token = _context3.sent;
155
+ if (token) {
156
+ resolve({
157
+ status: 'success',
158
+ token: token
159
+ });
160
+ } else {
161
+ reject({
162
+ status: 'error',
163
+ error: 'There was a problem retrieving your token.'
164
+ });
165
+ }
166
+ _context3.next = 24;
167
+ break;
168
+ case 22:
169
+ document.body.removeChild(iframe);
170
+ resolve({
171
+ status: 'error',
172
+ error: 'There was an unexpected problem retrieving your token.'
173
+ });
174
+ case 24:
175
+ _context3.next = 29;
176
+ break;
177
+ case 26:
178
+ _context3.prev = 26;
179
+ _context3.t0 = _context3["catch"](0);
180
+ // Cross-origin errors are expected during intermediate redirects
181
+ // as the iframe navigates through different origins before landing
182
+ // on the final redirect URI. Other errors should reject immediately.
183
+ if (!(_context3.t0 instanceof DOMException)) {
184
+ reject({
185
+ status: 'error',
186
+ error: 'There was an unexpected problem during authorization.'
187
+ });
188
+ }
189
+ case 29:
190
+ case "end":
191
+ return _context3.stop();
192
+ }
193
+ }, _callee3, null, [[0, 26]]);
194
+ }));
61
195
  document.body.appendChild(iframe);
62
196
  });
63
197
  };
198
+ var withTimeout = function withTimeout(promise, ms) {
199
+ return Promise.race([promise, new Promise(function (_, reject) {
200
+ return setTimeout(function () {
201
+ return reject(new Error('Authorization timed out.'));
202
+ }, ms);
203
+ })]);
204
+ };
205
+ var retrieveJwt = exports.retrieveJwt = /*#__PURE__*/function () {
206
+ var _ref5 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee4() {
207
+ var redirectUri, codeVerifier, codeChallenge, result;
208
+ return (0, _regeneratorRuntime2["default"])().wrap(function _callee4$(_context4) {
209
+ while (1) switch (_context4.prev = _context4.next) {
210
+ case 0:
211
+ redirectUri = "".concat(checkedOrigin, "/app/oauth/callback");
212
+ codeVerifier = generateCodeVerifier();
213
+ _context4.next = 4;
214
+ return generateCodeChallenge(codeVerifier);
215
+ case 4:
216
+ codeChallenge = _context4.sent;
217
+ _context4.prev = 5;
218
+ _context4.next = 8;
219
+ return withTimeout(attemptAuthorize(redirectUri, codeVerifier, codeChallenge), AUTHORIZE_TIMEOUT_MS);
220
+ case 8:
221
+ result = _context4.sent;
222
+ return _context4.abrupt("return", result.status === 'success' ? result.token : undefined);
223
+ case 12:
224
+ _context4.prev = 12;
225
+ _context4.t0 = _context4["catch"](5);
226
+ console.error('there was a problem during authorization:', _context4.t0);
227
+ return _context4.abrupt("return", undefined);
228
+ case 16:
229
+ case "end":
230
+ return _context4.stop();
231
+ }
232
+ }, _callee4, null, [[5, 12]]);
233
+ }));
234
+ return function retrieveJwt() {
235
+ return _ref5.apply(this, arguments);
236
+ };
237
+ }();
64
238
  var singleSignOn = exports.singleSignOn = function singleSignOn(spaceSlug, dimensions) {
65
239
  var target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '_blank';
66
240
  return new Promise(function (resolve) {
67
241
  var options = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, dimensions), getPopupPosition(window, dimensions));
68
- var endpoint = _helpers.bundle.spaceLocation() + '/app/saml/login/alias/' + spaceSlug;
242
+ var endpoint = _helpers.bundle.spaceLocation() + '/app/saml2/login/alias/' + spaceSlug;
69
243
  var popup = window.open(endpoint, target, stringifyOptions(options));
70
244
  if (!popup) {
71
245
  resolve({
@@ -91,30 +265,30 @@ var singleSignOn = exports.singleSignOn = function singleSignOn(spaceSlug, dimen
91
265
  // show error. Otherwise, check if profile is avilable to verify successful
92
266
  // authentication.
93
267
  var checkPopup = /*#__PURE__*/function () {
94
- var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee() {
95
- return (0, _regeneratorRuntime2["default"])().wrap(function _callee$(_context) {
96
- while (1) switch (_context.prev = _context.next) {
268
+ var _ref6 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee5() {
269
+ return (0, _regeneratorRuntime2["default"])().wrap(function _callee5$(_context5) {
270
+ while (1) switch (_context5.prev = _context5.next) {
97
271
  case 0:
98
272
  if (!popup.closed) {
99
- _context.next = 4;
273
+ _context5.next = 4;
100
274
  break;
101
275
  }
102
276
  resolve({
103
277
  error: 'Enterprise Sign In was cancelled.'
104
278
  });
105
- _context.next = 12;
279
+ _context5.next = 12;
106
280
  break;
107
281
  case 4:
108
- _context.next = 6;
282
+ _context5.next = 6;
109
283
  return profileAvailable();
110
284
  case 6:
111
- if (!_context.sent) {
112
- _context.next = 11;
285
+ if (!_context5.sent) {
286
+ _context5.next = 11;
113
287
  break;
114
288
  }
115
289
  popup.close();
116
290
  resolve({});
117
- _context.next = 12;
291
+ _context5.next = 12;
118
292
  break;
119
293
  case 11:
120
294
  if (pollCounter > 0) {
@@ -128,12 +302,12 @@ var singleSignOn = exports.singleSignOn = function singleSignOn(spaceSlug, dimen
128
302
  }
129
303
  case 12:
130
304
  case "end":
131
- return _context.stop();
305
+ return _context5.stop();
132
306
  }
133
- }, _callee);
307
+ }, _callee5);
134
308
  }));
135
309
  return function checkPopup() {
136
- return _ref2.apply(this, arguments);
310
+ return _ref6.apply(this, arguments);
137
311
  };
138
312
  }();
139
313
 
@@ -145,48 +319,48 @@ var singleSignOn = exports.singleSignOn = function singleSignOn(spaceSlug, dimen
145
319
  // Checks to see if the user has been authenticated via SSO by checking if the
146
320
  // profile endpoint successfully returns data.
147
321
  var profileAvailable = /*#__PURE__*/function () {
148
- var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee3() {
149
- return (0, _regeneratorRuntime2["default"])().wrap(function _callee3$(_context3) {
150
- while (1) switch (_context3.prev = _context3.next) {
322
+ var _ref7 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee7() {
323
+ return (0, _regeneratorRuntime2["default"])().wrap(function _callee7$(_context7) {
324
+ while (1) switch (_context7.prev = _context7.next) {
151
325
  case 0:
152
- return _context3.abrupt("return", new Promise( /*#__PURE__*/function () {
153
- var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee2(resolve) {
326
+ return _context7.abrupt("return", new Promise( /*#__PURE__*/function () {
327
+ var _ref8 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee6(resolve) {
154
328
  var result;
155
- return (0, _regeneratorRuntime2["default"])().wrap(function _callee2$(_context2) {
156
- while (1) switch (_context2.prev = _context2.next) {
329
+ return (0, _regeneratorRuntime2["default"])().wrap(function _callee6$(_context6) {
330
+ while (1) switch (_context6.prev = _context6.next) {
157
331
  case 0:
158
- _context2.prev = 0;
159
- _context2.next = 3;
332
+ _context6.prev = 0;
333
+ _context6.next = 3;
160
334
  return (0, _profile.fetchProfile)({
161
335
  "public": true
162
336
  });
163
337
  case 3:
164
- result = _context2.sent;
338
+ result = _context6.sent;
165
339
  resolve(!!result.profile);
166
- _context2.next = 10;
340
+ _context6.next = 10;
167
341
  break;
168
342
  case 7:
169
- _context2.prev = 7;
170
- _context2.t0 = _context2["catch"](0);
343
+ _context6.prev = 7;
344
+ _context6.t0 = _context6["catch"](0);
171
345
  resolve(false);
172
346
  case 10:
173
347
  case "end":
174
- return _context2.stop();
348
+ return _context6.stop();
175
349
  }
176
- }, _callee2, null, [[0, 7]]);
350
+ }, _callee6, null, [[0, 7]]);
177
351
  }));
178
- return function (_x) {
179
- return _ref4.apply(this, arguments);
352
+ return function (_x5) {
353
+ return _ref8.apply(this, arguments);
180
354
  };
181
355
  }()));
182
356
  case 1:
183
357
  case "end":
184
- return _context3.stop();
358
+ return _context7.stop();
185
359
  }
186
- }, _callee3);
360
+ }, _callee7);
187
361
  }));
188
362
  return function profileAvailable() {
189
- return _ref3.apply(this, arguments);
363
+ return _ref7.apply(this, arguments);
190
364
  };
191
365
  }();
192
366
 
@@ -200,9 +374,9 @@ var stringifyOptions = function stringifyOptions(options) {
200
374
 
201
375
  // Given the dimensions of the popup and the parent window returns the correct
202
376
  // position for the popup to be centered within the parent.
203
- var getPopupPosition = function getPopupPosition(window, _ref5) {
204
- var width = _ref5.width,
205
- height = _ref5.height;
377
+ var getPopupPosition = function getPopupPosition(window, _ref9) {
378
+ var width = _ref9.width,
379
+ height = _ref9.height;
206
380
  return {
207
381
  top: window.screenY + window.innerHeight / 2 - height / 2,
208
382
  left: window.screenX + window.innerWidth / 2 - width / 2