oidc-spa 7.2.0-rc.1 → 7.2.0-rc.2

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 (282) hide show
  1. package/backend.js.map +1 -1
  2. package/core/AuthResponse.js.map +1 -1
  3. package/core/Oidc.js.map +1 -1
  4. package/core/OidcInitializationError.d.ts +0 -13
  5. package/core/OidcInitializationError.js +0 -243
  6. package/core/OidcInitializationError.js.map +1 -1
  7. package/core/OidcMetadata.js.map +1 -1
  8. package/core/StateData.js.map +1 -1
  9. package/core/configId.js.map +1 -1
  10. package/core/createOidc.js +38 -5
  11. package/core/createOidc.js.map +1 -1
  12. package/core/diagnostic.d.ts +14 -0
  13. package/core/diagnostic.js +214 -0
  14. package/core/diagnostic.js.map +1 -0
  15. package/core/evtIsUserActive.js.map +1 -1
  16. package/core/handleOidcCallback.js.map +1 -1
  17. package/core/iframeMessageProtection.js.map +1 -1
  18. package/core/index.js.map +1 -1
  19. package/core/initialLocationHref.js.map +1 -1
  20. package/core/isNewBrowserSession.js.map +1 -1
  21. package/core/loginOrGoToAuthServer.js.map +1 -1
  22. package/core/loginPropagationToOtherTabs.js.map +1 -1
  23. package/core/loginSilent.js.map +1 -1
  24. package/core/logoutPropagationToOtherTabs.js.map +1 -1
  25. package/core/oidcClientTsUserToTokens.js.map +1 -1
  26. package/core/ongoingLoginOrRefreshProcesses.js.map +1 -1
  27. package/core/persistedAuthState.js.map +1 -1
  28. package/entrypoint.js.map +1 -1
  29. package/esm/core/AuthResponse.d.ts +5 -0
  30. package/{src/core/AuthResponse.ts → esm/core/AuthResponse.js} +2 -10
  31. package/esm/core/AuthResponse.js.map +1 -0
  32. package/esm/core/Oidc.d.ts +126 -0
  33. package/esm/core/Oidc.js +2 -0
  34. package/esm/core/Oidc.js.map +1 -0
  35. package/esm/core/OidcInitializationError.d.ts +7 -0
  36. package/esm/core/OidcInitializationError.js +17 -0
  37. package/esm/core/OidcInitializationError.js.map +1 -0
  38. package/{src/core/OidcMetadata.ts → esm/core/OidcMetadata.d.ts} +0 -5
  39. package/esm/core/OidcMetadata.js +3 -0
  40. package/esm/core/OidcMetadata.js.map +1 -0
  41. package/esm/core/StateData.d.ts +42 -0
  42. package/esm/core/StateData.js +55 -0
  43. package/esm/core/StateData.js.map +1 -0
  44. package/esm/core/configId.d.ts +4 -0
  45. package/esm/core/configId.js +4 -0
  46. package/esm/core/configId.js.map +1 -0
  47. package/esm/core/createOidc.d.ts +132 -0
  48. package/{src/core/createOidc.ts → esm/core/createOidc.js} +269 -806
  49. package/esm/core/createOidc.js.map +1 -0
  50. package/esm/core/diagnostic.d.ts +14 -0
  51. package/{src/core/OidcInitializationError.ts → esm/core/diagnostic.js} +32 -109
  52. package/esm/core/diagnostic.js.map +1 -0
  53. package/esm/core/evtIsUserActive.d.ts +5 -0
  54. package/{src/core/evtIsUserActive.ts → esm/core/evtIsUserActive.js} +14 -46
  55. package/esm/core/evtIsUserActive.js.map +1 -0
  56. package/esm/core/handleOidcCallback.d.ts +13 -0
  57. package/{src/core/handleOidcCallback.ts → esm/core/handleOidcCallback.js} +25 -121
  58. package/esm/core/handleOidcCallback.js.map +1 -0
  59. package/esm/core/iframeMessageProtection.d.ts +20 -0
  60. package/{src/core/iframeMessageProtection.ts → esm/core/iframeMessageProtection.js} +10 -45
  61. package/esm/core/iframeMessageProtection.js.map +1 -0
  62. package/esm/core/index.js +4 -0
  63. package/esm/core/index.js.map +1 -0
  64. package/esm/core/initialLocationHref.d.ts +1 -0
  65. package/{src/core/initialLocationHref.ts → esm/core/initialLocationHref.js} +1 -1
  66. package/esm/core/initialLocationHref.js.map +1 -0
  67. package/esm/core/isNewBrowserSession.d.ts +9 -0
  68. package/{src/core/isNewBrowserSession.ts → esm/core/isNewBrowserSession.js} +3 -15
  69. package/esm/core/isNewBrowserSession.js.map +1 -0
  70. package/esm/core/loginOrGoToAuthServer.d.ts +40 -0
  71. package/{src/core/loginOrGoToAuthServer.ts → esm/core/loginOrGoToAuthServer.js} +60 -168
  72. package/esm/core/loginOrGoToAuthServer.js.map +1 -0
  73. package/esm/core/loginPropagationToOtherTabs.d.ts +8 -0
  74. package/{src/core/loginPropagationToOtherTabs.ts → esm/core/loginPropagationToOtherTabs.js} +7 -25
  75. package/esm/core/loginPropagationToOtherTabs.js.map +1 -0
  76. package/esm/core/loginSilent.d.ts +28 -0
  77. package/esm/core/loginSilent.js +125 -0
  78. package/esm/core/loginSilent.js.map +1 -0
  79. package/esm/core/logoutPropagationToOtherTabs.d.ts +10 -0
  80. package/{src/core/logoutPropagationToOtherTabs.ts → esm/core/logoutPropagationToOtherTabs.js} +8 -28
  81. package/esm/core/logoutPropagationToOtherTabs.js.map +1 -0
  82. package/esm/core/oidcClientTsUserToTokens.d.ts +11 -0
  83. package/esm/core/oidcClientTsUserToTokens.js +155 -0
  84. package/esm/core/oidcClientTsUserToTokens.js.map +1 -0
  85. package/esm/core/ongoingLoginOrRefreshProcesses.d.ts +6 -0
  86. package/{src/core/ongoingLoginOrRefreshProcesses.ts → esm/core/ongoingLoginOrRefreshProcesses.js} +6 -24
  87. package/esm/core/ongoingLoginOrRefreshProcesses.js.map +1 -0
  88. package/esm/core/persistedAuthState.d.ts +28 -0
  89. package/esm/core/persistedAuthState.js +64 -0
  90. package/esm/core/persistedAuthState.js.map +1 -0
  91. package/esm/entrypoint.d.ts +7 -0
  92. package/{src/entrypoint.ts → esm/entrypoint.js} +3 -26
  93. package/esm/entrypoint.js.map +1 -0
  94. package/esm/index.js +2 -0
  95. package/esm/index.js.map +1 -0
  96. package/esm/keycloak/index.d.ts +3 -0
  97. package/esm/keycloak/index.js +3 -0
  98. package/esm/keycloak/index.js.map +1 -0
  99. package/esm/keycloak/isKeycloak.d.ts +3 -0
  100. package/{src/keycloak/isKeycloak.ts → esm/keycloak/isKeycloak.js} +2 -8
  101. package/esm/keycloak/isKeycloak.js.map +1 -0
  102. package/esm/keycloak/keycloak-js/Keycloak.d.ts +284 -0
  103. package/{src/keycloak/keycloak-js/Keycloak.ts → esm/keycloak/keycloak-js/Keycloak.js} +116 -439
  104. package/esm/keycloak/keycloak-js/Keycloak.js.map +1 -0
  105. package/esm/keycloak/keycloak-js/index.js +2 -0
  106. package/esm/keycloak/keycloak-js/index.js.map +1 -0
  107. package/{src/keycloak/keycloak-js/types.ts → esm/keycloak/keycloak-js/types.d.ts} +3 -84
  108. package/esm/keycloak/keycloak-js/types.js +2 -0
  109. package/esm/keycloak/keycloak-js/types.js.map +1 -0
  110. package/esm/keycloak/keycloakIssuerUriParsed.d.ts +9 -0
  111. package/{src/keycloak/keycloakIssuerUriParsed.ts → esm/keycloak/keycloakIssuerUriParsed.js} +2 -15
  112. package/esm/keycloak/keycloakIssuerUriParsed.js.map +1 -0
  113. package/esm/keycloak/keycloakUtils.d.ts +37 -0
  114. package/esm/keycloak/keycloakUtils.js +44 -0
  115. package/esm/keycloak/keycloakUtils.js.map +1 -0
  116. package/esm/keycloak-js.js +2 -0
  117. package/esm/keycloak-js.js.map +1 -0
  118. package/esm/mock/index.js +2 -0
  119. package/esm/mock/index.js.map +1 -0
  120. package/esm/mock/oidc.d.ts +19 -0
  121. package/{src/mock/oidc.ts → esm/mock/oidc.js} +28 -88
  122. package/esm/mock/oidc.js.map +1 -0
  123. package/esm/mock/react.d.ts +58 -0
  124. package/esm/mock/react.js +7 -0
  125. package/esm/mock/react.js.map +1 -0
  126. package/esm/react/index.js +2 -0
  127. package/esm/react/index.js.map +1 -0
  128. package/esm/react/react.d.ts +102 -0
  129. package/esm/react/react.js +221 -0
  130. package/esm/react/react.js.map +1 -0
  131. package/esm/tools/Deferred.d.ts +14 -0
  132. package/esm/tools/Deferred.js +23 -0
  133. package/esm/tools/Deferred.js.map +1 -0
  134. package/esm/tools/EphemeralSessionStorage.d.ts +12 -0
  135. package/{src/tools/EphemeralSessionStorage.ts → esm/tools/EphemeralSessionStorage.js} +30 -112
  136. package/esm/tools/EphemeralSessionStorage.js.map +1 -0
  137. package/esm/tools/Evt.d.ts +11 -0
  138. package/{src/tools/Evt.ts → esm/tools/Evt.js} +7 -25
  139. package/esm/tools/Evt.js.map +1 -0
  140. package/esm/tools/StatefulEvt.d.ts +12 -0
  141. package/esm/tools/StatefulEvt.js +21 -0
  142. package/esm/tools/StatefulEvt.js.map +1 -0
  143. package/esm/tools/ValueOrAsyncGetter.js +2 -0
  144. package/esm/tools/ValueOrAsyncGetter.js.map +1 -0
  145. package/esm/tools/asymmetricEncryption.d.ts +18 -0
  146. package/esm/tools/asymmetricEncryption.js +85 -0
  147. package/esm/tools/asymmetricEncryption.js.map +1 -0
  148. package/esm/tools/base64.d.ts +2 -0
  149. package/{src/tools/base64.ts → esm/tools/base64.js} +3 -3
  150. package/esm/tools/base64.js.map +1 -0
  151. package/esm/tools/createObjectThatThrowsIfAccessed.d.ts +8 -0
  152. package/{src/tools/createObjectThatThrowsIfAccessed.ts → esm/tools/createObjectThatThrowsIfAccessed.js} +7 -18
  153. package/esm/tools/createObjectThatThrowsIfAccessed.js.map +1 -0
  154. package/esm/tools/decodeJwt.d.ts +25 -0
  155. package/esm/tools/decodeJwt.js +60 -0
  156. package/esm/tools/decodeJwt.js.map +1 -0
  157. package/esm/tools/generateUrlSafeRandom.d.ts +3 -0
  158. package/{src/tools/generateUrlSafeRandom.ts → esm/tools/generateUrlSafeRandom.js} +5 -8
  159. package/esm/tools/generateUrlSafeRandom.js.map +1 -0
  160. package/esm/tools/getDownlinkAndRtt.d.ts +4 -0
  161. package/{src/tools/getDownlinkAndRtt.ts → esm/tools/getDownlinkAndRtt.js} +6 -10
  162. package/esm/tools/getDownlinkAndRtt.js.map +1 -0
  163. package/esm/tools/getIsOnline.d.ts +7 -0
  164. package/{src/tools/getIsOnline.ts → esm/tools/getIsOnline.js} +3 -9
  165. package/esm/tools/getIsOnline.js.map +1 -0
  166. package/esm/tools/getIsValidRemoteJson.d.ts +1 -0
  167. package/esm/tools/getIsValidRemoteJson.js +15 -0
  168. package/esm/tools/getIsValidRemoteJson.js.map +1 -0
  169. package/esm/tools/getPrUserInteraction.d.ts +4 -0
  170. package/{src/tools/getPrUserInteraction.ts → esm/tools/getPrUserInteraction.js} +2 -6
  171. package/esm/tools/getPrUserInteraction.js.map +1 -0
  172. package/esm/tools/getUserEnvironmentInfo.d.ts +1 -0
  173. package/esm/tools/getUserEnvironmentInfo.js +50 -0
  174. package/esm/tools/getUserEnvironmentInfo.js.map +1 -0
  175. package/esm/tools/haveSharedParentDomain.d.ts +4 -0
  176. package/{src/tools/haveSharedParentDomain.ts → esm/tools/haveSharedParentDomain.js} +3 -5
  177. package/esm/tools/haveSharedParentDomain.js.map +1 -0
  178. package/esm/tools/isDev.d.ts +1 -0
  179. package/{src/tools/isDev.ts → esm/tools/isDev.js} +5 -12
  180. package/esm/tools/isDev.js.map +1 -0
  181. package/esm/tools/parseKeycloakIssuerUri.d.ts +30 -0
  182. package/{src/tools/parseKeycloakIssuerUri.ts → esm/tools/parseKeycloakIssuerUri.js} +2 -18
  183. package/esm/tools/parseKeycloakIssuerUri.js.map +1 -0
  184. package/esm/tools/readExpirationTimeInJwt.d.ts +1 -0
  185. package/{src/tools/readExpirationTimeInJwt.ts → esm/tools/readExpirationTimeInJwt.js} +6 -7
  186. package/esm/tools/readExpirationTimeInJwt.js.map +1 -0
  187. package/esm/tools/startCountdown.d.ts +11 -0
  188. package/{src/tools/startCountdown.ts → esm/tools/startCountdown.js} +6 -17
  189. package/esm/tools/startCountdown.js.map +1 -0
  190. package/esm/tools/subscribeToUserInteraction.d.ts +6 -0
  191. package/{src/tools/subscribeToUserInteraction.ts → esm/tools/subscribeToUserInteraction.js} +4 -13
  192. package/esm/tools/subscribeToUserInteraction.js.map +1 -0
  193. package/esm/tools/toFullyQualifiedUrl.d.ts +10 -0
  194. package/{src/tools/toFullyQualifiedUrl.ts → esm/tools/toFullyQualifiedUrl.js} +7 -25
  195. package/esm/tools/toFullyQualifiedUrl.js.map +1 -0
  196. package/esm/tools/toHumanReadableDuration.d.ts +1 -0
  197. package/{src/tools/toHumanReadableDuration.ts → esm/tools/toHumanReadableDuration.js} +8 -5
  198. package/esm/tools/toHumanReadableDuration.js.map +1 -0
  199. package/esm/tools/urlSearchParams.d.ts +19 -0
  200. package/{src/tools/urlSearchParams.ts → esm/tools/urlSearchParams.js} +24 -70
  201. package/esm/tools/urlSearchParams.js.map +1 -0
  202. package/esm/tools/workerTimers.d.ts +5 -0
  203. package/{src/tools/workerTimers.ts → esm/tools/workerTimers.js} +7 -27
  204. package/esm/tools/workerTimers.js.map +1 -0
  205. package/esm/vendor/frontend/oidc-client-ts.js +3636 -0
  206. package/esm/vendor/frontend/tsafe.js +1 -0
  207. package/esm/vendor/frontend/worker-timers.js +1 -0
  208. package/index.js.map +1 -1
  209. package/keycloak/index.js.map +1 -1
  210. package/keycloak/isKeycloak.js.map +1 -1
  211. package/keycloak/keycloak-js/Keycloak.js.map +1 -1
  212. package/keycloak/keycloak-js/index.js.map +1 -1
  213. package/keycloak/keycloak-js/types.js.map +1 -1
  214. package/keycloak/keycloakIssuerUriParsed.js.map +1 -1
  215. package/keycloak/keycloakUtils.js.map +1 -1
  216. package/keycloak-js.js.map +1 -1
  217. package/mock/index.js.map +1 -1
  218. package/mock/oidc.js.map +1 -1
  219. package/mock/react.js.map +1 -1
  220. package/package.json +74 -328
  221. package/react/index.js.map +1 -1
  222. package/react/react.js.map +1 -1
  223. package/tools/Deferred.js.map +1 -1
  224. package/tools/EphemeralSessionStorage.js.map +1 -1
  225. package/tools/Evt.js.map +1 -1
  226. package/tools/StatefulEvt.js.map +1 -1
  227. package/tools/ValueOrAsyncGetter.js.map +1 -1
  228. package/tools/asymmetricEncryption.js.map +1 -1
  229. package/tools/base64.js.map +1 -1
  230. package/tools/createObjectThatThrowsIfAccessed.js.map +1 -1
  231. package/tools/decodeJwt.js.map +1 -1
  232. package/tools/generateUrlSafeRandom.js.map +1 -1
  233. package/tools/getDownlinkAndRtt.js.map +1 -1
  234. package/tools/getIsOnline.js.map +1 -1
  235. package/tools/getIsValidRemoteJson.js.map +1 -1
  236. package/tools/getPrUserInteraction.js.map +1 -1
  237. package/tools/getUserEnvironmentInfo.js.map +1 -1
  238. package/tools/haveSharedParentDomain.js.map +1 -1
  239. package/tools/isDev.js.map +1 -1
  240. package/tools/parseKeycloakIssuerUri.js.map +1 -1
  241. package/tools/readExpirationTimeInJwt.js.map +1 -1
  242. package/tools/startCountdown.js.map +1 -1
  243. package/tools/subscribeToUserInteraction.js.map +1 -1
  244. package/tools/toFullyQualifiedUrl.js.map +1 -1
  245. package/tools/toHumanReadableDuration.js.map +1 -1
  246. package/tools/urlSearchParams.js.map +1 -1
  247. package/tools/workerTimers.js.map +1 -1
  248. package/LICENSE +0 -21
  249. package/README.md +0 -185
  250. package/src/backend.ts +0 -391
  251. package/src/core/Oidc.ts +0 -140
  252. package/src/core/StateData.ts +0 -118
  253. package/src/core/configId.ts +0 -3
  254. package/src/core/loginSilent.ts +0 -209
  255. package/src/core/oidcClientTsUserToTokens.ts +0 -229
  256. package/src/core/persistedAuthState.ts +0 -122
  257. package/src/keycloak/index.ts +0 -8
  258. package/src/keycloak/keycloakUtils.ts +0 -90
  259. package/src/mock/react.tsx +0 -11
  260. package/src/react/react.tsx +0 -476
  261. package/src/tools/Deferred.ts +0 -39
  262. package/src/tools/StatefulEvt.ts +0 -38
  263. package/src/tools/asymmetricEncryption.ts +0 -184
  264. package/src/tools/decodeJwt.ts +0 -95
  265. package/src/tools/getIsValidRemoteJson.ts +0 -18
  266. package/src/tools/getUserEnvironmentInfo.ts +0 -42
  267. package/src/vendor/backend/evt.ts +0 -2
  268. package/src/vendor/backend/jsonwebtoken.ts +0 -1
  269. package/src/vendor/backend/node-fetch.ts +0 -2
  270. package/src/vendor/backend/node-jose.ts +0 -1
  271. package/src/vendor/backend/tsafe.ts +0 -5
  272. package/src/vendor/backend/zod.ts +0 -1
  273. /package/{src/core/index.ts → esm/core/index.d.ts} +0 -0
  274. /package/{src/index.ts → esm/index.d.ts} +0 -0
  275. /package/{src/keycloak/keycloak-js/index.ts → esm/keycloak/keycloak-js/index.d.ts} +0 -0
  276. /package/{src/keycloak-js.ts → esm/keycloak-js.d.ts} +0 -0
  277. /package/{src/mock/index.ts → esm/mock/index.d.ts} +0 -0
  278. /package/{src/react/index.ts → esm/react/index.d.ts} +0 -0
  279. /package/{src/tools/ValueOrAsyncGetter.ts → esm/tools/ValueOrAsyncGetter.d.ts} +0 -0
  280. /package/{src/vendor/frontend/oidc-client-ts.ts → esm/vendor/frontend/oidc-client-ts.d.ts} +0 -0
  281. /package/{src/vendor/frontend/tsafe.ts → esm/vendor/frontend/tsafe.d.ts} +0 -0
  282. /package/{src/vendor/frontend/worker-timers.ts → esm/vendor/frontend/worker-timers.d.ts} +0 -0
