@axa-fr/react-oidc 6.24.27-alpha928 → 6.25.0-alpha939

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 (264) hide show
  1. package/bin/post-install.js +35 -0
  2. package/dist/FetchToken.d.ts +2 -3
  3. package/dist/FetchToken.d.ts.map +1 -1
  4. package/dist/OidcProvider.d.ts +4 -5
  5. package/dist/OidcProvider.d.ts.map +1 -1
  6. package/dist/OidcSecure.d.ts +3 -3
  7. package/dist/OidcSecure.d.ts.map +1 -1
  8. package/dist/OidcServiceWorker.js +559 -0
  9. package/{service_worker → dist}/OidcTrustedDomains.js +4 -5
  10. package/dist/ReactOidc.d.ts +4 -4
  11. package/dist/ReactOidc.d.ts.map +1 -1
  12. package/dist/User.d.ts +2 -2
  13. package/dist/User.d.ts.map +1 -1
  14. package/dist/core/default-component/AuthenticateError.component.d.ts.map +1 -1
  15. package/dist/core/default-component/Authenticating.component.d.ts.map +1 -1
  16. package/dist/core/default-component/Callback.component.d.ts.map +1 -1
  17. package/dist/core/default-component/Loading.component.d.ts.map +1 -1
  18. package/dist/core/default-component/ServiceWorkerNotSupported.component.d.ts.map +1 -1
  19. package/dist/core/default-component/SessionLost.component.d.ts.map +1 -1
  20. package/dist/core/default-component/SilentCallback.component.d.ts.map +1 -1
  21. package/dist/core/default-component/SilentLogin.component.d.ts.map +1 -1
  22. package/dist/core/default-component/index.d.ts.map +1 -1
  23. package/dist/core/routes/OidcRoutes.d.ts +1 -1
  24. package/dist/core/routes/OidcRoutes.d.ts.map +1 -1
  25. package/dist/core/routes/index.d.ts +3 -0
  26. package/dist/core/routes/index.d.ts.map +1 -0
  27. package/dist/core/routes/withRouter.d.ts +4 -4
  28. package/dist/core/routes/withRouter.d.ts.map +1 -1
  29. package/dist/index.d.ts +2 -2
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +964 -21
  32. package/dist/index.umd.cjs +27 -0
  33. package/package.json +37 -43
  34. package/src/{oidc/FetchToken.tsx → FetchToken.tsx} +14 -16
  35. package/src/{oidc/OidcProvider.tsx → OidcProvider.tsx} +40 -42
  36. package/src/{oidc/OidcSecure.tsx → OidcSecure.tsx} +1 -3
  37. package/src/{oidc/ReactOidc.tsx → ReactOidc.tsx} +1 -3
  38. package/src/{oidc/User.ts → User.ts} +1 -2
  39. package/src/{oidc/core → core}/default-component/AuthenticateError.component.tsx +0 -1
  40. package/src/{oidc/core → core}/default-component/Authenticating.component.tsx +0 -1
  41. package/src/{oidc/core → core}/default-component/Callback.component.tsx +2 -2
  42. package/src/{oidc/core → core}/default-component/Loading.component.tsx +0 -1
  43. package/src/{oidc/core → core}/default-component/ServiceWorkerNotSupported.component.tsx +0 -1
  44. package/src/{oidc/core → core}/default-component/SessionLost.component.tsx +1 -1
  45. package/src/{oidc/core → core}/default-component/SilentCallback.component.tsx +1 -2
  46. package/src/{oidc/core → core}/default-component/SilentLogin.component.tsx +1 -3
  47. package/src/{oidc/core → core}/routes/OidcRoutes.spec.tsx +3 -2
  48. package/src/{oidc/core → core}/routes/OidcRoutes.tsx +6 -6
  49. package/src/{oidc/core → core}/routes/withRouter.spec.tsx +3 -5
  50. package/src/{oidc/index.ts → index.ts} +7 -2
  51. package/bin/copy.cjs +0 -43
  52. package/dist/FetchToken.js +0 -59
  53. package/dist/FetchToken.js.map +0 -1
  54. package/dist/OidcProvider.js +0 -134
  55. package/dist/OidcProvider.js.map +0 -1
  56. package/dist/OidcSecure.js +0 -25
  57. package/dist/OidcSecure.js.map +0 -1
  58. package/dist/ReactOidc.js +0 -156
  59. package/dist/ReactOidc.js.map +0 -1
  60. package/dist/User.js +0 -42
  61. package/dist/User.js.map +0 -1
  62. package/dist/core/default-component/AuthenticateError.component.js +0 -6
  63. package/dist/core/default-component/AuthenticateError.component.js.map +0 -1
  64. package/dist/core/default-component/Authenticating.component.js +0 -6
  65. package/dist/core/default-component/Authenticating.component.js.map +0 -1
  66. package/dist/core/default-component/Callback.component.js +0 -54
  67. package/dist/core/default-component/Callback.component.js.map +0 -1
  68. package/dist/core/default-component/Loading.component.js +0 -6
  69. package/dist/core/default-component/Loading.component.js.map +0 -1
  70. package/dist/core/default-component/ServiceWorkerNotSupported.component.js +0 -6
  71. package/dist/core/default-component/ServiceWorkerNotSupported.component.js.map +0 -1
  72. package/dist/core/default-component/SessionLost.component.js +0 -8
  73. package/dist/core/default-component/SessionLost.component.js.map +0 -1
  74. package/dist/core/default-component/SilentCallback.component.js +0 -27
  75. package/dist/core/default-component/SilentCallback.component.js.map +0 -1
  76. package/dist/core/default-component/SilentLogin.component.js +0 -29
  77. package/dist/core/default-component/SilentLogin.component.js.map +0 -1
  78. package/dist/core/default-component/index.js +0 -20
  79. package/dist/core/default-component/index.js.map +0 -1
  80. package/dist/core/routes/OidcRoutes.js +0 -64
  81. package/dist/core/routes/OidcRoutes.js.map +0 -1
  82. package/dist/core/routes/withRouter.js +0 -31
  83. package/dist/core/routes/withRouter.js.map +0 -1
  84. package/dist/index.js.map +0 -1
  85. package/dist/service_worker/OidcServiceWorker.d.ts +0 -2
  86. package/dist/service_worker/OidcServiceWorker.d.ts.map +0 -1
  87. package/dist/service_worker/OidcServiceWorker.js +0 -2
  88. package/dist/service_worker/OidcServiceWorker.js.map +0 -1
  89. package/dist/service_worker/constants.d.ts +0 -18
  90. package/dist/service_worker/constants.d.ts.map +0 -1
  91. package/dist/service_worker/types.d.ts +0 -87
  92. package/dist/service_worker/types.d.ts.map +0 -1
  93. package/dist/service_worker/utils/codeVerifier.d.ts +0 -2
  94. package/dist/service_worker/utils/codeVerifier.d.ts.map +0 -1
  95. package/dist/service_worker/utils/domains.d.ts +0 -7
  96. package/dist/service_worker/utils/domains.d.ts.map +0 -1
  97. package/dist/service_worker/utils/index.d.ts +0 -6
  98. package/dist/service_worker/utils/index.d.ts.map +0 -1
  99. package/dist/service_worker/utils/serializeHeaders.d.ts +0 -3
  100. package/dist/service_worker/utils/serializeHeaders.d.ts.map +0 -1
  101. package/dist/service_worker/utils/sleep.d.ts +0 -3
  102. package/dist/service_worker/utils/sleep.d.ts.map +0 -1
  103. package/dist/service_worker/utils/strings.d.ts +0 -8
  104. package/dist/service_worker/utils/strings.d.ts.map +0 -1
  105. package/dist/service_worker/utils/tokens.d.ts +0 -22
  106. package/dist/service_worker/utils/tokens.d.ts.map +0 -1
  107. package/dist/tsconfig.tsbuildinfo +0 -1
  108. package/dist/vanilla/cache.d.ts +0 -3
  109. package/dist/vanilla/cache.d.ts.map +0 -1
  110. package/dist/vanilla/cache.js +0 -30
  111. package/dist/vanilla/cache.js.map +0 -1
  112. package/dist/vanilla/checkSession.d.ts +0 -4
  113. package/dist/vanilla/checkSession.d.ts.map +0 -1
  114. package/dist/vanilla/checkSession.js +0 -73
  115. package/dist/vanilla/checkSession.js.map +0 -1
  116. package/dist/vanilla/checkSessionIFrame.d.ts +0 -17
  117. package/dist/vanilla/checkSessionIFrame.d.ts.map +0 -1
  118. package/dist/vanilla/checkSessionIFrame.js +0 -73
  119. package/dist/vanilla/checkSessionIFrame.js.map +0 -1
  120. package/dist/vanilla/crypto.d.ts +0 -4
  121. package/dist/vanilla/crypto.d.ts.map +0 -1
  122. package/dist/vanilla/crypto.js +0 -85
  123. package/dist/vanilla/crypto.js.map +0 -1
  124. package/dist/vanilla/events.d.ts +0 -29
  125. package/dist/vanilla/events.d.ts.map +0 -1
  126. package/dist/vanilla/events.js +0 -32
  127. package/dist/vanilla/events.js.map +0 -1
  128. package/dist/vanilla/index.d.ts +0 -3
  129. package/dist/vanilla/index.d.ts.map +0 -1
  130. package/dist/vanilla/index.js +0 -6
  131. package/dist/vanilla/index.js.map +0 -1
  132. package/dist/vanilla/initSession.d.ts +0 -22
  133. package/dist/vanilla/initSession.d.ts.map +0 -1
  134. package/dist/vanilla/initSession.js +0 -90
  135. package/dist/vanilla/initSession.js.map +0 -1
  136. package/dist/vanilla/initWorker.d.ts +0 -30
  137. package/dist/vanilla/initWorker.d.ts.map +0 -1
  138. package/dist/vanilla/initWorker.js +0 -317
  139. package/dist/vanilla/initWorker.js.map +0 -1
  140. package/dist/vanilla/login.d.ts +0 -8
  141. package/dist/vanilla/login.d.ts.map +0 -1
  142. package/dist/vanilla/login.js +0 -175
  143. package/dist/vanilla/login.js.map +0 -1
  144. package/dist/vanilla/logout.d.ts +0 -8
  145. package/dist/vanilla/logout.d.ts.map +0 -1
  146. package/dist/vanilla/logout.js +0 -118
  147. package/dist/vanilla/logout.js.map +0 -1
  148. package/dist/vanilla/oidc.d.ts +0 -101
  149. package/dist/vanilla/oidc.d.ts.map +0 -1
  150. package/dist/vanilla/oidc.js +0 -612
  151. package/dist/vanilla/oidc.js.map +0 -1
  152. package/dist/vanilla/parseTokens.d.ts +0 -37
  153. package/dist/vanilla/parseTokens.d.ts.map +0 -1
  154. package/dist/vanilla/parseTokens.js +0 -167
  155. package/dist/vanilla/parseTokens.js.map +0 -1
  156. package/dist/vanilla/renewTokens.d.ts +0 -4
  157. package/dist/vanilla/renewTokens.d.ts.map +0 -1
  158. package/dist/vanilla/renewTokens.js +0 -51
  159. package/dist/vanilla/renewTokens.js.map +0 -1
  160. package/dist/vanilla/requests.d.ts +0 -33
  161. package/dist/vanilla/requests.d.ts.map +0 -1
  162. package/dist/vanilla/requests.js +0 -174
  163. package/dist/vanilla/requests.js.map +0 -1
  164. package/dist/vanilla/route-utils.d.ts +0 -13
  165. package/dist/vanilla/route-utils.d.ts.map +0 -1
  166. package/dist/vanilla/route-utils.js +0 -71
  167. package/dist/vanilla/route-utils.js.map +0 -1
  168. package/dist/vanilla/silentLogin.d.ts +0 -10
  169. package/dist/vanilla/silentLogin.d.ts.map +0 -1
  170. package/dist/vanilla/silentLogin.js +0 -144
  171. package/dist/vanilla/silentLogin.js.map +0 -1
  172. package/dist/vanilla/timer.d.ts +0 -8
  173. package/dist/vanilla/timer.d.ts.map +0 -1
  174. package/dist/vanilla/timer.js +0 -143
  175. package/dist/vanilla/timer.js.map +0 -1
  176. package/dist/vanilla/types.d.ts +0 -38
  177. package/dist/vanilla/types.d.ts.map +0 -1
  178. package/dist/vanilla/types.js +0 -3
  179. package/dist/vanilla/types.js.map +0 -1
  180. package/dist/vanilla/user.d.ts +0 -2
  181. package/dist/vanilla/user.d.ts.map +0 -1
  182. package/dist/vanilla/user.js +0 -48
  183. package/dist/vanilla/user.js.map +0 -1
  184. package/dist/vanilla/vanillaOidc.d.ts +0 -85
  185. package/dist/vanilla/vanillaOidc.d.ts.map +0 -1
  186. package/dist/vanilla/vanillaOidc.js +0 -71
  187. package/dist/vanilla/vanillaOidc.js.map +0 -1
  188. package/service_worker/.eslintrc.cjs +0 -18
  189. package/service_worker/OidcServiceWorker.ts +0 -424
  190. package/service_worker/constants.ts +0 -32
  191. package/service_worker/dist/OidcServiceWorker.d.ts +0 -2
  192. package/service_worker/dist/OidcServiceWorker.d.ts.map +0 -1
  193. package/service_worker/dist/OidcServiceWorker.js +0 -2
  194. package/service_worker/dist/OidcServiceWorker.js.map +0 -1
  195. package/service_worker/dist/constants.d.ts +0 -18
  196. package/service_worker/dist/constants.d.ts.map +0 -1
  197. package/service_worker/dist/types.d.ts +0 -87
  198. package/service_worker/dist/types.d.ts.map +0 -1
  199. package/service_worker/dist/utils/codeVerifier.d.ts +0 -2
  200. package/service_worker/dist/utils/codeVerifier.d.ts.map +0 -1
  201. package/service_worker/dist/utils/domains.d.ts +0 -7
  202. package/service_worker/dist/utils/domains.d.ts.map +0 -1
  203. package/service_worker/dist/utils/index.d.ts +0 -6
  204. package/service_worker/dist/utils/index.d.ts.map +0 -1
  205. package/service_worker/dist/utils/serializeHeaders.d.ts +0 -3
  206. package/service_worker/dist/utils/serializeHeaders.d.ts.map +0 -1
  207. package/service_worker/dist/utils/sleep.d.ts +0 -3
  208. package/service_worker/dist/utils/sleep.d.ts.map +0 -1
  209. package/service_worker/dist/utils/strings.d.ts +0 -8
  210. package/service_worker/dist/utils/strings.d.ts.map +0 -1
  211. package/service_worker/dist/utils/tokens.d.ts +0 -22
  212. package/service_worker/dist/utils/tokens.d.ts.map +0 -1
  213. package/service_worker/tsconfig.json +0 -26
  214. package/service_worker/types.ts +0 -103
  215. package/service_worker/utils/__tests__/codeVerifier.spec.ts +0 -14
  216. package/service_worker/utils/__tests__/domains.spec.ts +0 -90
  217. package/service_worker/utils/__tests__/serializeHeaders.spec.ts +0 -11
  218. package/service_worker/utils/__tests__/strings.spec.ts +0 -9
  219. package/service_worker/utils/__tests__/testHelper.ts +0 -352
  220. package/service_worker/utils/__tests__/tokens.spec.ts +0 -92
  221. package/service_worker/utils/codeVerifier.ts +0 -6
  222. package/service_worker/utils/domains.ts +0 -105
  223. package/service_worker/utils/index.ts +0 -5
  224. package/service_worker/utils/serializeHeaders.ts +0 -12
  225. package/service_worker/utils/sleep.ts +0 -2
  226. package/service_worker/utils/strings.ts +0 -9
  227. package/service_worker/utils/tokens.ts +0 -206
  228. package/src/oidc/vanilla/cache.ts +0 -27
  229. package/src/oidc/vanilla/checkSession.ts +0 -60
  230. package/src/oidc/vanilla/checkSessionIFrame.ts +0 -83
  231. package/src/oidc/vanilla/crypto.ts +0 -61
  232. package/src/oidc/vanilla/events.ts +0 -29
  233. package/src/oidc/vanilla/index.ts +0 -2
  234. package/src/oidc/vanilla/iniWorker.spec.ts +0 -21
  235. package/src/oidc/vanilla/initSession.ts +0 -90
  236. package/src/oidc/vanilla/initWorker.ts +0 -321
  237. package/src/oidc/vanilla/login.ts +0 -174
  238. package/src/oidc/vanilla/logout.spec.ts +0 -66
  239. package/src/oidc/vanilla/logout.spec.tsx +0 -64
  240. package/src/oidc/vanilla/logout.ts +0 -101
  241. package/src/oidc/vanilla/oidc.ts +0 -614
  242. package/src/oidc/vanilla/parseTokens.spec.ts +0 -49
  243. package/src/oidc/vanilla/parseTokens.ts +0 -194
  244. package/src/oidc/vanilla/renewTokens.ts +0 -37
  245. package/src/oidc/vanilla/requests.spec.ts +0 -9
  246. package/src/oidc/vanilla/requests.ts +0 -169
  247. package/src/oidc/vanilla/route-utils.spec.ts +0 -23
  248. package/src/oidc/vanilla/route-utils.ts +0 -79
  249. package/src/oidc/vanilla/silentLogin.ts +0 -144
  250. package/src/oidc/vanilla/timer.ts +0 -163
  251. package/src/oidc/vanilla/types.ts +0 -42
  252. package/src/oidc/vanilla/user.ts +0 -40
  253. package/src/oidc/vanilla/vanillaOidc.ts +0 -109
  254. package/src/override/AuthenticateError.component.tsx +0 -15
  255. package/src/override/Authenticating.component.tsx +0 -15
  256. package/src/override/Callback.component.tsx +0 -14
  257. package/src/override/Loading.component.tsx +0 -11
  258. package/src/override/ServiceWorkerNotSupported.component.tsx +0 -15
  259. package/src/override/SessionLost.component.tsx +0 -22
  260. package/src/override/style.ts +0 -12
  261. /package/src/{oidc/core → core}/default-component/index.ts +0 -0
  262. /package/src/{oidc/core → core}/routes/__snapshots__/OidcRoutes.spec.tsx.snap +0 -0
  263. /package/src/{oidc/core → core}/routes/index.ts +0 -0
  264. /package/src/{oidc/core → core}/routes/withRouter.tsx +0 -0
