@axa-fr/react-oidc 5.8.0-alpha0 → 5.9.0

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.
Files changed (54) hide show
  1. package/README.md +33 -2
  2. package/dist/OidcProvider.d.ts +2 -0
  3. package/dist/OidcProvider.d.ts.map +1 -1
  4. package/dist/OidcProvider.js +5 -5
  5. package/dist/OidcProvider.js.map +1 -1
  6. package/dist/OidcSecure.d.ts +2 -1
  7. package/dist/OidcSecure.d.ts.map +1 -1
  8. package/dist/OidcSecure.js +5 -4
  9. package/dist/OidcSecure.js.map +1 -1
  10. package/dist/ReactOidc.d.ts +1 -2
  11. package/dist/ReactOidc.d.ts.map +1 -1
  12. package/dist/ReactOidc.js +4 -7
  13. package/dist/ReactOidc.js.map +1 -1
  14. package/dist/core/default-component/Callback.component.d.ts.map +1 -1
  15. package/dist/core/default-component/Callback.component.js +9 -11
  16. package/dist/core/default-component/Callback.component.js.map +1 -1
  17. package/dist/core/default-component/ServiceWorkerInstall.component.d.ts.map +1 -1
  18. package/dist/core/default-component/ServiceWorkerInstall.component.js +4 -7
  19. package/dist/core/default-component/ServiceWorkerInstall.component.js.map +1 -1
  20. package/dist/core/default-component/SilentCallback.component.d.ts.map +1 -1
  21. package/dist/core/default-component/SilentCallback.component.js +3 -5
  22. package/dist/core/default-component/SilentCallback.component.js.map +1 -1
  23. package/dist/core/routes/OidcRoutes.d.ts +2 -0
  24. package/dist/core/routes/OidcRoutes.d.ts.map +1 -1
  25. package/dist/core/routes/OidcRoutes.js +7 -5
  26. package/dist/core/routes/OidcRoutes.js.map +1 -1
  27. package/dist/core/routes/withRouter.d.ts +3 -2
  28. package/dist/core/routes/withRouter.d.ts.map +1 -1
  29. package/dist/core/routes/withRouter.js.map +1 -1
  30. package/dist/vanilla/initSession.js +9 -9
  31. package/dist/vanilla/initSession.js.map +1 -1
  32. package/dist/vanilla/oidc.d.ts +11 -5
  33. package/dist/vanilla/oidc.d.ts.map +1 -1
  34. package/dist/vanilla/oidc.js +194 -193
  35. package/dist/vanilla/oidc.js.map +1 -1
  36. package/dist/vanilla/timer.d.ts.map +1 -1
  37. package/dist/vanilla/timer.js +14 -6
  38. package/dist/vanilla/timer.js.map +1 -1
  39. package/package.json +2 -2
  40. package/src/App.tsx +14 -10
  41. package/src/Home.tsx +5 -3
  42. package/src/MultiAuth.tsx +1 -2
  43. package/src/index.tsx +1 -1
  44. package/src/oidc/OidcProvider.tsx +7 -2
  45. package/src/oidc/OidcSecure.tsx +9 -5
  46. package/src/oidc/ReactOidc.tsx +3 -6
  47. package/src/oidc/core/default-component/Callback.component.tsx +12 -15
  48. package/src/oidc/core/default-component/ServiceWorkerInstall.component.tsx +4 -7
  49. package/src/oidc/core/default-component/SilentCallback.component.tsx +3 -2
  50. package/src/oidc/core/routes/OidcRoutes.tsx +9 -4
  51. package/src/oidc/core/routes/withRouter.tsx +5 -1
  52. package/src/oidc/vanilla/initSession.ts +9 -9
  53. package/src/oidc/vanilla/oidc.ts +132 -109
  54. package/src/oidc/vanilla/timer.ts +15 -7
@@ -2,6 +2,10 @@ import { AuthorizationServiceConfiguration } from '@openid/appauth';
2
2
  export interface StringMap {
3
3
  [key: string]: string;
4
4
  }