@@ -1,115 +1,40 @@
1
- import type { UserManager as OidcClientTsUserManager } from "../vendor/frontend/oidc-client-ts";
2
1
  import { toFullyQualifiedUrl } from "../tools/toFullyQualifiedUrl";
3
- import { assert, type Equals, noUndefined } from "../vendor/frontend/tsafe";
4
- import type { StateData } from "./StateData";
5
- import type { NonPostableEvt } from "../tools/Evt";
2
+ import { assert, noUndefined } from "../vendor/frontend/tsafe";
6
3
  import { createStatefulEvt } from "../tools/StatefulEvt";
7
4
  import { Deferred } from "../tools/Deferred";
8
5
  import { addOrUpdateSearchParam, getAllSearchParams } from "../tools/urlSearchParams";
9
-
10
6
  const globalContext = {
11
7
  evtHasLoginBeenCalled: createStatefulEvt(() => false)
12
8
  };
13
-
14
- type Params = Params.Login | Params.GoToAuthServer;
15
-
16
- namespace Params {
17
- type Common = {
18
- redirectUrl: string;
19
- extraQueryParams_local: Record<string, string | undefined> | undefined;
20
- transformUrlBeforeRedirect_local: ((url: string) => string) | undefined;
21
- };
22
-
23
- export type Login = Common & {
24
- action: "login";
25
- doNavigateBackToLastPublicUrlIfTheTheUserNavigateBack: boolean;
26
- doForceReloadOnBfCache: boolean;
27
- interaction:
28
- | "ensure no interaction"
29
- | "ensure interaction"
30
- | "directly redirect if active session show login otherwise";
31
- };
32
-
33
- export type GoToAuthServer = Common & {
34
- action: "go to auth server";
35
- };
36
- }
37
-
38
9
  export function getPrSafelyRestoredFromBfCacheAfterLoginBackNavigation() {
39
- const dOut = new Deferred<void>();
40
-
10
+ const dOut = new Deferred();
41
11
  const { unsubscribe } = globalContext.evtHasLoginBeenCalled.subscribe(hasLoginBeenCalled => {
42
12
  if (!hasLoginBeenCalled) {
43
13
  unsubscribe();
44
14
  dOut.resolve();
45
15
  }
46
16
  });
47
-
48
17
  return dOut.pr;
49
18
  }