@@ -1,321 +0,0 @@
1
- import { parseOriginalTokens } from './parseTokens.js';
2
- import timer from './timer.js';
3
- import { OidcConfiguration } from './types.js';
4
-
5
- export const getOperatingSystem = (navigator) => {
6
- const nVer = navigator.appVersion;
7
- const nAgt = navigator.userAgent;
8
- const unknown = '-';
9
- // system
10
- let os = unknown;
11
- const clientStrings = [
12
- { s: 'Windows 10', r: /(Windows 10.0|Windows NT 10.0)/ },
13
- { s: 'Windows 8.1', r: /(Windows 8.1|Windows NT 6.3)/ },
14
- { s: 'Windows 8', r: /(Windows 8|Windows NT 6.2)/ },
15
- { s: 'Windows 7', r: /(Windows 7|Windows NT 6.1)/ },
16
- { s: 'Windows Vista', r: /Windows NT 6.0/ },
17
- { s: 'Windows Server 2003', r: /Windows NT 5.2/ },
18
- { s: 'Windows XP', r: /(Windows NT 5.1|Windows XP)/ },
19
- { s: 'Windows 2000', r: /(Windows NT 5.0|Windows 2000)/ },
20
- { s: 'Windows ME', r: /(Win 9x 4.90|Windows ME)/ },
21
- { s: 'Windows 98', r: /(Windows 98|Win98)/ },
22
- { s: 'Windows 95', r: /(Windows 95|Win95|Windows_95)/ },
23
- { s: 'Windows NT 4.0', r: /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/ },
24
- { s: 'Windows CE', r: /Windows CE/ },
25
- { s: 'Windows 3.11', r: /Win16/ },
26
- { s: 'Android', r: /Android/ },
27
- { s: 'Open BSD', r: /OpenBSD/ },
28
- { s: 'Sun OS', r: /SunOS/ },
29
- { s: 'Chrome OS', r: /CrOS/ },
30
- { s: 'Linux', r: /(Linux|X11(?!.*CrOS))/ },
31
- { s: 'iOS', r: /(iPhone|iPad|iPod)/ },
32
- { s: 'Mac OS X', r: /Mac OS X/ },
33
- { s: 'Mac OS', r: /(Mac OS|MacPPC|MacIntel|Mac_PowerPC|Macintosh)/ },
34
- { s: 'QNX', r: /QNX/ },
35
- { s: 'UNIX', r: /UNIX/ },
36
- { s: 'BeOS', r: /BeOS/ },
37
- { s: 'OS/2', r: /OS\/2/ },
38
- { s: 'Search Bot', r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/ },
39
- ];
40
- for (const id in clientStrings) {
41
- const cs = clientStrings[id];
42
- if (cs.r.test(nAgt)) {
43
- os = cs.s;
44
- break;
45
- }
46
- }
47
-
48
- let osVersion = unknown;
49
-
50
- if (/Windows/.test(os)) {
51
- osVersion = /Windows (.*)/.exec(os)[1];
52
- os = 'Windows';
53
- }
54
-
55
- switch (os) {
56
- case 'Mac OS':
57
- case 'Mac OS X':
58
- case 'Android':
59
- osVersion = /(?:Android|Mac OS|Mac OS X|MacPPC|MacIntel|Mac_PowerPC|Macintosh) ([._\d]+)/.exec(nAgt)[1];
60
- break;
61
-
62
- case 'iOS': {
63
- const osVersionArray = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);
64
- osVersion = osVersionArray[1] + '.' + osVersionArray[2] + '.' + (parseInt(osVersionArray[3]) | 0);
65
- break;
66
- }
67
- }
68
- return {
69
- os,
70
- osVersion,
71
- };
72
- };
73
-
74
- function getBrowser() {
75
- const ua = navigator.userAgent; let tem;
76
- let M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
77
- if (/trident/i.test(M[1])) {
78
- tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
79
- return { name: 'ie', version: (tem[1] || '') };
80
- }
81
- if (M[1] === 'Chrome') {
82
- tem = ua.match(/\bOPR|Edge\/(\d+)/);
83
-
84
- if (tem != null) {
85
- let version = tem[1];
86
- if (!version) {
87
- const splits = ua.split(tem[0] + '/');
88
- if (splits.length > 1) {
89
- version = splits[1];
90
- }
91
- }
92
-
93
- return { name: 'opera', version };
94
- }
95
- }
96
- M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
97
- if ((tem = ua.match(/version\/(\d+)/i)) != null) { M.splice(1, 1, tem[1]); }
98
- return {
99
- name: M[0].toLowerCase(),
100
- version: M[1],
101
- };
102
- }
103
-
104
- let keepAliveServiceWorkerTimeoutId = null;
105
-
106
- export const sleepAsync = (milliseconds) => {
107
- return new Promise(resolve => timer.setTimeout(resolve, milliseconds));
108
- };
109
-
110
- const keepAlive = () => {
111
- try {
112
- const operatingSystem = getOperatingSystem(navigator);
113
- const minSleepSeconds = operatingSystem.os === 'Android' ? 240 : 150;
114
- const promise = fetch(`/OidcKeepAliveServiceWorker.json?minSleepSeconds=${minSleepSeconds}`);
115
- promise.catch(error => { console.log(error); });
116
- sleepAsync(minSleepSeconds * 1000).then(keepAlive);
117
- } catch (error) { console.log(error); }
118
- };
119
-
120
- const isServiceWorkerProxyActiveAsync = () => {
121
- return fetch('/OidcKeepAliveServiceWorker.json', {
122
- headers: {
123
- 'oidc-vanilla': 'true',
124
- },
125
- }).then((response) => {
126
- return response.statusText === 'oidc-service-worker';
127
- }).catch(error => { console.log(error); });
128
- };
129
-
130
- export const excludeOs = (operatingSystem) => {
131
- if (operatingSystem.os === 'iOS' && operatingSystem.osVersion.startsWith('12')) {
132
- return true;
133
- }
134
- if (operatingSystem.os === 'Mac OS X' && operatingSystem.osVersion.startsWith('10_15_6')) {
135
- return true;
136
- }
137
- return false;
138
- };
139
-
140
- const sendMessageAsync = (registration) => (data) => {
141
- return new Promise(function(resolve, reject) {
142
- const messageChannel = new MessageChannel();
143
- messageChannel.port1.onmessage = function (event) {
144
- if (event.data && event.data.error) {
145
- reject(event.data.error);
146
- } else {
147
- resolve(event.data);
148
- }
149
- };
150
- registration.active.postMessage(data, [messageChannel.port2]);
151
- });
152
- };
153
-
154
- export const initWorkerAsync = async(serviceWorkerRelativeUrl, configurationName) => {
155
- if (typeof window === 'undefined' || typeof navigator === 'undefined' || !navigator.serviceWorker || !serviceWorkerRelativeUrl) {
156
- return null;
157
- }
158
- const { name, version } = getBrowser();
159
- if (name === 'chrome' && parseInt(version) < 90) {
160
- return null;
161
- }
162
- if (name === 'opera') {
163
- if (!version) {
164
- return null;
165
- }
166
- if (parseInt(version.split('.')[0]) < 80) {
167
- return null;
168
- }
169
- }
170
- if (name === 'ie') {
171
- return null;
172
- }
173
-
174
- const operatingSystem = getOperatingSystem(navigator);
175
- if (excludeOs(operatingSystem)) {
176
- return null;
177
- }
178
-
179
- const registration = await navigator.serviceWorker.register(serviceWorkerRelativeUrl);
180
-
181
- try {
182
- await navigator.serviceWorker.ready;
183
- } catch (err) {
184
- return null;
185
- }
186
-
187
- const unregisterAsync = async () => {
188
- return await registration.unregister();
189
- };
190
-
191
- registration.addEventListener('updatefound', () => {
192
- const newWorker = registration.installing;
193
- newWorker.addEventListener('statechange', () => {
194
- switch (newWorker.state) {
195
- case 'installed':
196
- if (navigator.serviceWorker.controller) {
197
- registration.unregister().then(() => {
198
- window.location.reload();
199
- });
200
- }
201
- break;
202
- }
203
- });
204
- });
205
-
206
- const clearAsync = async (status) => {
207
- return sendMessageAsync(registration)({ type: 'clear', data: { status }, configurationName });
208
- };
209
- const initAsync = async (oidcServerConfiguration, where, oidcConfiguration:OidcConfiguration) => {
210
- const result = await sendMessageAsync(registration)({
211
- type: 'init',
212
- data: {
213
- oidcServerConfiguration,
214
- where,
215
- oidcConfiguration: {
216
- token_renew_mode: oidcConfiguration.token_renew_mode,
217
- service_worker_convert_all_requests_to_cors: oidcConfiguration.service_worker_convert_all_requests_to_cors,
218
- },
219
- },
220
- configurationName,
221
- });
222
- // @ts-ignore
223
- return { tokens: parseOriginalTokens(result.tokens, null, oidcConfiguration.token_renew_mode), status: result.status };
224
- };
225
-
226
- const startKeepAliveServiceWorker = () => {
227
- if (keepAliveServiceWorkerTimeoutId == null) {
228
- keepAliveServiceWorkerTimeoutId = 'not_null';
229
- keepAlive();
230
- }
231
- };
232
-
233
- const setSessionStateAsync = (sessionState:string) => {
234
- return sendMessageAsync(registration)({ type: 'setSessionState', data: { sessionState }, configurationName });
235
- };
236
-
237
- const getSessionStateAsync = async () => {
238
- const result = await sendMessageAsync(registration)({ type: 'getSessionState', data: null, configurationName });
239
- // @ts-ignore
240
- return result.sessionState;
241
- };
242
-
243
- const setNonceAsync = (nonce) => {
244
- sessionStorage['oidc.nonce'] = nonce.nonce;
245
- return sendMessageAsync(registration)({ type: 'setNonce', data: { nonce }, configurationName });
246
- };
247
- const getNonceAsync = async () => {
248
- // @ts-ignore
249
- const result = await sendMessageAsync(registration)({ type: 'getNonce', data: null, configurationName });
250
- // @ts-ignore
251
- let nonce = result.nonce;
252
- if (!nonce) {
253
- nonce = sessionStorage['oidc.nonce'];
254
- console.warn('nonce not found in service worker, using sessionStorage');
255
- }
256
- return { nonce };
257
- };
258
-
259
- let getLoginParamsCache = null;
260
- const setLoginParams = (configurationName:string, data) => {
261
- getLoginParamsCache = data;
262
- localStorage[`oidc.login.${configurationName}`] = JSON.stringify(data);
263
- };
264
- const getLoginParams = (configurationName) => {
265
- const dataString = localStorage[`oidc.login.${configurationName}`];
266
- if (!getLoginParamsCache) {
267
- getLoginParamsCache = JSON.parse(dataString);
268
- }
269
- return getLoginParamsCache;
270
- };
271
-
272
- const getStateAsync = async () => {
273
- const result = await sendMessageAsync(registration)({ type: 'getState', data: null, configurationName });
274
- // @ts-ignore
275
- let state = result.state;
276
- if (!state) {
277
- state = sessionStorage[`oidc.state.${configurationName}`];
278
- console.warn('state not found in service worker, using sessionStorage');
279
- }
280
- return state;
281
- };
282
-
283
- const setStateAsync = async (state:string) => {
284
- sessionStorage[`oidc.state.${configurationName}`] = state;
285
- return sendMessageAsync(registration)({ type: 'setState', data: { state }, configurationName });
286
- };
287
-
288
- const getCodeVerifierAsync = async () => {
289
- const result = await sendMessageAsync(registration)({ type: 'getCodeVerifier', data: null, configurationName });
290
- // @ts-ignore
291
- let codeVerifier = result.codeVerifier;
292
- if (!codeVerifier) {
293
- codeVerifier = sessionStorage[`oidc.code_verifier.${configurationName}`];
294
- console.warn('codeVerifier not found in service worker, using sessionStorage');
295
- }
296
- return codeVerifier;
297
- };
298
-
299
- const setCodeVerifierAsync = async (codeVerifier:string) => {
300
- sessionStorage[`oidc.code_verifier.${configurationName}`] = codeVerifier;
301
- return sendMessageAsync(registration)({ type: 'setCodeVerifier', data: { codeVerifier }, configurationName });
302
- };
303
-
304
- return {
305
- clearAsync,
306
- initAsync,
307
- startKeepAliveServiceWorker,
308
- isServiceWorkerProxyActiveAsync,
309
- setSessionStateAsync,
310
- getSessionStateAsync,
311
- setNonceAsync,
312
- getNonceAsync,
313
- unregisterAsync,
314
- setLoginParams,
315
- getLoginParams,
316
- getStateAsync,
317
- setStateAsync,
318
- getCodeVerifierAsync,
319
- setCodeVerifierAsync,
320
- };
321
- };
@@ -1,174 +0,0 @@
1
- import { generateRandom } from './crypto.js';
2
- import { eventNames } from './events.js';
3
- import { initSession } from './initSession.js';
4
- import { initWorkerAsync } from './initWorker.js';
5
- import { isTokensOidcValid } from './parseTokens.js';
6
- import { performAuthorizationRequestAsync, performFirstTokenRequestAsync } from './requests.js';
7
- import { getParseQueryStringFromLocation } from './route-utils.js';
8
- import { OidcConfiguration, StringMap } from './types.js';
9
-
10
- // eslint-disable-next-line @typescript-eslint/ban-types
11
- export const defaultLoginAsync = (window, configurationName, configuration:OidcConfiguration, publishEvent :(string, any)=>void, initAsync:Function) => (callbackPath:string = undefined, extras:StringMap = null, isSilentSignin = false, scope:string = undefined) => {
12
- const originExtras = extras;
13
- extras = { ...extras };
14
- const loginLocalAsync = async () => {
15
- const location = window.location;
16
- const url = callbackPath || location.pathname + (location.search || '') + (location.hash || '');
17
-
18
- if (!('state' in extras)) {
19
- extras.state = generateRandom(16);
20
- }
21
-
22
- publishEvent(eventNames.loginAsync_begin, {});
23
- if (extras) {
24
- for (const key of Object.keys(extras)) {
25
- if (key.endsWith(':token_request')) {
26
- delete extras[key];
27
- }
28
- }
29
- }
30
- try {
31
- const redirectUri = isSilentSignin ? configuration.silent_redirect_uri : configuration.redirect_uri;
32
- if (!scope) {
33
- scope = configuration.scope;
34
- }
35
-
36
- const extraFinal = !configuration.extras ? extras : { ...configuration.extras, ...extras };
37
- if (!extraFinal.nonce) {
38
- extraFinal.nonce = generateRandom(12);
39
- }
40
- const nonce = { nonce: extraFinal.nonce };
41
- const serviceWorker = await initWorkerAsync(configuration.service_worker_relative_url, configurationName);
42
- const oidcServerConfiguration = await initAsync(configuration.authority, configuration.authority_configuration);
43
- let storage;
44
- if (serviceWorker) {
45
- serviceWorker.setLoginParams(configurationName, { callbackPath: url, extras: originExtras });
46
- serviceWorker.startKeepAliveServiceWorker();
47
- await serviceWorker.initAsync(oidcServerConfiguration, 'loginAsync', configuration);
48
- await serviceWorker.setNonceAsync(nonce);
49
- storage = serviceWorker;
50
- } else {
51
- const session = initSession(configurationName, configuration.storage ?? sessionStorage);
52
- session.setLoginParams(configurationName, { callbackPath: url, extras: originExtras });
53
- await session.setNonceAsync(nonce);
54
- storage = session;
55
- }
56
-
57
- // @ts-ignore
58
- const extraInternal = {
59
- client_id: configuration.client_id,
60
- redirect_uri: redirectUri,
61
- scope,
62
- response_type: 'code',
63
- ...extraFinal,
64
- };
65
- await performAuthorizationRequestAsync(storage)(oidcServerConfiguration.authorizationEndpoint, extraInternal);
66
- } catch (exception) {
67
- publishEvent(eventNames.loginAsync_error, exception);
68
- throw exception;
69
- }
70
- };
71
- return loginLocalAsync();
72
- };
73
-
74
- export const loginCallbackAsync = (oidc) => async (isSilentSignin = false) => {
75
- try {
76
- oidc.publishEvent(eventNames.loginCallbackAsync_begin, {});
77
- const configuration = oidc.configuration;
78
- const clientId = configuration.client_id;
79
- const redirectUri = isSilentSignin ? configuration.silent_redirect_uri : configuration.redirect_uri;
80
- const authority = configuration.authority;
81
- const tokenRequestTimeout = configuration.token_request_timeout;
82
- const oidcServerConfiguration = await oidc.initAsync(authority, configuration.authority_configuration);
83
- const queryParams = getParseQueryStringFromLocation(window.location.href);
84
- const sessionState = queryParams.session_state;
85
- const serviceWorker = await initWorkerAsync(configuration.service_worker_relative_url, oidc.configurationName);
86
- let storage;
87
- let nonceData;
88
- let getLoginParams;
89
- let state;
90
- if (serviceWorker) {
91
- serviceWorker.startKeepAliveServiceWorker();
92
- await serviceWorker.initAsync(oidcServerConfiguration, 'loginCallbackAsync', configuration);
93
- await serviceWorker.setSessionStateAsync(sessionState);
94
- nonceData = await serviceWorker.getNonceAsync();
95
- getLoginParams = serviceWorker.getLoginParams(oidc.configurationName);
96
- state = await serviceWorker.getStateAsync();
97
- storage = serviceWorker;
98
- } else {
99
- const session = initSession(oidc.configurationName, configuration.storage ?? sessionStorage);
100
- await session.setSessionStateAsync(sessionState);
101
- nonceData = await session.getNonceAsync();
102
- getLoginParams = session.getLoginParams(oidc.configurationName);
103
- state = await session.getStateAsync();
104
- storage = session;
105
- }
106
-
107
- const params = getParseQueryStringFromLocation(window.location.toString());
108
-
109
- if (params.iss && params.iss !== oidcServerConfiguration.issuer) {
110
- throw new Error('issuer not valid');
111
- }
112
- if (params.state && params.state !== state) {
113
- throw new Error('state not valid');
114
- }
115
-
116
- const data = {
117
- code: params.code,
118
- grant_type: 'authorization_code',
119
- client_id: configuration.client_id,
120
- redirect_uri: redirectUri,
121
- };
122
-
123
- const extras = {};
124
- // @ts-ignore
125
- if (configuration.token_request_extras) {
126
- for (const [key, value] of Object.entries(configuration.token_request_extras)) {
127
- extras[key] = value;
128
- }
129
- }
130
- if (getLoginParams && getLoginParams.extras) {
131
- for (const [key, value] of Object.entries(getLoginParams.extras)) {
132
- if (key.endsWith(':token_request')) {
133
- extras[key.replace(':token_request', '')] = value;
134
- }
135
- }
136
- }
137
-
138
- const tokenResponse = await performFirstTokenRequestAsync(storage)(oidcServerConfiguration.tokenEndpoint, { ...data, ...extras }, oidc.configuration.token_renew_mode, tokenRequestTimeout);
139
-
140
- if (!tokenResponse.success) {
141
- throw new Error('Token request failed');
142
- }
143
-
144
- let loginParams;
145
- const formattedTokens = tokenResponse.data.tokens;
146
- if (serviceWorker) {
147
- await serviceWorker.initAsync(redirectUri, 'syncTokensAsync', configuration);
148
- loginParams = serviceWorker.getLoginParams(oidc.configurationName);
149
- } else {
150
- const session = initSession(oidc.configurationName, configuration.storage);
151
- loginParams = session.getLoginParams(oidc.configurationName);
152
- }
153
- // @ts-ignore
154
- if (tokenResponse.data.state !== extras.state) {
155
- throw new Error('state is not valid');
156
- }
157
- const { isValid, reason } = isTokensOidcValid(formattedTokens, nonceData.nonce, oidcServerConfiguration);
158
- if (!isValid) {
159
- throw new Error(`Tokens are not OpenID valid, reason: ${reason}`);
160
- }
161
-
162
- await oidc.startCheckSessionAsync(oidcServerConfiguration.checkSessionIframe, clientId, sessionState, isSilentSignin);
163
- oidc.publishEvent(eventNames.loginCallbackAsync_end, {});
164
- return {
165
- tokens: formattedTokens,
166
- state: 'request.state',
167
- callbackPath: loginParams.callbackPath,
168
- };
169
- } catch (exception) {
170
- console.error(exception);
171
- oidc.publishEvent(eventNames.loginCallbackAsync_error, exception);
172
- throw exception;
173
- }
174
- };
@@ -1,66 +0,0 @@
1
- import React from 'react'
2
- import '@testing-library/jest-dom'
3
- import { logoutAsync } from "./logout";
4
- import { describe, it, expect } from 'vitest';
5
- import { vi } from 'vitest';
6
-
7
-
8
- describe('Logout test suite', () => {
9
-
10
- it.each([
11
- {logout_tokens_to_invalidate:['access_token', 'refresh_token'], expectedResults: ["token=abcd&token_type_hint=access_token&client_id=interactive.public.short","token=abdc&token_type_hint=refresh_token&client_id=interactive.public.short"]},
12
- {logout_tokens_to_invalidate:['refresh_token'], expectedResults: ["token=abdc&token_type_hint=refresh_token&client_id=interactive.public.short"]},
13
- {logout_tokens_to_invalidate:['access_token'], expectedResults: ["token=abcd&token_type_hint=access_token&client_id=interactive.public.short"]},
14
- {logout_tokens_to_invalidate:[], expectedResults: []},
15
- ])('Logout should revocate tokens $logout_tokens_to_invalidate', async ({ logout_tokens_to_invalidate, expectedResults}) => {
16
-
17
- const configuration = {
18
- client_id: 'interactive.public.short',
19
- redirect_uri: 'http://localhost:4200/authentication/callback',
20
- scope: 'openid profile email api offline_access',
21
- authority: 'http://api',
22
- refresh_time_before_tokens_expiration_in_second: 70,
23
- logout_tokens_to_invalidate
24
- };
25
-
26
- const fetch = (url, data) => {
27
- if(url === "http://api/connect/revocation") {
28
- return Promise.resolve({status: 200});
29
- }
30
- return Promise.resolve({
31
- status : 200,
32
- });
33
- };
34
-
35
- const mockFetchFn = vi.fn().mockImplementation(fetch)
36
-
37
- const oidc = {
38
- configuration,
39
- tokens : {idToken: "abcd", accessToken: "abcd", refreshToken: "abdc" },
40
- initAsync: () => Promise.resolve({
41
- revocationEndpoint: "http://api/connect/revocation",
42
- endSessionEndpoint: "http://api/connect/endsession",
43
- }),
44
- destroyAsync: () => Promise.resolve(),
45
- logoutSameTabAsync: () => Promise.resolve(),
46
- };
47
-
48
- const oidcDatabase = {default: () => oidc};
49
-
50
- const window = {
51
- location: {
52
- href: "",
53
- origin: "http://localhost:4200"
54
- }
55
- }
56
-
57
- await logoutAsync(oidc, oidcDatabase, mockFetchFn, window, console)("/logged_out");
58
-
59
- // @ts-ignore
60
-
61
- const results = mockFetchFn.mock.calls.map((call, index) => call[1].body)
62
-
63
- expect(results).toEqual(expectedResults);
64
- expect(window.location.href).toBe("http://api/connect/endsession?id_token_hint=abcd&post_logout_redirect_uri=http%3A%2F%2Flocalhost%3A4200%2Flogged_out");
65
- });
66
- });
@@ -1,64 +0,0 @@
1
- import React from 'react'
2
- import '@testing-library/jest-dom'
3
- import { logoutAsync } from "./logout";
4
- import { describe, it, expect } from 'vitest';
5
- import { vi } from 'vitest';
6
-
7
- describe('Logout test suite', () => {
8
-
9
- it.each([
10
- {logout_tokens_to_invalidate:['access_token', 'refresh_token'], expectedResults: ["token=abcd&token_type_hint=access_token&client_id=interactive.public.short","token=abdc&token_type_hint=refresh_token&client_id=interactive.public.short"]},
11
- {logout_tokens_to_invalidate:['refresh_token'], expectedResults: ["token=abdc&token_type_hint=refresh_token&client_id=interactive.public.short"]},
12
- {logout_tokens_to_invalidate:['access_token'], expectedResults: ["token=abcd&token_type_hint=access_token&client_id=interactive.public.short"]},
13
- {logout_tokens_to_invalidate:[], expectedResults: []},
14
- ])('Logout should revocate tokens $logout_tokens_to_invalidate', async ({ logout_tokens_to_invalidate, expectedResults}) => {
15
-
16
- const configuration = {
17
- client_id: 'interactive.public.short',
18
- redirect_uri: 'http://localhost:4200/authentication/callback',
19
- scope: 'openid profile email api offline_access',
20
- authority: 'http://api',
21
- refresh_time_before_tokens_expiration_in_second: 70,
22
- logout_tokens_to_invalidate
23
- };
24
-
25
- const fetch = (url, data) => {
26
- if(url === "http://api/connect/revocation") {
27
- return Promise.resolve({status: 200});
28
- }
29
- return Promise.resolve({
30
- status : 200,
31
- });
32
- };
33
-
34
- const mockFetchFn = vi.fn().mockImplementation(fetch);
35
-
36
- const oidc = {
37
- configuration,
38
- tokens : {idToken: "abcd", accessToken: "abcd", refreshToken: "abdc" },
39
- initAsync: () => Promise.resolve({
40
- revocationEndpoint: "http://api/connect/revocation",
41
- endSessionEndpoint: "http://api/connect/endsession",
42
- }),
43
- destroyAsync: () => Promise.resolve(),
44
- logoutSameTabAsync: () => Promise.resolve(),
45
- };
46
-
47
- const oidcDatabase = { default: () => oidc };
48
-
49
- const window = {
50
- location: {
51
- href: "",
52
- origin: "http://localhost:4200"
53
- }
54
- };
55
-
56
- await logoutAsync(oidc, oidcDatabase, mockFetchFn, window, console)("/logged_out");
57
-
58
- // @ts-ignore
59
- const results = mockFetchFn.mock.calls.map((call, index) => call[1].body);
60
-
61
- expect(results).toEqual(expectedResults);
62
- expect(window.location.href).toBe("http://api/connect/endsession?id_token_hint=abcd&post_logout_redirect_uri=http%3A%2F%2Flocalhost%3A4200%2Flogged_out");
63
- });
64
- });