@civic/auth 0.2.2-beta.5 → 0.2.2-beta.7

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 (608) hide show
  1. package/CHANGELOG.md +4 -3
  2. package/README.md +1 -0
  3. package/dist/cjs/index.d.ts +1 -0
  4. package/dist/cjs/index.d.ts.map +1 -1
  5. package/dist/cjs/index.js +3 -1
  6. package/dist/cjs/index.js.map +1 -1
  7. package/dist/cjs/lib/postMessage.d.ts.map +1 -1
  8. package/dist/cjs/lib/postMessage.js +0 -1
  9. package/dist/cjs/lib/postMessage.js.map +1 -1
  10. package/dist/cjs/nextjs/middleware.d.ts.map +1 -1
  11. package/dist/cjs/nextjs/middleware.js +0 -5
  12. package/dist/cjs/nextjs/middleware.js.map +1 -1
  13. package/dist/cjs/nextjs/providers/NextAuthProvider.js +4 -4
  14. package/dist/cjs/nextjs/providers/NextAuthProvider.js.map +1 -1
  15. package/dist/cjs/nextjs/routeHandler.d.ts.map +1 -1
  16. package/dist/cjs/nextjs/routeHandler.js +7 -16
  17. package/dist/cjs/nextjs/routeHandler.js.map +1 -1
  18. package/dist/cjs/reactjs/components/ButtonContentOrLoader.d.ts +8 -0
  19. package/dist/cjs/reactjs/components/ButtonContentOrLoader.d.ts.map +1 -0
  20. package/dist/cjs/reactjs/components/ButtonContentOrLoader.js +37 -0
  21. package/dist/cjs/reactjs/components/ButtonContentOrLoader.js.map +1 -0
  22. package/dist/cjs/reactjs/components/LoadingSpinner.d.ts +7 -0
  23. package/dist/cjs/reactjs/components/LoadingSpinner.d.ts.map +1 -0
  24. package/dist/cjs/reactjs/components/LoadingSpinner.js +33 -0
  25. package/dist/cjs/reactjs/components/LoadingSpinner.js.map +1 -0
  26. package/dist/cjs/reactjs/components/SignInButton.d.ts.map +1 -1
  27. package/dist/cjs/reactjs/components/SignInButton.js +5 -2
  28. package/dist/cjs/reactjs/components/SignInButton.js.map +1 -1
  29. package/dist/cjs/reactjs/components/SignOutButton.d.ts.map +1 -1
  30. package/dist/cjs/reactjs/components/SignOutButton.js +4 -3
  31. package/dist/cjs/reactjs/components/SignOutButton.js.map +1 -1
  32. package/dist/cjs/reactjs/components/UserButton.d.ts.map +1 -1
  33. package/dist/cjs/reactjs/components/UserButton.js +36 -31
  34. package/dist/cjs/reactjs/components/UserButton.js.map +1 -1
  35. package/dist/cjs/reactjs/components/utils.d.ts +3 -0
  36. package/dist/cjs/reactjs/components/utils.d.ts.map +1 -0
  37. package/dist/cjs/reactjs/components/utils.js +8 -0
  38. package/dist/cjs/reactjs/components/utils.js.map +1 -0
  39. package/dist/cjs/reactjs/providers/AuthProvider.js +3 -3
  40. package/dist/cjs/reactjs/providers/AuthProvider.js.map +1 -1
  41. package/dist/cjs/reactjs/providers/CivicAuthProvider.js +2 -2
  42. package/dist/cjs/reactjs/providers/CivicAuthProvider.js.map +1 -1
  43. package/dist/cjs/reactjs/providers/ClientTokenExchangeSessionProvider.js +1 -1
  44. package/dist/cjs/reactjs/providers/ClientTokenExchangeSessionProvider.js.map +1 -1
  45. package/dist/cjs/services/AuthenticationService.d.ts.map +1 -1
  46. package/dist/cjs/services/AuthenticationService.js +1 -2
  47. package/dist/cjs/services/AuthenticationService.js.map +1 -1
  48. package/dist/cjs/shared/components/CivicAuthIframeContainer.d.ts.map +1 -1
  49. package/dist/cjs/shared/components/CivicAuthIframeContainer.js +7 -3
  50. package/dist/cjs/shared/components/CivicAuthIframeContainer.js.map +1 -1
  51. package/dist/cjs/shared/hooks/useSignIn.d.ts +2 -2
  52. package/dist/cjs/shared/hooks/useSignIn.d.ts.map +1 -1
  53. package/dist/cjs/shared/hooks/useSignIn.js +37 -15
  54. package/dist/cjs/shared/hooks/useSignIn.js.map +1 -1
  55. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  56. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.js +0 -1
  57. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  58. package/dist/cjs/shared/lib/util.d.ts.map +1 -1
  59. package/dist/cjs/shared/lib/util.js +0 -1
  60. package/dist/cjs/shared/lib/util.js.map +1 -1
  61. package/dist/cjs/shared/providers/AuthContext.d.ts +2 -2
  62. package/dist/cjs/shared/providers/AuthContext.d.ts.map +1 -1
  63. package/dist/cjs/shared/providers/AuthContext.js.map +1 -1
  64. package/dist/cjs/shared/providers/IframeProvider.d.ts +2 -0
  65. package/dist/cjs/shared/providers/IframeProvider.d.ts.map +1 -1
  66. package/dist/cjs/shared/providers/IframeProvider.js +5 -0
  67. package/dist/cjs/shared/providers/IframeProvider.js.map +1 -1
  68. package/dist/cjs/shared/providers/UserProvider.d.ts +3 -3
  69. package/dist/cjs/shared/providers/UserProvider.d.ts.map +1 -1
  70. package/dist/cjs/shared/providers/UserProvider.js +5 -2
  71. package/dist/cjs/shared/providers/UserProvider.js.map +1 -1
  72. package/dist/cjs/shared/version.d.ts +1 -1
  73. package/dist/cjs/shared/version.js +1 -1
  74. package/dist/cjs/shared/version.js.map +1 -1
  75. package/dist/cjs/types.d.ts +7 -0
  76. package/dist/cjs/types.d.ts.map +1 -1
  77. package/dist/cjs/types.js +9 -1
  78. package/dist/cjs/types.js.map +1 -1
  79. package/dist/esm/index.d.ts +1 -0
  80. package/dist/esm/index.d.ts.map +1 -1
  81. package/dist/esm/index.js +1 -0
  82. package/dist/esm/index.js.map +1 -1
  83. package/dist/esm/lib/postMessage.d.ts.map +1 -1
  84. package/dist/esm/lib/postMessage.js +0 -1
  85. package/dist/esm/lib/postMessage.js.map +1 -1
  86. package/dist/esm/nextjs/middleware.d.ts.map +1 -1
  87. package/dist/esm/nextjs/middleware.js +0 -5
  88. package/dist/esm/nextjs/middleware.js.map +1 -1
  89. package/dist/esm/nextjs/providers/NextAuthProvider.js +4 -4
  90. package/dist/esm/nextjs/providers/NextAuthProvider.js.map +1 -1
  91. package/dist/esm/nextjs/routeHandler.d.ts.map +1 -1
  92. package/dist/esm/nextjs/routeHandler.js +7 -16
  93. package/dist/esm/nextjs/routeHandler.js.map +1 -1
  94. package/dist/esm/reactjs/components/ButtonContentOrLoader.d.ts +8 -0
  95. package/dist/esm/reactjs/components/ButtonContentOrLoader.d.ts.map +1 -0
  96. package/dist/esm/reactjs/components/ButtonContentOrLoader.js +30 -0
  97. package/dist/esm/reactjs/components/ButtonContentOrLoader.js.map +1 -0
  98. package/dist/esm/reactjs/components/SignInButton.d.ts.map +1 -1
  99. package/dist/esm/reactjs/components/SignInButton.js +5 -2
  100. package/dist/esm/reactjs/components/SignInButton.js.map +1 -1
  101. package/dist/esm/reactjs/components/SignOutButton.d.ts.map +1 -1
  102. package/dist/esm/reactjs/components/SignOutButton.js +4 -3
  103. package/dist/esm/reactjs/components/SignOutButton.js.map +1 -1
  104. package/dist/esm/reactjs/components/UserButton.d.ts.map +1 -1
  105. package/dist/esm/reactjs/components/UserButton.js +36 -31
  106. package/dist/esm/reactjs/components/UserButton.js.map +1 -1
  107. package/dist/esm/reactjs/components/utils.d.ts +3 -0
  108. package/dist/esm/reactjs/components/utils.d.ts.map +1 -0
  109. package/dist/esm/reactjs/components/utils.js +4 -0
  110. package/dist/esm/reactjs/components/utils.js.map +1 -0
  111. package/dist/esm/reactjs/providers/AuthProvider.js +3 -3
  112. package/dist/esm/reactjs/providers/AuthProvider.js.map +1 -1
  113. package/dist/esm/reactjs/providers/CivicAuthProvider.js +2 -2
  114. package/dist/esm/reactjs/providers/CivicAuthProvider.js.map +1 -1
  115. package/dist/esm/reactjs/providers/ClientTokenExchangeSessionProvider.js +1 -1
  116. package/dist/esm/reactjs/providers/ClientTokenExchangeSessionProvider.js.map +1 -1
  117. package/dist/esm/services/AuthenticationService.d.ts.map +1 -1
  118. package/dist/esm/services/AuthenticationService.js +1 -2
  119. package/dist/esm/services/AuthenticationService.js.map +1 -1
  120. package/dist/esm/shared/components/CivicAuthIframeContainer.d.ts.map +1 -1
  121. package/dist/esm/shared/components/CivicAuthIframeContainer.js +7 -3
  122. package/dist/esm/shared/components/CivicAuthIframeContainer.js.map +1 -1
  123. package/dist/esm/shared/hooks/useSignIn.d.ts +2 -2
  124. package/dist/esm/shared/hooks/useSignIn.d.ts.map +1 -1
  125. package/dist/esm/shared/hooks/useSignIn.js +32 -10
  126. package/dist/esm/shared/hooks/useSignIn.js.map +1 -1
  127. package/dist/esm/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  128. package/dist/esm/shared/lib/GenericAuthenticationRefresher.js +0 -1
  129. package/dist/esm/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  130. package/dist/esm/shared/lib/util.d.ts.map +1 -1
  131. package/dist/esm/shared/lib/util.js +0 -1
  132. package/dist/esm/shared/lib/util.js.map +1 -1
  133. package/dist/esm/shared/providers/AuthContext.d.ts +2 -2
  134. package/dist/esm/shared/providers/AuthContext.d.ts.map +1 -1
  135. package/dist/esm/shared/providers/AuthContext.js.map +1 -1
  136. package/dist/esm/shared/providers/IframeProvider.d.ts +2 -0
  137. package/dist/esm/shared/providers/IframeProvider.d.ts.map +1 -1
  138. package/dist/esm/shared/providers/IframeProvider.js +5 -0
  139. package/dist/esm/shared/providers/IframeProvider.js.map +1 -1
  140. package/dist/esm/shared/providers/UserProvider.d.ts +3 -3
  141. package/dist/esm/shared/providers/UserProvider.d.ts.map +1 -1
  142. package/dist/esm/shared/providers/UserProvider.js +5 -2
  143. package/dist/esm/shared/providers/UserProvider.js.map +1 -1
  144. package/dist/esm/shared/version.d.ts +1 -1
  145. package/dist/esm/shared/version.js +1 -1
  146. package/dist/esm/shared/version.js.map +1 -1
  147. package/dist/esm/types.d.ts +7 -0
  148. package/dist/esm/types.d.ts.map +1 -1
  149. package/dist/esm/types.js +8 -0
  150. package/dist/esm/types.js.map +1 -1
  151. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  152. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  153. package/package.json +18 -19
  154. package/dist/generateVersion.d.ts +0 -2
  155. package/dist/generateVersion.d.ts.map +0 -1
  156. package/dist/generateVersion.js +0 -12
  157. package/dist/generateVersion.js.map +0 -1
  158. package/dist/package.json +0 -118
  159. package/dist/src/browser/storage.d.ts +0 -9
  160. package/dist/src/browser/storage.d.ts.map +0 -1
  161. package/dist/src/browser/storage.js +0 -17
  162. package/dist/src/browser/storage.js.map +0 -1
  163. package/dist/src/config.d.ts +0 -3
  164. package/dist/src/config.d.ts.map +0 -1
  165. package/dist/src/config.js +0 -5
  166. package/dist/src/config.js.map +0 -1
  167. package/dist/src/constants.d.ts +0 -8
  168. package/dist/src/constants.d.ts.map +0 -1
  169. package/dist/src/constants.js +0 -16
  170. package/dist/src/constants.js.map +0 -1
  171. package/dist/src/index.d.ts +0 -6
  172. package/dist/src/index.d.ts.map +0 -1
  173. package/dist/src/index.js +0 -4
  174. package/dist/src/index.js.map +0 -1
  175. package/dist/src/lib/cookies.d.ts +0 -7
  176. package/dist/src/lib/cookies.d.ts.map +0 -1
  177. package/dist/src/lib/cookies.js +0 -25
  178. package/dist/src/lib/cookies.js.map +0 -1
  179. package/dist/src/lib/jwt.d.ts +0 -3
  180. package/dist/src/lib/jwt.d.ts.map +0 -1
  181. package/dist/src/lib/jwt.js +0 -9
  182. package/dist/src/lib/jwt.js.map +0 -1
  183. package/dist/src/lib/logger.d.ts +0 -26
  184. package/dist/src/lib/logger.d.ts.map +0 -1
  185. package/dist/src/lib/logger.js +0 -55
  186. package/dist/src/lib/logger.js.map +0 -1
  187. package/dist/src/lib/oauth.d.ts +0 -19
  188. package/dist/src/lib/oauth.d.ts.map +0 -1
  189. package/dist/src/lib/oauth.js +0 -61
  190. package/dist/src/lib/oauth.js.map +0 -1
  191. package/dist/src/lib/obj.d.ts +0 -3
  192. package/dist/src/lib/obj.d.ts.map +0 -1
  193. package/dist/src/lib/obj.js +0 -18
  194. package/dist/src/lib/obj.js.map +0 -1
  195. package/dist/src/lib/postMessage.d.ts +0 -4
  196. package/dist/src/lib/postMessage.d.ts.map +0 -1
  197. package/dist/src/lib/postMessage.js +0 -15
  198. package/dist/src/lib/postMessage.js.map +0 -1
  199. package/dist/src/lib/windowUtil.d.ts +0 -4
  200. package/dist/src/lib/windowUtil.d.ts.map +0 -1
  201. package/dist/src/lib/windowUtil.js +0 -31
  202. package/dist/src/lib/windowUtil.js.map +0 -1
  203. package/dist/src/nextjs/GetUser.d.ts +0 -6
  204. package/dist/src/nextjs/GetUser.d.ts.map +0 -1
  205. package/dist/src/nextjs/GetUser.js +0 -7
  206. package/dist/src/nextjs/GetUser.js.map +0 -1
  207. package/dist/src/nextjs/config.d.ts +0 -181
  208. package/dist/src/nextjs/config.d.ts.map +0 -1
  209. package/dist/src/nextjs/config.js +0 -177
  210. package/dist/src/nextjs/config.js.map +0 -1
  211. package/dist/src/nextjs/cookies.d.ts +0 -30
  212. package/dist/src/nextjs/cookies.d.ts.map +0 -1
  213. package/dist/src/nextjs/cookies.js +0 -112
  214. package/dist/src/nextjs/cookies.js.map +0 -1
  215. package/dist/src/nextjs/hooks/index.d.ts +0 -2
  216. package/dist/src/nextjs/hooks/index.d.ts.map +0 -1
  217. package/dist/src/nextjs/hooks/index.js +0 -2
  218. package/dist/src/nextjs/hooks/index.js.map +0 -1
  219. package/dist/src/nextjs/hooks/usePrevious.d.ts +0 -2
  220. package/dist/src/nextjs/hooks/usePrevious.d.ts.map +0 -1
  221. package/dist/src/nextjs/hooks/usePrevious.js +0 -9
  222. package/dist/src/nextjs/hooks/usePrevious.js.map +0 -1
  223. package/dist/src/nextjs/hooks/useUserCookie.d.ts +0 -8
  224. package/dist/src/nextjs/hooks/useUserCookie.d.ts.map +0 -1
  225. package/dist/src/nextjs/hooks/useUserCookie.js +0 -88
  226. package/dist/src/nextjs/hooks/useUserCookie.js.map +0 -1
  227. package/dist/src/nextjs/index.d.ts +0 -7
  228. package/dist/src/nextjs/index.d.ts.map +0 -1
  229. package/dist/src/nextjs/index.js +0 -8
  230. package/dist/src/nextjs/index.js.map +0 -1
  231. package/dist/src/nextjs/middleware/index.d.ts +0 -2
  232. package/dist/src/nextjs/middleware/index.d.ts.map +0 -1
  233. package/dist/src/nextjs/middleware/index.js +0 -4
  234. package/dist/src/nextjs/middleware/index.js.map +0 -1
  235. package/dist/src/nextjs/middleware.d.ts +0 -59
  236. package/dist/src/nextjs/middleware.d.ts.map +0 -1
  237. package/dist/src/nextjs/middleware.js +0 -107
  238. package/dist/src/nextjs/middleware.js.map +0 -1
  239. package/dist/src/nextjs/providers/NextAuthProvider.d.ts +0 -13
  240. package/dist/src/nextjs/providers/NextAuthProvider.d.ts.map +0 -1
  241. package/dist/src/nextjs/providers/NextAuthProvider.js +0 -94
  242. package/dist/src/nextjs/providers/NextAuthProvider.js.map +0 -1
  243. package/dist/src/nextjs/routeHandler.d.ts +0 -19
  244. package/dist/src/nextjs/routeHandler.d.ts.map +0 -1
  245. package/dist/src/nextjs/routeHandler.js +0 -299
  246. package/dist/src/nextjs/routeHandler.js.map +0 -1
  247. package/dist/src/nextjs/utils.d.ts +0 -3
  248. package/dist/src/nextjs/utils.d.ts.map +0 -1
  249. package/dist/src/nextjs/utils.js +0 -5
  250. package/dist/src/nextjs/utils.js.map +0 -1
  251. package/dist/src/reactjs/components/SignInButton.d.ts +0 -8
  252. package/dist/src/reactjs/components/SignInButton.d.ts.map +0 -1
  253. package/dist/src/reactjs/components/SignInButton.js +0 -14
  254. package/dist/src/reactjs/components/SignInButton.js.map +0 -1
  255. package/dist/src/reactjs/components/SignOutButton.d.ts +0 -6
  256. package/dist/src/reactjs/components/SignOutButton.d.ts.map +0 -1
  257. package/dist/src/reactjs/components/SignOutButton.js +0 -14
  258. package/dist/src/reactjs/components/SignOutButton.js.map +0 -1
  259. package/dist/src/reactjs/components/UserButton.d.ts +0 -6
  260. package/dist/src/reactjs/components/UserButton.d.ts.map +0 -1
  261. package/dist/src/reactjs/components/UserButton.js +0 -118
  262. package/dist/src/reactjs/components/UserButton.js.map +0 -1
  263. package/dist/src/reactjs/components/index.d.ts +0 -6
  264. package/dist/src/reactjs/components/index.d.ts.map +0 -1
  265. package/dist/src/reactjs/components/index.js +0 -6
  266. package/dist/src/reactjs/components/index.js.map +0 -1
  267. package/dist/src/reactjs/hooks/index.d.ts +0 -6
  268. package/dist/src/reactjs/hooks/index.d.ts.map +0 -1
  269. package/dist/src/reactjs/hooks/index.js +0 -6
  270. package/dist/src/reactjs/hooks/index.js.map +0 -1
  271. package/dist/src/reactjs/hooks/useAuth.d.ts +0 -3
  272. package/dist/src/reactjs/hooks/useAuth.d.ts.map +0 -1
  273. package/dist/src/reactjs/hooks/useAuth.js +0 -12
  274. package/dist/src/reactjs/hooks/useAuth.js.map +0 -1
  275. package/dist/src/reactjs/hooks/useClientTokenExchangeSession.d.ts +0 -3
  276. package/dist/src/reactjs/hooks/useClientTokenExchangeSession.d.ts.map +0 -1
  277. package/dist/src/reactjs/hooks/useClientTokenExchangeSession.js +0 -13
  278. package/dist/src/reactjs/hooks/useClientTokenExchangeSession.js.map +0 -1
  279. package/dist/src/reactjs/hooks/useUser.d.ts +0 -4
  280. package/dist/src/reactjs/hooks/useUser.d.ts.map +0 -1
  281. package/dist/src/reactjs/hooks/useUser.js +0 -12
  282. package/dist/src/reactjs/hooks/useUser.js.map +0 -1
  283. package/dist/src/reactjs/index.d.ts +0 -6
  284. package/dist/src/reactjs/index.d.ts.map +0 -1
  285. package/dist/src/reactjs/index.js +0 -10
  286. package/dist/src/reactjs/index.js.map +0 -1
  287. package/dist/src/reactjs/providers/AuthProvider.d.ts +0 -11
  288. package/dist/src/reactjs/providers/AuthProvider.d.ts.map +0 -1
  289. package/dist/src/reactjs/providers/AuthProvider.js +0 -76
  290. package/dist/src/reactjs/providers/AuthProvider.js.map +0 -1
  291. package/dist/src/reactjs/providers/CivicAuthProvider.d.ts +0 -6
  292. package/dist/src/reactjs/providers/CivicAuthProvider.d.ts.map +0 -1
  293. package/dist/src/reactjs/providers/CivicAuthProvider.js +0 -32
  294. package/dist/src/reactjs/providers/CivicAuthProvider.js.map +0 -1
  295. package/dist/src/reactjs/providers/ClientTokenExchangeSessionProvider.d.ts +0 -17
  296. package/dist/src/reactjs/providers/ClientTokenExchangeSessionProvider.d.ts.map +0 -1
  297. package/dist/src/reactjs/providers/ClientTokenExchangeSessionProvider.js +0 -148
  298. package/dist/src/reactjs/providers/ClientTokenExchangeSessionProvider.js.map +0 -1
  299. package/dist/src/reactjs/providers/index.d.ts +0 -8
  300. package/dist/src/reactjs/providers/index.d.ts.map +0 -1
  301. package/dist/src/reactjs/providers/index.js +0 -7
  302. package/dist/src/reactjs/providers/index.js.map +0 -1
  303. package/dist/src/server/ServerAuthenticationResolver.d.ts +0 -20
  304. package/dist/src/server/ServerAuthenticationResolver.d.ts.map +0 -1
  305. package/dist/src/server/ServerAuthenticationResolver.js +0 -67
  306. package/dist/src/server/ServerAuthenticationResolver.js.map +0 -1
  307. package/dist/src/server/config.d.ts +0 -10
  308. package/dist/src/server/config.d.ts.map +0 -1
  309. package/dist/src/server/config.js +0 -2
  310. package/dist/src/server/config.js.map +0 -1
  311. package/dist/src/server/index.d.ts +0 -7
  312. package/dist/src/server/index.d.ts.map +0 -1
  313. package/dist/src/server/index.js +0 -7
  314. package/dist/src/server/index.js.map +0 -1
  315. package/dist/src/server/login.d.ts +0 -21
  316. package/dist/src/server/login.d.ts.map +0 -1
  317. package/dist/src/server/login.js +0 -56
  318. package/dist/src/server/login.js.map +0 -1
  319. package/dist/src/server/refresh.d.ts +0 -7
  320. package/dist/src/server/refresh.d.ts.map +0 -1
  321. package/dist/src/server/refresh.js +0 -13
  322. package/dist/src/server/refresh.js.map +0 -1
  323. package/dist/src/services/AuthenticationService.d.ts +0 -91
  324. package/dist/src/services/AuthenticationService.d.ts.map +0 -1
  325. package/dist/src/services/AuthenticationService.js +0 -322
  326. package/dist/src/services/AuthenticationService.js.map +0 -1
  327. package/dist/src/services/PKCE.d.ts +0 -20
  328. package/dist/src/services/PKCE.d.ts.map +0 -1
  329. package/dist/src/services/PKCE.js +0 -44
  330. package/dist/src/services/PKCE.js.map +0 -1
  331. package/dist/src/services/types.d.ts +0 -24
  332. package/dist/src/services/types.d.ts.map +0 -1
  333. package/dist/src/services/types.js +0 -7
  334. package/dist/src/services/types.js.map +0 -1
  335. package/dist/src/shared/components/BlockDisplay.d.ts +0 -7
  336. package/dist/src/shared/components/BlockDisplay.d.ts.map +0 -1
  337. package/dist/src/shared/components/BlockDisplay.js +0 -25
  338. package/dist/src/shared/components/BlockDisplay.js.map +0 -1
  339. package/dist/src/shared/components/CivicAuthIframe.d.ts +0 -9
  340. package/dist/src/shared/components/CivicAuthIframe.d.ts.map +0 -1
  341. package/dist/src/shared/components/CivicAuthIframe.js +0 -8
  342. package/dist/src/shared/components/CivicAuthIframe.js.map +0 -1
  343. package/dist/src/shared/components/CivicAuthIframeContainer.d.ts +0 -13
  344. package/dist/src/shared/components/CivicAuthIframeContainer.d.ts.map +0 -1
  345. package/dist/src/shared/components/CivicAuthIframeContainer.js +0 -138
  346. package/dist/src/shared/components/CivicAuthIframeContainer.js.map +0 -1
  347. package/dist/src/shared/components/CivicAuthLogoutIframeContainer.d.ts +0 -7
  348. package/dist/src/shared/components/CivicAuthLogoutIframeContainer.d.ts.map +0 -1
  349. package/dist/src/shared/components/CivicAuthLogoutIframeContainer.js +0 -22
  350. package/dist/src/shared/components/CivicAuthLogoutIframeContainer.js.map +0 -1
  351. package/dist/src/shared/components/CloseIcon.d.ts +0 -4
  352. package/dist/src/shared/components/CloseIcon.d.ts.map +0 -1
  353. package/dist/src/shared/components/CloseIcon.js +0 -6
  354. package/dist/src/shared/components/CloseIcon.js.map +0 -1
  355. package/dist/src/shared/components/IFrameAndLoading.d.ts +0 -8
  356. package/dist/src/shared/components/IFrameAndLoading.d.ts.map +0 -1
  357. package/dist/src/shared/components/IFrameAndLoading.js +0 -27
  358. package/dist/src/shared/components/IFrameAndLoading.js.map +0 -1
  359. package/dist/src/shared/components/LoadingIcon.d.ts +0 -4
  360. package/dist/src/shared/components/LoadingIcon.d.ts.map +0 -1
  361. package/dist/src/shared/components/LoadingIcon.js +0 -30
  362. package/dist/src/shared/components/LoadingIcon.js.map +0 -1
  363. package/dist/src/shared/hooks/index.d.ts +0 -11
  364. package/dist/src/shared/hooks/index.d.ts.map +0 -1
  365. package/dist/src/shared/hooks/index.js +0 -11
  366. package/dist/src/shared/hooks/index.js.map +0 -1
  367. package/dist/src/shared/hooks/useAuth.d.ts +0 -3
  368. package/dist/src/shared/hooks/useAuth.d.ts.map +0 -1
  369. package/dist/src/shared/hooks/useAuth.js +0 -12
  370. package/dist/src/shared/hooks/useAuth.js.map +0 -1
  371. package/dist/src/shared/hooks/useCivicAuthConfig.d.ts +0 -3
  372. package/dist/src/shared/hooks/useCivicAuthConfig.d.ts.map +0 -1
  373. package/dist/src/shared/hooks/useCivicAuthConfig.js +0 -10
  374. package/dist/src/shared/hooks/useCivicAuthConfig.js.map +0 -1
  375. package/dist/src/shared/hooks/useClientTokenExchangeSession.d.ts +0 -3
  376. package/dist/src/shared/hooks/useClientTokenExchangeSession.d.ts.map +0 -1
  377. package/dist/src/shared/hooks/useClientTokenExchangeSession.js +0 -13
  378. package/dist/src/shared/hooks/useClientTokenExchangeSession.js.map +0 -1
  379. package/dist/src/shared/hooks/useCurrentUrl.d.ts +0 -3
  380. package/dist/src/shared/hooks/useCurrentUrl.d.ts.map +0 -1
  381. package/dist/src/shared/hooks/useCurrentUrl.js +0 -24
  382. package/dist/src/shared/hooks/useCurrentUrl.js.map +0 -1
  383. package/dist/src/shared/hooks/useIframe.d.ts +0 -3
  384. package/dist/src/shared/hooks/useIframe.d.ts.map +0 -1
  385. package/dist/src/shared/hooks/useIframe.js +0 -13
  386. package/dist/src/shared/hooks/useIframe.js.map +0 -1
  387. package/dist/src/shared/hooks/useIsInIframe.d.ts +0 -3
  388. package/dist/src/shared/hooks/useIsInIframe.d.ts.map +0 -1
  389. package/dist/src/shared/hooks/useIsInIframe.js +0 -14
  390. package/dist/src/shared/hooks/useIsInIframe.js.map +0 -1
  391. package/dist/src/shared/hooks/useOAuthEndpoints.d.ts +0 -4
  392. package/dist/src/shared/hooks/useOAuthEndpoints.d.ts.map +0 -1
  393. package/dist/src/shared/hooks/useOAuthEndpoints.js +0 -14
  394. package/dist/src/shared/hooks/useOAuthEndpoints.js.map +0 -1
  395. package/dist/src/shared/hooks/useRefresh.d.ts +0 -4
  396. package/dist/src/shared/hooks/useRefresh.d.ts.map +0 -1
  397. package/dist/src/shared/hooks/useRefresh.js +0 -38
  398. package/dist/src/shared/hooks/useRefresh.js.map +0 -1
  399. package/dist/src/shared/hooks/useSession.d.ts +0 -3
  400. package/dist/src/shared/hooks/useSession.d.ts.map +0 -1
  401. package/dist/src/shared/hooks/useSession.js +0 -13
  402. package/dist/src/shared/hooks/useSession.js.map +0 -1
  403. package/dist/src/shared/hooks/useSignIn.d.ts +0 -15
  404. package/dist/src/shared/hooks/useSignIn.d.ts.map +0 -1
  405. package/dist/src/shared/hooks/useSignIn.js +0 -126
  406. package/dist/src/shared/hooks/useSignIn.js.map +0 -1
  407. package/dist/src/shared/hooks/useToken.d.ts +0 -3
  408. package/dist/src/shared/hooks/useToken.d.ts.map +0 -1
  409. package/dist/src/shared/hooks/useToken.js +0 -12
  410. package/dist/src/shared/hooks/useToken.js.map +0 -1
  411. package/dist/src/shared/hooks/useWindowFocused.d.ts +0 -5
  412. package/dist/src/shared/hooks/useWindowFocused.d.ts.map +0 -1
  413. package/dist/src/shared/hooks/useWindowFocused.js +0 -21
  414. package/dist/src/shared/hooks/useWindowFocused.js.map +0 -1
  415. package/dist/src/shared/index.d.ts +0 -5
  416. package/dist/src/shared/index.d.ts.map +0 -1
  417. package/dist/src/shared/index.js +0 -16
  418. package/dist/src/shared/index.js.map +0 -1
  419. package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts +0 -20
  420. package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +0 -1
  421. package/dist/src/shared/lib/GenericAuthenticationRefresher.js +0 -73
  422. package/dist/src/shared/lib/GenericAuthenticationRefresher.js.map +0 -1
  423. package/dist/src/shared/lib/UserSession.d.ts +0 -12
  424. package/dist/src/shared/lib/UserSession.d.ts.map +0 -1
  425. package/dist/src/shared/lib/UserSession.js +0 -20
  426. package/dist/src/shared/lib/UserSession.js.map +0 -1
  427. package/dist/src/shared/lib/session.d.ts +0 -3
  428. package/dist/src/shared/lib/session.d.ts.map +0 -1
  429. package/dist/src/shared/lib/session.js +0 -21
  430. package/dist/src/shared/lib/session.js.map +0 -1
  431. package/dist/src/shared/lib/storage.d.ts +0 -25
  432. package/dist/src/shared/lib/storage.d.ts.map +0 -1
  433. package/dist/src/shared/lib/storage.js +0 -17
  434. package/dist/src/shared/lib/storage.js.map +0 -1
  435. package/dist/src/shared/lib/types.d.ts +0 -36
  436. package/dist/src/shared/lib/types.d.ts.map +0 -1
  437. package/dist/src/shared/lib/types.js +0 -18
  438. package/dist/src/shared/lib/types.js.map +0 -1
  439. package/dist/src/shared/lib/util.d.ts +0 -34
  440. package/dist/src/shared/lib/util.d.ts.map +0 -1
  441. package/dist/src/shared/lib/util.js +0 -137
  442. package/dist/src/shared/lib/util.js.map +0 -1
  443. package/dist/src/shared/providers/AuthContext.d.ts +0 -11
  444. package/dist/src/shared/providers/AuthContext.d.ts.map +0 -1
  445. package/dist/src/shared/providers/AuthContext.js +0 -3
  446. package/dist/src/shared/providers/AuthContext.js.map +0 -1
  447. package/dist/src/shared/providers/AuthProvider.d.ts +0 -22
  448. package/dist/src/shared/providers/AuthProvider.d.ts.map +0 -1
  449. package/dist/src/shared/providers/AuthProvider.js +0 -72
  450. package/dist/src/shared/providers/AuthProvider.js.map +0 -1
  451. package/dist/src/shared/providers/CivicAuthConfigContext.d.ts +0 -18
  452. package/dist/src/shared/providers/CivicAuthConfigContext.d.ts.map +0 -1
  453. package/dist/src/shared/providers/CivicAuthConfigContext.js +0 -52
  454. package/dist/src/shared/providers/CivicAuthConfigContext.js.map +0 -1
  455. package/dist/src/shared/providers/CivicAuthProvider.d.ts +0 -6
  456. package/dist/src/shared/providers/CivicAuthProvider.d.ts.map +0 -1
  457. package/dist/src/shared/providers/CivicAuthProvider.js +0 -32
  458. package/dist/src/shared/providers/CivicAuthProvider.js.map +0 -1
  459. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.d.ts +0 -17
  460. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.d.ts.map +0 -1
  461. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.js +0 -131
  462. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.js.map +0 -1
  463. package/dist/src/shared/providers/IframeProvider.d.ts +0 -22
  464. package/dist/src/shared/providers/IframeProvider.d.ts.map +0 -1
  465. package/dist/src/shared/providers/IframeProvider.js +0 -35
  466. package/dist/src/shared/providers/IframeProvider.js.map +0 -1
  467. package/dist/src/shared/providers/SessionProvider.d.ts +0 -19
  468. package/dist/src/shared/providers/SessionProvider.d.ts.map +0 -1
  469. package/dist/src/shared/providers/SessionProvider.js +0 -23
  470. package/dist/src/shared/providers/SessionProvider.js.map +0 -1
  471. package/dist/src/shared/providers/TokenProvider.d.ts +0 -18
  472. package/dist/src/shared/providers/TokenProvider.d.ts.map +0 -1
  473. package/dist/src/shared/providers/TokenProvider.js +0 -42
  474. package/dist/src/shared/providers/TokenProvider.js.map +0 -1
  475. package/dist/src/shared/providers/UserProvider.d.ts +0 -24
  476. package/dist/src/shared/providers/UserProvider.d.ts.map +0 -1
  477. package/dist/src/shared/providers/UserProvider.js +0 -52
  478. package/dist/src/shared/providers/UserProvider.js.map +0 -1
  479. package/dist/src/shared/providers/types.d.ts +0 -15
  480. package/dist/src/shared/providers/types.d.ts.map +0 -1
  481. package/dist/src/shared/providers/types.js +0 -2
  482. package/dist/src/shared/providers/types.js.map +0 -1
  483. package/dist/src/shared/version.d.ts +0 -2
  484. package/dist/src/shared/version.d.ts.map +0 -1
  485. package/dist/src/shared/version.js +0 -3
  486. package/dist/src/shared/version.js.map +0 -1
  487. package/dist/src/types.d.ts +0 -148
  488. package/dist/src/types.d.ts.map +0 -1
  489. package/dist/src/types.js +0 -4
  490. package/dist/src/types.js.map +0 -1
  491. package/dist/src/utils.d.ts +0 -15
  492. package/dist/src/utils.d.ts.map +0 -1
  493. package/dist/src/utils.js +0 -43
  494. package/dist/src/utils.js.map +0 -1
  495. package/dist/src/version.d.ts +0 -2
  496. package/dist/src/version.d.ts.map +0 -1
  497. package/dist/src/version.js +0 -3
  498. package/dist/src/version.js.map +0 -1
  499. package/dist/test/integration/sdk.test.d.ts +0 -2
  500. package/dist/test/integration/sdk.test.d.ts.map +0 -1
  501. package/dist/test/integration/sdk.test.js +0 -237
  502. package/dist/test/integration/sdk.test.js.map +0 -1
  503. package/dist/test/support/fixtures.d.ts +0 -26
  504. package/dist/test/support/fixtures.d.ts.map +0 -1
  505. package/dist/test/support/fixtures.js +0 -55
  506. package/dist/test/support/fixtures.js.map +0 -1
  507. package/dist/test/support/tokens.json +0 -26
  508. package/dist/test/unit/lib/oauth.test.d.ts +0 -2
  509. package/dist/test/unit/lib/oauth.test.d.ts.map +0 -1
  510. package/dist/test/unit/lib/oauth.test.js +0 -56
  511. package/dist/test/unit/lib/oauth.test.js.map +0 -1
  512. package/dist/test/unit/lib/obj.test.d.ts +0 -2
  513. package/dist/test/unit/lib/obj.test.d.ts.map +0 -1
  514. package/dist/test/unit/lib/obj.test.js +0 -37
  515. package/dist/test/unit/lib/obj.test.js.map +0 -1
  516. package/dist/test/unit/logger.test.d.ts +0 -2
  517. package/dist/test/unit/logger.test.d.ts.map +0 -1
  518. package/dist/test/unit/logger.test.js +0 -141
  519. package/dist/test/unit/logger.test.js.map +0 -1
  520. package/dist/test/unit/nextjs/NextAuthProvider.test.d.ts +0 -2
  521. package/dist/test/unit/nextjs/NextAuthProvider.test.d.ts.map +0 -1
  522. package/dist/test/unit/nextjs/NextAuthProvider.test.js +0 -31
  523. package/dist/test/unit/nextjs/NextAuthProvider.test.js.map +0 -1
  524. package/dist/test/unit/nextjs/config.test.d.ts +0 -2
  525. package/dist/test/unit/nextjs/config.test.d.ts.map +0 -1
  526. package/dist/test/unit/nextjs/config.test.js +0 -203
  527. package/dist/test/unit/nextjs/config.test.js.map +0 -1
  528. package/dist/test/unit/nextjs/getUser.test.d.ts +0 -2
  529. package/dist/test/unit/nextjs/getUser.test.d.ts.map +0 -1
  530. package/dist/test/unit/nextjs/getUser.test.js +0 -22
  531. package/dist/test/unit/nextjs/getUser.test.js.map +0 -1
  532. package/dist/test/unit/nextjs/handler.test.d.ts +0 -2
  533. package/dist/test/unit/nextjs/handler.test.d.ts.map +0 -1
  534. package/dist/test/unit/nextjs/handler.test.js +0 -235
  535. package/dist/test/unit/nextjs/handler.test.js.map +0 -1
  536. package/dist/test/unit/nextjs/middleware.test.d.ts +0 -2
  537. package/dist/test/unit/nextjs/middleware.test.d.ts.map +0 -1
  538. package/dist/test/unit/nextjs/middleware.test.js +0 -113
  539. package/dist/test/unit/nextjs/middleware.test.js.map +0 -1
  540. package/dist/test/unit/nextjs/utils.test.d.ts +0 -2
  541. package/dist/test/unit/nextjs/utils.test.d.ts.map +0 -1
  542. package/dist/test/unit/nextjs/utils.test.js +0 -13
  543. package/dist/test/unit/nextjs/utils.test.js.map +0 -1
  544. package/dist/test/unit/publicApi/apiSnapshot.test.d.ts +0 -2
  545. package/dist/test/unit/publicApi/apiSnapshot.test.d.ts.map +0 -1
  546. package/dist/test/unit/publicApi/apiSnapshot.test.js +0 -10
  547. package/dist/test/unit/publicApi/apiSnapshot.test.js.map +0 -1
  548. package/dist/test/unit/react/components/SignInButton.test.d.ts +0 -2
  549. package/dist/test/unit/react/components/SignInButton.test.d.ts.map +0 -1
  550. package/dist/test/unit/react/components/SignInButton.test.js +0 -31
  551. package/dist/test/unit/react/components/SignInButton.test.js.map +0 -1
  552. package/dist/test/unit/react/components/SignOutButton.test.d.ts +0 -2
  553. package/dist/test/unit/react/components/SignOutButton.test.d.ts.map +0 -1
  554. package/dist/test/unit/react/components/SignOutButton.test.js +0 -30
  555. package/dist/test/unit/react/components/SignOutButton.test.js.map +0 -1
  556. package/dist/test/unit/server/login.test.d.ts +0 -2
  557. package/dist/test/unit/server/login.test.d.ts.map +0 -1
  558. package/dist/test/unit/server/login.test.js +0 -184
  559. package/dist/test/unit/server/login.test.js.map +0 -1
  560. package/dist/test/unit/server/refresh.test.d.ts +0 -2
  561. package/dist/test/unit/server/refresh.test.d.ts.map +0 -1
  562. package/dist/test/unit/server/refresh.test.js +0 -55
  563. package/dist/test/unit/server/refresh.test.js.map +0 -1
  564. package/dist/test/unit/server/session.test.d.ts +0 -2
  565. package/dist/test/unit/server/session.test.d.ts.map +0 -1
  566. package/dist/test/unit/server/session.test.js +0 -41
  567. package/dist/test/unit/server/session.test.js.map +0 -1
  568. package/dist/test/unit/services/AuthenticationService.test.d.ts +0 -2
  569. package/dist/test/unit/services/AuthenticationService.test.d.ts.map +0 -1
  570. package/dist/test/unit/services/AuthenticationService.test.js +0 -301
  571. package/dist/test/unit/services/AuthenticationService.test.js.map +0 -1
  572. package/dist/test/unit/services/ServerAuthenticationResolver.test.d.ts +0 -2
  573. package/dist/test/unit/services/ServerAuthenticationResolver.test.d.ts.map +0 -1
  574. package/dist/test/unit/services/ServerAuthenticationResolver.test.js +0 -75
  575. package/dist/test/unit/services/ServerAuthenticationResolver.test.js.map +0 -1
  576. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.d.ts +0 -2
  577. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.d.ts.map +0 -1
  578. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.js +0 -144
  579. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.js.map +0 -1
  580. package/dist/test/unit/shared/UserSession.test.d.ts +0 -2
  581. package/dist/test/unit/shared/UserSession.test.d.ts.map +0 -1
  582. package/dist/test/unit/shared/UserSession.test.js +0 -37
  583. package/dist/test/unit/shared/UserSession.test.js.map +0 -1
  584. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.d.ts +0 -2
  585. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.d.ts.map +0 -1
  586. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js +0 -122
  587. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js.map +0 -1
  588. package/dist/test/unit/shared/printVersion.test.d.ts +0 -2
  589. package/dist/test/unit/shared/printVersion.test.d.ts.map +0 -1
  590. package/dist/test/unit/shared/printVersion.test.js +0 -39
  591. package/dist/test/unit/shared/printVersion.test.js.map +0 -1
  592. package/dist/test/unit/shared/providers/ClientTokenExchangeSessionProvider.test.d.ts +0 -2
  593. package/dist/test/unit/shared/providers/ClientTokenExchangeSessionProvider.test.d.ts.map +0 -1
  594. package/dist/test/unit/shared/providers/ClientTokenExchangeSessionProvider.test.js +0 -108
  595. package/dist/test/unit/shared/providers/ClientTokenExchangeSessionProvider.test.js.map +0 -1
  596. package/dist/test/unit/shared/storage.test.d.ts +0 -2
  597. package/dist/test/unit/shared/storage.test.d.ts.map +0 -1
  598. package/dist/test/unit/shared/storage.test.js +0 -53
  599. package/dist/test/unit/shared/storage.test.js.map +0 -1
  600. package/dist/test/unit/utils.test.d.ts +0 -2
  601. package/dist/test/unit/utils.test.d.ts.map +0 -1
  602. package/dist/test/unit/utils.test.js +0 -40
  603. package/dist/test/unit/utils.test.js.map +0 -1
  604. package/dist/tsconfig.tsbuildinfo +0 -1
  605. package/dist/vitest.config.d.ts +0 -3
  606. package/dist/vitest.config.d.ts.map +0 -1
  607. package/dist/vitest.config.js +0 -44
  608. package/dist/vitest.config.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CivicAuthIframeContainer.d.ts","sourceRoot":"","sources":["../../../../src/shared/components/CivicAuthIframeContainer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,KAAK,6BAA6B,GAAG;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAWF,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,OAAO,GACR,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,qBAsDA;AAED,QAAA,MAAM,wBAAwB,kCAG3B,6BAA6B,sBAiH/B,CAAC;AAEF,YAAY,EAAE,6BAA6B,EAAE,CAAC;AAE9C,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"CivicAuthIframeContainer.d.ts","sourceRoot":"","sources":["../../../../src/shared/components/CivicAuthIframeContainer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,KAAK,6BAA6B,GAAG;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAWF,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,OAAO,GACR,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,qBA0DA;AAED,QAAA,MAAM,wBAAwB,kCAG3B,6BAA6B,sBAiH/B,CAAC;AAEF,YAAY,EAAE,6BAA6B,EAAE,CAAC;AAE9C,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -49,6 +49,7 @@ function NoChrome({ children, }) {
49
49
  return react_1.default.createElement("div", { style: { position: "relative" } }, children);
50
50
  }