50
-
51
- export function createLoginOrGoToAuthServer(params: {
52
- configId: string;
53
- oidcClientTsUserManager: OidcClientTsUserManager;
54
- transformUrlBeforeRedirect:
55
- | ((params: { authorizationUrl: string; isSilent: boolean }) => string)
56
- | undefined;
57
-
58
- getExtraQueryParams:
59
- | ((params: { isSilent: boolean; url: string }) => Record<string, string | undefined>)
60
- | undefined;
61
-
62
- getExtraTokenParams: (() => Record<string, string | undefined>) | undefined;
63
-
64
- homeUrl: string;
65
- evtIsUserLoggedIn: NonPostableEvt<boolean>;
66
- log: typeof console.log | undefined;
67
- }) {
68
- const {
69
- configId,
70
- oidcClientTsUserManager,
71
-
72
- transformUrlBeforeRedirect,
73
- getExtraQueryParams,
74
-
75
- getExtraTokenParams,
76
-
77
- homeUrl,
78
- evtIsUserLoggedIn,
79
- log
80
- } = params;
81
-
19
+ export function createLoginOrGoToAuthServer(params) {
20
+ const { configId, oidcClientTsUserManager, transformUrlBeforeRedirect, getExtraQueryParams, getExtraTokenParams, homeUrl, evtIsUserLoggedIn, log } = params;
82
21
  const LOCAL_STORAGE_KEY_TO_CLEAR_WHEN_USER_LOGGED_IN = `oidc-spa.login-redirect-initiated:${configId}`;
83
-
84
- let lastPublicUrl: string | undefined = undefined;
85
-
86
- async function loginOrGoToAuthServer(params: Params): Promise<never> {
87
- const {
88
- redirectUrl: redirectUrl_params,
89
- extraQueryParams_local,
90
- transformUrlBeforeRedirect_local,
91
- ...rest
92
- } = params;
93
-
22
+ let lastPublicUrl = undefined;
23
+ async function loginOrGoToAuthServer(params) {
24
+ const { redirectUrl: redirectUrl_params, extraQueryParams_local, transformUrlBeforeRedirect_local, ...rest } = params;
94
25
  log?.(`Calling loginOrGoToAuthServer ${JSON.stringify(params, null, 2)}`);
95
-
96
26
  login_specific_handling: {
97
27
  if (rest.action !== "login") {
98
28
  break login_specific_handling;
99
29
  }
100
-
101
30
  if (globalContext.evtHasLoginBeenCalled.current) {
102
31
  log?.("login() has already been called, ignoring the call");
103
- return new Promise<never>(() => {});
32
+ return new Promise(() => { });
104
33
  }
105
-
106
34
  globalContext.evtHasLoginBeenCalled.current = true;
107
-
108
35
  if (document.visibilityState !== "visible") {
109
36
  rest.interaction === "ensure no interaction";
110
-
111
- const dVisible = new Deferred<void>();
112
-
37
+ const dVisible = new Deferred();
113
38
  const onVisible = () => {
114
39
  if (document.visibilityState !== "visible") {
115
40
  return;
@@ -118,10 +43,8 @@ export function createLoginOrGoToAuthServer(params: {
118
43
  dVisible.resolve();
119
44
  };
120
45
  document.addEventListener("visibilitychange", onVisible);
121
-
122
46
  await dVisible.pr;
123
47
  }
124
-
125
48
  bf_cache_handling: {
126
49
  if (rest.doForceReloadOnBfCache) {
127
50
  window.removeEventListener("pageshow", () => {
@@ -129,51 +52,41 @@ export function createLoginOrGoToAuthServer(params: {
129
52
  });
130
53
  break bf_cache_handling;
131
54
  }
132
-
133
55
  localStorage.setItem(LOCAL_STORAGE_KEY_TO_CLEAR_WHEN_USER_LOGGED_IN, "true");
134
-
135
56
  const callback = () => {
136
57
  window.removeEventListener("pageshow", callback);
137
-
138
- log?.(
139
- "We came back from the login pages and the state of the app has been restored"
140
- );
141
-
58
+ log?.("We came back from the login pages and the state of the app has been restored");
142
59
  if (rest.doNavigateBackToLastPublicUrlIfTheTheUserNavigateBack) {
143
60
  if (lastPublicUrl !== undefined) {
144
61
  log?.(`Loading last public route: ${lastPublicUrl}`);
145
62
  window.location.href = lastPublicUrl;
146
- } else {
63
+ }
64
+ else {
147
65
  log?.("We don't know the last public route, navigating back in history");
148
66
  window.history.back();
149
67
  }
150
- } else {
68
+ }
69
+ else {
151
70
  log?.("The current page doesn't require auth...");
152
-
153
- if (
154
- localStorage.getItem(LOCAL_STORAGE_KEY_TO_CLEAR_WHEN_USER_LOGGED_IN) === null
155
- ) {
71
+ if (localStorage.getItem(LOCAL_STORAGE_KEY_TO_CLEAR_WHEN_USER_LOGGED_IN) === null) {
156
72
  log?.("but the user is now authenticated, reloading the page");
157
73
  location.reload();
158
- } else {
74
+ }
75
+ else {
159
76
  log?.("and the user doesn't seem to be authenticated, avoiding a reload");
160
77
  globalContext.evtHasLoginBeenCalled.current = false;
161
78
  }
162
79
  }
163
80
  };
164
-
165
81
  window.addEventListener("pageshow", callback);
166
82
  }
167
83
  }
168
-
169
84
  const redirectUrl = toFullyQualifiedUrl({
170
85
  urlish: redirectUrl_params,
171
86
  doAssertNoQueryParams: false
172
87
  });
173
-
174
88
  log?.(`redirectUrl: ${redirectUrl}`);
175
-
176
- const stateData: StateData = {
89
+ const stateData = {
177
90
  context: "redirect",
178
91
  redirectUrl,
179
92
  extraQueryParams: {},
@@ -189,37 +102,28 @@ export function createLoginOrGoToAuthServer(params: {
189
102
  }
190
103
  })()
191
104
  };
192
-
193
105
  const isSilent = rest.action === "login" && rest.interaction === "ensure no interaction";
194
-
195
- const transformUrl_oidcClientTs = (url: string) => {
196
- (
106
+ const transformUrl_oidcClientTs = (url) => {
107
+ [
197
108
  [
198
- [
199
- getExtraQueryParams,
200
- transformUrlBeforeRedirect === undefined
201
- ? undefined
202
- : (url: string) =>
203
- transformUrlBeforeRedirect({
204
- isSilent,
205
- authorizationUrl: url
206
- })
207
- ],
208
- [extraQueryParams_local, transformUrlBeforeRedirect_local]
209
- ] as const
210
- ).forEach(([extraQueryParamsMaybeGetter, transformUrlBeforeRedirect], i, arr) => {
109
+ getExtraQueryParams,
110
+ transformUrlBeforeRedirect === undefined
111
+ ? undefined
112
+ : (url) => transformUrlBeforeRedirect({
113
+ isSilent,
114
+ authorizationUrl: url
115
+ })
116
+ ],
117
+ [extraQueryParams_local, transformUrlBeforeRedirect_local]
118
+ ].forEach(([extraQueryParamsMaybeGetter, transformUrlBeforeRedirect], i, arr) => {
211
119
  const url_before = i !== arr.length - 1 ? undefined : url;
212
-
213
120
  add_extra_query_params: {
214
121
  if (extraQueryParamsMaybeGetter === undefined) {
215
122
  break add_extra_query_params;
216
123
  }
217
-
218
- const extraQueryParams =
219
- typeof extraQueryParamsMaybeGetter === "function"
220
- ? extraQueryParamsMaybeGetter({ isSilent, url })
221
- : extraQueryParamsMaybeGetter;
222
-
124
+ const extraQueryParams = typeof extraQueryParamsMaybeGetter === "function"
125
+ ? extraQueryParamsMaybeGetter({ isSilent, url })
126
+ : extraQueryParamsMaybeGetter;
223
127
  for (const [name, value] of Object.entries(extraQueryParams)) {
224
128
  if (value === undefined) {
225
129
  continue;
@@ -232,37 +136,29 @@ export function createLoginOrGoToAuthServer(params: {
232
136
  });
233
137
  }
234
138
  }
235
-
236
139
  apply_transform_url: {
237
140
  if (transformUrlBeforeRedirect === undefined) {
238
141
  break apply_transform_url;
239
142
  }
240
143
  url = transformUrlBeforeRedirect(url);
241
144
  }
242
-
243
145
  update_state: {
244
146
  if (url_before === undefined) {
245
147
  break update_state;
246
148
  }
247
-
248
149
  const paramValueByName_current = getAllSearchParams(url);
249
150
  const paramValueByName_before = getAllSearchParams(url_before);
250
-
251
151
  for (const [name, value_current] of Object.entries(paramValueByName_current)) {
252
- const value_before: string | undefined = paramValueByName_before[name];
253
-
152
+ const value_before = paramValueByName_before[name];
254
153
  if (value_before === value_current) {
255
154
  continue;
256
155
  }
257
-
258
156
  stateData.extraQueryParams[name] = value_current;
259
157
  }
260
158
  }
261
159
  });
262
-
263
160
  return url;
264
161
  };
265
-
266
162
  const redirectMethod = (() => {
267
163
  switch (rest.action) {
268
164
  case "login":
@@ -273,43 +169,39 @@ export function createLoginOrGoToAuthServer(params: {
273
169
  return "assign";
274
170
  }
275
171
  })();
276
-
277
172
  log?.(`redirectMethod: ${redirectMethod}`);
278
-
279
173
  return oidcClientTsUserManager
280
174
  .signinRedirect({
281
- state: stateData,
282
- redirectMethod,
283
- prompt: (() => {
284
- switch (rest.action) {
285
- case "go to auth server":
286
- return undefined;
287
- case "login":
288
- switch (rest.interaction) {
289
- case "ensure no interaction":
290
- return "none";
291
- case "ensure interaction":
292
- return "login";
293
- case "directly redirect if active session show login otherwise":
294
- return undefined;
295
- }
296
- assert<Equals<typeof rest.interaction, never>>;
297
- }
298
- assert<Equals<typeof rest, never>>;
299
- })(),
300
- transformUrl: transformUrl_oidcClientTs,
301
- extraTokenParams:
302
- getExtraTokenParams === undefined ? undefined : noUndefined(getExtraTokenParams())
303
- })
304
- .then(() => new Promise<never>(() => {}));
175
+ state: stateData,
176
+ redirectMethod,
177
+ prompt: (() => {
178
+ switch (rest.action) {
179
+ case "go to auth server":
180
+ return undefined;
181
+ case "login":
182
+ switch (rest.interaction) {
183
+ case "ensure no interaction":
184
+ return "none";
185
+ case "ensure interaction":
186
+ return "login";
187
+ case "directly redirect if active session show login otherwise":
188
+ return undefined;
189
+ }
190
+ assert;
191
+ }
192
+ assert;
193
+ })(),
194
+ transformUrl: transformUrl_oidcClientTs,
195
+ extraTokenParams: getExtraTokenParams === undefined ? undefined : noUndefined(getExtraTokenParams())
196
+ })
197
+ .then(() => new Promise(() => { }));
305
198
  }
306
-
307
199
  const { unsubscribe } = evtIsUserLoggedIn.subscribe(isLoggedIn => {
308
200
  unsubscribe();
309
-
310
201
  if (isLoggedIn) {
311
202
  localStorage.removeItem(LOCAL_STORAGE_KEY_TO_CLEAR_WHEN_USER_LOGGED_IN);
312
- } else {
203
+ }
204
+ else {
313
205
  const realPushState = history.pushState.bind(history);
314
206
  history.pushState = function pushState(...args) {
315
207
  lastPublicUrl = window.location.href;
@@ -317,8 +209,8 @@ export function createLoginOrGoToAuthServer(params: {
317
209
  };
318
210
  }
319
211
  });
320
-
321
212
  return {
322
213
  loginOrGoToAuthServer
323
214
  };
324
215
  }
216
+ //# sourceMappingURL=loginOrGoToAuthServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loginOrGoToAuthServer.js","sourceRoot":"","sources":["../../../src/core/loginOrGoToAuthServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function notifyOtherTabsOfLogin(params: {
2
+ configId: string;
3
+ }): void;
4
+ export declare function getPrOtherTabLogin(params: {
5
+ configId: string;
6
+ }): {
7
+ prOtherTabLogin: Promise<void>;
8
+ };
@@ -1,51 +1,33 @@
1
1
  import { assert, is } from "../vendor/frontend/tsafe";
2
2
  import { Deferred } from "../tools/Deferred";
3
-
4
3
  const globalContext = {
5
4
  appInstanceId: Math.random().toString(36).slice(2)
6
5
  };
7
-
8
- type Message = {
9
- appInstanceId: string;
10
- configId: string;
11
- };
12
-
13
- function getChannelName(params: { configId: string }) {
6
+ function getChannelName(params) {
14
7
  const { configId } = params;
15
8
  return `oidc-spa:login-propagation:${configId}`;
16
9
  }
17
-
18
- export function notifyOtherTabsOfLogin(params: { configId: string }) {
10
+ export function notifyOtherTabsOfLogin(params) {
19
11
  const { configId } = params;
20
-
21
- const message: Message = {
12
+ const message = {
22
13
  configId,
23
14
  appInstanceId: globalContext.appInstanceId
24
15
  };
25
-
26
16
  new BroadcastChannel(getChannelName({ configId })).postMessage(message);
27
17
  }
28
-
29
- export function getPrOtherTabLogin(params: { configId: string }) {
18
+ export function getPrOtherTabLogin(params) {
30
19
  const { configId } = params;
31
-
32
- const dOtherTabLogin = new Deferred<void>();
33
-
20
+ const dOtherTabLogin = new Deferred();
34
21
  const channel = new BroadcastChannel(getChannelName({ configId }));
35
-
36
22
  channel.onmessage = ({ data: message }) => {
37
- assert(is<Message>(message));
38
-
23
+ assert(is(message));
39
24
  if (message.appInstanceId === globalContext.appInstanceId) {
40
25
  return;
41
26
  }
42
-
43
27
  channel.close();
44
-
45
28
  dOtherTabLogin.resolve();
46
29
  };
47
-
48
30
  const prOtherTabLogin = dOtherTabLogin.pr;
49
-
50
31
  return { prOtherTabLogin };
51
32
  }
33
+ //# sourceMappingURL=loginPropagationToOtherTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loginPropagationToOtherTabs.js","sourceRoot":"","sources":["../../../src/core/loginPropagationToOtherTabs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,aAAa,GAAG;IAClB,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;CACrD,CAAC;AAOF,SAAS,cAAc,CAAC,MAA4B;IAChD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAC5B,OAAO,8BAA8B,QAAQ,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAA4B;IAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAE5B,MAAM,OAAO,GAAY;QACrB,QAAQ;QACR,aAAa,EAAE,aAAa,CAAC,aAAa;KAC7C,CAAC;IAEF,IAAI,gBAAgB,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAA4B;IAC3D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAE5B,MAAM,cAAc,GAAG,IAAI,QAAQ,EAAQ,CAAC;IAE5C,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAEnE,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACtC,MAAM,CAAC,EAAE,CAAU,OAAO,CAAC,CAAC,CAAC;QAE7B,IAAI,OAAO,CAAC,aAAa,KAAK,aAAa,CAAC,aAAa,EAAE,CAAC;YACxD,OAAO;QACX,CAAC;QAED,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,cAAc,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,cAAc,CAAC,EAAE,CAAC;IAE1C,OAAO,EAAE,eAAe,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { UserManager as OidcClientTsUserManager, User as OidcClientTsUser } from "../vendor/frontend/oidc-client-ts";
2
+ import { type AuthResponse } from "./AuthResponse";
3
+ type ResultOfLoginSilent = {
4
+ outcome: "got auth response from iframe";
5
+ authResponse: AuthResponse;
6
+ } | {
7
+ outcome: "failure";
8
+ cause: "timeout" | "can't reach well-known oidc endpoint";
9
+ } | {
10
+ outcome: "token refreshed using refresh token";
11
+ oidcClientTsUser: OidcClientTsUser;
12
+ };
13
+ export declare function loginSilent(params: {
14
+ oidcClientTsUserManager: OidcClientTsUserManager;
15
+ stateUrlParamValue_instance: string;
16
+ configId: string;
17
+ transformUrlBeforeRedirect: ((params: {
18
+ authorizationUrl: string;
19
+ isSilent: true;
20
+ }) => string) | undefined;
21
+ getExtraQueryParams: ((params: {
22
+ isSilent: true;
23
+ url: string;
24
+ }) => Record<string, string | undefined>) | undefined;
25
+ getExtraTokenParams: (() => Record<string, string | undefined>) | undefined;
26
+ autoLogin: boolean;
27
+ }): Promise<ResultOfLoginSilent>;
28
+ export {};
@@ -0,0 +1,125 @@
1
+ import { Deferred } from "../tools/Deferred";
2
+ import { id, assert, noUndefined } from "../vendor/frontend/tsafe";
3
+ import { getStateData, clearStateStore } from "./StateData";
4
+ import { getDownlinkAndRtt } from "../tools/getDownlinkAndRtt";
5
+ import { getIsDev } from "../tools/isDev";
6
+ import { addOrUpdateSearchParam } from "../tools/urlSearchParams";
7
+ import { initIframeMessageProtection } from "./iframeMessageProtection";
8
+ export async function loginSilent(params) {
9
+ const { oidcClientTsUserManager, stateUrlParamValue_instance, configId, transformUrlBeforeRedirect, getExtraQueryParams, getExtraTokenParams, autoLogin } = params;
10
+ const dResult = new Deferred();
11
+ const timeoutDelayMs = (() => {
12
+ if (autoLogin) {
13
+ return 25000;
14
+ }
15
+ const downlinkAndRtt = getDownlinkAndRtt();
16
+ const isDev = getIsDev();
17
+ // Base delay is the minimum delay we should wait in any case
18
+ const BASE_DELAY_MS = isDev ? 9000 : 7000;
19
+ if (downlinkAndRtt === undefined) {
20
+ return BASE_DELAY_MS;
21
+ }
22
+ const { downlink, rtt } = downlinkAndRtt;
23
+ // Calculate dynamic delay based on RTT and downlink
24
+ // Add 1 to downlink to avoid division by zero
25
+ const dynamicDelay = rtt * 2.5 + BASE_DELAY_MS / (downlink + 1);
26
+ return Math.max(BASE_DELAY_MS, dynamicDelay);
27
+ })();
28
+ const { decodeEncryptedAuth, getIsEncryptedAuthResponse, clearSessionStoragePublicKey } = await initIframeMessageProtection({
29
+ stateUrlParamValue: stateUrlParamValue_instance
30
+ });
31
+ const timer = setTimeout(async () => {
32
+ dResult.resolve({
33
+ outcome: "failure",
34
+ cause: "timeout"
35
+ });
36
+ }, timeoutDelayMs);
37
+ const listener = async (event) => {
38
+ if (event.origin !== window.location.origin) {
39
+ return;
40
+ }
41
+ if (!getIsEncryptedAuthResponse({
42
+ message: event.data
43
+ })) {
44
+ return;
45
+ }
46
+ const { authResponse } = await decodeEncryptedAuth({ encryptedAuthResponse: event.data });
47
+ const stateData = getStateData({ stateUrlParamValue: authResponse.state });
48
+ assert(stateData !== undefined, "765645");
49
+ assert(stateData.context === "iframe", "250711");
50
+ if (stateData.configId !== configId) {
51
+ return;
52
+ }
53
+ clearTimeout(timer);
54
+ window.removeEventListener("message", listener);
55
+ dResult.resolve({
56
+ outcome: "got auth response from iframe",
57
+ authResponse
58
+ });
59
+ };
60
+ window.addEventListener("message", listener, false);
61
+ const transformUrl_oidcClientTs = (url) => {
62
+ add_extra_query_params: {
63
+ if (getExtraQueryParams === undefined) {
64
+ break add_extra_query_params;
65
+ }
66
+ const extraQueryParams = getExtraQueryParams({ isSilent: true, url });
67
+ for (const [name, value] of Object.entries(extraQueryParams)) {
68
+ if (value === undefined) {
69
+ continue;
70
+ }
71
+ url = addOrUpdateSearchParam({ url, name, value, encodeMethod: "www-form" });
72
+ }
73
+ }
74
+ apply_transform_url: {
75
+ if (transformUrlBeforeRedirect === undefined) {
76
+ break apply_transform_url;
77
+ }
78
+ url = transformUrlBeforeRedirect({ authorizationUrl: url, isSilent: true });
79
+ }
80
+ return url;
81
+ };
82
+ oidcClientTsUserManager
83
+ .signinSilent({
84
+ state: id({
85
+ context: "iframe",
86
+ configId
87
+ }),
88
+ silentRequestTimeoutInSeconds: timeoutDelayMs / 1000,
89
+ extraTokenParams: getExtraTokenParams === undefined ? undefined : noUndefined(getExtraTokenParams()),
90
+ transformUrl: transformUrl_oidcClientTs
91
+ })
92
+ .then(oidcClientTsUser => {
93
+ assert(oidcClientTsUser !== null, "oidcClientTsUser is not supposed to be null here");
94
+ clearTimeout(timer);
95
+ window.removeEventListener("message", listener);
96
+ dResult.resolve({
97
+ outcome: "token refreshed using refresh token",
98
+ oidcClientTsUser
99
+ });
100
+ }, (error) => {
101
+ if (error.message === "Failed to fetch") {
102
+ // NOTE: If we got an error here it means that the fetch to the
103
+ // well-known oidc endpoint failed.
104
+ // This usually means that the server is down or that the issuerUri
105
+ // is not pointing to a valid oidc server.
106
+ // It could be a CORS error on the well-known endpoint but it's unlikely.
107
+ clearTimeout(timer);
108
+ dResult.resolve({
109
+ outcome: "failure",
110
+ cause: "can't reach well-known oidc endpoint"
111
+ });
112
+ return;
113
+ }
114
+ // NOTE: Here, except error on our understanding there can't be any other
115
+ // error than timeout so we fail silently and let the timeout expire.
116
+ });
117
+ dResult.pr.then(result => {
118
+ clearSessionStoragePublicKey();
119
+ if (result.outcome === "failure") {
120
+ clearStateStore({ stateUrlParamValue: stateUrlParamValue_instance });
121
+ }
122
+ });
123
+ return dResult.pr;
124
+ }
125
+ //# sourceMappingURL=loginSilent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loginSilent.js","sourceRoot":"","sources":["../../../src/core/loginSilent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare function notifyOtherTabsOfLogout(params: {
2
+ configId: string;
3
+ sessionId: string | undefined;
4
+ }): void;
5
+ export declare function getPrOtherTabLogout(params: {
6
+ sessionId: string | undefined;
7
+ configId: string;
8
+ }): {
9
+ prOtherTabLogout: Promise<void>;
10
+ };