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,75 +1,49 @@
1
- import {
2
- getStateData,
3
- markStateDataAsProcessedByCallback,
4
- getIsStatQueryParamValue,
5
- type StateData
6
- } from "./StateData";
1
+ import { getStateData, markStateDataAsProcessedByCallback, getIsStatQueryParamValue } from "./StateData";
7
2
  import { assert, id } from "../vendor/frontend/tsafe";
8
- import type { AuthResponse } from "./AuthResponse";
9
3
  import { initialLocationHref } from "./initialLocationHref";
10
4
  import { encryptAuthResponse } from "./iframeMessageProtection";
11
-
12
5
  const globalContext = {
13
- previousCall: id<{ isHandled: boolean } | undefined>(undefined)
6
+ previousCall: id(undefined)
14
7
  };
15
-
16
- export function handleOidcCallback(): { isHandled: boolean } {
8
+ export function handleOidcCallback() {
17
9
  if (globalContext.previousCall !== undefined) {
18
10
  return globalContext.previousCall;
19
11
  }
20
-
21
12
  return (globalContext.previousCall = handleOidcCallback_nonMemoized());
22
13
  }
23
-
24
- function handleOidcCallback_nonMemoized(): { isHandled: boolean } {
14
+ function handleOidcCallback_nonMemoized() {
25
15
  const location_urlObj = new URL(initialLocationHref);
26
-
27
16
  const stateUrlParamValue_wrap = (() => {
28
17
  fragment: {
29
- const stateUrlParamValue = new URLSearchParams(location_urlObj.hash.replace(/^#/, "")).get(
30
- "state"
31
- );
32
-
18
+ const stateUrlParamValue = new URLSearchParams(location_urlObj.hash.replace(/^#/, "")).get("state");
33
19
  if (stateUrlParamValue === null) {
34
20
  break fragment;
35
21
  }
36
-
37
22
  if (!getIsStatQueryParamValue({ maybeStateUrlParamValue: stateUrlParamValue })) {
38
23
  break fragment;
39
24
  }
40
-
41
25
  return { stateUrlParamValue, isFragment: true };
42
26
  }
43
-
44
27
  query: {
45
28
  const stateUrlParamValue = location_urlObj.searchParams.get("state");
46
-
47
29
  if (stateUrlParamValue === null) {
48
30
  break query;
49
31
  }
50
-
51
32
  if (!getIsStatQueryParamValue({ maybeStateUrlParamValue: stateUrlParamValue })) {
52
33
  break query;
53
34
  }
54
-
55
- if (
56
- location_urlObj.searchParams.get("client_id") !== null &&
35
+ if (location_urlObj.searchParams.get("client_id") !== null &&
57
36
  location_urlObj.searchParams.get("response_type") !== null &&
58
- location_urlObj.searchParams.get("redirect_uri") !== null
59
- ) {
37
+ location_urlObj.searchParams.get("redirect_uri") !== null) {
60
38
  // NOTE: We are probably in a Keycloakify theme and oidc-spa was loaded by mistake.
61
39
  break query;
62
40
  }
63
-
64
41
  return { stateUrlParamValue, isFragment: false };
65
42
  }
66
-
67
43
  return undefined;
68
44
  })();
69
-
70
45
  if (stateUrlParamValue_wrap === undefined) {
71
46
  const backForwardTracker = readBackForwardTracker();
72
-
73
47
  if (backForwardTracker !== undefined) {
74
48
  writeBackForwardTracker({
75
49
  backForwardTracker: {
@@ -78,36 +52,25 @@ function handleOidcCallback_nonMemoized(): { isHandled: boolean } {
78
52
  }
79
53
  });
80
54
  }
81
-
82
55
  return { isHandled: false };
83
56
  }
84
-
85
57
  const isHandled = true;
86
-
87
58
  const { stateUrlParamValue, isFragment } = stateUrlParamValue_wrap;
88
-
89
- console.log = () => {};
90
- console.warn = () => {};
91
- console.error = () => {};
92
- console.debug = () => {};
93
-
59
+ console.log = () => { };
60
+ console.warn = () => { };
61
+ console.error = () => { };
62
+ console.debug = () => { };
94
63
  const stateData = getStateData({ stateUrlParamValue });
95
-
96
- if (
97
- stateData === undefined ||
98
- (stateData.context === "redirect" && stateData.hasBeenProcessedByCallback)
99
- ) {
100
- const historyMethod: "back" | "forward" = (() => {
64
+ if (stateData === undefined ||
65
+ (stateData.context === "redirect" && stateData.hasBeenProcessedByCallback)) {
66
+ const historyMethod = (() => {
101
67
  const backForwardTracker = readBackForwardTracker();
102
-
103
68
  if (backForwardTracker === undefined) {
104
69
  return "back";
105
70
  }
106
-
107
71
  if (!backForwardTracker.hasExitedCallback) {
108
72
  return backForwardTracker.previousHistoryMethod;
109
73
  }
110
-
111
74
  switch (backForwardTracker.previousHistoryMethod) {
112
75
  case "back":
113
76
  return "forward";
@@ -115,19 +78,15 @@ function handleOidcCallback_nonMemoized(): { isHandled: boolean } {
115
78
  return "back";
116
79
  }
117
80
  })();
118
-
119
81
  writeBackForwardTracker({
120
82
  backForwardTracker: {
121
83
  previousHistoryMethod: historyMethod,
122
84
  hasExitedCallback: false
123
85
  }
124
86
  });
125
-
126
87
  setTimeout(() => {
127
88
  reloadOnBfCacheNavigation();
128
-
129
89
  window.history[historyMethod]();
130
-
131
90
  // NOTE: This is a "better than nothing" approach.
132
91
  // Under some circumstances it's possible to get stuck on this url
133
92
  // if there is no "next" page in the history for example, navigating
@@ -138,20 +97,15 @@ function handleOidcCallback_nonMemoized(): { isHandled: boolean } {
138
97
  window.location.href = `${protocol}//${host}${pathname}${hash}`;
139
98
  }, 350);
140
99
  }, 0);
141
-
142
100
  return { isHandled };
143
101
  }
144
-
145
- const authResponse: AuthResponse = { state: "" };
146
-
102
+ const authResponse = { state: "" };
147
103
  for (const [key, value] of isFragment
148
104
  ? new URLSearchParams(location_urlObj.hash.replace(/^#/, ""))
149
105
  : location_urlObj.searchParams) {
150
106
  authResponse[key] = value;
151
107
  }
152
-
153
108
  assert(authResponse.state !== "", "063965");
154
-
155
109
  switch (stateData.context) {
156
110
  case "iframe":
157
111
  encryptAuthResponse({
@@ -170,27 +124,17 @@ function handleOidcCallback_nonMemoized(): { isHandled: boolean } {
170
124
  if (stateData.action === "login" && authResponse.error === "consent_required") {
171
125
  return stateData.redirectUrl_consentRequiredCase;
172
126
  }
173
-
174
127
  return stateData.redirectUrl;
175
128
  })();
176
-
177
129
  location.href = href;
178
130
  }, 0);
179
131
  break;
180
132
  }
181
-
182
133
  return { isHandled };
183
134
  }
184
-
185
- const {
186
- readRedirectAuthResponses,
187
- writeRedirectAuthResponses,
188
- moveRedirectAuthResponseFromSessionStorageToMemory
189
- } = (() => {
135
+ const { readRedirectAuthResponses, writeRedirectAuthResponses, moveRedirectAuthResponseFromSessionStorageToMemory } = (() => {
190
136
  const AUTH_RESPONSES_KEY = "oidc-spa:authResponses";
191
-
192
- let authResponses_movedToMemoryFromSessionStorage: AuthResponse[] | undefined = undefined;
193
-
137
+ let authResponses_movedToMemoryFromSessionStorage = undefined;
194
138
  // NOTE: Here we note that we can re-write on session storage some auth response
195
139
  // after earlyInit in retrieveRedirectAuthResponseAndStateData
196
140
  // In situation where there are more than one client in the same app and we can't use iframe,
@@ -198,124 +142,84 @@ const {
198
142
  // In most case it won't happen if the init sequence is deterministic but the client
199
143
  // can be instantiated at any time really.
200
144
  // So the move to memory of the response is fully effective only when theres one client.
201
- function writeRedirectAuthResponses(params: { authResponses: AuthResponse[] }): void {
145
+ function writeRedirectAuthResponses(params) {
202
146
  const { authResponses } = params;
203
-
204
147
  authResponses_movedToMemoryFromSessionStorage = undefined;
205
-
206
148
  if (authResponses.length === 0) {
207
149
  sessionStorage.removeItem(AUTH_RESPONSES_KEY);
208
150
  return;
209
151
  }
210
152
  sessionStorage.setItem(AUTH_RESPONSES_KEY, JSON.stringify(authResponses));
211
153
  }
212
-
213
- function readRedirectAuthResponses(): AuthResponse[] {
154
+ function readRedirectAuthResponses() {
214
155
  if (authResponses_movedToMemoryFromSessionStorage !== undefined) {
215
156
  return authResponses_movedToMemoryFromSessionStorage;
216
157
  }
217
-
218
158
  const raw = sessionStorage.getItem(AUTH_RESPONSES_KEY);
219
-
220
159
  if (raw === null) {
221
160
  return [];
222
161
  }
223
-
224
162
  return JSON.parse(raw);
225
163
  }
226
-
227
164
  function moveRedirectAuthResponseFromSessionStorageToMemory() {
228
165
  const authResponses = readRedirectAuthResponses();
229
-
230
166
  writeRedirectAuthResponses({ authResponses: [] });
231
-
232
167
  authResponses_movedToMemoryFromSessionStorage = authResponses;
233
168
  }
234
-
235
169
  return {
236
170
  writeRedirectAuthResponses,
237
171
  readRedirectAuthResponses,
238
172
  moveRedirectAuthResponseFromSessionStorageToMemory
239
173
  };
240
174
  })();
241
-
242
175
  export { moveRedirectAuthResponseFromSessionStorageToMemory };
243
-
244
- export function retrieveRedirectAuthResponseAndStateData(params: {
245
- configId: string;
246
- }): { authResponse: AuthResponse; stateData: StateData.Redirect } | undefined {
176
+ export function retrieveRedirectAuthResponseAndStateData(params) {
247
177
  const { configId } = params;
248
-
249
178
  const authResponses = readRedirectAuthResponses();
250
-
251
- let authResponseAndStateData:
252
- | { authResponse: AuthResponse; stateData: StateData.Redirect }
253
- | undefined = undefined;
254
-
179
+ let authResponseAndStateData = undefined;
255
180
  for (const authResponse of [...authResponses]) {
256
181
  const stateData = getStateData({ stateUrlParamValue: authResponse.state });
257
-
258
182
  if (stateData === undefined) {
259
183
  // NOTE: We do not understand how this can happen but it can.
260
184
  authResponses.splice(authResponses.indexOf(authResponse), 1);
261
185
  continue;
262
186
  }
263
-
264
187
  assert(stateData.context === "redirect", "474728");
265
-
266
188
  if (stateData.configId !== configId) {
267
189
  continue;
268
190
  }
269
-
270
191
  authResponses.splice(authResponses.indexOf(authResponse), 1);
271
-
272
192
  authResponseAndStateData = { authResponse, stateData };
273
193
  }
274
-
275
194
  writeRedirectAuthResponses({ authResponses });
276
-
277
195
  return authResponseAndStateData;
278
196
  }
279
-
280
197
  function reloadOnBfCacheNavigation() {
281
198
  const start = Date.now();
282
199
  window.addEventListener("pageshow", () => {
283
200
  const elapsed = Date.now() - start;
284
-
285
201
  if (elapsed < 100) {
286
202
  return;
287
203
  }
288
204
  location.reload();
289
205
  });
290
206
  }
291
-
292
207
  const { writeBackForwardTracker, readBackForwardTracker, clearBackForwardTracker } = (() => {
293
208
  const BACK_NAVIGATION_TRACKER_KEY = "oidc-spa:callback-back-forward-tracker";
294
-
295
- type BackForwardTracker = {
296
- previousHistoryMethod: "back" | "forward";
297
- hasExitedCallback: boolean;
298
- };
299
-
300
- function writeBackForwardTracker(params: { backForwardTracker: BackForwardTracker }): void {
209
+ function writeBackForwardTracker(params) {
301
210
  const { backForwardTracker } = params;
302
-
303
211
  sessionStorage.setItem(BACK_NAVIGATION_TRACKER_KEY, JSON.stringify(backForwardTracker));
304
212
  }
305
-
306
- function readBackForwardTracker(): BackForwardTracker | undefined {
213
+ function readBackForwardTracker() {
307
214
  const raw = sessionStorage.getItem(BACK_NAVIGATION_TRACKER_KEY);
308
-
309
215
  if (raw === null) {
310
216
  return undefined;
311
217
  }
312
-
313
218
  return JSON.parse(raw);
314
219
  }
315
-
316
- function clearBackForwardTracker(): void {
220
+ function clearBackForwardTracker() {
317
221
  sessionStorage.removeItem(BACK_NAVIGATION_TRACKER_KEY);
318
222
  }
319
-
320
223
  return { writeBackForwardTracker, readBackForwardTracker, clearBackForwardTracker };
321
224
  })();
225
+ //# sourceMappingURL=handleOidcCallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleOidcCallback.js","sourceRoot":"","sources":["../../../src/core/handleOidcCallback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type AuthResponse } from "./AuthResponse";
2
+ export declare function preventSessionStorageSetItemOfPublicKeyByThirdParty(): void;
3
+ export declare function initIframeMessageProtection(params: {
4
+ stateUrlParamValue: string;
5
+ }): Promise<{
6
+ getIsEncryptedAuthResponse: (params: {
7
+ message: unknown;
8
+ }) => boolean;
9
+ decodeEncryptedAuth: (params: {
10
+ encryptedAuthResponse: string;
11
+ }) => Promise<{
12
+ authResponse: AuthResponse;
13
+ }>;
14
+ clearSessionStoragePublicKey: () => void;
15
+ }>;
16
+ export declare function encryptAuthResponse(params: {
17
+ authResponse: AuthResponse;
18
+ }): Promise<{
19
+ encryptedMessage: string;
20
+ }>;
@@ -1,32 +1,21 @@
1
1
  import { assert } from "../vendor/frontend/tsafe";
2
2
  import { asymmetricEncrypt, asymmetricDecrypt, generateKeys } from "../tools/asymmetricEncryption";
3
- import { type AuthResponse } from "./AuthResponse";
4
-
5
3
  const sessionStorage_original = window.sessionStorage;
6
4
  const setItem_real = Storage.prototype.setItem;
7
-
8
5
  const SESSION_STORAGE_PREFIX = "oidc-spa_iframe_authResponse_publicKey_";
9
-
10
6
  export function preventSessionStorageSetItemOfPublicKeyByThirdParty() {
11
- const setItem_protected = function setItem(this: any, key: string, value: string): void {
7
+ const setItem_protected = function setItem(key, value) {
12
8
  if (this !== sessionStorage_original) {
13
9
  return setItem_real.call(this, key, value);
14
10
  }
15
-
16
11
  if (key.startsWith(SESSION_STORAGE_PREFIX)) {
17
- throw new Error(
18
- "Attack prevented by oidc-spa. You have malicious code running in your system"
19
- );
12
+ throw new Error("Attack prevented by oidc-spa. You have malicious code running in your system");
20
13
  }
21
-
22
14
  return setItem_real.call(sessionStorage_original, key, value);
23
15
  };
24
-
25
16
  {
26
17
  const pd = Object.getOwnPropertyDescriptor(Storage.prototype, "setItem");
27
-
28
18
  assert(pd !== undefined);
29
-
30
19
  Object.defineProperty(Storage.prototype, "setItem", {
31
20
  enumerable: pd.enumerable,
32
21
  writable: pd.writable,
@@ -34,67 +23,43 @@ export function preventSessionStorageSetItemOfPublicKeyByThirdParty() {
34
23
  });
35
24
  }
36
25
  }
37
-
38
26
  const ENCRYPTED_AUTH_RESPONSES_PREFIX = "oidc-spa_encrypted_authResponse_";
39
-
40
- function getSessionStorageKey(params: { stateUrlParamValue: string }) {
27
+ function getSessionStorageKey(params) {
41
28
  const { stateUrlParamValue } = params;
42
-
43
29
  return `${SESSION_STORAGE_PREFIX}${stateUrlParamValue}`;
44
30
  }
45
-
46
- export async function initIframeMessageProtection(params: { stateUrlParamValue: string }) {
31
+ export async function initIframeMessageProtection(params) {
47
32
  const { stateUrlParamValue } = params;
48
-
49
33
  const { publicKey, privateKey } = await generateKeys();
50
-
51
34
  const sessionStorageKey = getSessionStorageKey({ stateUrlParamValue });
52
-
53
35
  setItem_real.call(sessionStorage, sessionStorageKey, publicKey);
54
-
55
- function getIsEncryptedAuthResponse(params: { message: unknown }): boolean {
36
+ function getIsEncryptedAuthResponse(params) {
56
37
  const { message } = params;
57
-
58
38
  return typeof message === "string" && message.startsWith(ENCRYPTED_AUTH_RESPONSES_PREFIX);
59
39
  }
60
-
61
- async function decodeEncryptedAuth(params: {
62
- encryptedAuthResponse: string;
63
- }): Promise<{ authResponse: AuthResponse }> {
40
+ async function decodeEncryptedAuth(params) {
64
41
  const { encryptedAuthResponse } = params;
65
-
66
42
  const { message: authResponse_str } = await asymmetricDecrypt({
67
43
  encryptedMessage: encryptedAuthResponse.slice(ENCRYPTED_AUTH_RESPONSES_PREFIX.length),
68
44
  privateKey
69
45
  });
70
-
71
- const authResponse: AuthResponse = JSON.parse(authResponse_str);
72
-
46
+ const authResponse = JSON.parse(authResponse_str);
73
47
  return { authResponse };
74
48
  }
75
-
76
49
  function clearSessionStoragePublicKey() {
77
50
  sessionStorage.removeItem(sessionStorageKey);
78
51
  }
79
-
80
52
  return { getIsEncryptedAuthResponse, decodeEncryptedAuth, clearSessionStoragePublicKey };
81
53
  }
82
-
83
- export async function encryptAuthResponse(params: { authResponse: AuthResponse }) {
54
+ export async function encryptAuthResponse(params) {
84
55
  const { authResponse } = params;
85
-
86
- const publicKey = sessionStorage.getItem(
87
- getSessionStorageKey({ stateUrlParamValue: authResponse.state })
88
- );
89
-
56
+ const publicKey = sessionStorage.getItem(getSessionStorageKey({ stateUrlParamValue: authResponse.state }));
90
57
  assert(publicKey !== null, "2293302");
91
-
92
58
  const { encryptedMessage: encryptedMessage_withoutPrefix } = await asymmetricEncrypt({
93
59
  publicKey,
94
60
  message: JSON.stringify(authResponse)
95
61
  });
96
-
97
62
  const encryptedMessage = `${ENCRYPTED_AUTH_RESPONSES_PREFIX}${encryptedMessage_withoutPrefix}`;
98
-
99
63
  return { encryptedMessage };
100
64
  }
65
+ //# sourceMappingURL=iframeMessageProtection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iframeMessageProtection.js","sourceRoot":"","sources":["../../../src/core/iframeMessageProtection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { createOidc } from "./createOidc";
2
+ export { OidcInitializationError } from "./OidcInitializationError";
3
+ export { handleOidcCallback } from "./handleOidcCallback";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAA2B,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const initialLocationHref: string;
@@ -1,5 +1,5 @@
1
1
  const globalContext = {
2
2
  initialLocationHref: window.location.href
3
3
  };
4
-
5
4
  export const { initialLocationHref } = globalContext;
5
+ //# sourceMappingURL=initialLocationHref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialLocationHref.js","sourceRoot":"","sources":["../../../src/core/initialLocationHref.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG;IAClB,mBAAmB,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;CAC5C,CAAC;AAEF,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { NonPostableEvt } from "../tools/Evt";
2
+ export declare function createGetIsNewBrowserSession(params: {
3
+ configId: string;
4
+ evtUserNotLoggedIn: NonPostableEvt<void>;
5
+ }): {
6
+ getIsNewBrowserSession: (params: {
7
+ subjectId: string;
8
+ }) => boolean;
9
+ };
@@ -1,37 +1,25 @@
1
- import type { NonPostableEvt } from "../tools/Evt";
2
-
3
- export function createGetIsNewBrowserSession(params: {
4
- configId: string;
5
- evtUserNotLoggedIn: NonPostableEvt<void>;
6
- }) {
1
+ export function createGetIsNewBrowserSession(params) {
7
2
  const { configId, evtUserNotLoggedIn } = params;
8
-
9
3
  const SESSION_STORAGE_KEY = `oidc-spa.subject-id:${configId}`;
10
-
11
4
  {
12
5
  const { unsubscribe } = evtUserNotLoggedIn.subscribe(() => {
13
6
  unsubscribe();
14
7
  sessionStorage.removeItem(SESSION_STORAGE_KEY);
15
8
  });
16
9
  }
17
-
18
- function getIsNewBrowserSession(params: { subjectId: string }): boolean {
10
+ function getIsNewBrowserSession(params) {
19
11
  const { subjectId } = params;
20
-
21
12
  const subjectId_sessionStorage = sessionStorage.getItem(SESSION_STORAGE_KEY);
22
-
23
13
  if (subjectId_sessionStorage === null) {
24
14
  sessionStorage.setItem(SESSION_STORAGE_KEY, subjectId);
25
15
  return true;
26
16
  }
27
-
28
17
  if (subjectId !== subjectId_sessionStorage) {
29
18
  sessionStorage.setItem(SESSION_STORAGE_KEY, subjectId);
30
19
  return true;
31
20
  }
32
-
33
21
  return false;
34
22
  }
35
-
36
23
  return { getIsNewBrowserSession };
37
24
  }
25
+ //# sourceMappingURL=isNewBrowserSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isNewBrowserSession.js","sourceRoot":"","sources":["../../../src/core/isNewBrowserSession.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,4BAA4B,CAAC,MAG5C;IACG,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAAC;IAEhD,MAAM,mBAAmB,GAAG,uBAAuB,QAAQ,EAAE,CAAC;IAE9D,CAAC;QACG,MAAM,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC,SAAS,CAAC,GAAG,EAAE;YACtD,WAAW,EAAE,CAAC;YACd,cAAc,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,SAAS,sBAAsB,CAAC,MAA6B;QACzD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAE7B,MAAM,wBAAwB,GAAG,cAAc,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAE7E,IAAI,wBAAwB,KAAK,IAAI,EAAE,CAAC;YACpC,cAAc,CAAC,OAAO,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,SAAS,KAAK,wBAAwB,EAAE,CAAC;YACzC,cAAc,CAAC,OAAO,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,EAAE,sBAAsB,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { UserManager as OidcClientTsUserManager } from "../vendor/frontend/oidc-client-ts";
2
+ import type { NonPostableEvt } from "../tools/Evt";
3
+ type Params = Params.Login | Params.GoToAuthServer;
4
+ declare namespace Params {
5
+ type Common = {
6
+ redirectUrl: string;
7
+ extraQueryParams_local: Record<string, string | undefined> | undefined;
8
+ transformUrlBeforeRedirect_local: ((url: string) => string) | undefined;
9
+ };
10
+ export type Login = Common & {
11
+ action: "login";
12
+ doNavigateBackToLastPublicUrlIfTheTheUserNavigateBack: boolean;
13
+ doForceReloadOnBfCache: boolean;
14
+ interaction: "ensure no interaction" | "ensure interaction" | "directly redirect if active session show login otherwise";
15
+ };
16
+ export type GoToAuthServer = Common & {
17
+ action: "go to auth server";
18
+ };
19
+ export {};
20
+ }
21
+ export declare function getPrSafelyRestoredFromBfCacheAfterLoginBackNavigation(): Promise<void>;
22
+ export declare function createLoginOrGoToAuthServer(params: {
23
+ configId: string;
24
+ oidcClientTsUserManager: OidcClientTsUserManager;
25
+ transformUrlBeforeRedirect: ((params: {
26
+ authorizationUrl: string;
27
+ isSilent: boolean;
28
+ }) => string) | undefined;
29
+ getExtraQueryParams: ((params: {
30
+ isSilent: boolean;
31
+ url: string;
32
+ }) => Record<string, string | undefined>) | undefined;
33
+ getExtraTokenParams: (() => Record<string, string | undefined>) | undefined;
34
+ homeUrl: string;
35
+ evtIsUserLoggedIn: NonPostableEvt<boolean>;
36
+ log: typeof console.log | undefined;
37
+ }): {
38
+ loginOrGoToAuthServer: (params: Params) => Promise<never>;
39
+ };
40
+ export {};