@cosmotech/core 1.18.0 → 1.18.1

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.
Binary file
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## **1.18.1** <sub><sup>2024-09-17 (3629ee8...3629ee8)</sup></sub>
2
+
3
+ ### Bug Fixes
4
+
5
+ - add mechanism to refresh tokens for Keycloak auth provider ([3629ee8](https://github.com/Cosmo-Tech/webapp-component-core/commit/3629ee8))
6
+
1
7
  ## **1.18.0** <sub><sup>2024-09-11 (cc08ecb...54ff3ae)</sup></sub>
2
8
 
3
9
  ### Features
package/dist/index.cjs.js CHANGED
@@ -41408,6 +41408,22 @@ function isUserSignedIn$2(callback) {
41408
41408
  }
41409
41409
  return currentProvider.isUserSignedIn(callback);
41410
41410
  }
41411
+ function refreshTokens$1() {
41412
+ return _refreshTokens.apply(this, arguments);
41413
+ }
41414
+ function _refreshTokens() {
41415
+ _refreshTokens = _asyncToGenerator(function* () {
41416
+ if (currentProvider === undefined) {
41417
+ return;
41418
+ }
41419
+ if (!currentProvider.refreshTokens) {
41420
+ console.warn('Method refreshTokens is not implemented in the current authentication provider');
41421
+ return;
41422
+ }
41423
+ return currentProvider.refreshTokens();
41424
+ });
41425
+ return _refreshTokens.apply(this, arguments);
41426
+ }
41411
41427
  function getUserEmail$2() {
41412
41428
  if (currentProvider === undefined) {
41413
41429
  return undefined;
@@ -41445,6 +41461,7 @@ var Auth = {
41445
41461
  signOut: signOut$2,
41446
41462
  onAuthStateChanged,
41447
41463
  isUserSignedIn: isUserSignedIn$2,
41464
+ refreshTokens: refreshTokens$1,
41448
41465
  getUserEmail: getUserEmail$2,
41449
41466
  getUserName: getUserName$2,
41450
41467
  getUserId: getUserId$2,
@@ -57303,7 +57320,7 @@ var redirectOnAuthSuccess = () => {
57303
57320
  var _acquireTokensByRequestAndAccount = /*#__PURE__*/function () {
57304
57321
  var _ref2 = _asyncToGenerator(function* (tokenReq, account) {
57305
57322
  if (!tokenReq) {
57306
- console.warn('No base access token request provided');
57323
+ console.warn('No token request provided');
57307
57324
  tokenReq = {};
57308
57325
  }
57309
57326
  tokenReq.account = account;
@@ -57317,7 +57334,7 @@ var _acquireTokensByRequestAndAccount = /*#__PURE__*/function () {
57317
57334
  return;
57318
57335
  } else if (((_silentTokenFetchErro = silentTokenFetchError.errorMessage) === null || _silentTokenFetchErro === void 0 ? void 0 : _silentTokenFetchErro.indexOf('interaction_required')) !== -1) {
57319
57336
  msalApp.acquireTokenRedirect(tokenReq).then(tokenRes => tokenRes) // Token acquired with interaction
57320
- .catch(tokenRedirectError => tokenRedirectError); // Token retrieval failed
57337
+ .catch(tokenRedirectError => console.error(tokenRedirectError));
57321
57338
  }
57322
57339
  throw silentTokenFetchError;
57323
57340
  });
@@ -57326,25 +57343,28 @@ var _acquireTokensByRequestAndAccount = /*#__PURE__*/function () {
57326
57343
  return _ref2.apply(this, arguments);
57327
57344
  };
57328
57345
  }();
57346
+
57347
+ // When forceRefresh is set to true, existing tokens in browser storage are ignored and new tokens are retrieved with
57348
+ // a silent request
57329
57349
  var acquireTokens = /*#__PURE__*/function () {
57330
57350
  var _ref3 = _asyncToGenerator(function* () {
57331
57351
  var _msalApp$getAllAccoun;
57352
+ var forceRefresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
57332
57353
  if (!checkInit()) return;
57333
- var idToken = readFromStorage('authIdToken');
57334
- var accessToken = readFromStorage('authAccessToken');
57335
- var authenticated = readFromStorage('authAuthenticated') === 'true';
57336
- if (authenticated && idToken != null && accessToken != null) {
57337
- return {
57338
- accessToken,
57339
- idToken
57340
- };
57354
+ if (!forceRefresh) {
57355
+ var idToken = readFromStorage('authIdToken');
57356
+ var accessToken = readFromStorage('authAccessToken');
57357
+ var authenticated = readFromStorage('authAuthenticated') === 'true';
57358
+ if (authenticated && idToken != null && accessToken != null) {
57359
+ return {
57360
+ accessToken,
57361
+ idToken
57362
+ };
57363
+ }
57341
57364
  }
57342
57365
  var account = (_msalApp$getAllAccoun = msalApp.getAllAccounts()) === null || _msalApp$getAllAccoun === void 0 ? void 0 : _msalApp$getAllAccoun[0];
57343
- var tokenReq = config.accessRequest;
57344
- if (account === undefined) {
57345
- return undefined;
57346
- }
57347
- return yield _acquireTokensByRequestAndAccount(tokenReq, account);
57366
+ if (account === undefined) return;
57367
+ return yield _acquireTokensByRequestAndAccount(config.accessRequest, account);
57348
57368
  });
57349
57369
  return function acquireTokens() {
57350
57370
  return _ref3.apply(this, arguments);
@@ -57398,6 +57418,10 @@ var signOut = () => {
57398
57418
  var isAsync = () => {
57399
57419
  return false;
57400
57420
  };
57421
+ var _updateTokensInStorage = tokens => {
57422
+ if (tokens !== null && tokens !== void 0 && tokens.idToken) writeToStorage('authIdToken', tokens.idToken);
57423
+ if (tokens !== null && tokens !== void 0 && tokens.accessToken) writeToStorage('authAccessToken', tokens.accessToken);
57424
+ };
57401
57425
  var _extractRolesFromAccessToken = accessToken => {
57402
57426
  var result = [];
57403
57427
  if (accessToken) {
@@ -57415,33 +57439,33 @@ var isUserSignedIn = /*#__PURE__*/function () {
57415
57439
  authData.authenticated = true;
57416
57440
  return true;
57417
57441
  }
57418
-
57419
- // Resume interaction if one is already in progress
57420
- if (readFromStorage('authInteractionInProgress') === name) {
57421
- clearFromStorage('authInteractionInProgress');
57422
- var locationHashParameters = new URLSearchParams(window.location.hash.substring(1));
57423
- if (locationHashParameters.has('state')) {
57424
- var _config2;
57425
- if (locationHashParameters.has('iss', (_config2 = config) === null || _config2 === void 0 || (_config2 = _config2.msalConfig) === null || _config2 === void 0 || (_config2 = _config2.auth) === null || _config2 === void 0 || (_config2 = _config2.authorityMetadata) === null || _config2 === void 0 ? void 0 : _config2.issuer)) {
57426
- // Resume redirect workflow process
57427
- msalApp.handleRedirectPromise().then(handleResponse);
57428
- } else if (locationHashParameters.has('iss')) {
57429
- var _config3;
57430
- console.warn('Issuer found in url ("' + ((_config3 = config) === null || _config3 === void 0 || (_config3 = _config3.msalConfig) === null || _config3 === void 0 || (_config3 = _config3.auth) === null || _config3 === void 0 || (_config3 = _config3.authorityMetadata) === null || _config3 === void 0 ? void 0 : _config3.issuer) + '") does not match the keycloak configuration ("' + locationHashParameters.get('iss') + '")');
57442
+ try {
57443
+ // Resume interaction if one is already in progress
57444
+ if (readFromStorage('authInteractionInProgress') === name) {
57445
+ clearFromStorage('authInteractionInProgress');
57446
+ var locationHashParameters = new URLSearchParams(window.location.hash.substring(1));
57447
+ if (locationHashParameters.has('state')) {
57448
+ var _config2;
57449
+ if (locationHashParameters.has('iss', (_config2 = config) === null || _config2 === void 0 || (_config2 = _config2.msalConfig) === null || _config2 === void 0 || (_config2 = _config2.auth) === null || _config2 === void 0 || (_config2 = _config2.authorityMetadata) === null || _config2 === void 0 ? void 0 : _config2.issuer)) {
57450
+ msalApp.handleRedirectPromise().then(handleResponse); // Resume redirect workflow process
57451
+ } else if (locationHashParameters.has('iss')) {
57452
+ var _config3;
57453
+ var configIssuer = (_config3 = config) === null || _config3 === void 0 || (_config3 = _config3.msalConfig) === null || _config3 === void 0 || (_config3 = _config3.auth) === null || _config3 === void 0 || (_config3 = _config3.authorityMetadata) === null || _config3 === void 0 ? void 0 : _config3.issuer;
57454
+ var urlIssuer = locationHashParameters.get('iss');
57455
+ console.warn("Issuer found in url \"".concat(urlIssuer, "\" does not match keycloak configuration: \"").concat(configIssuer, "\""));
57456
+ }
57431
57457
  }
57432
57458
  }
57433
- }
57434
57459
 
57435
- // Otherwise, try to acquire a token silently to implement SSO
57436
- var tokens = yield acquireTokens();
57437
- if ((tokens === null || tokens === void 0 ? void 0 : tokens.idToken) !== undefined) {
57438
- writeToStorage('authIdToken', tokens.idToken);
57439
- }
57440
- if ((tokens === null || tokens === void 0 ? void 0 : tokens.accessToken) !== undefined) {
57441
- var accessToken = tokens.accessToken;
57442
- authData.roles = _extractRolesFromAccessToken(accessToken);
57443
- writeToStorage('authAccessToken', accessToken);
57444
- return true;
57460
+ // Otherwise, try to acquire a token silently to implement SSO
57461
+ var tokens = yield acquireTokens();
57462
+ _updateTokensInStorage(tokens);
57463
+ if ((tokens === null || tokens === void 0 ? void 0 : tokens.accessToken) !== undefined) {
57464
+ authData.roles = _extractRolesFromAccessToken(tokens.accessToken);
57465
+ return true;
57466
+ }
57467
+ } catch (e) {
57468
+ console.error(e);
57445
57469
  }
57446
57470
  return false;
57447
57471
  });
@@ -57449,6 +57473,16 @@ var isUserSignedIn = /*#__PURE__*/function () {
57449
57473
  return _ref4.apply(this, arguments);
57450
57474
  };
57451
57475
  }();
57476
+ var refreshTokens = /*#__PURE__*/function () {
57477
+ var _ref5 = _asyncToGenerator(function* () {
57478
+ var tokens = yield acquireTokens(true);
57479
+ _updateTokensInStorage(tokens);
57480
+ return tokens;
57481
+ });
57482
+ return function refreshTokens() {
57483
+ return _ref5.apply(this, arguments);
57484
+ };
57485
+ }();
57452
57486
  var getUserEmail = () => {
57453
57487
  var _authData$userEmail, _msalApp$getAllAccoun2;
57454
57488
  if (!checkInit()) return;
@@ -57484,6 +57518,7 @@ var AuthKeycloakRedirect = /*#__PURE__*/Object.freeze({
57484
57518
  isAsync: isAsync,
57485
57519
  isUserSignedIn: isUserSignedIn,
57486
57520
  name: name,
57521
+ refreshTokens: refreshTokens,
57487
57522
  setConfig: setConfig,
57488
57523
  signIn: signIn,
57489
57524
  signOut: signOut
package/dist/index.esm.js CHANGED
@@ -41406,6 +41406,22 @@ function isUserSignedIn$2(callback) {
41406
41406
  }
41407
41407
  return currentProvider.isUserSignedIn(callback);
41408
41408
  }
41409
+ function refreshTokens$1() {
41410
+ return _refreshTokens.apply(this, arguments);
41411
+ }
41412
+ function _refreshTokens() {
41413
+ _refreshTokens = _asyncToGenerator(function* () {
41414
+ if (currentProvider === undefined) {
41415
+ return;
41416
+ }
41417
+ if (!currentProvider.refreshTokens) {
41418
+ console.warn('Method refreshTokens is not implemented in the current authentication provider');
41419
+ return;
41420
+ }
41421
+ return currentProvider.refreshTokens();
41422
+ });
41423
+ return _refreshTokens.apply(this, arguments);
41424
+ }
41409
41425
  function getUserEmail$2() {
41410
41426
  if (currentProvider === undefined) {
41411
41427
  return undefined;
@@ -41443,6 +41459,7 @@ var Auth = {
41443
41459
  signOut: signOut$2,
41444
41460
  onAuthStateChanged,
41445
41461
  isUserSignedIn: isUserSignedIn$2,
41462
+ refreshTokens: refreshTokens$1,
41446
41463
  getUserEmail: getUserEmail$2,
41447
41464
  getUserName: getUserName$2,
41448
41465
  getUserId: getUserId$2,
@@ -57301,7 +57318,7 @@ var redirectOnAuthSuccess = () => {
57301
57318
  var _acquireTokensByRequestAndAccount = /*#__PURE__*/function () {
57302
57319
  var _ref2 = _asyncToGenerator(function* (tokenReq, account) {
57303
57320
  if (!tokenReq) {
57304
- console.warn('No base access token request provided');
57321
+ console.warn('No token request provided');
57305
57322
  tokenReq = {};
57306
57323
  }
57307
57324
  tokenReq.account = account;
@@ -57315,7 +57332,7 @@ var _acquireTokensByRequestAndAccount = /*#__PURE__*/function () {
57315
57332
  return;
57316
57333
  } else if (((_silentTokenFetchErro = silentTokenFetchError.errorMessage) === null || _silentTokenFetchErro === void 0 ? void 0 : _silentTokenFetchErro.indexOf('interaction_required')) !== -1) {
57317
57334
  msalApp.acquireTokenRedirect(tokenReq).then(tokenRes => tokenRes) // Token acquired with interaction
57318
- .catch(tokenRedirectError => tokenRedirectError); // Token retrieval failed
57335
+ .catch(tokenRedirectError => console.error(tokenRedirectError));
57319
57336
  }
57320
57337
  throw silentTokenFetchError;
57321
57338
  });
@@ -57324,25 +57341,28 @@ var _acquireTokensByRequestAndAccount = /*#__PURE__*/function () {
57324
57341
  return _ref2.apply(this, arguments);
57325
57342
  };
57326
57343
  }();
57344
+
57345
+ // When forceRefresh is set to true, existing tokens in browser storage are ignored and new tokens are retrieved with
57346
+ // a silent request
57327
57347
  var acquireTokens = /*#__PURE__*/function () {
57328
57348
  var _ref3 = _asyncToGenerator(function* () {
57329
57349
  var _msalApp$getAllAccoun;
57350
+ var forceRefresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
57330
57351
  if (!checkInit()) return;
57331
- var idToken = readFromStorage('authIdToken');
57332
- var accessToken = readFromStorage('authAccessToken');
57333
- var authenticated = readFromStorage('authAuthenticated') === 'true';
57334
- if (authenticated && idToken != null && accessToken != null) {
57335
- return {
57336
- accessToken,
57337
- idToken
57338
- };
57352
+ if (!forceRefresh) {
57353
+ var idToken = readFromStorage('authIdToken');
57354
+ var accessToken = readFromStorage('authAccessToken');
57355
+ var authenticated = readFromStorage('authAuthenticated') === 'true';
57356
+ if (authenticated && idToken != null && accessToken != null) {
57357
+ return {
57358
+ accessToken,
57359
+ idToken
57360
+ };
57361
+ }
57339
57362
  }
57340
57363
  var account = (_msalApp$getAllAccoun = msalApp.getAllAccounts()) === null || _msalApp$getAllAccoun === void 0 ? void 0 : _msalApp$getAllAccoun[0];
57341
- var tokenReq = config.accessRequest;
57342
- if (account === undefined) {
57343
- return undefined;
57344
- }
57345
- return yield _acquireTokensByRequestAndAccount(tokenReq, account);
57364
+ if (account === undefined) return;
57365
+ return yield _acquireTokensByRequestAndAccount(config.accessRequest, account);
57346
57366
  });
57347
57367
  return function acquireTokens() {
57348
57368
  return _ref3.apply(this, arguments);
@@ -57396,6 +57416,10 @@ var signOut = () => {
57396
57416
  var isAsync = () => {
57397
57417
  return false;
57398
57418
  };
57419
+ var _updateTokensInStorage = tokens => {
57420
+ if (tokens !== null && tokens !== void 0 && tokens.idToken) writeToStorage('authIdToken', tokens.idToken);
57421
+ if (tokens !== null && tokens !== void 0 && tokens.accessToken) writeToStorage('authAccessToken', tokens.accessToken);
57422
+ };
57399
57423
  var _extractRolesFromAccessToken = accessToken => {
57400
57424
  var result = [];
57401
57425
  if (accessToken) {
@@ -57413,33 +57437,33 @@ var isUserSignedIn = /*#__PURE__*/function () {
57413
57437
  authData.authenticated = true;
57414
57438
  return true;
57415
57439
  }
57416
-
57417
- // Resume interaction if one is already in progress
57418
- if (readFromStorage('authInteractionInProgress') === name) {
57419
- clearFromStorage('authInteractionInProgress');
57420
- var locationHashParameters = new URLSearchParams(window.location.hash.substring(1));
57421
- if (locationHashParameters.has('state')) {
57422
- var _config2;
57423
- if (locationHashParameters.has('iss', (_config2 = config) === null || _config2 === void 0 || (_config2 = _config2.msalConfig) === null || _config2 === void 0 || (_config2 = _config2.auth) === null || _config2 === void 0 || (_config2 = _config2.authorityMetadata) === null || _config2 === void 0 ? void 0 : _config2.issuer)) {
57424
- // Resume redirect workflow process
57425
- msalApp.handleRedirectPromise().then(handleResponse);
57426
- } else if (locationHashParameters.has('iss')) {
57427
- var _config3;
57428
- console.warn('Issuer found in url ("' + ((_config3 = config) === null || _config3 === void 0 || (_config3 = _config3.msalConfig) === null || _config3 === void 0 || (_config3 = _config3.auth) === null || _config3 === void 0 || (_config3 = _config3.authorityMetadata) === null || _config3 === void 0 ? void 0 : _config3.issuer) + '") does not match the keycloak configuration ("' + locationHashParameters.get('iss') + '")');
57440
+ try {
57441
+ // Resume interaction if one is already in progress
57442
+ if (readFromStorage('authInteractionInProgress') === name) {
57443
+ clearFromStorage('authInteractionInProgress');
57444
+ var locationHashParameters = new URLSearchParams(window.location.hash.substring(1));
57445
+ if (locationHashParameters.has('state')) {
57446
+ var _config2;
57447
+ if (locationHashParameters.has('iss', (_config2 = config) === null || _config2 === void 0 || (_config2 = _config2.msalConfig) === null || _config2 === void 0 || (_config2 = _config2.auth) === null || _config2 === void 0 || (_config2 = _config2.authorityMetadata) === null || _config2 === void 0 ? void 0 : _config2.issuer)) {
57448
+ msalApp.handleRedirectPromise().then(handleResponse); // Resume redirect workflow process
57449
+ } else if (locationHashParameters.has('iss')) {
57450
+ var _config3;
57451
+ var configIssuer = (_config3 = config) === null || _config3 === void 0 || (_config3 = _config3.msalConfig) === null || _config3 === void 0 || (_config3 = _config3.auth) === null || _config3 === void 0 || (_config3 = _config3.authorityMetadata) === null || _config3 === void 0 ? void 0 : _config3.issuer;
57452
+ var urlIssuer = locationHashParameters.get('iss');
57453
+ console.warn("Issuer found in url \"".concat(urlIssuer, "\" does not match keycloak configuration: \"").concat(configIssuer, "\""));
57454
+ }
57429
57455
  }
57430
57456
  }
57431
- }
57432
57457
 
57433
- // Otherwise, try to acquire a token silently to implement SSO
57434
- var tokens = yield acquireTokens();
57435
- if ((tokens === null || tokens === void 0 ? void 0 : tokens.idToken) !== undefined) {
57436
- writeToStorage('authIdToken', tokens.idToken);
57437
- }
57438
- if ((tokens === null || tokens === void 0 ? void 0 : tokens.accessToken) !== undefined) {
57439
- var accessToken = tokens.accessToken;
57440
- authData.roles = _extractRolesFromAccessToken(accessToken);
57441
- writeToStorage('authAccessToken', accessToken);
57442
- return true;
57458
+ // Otherwise, try to acquire a token silently to implement SSO
57459
+ var tokens = yield acquireTokens();
57460
+ _updateTokensInStorage(tokens);
57461
+ if ((tokens === null || tokens === void 0 ? void 0 : tokens.accessToken) !== undefined) {
57462
+ authData.roles = _extractRolesFromAccessToken(tokens.accessToken);
57463
+ return true;
57464
+ }
57465
+ } catch (e) {
57466
+ console.error(e);
57443
57467
  }
57444
57468
  return false;
57445
57469
  });
@@ -57447,6 +57471,16 @@ var isUserSignedIn = /*#__PURE__*/function () {
57447
57471
  return _ref4.apply(this, arguments);
57448
57472
  };
57449
57473
  }();
57474
+ var refreshTokens = /*#__PURE__*/function () {
57475
+ var _ref5 = _asyncToGenerator(function* () {
57476
+ var tokens = yield acquireTokens(true);
57477
+ _updateTokensInStorage(tokens);
57478
+ return tokens;
57479
+ });
57480
+ return function refreshTokens() {
57481
+ return _ref5.apply(this, arguments);
57482
+ };
57483
+ }();
57450
57484
  var getUserEmail = () => {
57451
57485
  var _authData$userEmail, _msalApp$getAllAccoun2;
57452
57486
  if (!checkInit()) return;
@@ -57482,6 +57516,7 @@ var AuthKeycloakRedirect = /*#__PURE__*/Object.freeze({
57482
57516
  isAsync: isAsync,
57483
57517
  isUserSignedIn: isUserSignedIn,
57484
57518
  name: name,
57519
+ refreshTokens: refreshTokens,
57485
57520
  setConfig: setConfig,
57486
57521
  signIn: signIn,
57487
57522
  signOut: signOut
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmotech/core",
3
- "version": "1.18.0",
3
+ "version": "1.18.1",
4
4
  "description": "",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",