51
51
  function IframeChrome({ children, onClose, }) {
52
+ const { setIframeAborted } = (0, index_js_1.useIframe)();
52
53
  return (react_1.default.createElement("div", { style: {
53
54
  position: "fixed", // Change to fixed to stay in viewport
54
55
  left: 0,
@@ -83,7 +84,10 @@ function IframeChrome({ children, onClose, }) {
83
84
  backgroundColor: "transparent",
84
85
  padding: "0.25rem",
85
86
  color: "#9ca3af",
86
- }, onClick: onClose },
87
+ }, onClick: () => {
88
+ setIframeAborted(true);
89
+ onClose?.();
90
+ } },
87
91
  react_1.default.createElement(CloseIcon_js_1.CloseIcon, null)),
88
92
  children)));
89
93
  }
@@ -131,8 +135,8 @@ const CivicAuthIframeContainer = ({ onClose, closeOnRedirect = true, }) => {
131
135
  return true; // Successfully processed the URL
132
136
  }
133
137
  }
134
- catch (e) {
135
- console.log("Waiting for redirect...", e);
138
+ catch {
139
+ // ignore errors while waiting for redirect
136
140
  }
137
141
  }
138
142
  return false; // Haven't processed the URL yet
@@ -1 +1 @@
1
- {"version":3,"file":"CivicAuthIframeContainer.js","sourceRoot":"","sources":["../../../../src/shared/components/CivicAuthIframeContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { LoadingIcon } from \"@/shared/components/LoadingIcon.js\";\nimport { CloseIcon } from \"@/shared/components/CloseIcon.js\";\nimport { CivicAuthIframe } from \"@/shared/components/CivicAuthIframe.js\";\nimport { useIframe } from \"@/shared/hooks/index.js\";\nimport { TOKEN_EXCHANGE_TRIGGER_TEXT } from \"@/constants.js\";\nimport { useCivicAuthConfig } from \"@/shared/hooks/index.js\";\nimport { useClientTokenExchangeSession } from \"@/shared/hooks/index.js\";\nimport { useSession } from \"@/shared/hooks/index.js\";\n\ntype CivicAuthIframeContainerProps = {\n onClose?: () => void;\n closeOnRedirect?: boolean;\n};\n\nfunction NoChrome({\n children,\n}: {\n children: React.ReactNode;\n onClose?: () => void;\n}) {\n return <div style={{ position: \"relative\" }}>{children}</div>;\n}\n\nexport function IframeChrome({\n children,\n onClose,\n}: {\n children: React.ReactNode;\n onClose?: () => void;\n}) {\n return (\n <div\n style={{\n position: \"fixed\", // Change to fixed to stay in viewport\n left: 0,\n top: 0,\n zIndex: 50,\n display: \"flex\",\n height: \"100vh\",\n width: \"100vw\",\n minWidth: \"18rem\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(17, 24, 39, 0.5)\", // Semi-transparent dark background\n backdropFilter: \"blur(4px)\", // Optional: adds slight blur to background\n }}\n onClick={onClose}\n >\n <div\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n borderRadius: \"1.5rem\",\n backgroundColor: \"white\",\n padding: \"1.5rem\",\n boxShadow:\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <button\n style={{\n position: \"absolute\",\n right: \"1rem\",\n top: \"1rem\",\n display: \"flex\",\n cursor: \"pointer\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"none\",\n backgroundColor: \"transparent\",\n padding: \"0.25rem\",\n color: \"#9ca3af\",\n }}\n onClick={onClose}\n >\n <CloseIcon />\n </button>\n\n {children}\n </div>\n </div>\n );\n}\n\nconst CivicAuthIframeContainer = ({\n onClose,\n closeOnRedirect = true,\n}: CivicAuthIframeContainerProps) => {\n const [isLoading, setIsLoading] = useState(true);\n const { isLoading: isAuthLoading, data: session } = useSession();\n const config = useCivicAuthConfig();\n const [tokenExchangeUrl, setTokenExchangeUrl] = useState<string | null>(null);\n const { doTokenExchange } = useClientTokenExchangeSession();\n const { iframeRef, iframeMode } = useIframe();\n\n useEffect(() => {\n if (tokenExchangeUrl) {\n doTokenExchange?.(tokenExchangeUrl);\n }\n }, [doTokenExchange, tokenExchangeUrl]);\n\n const processIframeUrl = useCallback(() => {\n if (!config) return;\n if (iframeRef && iframeRef.current && iframeRef.current.contentWindow) {\n try {\n const iframeUrl = iframeRef.current.contentWindow.location.href;\n // we know that oauth has finished when the iframe redirects to our redirectUrl\n if (iframeUrl.startsWith(config.redirectUrl)) {\n // we still want to show the spinner during redirect\n setIsLoading(true);\n const iframeBody =\n iframeRef.current.contentWindow.document.body.innerHTML;\n\n // If we're doing a server token exchange, we need to call the server a second time\n // using a fetch so that we're on the same domain and cookies can be sent and read\n // The server will use the presence of the code_verifier cookie to determine whether to do a token exchange or not.\n // On the initial (3rd party) redirect from the auth server, the cookie won't be sent, so the server-side callback route will just render a blank page,\n // and we'll do the exchange request from here, which will include the cookies.\n if (iframeBody.includes(TOKEN_EXCHANGE_TRIGGER_TEXT)) {\n const params = new URL(iframeUrl).searchParams;\n const appUrl = globalThis.window?.location?.origin;\n fetch(\n `${config.redirectUrl}?${params.toString()}&appUrl=${appUrl}`,\n );\n } else {\n // if we're doing token-exchange in the client, we can just set the authResponseUrl\n // to be handled by the auth provider\n // iframeRef.current.setAttribute(\"src\", \"\");\n setTokenExchangeUrl(iframeUrl);\n }\n\n if (closeOnRedirect) onClose?.();\n return true; // Successfully processed the URL\n }\n } catch (e) {\n console.log(\"Waiting for redirect...\", e);\n }\n }\n return false; // Haven't processed the URL yet\n }, [closeOnRedirect, config, iframeRef, onClose]);\n\n const intervalId = useRef<NodeJS.Timeout>();\n\n const handleEscape = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose?.();\n }\n },\n [onClose],\n );\n\n // handle Escape\n useEffect(() => {\n window.addEventListener(\"keydown\", handleEscape);\n\n return () => window.removeEventListener(\"keydown\", handleEscape);\n });\n\n const handleIframeLoad = useCallback(() => {\n setIsLoading(false);\n\n const iframeHasUrl = processIframeUrl();\n\n if (iframeHasUrl && intervalId.current) {\n clearInterval(intervalId.current);\n }\n }, [processIframeUrl, setIsLoading, intervalId]);\n\n // if we're already authenticated then we're waiting either for the iframe to be closed\n // or the page to redirect, so we want to show the loading icon\n const showLoadingIcon = session?.authenticated || isLoading || isAuthLoading;\n\n const WrapperComponent = iframeMode === \"embedded\" ? NoChrome : IframeChrome;\n\n return (\n <WrapperComponent onClose={onClose}>\n {showLoadingIcon ? (\n <div\n id=\"civic-auth-loading-icon-wrapper\"\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"white\",\n }}\n >\n <LoadingIcon />\n </div>\n ) : null}\n\n <CivicAuthIframe\n ref={iframeRef}\n id={\"civic-auth-iframe\"}\n onLoad={handleIframeLoad}\n />\n </WrapperComponent>\n );\n};\n\nexport type { CivicAuthIframeContainerProps };\n\nexport { CivicAuthIframeContainer };\n"]}
1
+ {"version":3,"file":"CivicAuthIframeContainer.js","sourceRoot":"","sources":["../../../../src/shared/components/CivicAuthIframeContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { LoadingIcon } from \"@/shared/components/LoadingIcon.js\";\nimport { CloseIcon } from \"@/shared/components/CloseIcon.js\";\nimport { CivicAuthIframe } from \"@/shared/components/CivicAuthIframe.js\";\nimport { useIframe } from \"@/shared/hooks/index.js\";\nimport { TOKEN_EXCHANGE_TRIGGER_TEXT } from \"@/constants.js\";\nimport { useCivicAuthConfig } from \"@/shared/hooks/index.js\";\nimport { useClientTokenExchangeSession } from \"@/shared/hooks/index.js\";\nimport { useSession } from \"@/shared/hooks/index.js\";\n\ntype CivicAuthIframeContainerProps = {\n onClose?: () => void;\n closeOnRedirect?: boolean;\n};\n\nfunction NoChrome({\n children,\n}: {\n children: React.ReactNode;\n onClose?: () => void;\n}) {\n return <div style={{ position: \"relative\" }}>{children}</div>;\n}\n\nexport function IframeChrome({\n children,\n onClose,\n}: {\n children: React.ReactNode;\n onClose?: () => void;\n}) {\n const { setIframeAborted } = useIframe();\n return (\n <div\n style={{\n position: \"fixed\", // Change to fixed to stay in viewport\n left: 0,\n top: 0,\n zIndex: 50,\n display: \"flex\",\n height: \"100vh\",\n width: \"100vw\",\n minWidth: \"18rem\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(17, 24, 39, 0.5)\", // Semi-transparent dark background\n backdropFilter: \"blur(4px)\", // Optional: adds slight blur to background\n }}\n onClick={onClose}\n >\n <div\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n borderRadius: \"1.5rem\",\n backgroundColor: \"white\",\n padding: \"1.5rem\",\n boxShadow:\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <button\n style={{\n position: \"absolute\",\n right: \"1rem\",\n top: \"1rem\",\n display: \"flex\",\n cursor: \"pointer\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"none\",\n backgroundColor: \"transparent\",\n padding: \"0.25rem\",\n color: \"#9ca3af\",\n }}\n onClick={() => {\n setIframeAborted(true);\n onClose?.();\n }}\n >\n <CloseIcon />\n </button>\n\n {children}\n </div>\n </div>\n );\n}\n\nconst CivicAuthIframeContainer = ({\n onClose,\n closeOnRedirect = true,\n}: CivicAuthIframeContainerProps) => {\n const [isLoading, setIsLoading] = useState(true);\n const { isLoading: isAuthLoading, data: session } = useSession();\n const config = useCivicAuthConfig();\n const [tokenExchangeUrl, setTokenExchangeUrl] = useState<string | null>(null);\n const { doTokenExchange } = useClientTokenExchangeSession();\n const { iframeRef, iframeMode } = useIframe();\n\n useEffect(() => {\n if (tokenExchangeUrl) {\n doTokenExchange?.(tokenExchangeUrl);\n }\n }, [doTokenExchange, tokenExchangeUrl]);\n\n const processIframeUrl = useCallback(() => {\n if (!config) return;\n if (iframeRef && iframeRef.current && iframeRef.current.contentWindow) {\n try {\n const iframeUrl = iframeRef.current.contentWindow.location.href;\n // we know that oauth has finished when the iframe redirects to our redirectUrl\n if (iframeUrl.startsWith(config.redirectUrl)) {\n // we still want to show the spinner during redirect\n setIsLoading(true);\n const iframeBody =\n iframeRef.current.contentWindow.document.body.innerHTML;\n\n // If we're doing a server token exchange, we need to call the server a second time\n // using a fetch so that we're on the same domain and cookies can be sent and read\n // The server will use the presence of the code_verifier cookie to determine whether to do a token exchange or not.\n // On the initial (3rd party) redirect from the auth server, the cookie won't be sent, so the server-side callback route will just render a blank page,\n // and we'll do the exchange request from here, which will include the cookies.\n if (iframeBody.includes(TOKEN_EXCHANGE_TRIGGER_TEXT)) {\n const params = new URL(iframeUrl).searchParams;\n const appUrl = globalThis.window?.location?.origin;\n fetch(\n `${config.redirectUrl}?${params.toString()}&appUrl=${appUrl}`,\n );\n } else {\n // if we're doing token-exchange in the client, we can just set the authResponseUrl\n // to be handled by the auth provider\n // iframeRef.current.setAttribute(\"src\", \"\");\n setTokenExchangeUrl(iframeUrl);\n }\n\n if (closeOnRedirect) onClose?.();\n return true; // Successfully processed the URL\n }\n } catch {\n // ignore errors while waiting for redirect\n }\n }\n return false; // Haven't processed the URL yet\n }, [closeOnRedirect, config, iframeRef, onClose]);\n\n const intervalId = useRef<NodeJS.Timeout>();\n\n const handleEscape = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose?.();\n }\n },\n [onClose],\n );\n\n // handle Escape\n useEffect(() => {\n window.addEventListener(\"keydown\", handleEscape);\n\n return () => window.removeEventListener(\"keydown\", handleEscape);\n });\n\n const handleIframeLoad = useCallback(() => {\n setIsLoading(false);\n\n const iframeHasUrl = processIframeUrl();\n\n if (iframeHasUrl && intervalId.current) {\n clearInterval(intervalId.current);\n }\n }, [processIframeUrl, setIsLoading, intervalId]);\n\n // if we're already authenticated then we're waiting either for the iframe to be closed\n // or the page to redirect, so we want to show the loading icon\n const showLoadingIcon = session?.authenticated || isLoading || isAuthLoading;\n\n const WrapperComponent = iframeMode === \"embedded\" ? NoChrome : IframeChrome;\n\n return (\n <WrapperComponent onClose={onClose}>\n {showLoadingIcon ? (\n <div\n id=\"civic-auth-loading-icon-wrapper\"\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"white\",\n }}\n >\n <LoadingIcon />\n </div>\n ) : null}\n\n <CivicAuthIframe\n ref={iframeRef}\n id={\"civic-auth-iframe\"}\n onLoad={handleIframeLoad}\n />\n </WrapperComponent>\n );\n};\n\nexport type { CivicAuthIframeContainerProps };\n\nexport { CivicAuthIframeContainer };\n"]}
@@ -1,4 +1,4 @@
1
- import type { DisplayMode } from "../../types.js";
1
+ import { AuthStatus, type DisplayMode } from "../../types.js";
2
2
  import { type PKCEConsumer } from "../../services/types.js";