5
+ export interface loginCallbackResult {
6
+ state: string;
7
+ callbackPath: string;
8
+ }
5
9
  export interface AuthorityConfiguration {
6
10
  authorization_endpoint: string;
7
11
  token_endpoint: string;
@@ -23,6 +27,7 @@ export declare type OidcConfiguration = {
23
27
  extras?: StringMap;
24
28
  token_request_extras?: StringMap;
25
29
  };
30
+ export declare const getLoginParams: (configurationName: any) => any;
26
31
  export declare class Oidc {
27
32
  configuration: OidcConfiguration;
28
33
  userInfo: null;
@@ -64,12 +69,13 @@ export declare class Oidc {
64
69
  silentSigninCallbackFromIFrame(): void;
65
70
  silentSigninAsync(): Promise<any>;
66
71
  initAsync(authority: string, authorityConfiguration: AuthorityConfiguration): Promise<AuthorizationServiceConfiguration>;
67
- tryKeepExistingSessionAsync(): Promise<boolean>;
68
- loginAsync(callbackPath?: string, extras?: StringMap, installServiceWorker?: boolean): Promise<void>;
72
+ tryKeepExistingSessionPromise: any;
73
+ tryKeepExistingSessionAsync(): Promise<any>;
74
+ loginAsync(callbackPath?: string, extras?: StringMap, installServiceWorker?: boolean, state?: string): Promise<void>;
69
75
  loginCallbackAsync(): Promise<unknown>;
70
- renewTokensAsync(extras?: StringMap): Promise<void>;
71
- refreshTokensAsync(refreshToken: any, silentEvent?: boolean, extras?: StringMap): Promise<any>;
72
- loginCallbackWithAutoTokensRenewAsync(): Promise<string>;
76
+ refreshTokensAsync(refreshToken: any, silentEvent?: boolean): Promise<any>;
77
+ loginCallbackWithAutoTokensRenewPromise: Promise<loginCallbackResult>;
78
+ loginCallbackWithAutoTokensRenewAsync(): Promise<loginCallbackResult>;
73
79
  userInfoAsync(): Promise<any>;
74
80
  destroyAsync(): Promise<void>;
75
81
  logoutAsync(callbackPath?: string | undefined, extras?: StringMap): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"oidc.d.ts","sourceRoot":"","sources":["../../src/oidc/vanilla/oidc.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,iCAAiC,EAQpC,MAAM,iBAAiB,CAAC;AA8CzB,MAAM,WAAW,SAAS;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACnC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAGA,oBAAY,iBAAiB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAC,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAC,MAAM,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IACjB,uBAAuB,CAAC,EAAE,sBAAsB,CAAC;IAClD,+CAA+C,CAAC,EAAE,MAAM,CAAC;IACzD,2BAA2B,CAAC,EAAC,MAAM,CAAC;IACnC,mBAAmB,CAAC,EAAC,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAC,SAAS,CAAA;IACjB,oBAAoB,CAAC,EAAC,SAAS,CAAC;CACpC,CAAC;AAgIF,qBAAa,IAAI;IACN,aAAa,EAAE,iBAAiB,CAAC;IACjC,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,aAAa,CAAC,CAAM;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,OAAO,CAAC,CAAM;gBACV,aAAa,EAAC,iBAAiB,EAAE,iBAAiB,SAAU;IAmBxE,eAAe,CAAC,IAAI,KAAA;IAMpB,uBAAuB,CAAC,EAAE,KAAA;IAK1B,YAAY,CAAC,SAAS,KAAA,EAAE,IAAI,KAAA;IAK5B,MAAM,CAAC,WAAW,CAAC,aAAa,KAAA,EAAE,IAAI,SAAU;IAGhD,MAAM,CAAC,GAAG,CAAC,IAAI,SAAU;IAOzB,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;MAAc;IAE/B,8BAA8B;IAKxB,iBAAiB;IA8CjB,SAAS,CAAC,SAAS,EAAC,MAAM,EAAE,sBAAsB,EAAC,sBAAsB;IAYzE,2BAA2B;IAuD3B,UAAU,CAAC,YAAY,GAAC,MAAgB,EAAE,MAAM,GAAC,SAAc,EAAE,oBAAoB,UAAK;IA+C1F,kBAAkB;IA+ElB,gBAAgB,CAAC,MAAM,GAAC,SAAc;IAYtC,kBAAkB,CAAC,YAAY,KAAA,EAAE,WAAW,UAAQ,EAAE,MAAM,GAAC,SAAc;IA8DhF,qCAAqC,IAAG,OAAO,CAAC,MAAM,CAAC;IAIvD,aAAa;IAIP,YAAY;IAab,WAAW,CAAC,YAAY,GAAE,MAAM,GAAG,SAAqB,EAAE,MAAM,GAAC,SAAc;CA2BtF;AAGD,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"oidc.d.ts","sourceRoot":"","sources":["../../src/oidc/vanilla/oidc.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,iCAAiC,EAQpC,MAAM,iBAAiB,CAAC;AA8CzB,MAAM,WAAW,SAAS;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACnC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAGA,oBAAY,iBAAiB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAC,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAC,MAAM,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IACjB,uBAAuB,CAAC,EAAE,sBAAsB,CAAC;IAClD,+CAA+C,CAAC,EAAE,MAAM,CAAC;IACzD,2BAA2B,CAAC,EAAC,MAAM,CAAC;IACnC,mBAAmB,CAAC,EAAC,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAC,SAAS,CAAA;IACjB,oBAAoB,CAAC,EAAC,SAAS,CAAC;CACpC,CAAC;AA8CF,eAAO,MAAM,cAAc,iCAE1B,CAAA;AA6ED,qBAAa,IAAI;IACN,aAAa,EAAE,iBAAiB,CAAC;IACjC,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,aAAa,CAAC,CAAM;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,OAAO,CAAC,CAAM;gBACV,aAAa,EAAC,iBAAiB,EAAE,iBAAiB,SAAU;IAmBxE,eAAe,CAAC,IAAI,KAAA;IAMpB,uBAAuB,CAAC,EAAE,KAAA;IAK1B,YAAY,CAAC,SAAS,KAAA,EAAE,IAAI,KAAA;IAK5B,MAAM,CAAC,WAAW,CAAC,aAAa,KAAA,EAAE,IAAI,SAAU;IAGhD,MAAM,CAAC,GAAG,CAAC,IAAI,SAAU;IAQzB,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;MAAc;IAE/B,8BAA8B;IAKxB,iBAAiB;IA8CjB,SAAS,CAAC,SAAS,EAAC,MAAM,EAAE,sBAAsB,EAAC,sBAAsB;IAY/E,6BAA6B,MAAQ;IAC/B,2BAA2B;IA+E3B,UAAU,CAAC,YAAY,GAAC,MAAgB,EAAE,MAAM,GAAC,SAAc,EAAE,oBAAoB,UAAK,EAAE,KAAK,GAAC,MAAgB;IAgDlH,kBAAkB;IAoFlB,kBAAkB,CAAC,YAAY,KAAA,EAAE,WAAW,UAAQ;IAwD1D,uCAAuC,EAAC,OAAO,CAAC,mBAAmB,CAAC,CAAQ;IAC3E,qCAAqC,IAAG,OAAO,CAAC,mBAAmB,CAAC;IAWpE,aAAa;IAIP,YAAY;IAab,WAAW,CAAC,YAAY,GAAE,MAAM,GAAG,SAAqB,EAAE,MAAM,GAAC,SAAc;CA0BtF;AAGD,eAAe,IAAI,CAAC"}
@@ -50,7 +50,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
50
50
  return (mod && mod.__esModule) ? mod : { "default": mod };
51
51
  };
52
52
  Object.defineProperty(exports, "__esModule", { value: true });
53
- exports.Oidc = void 0;
53
+ exports.Oidc = exports.getLoginParams = void 0;
54
54
  var appauth_1 = require("@openid/appauth");
55
55
  var noHashQueryStringUtils_1 = require("./noHashQueryStringUtils");
56
56
  var initWorker_1 = require("./initWorker");
@@ -82,7 +82,7 @@ var extractAccessTokenPayload = function (tokens) {
82
82
  }
83
83
  var accessToken = tokens.accessToken;
84
84
  try {
85
- if (!accessToken || countLetter(accessToken, '.') === 2) {
85
+ if (!accessToken || countLetter(accessToken, '.') != 2) {
86
86
  return null;
87
87
  }
88
88
  return JSON.parse(atob(accessToken.split('.')[1]));
@@ -125,74 +125,62 @@ var loginCallbackWithAutoTokensRenewAsync = function (oidc) { return __awaiter(v
125
125
  return [4 /*yield*/, autoRenewTokensAsync(oidc, tokens.refreshToken, oidc.tokens.expiresAt)];
126
126
  case 5:
127
127
  _b.timeoutId = _c.sent();
128
- return [2 /*return*/, response.state];
128
+ return [2 /*return*/, { state: response.state, callbackPath: response.callbackPath }];
129
129
  }
130
130
  });
131
131
  }); };
132
- var renewTokenAsync = function (oidc, refreshToken, extras) {
133
- if (extras === void 0) { extras = null; }
134
- return __awaiter(void 0, void 0, void 0, function () {
135
- var tokens, _a;
136
- return __generator(this, function (_b) {
137
- switch (_b.label) {
138
- case 0: return [4 /*yield*/, oidc.refreshTokensAsync(refreshToken, false, extras)];
139
- case 1:
140
- tokens = _b.sent();
141
- _a = oidc;
142
- return [4 /*yield*/, setTokensAsync(oidc.serviceWorker, tokens)];
143
- case 2:
144
- _a.tokens = _b.sent();
145
- if (!!oidc.serviceWorker) return [3 /*break*/, 4];
146
- return [4 /*yield*/, oidc.session.setTokens(oidc.tokens)];
147
- case 3:
148
- _b.sent();
149
- _b.label = 4;
150
- case 4:
151
- if (!oidc.tokens) {
152
- return [2 /*return*/, null];
153
- }
154
- oidc.publishEvent(Oidc.eventNames.token_renewed, oidc.tokens);
155
- return [2 /*return*/, oidc.tokens];
156
- }
157
- });
158
- });
159
- };
160
132
  var autoRenewTokensAsync = function (oidc, refreshToken, expiresAt) { return __awaiter(void 0, void 0, void 0, function () {
161
133
  var refreshTimeBeforeTokensExpirationInSecond;
162
134
  var _a;
163
135
  return __generator(this, function (_b) {
164
136
  refreshTimeBeforeTokensExpirationInSecond = (_a = oidc.configuration.refresh_time_before_tokens_expiration_in_second) !== null && _a !== void 0 ? _a : 60;
165
137
  return [2 /*return*/, timer_1.default.setTimeout(function () { return __awaiter(void 0, void 0, void 0, function () {
166
- var currentTimeUnixSecond, timeInfo, tokens, _a, _b;
167
- return __generator(this, function (_c) {
168
- switch (_c.label) {
138
+ var currentTimeUnixSecond, timeInfo, tokens, _a, _b, _c;
139
+ return __generator(this, function (_d) {
140
+ switch (_d.label) {
169
141
  case 0:
170
142
  currentTimeUnixSecond = new Date().getTime() / 1000;
171
143
  timeInfo = { timeLeft: ((expiresAt - refreshTimeBeforeTokensExpirationInSecond) - currentTimeUnixSecond) };
172
144
  oidc.publishEvent(Oidc.eventNames.token_timer, timeInfo);
173
- if (!(currentTimeUnixSecond > (expiresAt - refreshTimeBeforeTokensExpirationInSecond))) return [3 /*break*/, 4];
174
- return [4 /*yield*/, renewTokenAsync(oidc, refreshToken)];
145
+ if (!(currentTimeUnixSecond > (expiresAt - refreshTimeBeforeTokensExpirationInSecond))) return [3 /*break*/, 6];
146
+ return [4 /*yield*/, oidc.refreshTokensAsync(refreshToken)];
175
147
  case 1:
176
- tokens = _c.sent();
177
- if (!tokens) return [3 /*break*/, 3];
148
+ tokens = _d.sent();
178
149
  _a = oidc;
179
- return [4 /*yield*/, autoRenewTokensAsync(oidc, tokens.refreshToken, oidc.tokens.expiresAt)];
150
+ return [4 /*yield*/, setTokensAsync(oidc.serviceWorker, tokens)];
180
151
  case 2:
181
- _a.timeoutId = _c.sent();
182
- _c.label = 3;
183
- case 3: return [3 /*break*/, 6];
152
+ _a.tokens = _d.sent();
153
+ if (!!oidc.serviceWorker) return [3 /*break*/, 4];
154
+ return [4 /*yield*/, oidc.session.setTokens(oidc.tokens)];
155
+ case 3:
156
+ _d.sent();
157
+ _d.label = 4;
184
158
  case 4:
159
+ if (!oidc.tokens) {
160
+ return [2 /*return*/];
161
+ }
162
+ oidc.publishEvent(Oidc.eventNames.token_renewed, oidc.tokens);
185
163
  _b = oidc;
186
- return [4 /*yield*/, autoRenewTokensAsync(oidc, refreshToken, expiresAt)];
164
+ return [4 /*yield*/, autoRenewTokensAsync(oidc, tokens.refreshToken, oidc.tokens.expiresAt)];
187
165
  case 5:
188
- _b.timeoutId = _c.sent();
189
- _c.label = 6;
190
- case 6: return [2 /*return*/];
166
+ _b.timeoutId = _d.sent();
167
+ return [3 /*break*/, 8];
168
+ case 6:
169
+ _c = oidc;
170
+ return [4 /*yield*/, autoRenewTokensAsync(oidc, refreshToken, expiresAt)];
171
+ case 7:
172
+ _c.timeoutId = _d.sent();
173
+ _d.label = 8;
174
+ case 8: return [2 /*return*/];
191
175
  }
192
176
  });
193
177
  }); }, 1000)];
194
178
  });
195
179
  }); };
180
+ var getLoginParams = function (configurationName) {
181
+ return JSON.parse(sessionStorage["oidc_login.".concat(configurationName)]);
182
+ };
183
+ exports.getLoginParams = getLoginParams;
196
184
  var userInfoAsync = function (oidc) { return __awaiter(void 0, void 0, void 0, function () {
197
185
  var accessToken, oidcServerConfiguration, url, fetchUserInfo, userInfo;
198
186
  return __generator(this, function (_a) {
@@ -291,6 +279,8 @@ var getRandomInt = function (max) {
291
279
  var Oidc = /** @class */ (function () {
292
280
  function Oidc(configuration, configurationName) {
293
281
  if (configurationName === void 0) { configurationName = "default"; }
282
+ this.tryKeepExistingSessionPromise = null;
283
+ this.loginCallbackWithAutoTokensRenewPromise = null;
294
284
  this.configuration = configuration;
295
285
  this.configurationName = configurationName;
296
286
  this.tokens = null;
@@ -314,7 +304,7 @@ var Oidc = /** @class */ (function () {
314
304
  return id;
315
305
  };
316
306
  Oidc.prototype.removeEventSubscription = function (id) {
317
- var newEvents = this.events.filter(function (e) { return e.id === id; });
307
+ var newEvents = this.events.filter(function (e) { return e.id !== id; });
318
308
  this.events = newEvents;
319
309
  };
320
310
  Oidc.prototype.publishEvent = function (eventName, data) {
@@ -328,7 +318,8 @@ var Oidc = /** @class */ (function () {
328
318
  };
329
319
  Oidc.get = function (name) {
330
320
  if (name === void 0) { name = "default"; }
331
- if (!oidcDatabase.hasOwnProperty(name)) {
321
+ var insideBrowser = (typeof process === 'undefined');
322
+ if (!oidcDatabase.hasOwnProperty(name) && insideBrowser) {
332
323
  throw Error("Oidc library does seem initialized.\nPlease checkout that you are using OIDC hook inside a <OidcProvider configurationName=\"".concat(name, "\"></OidcProvider> compoment."));
333
324
  }
334
325
  return oidcDatabase[name];
@@ -411,118 +402,145 @@ var Oidc = /** @class */ (function () {
411
402
  };
412
403
  Oidc.prototype.tryKeepExistingSessionAsync = function () {
413
404
  return __awaiter(this, void 0, void 0, function () {
414
- var serviceWorker, configuration, oidcServerConfiguration, tokens, updatedTokens, _a, _b, session, tokens, updatedTokens, _c, _d, exception_1;
415
- return __generator(this, function (_e) {
416
- switch (_e.label) {
417
- case 0:
418
- if (this.tokens != null) {
419
- return [2 /*return*/, false];
420
- }
421
- this.publishEvent(eventNames.tryKeepExistingSessionAsync_begin, {});
422
- _e.label = 1;
423
- case 1:
424
- _e.trys.push([1, 15, , 18]);
425
- configuration = this.configuration;
426
- return [4 /*yield*/, this.initAsync(configuration.authority, configuration.authority_configuration)];
427
- case 2:
428
- oidcServerConfiguration = _e.sent();
429
- return [4 /*yield*/, (0, initWorker_1.initWorkerAsync)(configuration.service_worker_relative_url, this.configurationName)];
430
- case 3:
431
- serviceWorker = _e.sent();
432
- if (!serviceWorker) return [3 /*break*/, 9];
433
- return [4 /*yield*/, serviceWorker.initAsync(oidcServerConfiguration, "tryKeepExistingSessionAsync")];
434
- case 4:
435
- tokens = (_e.sent()).tokens;
436
- if (!tokens) return [3 /*break*/, 8];
437
- serviceWorker.startKeepAliveServiceWorker();
438
- return [4 /*yield*/, this.refreshTokensAsync(tokens.refresh_token, true)];
439
- case 5:
440
- updatedTokens = _e.sent();
441
- // @ts-ignore
442
- _a = this;
443
- return [4 /*yield*/, setTokensAsync(serviceWorker, updatedTokens)];
444
- case 6:
445
- // @ts-ignore
446
- _a.tokens = _e.sent();
447
- this.serviceWorker = serviceWorker;
448
- // @ts-ignore
449
- _b = this;
450
- return [4 /*yield*/, autoRenewTokensAsync(this, updatedTokens.refreshToken, this.tokens.expiresAt)];
451
- case 7:
452
- // @ts-ignore
453
- _b.timeoutId = _e.sent();
454
- this.publishEvent(eventNames.tryKeepExistingSessionAsync_end, { success: true, message: "tokens inside ServiceWorker are valid" });
455
- return [2 /*return*/, true];
456
- case 8:
457
- this.publishEvent(eventNames.tryKeepExistingSessionAsync_end, { success: false, message: "no exiting session found" });
458
- return [3 /*break*/, 14];
459
- case 9:
460
- if (configuration.service_worker_relative_url) {
461
- this.publishEvent(eventNames.service_worker_not_supported_by_browser, {
462
- message: "service worker is not supported by this browser"
463
- });
464
- }
465
- session = (0, initSession_1.initSession)(this.configurationName);
466
- return [4 /*yield*/, session.initAsync()];
467
- case 10:
468
- tokens = (_e.sent()).tokens;
469
- if (!tokens) return [3 /*break*/, 14];
470
- return [4 /*yield*/, this.refreshTokensAsync(tokens.refreshToken, true)];
471
- case 11:
472
- updatedTokens = _e.sent();
473
- // @ts-ignore
474
- _c = this;
475
- return [4 /*yield*/, setTokensAsync(serviceWorker, updatedTokens)];
476
- case 12:
477
- // @ts-ignore
478
- _c.tokens = _e.sent();
479
- session.setTokens(this.tokens);
480
- this.session = session;
481
- // @ts-ignore
482
- _d = this;
483
- return [4 /*yield*/, autoRenewTokensAsync(this, updatedTokens.refreshToken, this.tokens.expiresAt)];
484
- case 13:
485
- // @ts-ignore
486
- _d.timeoutId = _e.sent();
487
- this.publishEvent(eventNames.tryKeepExistingSessionAsync_end, { success: true, message: "tokens inside ServiceWorker are valid" });
488
- return [2 /*return*/, true];
489
- case 14:
490
- this.publishEvent(eventNames.tryKeepExistingSessionAsync_end, { success: false, message: "no service worker" });
491
- return [2 /*return*/, false];
492
- case 15:
493
- exception_1 = _e.sent();
494
- if (!serviceWorker) return [3 /*break*/, 17];
495
- return [4 /*yield*/, serviceWorker.clearAsync()];
496
- case 16:
497
- _e.sent();
498
- _e.label = 17;
499
- case 17:
500
- this.publishEvent(eventNames.tryKeepExistingSessionAsync_error, "tokens inside ServiceWorker are invalid");
501
- return [2 /*return*/, false];
502
- case 18: return [2 /*return*/];
405
+ var funcAsync;
406
+ var _this = this;
407
+ return __generator(this, function (_a) {
408
+ if (this.tryKeepExistingSessionPromise !== null) {
409
+ return [2 /*return*/, this.tryKeepExistingSessionPromise];
503
410
  }
411
+ funcAsync = function () { return __awaiter(_this, void 0, void 0, function () {
412
+ var serviceWorker, configuration, oidcServerConfiguration, tokens, updatedTokens, _a, _b, session, tokens, updatedTokens, _c, _d, exception_1;
413
+ return __generator(this, function (_e) {
414
+ switch (_e.label) {
415
+ case 0:
416
+ if (this.tokens != null) {
417
+ return [2 /*return*/, false];
418
+ }
419
+ this.publishEvent(eventNames.tryKeepExistingSessionAsync_begin, {});
420
+ _e.label = 1;
421
+ case 1:
422
+ _e.trys.push([1, 15, , 18]);
423
+ configuration = this.configuration;
424
+ return [4 /*yield*/, this.initAsync(configuration.authority, configuration.authority_configuration)];
425
+ case 2:
426
+ oidcServerConfiguration = _e.sent();
427
+ return [4 /*yield*/, (0, initWorker_1.initWorkerAsync)(configuration.service_worker_relative_url, this.configurationName)];
428
+ case 3:
429
+ serviceWorker = _e.sent();
430
+ if (!serviceWorker) return [3 /*break*/, 9];
431
+ return [4 /*yield*/, serviceWorker.initAsync(oidcServerConfiguration, "tryKeepExistingSessionAsync")];
432
+ case 4:
433
+ tokens = (_e.sent()).tokens;
434
+ if (!tokens) return [3 /*break*/, 8];
435
+ serviceWorker.startKeepAliveServiceWorker();
436
+ return [4 /*yield*/, this.refreshTokensAsync(tokens.refresh_token, true)];
437
+ case 5:
438
+ updatedTokens = _e.sent();
439
+ // @ts-ignore
440
+ _a = this;
441
+ return [4 /*yield*/, setTokensAsync(serviceWorker, updatedTokens)];
442
+ case 6:
443
+ // @ts-ignore
444
+ _a.tokens = _e.sent();
445
+ this.serviceWorker = serviceWorker;
446
+ // @ts-ignore
447
+ _b = this;
448
+ return [4 /*yield*/, autoRenewTokensAsync(this, updatedTokens.refreshToken, this.tokens.expiresAt)];
449
+ case 7:
450
+ // @ts-ignore
451
+ _b.timeoutId = _e.sent();
452
+ this.publishEvent(eventNames.tryKeepExistingSessionAsync_end, {
453
+ success: true,
454
+ message: "tokens inside ServiceWorker are valid"
455
+ });
456
+ return [2 /*return*/, true];
457
+ case 8:
458
+ this.publishEvent(eventNames.tryKeepExistingSessionAsync_end, {
459
+ success: false,
460
+ message: "no exiting session found"
461
+ });
462
+ return [3 /*break*/, 14];
463
+ case 9:
464
+ if (configuration.service_worker_relative_url) {
465
+ this.publishEvent(eventNames.service_worker_not_supported_by_browser, {
466
+ message: "service worker is not supported by this browser"
467
+ });
468
+ }
469
+ session = (0, initSession_1.initSession)(this.configurationName);
470
+ return [4 /*yield*/, session.initAsync()];
471
+ case 10:
472
+ tokens = (_e.sent()).tokens;
473
+ if (!tokens) return [3 /*break*/, 14];
474
+ return [4 /*yield*/, this.refreshTokensAsync(tokens.refreshToken, true)];
475
+ case 11:
476
+ updatedTokens = _e.sent();
477
+ // @ts-ignore
478
+ _c = this;
479
+ return [4 /*yield*/, setTokensAsync(serviceWorker, updatedTokens)];
480
+ case 12:
481
+ // @ts-ignore
482
+ _c.tokens = _e.sent();
483
+ session.setTokens(this.tokens);
484
+ this.session = session;
485
+ // @ts-ignore
486
+ _d = this;
487
+ return [4 /*yield*/, autoRenewTokensAsync(this, updatedTokens.refreshToken, this.tokens.expiresAt)];
488
+ case 13:
489
+ // @ts-ignore
490
+ _d.timeoutId = _e.sent();
491
+ this.publishEvent(eventNames.tryKeepExistingSessionAsync_end, {
492
+ success: true,
493
+ message: "tokens inside ServiceWorker are valid"
494
+ });
495
+ return [2 /*return*/, true];
496
+ case 14:
497
+ this.publishEvent(eventNames.tryKeepExistingSessionAsync_end, {
498
+ success: false,
499
+ message: "no service worker"
500
+ });
501
+ return [2 /*return*/, false];
502
+ case 15:
503
+ exception_1 = _e.sent();
504
+ if (!serviceWorker) return [3 /*break*/, 17];
505
+ return [4 /*yield*/, serviceWorker.clearAsync()];
506
+ case 16:
507
+ _e.sent();
508
+ _e.label = 17;
509
+ case 17:
510
+ this.publishEvent(eventNames.tryKeepExistingSessionAsync_error, "tokens inside ServiceWorker are invalid");
511
+ return [2 /*return*/, false];
512
+ case 18: return [2 /*return*/];
513
+ }
514
+ });
515
+ }); };
516
+ this.tryKeepExistingSessionPromise = funcAsync();
517
+ return [2 /*return*/, this.tryKeepExistingSessionPromise.then(function (result) {
518
+ _this.tryKeepExistingSessionPromise = null;
519
+ return result;
520
+ })];
504
521
  });
505
522
  });
506
523
  };
507
- Oidc.prototype.loginAsync = function (callbackPath, extras, installServiceWorker) {
524
+ Oidc.prototype.loginAsync = function (callbackPath, extras, installServiceWorker, state) {
508
525
  if (callbackPath === void 0) { callbackPath = undefined; }
509
526
  if (extras === void 0) { extras = null; }
510
527
  if (installServiceWorker === void 0) { installServiceWorker = true; }
528
+ if (state === void 0) { state = undefined; }
511
529
  return __awaiter(this, void 0, void 0, function () {
512
- var location_1, url, state, configuration, serviceWorker, oidcServerConfiguration, isServiceWorkerProxyActive, storage, session, authorizationHandler, authRequest, exception_2;
530
+ var location_1, url, configuration, serviceWorker, oidcServerConfiguration, isServiceWorkerProxyActive, storage, session, authorizationHandler, authRequest, exception_2;
513
531
  return __generator(this, function (_a) {
514
532
  switch (_a.label) {
515
533
  case 0:
516
534
  _a.trys.push([0, 8, , 9]);
517
535
  location_1 = window.location;
518
536
  url = callbackPath || location_1.pathname + (location_1.search || '') + (location_1.hash || '');
519
- state = url;
520
537
  this.publishEvent(eventNames.loginAsync_begin, {});
521
538
  configuration = this.configuration;
522
539
  // Security we cannot loggin from Iframe
523
540
  if (!configuration.silent_redirect_uri && isInIframe()) {
524
541
  throw new Error("Login from iframe is forbidden");
525
542
  }
543
+ sessionStorage["oidc_login.".concat(this.configurationName)] = JSON.stringify({ callbackPath: url, extras: extras, state: state });
526
544
  return [4 /*yield*/, (0, initWorker_1.initWorkerAsync)(configuration.service_worker_relative_url, this.configurationName)];
527
545
  case 1:
528
546
  serviceWorker = _a.sent();
@@ -534,7 +552,7 @@ var Oidc = /** @class */ (function () {
534
552
  case 3:
535
553
  isServiceWorkerProxyActive = _a.sent();
536
554
  if (!isServiceWorkerProxyActive) {
537
- window.location.href = configuration.redirect_uri + "/service-worker-install?callbackPath=" + encodeURIComponent(url);
555
+ window.location.href = "".concat(configuration.redirect_uri, "/service-worker-install");
538
556
  return [2 /*return*/];
539
557
  }
540
558
  _a.label = 4;
@@ -619,7 +637,7 @@ var Oidc = /** @class */ (function () {
619
637
  var notifier = new appauth_1.AuthorizationNotifier();
620
638
  authorizationHandler.setAuthorizationNotifier(notifier);
621
639
  notifier.setAuthorizationListener(function (request, response, error) { return __awaiter(_this, void 0, void 0, function () {
622
- var extras, _i, _a, _b, key, value, tokenRequest, tokenResponse, exception_4;
640
+ var extras, _i, _a, _b, key, value, tokenRequest, tokenResponse, loginParams, exception_4;
623
641
  return __generator(this, function (_c) {
624
642
  switch (_c.label) {
625
643
  case 0:
@@ -627,6 +645,7 @@ var Oidc = /** @class */ (function () {
627
645
  reject(error);
628
646
  }
629
647
  if (!response) {
648
+ reject("no response");
630
649
  return [2 /*return*/];
631
650
  }
632
651
  extras = null;
@@ -654,7 +673,12 @@ var Oidc = /** @class */ (function () {
654
673
  return [4 /*yield*/, tokenHandler.performTokenRequest(oidcServerConfiguration_1, tokenRequest)];
655
674
  case 2:
656
675
  tokenResponse = _c.sent();
657
- resolve({ tokens: tokenResponse, state: request.state });
676
+ loginParams = (0, exports.getLoginParams)(this.configurationName);
677
+ resolve({
678
+ tokens: tokenResponse,
679
+ state: request.state,
680
+ callbackPath: loginParams.callbackPath,
681
+ });
658
682
  this.publishEvent(eventNames.loginCallbackAsync_end, {});
659
683
  return [3 /*break*/, 4];
660
684
  case 3:
@@ -680,36 +704,13 @@ var Oidc = /** @class */ (function () {
680
704
  });
681
705
  });
682
706
  };
683
- Oidc.prototype.renewTokensAsync = function (extras) {
684
- if (extras === void 0) { extras = null; }
685
- return __awaiter(this, void 0, void 0, function () {
686
- var tokens;
687
- return __generator(this, function (_a) {
688
- switch (_a.label) {
689
- case 0:
690
- if (!(this.tokens && this.tokens.refreshToken && this.timeoutId)) return [3 /*break*/, 3];
691
- // @ts-ignore
692
- timer_1.default.clearTimeout(this.timeoutId);
693
- return [4 /*yield*/, renewTokenAsync(this, this.tokens.refreshToken, extras)];
694
- case 1:
695
- tokens = _a.sent();
696
- return [4 /*yield*/, autoRenewTokensAsync(this, tokens.refreshToken, tokens.expiresAt)];
697
- case 2:
698
- _a.sent();
699
- _a.label = 3;
700
- case 3: return [2 /*return*/];
701
- }
702
- });
703
- });
704
- };
705
- Oidc.prototype.refreshTokensAsync = function (refreshToken, silentEvent, extras) {
707
+ Oidc.prototype.refreshTokensAsync = function (refreshToken, silentEvent) {
706
708
  if (silentEvent === void 0) { silentEvent = false; }
707
- if (extras === void 0) { extras = null; }
708
709
  return __awaiter(this, void 0, void 0, function () {
709
- var localSilentSigninAsync, configuration, clientId, redirectUri, authority, tokenHandler, extrasRequest, _i, _a, _b, key, value, _c, _d, _e, key, value, request, oidcServerConfiguration, token_response, exception_5;
710
+ var localSilentSigninAsync, configuration, clientId, redirectUri, authority, tokenHandler, extras, _i, _a, _b, key, value, request, oidcServerConfiguration, token_response, exception_5;
710
711
  var _this = this;
711
- return __generator(this, function (_f) {
712
- switch (_f.label) {
712
+ return __generator(this, function (_c) {
713
+ switch (_c.label) {
713
714
  case 0:
714
715
  localSilentSigninAsync = function (exception) {
715
716
  if (exception === void 0) { exception = null; }
@@ -737,9 +738,9 @@ var Oidc = /** @class */ (function () {
737
738
  });
738
739
  });
739
740
  };
740
- _f.label = 1;
741
+ _c.label = 1;
741
742
  case 1:
742
- _f.trys.push([1, 6, , 8]);
743
+ _c.trys.push([1, 6, , 8]);
743
744
  this.publishEvent(silentEvent ? eventNames.refreshTokensAsync_silent_begin : eventNames.refreshTokensAsync_begin, {});
744
745
  configuration = this.configuration;
745
746
  clientId = configuration.client_id;
@@ -747,22 +748,15 @@ var Oidc = /** @class */ (function () {
747
748
  authority = configuration.authority;
748
749
  if (!!configuration.scope.split(" ").find(function (s) { return s === refresh_token_scope; })) return [3 /*break*/, 3];
749
750
  return [4 /*yield*/, localSilentSigninAsync()];
750
- case 2: return [2 /*return*/, _f.sent()];
751
+ case 2: return [2 /*return*/, _c.sent()];
751
752
  case 3:
752
753
  tokenHandler = new appauth_1.BaseTokenRequestHandler(new appauth_1.FetchRequestor());
753
- extrasRequest = undefined;
754
- if (extras) {
755
- extrasRequest = {};
756
- for (_i = 0, _a = Object.entries(extras); _i < _a.length; _i++) {
754
+ extras = undefined;
755
+ if (configuration.token_request_extras) {
756
+ extras = {};
757
+ for (_i = 0, _a = Object.entries(configuration.token_request_extras); _i < _a.length; _i++) {
757
758
  _b = _a[_i], key = _b[0], value = _b[1];
758
- extrasRequest[key] = value;
759
- }
760
- }
761
- else if (configuration.token_request_extras) {
762
- extrasRequest = {};
763
- for (_c = 0, _d = Object.entries(configuration.token_request_extras); _c < _d.length; _c++) {
764
- _e = _d[_c], key = _e[0], value = _e[1];
765
- extrasRequest[key] = value;
759
+ extras[key] = value;
766
760
  }
767
761
  }
768
762
  request = new appauth_1.TokenRequest({
@@ -771,28 +765,36 @@ var Oidc = /** @class */ (function () {
771
765
  grant_type: appauth_1.GRANT_TYPE_REFRESH_TOKEN,
772
766
  code: undefined,
773
767
  refresh_token: refreshToken,
774
- extras: extrasRequest
768
+ extras: extras
775
769
  });
776
770
  return [4 /*yield*/, this.initAsync(authority, configuration.authority_configuration)];
777
771
  case 4:
778
- oidcServerConfiguration = _f.sent();
772
+ oidcServerConfiguration = _c.sent();
779
773
  return [4 /*yield*/, tokenHandler.performTokenRequest(oidcServerConfiguration, request)];
780
774
  case 5:
781
- token_response = _f.sent();
775
+ token_response = _c.sent();
782
776
  this.publishEvent(silentEvent ? eventNames.refreshTokensAsync_silent_end : eventNames.refreshTokensAsync_end, token_response);
783
777
  return [2 /*return*/, token_response];
784
778
  case 6:
785
- exception_5 = _f.sent();
779
+ exception_5 = _c.sent();
786
780
  console.error(exception_5);
787
781
  return [4 /*yield*/, localSilentSigninAsync(exception_5)];
788
- case 7: return [2 /*return*/, _f.sent()];
782
+ case 7: return [2 /*return*/, _c.sent()];
789
783
  case 8: return [2 /*return*/];
790
784
  }
791
785
  });
792
786
  });
793
787
  };
794
788
  Oidc.prototype.loginCallbackWithAutoTokensRenewAsync = function () {
795
- return loginCallbackWithAutoTokensRenewAsync(this);
789
+ var _this = this;
790
+ if (this.loginCallbackWithAutoTokensRenewPromise !== null) {
791
+ return this.loginCallbackWithAutoTokensRenewPromise;
792
+ }
793
+ this.loginCallbackWithAutoTokensRenewPromise = loginCallbackWithAutoTokensRenewAsync(this);
794
+ return this.loginCallbackWithAutoTokensRenewPromise.then(function (result) {
795
+ _this.loginCallbackWithAutoTokensRenewPromise = null;
796
+ return result;
797
+ });
796
798
  };
797
799
  Oidc.prototype.userInfoAsync = function () {
798
800
  return userInfoAsync(this);
@@ -835,12 +837,11 @@ var Oidc = /** @class */ (function () {
835
837
  return [4 /*yield*/, this.initAsync(configuration.authority, configuration.authority_configuration)];
836
838
  case 1:
837
839
  oidcServerConfiguration = _c.sent();
838
- // TODO implement real logout
839
840
  if (callbackPath && (typeof callbackPath !== 'string')) {
840
841
  callbackPath = undefined;
841
842
  console.warn('callbackPath path is not a string');
842
843
  }
843
- path = callbackPath || location.pathname + (location.search || '') + (location.hash || '');
844
+ path = (callbackPath === null || callbackPath === undefined) ? location.pathname + (location.search || '') + (location.hash || '') : callbackPath;
844
845
  url = window.location.origin + path;
845
846
  idToken = this.tokens ? this.tokens.idToken : "";
846
847
  return [4 /*yield*/, this.destroyAsync()];