3
3
  type SignInProps = {
4
4
  pkceConsumer?: PKCEConsumer;
@@ -9,7 +9,7 @@ type SignInProps = {
9
9
  declare const useSignIn: ({ pkceConsumer, preSignOut, postSignOut, displayMode, }: SignInProps) => {
10
10
  signIn: () => Promise<void>;
11
11
  signOut: () => Promise<void>;
12
- isSigningOut: boolean;
12
+ authStatus: AuthStatus;
13
13
  displayMode: DisplayMode;
14
14
  };
15
15
  export { useSignIn };
@@ -1 +1 @@
1
- {"version":3,"file":"useSignIn.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useSignIn.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKpE,KAAK,WAAW,GAAG;IACjB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AACF,QAAA,MAAM,SAAS,4DAKZ,WAAW;kBAmEyB,OAAO,CAAC,IAAI,CAAC;;;;CAiFnD,CAAC;AACF,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"useSignIn.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useSignIn.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAG1D,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKpE,KAAK,WAAW,GAAG;IACjB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AACF,QAAA,MAAM,SAAS,4DAKZ,WAAW;kBAsEyB,OAAO,CAAC,IAAI,CAAC;;;;CAuGnD,CAAC;AACF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -4,17 +4,18 @@ exports.useSignIn = void 0;
4
4
  const AuthenticationService_js_1 = require("../../services/AuthenticationService.js");
5
5
  const PKCE_js_1 = require("../../services/PKCE.js");
6
6
  const useCivicAuthConfig_js_1 = require("../../shared/hooks/useCivicAuthConfig.js");
7
+ const types_js_1 = require("../../types.js");
7
8
  const useIframe_js_1 = require("../../shared/hooks/useIframe.js");
8
9
  const react_1 = require("react");
9
- const types_js_1 = require("../../services/types.js");
10
+ const types_js_2 = require("../../services/types.js");
10
11
  const useSession_js_1 = require("./useSession.js");
11
12
  const storage_js_1 = require("../../browser/storage.js");
12
13
  const util_js_1 = require("../lib/util.js");
13
14
  const useSignIn = ({ pkceConsumer, preSignOut, postSignOut, displayMode, }) => {
14
15
  const civicAuthConfig = (0, useCivicAuthConfig_js_1.useCivicAuthConfig)();
15
- const { iframeRef, logoutIframeRef, setIframeIsVisible, setLogoutIframeIsVisible, } = (0, useIframe_js_1.useIframe)();
16
+ const { iframeRef, logoutIframeRef, setIframeIsVisible, iframeIsVisible, setLogoutIframeIsVisible, iframeAborted, setIframeAborted, } = (0, useIframe_js_1.useIframe)();
16
17
  const { data: session } = (0, useSession_js_1.useSession)();
17
- const [isSigningOut, setIsSigningOut] = (0, react_1.useState)(false);
18
+ const [authStatus, setAuthStatus] = (0, react_1.useState)(types_js_1.AuthStatus.UNAUTHENTICATED);
18
19
  const authInitiator = (0, react_1.useMemo)(() => {
19
20
  if (!civicAuthConfig) {
20
21
  return null;
@@ -61,18 +62,20 @@ const useSignIn = ({ pkceConsumer, preSignOut, postSignOut, displayMode, }) => {
61
62
  const signIn = (0, react_1.useCallback)(async () => {
62
63
  if (!authInitiator)
63
64
  return;
65
+ setAuthStatus(types_js_1.AuthStatus.AUTHENTICATING);
64
66
  authInitiator.setDisplayMode(displayMode);
65
67
  if (displayMode === "iframe") {
66
68
  setIframeIsVisible(true);
67
69
  }
68
70
  const useIframeRef = iframeRef?.current || null;
69
71
  await authInitiator.signIn(useIframeRef).catch((error) => {
70
- console.log("signIn error", {
72
+ setAuthStatus(types_js_1.AuthStatus.ERROR);
73
+ console.error("signIn error", {
71
74
  error,
72
- isPopupError: error instanceof types_js_1.PopupError,
75
+ isPopupError: error instanceof types_js_2.PopupError,
73
76
  });
74
77
  // if we've tried to open a popup and it has failed, then fallback to redirect mode
75
- if (error instanceof types_js_1.PopupError) {
78
+ if (error instanceof types_js_2.PopupError) {
76
79
  setIframeIsVisible(false); // hide the iframe
77
80
  authInitiator.cleanup(); // clear any event listeners from before
78
81
  authInitiator.setDisplayMode("redirect"); // switch to redirect mode
@@ -84,7 +87,7 @@ const useSignIn = ({ pkceConsumer, preSignOut, postSignOut, displayMode, }) => {
84
87
  const idToken = session?.idToken;
85
88
  if (!authInitiator)
86
89
  return;
87
- setIsSigningOut(true);
90
+ setAuthStatus(types_js_1.AuthStatus.SIGNING_OUT);
88
91
  if (displayMode === "iframe") {
89
92
  setIframeIsVisible(false);
90
93
  setLogoutIframeIsVisible(true);
@@ -93,13 +96,13 @@ const useSignIn = ({ pkceConsumer, preSignOut, postSignOut, displayMode, }) => {
93
96
  await preSignOut?.();
94
97
  const useIframeRef = logoutIframeRef?.current || null;
95
98
  await authInitiator.signOut(idToken, useIframeRef).catch((error) => {
96
- setIsSigningOut(false);
97
- console.log("signOut error", {
99
+ setAuthStatus(types_js_1.AuthStatus.ERROR);
100
+ console.error("signOut error", {
98
101
  error,
99
- isPopupError: error instanceof types_js_1.PopupError,
102
+ isPopupError: error instanceof types_js_2.PopupError,
100
103
  });
101
104
  // Same popup fallback as signIn
102
- if (error instanceof types_js_1.PopupError) {
105
+ if (error instanceof types_js_2.PopupError) {
103
106
  setLogoutIframeIsVisible(false);
104
107
  authInitiator.cleanup();
105
108
  authInitiator.setDisplayMode("redirect");
@@ -119,19 +122,38 @@ const useSignIn = ({ pkceConsumer, preSignOut, postSignOut, displayMode, }) => {
119
122
  preSignOut,
120
123
  logoutIframeRef,
121
124
  ]);
125
+ (0, react_1.useEffect)(() => {
126
+ if (session?.authenticated) {
127
+ setAuthStatus(types_js_1.AuthStatus.AUTHENTICATED);
128
+ }
129
+ if (displayMode === "iframe" && iframeAborted) {
130
+ setIframeAborted(false);
131
+ if (!session?.authenticated) {
132
+ setAuthStatus(types_js_1.AuthStatus.UNAUTHENTICATED);
133
+ }
134
+ }
135
+ }, [displayMode, iframeAborted, session?.authenticated, setIframeAborted]);
122
136
  // handle logout finished
123
137
  (0, react_1.useEffect)(() => {
124
- if (isSigningOut && !session?.authenticated) {
125
- setIsSigningOut(false);
138
+ if (authStatus === types_js_1.AuthStatus.SIGNING_OUT && !session?.authenticated) {
139
+ setAuthStatus(types_js_1.AuthStatus.UNAUTHENTICATED);
126
140
  postSignOut?.().then(() => {
127
141
  setLogoutIframeIsVisible(false);
128
142
  });
143
+ return;
129
144
  }
130
- }, [session, postSignOut, isSigningOut, setLogoutIframeIsVisible]);
145
+ }, [
146
+ session,
147
+ postSignOut,
148
+ setLogoutIframeIsVisible,
149
+ displayMode,
150
+ iframeIsVisible,
151
+ authStatus,
152
+ ]);
131
153
  return {
132
154
  signIn,
133
155
  signOut,
134
- isSigningOut,
156
+ authStatus,
135
157
  displayMode,
136
158
  };
137
159
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useSignIn.js","sourceRoot":"","sources":["../../../../src/shared/hooks/useSignIn.ts"],"names":[],"mappings":"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","sourcesContent":["import { BrowserAuthenticationInitiator } from \"@/services/AuthenticationService.js\";\nimport { BrowserPublicClientPKCEProducer } from \"@/services/PKCE.js\";\nimport { useCivicAuthConfig } from \"@/shared/hooks/useCivicAuthConfig.js\";\nimport type { DisplayMode } from \"@/types.js\";\nimport { useIframe } from \"@/shared/hooks/useIframe.js\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { PopupError, type PKCEConsumer } from \"@/services/types.js\";\nimport { useSession } from \"./useSession.js\";\nimport { LocalStorageAdapter } from \"@/browser/storage.js\";\nimport { clearTokens, clearUser } from \"../lib/util.js\";\n\ntype SignInProps = {\n pkceConsumer?: PKCEConsumer;\n preSignOut?: () => Promise<void>;\n postSignOut?: () => Promise<void>;\n displayMode: DisplayMode;\n};\nconst useSignIn = ({\n pkceConsumer,\n preSignOut,\n postSignOut,\n displayMode,\n}: SignInProps) => {\n const civicAuthConfig = useCivicAuthConfig();\n const {\n iframeRef,\n logoutIframeRef,\n setIframeIsVisible,\n setLogoutIframeIsVisible,\n } = useIframe();\n const { data: session } = useSession();\n const [isSigningOut, setIsSigningOut] = useState(false);\n\n const authInitiator = useMemo(() => {\n if (!civicAuthConfig) {\n return null;\n }\n const {\n clientId,\n redirectUrl,\n logoutUrl,\n logoutRedirectUrl,\n nonce,\n oauthServer,\n endpoints,\n scopes,\n } = civicAuthConfig;\n return new BrowserAuthenticationInitiator({\n pkceConsumer: pkceConsumer || new BrowserPublicClientPKCEProducer(), // generate and retrieve the challenge client-side\n clientId,\n redirectUrl,\n logoutUrl,\n logoutRedirectUrl,\n scopes,\n displayMode,\n oauthServer,\n endpointOverrides: endpoints,\n nonce,\n });\n }, [civicAuthConfig, displayMode, pkceConsumer]);\n\n useEffect(() => {\n return () => {\n if (authInitiator) {\n authInitiator.cleanup();\n }\n };\n }, [authInitiator]);\n\n // This effect is used to clear the tokens and user when the user signs out after a redirect\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n const state = params.get(\"state\");\n const localStorage = new LocalStorageAdapter();\n localStorage.get(\"logout_state\").then((storedLogoutState) => {\n if (state && state === storedLogoutState) {\n // Clear storage\n clearTokens(localStorage);\n clearUser(localStorage);\n LocalStorageAdapter.emitter.emit(\"signOut\");\n\n // Clean up storage and URL\n sessionStorage.removeItem(\"logout_state\");\n const cleanUrl = window.location.href.split(\"?\")[0];\n window.history.replaceState({}, document.title, cleanUrl);\n }\n });\n }, []);\n\n const signIn = useCallback(async (): Promise<void> => {\n if (!authInitiator) return;\n\n authInitiator.setDisplayMode(displayMode);\n if (displayMode === \"iframe\") {\n setIframeIsVisible(true);\n }\n const useIframeRef = iframeRef?.current || null;\n await authInitiator.signIn(useIframeRef).catch((error) => {\n console.log(\"signIn error\", {\n error,\n isPopupError: error instanceof PopupError,\n });\n // if we've tried to open a popup and it has failed, then fallback to redirect mode\n if (error instanceof PopupError) {\n setIframeIsVisible(false); // hide the iframe\n authInitiator.cleanup(); // clear any event listeners from before\n authInitiator.setDisplayMode(\"redirect\"); // switch to redirect mode\n authInitiator.signIn(useIframeRef); // retry the sign in\n }\n });\n }, [authInitiator, displayMode, iframeRef, setIframeIsVisible]);\n\n const signOut = useCallback(async () => {\n const idToken = session?.idToken;\n if (!authInitiator) return;\n\n setIsSigningOut(true);\n if (displayMode === \"iframe\") {\n setIframeIsVisible(false);\n setLogoutIframeIsVisible(true);\n }\n\n try {\n await preSignOut?.();\n\n const useIframeRef = logoutIframeRef?.current || null;\n await authInitiator.signOut(idToken, useIframeRef).catch((error) => {\n setIsSigningOut(false);\n console.log(\"signOut error\", {\n error,\n isPopupError: error instanceof PopupError,\n });\n\n // Same popup fallback as signIn\n if (error instanceof PopupError) {\n setLogoutIframeIsVisible(false);\n authInitiator.cleanup();\n authInitiator.setDisplayMode(\"redirect\");\n authInitiator.signOut(idToken, useIframeRef);\n }\n });\n } catch (error) {\n console.error(\"Signout error:\", error);\n }\n }, [\n session?.idToken,\n authInitiator,\n displayMode,\n setLogoutIframeIsVisible,\n setIframeIsVisible,\n preSignOut,\n logoutIframeRef,\n ]);\n\n // handle logout finished\n useEffect(() => {\n if (isSigningOut && !session?.authenticated) {\n setIsSigningOut(false);\n postSignOut?.().then(() => {\n setLogoutIframeIsVisible(false);\n });\n }\n }, [session, postSignOut, isSigningOut, setLogoutIframeIsVisible]);\n\n return {\n signIn,\n signOut,\n isSigningOut,\n displayMode,\n };\n};\nexport { useSignIn };\n"]}
1
+ {"version":3,"file":"useSignIn.js","sourceRoot":"","sources":["../../../../src/shared/hooks/useSignIn.ts"],"names":[],"mappings":"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","sourcesContent":["import { BrowserAuthenticationInitiator } from \"@/services/AuthenticationService.js\";\nimport { BrowserPublicClientPKCEProducer } from \"@/services/PKCE.js\";\nimport { useCivicAuthConfig } from \"@/shared/hooks/useCivicAuthConfig.js\";\nimport { AuthStatus, type DisplayMode } from \"@/types.js\";\nimport { useIframe } from \"@/shared/hooks/useIframe.js\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { PopupError, type PKCEConsumer } from \"@/services/types.js\";\nimport { useSession } from \"./useSession.js\";\nimport { LocalStorageAdapter } from \"@/browser/storage.js\";\nimport { clearTokens, clearUser } from \"../lib/util.js\";\n\ntype SignInProps = {\n pkceConsumer?: PKCEConsumer;\n preSignOut?: () => Promise<void>;\n postSignOut?: () => Promise<void>;\n displayMode: DisplayMode;\n};\nconst useSignIn = ({\n pkceConsumer,\n preSignOut,\n postSignOut,\n displayMode,\n}: SignInProps) => {\n const civicAuthConfig = useCivicAuthConfig();\n const {\n iframeRef,\n logoutIframeRef,\n setIframeIsVisible,\n iframeIsVisible,\n setLogoutIframeIsVisible,\n iframeAborted,\n setIframeAborted,\n } = useIframe();\n const { data: session } = useSession();\n const [authStatus, setAuthStatus] = useState(AuthStatus.UNAUTHENTICATED);\n\n const authInitiator = useMemo(() => {\n if (!civicAuthConfig) {\n return null;\n }\n const {\n clientId,\n redirectUrl,\n logoutUrl,\n logoutRedirectUrl,\n nonce,\n oauthServer,\n endpoints,\n scopes,\n } = civicAuthConfig;\n return new BrowserAuthenticationInitiator({\n pkceConsumer: pkceConsumer || new BrowserPublicClientPKCEProducer(), // generate and retrieve the challenge client-side\n clientId,\n redirectUrl,\n logoutUrl,\n logoutRedirectUrl,\n scopes,\n displayMode,\n oauthServer,\n endpointOverrides: endpoints,\n nonce,\n });\n }, [civicAuthConfig, displayMode, pkceConsumer]);\n\n useEffect(() => {\n return () => {\n if (authInitiator) {\n authInitiator.cleanup();\n }\n };\n }, [authInitiator]);\n\n // This effect is used to clear the tokens and user when the user signs out after a redirect\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n const state = params.get(\"state\");\n const localStorage = new LocalStorageAdapter();\n localStorage.get(\"logout_state\").then((storedLogoutState) => {\n if (state && state === storedLogoutState) {\n // Clear storage\n clearTokens(localStorage);\n clearUser(localStorage);\n LocalStorageAdapter.emitter.emit(\"signOut\");\n\n // Clean up storage and URL\n sessionStorage.removeItem(\"logout_state\");\n const cleanUrl = window.location.href.split(\"?\")[0];\n window.history.replaceState({}, document.title, cleanUrl);\n }\n });\n }, []);\n\n const signIn = useCallback(async (): Promise<void> => {\n if (!authInitiator) return;\n\n setAuthStatus(AuthStatus.AUTHENTICATING);\n authInitiator.setDisplayMode(displayMode);\n if (displayMode === \"iframe\") {\n setIframeIsVisible(true);\n }\n const useIframeRef = iframeRef?.current || null;\n await authInitiator.signIn(useIframeRef).catch((error) => {\n setAuthStatus(AuthStatus.ERROR);\n console.error(\"signIn error\", {\n error,\n isPopupError: error instanceof PopupError,\n });\n // if we've tried to open a popup and it has failed, then fallback to redirect mode\n if (error instanceof PopupError) {\n setIframeIsVisible(false); // hide the iframe\n authInitiator.cleanup(); // clear any event listeners from before\n authInitiator.setDisplayMode(\"redirect\"); // switch to redirect mode\n authInitiator.signIn(useIframeRef); // retry the sign in\n }\n });\n }, [authInitiator, displayMode, iframeRef, setIframeIsVisible]);\n\n const signOut = useCallback(async () => {\n const idToken = session?.idToken;\n if (!authInitiator) return;\n\n setAuthStatus(AuthStatus.SIGNING_OUT);\n if (displayMode === \"iframe\") {\n setIframeIsVisible(false);\n setLogoutIframeIsVisible(true);\n }\n\n try {\n await preSignOut?.();\n\n const useIframeRef = logoutIframeRef?.current || null;\n await authInitiator.signOut(idToken, useIframeRef).catch((error) => {\n setAuthStatus(AuthStatus.ERROR);\n console.error(\"signOut error\", {\n error,\n isPopupError: error instanceof PopupError,\n });\n\n // Same popup fallback as signIn\n if (error instanceof PopupError) {\n setLogoutIframeIsVisible(false);\n authInitiator.cleanup();\n authInitiator.setDisplayMode(\"redirect\");\n authInitiator.signOut(idToken, useIframeRef);\n }\n });\n } catch (error) {\n console.error(\"Signout error:\", error);\n }\n }, [\n session?.idToken,\n authInitiator,\n displayMode,\n setLogoutIframeIsVisible,\n setIframeIsVisible,\n preSignOut,\n logoutIframeRef,\n ]);\n\n useEffect(() => {\n if (session?.authenticated) {\n setAuthStatus(AuthStatus.AUTHENTICATED);\n }\n if (displayMode === \"iframe\" && iframeAborted) {\n setIframeAborted(false);\n if (!session?.authenticated) {\n setAuthStatus(AuthStatus.UNAUTHENTICATED);\n }\n }\n }, [displayMode, iframeAborted, session?.authenticated, setIframeAborted]);\n\n // handle logout finished\n useEffect(() => {\n if (authStatus === AuthStatus.SIGNING_OUT && !session?.authenticated) {\n setAuthStatus(AuthStatus.UNAUTHENTICATED);\n postSignOut?.().then(() => {\n setLogoutIframeIsVisible(false);\n });\n return;\n }\n }, [\n session,\n postSignOut,\n setLogoutIframeIsVisible,\n displayMode,\n iframeIsVisible,\n authStatus,\n ]);\n\n return {\n signIn,\n signOut,\n authStatus,\n displayMode,\n };\n};\nexport { useSignIn };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GenericAuthenticationRefresher.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/GenericAuthenticationRefresher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAErE,8BAAsB,8BACpB,YAAW,uBAAuB;IAElC,OAAO,CAAC,cAAc,CAA6B;IACnD,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7C,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IAE3C,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,QAAQ,CAAC,kBAAkB,CACzB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,qBAAqB,CAAC;IAE3B,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAQlC,aAAa;YAIL,aAAa;IAWrB,gBAAgB;IAmBtB,gBAAgB;CAKjB"}
1
+ {"version":3,"file":"GenericAuthenticationRefresher.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/GenericAuthenticationRefresher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAErE,8BAAsB,8BACpB,YAAW,uBAAuB;IAElC,OAAO,CAAC,cAAc,CAA6B;IACnD,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7C,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IAE3C,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,QAAQ,CAAC,kBAAkB,CACzB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,qBAAqB,CAAC;IAE3B,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAQlC,aAAa;YAIL,aAAa;IASrB,gBAAgB;IAmBtB,gBAAgB;CAKjB"}
@@ -25,7 +25,6 @@ class GenericAuthenticationRefresher {
25
25
  try {
26
26
  await this.refreshTokens();
27
27
  await this.setupAutorefresh(); // Reset the timeout after successful refresh
28
- console.log("Autorefreshed tokens");
29
28
  }
30
29
  catch (error) {
31
30
  console.error("Failed to refresh tokens:", error);
@@ -1 +1 @@
1
- {"version":3,"file":"GenericAuthenticationRefresher.js","sourceRoot":"","sources":["../../../../src/shared/lib/GenericAuthenticationRefresher.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;AAGrD,kDAA+E;AAG/E,MAAsB,8BAA8B;IAG1C,cAAc,CAA6B;IACzC,UAAU,CAAyB;IACnC,OAAO,CAA0B;IAE3C,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,UAAU,EAAE,WAAW,IAAI,kCAAmB,CAAC;IAC7D,CAAC;IAMD,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAE3D,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAc,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC1E,OAAO,MAAM,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,6CAA6C;YAE5E,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC3D,6BAA6B;QAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,iBAAiB;QACjB,MAAM,UAAU,GAAG,MAAM,IAAA,iCAAuB,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAE5C,8DAA8D;QAC9D,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,6BAA6B;QAC7D,MAAM,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,0BAA0B;QACjE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC,CAAC;QAE9D,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,EAAE,aAAa,CAAC,CAAC;IACpB,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;CACF;AA9DD,wEA8DC","sourcesContent":["import { DEFAULT_AUTH_SERVER } from \"@/constants.js\";\nimport type { AuthConfig } from \"@/server/config.js\";\nimport type { AuthenticationRefresher } from \"@/services/types.js\";\nimport { retrieveTokenExpiration, retrieveTokens } from \"@/shared/lib/util.js\";\nimport type { AuthStorage, OIDCTokenResponseBody } from \"@/types.js\";\n\nexport abstract class GenericAuthenticationRefresher\n implements AuthenticationRefresher\n{\n private refreshTimeout: NodeJS.Timeout | undefined;\n protected authConfig: AuthConfig | undefined;\n protected storage: AuthStorage | undefined;\n\n get oauthServer(): string {\n return this.authConfig?.oauthServer || DEFAULT_AUTH_SERVER;\n }\n\n abstract refreshAccessToken(\n refreshToken?: string,\n ): Promise<OIDCTokenResponseBody>;\n\n async getRefreshToken(): Promise<string> {\n if (!this.storage) throw new Error(\"No storage available\");\n\n const tokens = await retrieveTokens(this.storage);\n if (!tokens?.refresh_token) throw new Error(\"No refresh token available\");\n return tokens.refresh_token;\n }\n\n async refreshTokens() {\n return this.refreshAccessToken();\n }\n\n private async handleRefresh() {\n try {\n await this.refreshTokens();\n await this.setupAutorefresh(); // Reset the timeout after successful refresh\n\n console.log(\"Autorefreshed tokens\");\n } catch (error) {\n console.error(\"Failed to refresh tokens:\", error);\n }\n }\n\n async setupAutorefresh() {\n if (!this.storage) throw new Error(\"No storage available\");\n // Clear any existing timeout\n this.clearAutorefresh();\n\n // get expires_in\n const expiration = await retrieveTokenExpiration(this.storage);\n const expires_in = Number(expiration) || 60;\n\n // Calculate time until expiry (subtract 30 seconds as buffer)\n const bufferTimeMs = 30 * 1000; // 30 seconds in milliseconds\n const expiresInMs = expires_in * 1000; // Convert to milliseconds\n const refreshTimeMs = Math.max(0, expiresInMs - bufferTimeMs);\n\n this.refreshTimeout = setTimeout(() => {\n this.handleRefresh();\n }, refreshTimeMs);\n }\n\n clearAutorefresh() {\n if (this.refreshTimeout) {\n clearTimeout(this.refreshTimeout);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"GenericAuthenticationRefresher.js","sourceRoot":"","sources":["../../../../src/shared/lib/GenericAuthenticationRefresher.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;AAGrD,kDAA+E;AAG/E,MAAsB,8BAA8B;IAG1C,cAAc,CAA6B;IACzC,UAAU,CAAyB;IACnC,OAAO,CAA0B;IAE3C,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,UAAU,EAAE,WAAW,IAAI,kCAAmB,CAAC;IAC7D,CAAC;IAMD,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAE3D,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAc,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC1E,OAAO,MAAM,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,6CAA6C;QAC9E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC3D,6BAA6B;QAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,iBAAiB;QACjB,MAAM,UAAU,GAAG,MAAM,IAAA,iCAAuB,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAE5C,8DAA8D;QAC9D,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,6BAA6B;QAC7D,MAAM,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,0BAA0B;QACjE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC,CAAC;QAE9D,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,EAAE,aAAa,CAAC,CAAC;IACpB,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;CACF;AA5DD,wEA4DC","sourcesContent":["import { DEFAULT_AUTH_SERVER } from \"@/constants.js\";\nimport type { AuthConfig } from \"@/server/config.js\";\nimport type { AuthenticationRefresher } from \"@/services/types.js\";\nimport { retrieveTokenExpiration, retrieveTokens } from \"@/shared/lib/util.js\";\nimport type { AuthStorage, OIDCTokenResponseBody } from \"@/types.js\";\n\nexport abstract class GenericAuthenticationRefresher\n implements AuthenticationRefresher\n{\n private refreshTimeout: NodeJS.Timeout | undefined;\n protected authConfig: AuthConfig | undefined;\n protected storage: AuthStorage | undefined;\n\n get oauthServer(): string {\n return this.authConfig?.oauthServer || DEFAULT_AUTH_SERVER;\n }\n\n abstract refreshAccessToken(\n refreshToken?: string,\n ): Promise<OIDCTokenResponseBody>;\n\n async getRefreshToken(): Promise<string> {\n if (!this.storage) throw new Error(\"No storage available\");\n\n const tokens = await retrieveTokens(this.storage);\n if (!tokens?.refresh_token) throw new Error(\"No refresh token available\");\n return tokens.refresh_token;\n }\n\n async refreshTokens() {\n return this.refreshAccessToken();\n }\n\n private async handleRefresh() {\n try {\n await this.refreshTokens();\n await this.setupAutorefresh(); // Reset the timeout after successful refresh\n } catch (error) {\n console.error(\"Failed to refresh tokens:\", error);\n }\n }\n\n async setupAutorefresh() {\n if (!this.storage) throw new Error(\"No storage available\");\n // Clear any existing timeout\n this.clearAutorefresh();\n\n // get expires_in\n const expiration = await retrieveTokenExpiration(this.storage);\n const expires_in = Number(expiration) || 60;\n\n // Calculate time until expiry (subtract 30 seconds as buffer)\n const bufferTimeMs = 30 * 1000; // 30 seconds in milliseconds\n const expiresInMs = expires_in * 1000; // Convert to milliseconds\n const refreshTimeMs = Math.max(0, expiresInMs - bufferTimeMs);\n\n this.refreshTimeout = setTimeout(() => {\n this.handleRefresh();\n }, refreshTimeMs);\n }\n\n clearAutorefresh() {\n if (this.refreshTimeout) {\n clearTimeout(this.refreshTimeout);\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/util.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,qBAAqB,EACrB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGtE;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,MAAM,GAAE,OAAO,GAAG,MAAe,GAChC,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,iBAAiB,GAAE,OAAO,CAAC,SAAS,CAAM,GACzC,OAAO,CAAC,SAAS,CAAC,CAMpB;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAEvC,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,OAAO,CAAC,GAAG,CAAC,CA2Bf;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;CACxC,GAAG,OAAO,CAAC,GAAG,CAAC,CAcf;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,GACnB,YAAY,CAId;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,kCAoBrB;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,qBAAqB,iBAY9B;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,iBAKrD;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,iBAInD;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAgBvC;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,WAAW,0BAEjE;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CA2BvB"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/util.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,qBAAqB,EACrB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGtE;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,MAAM,GAAE,OAAO,GAAG,MAAe,GAChC,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,iBAAiB,GAAE,OAAO,CAAC,SAAS,CAAM,GACzC,OAAO,CAAC,SAAS,CAAC,CAMpB;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAEvC,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,OAAO,CAAC,GAAG,CAAC,CA2Bf;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;CACxC,GAAG,OAAO,CAAC,GAAG,CAAC,CAcf;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,GACnB,YAAY,CAId;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,kCAoBrB;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,qBAAqB,iBAY9B;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,iBAKrD;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,iBAGnD;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAgBvC;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,WAAW,0BAEjE;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CA2BvB"}
@@ -145,7 +145,6 @@ async function clearTokens(storage) {
145
145
  }
146
146
  async function clearUser(storage) {
147
147
  const userSession = new UserSession_js_1.GenericUserSession(storage);
148
- console.log("clearUser");
149
148
  await userSession.set(null);
150
149
  }
151
150
  async function retrieveTokens(storage) {
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/shared/lib/util.ts"],"names":[],"mappings":"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","sourcesContent":["// Utility functions shared by auth server and client integrations\n// Typically these functions should be used inside AuthenticationInitiator and AuthenticationResolver implementations\nimport type {\n AuthStorage,\n Endpoints,\n JWTPayload,\n OIDCTokenResponseBody,\n ParsedTokens,\n} from \"@/types.js\";\nimport { OAuthTokens } from \"./types.js\";\nimport { OAuth2Client } from \"oslo/oauth2\";\nimport { getIssuerVariations, getOauthEndpoints } from \"@/lib/oauth.js\";\nimport * as jose from \"jose\";\nimport { withoutUndefined } from \"@/utils.js\";\nimport type { PKCEConsumer, PKCEProducer } from \"@/services/types.js\";\nimport { GenericUserSession } from \"@/shared/lib/UserSession.js\";\n\n/**\n * Given a PKCE code verifier, derive the code challenge using SHA\n */\nexport async function deriveCodeChallenge(\n codeVerifier: string,\n method: \"Plain\" | \"S256\" = \"S256\",\n): Promise<string> {\n if (method === \"Plain\") {\n console.warn(\"Using insecure plain code challenge method\");\n return codeVerifier;\n }\n\n const encoder = new TextEncoder();\n const data = encoder.encode(codeVerifier);\n const digest = await crypto.subtle.digest(\"SHA-256\", data);\n return btoa(String.fromCharCode(...new Uint8Array(digest)))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nexport async function getEndpointsWithOverrides(\n oauthServer: string,\n endpointOverrides: Partial<Endpoints> = {},\n): Promise<Endpoints> {\n const endpoints = await getOauthEndpoints(oauthServer);\n return {\n ...endpoints,\n ...endpointOverrides,\n };\n}\n\nexport async function generateOauthLoginUrl(config: {\n clientId: string;\n scopes: string[];\n state: string;\n redirectUrl: string;\n oauthServer: string;\n nonce?: string;\n endpointOverrides?: Partial<Endpoints>;\n // used to get the PKCE challenge\n pkceConsumer: PKCEConsumer;\n}): Promise<URL> {\n const endpoints = await getEndpointsWithOverrides(\n config.oauthServer,\n config.endpointOverrides,\n );\n const oauth2Client = buildOauth2Client(\n config.clientId,\n config.redirectUrl,\n endpoints,\n );\n const challenge = await config.pkceConsumer.getCodeChallenge();\n const oAuthUrl = await oauth2Client.createAuthorizationURL({\n state: config.state,\n scopes: config.scopes,\n });\n // The OAuth2 client supports PKCE, but does not allow passing in a code challenge from some other source\n // It only allows passing in a code verifier which it then hashes itself.\n oAuthUrl.searchParams.append(\"code_challenge\", challenge);\n oAuthUrl.searchParams.append(\"code_challenge_method\", \"S256\");\n if (config.nonce) {\n // nonce isn't supported by oslo, so we add it manually\n oAuthUrl.searchParams.append(\"nonce\", config.nonce);\n }\n // Required by the auth server for offline_access scope\n oAuthUrl.searchParams.append(\"prompt\", \"consent\");\n\n return oAuthUrl;\n}\n\nexport async function generateOauthLogoutUrl(config: {\n clientId: string;\n redirectUrl: string;\n idToken: string;\n state: string;\n oauthServer: string;\n endpointOverrides?: Partial<Endpoints>;\n}): Promise<URL> {\n const endpoints = await getEndpointsWithOverrides(\n config.oauthServer,\n config.endpointOverrides,\n );\n const endSessionUrl = new URL(endpoints.endsession);\n endSessionUrl.searchParams.append(\"client_id\", config.clientId);\n endSessionUrl.searchParams.append(\"id_token_hint\", config.idToken);\n endSessionUrl.searchParams.append(\"state\", config.state);\n endSessionUrl.searchParams.append(\n \"post_logout_redirect_uri\",\n config.redirectUrl,\n );\n return endSessionUrl;\n}\n\nexport function buildOauth2Client(\n clientId: string,\n redirectUri: string,\n endpoints: Endpoints,\n): OAuth2Client {\n return new OAuth2Client(clientId, endpoints.auth, endpoints.token, {\n redirectURI: redirectUri,\n });\n}\n\nexport async function exchangeTokens(\n code: string,\n state: string,\n pkceProducer: PKCEProducer,\n oauth2Client: OAuth2Client,\n oauthServer: string,\n endpoints: Endpoints,\n) {\n const codeVerifier = await pkceProducer.getCodeVerifier();\n if (!codeVerifier) throw new Error(\"Code verifier not found in state\");\n\n const tokens =\n await oauth2Client.validateAuthorizationCode<OIDCTokenResponseBody>(code, {\n codeVerifier,\n });\n\n // Validate relevant tokens\n try {\n await validateOauth2Tokens(tokens, endpoints, oauth2Client, oauthServer);\n } catch (error) {\n console.error(\"tokenExchange error\", { error, tokens });\n throw new Error(\n `OIDC tokens validation failed: ${(error as Error).message}`,\n );\n }\n return tokens;\n}\n\nexport async function storeTokens(\n storage: AuthStorage,\n tokens: OIDCTokenResponseBody,\n) {\n // store tokens in storage ( TODO we should probably store them against the state to allow multiple logins )\n await storage.set(OAuthTokens.ID_TOKEN, tokens.id_token);\n await storage.set(OAuthTokens.ACCESS_TOKEN, tokens.access_token);\n if (tokens.refresh_token) {\n await storage.set(OAuthTokens.REFRESH_TOKEN, tokens.refresh_token);\n }\n if (tokens.expires_in) {\n await storage.set(OAuthTokens.EXPIRES_IN, tokens.expires_in.toString());\n await storage.set(OAuthTokens.TIMESTAMP, new Date().getTime().toString());\n }\n}\n\nexport async function clearTokens(storage: AuthStorage) {\n const clearOAuthPromises = Object.values(OAuthTokens).map(async (key) => {\n await storage.set(key, \"\");\n });\n await Promise.all([...clearOAuthPromises]);\n}\n\nexport async function clearUser(storage: AuthStorage) {\n const userSession = new GenericUserSession(storage);\n console.log(\"clearUser\");\n await userSession.set(null);\n}\n\nexport async function retrieveTokens(\n storage: AuthStorage,\n): Promise<OIDCTokenResponseBody | null> {\n const idToken = await storage.get(OAuthTokens.ID_TOKEN);\n const accessToken = await storage.get(OAuthTokens.ACCESS_TOKEN);\n const refreshToken = await storage.get(OAuthTokens.REFRESH_TOKEN);\n const expiresIn = await storage.get(OAuthTokens.EXPIRES_IN);\n const timestamp = await storage.get(OAuthTokens.TIMESTAMP);\n\n if (!idToken || !accessToken) return null;\n\n return {\n id_token: idToken,\n access_token: accessToken,\n refresh_token: refreshToken ?? undefined,\n expires_in: expiresIn ? parseInt(expiresIn, 10) : undefined, // Convert string to number\n timestamp: timestamp ? parseInt(timestamp, 10) : undefined, // Convert string to number\n };\n}\n\nexport async function retrieveTokenExpiration(storage: AuthStorage) {\n return await storage.get(OAuthTokens.EXPIRES_IN);\n}\n\nexport async function validateOauth2Tokens(\n tokens: OIDCTokenResponseBody,\n endpoints: Endpoints,\n oauth2Client: OAuth2Client,\n issuer: string,\n): Promise<ParsedTokens> {\n const JWKS = jose.createRemoteJWKSet(new URL(endpoints.jwks));\n\n // validate the ID token\n const idTokenResponse = await jose.jwtVerify<JWTPayload>(\n tokens.id_token,\n JWKS,\n {\n issuer: getIssuerVariations(issuer),\n audience: oauth2Client.clientId,\n },\n );\n\n // validate the access token\n const accessTokenResponse = await jose.jwtVerify<JWTPayload>(\n tokens.access_token,\n JWKS,\n {\n issuer: getIssuerVariations(issuer),\n },\n );\n\n return withoutUndefined({\n id_token: idTokenResponse.payload,\n access_token: accessTokenResponse.payload,\n refresh_token: tokens.refresh_token,\n });\n}\n"]}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/shared/lib/util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,kDAgBC;AAED,8DASC;AAED,sDAqCC;AAED,wDAqBC;AAED,8CAQC;AAED,wCA0BC;AAED,kCAcC;AAED,kCAKC;AAED,8BAGC;AAED,wCAkBC;AAED,0DAEC;AAED,oDAgCC;AAhOD,yCAAyC;AACzC,wCAA2C;AAC3C,6CAAwE;AACxE,2CAA6B;AAC7B,yCAA8C;AAE9C,gEAAiE;AAEjE;;GAEG;AACI,KAAK,UAAU,mBAAmB,CACvC,YAAoB,EACpB,SAA2B,MAAM;IAEjC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC3D,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;SACxD,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxB,CAAC;AAEM,KAAK,UAAU,yBAAyB,CAC7C,WAAmB,EACnB,oBAAwC,EAAE;IAE1C,MAAM,SAAS,GAAG,MAAM,IAAA,4BAAiB,EAAC,WAAW,CAAC,CAAC;IACvD,OAAO;QACL,GAAG,SAAS;QACZ,GAAG,iBAAiB;KACrB,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,MAU3C;IACC,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAC/C,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,iBAAiB,CACzB,CAAC;IACF,MAAM,YAAY,GAAG,iBAAiB,CACpC,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,WAAW,EAClB,SAAS,CACV,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,sBAAsB,CAAC;QACzD,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;IACH,yGAAyG;IACzG,yEAAyE;IACzE,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAC1D,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,uDAAuD;QACvD,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IACD,uDAAuD;IACvD,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAElD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAAC,MAO5C;IACC,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAC/C,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,iBAAiB,CACzB,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACpD,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChE,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACnE,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,aAAa,CAAC,YAAY,CAAC,MAAM,CAC/B,0BAA0B,EAC1B,MAAM,CAAC,WAAW,CACnB,CAAC;IACF,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAgB,iBAAiB,CAC/B,QAAgB,EAChB,WAAmB,EACnB,SAAoB;IAEpB,OAAO,IAAI,qBAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE;QACjE,WAAW,EAAE,WAAW;KACzB,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,KAAa,EACb,YAA0B,EAC1B,YAA0B,EAC1B,WAAmB,EACnB,SAAoB;IAEpB,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAC;IAC1D,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAEvE,MAAM,MAAM,GACV,MAAM,YAAY,CAAC,yBAAyB,CAAwB,IAAI,EAAE;QACxE,YAAY;KACb,CAAC,CAAC;IAEL,2BAA2B;IAC3B,IAAI,CAAC;QACH,MAAM,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACxD,MAAM,IAAI,KAAK,CACb,kCAAmC,KAAe,CAAC,OAAO,EAAE,CAC7D,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,OAAoB,EACpB,MAA6B;IAE7B,4GAA4G;IAC5G,MAAM,OAAO,CAAC,GAAG,CAAC,sBAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,OAAO,CAAC,GAAG,CAAC,sBAAW,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IACjE,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,MAAM,OAAO,CAAC,GAAG,CAAC,sBAAW,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,GAAG,CAAC,sBAAW,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxE,MAAM,OAAO,CAAC,GAAG,CAAC,sBAAW,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAW,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;AAC7C,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,OAAoB;IAClD,MAAM,WAAW,GAAG,IAAI,mCAAkB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,OAAoB;IAEpB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,sBAAW,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,sBAAW,CAAC,YAAY,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,sBAAW,CAAC,aAAa,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,sBAAW,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,sBAAW,CAAC,SAAS,CAAC,CAAC;IAE3D,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE1C,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,YAAY,EAAE,WAAW;QACzB,aAAa,EAAE,YAAY,IAAI,SAAS;QACxC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,2BAA2B;QACxF,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,2BAA2B;KACxF,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,uBAAuB,CAAC,OAAoB;IAChE,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,sBAAW,CAAC,UAAU,CAAC,CAAC;AACnD,CAAC;AAEM,KAAK,UAAU,oBAAoB,CACxC,MAA6B,EAC7B,SAAoB,EACpB,YAA0B,EAC1B,MAAc;IAEd,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9D,wBAAwB;IACxB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,SAAS,CAC1C,MAAM,CAAC,QAAQ,EACf,IAAI,EACJ;QACE,MAAM,EAAE,IAAA,8BAAmB,EAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,YAAY,CAAC,QAAQ;KAChC,CACF,CAAC;IAEF,4BAA4B;IAC5B,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,SAAS,CAC9C,MAAM,CAAC,YAAY,EACnB,IAAI,EACJ;QACE,MAAM,EAAE,IAAA,8BAAmB,EAAC,MAAM,CAAC;KACpC,CACF,CAAC;IAEF,OAAO,IAAA,2BAAgB,EAAC;QACtB,QAAQ,EAAE,eAAe,CAAC,OAAO;QACjC,YAAY,EAAE,mBAAmB,CAAC,OAAO;QACzC,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC,CAAC;AACL,CAAC","sourcesContent":["// Utility functions shared by auth server and client integrations\n// Typically these functions should be used inside AuthenticationInitiator and AuthenticationResolver implementations\nimport type {\n AuthStorage,\n Endpoints,\n JWTPayload,\n OIDCTokenResponseBody,\n ParsedTokens,\n} from \"@/types.js\";\nimport { OAuthTokens } from \"./types.js\";\nimport { OAuth2Client } from \"oslo/oauth2\";\nimport { getIssuerVariations, getOauthEndpoints } from \"@/lib/oauth.js\";\nimport * as jose from \"jose\";\nimport { withoutUndefined } from \"@/utils.js\";\nimport type { PKCEConsumer, PKCEProducer } from \"@/services/types.js\";\nimport { GenericUserSession } from \"@/shared/lib/UserSession.js\";\n\n/**\n * Given a PKCE code verifier, derive the code challenge using SHA\n */\nexport async function deriveCodeChallenge(\n codeVerifier: string,\n method: \"Plain\" | \"S256\" = \"S256\",\n): Promise<string> {\n if (method === \"Plain\") {\n console.warn(\"Using insecure plain code challenge method\");\n return codeVerifier;\n }\n\n const encoder = new TextEncoder();\n const data = encoder.encode(codeVerifier);\n const digest = await crypto.subtle.digest(\"SHA-256\", data);\n return btoa(String.fromCharCode(...new Uint8Array(digest)))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nexport async function getEndpointsWithOverrides(\n oauthServer: string,\n endpointOverrides: Partial<Endpoints> = {},\n): Promise<Endpoints> {\n const endpoints = await getOauthEndpoints(oauthServer);\n return {\n ...endpoints,\n ...endpointOverrides,\n };\n}\n\nexport async function generateOauthLoginUrl(config: {\n clientId: string;\n scopes: string[];\n state: string;\n redirectUrl: string;\n oauthServer: string;\n nonce?: string;\n endpointOverrides?: Partial<Endpoints>;\n // used to get the PKCE challenge\n pkceConsumer: PKCEConsumer;\n}): Promise<URL> {\n const endpoints = await getEndpointsWithOverrides(\n config.oauthServer,\n config.endpointOverrides,\n );\n const oauth2Client = buildOauth2Client(\n config.clientId,\n config.redirectUrl,\n endpoints,\n );\n const challenge = await config.pkceConsumer.getCodeChallenge();\n const oAuthUrl = await oauth2Client.createAuthorizationURL({\n state: config.state,\n scopes: config.scopes,\n });\n // The OAuth2 client supports PKCE, but does not allow passing in a code challenge from some other source\n // It only allows passing in a code verifier which it then hashes itself.\n oAuthUrl.searchParams.append(\"code_challenge\", challenge);\n oAuthUrl.searchParams.append(\"code_challenge_method\", \"S256\");\n if (config.nonce) {\n // nonce isn't supported by oslo, so we add it manually\n oAuthUrl.searchParams.append(\"nonce\", config.nonce);\n }\n // Required by the auth server for offline_access scope\n oAuthUrl.searchParams.append(\"prompt\", \"consent\");\n\n return oAuthUrl;\n}\n\nexport async function generateOauthLogoutUrl(config: {\n clientId: string;\n redirectUrl: string;\n idToken: string;\n state: string;\n oauthServer: string;\n endpointOverrides?: Partial<Endpoints>;\n}): Promise<URL> {\n const endpoints = await getEndpointsWithOverrides(\n config.oauthServer,\n config.endpointOverrides,\n );\n const endSessionUrl = new URL(endpoints.endsession);\n endSessionUrl.searchParams.append(\"client_id\", config.clientId);\n endSessionUrl.searchParams.append(\"id_token_hint\", config.idToken);\n endSessionUrl.searchParams.append(\"state\", config.state);\n endSessionUrl.searchParams.append(\n \"post_logout_redirect_uri\",\n config.redirectUrl,\n );\n return endSessionUrl;\n}\n\nexport function buildOauth2Client(\n clientId: string,\n redirectUri: string,\n endpoints: Endpoints,\n): OAuth2Client {\n return new OAuth2Client(clientId, endpoints.auth, endpoints.token, {\n redirectURI: redirectUri,\n });\n}\n\nexport async function exchangeTokens(\n code: string,\n state: string,\n pkceProducer: PKCEProducer,\n oauth2Client: OAuth2Client,\n oauthServer: string,\n endpoints: Endpoints,\n) {\n const codeVerifier = await pkceProducer.getCodeVerifier();\n if (!codeVerifier) throw new Error(\"Code verifier not found in state\");\n\n const tokens =\n await oauth2Client.validateAuthorizationCode<OIDCTokenResponseBody>(code, {\n codeVerifier,\n });\n\n // Validate relevant tokens\n try {\n await validateOauth2Tokens(tokens, endpoints, oauth2Client, oauthServer);\n } catch (error) {\n console.error(\"tokenExchange error\", { error, tokens });\n throw new Error(\n `OIDC tokens validation failed: ${(error as Error).message}`,\n );\n }\n return tokens;\n}\n\nexport async function storeTokens(\n storage: AuthStorage,\n tokens: OIDCTokenResponseBody,\n) {\n // store tokens in storage ( TODO we should probably store them against the state to allow multiple logins )\n await storage.set(OAuthTokens.ID_TOKEN, tokens.id_token);\n await storage.set(OAuthTokens.ACCESS_TOKEN, tokens.access_token);\n if (tokens.refresh_token) {\n await storage.set(OAuthTokens.REFRESH_TOKEN, tokens.refresh_token);\n }\n if (tokens.expires_in) {\n await storage.set(OAuthTokens.EXPIRES_IN, tokens.expires_in.toString());\n await storage.set(OAuthTokens.TIMESTAMP, new Date().getTime().toString());\n }\n}\n\nexport async function clearTokens(storage: AuthStorage) {\n const clearOAuthPromises = Object.values(OAuthTokens).map(async (key) => {\n await storage.set(key, \"\");\n });\n await Promise.all([...clearOAuthPromises]);\n}\n\nexport async function clearUser(storage: AuthStorage) {\n const userSession = new GenericUserSession(storage);\n await userSession.set(null);\n}\n\nexport async function retrieveTokens(\n storage: AuthStorage,\n): Promise<OIDCTokenResponseBody | null> {\n const idToken = await storage.get(OAuthTokens.ID_TOKEN);\n const accessToken = await storage.get(OAuthTokens.ACCESS_TOKEN);\n const refreshToken = await storage.get(OAuthTokens.REFRESH_TOKEN);\n const expiresIn = await storage.get(OAuthTokens.EXPIRES_IN);\n const timestamp = await storage.get(OAuthTokens.TIMESTAMP);\n\n if (!idToken || !accessToken) return null;\n\n return {\n id_token: idToken,\n access_token: accessToken,\n refresh_token: refreshToken ?? undefined,\n expires_in: expiresIn ? parseInt(expiresIn, 10) : undefined, // Convert string to number\n timestamp: timestamp ? parseInt(timestamp, 10) : undefined, // Convert string to number\n };\n}\n\nexport async function retrieveTokenExpiration(storage: AuthStorage) {\n return await storage.get(OAuthTokens.EXPIRES_IN);\n}\n\nexport async function validateOauth2Tokens(\n tokens: OIDCTokenResponseBody,\n endpoints: Endpoints,\n oauth2Client: OAuth2Client,\n issuer: string,\n): Promise<ParsedTokens> {\n const JWKS = jose.createRemoteJWKSet(new URL(endpoints.jwks));\n\n // validate the ID token\n const idTokenResponse = await jose.jwtVerify<JWTPayload>(\n tokens.id_token,\n JWKS,\n {\n issuer: getIssuerVariations(issuer),\n audience: oauth2Client.clientId,\n },\n );\n\n // validate the access token\n const accessTokenResponse = await jose.jwtVerify<JWTPayload>(\n tokens.access_token,\n JWKS,\n {\n issuer: getIssuerVariations(issuer),\n },\n );\n\n return withoutUndefined({\n id_token: idTokenResponse.payload,\n access_token: accessTokenResponse.payload,\n refresh_token: tokens.refresh_token,\n });\n}\n"]}
@@ -1,11 +1,11 @@
1
- import type { DisplayMode } from "../../types.js";
1
+ import type { AuthStatus, DisplayMode } from "../../types.js";
2
2
  export type AuthContextType = {
3
3
  signIn: (displayMode?: DisplayMode) => Promise<void>;
4
4
  isAuthenticated: boolean;
5
5
  isLoading: boolean;
6
6
  error: Error | null;
7
7
  signOut: () => Promise<void>;
8
- isSigningOut: boolean;
8
+ authStatus: AuthStatus;
9
9
  displayMode: DisplayMode;
10
10
  };
11
11
  export declare const AuthContext: import("react").Context<AuthContextType | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"AuthContext.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/AuthContext.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AACF,eAAO,MAAM,WAAW,iDAA8C,CAAC"}
1
+ {"version":3,"file":"AuthContext.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/AuthContext.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AACF,eAAO,MAAM,WAAW,iDAA8C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AuthContext.js","sourceRoot":"","sources":["../../../../src/shared/providers/AuthContext.tsx"],"names":[],"mappings":";;;AAAA,iCAAsC;AAYzB,QAAA,WAAW,GAAG,IAAA,qBAAa,EAAyB,IAAI,CAAC,CAAC","sourcesContent":["import { createContext } from \"react\";\nimport type { DisplayMode } from \"@/types.js\";\n\nexport type AuthContextType = {\n signIn: (displayMode?: DisplayMode) => Promise<void>;\n isAuthenticated: boolean;\n isLoading: boolean;\n error: Error | null;\n signOut: () => Promise<void>;\n isSigningOut: boolean;\n displayMode: DisplayMode;\n};\nexport const AuthContext = createContext<AuthContextType | null>(null);\n"]}
1
+ {"version":3,"file":"AuthContext.js","sourceRoot":"","sources":["../../../../src/shared/providers/AuthContext.tsx"],"names":[],"mappings":";;;AAAA,iCAAsC;AAYzB,QAAA,WAAW,GAAG,IAAA,qBAAa,EAAyB,IAAI,CAAC,CAAC","sourcesContent":["import { createContext } from \"react\";\nimport type { AuthStatus, DisplayMode } from \"@/types.js\";\n\nexport type AuthContextType = {\n signIn: (displayMode?: DisplayMode) => Promise<void>;\n isAuthenticated: boolean;\n isLoading: boolean;\n error: Error | null;\n signOut: () => Promise<void>;\n authStatus: AuthStatus;\n displayMode: DisplayMode;\n};\nexport const AuthContext = createContext<AuthContextType | null>(null);\n"]}
@@ -5,6 +5,8 @@ export type IframeProviderOutput = {
5
5
  iframeRef: RefObject<HTMLIFrameElement> | null;
6
6
  logoutIframeRef: RefObject<HTMLIFrameElement> | null;
7
7
  setIframeIsVisible: Dispatch<SetStateAction<boolean>>;
8
+ setIframeAborted: Dispatch<SetStateAction<boolean>>;
9
+ iframeAborted: boolean;
8
10
  setLogoutIframeIsVisible: Dispatch<SetStateAction<boolean>>;
9
11
  iframeIsVisible: boolean;
10
12
  logoutIframeIsVisible: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"IframeProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/IframeProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5E,OAAO,KAA0C,MAAM,OAAO,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,SAAS,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IAC/C,eAAe,EAAE,SAAS,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IACrD,kBAAkB,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,wBAAwB,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAaF,QAAA,MAAM,aAAa,qCAAqD,CAAC;AAEzE,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,QAAA,MAAM,cAAc,8BAGjB,iBAAiB,sBAwBnB,CAAC;AAEF,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"IframeProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/IframeProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5E,OAAO,KAA0C,MAAM,OAAO,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,SAAS,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IAC/C,eAAe,EAAE,SAAS,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IACrD,kBAAkB,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,gBAAgB,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,aAAa,EAAE,OAAO,CAAC;IACvB,wBAAwB,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAeF,QAAA,MAAM,aAAa,qCAAqD,CAAC;AAEzE,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,QAAA,MAAM,cAAc,8BAGjB,iBAAiB,sBA2BnB,CAAC;AAEF,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
@@ -41,8 +41,10 @@ const defaultIframe = {
41
41
  iframeRef: null,
42
42
  logoutIframeRef: null,
43
43
  setIframeIsVisible: () => { },
44
+ setIframeAborted: () => { },
44
45
  setLogoutIframeIsVisible: () => { },
45
46
  iframeIsVisible: false,
47
+ iframeAborted: false,
46
48
  logoutIframeIsVisible: false,
47
49
  iframeMode: "modal",
48
50
  renderIframe: false,
@@ -55,12 +57,15 @@ const IframeProvider = ({ children, iframeMode = "modal", }) => {
55
57
  const logoutIframeRef = (0, react_1.useRef)(null);
56
58
  const isInIframe = (0, useIsInIframe_js_1.useIsInIframe)();
57
59
  const [iframeIsVisible, setIframeIsVisible] = (0, react_1.useState)(false);
60
+ const [iframeAborted, setIframeAborted] = (0, react_1.useState)(false);
58
61
  const [logoutIframeIsVisible, setLogoutIframeIsVisible] = (0, react_1.useState)(false);
59
62
  const renderIframe = iframeMode === "modal" && !isInIframe;
60
63
  return (react_1.default.createElement(IframeContext.Provider, { value: {
61
64
  iframeRef,
62
65
  logoutIframeRef,
63
66
  setIframeIsVisible,
67
+ iframeAborted,
68
+ setIframeAborted,
64
69
  setLogoutIframeIsVisible,
65
70
  iframeIsVisible,
66
71
  logoutIframeIsVisible,
@@ -1 +1 @@
1
- {"version":3,"file":"IframeProvider.js","sourceRoot":"","sources":["../../../../src/shared/providers/IframeProvider.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb,+CAA+D;AAC/D,sEAAgE;AAahE,MAAM,aAAa,GAAyB;IAC1C,SAAS,EAAE,IAAI;IACf,eAAe,EAAE,IAAI;IACrB,kBAAkB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC5B,wBAAwB,EAAE,GAAG,EAAE,GAAE,CAAC;IAClC,eAAe,EAAE,KAAK;IACtB,qBAAqB,EAAE,KAAK;IAC5B,UAAU,EAAE,OAAO;IACnB,YAAY,EAAE,KAAK;CACpB,CAAC;AAEF,gEAAgE;AAChE,MAAM,aAAa,GAAG,IAAA,qBAAa,EAAuB,aAAa,CAAC,CAAC;AAqChD,sCAAa;AA9BtC,MAAM,cAAc,GAAG,CAAC,EACtB,QAAQ,EACR,UAAU,GAAG,OAAO,GACF,EAAE,EAAE;IACtB,MAAM,SAAS,GAAG,IAAA,cAAM,EAAoB,IAAI,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,IAAA,cAAM,EAAoB,IAAI,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,IAAA,gCAAa,GAAE,CAAC;IACnC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAE1E,MAAM,YAAY,GAAG,UAAU,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3D,OAAO,CACL,8BAAC,aAAa,CAAC,QAAQ,IACrB,KAAK,EAAE;YACL,SAAS;YACT,eAAe;YACf,kBAAkB;YAClB,wBAAwB;YACxB,eAAe;YACf,qBAAqB;YACrB,UAAU;YACV,YAAY;SACb,IAEA,QAAQ,CACc,CAC1B,CAAC;AACJ,CAAC,CAAC;AAGO,wCAAc","sourcesContent":["\"use client\";\nimport type { Dispatch, ReactNode, RefObject, SetStateAction } from \"react\";\nimport React, { createContext, useRef, useState } from \"react\";\nimport { useIsInIframe } from \"@/shared/hooks/useIsInIframe.js\";\nimport type { IframeMode } from \"@/types.js\";\n\nexport type IframeProviderOutput = {\n iframeRef: RefObject<HTMLIFrameElement> | null;\n logoutIframeRef: RefObject<HTMLIFrameElement> | null;\n setIframeIsVisible: Dispatch<SetStateAction<boolean>>;\n setLogoutIframeIsVisible: Dispatch<SetStateAction<boolean>>;\n iframeIsVisible: boolean;\n logoutIframeIsVisible: boolean;\n iframeMode: IframeMode;\n renderIframe: boolean;\n};\nconst defaultIframe: IframeProviderOutput = {\n iframeRef: null,\n logoutIframeRef: null,\n setIframeIsVisible: () => {},\n setLogoutIframeIsVisible: () => {},\n iframeIsVisible: false,\n logoutIframeIsVisible: false,\n iframeMode: \"modal\",\n renderIframe: false,\n};\n\n// Context for exposing Iframe specifically to the TokenProvider\nconst IframeContext = createContext<IframeProviderOutput>(defaultIframe);\n\ntype IframeContextType = {\n children: ReactNode;\n iframeMode?: IframeMode;\n};\n\nconst IframeProvider = ({\n children,\n iframeMode = \"modal\",\n}: IframeContextType) => {\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const logoutIframeRef = useRef<HTMLIFrameElement>(null);\n const isInIframe = useIsInIframe();\n const [iframeIsVisible, setIframeIsVisible] = useState(false);\n const [logoutIframeIsVisible, setLogoutIframeIsVisible] = useState(false);\n\n const renderIframe = iframeMode === \"modal\" && !isInIframe;\n return (\n <IframeContext.Provider\n value={{\n iframeRef,\n logoutIframeRef,\n setIframeIsVisible,\n setLogoutIframeIsVisible,\n iframeIsVisible,\n logoutIframeIsVisible,\n iframeMode,\n renderIframe,\n }}\n >\n {children}\n </IframeContext.Provider>\n );\n};\n\nexport type { IframeContextType };\nexport { IframeProvider, IframeContext };\n"]}
1
+ {"version":3,"file":"IframeProvider.js","sourceRoot":"","sources":["../../../../src/shared/providers/IframeProvider.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb,+CAA+D;AAC/D,sEAAgE;AAehE,MAAM,aAAa,GAAyB;IAC1C,SAAS,EAAE,IAAI;IACf,eAAe,EAAE,IAAI;IACrB,kBAAkB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC5B,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC1B,wBAAwB,EAAE,GAAG,EAAE,GAAE,CAAC;IAClC,eAAe,EAAE,KAAK;IACtB,aAAa,EAAE,KAAK;IACpB,qBAAqB,EAAE,KAAK;IAC5B,UAAU,EAAE,OAAO;IACnB,YAAY,EAAE,KAAK;CACpB,CAAC;AAEF,gEAAgE;AAChE,MAAM,aAAa,GAAG,IAAA,qBAAa,EAAuB,aAAa,CAAC,CAAC;AAwChD,sCAAa;AAjCtC,MAAM,cAAc,GAAG,CAAC,EACtB,QAAQ,EACR,UAAU,GAAG,OAAO,GACF,EAAE,EAAE;IACtB,MAAM,SAAS,GAAG,IAAA,cAAM,EAAoB,IAAI,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,IAAA,cAAM,EAAoB,IAAI,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,IAAA,gCAAa,GAAE,CAAC;IACnC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAE1E,MAAM,YAAY,GAAG,UAAU,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3D,OAAO,CACL,8BAAC,aAAa,CAAC,QAAQ,IACrB,KAAK,EAAE;YACL,SAAS;YACT,eAAe;YACf,kBAAkB;YAClB,aAAa;YACb,gBAAgB;YAChB,wBAAwB;YACxB,eAAe;YACf,qBAAqB;YACrB,UAAU;YACV,YAAY;SACb,IAEA,QAAQ,CACc,CAC1B,CAAC;AACJ,CAAC,CAAC;AAGO,wCAAc","sourcesContent":["\"use client\";\nimport type { Dispatch, ReactNode, RefObject, SetStateAction } from \"react\";\nimport React, { createContext, useRef, useState } from \"react\";\nimport { useIsInIframe } from \"@/shared/hooks/useIsInIframe.js\";\nimport type { IframeMode } from \"@/types.js\";\n\nexport type IframeProviderOutput = {\n iframeRef: RefObject<HTMLIFrameElement> | null;\n logoutIframeRef: RefObject<HTMLIFrameElement> | null;\n setIframeIsVisible: Dispatch<SetStateAction<boolean>>;\n setIframeAborted: Dispatch<SetStateAction<boolean>>;\n iframeAborted: boolean;\n setLogoutIframeIsVisible: Dispatch<SetStateAction<boolean>>;\n iframeIsVisible: boolean;\n logoutIframeIsVisible: boolean;\n iframeMode: IframeMode;\n renderIframe: boolean;\n};\nconst defaultIframe: IframeProviderOutput = {\n iframeRef: null,\n logoutIframeRef: null,\n setIframeIsVisible: () => {},\n setIframeAborted: () => {},\n setLogoutIframeIsVisible: () => {},\n iframeIsVisible: false,\n iframeAborted: false,\n logoutIframeIsVisible: false,\n iframeMode: \"modal\",\n renderIframe: false,\n};\n\n// Context for exposing Iframe specifically to the TokenProvider\nconst IframeContext = createContext<IframeProviderOutput>(defaultIframe);\n\ntype IframeContextType = {\n children: ReactNode;\n iframeMode?: IframeMode;\n};\n\nconst IframeProvider = ({\n children,\n iframeMode = \"modal\",\n}: IframeContextType) => {\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const logoutIframeRef = useRef<HTMLIFrameElement>(null);\n const isInIframe = useIsInIframe();\n const [iframeIsVisible, setIframeIsVisible] = useState(false);\n const [iframeAborted, setIframeAborted] = useState(false);\n const [logoutIframeIsVisible, setLogoutIframeIsVisible] = useState(false);\n\n const renderIframe = iframeMode === \"modal\" && !isInIframe;\n return (\n <IframeContext.Provider\n value={{\n iframeRef,\n logoutIframeRef,\n setIframeIsVisible,\n iframeAborted,\n setIframeAborted,\n setLogoutIframeIsVisible,\n iframeIsVisible,\n logoutIframeIsVisible,\n iframeMode,\n renderIframe,\n }}\n >\n {children}\n </IframeContext.Provider>\n );\n};\n\nexport type { IframeContextType };\nexport { IframeProvider, IframeContext };\n"]}
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import type { ReactNode } from "react";
3
3
  import type { JWT } from "oslo/jwt";
4
- import type { AuthStorage, DisplayMode, ForwardedTokens, User } from "../../types.js";
4
+ import type { AuthStatus, AuthStorage, DisplayMode, ForwardedTokens, User } from "../../types.js";
5
5
  import type { AuthContextType } from "../../shared/providers/AuthContext.js";
6
6
  type UserContent = Record<string, unknown> & JWT["payload"];
7
7
  type UserContextType<T extends UserContent = UserContent> = {
@@ -12,12 +12,12 @@ type UserContextType<T extends UserContent = UserContent> = {
12
12
  forwardedTokens?: ForwardedTokens;
13
13
  } & Omit<AuthContextType, "isAuthenticated">;
14
14
  declare const UserContext: React.Context<UserContextType<UserContent> | null>;
15
- declare const UserProvider: <T extends UserContent>({ children, storage, user: inputUser, signOut, isSigningOut, signIn, displayMode, }: {
15
+ declare const UserProvider: <T extends UserContent>({ children, storage, user: inputUser, signOut, authStatus, signIn, displayMode, }: {
16
16
  children: ReactNode;
17
17
  storage: AuthStorage;
18
18
  user: User<T> | null;
19
19
  signOut: () => Promise<void>;
20
- isSigningOut: boolean;
20
+ authStatus: AuthStatus;
21
21
  signIn: (displayMode?: DisplayMode) => Promise<void>;
22
22
  displayMode: DisplayMode;
23
23
  }) => React.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"UserProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/UserProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA0D,MAAM,OAAO,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,IAAI,EACL,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAIzE,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;AAC5D,KAAK,eAAe,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI;IAC1D,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACtB,GAAG;IACF,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;AAE7C,QAAA,MAAM,WAAW,oDAA8C,CAAC;AAEhE,QAAA,MAAM,YAAY,GAAI,CAAC,SAAS,WAAW,uFAQxC;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,WAAW,EAAE,WAAW,CAAC;CAC1B,sBA8DA,CAAC;AAEF,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"UserProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/UserProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA0D,MAAM,OAAO,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,IAAI,EACL,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAIzE,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;AAC5D,KAAK,eAAe,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI;IAC1D,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACtB,GAAG;IACF,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;AAE7C,QAAA,MAAM,WAAW,oDAA8C,CAAC;AAEhE,QAAA,MAAM,YAAY,GAAI,CAAC,SAAS,WAAW,qFAQxC;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,WAAW,EAAE,WAAW,CAAC;CAC1B,sBAgEA,CAAC;AAEF,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -41,7 +41,7 @@ const UserSession_js_1 = require("../../shared/lib/UserSession.js");
41
41
  const useToken_js_1 = require("../hooks/useToken.js");
42
42
  const UserContext = (0, react_1.createContext)(null);
43
43
  exports.UserContext = UserContext;
44
- const UserProvider = ({ children, storage, user: inputUser, signOut, isSigningOut, signIn, displayMode, }) => {
44
+ const UserProvider = ({ children, storage, user: inputUser, signOut, authStatus, signIn, displayMode, }) => {
45
45
  const { error: authError, isLoading: authLoading } = (0, useSession_js_1.useSession)();
46
46
  const { data: session } = (0, useSession_js_1.useSession)();
47
47
  const tokens = (0, useToken_js_1.useToken)();
@@ -72,6 +72,9 @@ const UserProvider = ({ children, storage, user: inputUser, signOut, isSigningOu
72
72
  setUserError(error);
73
73
  });
74
74
  }
75
+ else {
76
+ setUser(null);
77
+ }
75
78
  }, [fetchUser, session?.idToken]);
76
79
  const isLoading = authLoading || userLoading;
77
80
  const error = authError ?? userError;
@@ -90,7 +93,7 @@ const UserProvider = ({ children, storage, user: inputUser, signOut, isSigningOu
90
93
  error,
91
94
  signIn,
92
95
  signOut,
93
- isSigningOut,
96
+ authStatus,
94
97
  displayMode: displayMode || "iframe",
95
98
  } }, children));
96
99
  };