@civic/auth 0.1.3 → 0.1.4-beta.1

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 (752) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +13 -10
  3. package/dist/cjs/browser/storage.d.ts +3 -0
  4. package/dist/cjs/browser/storage.d.ts.map +1 -1
  5. package/dist/cjs/browser/storage.js +8 -0
  6. package/dist/cjs/browser/storage.js.map +1 -1
  7. package/dist/cjs/lib/cookies.d.ts +2 -2
  8. package/dist/cjs/lib/cookies.d.ts.map +1 -1
  9. package/dist/cjs/lib/cookies.js +7 -5
  10. package/dist/cjs/lib/cookies.js.map +1 -1
  11. package/dist/cjs/lib/postMessage.js +1 -1
  12. package/dist/cjs/lib/postMessage.js.map +1 -1
  13. package/dist/cjs/lib/windowUtil.d.ts.map +1 -1
  14. package/dist/cjs/lib/windowUtil.js +1 -0
  15. package/dist/cjs/lib/windowUtil.js.map +1 -1
  16. package/dist/cjs/nextjs/GetUser.d.ts.map +1 -1
  17. package/dist/cjs/nextjs/GetUser.js +2 -13
  18. package/dist/cjs/nextjs/GetUser.js.map +1 -1
  19. package/dist/cjs/nextjs/config.d.ts.map +1 -1
  20. package/dist/cjs/nextjs/config.js +12 -0
  21. package/dist/cjs/nextjs/config.js.map +1 -1
  22. package/dist/cjs/nextjs/hooks/index.d.ts +1 -1
  23. package/dist/cjs/nextjs/hooks/index.d.ts.map +1 -1
  24. package/dist/cjs/nextjs/hooks/index.js +3 -3
  25. package/dist/cjs/nextjs/hooks/index.js.map +1 -1
  26. package/dist/cjs/nextjs/hooks/useUserCookie.d.ts +4 -1
  27. package/dist/cjs/nextjs/hooks/useUserCookie.d.ts.map +1 -1
  28. package/dist/cjs/nextjs/hooks/useUserCookie.js +43 -15
  29. package/dist/cjs/nextjs/hooks/useUserCookie.js.map +1 -1
  30. package/dist/cjs/nextjs/providers/NextAuthProvider.d.ts +5 -1
  31. package/dist/cjs/nextjs/providers/NextAuthProvider.d.ts.map +1 -1
  32. package/dist/cjs/nextjs/providers/NextAuthProvider.js +74 -35
  33. package/dist/cjs/nextjs/providers/NextAuthProvider.js.map +1 -1
  34. package/dist/cjs/nextjs/routeHandler.js +2 -2
  35. package/dist/cjs/nextjs/routeHandler.js.map +1 -1
  36. package/dist/cjs/reactjs/components/UserButton.js +20 -10
  37. package/dist/cjs/reactjs/components/UserButton.js.map +1 -1
  38. package/dist/cjs/reactjs/hooks/index.d.ts +0 -1
  39. package/dist/cjs/reactjs/hooks/index.d.ts.map +1 -1
  40. package/dist/cjs/reactjs/hooks/index.js +1 -3
  41. package/dist/cjs/reactjs/hooks/index.js.map +1 -1
  42. package/dist/cjs/services/AuthenticationService.d.ts +4 -1
  43. package/dist/cjs/services/AuthenticationService.d.ts.map +1 -1
  44. package/dist/cjs/services/AuthenticationService.js +38 -7
  45. package/dist/cjs/services/AuthenticationService.js.map +1 -1
  46. package/dist/cjs/shared/components/BlockDisplay.d.ts +7 -0
  47. package/dist/cjs/shared/components/BlockDisplay.d.ts.map +1 -0
  48. package/dist/cjs/shared/components/BlockDisplay.js +31 -0
  49. package/dist/cjs/shared/components/BlockDisplay.js.map +1 -0
  50. package/dist/cjs/shared/components/CivicAuthIframe.js +18 -8
  51. package/dist/cjs/shared/components/CivicAuthIframe.js.map +1 -1
  52. package/dist/cjs/shared/components/CivicAuthIframeContainer.d.ts.map +1 -1
  53. package/dist/cjs/shared/components/CivicAuthIframeContainer.js +39 -20
  54. package/dist/cjs/shared/components/CivicAuthIframeContainer.js.map +1 -1
  55. package/dist/cjs/shared/components/IFrameAndLoading.d.ts +7 -0
  56. package/dist/cjs/shared/components/IFrameAndLoading.d.ts.map +1 -0
  57. package/dist/cjs/shared/components/IFrameAndLoading.js +28 -0
  58. package/dist/cjs/shared/components/IFrameAndLoading.js.map +1 -0
  59. package/dist/cjs/shared/hooks/index.d.ts +5 -1
  60. package/dist/cjs/shared/hooks/index.d.ts.map +1 -1
  61. package/dist/cjs/shared/hooks/index.js +11 -3
  62. package/dist/cjs/shared/hooks/index.js.map +1 -1
  63. package/dist/cjs/shared/hooks/useCivicAuthConfig.d.ts +3 -0
  64. package/dist/cjs/shared/hooks/useCivicAuthConfig.d.ts.map +1 -0
  65. package/dist/cjs/shared/hooks/useCivicAuthConfig.js +13 -0
  66. package/dist/cjs/shared/hooks/useCivicAuthConfig.js.map +1 -0
  67. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.d.ts +3 -0
  68. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.d.ts.map +1 -0
  69. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.js +16 -0
  70. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.js.map +1 -0
  71. package/dist/cjs/shared/hooks/useCurrentUrl.d.ts +3 -0
  72. package/dist/cjs/shared/hooks/useCurrentUrl.d.ts.map +1 -0
  73. package/dist/cjs/shared/hooks/useCurrentUrl.js +27 -0
  74. package/dist/cjs/shared/hooks/useCurrentUrl.js.map +1 -0
  75. package/dist/cjs/shared/hooks/useIsInIframe.d.ts +3 -0
  76. package/dist/cjs/shared/hooks/useIsInIframe.d.ts.map +1 -0
  77. package/dist/cjs/shared/hooks/useIsInIframe.js +17 -0
  78. package/dist/cjs/shared/hooks/useIsInIframe.js.map +1 -0
  79. package/dist/cjs/shared/hooks/useOAuthEndpoints.d.ts +4 -0
  80. package/dist/cjs/shared/hooks/useOAuthEndpoints.d.ts.map +1 -0
  81. package/dist/cjs/shared/hooks/useOAuthEndpoints.js +17 -0
  82. package/dist/cjs/shared/hooks/useOAuthEndpoints.js.map +1 -0
  83. package/dist/cjs/shared/hooks/useRefresh.d.ts +4 -0
  84. package/dist/cjs/shared/hooks/useRefresh.d.ts.map +1 -0
  85. package/dist/cjs/shared/hooks/useRefresh.js +41 -0
  86. package/dist/cjs/shared/hooks/useRefresh.js.map +1 -0
  87. package/dist/cjs/shared/hooks/useSession.d.ts +1 -1
  88. package/dist/cjs/shared/hooks/useSession.d.ts.map +1 -1
  89. package/dist/cjs/shared/hooks/useSignIn.d.ts +14 -0
  90. package/dist/cjs/shared/hooks/useSignIn.d.ts.map +1 -0
  91. package/dist/cjs/shared/hooks/useSignIn.js +74 -0
  92. package/dist/cjs/shared/hooks/useSignIn.js.map +1 -0
  93. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.d.ts +4 -0
  94. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  95. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.js +30 -0
  96. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  97. package/dist/cjs/shared/lib/session.d.ts +1 -1
  98. package/dist/cjs/shared/lib/session.d.ts.map +1 -1
  99. package/dist/cjs/shared/lib/session.js +12 -1
  100. package/dist/cjs/shared/lib/session.js.map +1 -1
  101. package/dist/cjs/shared/lib/types.d.ts +14 -1
  102. package/dist/cjs/shared/lib/types.d.ts.map +1 -1
  103. package/dist/cjs/shared/lib/types.js +2 -0
  104. package/dist/cjs/shared/lib/types.js.map +1 -1
  105. package/dist/cjs/shared/lib/util.d.ts.map +1 -1
  106. package/dist/cjs/shared/lib/util.js +28 -9
  107. package/dist/cjs/shared/lib/util.js.map +1 -1
  108. package/dist/cjs/shared/providers/AuthProvider.d.ts +3 -2
  109. package/dist/cjs/shared/providers/AuthProvider.d.ts.map +1 -1
  110. package/dist/cjs/shared/providers/AuthProvider.js +53 -244
  111. package/dist/cjs/shared/providers/AuthProvider.js.map +1 -1
  112. package/dist/cjs/shared/providers/CivicAuthConfigContext.d.ts +16 -0
  113. package/dist/cjs/shared/providers/CivicAuthConfigContext.d.ts.map +1 -0
  114. package/dist/cjs/shared/providers/CivicAuthConfigContext.js +80 -0
  115. package/dist/cjs/shared/providers/CivicAuthConfigContext.js.map +1 -0
  116. package/dist/cjs/shared/providers/CivicAuthProvider.d.ts.map +1 -1
  117. package/dist/cjs/shared/providers/CivicAuthProvider.js +23 -6
  118. package/dist/cjs/shared/providers/CivicAuthProvider.js.map +1 -1
  119. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.d.ts +17 -0
  120. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.d.ts.map +1 -0
  121. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.js +183 -0
  122. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.js.map +1 -0
  123. package/dist/cjs/shared/providers/IframeProvider.d.ts +7 -4
  124. package/dist/cjs/shared/providers/IframeProvider.d.ts.map +1 -1
  125. package/dist/cjs/shared/providers/IframeProvider.js +37 -9
  126. package/dist/cjs/shared/providers/IframeProvider.js.map +1 -1
  127. package/dist/cjs/shared/providers/SessionProvider.d.ts +10 -4
  128. package/dist/cjs/shared/providers/SessionProvider.d.ts.map +1 -1
  129. package/dist/cjs/shared/providers/SessionProvider.js +32 -12
  130. package/dist/cjs/shared/providers/SessionProvider.js.map +1 -1
  131. package/dist/cjs/shared/providers/TokenProvider.d.ts.map +1 -1
  132. package/dist/cjs/shared/providers/TokenProvider.js +29 -30
  133. package/dist/cjs/shared/providers/TokenProvider.js.map +1 -1
  134. package/dist/cjs/shared/providers/UserProvider.d.ts +6 -4
  135. package/dist/cjs/shared/providers/UserProvider.d.ts.map +1 -1
  136. package/dist/cjs/shared/providers/UserProvider.js +49 -26
  137. package/dist/cjs/shared/providers/UserProvider.js.map +1 -1
  138. package/dist/cjs/types.d.ts +5 -5
  139. package/dist/cjs/types.d.ts.map +1 -1
  140. package/dist/cjs/types.js +4 -0
  141. package/dist/cjs/types.js.map +1 -1
  142. package/dist/cjs/utils.d.ts.map +1 -1
  143. package/dist/esm/browser/storage.d.ts +3 -0
  144. package/dist/esm/browser/storage.d.ts.map +1 -1
  145. package/dist/esm/browser/storage.js +8 -0
  146. package/dist/esm/browser/storage.js.map +1 -1
  147. package/dist/esm/lib/cookies.d.ts +2 -2
  148. package/dist/esm/lib/cookies.d.ts.map +1 -1
  149. package/dist/esm/lib/cookies.js +7 -5
  150. package/dist/esm/lib/cookies.js.map +1 -1
  151. package/dist/esm/lib/postMessage.js +1 -1
  152. package/dist/esm/lib/postMessage.js.map +1 -1
  153. package/dist/esm/lib/windowUtil.d.ts.map +1 -1
  154. package/dist/esm/lib/windowUtil.js +1 -0
  155. package/dist/esm/lib/windowUtil.js.map +1 -1
  156. package/dist/esm/nextjs/GetUser.d.ts.map +1 -1
  157. package/dist/esm/nextjs/GetUser.js +2 -13
  158. package/dist/esm/nextjs/GetUser.js.map +1 -1
  159. package/dist/esm/nextjs/config.d.ts.map +1 -1
  160. package/dist/esm/nextjs/config.js +12 -0
  161. package/dist/esm/nextjs/config.js.map +1 -1
  162. package/dist/esm/nextjs/hooks/index.d.ts +1 -1
  163. package/dist/esm/nextjs/hooks/index.d.ts.map +1 -1
  164. package/dist/esm/nextjs/hooks/index.js +1 -1
  165. package/dist/esm/nextjs/hooks/index.js.map +1 -1
  166. package/dist/esm/nextjs/hooks/useUserCookie.d.ts +4 -1
  167. package/dist/esm/nextjs/hooks/useUserCookie.d.ts.map +1 -1
  168. package/dist/esm/nextjs/hooks/useUserCookie.js +45 -17
  169. package/dist/esm/nextjs/hooks/useUserCookie.js.map +1 -1
  170. package/dist/esm/nextjs/providers/NextAuthProvider.d.ts +5 -1
  171. package/dist/esm/nextjs/providers/NextAuthProvider.d.ts.map +1 -1
  172. package/dist/esm/nextjs/providers/NextAuthProvider.js +59 -30
  173. package/dist/esm/nextjs/providers/NextAuthProvider.js.map +1 -1
  174. package/dist/esm/nextjs/routeHandler.js +2 -2
  175. package/dist/esm/nextjs/routeHandler.js.map +1 -1
  176. package/dist/esm/reactjs/components/UserButton.js +3 -3
  177. package/dist/esm/reactjs/components/UserButton.js.map +1 -1
  178. package/dist/esm/reactjs/hooks/index.d.ts +0 -1
  179. package/dist/esm/reactjs/hooks/index.d.ts.map +1 -1
  180. package/dist/esm/reactjs/hooks/index.js +0 -1
  181. package/dist/esm/reactjs/hooks/index.js.map +1 -1
  182. package/dist/esm/services/AuthenticationService.d.ts +4 -1
  183. package/dist/esm/services/AuthenticationService.d.ts.map +1 -1
  184. package/dist/esm/services/AuthenticationService.js +39 -8
  185. package/dist/esm/services/AuthenticationService.js.map +1 -1
  186. package/dist/esm/shared/components/BlockDisplay.d.ts +7 -0
  187. package/dist/esm/shared/components/BlockDisplay.d.ts.map +1 -0
  188. package/dist/esm/shared/components/BlockDisplay.js +25 -0
  189. package/dist/esm/shared/components/BlockDisplay.js.map +1 -0
  190. package/dist/esm/shared/components/CivicAuthIframe.js +1 -1
  191. package/dist/esm/shared/components/CivicAuthIframe.js.map +1 -1
  192. package/dist/esm/shared/components/CivicAuthIframeContainer.d.ts.map +1 -1
  193. package/dist/esm/shared/components/CivicAuthIframeContainer.js +23 -14
  194. package/dist/esm/shared/components/CivicAuthIframeContainer.js.map +1 -1
  195. package/dist/esm/shared/components/IFrameAndLoading.d.ts +7 -0
  196. package/dist/esm/shared/components/IFrameAndLoading.d.ts.map +1 -0
  197. package/dist/esm/shared/components/IFrameAndLoading.js +22 -0
  198. package/dist/esm/shared/components/IFrameAndLoading.js.map +1 -0
  199. package/dist/esm/shared/hooks/index.d.ts +5 -1
  200. package/dist/esm/shared/hooks/index.d.ts.map +1 -1
  201. package/dist/esm/shared/hooks/index.js +5 -1
  202. package/dist/esm/shared/hooks/index.js.map +1 -1
  203. package/dist/esm/shared/hooks/useCivicAuthConfig.d.ts +3 -0
  204. package/dist/esm/shared/hooks/useCivicAuthConfig.d.ts.map +1 -0
  205. package/dist/esm/shared/hooks/useCivicAuthConfig.js +10 -0
  206. package/dist/esm/shared/hooks/useCivicAuthConfig.js.map +1 -0
  207. package/dist/esm/shared/hooks/useClientTokenExchangeSession.d.ts +3 -0
  208. package/dist/esm/shared/hooks/useClientTokenExchangeSession.d.ts.map +1 -0
  209. package/dist/esm/shared/hooks/useClientTokenExchangeSession.js +13 -0
  210. package/dist/esm/shared/hooks/useClientTokenExchangeSession.js.map +1 -0
  211. package/dist/esm/shared/hooks/useCurrentUrl.d.ts +3 -0
  212. package/dist/esm/shared/hooks/useCurrentUrl.d.ts.map +1 -0
  213. package/dist/esm/shared/hooks/useCurrentUrl.js +24 -0
  214. package/dist/esm/shared/hooks/useCurrentUrl.js.map +1 -0
  215. package/dist/esm/shared/hooks/useIsInIframe.d.ts +3 -0
  216. package/dist/esm/shared/hooks/useIsInIframe.d.ts.map +1 -0
  217. package/dist/esm/shared/hooks/useIsInIframe.js +14 -0
  218. package/dist/esm/shared/hooks/useIsInIframe.js.map +1 -0
  219. package/dist/esm/shared/hooks/useOAuthEndpoints.d.ts +4 -0
  220. package/dist/esm/shared/hooks/useOAuthEndpoints.d.ts.map +1 -0
  221. package/dist/esm/shared/hooks/useOAuthEndpoints.js +14 -0
  222. package/dist/esm/shared/hooks/useOAuthEndpoints.js.map +1 -0
  223. package/dist/esm/shared/hooks/useRefresh.d.ts +4 -0
  224. package/dist/esm/shared/hooks/useRefresh.d.ts.map +1 -0
  225. package/dist/esm/shared/hooks/useRefresh.js +38 -0
  226. package/dist/esm/shared/hooks/useRefresh.js.map +1 -0
  227. package/dist/esm/shared/hooks/useSession.d.ts +1 -1
  228. package/dist/esm/shared/hooks/useSession.d.ts.map +1 -1
  229. package/dist/esm/shared/hooks/useSignIn.d.ts +14 -0
  230. package/dist/esm/shared/hooks/useSignIn.d.ts.map +1 -0
  231. package/dist/esm/shared/hooks/useSignIn.js +71 -0
  232. package/dist/esm/shared/hooks/useSignIn.js.map +1 -0
  233. package/dist/esm/shared/lib/GenericAuthenticationRefresher.d.ts +4 -0
  234. package/dist/esm/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  235. package/dist/esm/shared/lib/GenericAuthenticationRefresher.js +30 -0
  236. package/dist/esm/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  237. package/dist/esm/shared/lib/session.d.ts +1 -1
  238. package/dist/esm/shared/lib/session.d.ts.map +1 -1
  239. package/dist/esm/shared/lib/session.js +12 -1
  240. package/dist/esm/shared/lib/session.js.map +1 -1
  241. package/dist/esm/shared/lib/types.d.ts +14 -1
  242. package/dist/esm/shared/lib/types.d.ts.map +1 -1
  243. package/dist/esm/shared/lib/types.js +2 -0
  244. package/dist/esm/shared/lib/types.js.map +1 -1
  245. package/dist/esm/shared/lib/util.d.ts.map +1 -1
  246. package/dist/esm/shared/lib/util.js +11 -2
  247. package/dist/esm/shared/lib/util.js.map +1 -1
  248. package/dist/esm/shared/providers/AuthProvider.d.ts +3 -2
  249. package/dist/esm/shared/providers/AuthProvider.d.ts.map +1 -1
  250. package/dist/esm/shared/providers/AuthProvider.js +37 -238
  251. package/dist/esm/shared/providers/AuthProvider.js.map +1 -1
  252. package/dist/esm/shared/providers/CivicAuthConfigContext.d.ts +16 -0
  253. package/dist/esm/shared/providers/CivicAuthConfigContext.d.ts.map +1 -0
  254. package/dist/esm/shared/providers/CivicAuthConfigContext.js +43 -0
  255. package/dist/esm/shared/providers/CivicAuthConfigContext.js.map +1 -0
  256. package/dist/esm/shared/providers/CivicAuthProvider.d.ts.map +1 -1
  257. package/dist/esm/shared/providers/CivicAuthProvider.js +23 -6
  258. package/dist/esm/shared/providers/CivicAuthProvider.js.map +1 -1
  259. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.d.ts +17 -0
  260. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.d.ts.map +1 -0
  261. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.js +146 -0
  262. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.js.map +1 -0
  263. package/dist/esm/shared/providers/IframeProvider.d.ts +7 -4
  264. package/dist/esm/shared/providers/IframeProvider.d.ts.map +1 -1
  265. package/dist/esm/shared/providers/IframeProvider.js +21 -3
  266. package/dist/esm/shared/providers/IframeProvider.js.map +1 -1
  267. package/dist/esm/shared/providers/SessionProvider.d.ts +10 -4
  268. package/dist/esm/shared/providers/SessionProvider.d.ts.map +1 -1
  269. package/dist/esm/shared/providers/SessionProvider.js +15 -5
  270. package/dist/esm/shared/providers/SessionProvider.js.map +1 -1
  271. package/dist/esm/shared/providers/TokenProvider.d.ts.map +1 -1
  272. package/dist/esm/shared/providers/TokenProvider.js +13 -24
  273. package/dist/esm/shared/providers/TokenProvider.js.map +1 -1
  274. package/dist/esm/shared/providers/UserProvider.d.ts +6 -4
  275. package/dist/esm/shared/providers/UserProvider.d.ts.map +1 -1
  276. package/dist/esm/shared/providers/UserProvider.js +33 -20
  277. package/dist/esm/shared/providers/UserProvider.js.map +1 -1
  278. package/dist/esm/types.d.ts +5 -5
  279. package/dist/esm/types.d.ts.map +1 -1
  280. package/dist/esm/types.js +3 -1
  281. package/dist/esm/types.js.map +1 -1
  282. package/dist/esm/utils.d.ts.map +1 -1
  283. package/dist/src/browser/storage.d.ts +3 -0
  284. package/dist/src/browser/storage.d.ts.map +1 -1
  285. package/dist/src/browser/storage.js +8 -0
  286. package/dist/src/browser/storage.js.map +1 -1
  287. package/dist/src/lib/cookies.d.ts +2 -2
  288. package/dist/src/lib/cookies.d.ts.map +1 -1
  289. package/dist/src/lib/cookies.js +7 -5
  290. package/dist/src/lib/cookies.js.map +1 -1
  291. package/dist/src/lib/postMessage.js +1 -1
  292. package/dist/src/lib/postMessage.js.map +1 -1
  293. package/dist/src/lib/windowUtil.d.ts.map +1 -1
  294. package/dist/src/lib/windowUtil.js +1 -0
  295. package/dist/src/lib/windowUtil.js.map +1 -1
  296. package/dist/src/nextjs/GetUser.d.ts.map +1 -1
  297. package/dist/src/nextjs/GetUser.js +2 -13
  298. package/dist/src/nextjs/GetUser.js.map +1 -1
  299. package/dist/src/nextjs/config.d.ts.map +1 -1
  300. package/dist/src/nextjs/config.js +12 -0
  301. package/dist/src/nextjs/config.js.map +1 -1
  302. package/dist/src/nextjs/hooks/index.d.ts +1 -1
  303. package/dist/src/nextjs/hooks/index.d.ts.map +1 -1
  304. package/dist/src/nextjs/hooks/index.js +1 -1
  305. package/dist/src/nextjs/hooks/index.js.map +1 -1
  306. package/dist/src/nextjs/hooks/useRefresh.d.ts +4 -0
  307. package/dist/src/nextjs/hooks/useRefresh.d.ts.map +1 -0
  308. package/dist/src/nextjs/hooks/useRefresh.js +38 -0
  309. package/dist/src/nextjs/hooks/useRefresh.js.map +1 -0
  310. package/dist/src/nextjs/hooks/useUserCookie.d.ts +4 -1
  311. package/dist/src/nextjs/hooks/useUserCookie.d.ts.map +1 -1
  312. package/dist/src/nextjs/hooks/useUserCookie.js +45 -17
  313. package/dist/src/nextjs/hooks/useUserCookie.js.map +1 -1
  314. package/dist/src/nextjs/providers/NextAuthProvider.d.ts +5 -1
  315. package/dist/src/nextjs/providers/NextAuthProvider.d.ts.map +1 -1
  316. package/dist/src/nextjs/providers/NextAuthProvider.js +59 -30
  317. package/dist/src/nextjs/providers/NextAuthProvider.js.map +1 -1
  318. package/dist/src/nextjs/routeHandler.js +2 -2
  319. package/dist/src/nextjs/routeHandler.js.map +1 -1
  320. package/dist/src/reactjs/components/UserButton.js +3 -3
  321. package/dist/src/reactjs/components/UserButton.js.map +1 -1
  322. package/dist/src/reactjs/hooks/index.d.ts +0 -1
  323. package/dist/src/reactjs/hooks/index.d.ts.map +1 -1
  324. package/dist/src/reactjs/hooks/index.js +0 -1
  325. package/dist/src/reactjs/hooks/index.js.map +1 -1
  326. package/dist/src/reactjs/hooks/useRefresh.d.ts +4 -0
  327. package/dist/src/reactjs/hooks/useRefresh.d.ts.map +1 -0
  328. package/dist/src/reactjs/hooks/useRefresh.js +28 -0
  329. package/dist/src/reactjs/hooks/useRefresh.js.map +1 -0
  330. package/dist/src/services/AuthenticationService.d.ts +4 -1
  331. package/dist/src/services/AuthenticationService.d.ts.map +1 -1
  332. package/dist/src/services/AuthenticationService.js +39 -8
  333. package/dist/src/services/AuthenticationService.js.map +1 -1
  334. package/dist/src/shared/components/BlockDisplay.d.ts +7 -0
  335. package/dist/src/shared/components/BlockDisplay.d.ts.map +1 -0
  336. package/dist/src/shared/components/BlockDisplay.js +25 -0
  337. package/dist/src/shared/components/BlockDisplay.js.map +1 -0
  338. package/dist/src/shared/components/CivicAuthIframe.js +1 -1
  339. package/dist/src/shared/components/CivicAuthIframe.js.map +1 -1
  340. package/dist/src/shared/components/CivicAuthIframeContainer.d.ts.map +1 -1
  341. package/dist/src/shared/components/CivicAuthIframeContainer.js +23 -14
  342. package/dist/src/shared/components/CivicAuthIframeContainer.js.map +1 -1
  343. package/dist/src/shared/components/IFrameAndLoading.d.ts +7 -0
  344. package/dist/src/shared/components/IFrameAndLoading.d.ts.map +1 -0
  345. package/dist/src/shared/components/IFrameAndLoading.js +22 -0
  346. package/dist/src/shared/components/IFrameAndLoading.js.map +1 -0
  347. package/dist/src/shared/hooks/index.d.ts +5 -1
  348. package/dist/src/shared/hooks/index.d.ts.map +1 -1
  349. package/dist/src/shared/hooks/index.js +5 -1
  350. package/dist/src/shared/hooks/index.js.map +1 -1
  351. package/dist/src/shared/hooks/useCivicAuthConfig.d.ts +3 -0
  352. package/dist/src/shared/hooks/useCivicAuthConfig.d.ts.map +1 -0
  353. package/dist/src/shared/hooks/useCivicAuthConfig.js +10 -0
  354. package/dist/src/shared/hooks/useCivicAuthConfig.js.map +1 -0
  355. package/dist/src/shared/hooks/useClientTokenExchangeSession.d.ts +3 -0
  356. package/dist/src/shared/hooks/useClientTokenExchangeSession.d.ts.map +1 -0
  357. package/dist/src/shared/hooks/useClientTokenExchangeSession.js +13 -0
  358. package/dist/src/shared/hooks/useClientTokenExchangeSession.js.map +1 -0
  359. package/dist/src/shared/hooks/useCurrentUrl.d.ts +3 -0
  360. package/dist/src/shared/hooks/useCurrentUrl.d.ts.map +1 -0
  361. package/dist/src/shared/hooks/useCurrentUrl.js +24 -0
  362. package/dist/src/shared/hooks/useCurrentUrl.js.map +1 -0
  363. package/dist/src/shared/hooks/useIsInIframe.d.ts +3 -0
  364. package/dist/src/shared/hooks/useIsInIframe.d.ts.map +1 -0
  365. package/dist/src/shared/hooks/useIsInIframe.js +14 -0
  366. package/dist/src/shared/hooks/useIsInIframe.js.map +1 -0
  367. package/dist/src/shared/hooks/useOAuthEndpoints.d.ts +4 -0
  368. package/dist/src/shared/hooks/useOAuthEndpoints.d.ts.map +1 -0
  369. package/dist/src/shared/hooks/useOAuthEndpoints.js +14 -0
  370. package/dist/src/shared/hooks/useOAuthEndpoints.js.map +1 -0
  371. package/dist/src/shared/hooks/useRefresh.d.ts +4 -0
  372. package/dist/src/shared/hooks/useRefresh.d.ts.map +1 -0
  373. package/dist/src/shared/hooks/useRefresh.js +38 -0
  374. package/dist/src/shared/hooks/useRefresh.js.map +1 -0
  375. package/dist/src/shared/hooks/useSession.d.ts +1 -1
  376. package/dist/src/shared/hooks/useSession.d.ts.map +1 -1
  377. package/dist/src/shared/hooks/useSignIn.d.ts +14 -0
  378. package/dist/src/shared/hooks/useSignIn.d.ts.map +1 -0
  379. package/dist/src/shared/hooks/useSignIn.js +71 -0
  380. package/dist/src/shared/hooks/useSignIn.js.map +1 -0
  381. package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts +4 -0
  382. package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  383. package/dist/src/shared/lib/GenericAuthenticationRefresher.js +30 -0
  384. package/dist/src/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  385. package/dist/src/shared/lib/session.d.ts +1 -1
  386. package/dist/src/shared/lib/session.d.ts.map +1 -1
  387. package/dist/src/shared/lib/session.js +12 -1
  388. package/dist/src/shared/lib/session.js.map +1 -1
  389. package/dist/src/shared/lib/types.d.ts +14 -1
  390. package/dist/src/shared/lib/types.d.ts.map +1 -1
  391. package/dist/src/shared/lib/types.js +2 -0
  392. package/dist/src/shared/lib/types.js.map +1 -1
  393. package/dist/src/shared/lib/util.d.ts.map +1 -1
  394. package/dist/src/shared/lib/util.js +11 -2
  395. package/dist/src/shared/lib/util.js.map +1 -1
  396. package/dist/src/shared/providers/AuthProvider.d.ts +3 -2
  397. package/dist/src/shared/providers/AuthProvider.d.ts.map +1 -1
  398. package/dist/src/shared/providers/AuthProvider.js +37 -238
  399. package/dist/src/shared/providers/AuthProvider.js.map +1 -1
  400. package/dist/src/shared/providers/CivicAuthConfigContext.d.ts +16 -0
  401. package/dist/src/shared/providers/CivicAuthConfigContext.d.ts.map +1 -0
  402. package/dist/src/shared/providers/CivicAuthConfigContext.js +43 -0
  403. package/dist/src/shared/providers/CivicAuthConfigContext.js.map +1 -0
  404. package/dist/src/shared/providers/CivicAuthProvider.d.ts.map +1 -1
  405. package/dist/src/shared/providers/CivicAuthProvider.js +23 -6
  406. package/dist/src/shared/providers/CivicAuthProvider.js.map +1 -1
  407. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.d.ts +17 -0
  408. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.d.ts.map +1 -0
  409. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.js +146 -0
  410. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.js.map +1 -0
  411. package/dist/src/shared/providers/IframeProvider.d.ts +7 -4
  412. package/dist/src/shared/providers/IframeProvider.d.ts.map +1 -1
  413. package/dist/src/shared/providers/IframeProvider.js +21 -3
  414. package/dist/src/shared/providers/IframeProvider.js.map +1 -1
  415. package/dist/src/shared/providers/SessionProvider.d.ts +10 -4
  416. package/dist/src/shared/providers/SessionProvider.d.ts.map +1 -1
  417. package/dist/src/shared/providers/SessionProvider.js +15 -5
  418. package/dist/src/shared/providers/SessionProvider.js.map +1 -1
  419. package/dist/src/shared/providers/TokenProvider.d.ts.map +1 -1
  420. package/dist/src/shared/providers/TokenProvider.js +13 -24
  421. package/dist/src/shared/providers/TokenProvider.js.map +1 -1
  422. package/dist/src/shared/providers/UserProvider.d.ts +6 -4
  423. package/dist/src/shared/providers/UserProvider.d.ts.map +1 -1
  424. package/dist/src/shared/providers/UserProvider.js +33 -20
  425. package/dist/src/shared/providers/UserProvider.js.map +1 -1
  426. package/dist/src/types.d.ts +5 -5
  427. package/dist/src/types.d.ts.map +1 -1
  428. package/dist/src/types.js +3 -1
  429. package/dist/src/types.js.map +1 -1
  430. package/dist/test/integration/sdk.test.d.ts.map +1 -1
  431. package/dist/test/integration/sdk.test.js +39 -33
  432. package/dist/test/integration/sdk.test.js.map +1 -1
  433. package/dist/test/unit/nextjs/NextAuthProvider.test.js +8 -6
  434. package/dist/test/unit/nextjs/NextAuthProvider.test.js.map +1 -1
  435. package/dist/test/unit/nextjs/getUser.test.js +2 -16
  436. package/dist/test/unit/nextjs/getUser.test.js.map +1 -1
  437. package/dist/test/unit/server/refresh.test.d.ts.map +1 -0
  438. package/dist/test/unit/services/AuthenticationService.test.js +18 -1
  439. package/dist/test/unit/services/AuthenticationService.test.js.map +1 -1
  440. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js +12 -10
  441. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js.map +1 -1
  442. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  443. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  444. package/dist/tsconfig.tsbuildinfo +1 -1
  445. package/package.json +7 -1
  446. package/.eslintignore +0 -3
  447. package/.eslintrc.json +0 -10
  448. package/.prettierignore +0 -3
  449. package/.prettierrc +0 -1
  450. package/.turbo/turbo-build.log +0 -13
  451. package/.turbo/turbo-lint$colon$fix.log +0 -10
  452. package/.turbo/turbo-test.log +0 -1153
  453. package/dist/cjs/nextjs/hooks/useTokenCookie.d.ts +0 -3
  454. package/dist/cjs/nextjs/hooks/useTokenCookie.d.ts.map +0 -1
  455. package/dist/cjs/nextjs/hooks/useTokenCookie.js +0 -41
  456. package/dist/cjs/nextjs/hooks/useTokenCookie.js.map +0 -1
  457. package/dist/cjs/shared/hooks/useConfig.d.ts +0 -3
  458. package/dist/cjs/shared/hooks/useConfig.d.ts.map +0 -1
  459. package/dist/cjs/shared/hooks/useConfig.js +0 -16
  460. package/dist/cjs/shared/hooks/useConfig.js.map +0 -1
  461. package/dist/cjs/shared/providers/ConfigProvider.d.ts +0 -21
  462. package/dist/cjs/shared/providers/ConfigProvider.d.ts.map +0 -1
  463. package/dist/cjs/shared/providers/ConfigProvider.js +0 -46
  464. package/dist/cjs/shared/providers/ConfigProvider.js.map +0 -1
  465. package/dist/esm/nextjs/hooks/useTokenCookie.d.ts +0 -3
  466. package/dist/esm/nextjs/hooks/useTokenCookie.d.ts.map +0 -1
  467. package/dist/esm/nextjs/hooks/useTokenCookie.js +0 -37
  468. package/dist/esm/nextjs/hooks/useTokenCookie.js.map +0 -1
  469. package/dist/esm/shared/hooks/useConfig.d.ts +0 -3
  470. package/dist/esm/shared/hooks/useConfig.d.ts.map +0 -1
  471. package/dist/esm/shared/hooks/useConfig.js +0 -13
  472. package/dist/esm/shared/hooks/useConfig.js.map +0 -1
  473. package/dist/esm/shared/providers/ConfigProvider.d.ts +0 -21
  474. package/dist/esm/shared/providers/ConfigProvider.d.ts.map +0 -1
  475. package/dist/esm/shared/providers/ConfigProvider.js +0 -19
  476. package/dist/esm/shared/providers/ConfigProvider.js.map +0 -1
  477. package/dist/src/config.d.ts +0 -3
  478. package/dist/src/config.js +0 -5
  479. package/dist/src/config.js.map +0 -1
  480. package/dist/src/constants.d.ts +0 -9
  481. package/dist/src/constants.d.ts.map +0 -1
  482. package/dist/src/constants.js +0 -17
  483. package/dist/src/constants.js.map +0 -1
  484. package/dist/src/index.d.ts +0 -4
  485. package/dist/src/index.js +0 -2
  486. package/dist/src/index.js.map +0 -1
  487. package/dist/src/lib/jwt.d.ts +0 -3
  488. package/dist/src/lib/jwt.js +0 -9
  489. package/dist/src/lib/jwt.js.map +0 -1
  490. package/dist/src/lib/logger.d.ts +0 -26
  491. package/dist/src/lib/logger.d.ts.map +0 -1
  492. package/dist/src/lib/logger.js +0 -55
  493. package/dist/src/lib/logger.js.map +0 -1
  494. package/dist/src/lib/oauth.d.ts +0 -19
  495. package/dist/src/lib/oauth.js +0 -60
  496. package/dist/src/lib/oauth.js.map +0 -1
  497. package/dist/src/lib/postMessage.d.ts +0 -4
  498. package/dist/src/lib/windowUtil.d.ts +0 -4
  499. package/dist/src/nextjs/GetUser.d.ts +0 -6
  500. package/dist/src/nextjs/config.d.ts +0 -178
  501. package/dist/src/nextjs/cookies.d.ts +0 -30
  502. package/dist/src/nextjs/cookies.js +0 -112
  503. package/dist/src/nextjs/cookies.js.map +0 -1
  504. package/dist/src/nextjs/index.d.ts +0 -7
  505. package/dist/src/nextjs/index.js +0 -6
  506. package/dist/src/nextjs/index.js.map +0 -1
  507. package/dist/src/nextjs/middleware/index.d.ts +0 -2
  508. package/dist/src/nextjs/middleware/index.js +0 -2
  509. package/dist/src/nextjs/middleware/index.js.map +0 -1
  510. package/dist/src/nextjs/middleware.d.ts +0 -59
  511. package/dist/src/nextjs/middleware.js +0 -107
  512. package/dist/src/nextjs/middleware.js.map +0 -1
  513. package/dist/src/nextjs/routeHandler.d.ts +0 -18
  514. package/dist/src/nextjs/utils.d.ts +0 -3
  515. package/dist/src/nextjs/utils.js +0 -5
  516. package/dist/src/nextjs/utils.js.map +0 -1
  517. package/dist/src/reactjs/components/SignInButton.d.ts +0 -8
  518. package/dist/src/reactjs/components/SignInButton.js +0 -14
  519. package/dist/src/reactjs/components/SignInButton.js.map +0 -1
  520. package/dist/src/reactjs/components/SignOutButton.d.ts +0 -6
  521. package/dist/src/reactjs/components/SignOutButton.js +0 -14
  522. package/dist/src/reactjs/components/SignOutButton.js.map +0 -1
  523. package/dist/src/reactjs/components/UserButton.d.ts +0 -8
  524. package/dist/src/reactjs/components/index.d.ts +0 -6
  525. package/dist/src/reactjs/components/index.js +0 -6
  526. package/dist/src/reactjs/components/index.js.map +0 -1
  527. package/dist/src/reactjs/hooks/useAuth.d.ts +0 -3
  528. package/dist/src/reactjs/hooks/useAuth.js +0 -12
  529. package/dist/src/reactjs/hooks/useAuth.js.map +0 -1
  530. package/dist/src/reactjs/hooks/useUser.d.ts +0 -4
  531. package/dist/src/reactjs/hooks/useUser.js +0 -12
  532. package/dist/src/reactjs/hooks/useUser.js.map +0 -1
  533. package/dist/src/reactjs/index.d.ts +0 -6
  534. package/dist/src/reactjs/index.js +0 -8
  535. package/dist/src/reactjs/index.js.map +0 -1
  536. package/dist/src/reactjs/providers/index.d.ts +0 -8
  537. package/dist/src/reactjs/providers/index.js +0 -7
  538. package/dist/src/reactjs/providers/index.js.map +0 -1
  539. package/dist/src/server/ServerAuthenticationResolver.d.ts +0 -19
  540. package/dist/src/server/ServerAuthenticationResolver.js +0 -61
  541. package/dist/src/server/ServerAuthenticationResolver.js.map +0 -1
  542. package/dist/src/server/config.d.ts +0 -9
  543. package/dist/src/server/config.js +0 -2
  544. package/dist/src/server/config.js.map +0 -1
  545. package/dist/src/server/index.d.ts +0 -7
  546. package/dist/src/server/index.js +0 -5
  547. package/dist/src/server/index.js.map +0 -1
  548. package/dist/src/server/login.d.ts +0 -17
  549. package/dist/src/server/login.js +0 -37
  550. package/dist/src/server/login.js.map +0 -1
  551. package/dist/src/server/refresh.d.ts +0 -7
  552. package/dist/src/server/refresh.js +0 -13
  553. package/dist/src/server/refresh.js.map +0 -1
  554. package/dist/src/services/PKCE.d.ts +0 -20
  555. package/dist/src/services/PKCE.js +0 -44
  556. package/dist/src/services/PKCE.js.map +0 -1
  557. package/dist/src/services/types.d.ts +0 -23
  558. package/dist/src/services/types.js +0 -7
  559. package/dist/src/services/types.js.map +0 -1
  560. package/dist/src/shared/components/CivicAuthIframe.d.ts +0 -8
  561. package/dist/src/shared/components/CivicAuthIframeContainer.d.ts +0 -9
  562. package/dist/src/shared/components/CloseIcon.d.ts +0 -4
  563. package/dist/src/shared/components/CloseIcon.d.ts.map +0 -1
  564. package/dist/src/shared/components/CloseIcon.js +0 -6
  565. package/dist/src/shared/components/CloseIcon.js.map +0 -1
  566. package/dist/src/shared/components/LoadingIcon.d.ts +0 -4
  567. package/dist/src/shared/components/LoadingIcon.d.ts.map +0 -1
  568. package/dist/src/shared/components/LoadingIcon.js +0 -30
  569. package/dist/src/shared/components/LoadingIcon.js.map +0 -1
  570. package/dist/src/shared/hooks/useAuth.d.ts +0 -3
  571. package/dist/src/shared/hooks/useAuth.js +0 -12
  572. package/dist/src/shared/hooks/useAuth.js.map +0 -1
  573. package/dist/src/shared/hooks/useIframe.d.ts +0 -3
  574. package/dist/src/shared/hooks/useIframe.js +0 -13
  575. package/dist/src/shared/hooks/useIframe.js.map +0 -1
  576. package/dist/src/shared/hooks/useSession.js +0 -13
  577. package/dist/src/shared/hooks/useSession.js.map +0 -1
  578. package/dist/src/shared/hooks/useToken.d.ts +0 -3
  579. package/dist/src/shared/hooks/useToken.js +0 -12
  580. package/dist/src/shared/hooks/useToken.js.map +0 -1
  581. package/dist/src/shared/lib/UserSession.d.ts +0 -12
  582. package/dist/src/shared/lib/UserSession.js +0 -20
  583. package/dist/src/shared/lib/UserSession.js.map +0 -1
  584. package/dist/src/shared/lib/storage.d.ts +0 -25
  585. package/dist/src/shared/lib/storage.js +0 -17
  586. package/dist/src/shared/lib/storage.js.map +0 -1
  587. package/dist/src/shared/lib/util.d.ts +0 -33
  588. package/dist/src/shared/providers/AuthContext.d.ts +0 -10
  589. package/dist/src/shared/providers/AuthContext.js +0 -3
  590. package/dist/src/shared/providers/AuthContext.js.map +0 -1
  591. package/dist/src/shared/providers/CivicAuthProvider.d.ts +0 -6
  592. package/dist/src/shared/providers/TokenProvider.d.ts +0 -18
  593. package/dist/src/utils.d.ts +0 -15
  594. package/dist/src/utils.d.ts.map +0 -1
  595. package/dist/src/utils.js +0 -43
  596. package/dist/src/utils.js.map +0 -1
  597. package/dist/test/integration/sdk.test.d.ts +0 -2
  598. package/dist/test/support/fixtures.d.ts +0 -26
  599. package/dist/test/support/fixtures.d.ts.map +0 -1
  600. package/dist/test/support/fixtures.js +0 -55
  601. package/dist/test/support/fixtures.js.map +0 -1
  602. package/dist/test/support/tokens.json +0 -26
  603. package/dist/test/unit/lib/oauth.test.d.ts +0 -2
  604. package/dist/test/unit/lib/oauth.test.js +0 -55
  605. package/dist/test/unit/lib/oauth.test.js.map +0 -1
  606. package/dist/test/unit/logger.test.d.ts +0 -2
  607. package/dist/test/unit/logger.test.d.ts.map +0 -1
  608. package/dist/test/unit/logger.test.js +0 -141
  609. package/dist/test/unit/logger.test.js.map +0 -1
  610. package/dist/test/unit/nextjs/NextAuthProvider.test.d.ts +0 -2
  611. package/dist/test/unit/nextjs/config.test.d.ts +0 -2
  612. package/dist/test/unit/nextjs/config.test.js +0 -189
  613. package/dist/test/unit/nextjs/config.test.js.map +0 -1
  614. package/dist/test/unit/nextjs/getUser.test.d.ts +0 -2
  615. package/dist/test/unit/nextjs/middleware.test.d.ts +0 -2
  616. package/dist/test/unit/nextjs/middleware.test.js +0 -113
  617. package/dist/test/unit/nextjs/middleware.test.js.map +0 -1
  618. package/dist/test/unit/nextjs/utils.test.d.ts +0 -2
  619. package/dist/test/unit/nextjs/utils.test.js +0 -13
  620. package/dist/test/unit/nextjs/utils.test.js.map +0 -1
  621. package/dist/test/unit/publicApi/apiSnapshot.test.d.ts +0 -2
  622. package/dist/test/unit/publicApi/apiSnapshot.test.js +0 -10
  623. package/dist/test/unit/publicApi/apiSnapshot.test.js.map +0 -1
  624. package/dist/test/unit/react/components/SignInButton.test.d.ts +0 -2
  625. package/dist/test/unit/react/components/SignInButton.test.js +0 -31
  626. package/dist/test/unit/react/components/SignInButton.test.js.map +0 -1
  627. package/dist/test/unit/react/components/SignOutButton.test.d.ts +0 -2
  628. package/dist/test/unit/react/components/SignOutButton.test.js +0 -30
  629. package/dist/test/unit/react/components/SignOutButton.test.js.map +0 -1
  630. package/dist/test/unit/server/login.test.d.ts +0 -2
  631. package/dist/test/unit/server/login.test.js +0 -127
  632. package/dist/test/unit/server/login.test.js.map +0 -1
  633. package/dist/test/unit/server/session.test.d.ts +0 -2
  634. package/dist/test/unit/server/session.test.js +0 -41
  635. package/dist/test/unit/server/session.test.js.map +0 -1
  636. package/dist/test/unit/services/AuthenticationService.test.d.ts +0 -2
  637. package/dist/test/unit/services/ServerAuthenticationResolver.test.d.ts +0 -2
  638. package/dist/test/unit/services/ServerAuthenticationResolver.test.js +0 -74
  639. package/dist/test/unit/services/ServerAuthenticationResolver.test.js.map +0 -1
  640. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.d.ts +0 -2
  641. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.js +0 -61
  642. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.js.map +0 -1
  643. package/dist/test/unit/shared/UserSession.test.d.ts +0 -2
  644. package/dist/test/unit/shared/UserSession.test.js +0 -37
  645. package/dist/test/unit/shared/UserSession.test.js.map +0 -1
  646. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.d.ts +0 -2
  647. package/dist/test/unit/shared/storage.test.d.ts +0 -2
  648. package/dist/test/unit/shared/storage.test.js +0 -53
  649. package/dist/test/unit/shared/storage.test.js.map +0 -1
  650. package/dist/test/unit/utils.test.d.ts +0 -2
  651. package/dist/test/unit/utils.test.d.ts.map +0 -1
  652. package/dist/test/unit/utils.test.js +0 -40
  653. package/dist/test/unit/utils.test.js.map +0 -1
  654. package/dist/vitest.config.d.ts +0 -3
  655. package/dist/vitest.config.d.ts.map +0 -1
  656. package/dist/vitest.config.js +0 -40
  657. package/dist/vitest.config.js.map +0 -1
  658. package/src/browser/storage.ts +0 -11
  659. package/src/config.ts +0 -6
  660. package/src/constants.ts +0 -29
  661. package/src/index.ts +0 -16
  662. package/src/lib/cookies.ts +0 -28
  663. package/src/lib/jwt.ts +0 -15
  664. package/src/lib/logger.ts +0 -72
  665. package/src/lib/oauth.ts +0 -83
  666. package/src/lib/postMessage.ts +0 -22
  667. package/src/lib/windowUtil.ts +0 -29
  668. package/src/nextjs/GetUser.ts +0 -22
  669. package/src/nextjs/config.ts +0 -203
  670. package/src/nextjs/cookies.ts +0 -162
  671. package/src/nextjs/hooks/index.ts +0 -1
  672. package/src/nextjs/hooks/useTokenCookie.ts +0 -41
  673. package/src/nextjs/hooks/useUserCookie.ts +0 -41
  674. package/src/nextjs/index.ts +0 -20
  675. package/src/nextjs/middleware/index.ts +0 -1
  676. package/src/nextjs/middleware.ts +0 -155
  677. package/src/nextjs/providers/NextAuthProvider.tsx +0 -87
  678. package/src/nextjs/routeHandler.ts +0 -297
  679. package/src/nextjs/utils.ts +0 -9
  680. package/src/reactjs/components/SignInButton.tsx +0 -32
  681. package/src/reactjs/components/SignOutButton.tsx +0 -24
  682. package/src/reactjs/components/UserButton.tsx +0 -239
  683. package/src/reactjs/components/index.ts +0 -5
  684. package/src/reactjs/hooks/index.ts +0 -6
  685. package/src/reactjs/hooks/useAuth.ts +0 -15
  686. package/src/reactjs/hooks/useUser.ts +0 -20
  687. package/src/reactjs/index.ts +0 -19
  688. package/src/reactjs/providers/index.ts +0 -27
  689. package/src/server/ServerAuthenticationResolver.ts +0 -107
  690. package/src/server/config.ts +0 -9
  691. package/src/server/index.ts +0 -13
  692. package/src/server/login.ts +0 -59
  693. package/src/server/refresh.ts +0 -23
  694. package/src/services/AuthenticationService.ts +0 -329
  695. package/src/services/PKCE.ts +0 -45
  696. package/src/services/types.ts +0 -54
  697. package/src/shared/components/CivicAuthIframe.tsx +0 -26
  698. package/src/shared/components/CivicAuthIframeContainer.tsx +0 -195
  699. package/src/shared/components/CloseIcon.tsx +0 -21
  700. package/src/shared/components/LoadingIcon.tsx +0 -53
  701. package/src/shared/hooks/index.ts +0 -4
  702. package/src/shared/hooks/useAuth.ts +0 -15
  703. package/src/shared/hooks/useConfig.ts +0 -14
  704. package/src/shared/hooks/useIframe.ts +0 -14
  705. package/src/shared/hooks/useSession.ts +0 -14
  706. package/src/shared/hooks/useToken.ts +0 -15
  707. package/src/shared/lib/GenericAuthenticationRefresher.ts +0 -75
  708. package/src/shared/lib/UserSession.ts +0 -25
  709. package/src/shared/lib/session.ts +0 -11
  710. package/src/shared/lib/storage.ts +0 -40
  711. package/src/shared/lib/types.ts +0 -26
  712. package/src/shared/lib/util.ts +0 -212
  713. package/src/shared/providers/AuthContext.tsx +0 -11
  714. package/src/shared/providers/AuthProvider.tsx +0 -397
  715. package/src/shared/providers/CivicAuthProvider.tsx +0 -31
  716. package/src/shared/providers/ConfigProvider.tsx +0 -50
  717. package/src/shared/providers/IframeProvider.tsx +0 -34
  718. package/src/shared/providers/SessionProvider.tsx +0 -29
  719. package/src/shared/providers/TokenProvider.tsx +0 -78
  720. package/src/shared/providers/UserProvider.tsx +0 -80
  721. package/src/types.ts +0 -227
  722. package/src/utils.ts +0 -58
  723. package/test/integration/sdk.test.tsx +0 -266
  724. package/test/support/fixtures.ts +0 -56
  725. package/test/support/tokens.json +0 -26
  726. package/test/unit/lib/oauth.test.ts +0 -72
  727. package/test/unit/logger.test.ts +0 -175
  728. package/test/unit/nextjs/NextAuthProvider.test.tsx +0 -38
  729. package/test/unit/nextjs/config.test.ts +0 -218
  730. package/test/unit/nextjs/getUser.test.ts +0 -41
  731. package/test/unit/nextjs/middleware.test.ts +0 -138
  732. package/test/unit/nextjs/routeHandler.test.ts.skipped +0 -369
  733. package/test/unit/nextjs/utils.test.ts +0 -17
  734. package/test/unit/publicApi/__snapshots__/apiSnapshot.test.ts.snap +0 -17
  735. package/test/unit/publicApi/apiSnapshot.test.ts +0 -11
  736. package/test/unit/react/components/SignInButton.test.tsx +0 -50
  737. package/test/unit/react/components/SignOutButton.test.tsx +0 -49
  738. package/test/unit/server/login.test.ts +0 -181
  739. package/test/unit/server/session.test.ts +0 -51
  740. package/test/unit/services/AuthenticationService.test.ts +0 -152
  741. package/test/unit/services/ServerAuthenticationResolver.test.ts +0 -115
  742. package/test/unit/shared/GenericAuthenticationRefresher.test.ts +0 -89
  743. package/test/unit/shared/UserSession.test.ts +0 -42
  744. package/test/unit/shared/components/CivicAuthIframeContainer.test.tsx +0 -154
  745. package/test/unit/shared/storage.test.ts +0 -67
  746. package/test/unit/utils.test.ts +0 -48
  747. package/tsconfig.build.json +0 -9
  748. package/tsconfig.cjs.json +0 -8
  749. package/tsconfig.esm.json +0 -7
  750. package/tsconfig.json +0 -42
  751. package/tsconfig.tsbuildinfo +0 -1
  752. package/vitest.config.ts +0 -41
@@ -16,61 +16,100 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
16
16
  }) : function(o, v) {
17
17
  o["default"] = v;
18
18
  });
19
- var __importStar = (this && this.__importStar) || function (mod) {
20
- if (mod && mod.__esModule) return mod;
21
- var result = {};
22
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
- __setModuleDefault(result, mod);
24
- return result;
25
- };
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
26
36
  Object.defineProperty(exports, "__esModule", { value: true });
27
37
  exports.CivicNextAuthProvider = void 0;
28
38
  /**
29
39
  * A very small context provider for the user object - it takes the user object from the cookie and provides it to the app.
30
40
  */
31
41
  const react_1 = __importStar(require("react"));
32
- const AuthProvider_js_1 = require("../../shared/providers/AuthProvider.js");
33
- const react_query_1 = require("@tanstack/react-query");
34
42
  const config_js_1 = require("../../nextjs/config.js");
35
43
  const utils_js_1 = require("../../nextjs/utils.js");
36
44
  const PKCE_js_1 = require("../../services/PKCE.js");
37
45
  const cookies_js_1 = require("../../nextjs/cookies.js");
38
46
  const UserProvider_js_1 = require("../../shared/providers/UserProvider.js");
39
- const types_js_1 = require("../../shared/lib/types.js");
40
47
  const useUserCookie_js_1 = require("../../nextjs/hooks/useUserCookie.js");
41
- const index_js_1 = require("../../nextjs/hooks/index.js");
42
- const queryClient = new react_query_1.QueryClient();
43
- const CivicNextAuthProviderInternal = ({ children, ...props }) => {
44
- const [redirectUrl, setRedirectUrl] = (0, react_1.useState)("");
48
+ const CivicAuthConfigContext_js_1 = require("../../shared/providers/CivicAuthConfigContext.js");
49
+ const SessionProvider_js_1 = require("../../shared/providers/SessionProvider.js");
50
+ const IframeProvider_js_1 = require("../../shared/providers/IframeProvider.js");
51
+ const TokenProvider_js_1 = require("../../shared/providers/TokenProvider.js");
52
+ const useSignIn_js_1 = require("../../shared/hooks/useSignIn.js");
53
+ const useCivicAuthConfig_js_1 = require("../../shared/hooks/useCivicAuthConfig.js");
54
+ const index_js_1 = require("../../reactjs/index.js");
55
+ const IFrameAndLoading_js_1 = require("../../shared/components/IFrameAndLoading.js");
56
+ const BlockDisplay_js_1 = require("../../shared/components/BlockDisplay.js");
57
+ const LoadingIcon_js_1 = require("../../shared/components/LoadingIcon.js");
58
+ const CivicNextAuthProviderInternal = ({ children, resolvedConfig, ...props }) => {
59
+ const { iframeMode } = props;
60
+ const { iframeRef } = (0, index_js_1.useIframe)();
61
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
62
+ const civicAuthConfig = (0, useCivicAuthConfig_js_1.useCivicAuthConfig)();
63
+ const { challengeUrl, logoutUrl } = resolvedConfig;
64
+ const pkceConsumer = new PKCE_js_1.ConfidentialClientPKCEConsumer(challengeUrl);
65
+ const postSignOut = async () => {
66
+ const appUrl = globalThis.window.location.origin;
67
+ window.location.href = `${logoutUrl}?appUrl=${appUrl}`;
68
+ return;
69
+ };
70
+ const preSignOut = (0, react_1.useCallback)(async () => {
71
+ setIsLoading(true);
72
+ await props?.onSignOut?.();
73
+ }, [props]);
74
+ const { signIn, signOut } = (0, useSignIn_js_1.useSignIn)({
75
+ preSignOut,
76
+ postSignOut,
77
+ pkceConsumer,
78
+ });
79
+ const { user, idToken } = (0, useUserCookie_js_1.useUserCookie)();
80
+ const session = {
81
+ authenticated: !!user,
82
+ idToken,
83
+ };
84
+ (0, react_1.useEffect)(() => {
85
+ if (iframeMode === "embedded" &&
86
+ civicAuthConfig &&
87
+ !session?.authenticated &&
88
+ iframeRef?.current) {
89
+ signIn("iframe");
90
+ }
91
+ }, [iframeMode, civicAuthConfig, session?.authenticated, iframeRef, signIn]);
92
+ return (react_1.default.createElement(SessionProvider_js_1.SessionProvider, { data: session, isLoading: isLoading },
93
+ react_1.default.createElement(TokenProvider_js_1.TokenProvider, null,
94
+ react_1.default.createElement(UserProvider_js_1.UserProvider, { storage: new cookies_js_1.NextjsClientStorage(), user: user, signOut: signOut, signIn: signIn },
95
+ react_1.default.createElement(IFrameAndLoading_js_1.IFrameAndLoading, { isLoading: isLoading, error: null }),
96
+ isLoading && (react_1.default.createElement(BlockDisplay_js_1.BlockDisplay, null,
97
+ react_1.default.createElement(LoadingIcon_js_1.LoadingIcon, null))),
98
+ children))));
99
+ };
100
+ const CivicNextAuthProvider = ({ children, ...props }) => {
45
101
  const resolvedConfig = (0, config_js_1.resolveAuthConfig)();
46
102
  const { clientId, oauthServer, callbackUrl, challengeUrl, logoutUrl } = resolvedConfig;
103
+ const [redirectUrl, setRedirectUrl] = (0, react_1.useState)("");
47
104
  (0, react_1.useEffect)(() => {
48
105
  if (typeof globalThis.window !== "undefined") {
49
106
  const appUrl = globalThis.window.location.origin;
50
107
  setRedirectUrl((0, utils_js_1.resolveCallbackUrl)(resolvedConfig, appUrl));
51
108
  }
52
109
  }, [callbackUrl, resolvedConfig]);
53
- const user = (0, useUserCookie_js_1.useUserCookie)();
54
- const idToken = (0, index_js_1.useTokenCookie)(types_js_1.OAuthTokens.ID_TOKEN);
55
- const combinedUser = user ? { ...(user || {}), idToken } : null;
56
- const sessionData = {
57
- authenticated: !!user,
58
- ...(idToken ? { idToken } : {}),
59
- };
60
- const signOut = async () => {
61
- if (props.onSignOut) {
62
- await props.onSignOut();
63
- }
64
- const appUrl = globalThis.window.location.origin;
65
- window.location.href = `${logoutUrl}?appUrl=${appUrl}`;
66
- return;
67
- };
68
- return (react_1.default.createElement(AuthProvider_js_1.AuthProvider, { ...props, redirectUrl: redirectUrl, config: { oauthServer }, clientId: clientId, pkceConsumer: new PKCE_js_1.ConfidentialClientPKCEConsumer(challengeUrl), sessionData: sessionData },
69
- react_1.default.createElement(UserProvider_js_1.UserProvider, { storage: new cookies_js_1.NextjsClientStorage(), user: combinedUser, signOut: signOut }, children)));
70
- };
71
- const CivicNextAuthProvider = ({ children, ...props }) => {
72
- return (react_1.default.createElement(react_query_1.QueryClientProvider, { client: queryClient },
73
- react_1.default.createElement(CivicNextAuthProviderInternal, { ...props }, children)));
110
+ return (react_1.default.createElement(CivicAuthConfigContext_js_1.CivicAuthConfigProvider, { oauthServer: oauthServer, clientId: clientId, redirectUrl: redirectUrl, nonce: props?.nonce, challengeUrl: challengeUrl, logoutUrl: logoutUrl },
111
+ react_1.default.createElement(IframeProvider_js_1.IframeProvider, { iframeMode: props.iframeMode },
112
+ react_1.default.createElement(CivicNextAuthProviderInternal, { ...props, resolvedConfig: resolvedConfig }, children))));
74
113
  };
75
114
  exports.CivicNextAuthProvider = CivicNextAuthProvider;
76
115
  //# sourceMappingURL=NextAuthProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NextAuthProvider.js","sourceRoot":"","sources":["../../../../src/nextjs/providers/NextAuthProvider.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;AACb;;GAEG;AACH,+CAAmD;AAEnD,wEAAkE;AAClE,uDAAyE;AAEzE,kDAAuD;AACvD,gDAAuD;AACvD,gDAAoE;AACpE,oDAA0D;AAC1D,wEAAkE;AAClE,oDAAoD;AACpD,sEAAgE;AAChE,sDAAyD;AAEzD,MAAM,WAAW,GAAG,IAAI,yBAAW,EAAE,CAAC;AAItC,MAAM,6BAA6B,GAAG,CAAC,EACrC,QAAQ,EACR,GAAG,KAAK,EACmB,EAAE,EAAE;IAC/B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAS,EAAE,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,IAAA,6BAAiB,GAAE,CAAC;IAC3C,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,GACnE,cAAc,CAAC;IAEjB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,OAAO,UAAU,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjD,cAAc,CAAC,IAAA,6BAAkB,EAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IAElC,MAAM,IAAI,GAAG,IAAA,gCAAa,GAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAA,yBAAc,EAAC,sBAAW,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAE,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,OAAO,EAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,MAAM,WAAW,GAAG;QAClB,aAAa,EAAE,CAAC,CAAC,IAAI;QACrB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,IAAmB,EAAE;QACxC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;QAC1B,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjD,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,SAAS,WAAW,MAAM,EAAE,CAAC;QACvD,OAAO;IACT,CAAC,CAAC;IACF,OAAO,CACL,8BAAC,8BAAY,OACP,KAAK,EACT,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,EAAE,WAAW,EAAE,EACvB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,IAAI,wCAA8B,CAAC,YAAY,CAAC,EAC9D,WAAW,EAAE,WAAW;QAExB,8BAAC,8BAAY,IACX,OAAO,EAAE,IAAI,gCAAmB,EAAE,EAClC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,OAAO,IAEf,QAAQ,CACI,CACF,CAChB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,EAC7B,QAAQ,EACR,GAAG,KAAK,EACmB,EAAE,EAAE;IAC/B,OAAO,CACL,8BAAC,iCAAmB,IAAC,MAAM,EAAE,WAAW;QACtC,8BAAC,6BAA6B,OAAK,KAAK,IACrC,QAAQ,CACqB,CACZ,CACvB,CAAC;AACJ,CAAC,CAAC;AAEO,sDAAqB","sourcesContent":["\"use client\";\n/**\n * A very small context provider for the user object - it takes the user object from the cookie and provides it to the app.\n */\nimport React, { useEffect, useState } from \"react\";\nimport type { AuthProviderProps } from \"@/shared/providers/AuthProvider.js\";\nimport { AuthProvider } from \"@/shared/providers/AuthProvider.js\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport type { User } from \"@/types.js\";\nimport { resolveAuthConfig } from \"@/nextjs/config.js\";\nimport { resolveCallbackUrl } from \"@/nextjs/utils.js\";\nimport { ConfidentialClientPKCEConsumer } from \"@/services/PKCE.js\";\nimport { NextjsClientStorage } from \"@/nextjs/cookies.js\";\nimport { UserProvider } from \"@/shared/providers/UserProvider.js\";\nimport { OAuthTokens } from \"@/shared/lib/types.js\";\nimport { useUserCookie } from \"@/nextjs/hooks/useUserCookie.js\";\nimport { useTokenCookie } from \"@/nextjs/hooks/index.js\";\n\nconst queryClient = new QueryClient();\n\ntype NextCivicAuthProviderProps = Omit<AuthProviderProps, \"clientId\">;\n\nconst CivicNextAuthProviderInternal = ({\n children,\n ...props\n}: NextCivicAuthProviderProps) => {\n const [redirectUrl, setRedirectUrl] = useState<string>(\"\");\n const resolvedConfig = resolveAuthConfig();\n const { clientId, oauthServer, callbackUrl, challengeUrl, logoutUrl } =\n resolvedConfig;\n\n useEffect(() => {\n if (typeof globalThis.window !== \"undefined\") {\n const appUrl = globalThis.window.location.origin;\n setRedirectUrl(resolveCallbackUrl(resolvedConfig, appUrl));\n }\n }, [callbackUrl, resolvedConfig]);\n\n const user = useUserCookie();\n const idToken = useTokenCookie(OAuthTokens.ID_TOKEN);\n const combinedUser = user ? ({ ...(user || {}), idToken } as User) : null;\n const sessionData = {\n authenticated: !!user,\n ...(idToken ? { idToken } : {}),\n };\n const signOut = async (): Promise<void> => {\n if (props.onSignOut) {\n await props.onSignOut();\n }\n const appUrl = globalThis.window.location.origin;\n window.location.href = `${logoutUrl}?appUrl=${appUrl}`;\n return;\n };\n return (\n <AuthProvider\n {...props}\n redirectUrl={redirectUrl}\n config={{ oauthServer }}\n clientId={clientId}\n pkceConsumer={new ConfidentialClientPKCEConsumer(challengeUrl)}\n sessionData={sessionData}\n >\n <UserProvider\n storage={new NextjsClientStorage()}\n user={combinedUser}\n signOut={signOut}\n >\n {children}\n </UserProvider>\n </AuthProvider>\n );\n};\n\nconst CivicNextAuthProvider = ({\n children,\n ...props\n}: NextCivicAuthProviderProps) => {\n return (\n <QueryClientProvider client={queryClient}>\n <CivicNextAuthProviderInternal {...props}>\n {children}\n </CivicNextAuthProviderInternal>\n </QueryClientProvider>\n );\n};\n\nexport { CivicNextAuthProvider, type NextCivicAuthProviderProps };\n"]}
1
+ {"version":3,"file":"NextAuthProvider.js","sourceRoot":"","sources":["../../../../src/nextjs/providers/NextAuthProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n/**\n * A very small context provider for the user object - it takes the user object from the cookie and provides it to the app.\n */\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport type { AuthProviderProps } from \"@/shared/providers/AuthProvider.js\";\nimport {\n resolveAuthConfig,\n type AuthConfigWithDefaults,\n} from \"@/nextjs/config.js\";\nimport { resolveCallbackUrl } from \"@/nextjs/utils.js\";\nimport { ConfidentialClientPKCEConsumer } from \"@/services/PKCE.js\";\nimport { NextjsClientStorage } from \"@/nextjs/cookies.js\";\nimport { UserProvider } from \"@/shared/providers/UserProvider.js\";\nimport { useUserCookie } from \"@/nextjs/hooks/useUserCookie.js\";\nimport { CivicAuthConfigProvider } from \"@/shared/providers/CivicAuthConfigContext.js\";\nimport { SessionProvider } from \"@/shared/providers/SessionProvider.js\";\nimport { IframeProvider } from \"@/shared/providers/IframeProvider.js\";\nimport { TokenProvider } from \"@/shared/providers/TokenProvider.js\";\nimport { useSignIn } from \"@/shared/hooks/useSignIn.js\";\nimport { useCivicAuthConfig } from \"@/shared/hooks/useCivicAuthConfig.js\";\nimport { useIframe } from \"@/reactjs/index.js\";\nimport { IFrameAndLoading } from \"@/shared/components/IFrameAndLoading.js\";\nimport { BlockDisplay } from \"@/shared/components/BlockDisplay.js\";\nimport { LoadingIcon } from \"@/shared/components/LoadingIcon.js\";\n\ntype InternalNextCivicAuthProviderProps = Omit<\n AuthProviderProps,\n \"clientId\"\n> & {\n resolvedConfig: AuthConfigWithDefaults;\n};\ntype NextCivicAuthProviderProps = Omit<\n InternalNextCivicAuthProviderProps,\n \"clientId\" | \"resolvedConfig\" | \"redirectUrl\"\n>;\n\nconst CivicNextAuthProviderInternal = ({\n children,\n resolvedConfig,\n ...props\n}: InternalNextCivicAuthProviderProps) => {\n const { iframeMode } = props;\n const { iframeRef } = useIframe();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const civicAuthConfig = useCivicAuthConfig();\n const { challengeUrl, logoutUrl } = resolvedConfig;\n const pkceConsumer = new ConfidentialClientPKCEConsumer(challengeUrl);\n const postSignOut = async (): Promise<void> => {\n const appUrl = globalThis.window.location.origin;\n window.location.href = `${logoutUrl}?appUrl=${appUrl}`;\n return;\n };\n\n const preSignOut = useCallback(async () => {\n setIsLoading(true);\n await props?.onSignOut?.();\n }, [props]);\n\n const { signIn, signOut } = useSignIn({\n preSignOut,\n postSignOut,\n pkceConsumer,\n });\n\n const { user, idToken } = useUserCookie();\n const session = {\n authenticated: !!user,\n idToken,\n };\n\n useEffect(() => {\n if (\n iframeMode === \"embedded\" &&\n civicAuthConfig &&\n !session?.authenticated &&\n iframeRef?.current\n ) {\n signIn(\"iframe\");\n }\n }, [iframeMode, civicAuthConfig, session?.authenticated, iframeRef, signIn]);\n return (\n <SessionProvider data={session} isLoading={isLoading}>\n <TokenProvider>\n <UserProvider\n storage={new NextjsClientStorage()}\n user={user}\n signOut={signOut}\n signIn={signIn}\n >\n <IFrameAndLoading isLoading={isLoading} error={null} />\n {isLoading && (\n <BlockDisplay>\n <LoadingIcon />\n </BlockDisplay>\n )}\n {children}\n </UserProvider>\n </TokenProvider>\n </SessionProvider>\n );\n};\n\nconst CivicNextAuthProvider = ({\n children,\n ...props\n}: NextCivicAuthProviderProps) => {\n const resolvedConfig = resolveAuthConfig();\n const { clientId, oauthServer, callbackUrl, challengeUrl, logoutUrl } =\n resolvedConfig;\n const [redirectUrl, setRedirectUrl] = useState<string>(\"\");\n useEffect(() => {\n if (typeof globalThis.window !== \"undefined\") {\n const appUrl = globalThis.window.location.origin;\n setRedirectUrl(resolveCallbackUrl(resolvedConfig, appUrl));\n }\n }, [callbackUrl, resolvedConfig]);\n\n return (\n <CivicAuthConfigProvider\n oauthServer={oauthServer}\n clientId={clientId}\n redirectUrl={redirectUrl}\n nonce={props?.nonce}\n challengeUrl={challengeUrl}\n logoutUrl={logoutUrl}\n >\n <IframeProvider iframeMode={props.iframeMode}>\n <CivicNextAuthProviderInternal\n {...props}\n resolvedConfig={resolvedConfig}\n >\n {children}\n </CivicNextAuthProviderInternal>\n </IframeProvider>\n </CivicAuthConfigProvider>\n );\n};\n\nexport { CivicNextAuthProvider, type NextCivicAuthProviderProps };\n"]}
@@ -9,7 +9,7 @@ const logger_js_1 = require("../lib/logger.js");
9
9
  const cookies_js_1 = require("../nextjs/cookies.js");
10
10
  const PKCE_js_1 = require("../services/PKCE.js");
11
11
  const login_js_1 = require("../server/login.js");
12
- const session_js_1 = require("../shared/lib/session.js");
12
+ const GetUser_js_1 = require("../nextjs/GetUser.js");
13
13
  const utils_js_1 = require("../nextjs/utils.js");
14
14
  const UserSession_js_1 = require("../shared/lib/UserSession.js");
15
15
  const constants_js_1 = require("../constants.js");
@@ -53,7 +53,7 @@ async function performTokenExchangeAndSetCookies(request, config, code, state, a
53
53
  logger.error("Token exchange failed:", error);
54
54
  throw new AuthError("Failed to authenticate user", 401);
55
55
  }
56
- const user = await (0, session_js_1.getUser)(cookieStorage);
56
+ const user = await (0, GetUser_js_1.getUser)();
57
57
  if (!user) {
58
58
  throw new AuthError("Failed to get user info", 401);
59
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"routeHandler.js","sourceRoot":"","sources":["../../../src/nextjs/routeHandler.ts"],"names":[],"mappings":";;;AA2NA,oCA+BC;AAzPD,8CAA8C;AAC9C,4CAA+C;AAE/C,kDAAuD;AACvD,+CAA0C;AAC1C,oDAI6B;AAC7B,gDAAqE;AACrE,gDAA2D;AAC3D,wDAAkD;AAClD,gDAAuD;AACvD,gEAAiE;AACjE,iDAGwB;AACxB,6CAA8D;AAC9D,oDAAqD;AAErD,MAAM,MAAM,GAAG,mBAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AAE5C,MAAM,SAAU,SAAQ,KAAK;IAGT;IAFlB,YACE,OAAe,EACC,SAAiB,GAAG;QAEpC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,WAAM,GAAN,MAAM,CAAc;QAGpC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED;;;;GAIG;AACH,KAAK,UAAU,eAAe,CAC5B,OAAoB,EACpB,MAAkB;IAElB,MAAM,aAAa,GAAG,IAAI,gCAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,IAAI,yCAA+B,CAAC,aAAa,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,MAAM,EAAE,CAAC;QACX,aAAa,CAAC,GAAG,CAAC,uBAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,wBAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,iCAAiC,CAC9C,OAAoB,EACpB,MAAkB,EAClB,IAAY,EACZ,KAAa,EACb,MAAc;IAEd,MAAM,eAAe,GAAG,IAAA,6BAAiB,EAAC,MAAM,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,IAAI,gCAAmB,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9E,MAAM,WAAW,GAAG,IAAA,6BAAkB,EAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,IAAA,iCAAsB,EAAC,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE;YACvD,GAAG,eAAe;YAClB,WAAW,EAAE,WAAW;SACzB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAO,EAAC,aAAa,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,SAAS,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,gCAAmB,EAAE,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,mCAAkB,CAAC,aAAa,CAAC,CAAC;IAC1D,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AACD,KAAK,UAAU,cAAc,CAC3B,OAAoB,EACpB,MAAkB;IAElB,MAAM,eAAe,GAAG,IAAA,6BAAiB,EAAC,MAAM,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC9D,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAEhE,qEAAqE;IACrE,mGAAmG;IACnG,+FAA+F;IAC/F,MAAM,MAAM,GACV,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAY,CAAC,OAAO,CAAC,EAAE,KAAK;QAChD,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE7C,gFAAgF;IAChF,wCAAwC;IACxC,yHAAyH;IACzH,wHAAwH;IACxH,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE;QAC5B,IAAI;QACJ,KAAK;QACL,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAY,CAAC,WAAW,CAAC,CAAC;IAEnE,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE;YACnD,KAAK;YACL,mBAAmB,EAAE,IAAA,uCAA4B,EAAC,GAAG,KAAK,EAAE,CAAC;SAC9D,CAAC,CAAC;QACH,IAAI,QAAQ,GAAG,IAAI,wBAAY,CAC7B,0CAA0C,0CAA2B,uBAAuB,CAC7F,CAAC;QAEF,mGAAmG;QACnG,uEAAuE;QACvE,wGAAwG;QACxG,sCAAsC;QACtC,IAAI,KAAK,IAAI,IAAA,uCAA4B,EAAC,KAAK,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CACT,yEAAyE,EACzE;gBACE,UAAU,EAAE,OAAO,CAAC,GAAG;gBACvB,iBAAiB,EAAE,eAAe,CAAC,WAAW;aAC/C,CACF,CAAC;YACF,+EAA+E;YAC/E,0CAA0C;YAC1C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,GAAG,eAAe,CAAC,WAAW,IAAI,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,qCAAqC,CAAC;YAC3H,QAAQ,GAAG,IAAI,wBAAY,CACzB;;;;;;qCAM6B,QAAQ;;;;;;;;;;;;SAYpC,CACF,CAAC;QACJ,CAAC;QACD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CACT,oDAAoD,0CAA2B,EAAE,CAClF,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,iCAAiC,CACrC,OAAO,EACP,eAAe,EACf,IAAI,EACJ,KAAK,EACL,MAAM,CACP,CAAC;IAEF,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,oCAAoC,CAAC,EAAE,CAAC;QAC/D,OAAO,CAAC,GAAG,CACT,8EAA8E,EAC9E,MAAM,CACP,CAAC;QACF,OAAO,wBAAY,CAAC,IAAI,CAAC;YACvB,MAAM,EAAE,SAAS;YACjB,WAAW,EAAE,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAED,0DAA0D;IAC1D,IAAI,IAAA,uCAA4B,EAAC,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CACT,iEAAiE,EACjE,MAAM,CACP,CAAC;QACF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,wBAAY,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,wEAAwE;IACxE,iEAAiE;IACjE,oDAAoD;IACpD,MAAM,QAAQ,GAAG,IAAI,wBAAY,CAC/B,oCAAoC,0CAA2B,gBAAgB,CAChF,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;IACjE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,CAC9B,YAAoB,EACpB,eAAuB,EACvB,EAAE,CAAC,IAAI,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC;AAE1C,KAAK,UAAU,YAAY,CAChC,OAAoB,EACpB,MAAkB;IAElB,MAAM,eAAe,GAAG,IAAA,6BAAiB,EAAC,MAAM,CAAC,CAAC;IAClD,MAAM,mBAAmB,GAAG,eAAe,CAAC,QAAQ,IAAI,GAAG,CAAC;IAC5D,MAAM,cAAc,GAClB,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,mBAAmB,CAAC;IAE3E,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAE1E,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE1D,MAAM,gBAAgB,GAAG,kBAAkB;QACzC,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,uBAAuB,CACrB,cAAc,EACd,IAAI,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CACtC,CAAC;IAEN,MAAM,QAAQ,GAAG,wBAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAEzD,MAAM,IAAA,6BAAgB,EAAC,MAAM,CAAC,CAAC;IAE/B,IAAI,CAAC;QACH,IAAA,yBAAc,EAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;GAWG;AACI,MAAM,OAAO,GAClB,CAAC,UAAU,GAAG,EAAE,EAAE,EAAE,CACpB,KAAK,EAAE,OAAoB,EAAyB,EAAE;IACpD,MAAM,MAAM,GAAG,IAAA,6BAAiB,EAAC,UAAU,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC1C,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE1D,QAAQ,WAAW,EAAE,CAAC;YACpB,KAAK,WAAW;gBACd,OAAO,MAAM,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAChD,KAAK,UAAU;gBACb,OAAO,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC/C,KAAK,QAAQ;gBACX,OAAO,MAAM,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7C;gBACE,MAAM,IAAI,SAAS,CAAC,uBAAuB,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAE3C,MAAM,MAAM,GAAG,KAAK,YAAY,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/D,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC;QAEnE,MAAM,QAAQ,GAAG,wBAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnE,IAAA,6BAAgB,EAAC,MAAM,CAAC,CAAC;QACzB,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC,CAAC;AAhCS,QAAA,OAAO,WAgChB","sourcesContent":["import type { NextRequest } from \"next/server.js\";\nimport { NextResponse } from \"next/server.js\";\nimport { revalidatePath } from \"next/cache.js\";\nimport type { AuthConfig } from \"@/nextjs/config.js\";\nimport { resolveAuthConfig } from \"@/nextjs/config.js\";\nimport { loggers } from \"@/lib/logger.js\";\nimport {\n clearAuthCookies,\n NextjsClientStorage,\n NextjsCookieStorage,\n} from \"@/nextjs/cookies.js\";\nimport { GenericPublicClientPKCEProducer } from \"@/services/PKCE.js\";\nimport { resolveOAuthAccessCode } from \"@/server/login.js\";\nimport { getUser } from \"@/shared/lib/session.js\";\nimport { resolveCallbackUrl } from \"@/nextjs/utils.js\";\nimport { GenericUserSession } from \"@/shared/lib/UserSession.js\";\nimport {\n TOKEN_EXCHANGE_SUCCESS_TEXT,\n TOKEN_EXCHANGE_TRIGGER_TEXT,\n} from \"@/constants.js\";\nimport { serverTokenExchangeFromState } from \"@/lib/oauth.js\";\nimport { CodeVerifier } from \"@/shared/lib/types.js\";\n\nconst logger = loggers.nextjs.handlers.auth;\n\nclass AuthError extends Error {\n constructor(\n message: string,\n public readonly status: number = 401,\n ) {\n super(message);\n this.name = \"AuthError\";\n }\n}\n\n/**\n * create a code verifier and challenge for PKCE\n * saving the verifier in a cookie for later use\n * @returns {Promise<NextResponse>}\n */\nasync function handleChallenge(\n request: NextRequest,\n config: AuthConfig,\n): Promise<NextResponse> {\n const cookieStorage = new NextjsCookieStorage(config.cookies?.tokens ?? {});\n const pkceProducer = new GenericPublicClientPKCEProducer(cookieStorage);\n\n const challenge = await pkceProducer.getCodeChallenge();\n const appUrl = request.nextUrl.searchParams.get(\"appUrl\");\n if (appUrl) {\n cookieStorage.set(CodeVerifier.APP_URL, appUrl);\n }\n return NextResponse.json({ status: \"success\", challenge });\n}\n\nasync function performTokenExchangeAndSetCookies(\n request: NextRequest,\n config: AuthConfig,\n code: string,\n state: string,\n appUrl: string,\n) {\n const resolvedConfigs = resolveAuthConfig(config);\n const cookieStorage = new NextjsCookieStorage(resolvedConfigs.cookies.tokens);\n\n const callbackUrl = resolveCallbackUrl(resolvedConfigs, appUrl);\n try {\n await resolveOAuthAccessCode(code, state, cookieStorage, {\n ...resolvedConfigs,\n redirectUrl: callbackUrl,\n });\n } catch (error) {\n logger.error(\"Token exchange failed:\", error);\n throw new AuthError(\"Failed to authenticate user\", 401);\n }\n\n const user = await getUser(cookieStorage);\n if (!user) {\n throw new AuthError(\"Failed to get user info\", 401);\n }\n\n const clientStorage = new NextjsClientStorage();\n const userSession = new GenericUserSession(clientStorage);\n userSession.set(user);\n}\nasync function handleCallback(\n request: NextRequest,\n config: AuthConfig,\n): Promise<NextResponse> {\n const resolvedConfigs = resolveAuthConfig(config);\n console.log(\"handleCallback\", { request, resolvedConfigs });\n const code = request.nextUrl.searchParams.get(\"code\");\n const state = request.nextUrl.searchParams.get(\"state\") || \"\";\n if (!code || !state) throw new AuthError(\"Bad parameters\", 400);\n\n // appUrl is passed from the client to the server in the query string\n // this is necessary because the server does not have access to the client's window.location.origin\n // and can not accurately determine the appUrl (specially if the app is behind a reverse proxy)\n const appUrl =\n request.cookies.get(CodeVerifier.APP_URL)?.value ||\n request.nextUrl.searchParams.get(\"appUrl\");\n\n // If we have a code_verifier cookie and the appUrl, we can do a token exchange.\n // Otherwise, just render an empty page.\n // The initial redirect back from the auth server does not send cookies, because the redirect is from a 3rd-party domain.\n // The client will make an additional call to this route with cookies included, at which point we do the token exchange.\n console.log(\"handleCallback\", {\n code,\n state,\n appUrl,\n });\n\n const codeVerifier = request.cookies.get(CodeVerifier.COOKIE_NAME);\n\n if (!codeVerifier || !appUrl) {\n console.log(\"handleCallback no code_verifier found\", {\n state,\n serverTokenExchange: serverTokenExchangeFromState(`${state}`),\n });\n let response = new NextResponse(\n `<html><body><span style=\"display:none\">${TOKEN_EXCHANGE_TRIGGER_TEXT}</span></body></html>`,\n );\n\n // in server-side token exchange mode we need to launch a page that will trigger the token exchange\n // from the same domain, allowing it access to the code_verifier cookie\n // we only need to do this in redirect mode, as the iframe already triggers a client-side token exchange\n // if no code-verifier cookie is found\n if (state && serverTokenExchangeFromState(state)) {\n console.log(\n \"handleCallback serverTokenExchangeFromState, launching redirect page...\",\n {\n requestUrl: request.url,\n configCallbackUrl: resolvedConfigs.callbackUrl,\n },\n );\n // we need to replace the URL with resolved config in case the server is hosted\n // behind a reverse proxy or load balancer\n const requestUrl = new URL(request.url);\n const fetchUrl = `${resolvedConfigs.callbackUrl}?${requestUrl.searchParams.toString()}&sameDomainServerTokenExchange=true`;\n response = new NextResponse(\n `<html>\n <body>\n <span style=\"display:none\">\n <script>\n window.onload = function () {\n const appUrl = globalThis.window?.location?.origin;\n fetch('${fetchUrl}&appUrl=' + appUrl).then((response) => {\n response.json().then((jsonResponse) => {\n if (jsonResponse.redirectUrl) {\n window.location.href = jsonResponse.redirectUrl;\n }\n });\n });\n };\n </script>\n </span>\n </body>\n </html>\n `,\n );\n }\n response.headers.set(\"Content-Type\", \"text/html; charset=utf-8\");\n console.log(\n `handleCallback no code_verifier found, returning ${TOKEN_EXCHANGE_TRIGGER_TEXT}`,\n );\n return response;\n }\n\n await performTokenExchangeAndSetCookies(\n request,\n resolvedConfigs,\n code,\n state,\n appUrl,\n );\n\n if (request.url.includes(\"sameDomainServerTokenExchange=true\")) {\n console.log(\n \"handleCallback sameDomainServerTokenExchange = true, returnining redirectUrl\",\n appUrl,\n );\n return NextResponse.json({\n status: \"success\",\n redirectUrl: appUrl,\n });\n }\n\n // this is the case where a 'normal' redirect is happening\n if (serverTokenExchangeFromState(state)) {\n console.log(\n \"handleCallback serverTokenExchangeFromState, redirect to appUrl\",\n appUrl,\n );\n if (!appUrl) {\n throw new Error(\"appUrl undefined. Cannot redirect.\");\n }\n return NextResponse.redirect(`${appUrl}`);\n }\n // return an empty HTML response so the iframe doesn't show any response\n // in the short moment between the redirect and the parent window\n // acknowledging the redirect and closing the iframe\n const response = new NextResponse(\n `<html><span style=\"display:none\">${TOKEN_EXCHANGE_SUCCESS_TEXT}</span></html>`,\n );\n response.headers.set(\"Content-Type\", \"text/html; charset=utf-8\");\n return response;\n}\n\n/**\n * If redirectPath is an absolute path, return it as-is.\n * Otherwise for relative paths, append it to the current domain.\n * @param redirectPath\n * @returns\n */\nconst getAbsoluteRedirectPath = (\n redirectPath: string,\n currentBasePath: string,\n) => new URL(redirectPath, currentBasePath).href;\n\nexport async function handleLogout(\n request: NextRequest,\n config: AuthConfig,\n): Promise<NextResponse> {\n const resolvedConfigs = resolveAuthConfig(config);\n const defaultRedirectPath = resolvedConfigs.loginUrl ?? \"/\";\n const redirectTarget =\n new URL(request.url).searchParams.get(\"redirect\") || defaultRedirectPath;\n\n const isAbsoluteRedirect = /^(https?:\\/\\/|www\\.).+/i.test(redirectTarget);\n\n const appUrl = request.nextUrl.searchParams.get(\"appUrl\");\n\n const finalRedirectUrl = isAbsoluteRedirect\n ? redirectTarget\n : getAbsoluteRedirectPath(\n redirectTarget,\n new URL(appUrl ?? request.url).origin,\n );\n\n const response = NextResponse.redirect(finalRedirectUrl);\n\n await clearAuthCookies(config);\n\n try {\n revalidatePath(isAbsoluteRedirect ? finalRedirectUrl : redirectTarget);\n } catch (error) {\n logger.warn(\"Failed to revalidate path after logout:\", error);\n }\n\n return response;\n}\n\n/**\n * Creates an authentication handler for Next.js API routes\n *\n * Usage:\n * ```ts\n * // app/api/auth/[...civicauth]/route.ts\n * import { handler } from '@civic/auth/nextjs'\n * export const GET = handler({\n * // optional config overrides\n * })\n * ```\n */\nexport const handler =\n (authConfig = {}) =>\n async (request: NextRequest): Promise<NextResponse> => {\n const config = resolveAuthConfig(authConfig);\n\n try {\n const pathname = request.nextUrl.pathname;\n const pathSegments = pathname.split(\"/\");\n const lastSegment = pathSegments[pathSegments.length - 1];\n\n switch (lastSegment) {\n case \"challenge\":\n return await handleChallenge(request, config);\n case \"callback\":\n return await handleCallback(request, config);\n case \"logout\":\n return await handleLogout(request, config);\n default:\n throw new AuthError(`Invalid auth route: ${pathname}`, 404);\n }\n } catch (error) {\n logger.error(\"Auth handler error:\", error);\n\n const status = error instanceof AuthError ? error.status : 500;\n const message =\n error instanceof Error ? error.message : \"Authentication failed\";\n\n const response = NextResponse.json({ error: message }, { status });\n\n clearAuthCookies(config);\n return response;\n }\n };\n"]}
1
+ {"version":3,"file":"routeHandler.js","sourceRoot":"","sources":["../../../src/nextjs/routeHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NextRequest } from \"next/server.js\";\nimport { NextResponse } from \"next/server.js\";\nimport { revalidatePath } from \"next/cache.js\";\nimport type { AuthConfig } from \"@/nextjs/config.js\";\nimport { resolveAuthConfig } from \"@/nextjs/config.js\";\nimport { loggers } from \"@/lib/logger.js\";\nimport {\n clearAuthCookies,\n NextjsClientStorage,\n NextjsCookieStorage,\n} from \"@/nextjs/cookies.js\";\nimport { GenericPublicClientPKCEProducer } from \"@/services/PKCE.js\";\nimport { resolveOAuthAccessCode } from \"@/server/login.js\";\nimport { getUser } from \"@/nextjs/GetUser.js\";\nimport { resolveCallbackUrl } from \"@/nextjs/utils.js\";\nimport { GenericUserSession } from \"@/shared/lib/UserSession.js\";\nimport {\n TOKEN_EXCHANGE_SUCCESS_TEXT,\n TOKEN_EXCHANGE_TRIGGER_TEXT,\n} from \"@/constants.js\";\nimport { serverTokenExchangeFromState } from \"@/lib/oauth.js\";\nimport { CodeVerifier } from \"@/shared/lib/types.js\";\n\nconst logger = loggers.nextjs.handlers.auth;\n\nclass AuthError extends Error {\n constructor(\n message: string,\n public readonly status: number = 401,\n ) {\n super(message);\n this.name = \"AuthError\";\n }\n}\n\n/**\n * create a code verifier and challenge for PKCE\n * saving the verifier in a cookie for later use\n * @returns {Promise<NextResponse>}\n */\nasync function handleChallenge(\n request: NextRequest,\n config: AuthConfig,\n): Promise<NextResponse> {\n const cookieStorage = new NextjsCookieStorage(config.cookies?.tokens ?? {});\n const pkceProducer = new GenericPublicClientPKCEProducer(cookieStorage);\n\n const challenge = await pkceProducer.getCodeChallenge();\n const appUrl = request.nextUrl.searchParams.get(\"appUrl\");\n if (appUrl) {\n cookieStorage.set(CodeVerifier.APP_URL, appUrl);\n }\n return NextResponse.json({ status: \"success\", challenge });\n}\n\nasync function performTokenExchangeAndSetCookies(\n request: NextRequest,\n config: AuthConfig,\n code: string,\n state: string,\n appUrl: string,\n) {\n const resolvedConfigs = resolveAuthConfig(config);\n const cookieStorage = new NextjsCookieStorage(resolvedConfigs.cookies.tokens);\n\n const callbackUrl = resolveCallbackUrl(resolvedConfigs, appUrl);\n try {\n await resolveOAuthAccessCode(code, state, cookieStorage, {\n ...resolvedConfigs,\n redirectUrl: callbackUrl,\n });\n } catch (error) {\n logger.error(\"Token exchange failed:\", error);\n throw new AuthError(\"Failed to authenticate user\", 401);\n }\n\n const user = await getUser();\n if (!user) {\n throw new AuthError(\"Failed to get user info\", 401);\n }\n\n const clientStorage = new NextjsClientStorage();\n const userSession = new GenericUserSession(clientStorage);\n userSession.set(user);\n}\nasync function handleCallback(\n request: NextRequest,\n config: AuthConfig,\n): Promise<NextResponse> {\n const resolvedConfigs = resolveAuthConfig(config);\n console.log(\"handleCallback\", { request, resolvedConfigs });\n const code = request.nextUrl.searchParams.get(\"code\");\n const state = request.nextUrl.searchParams.get(\"state\") || \"\";\n if (!code || !state) throw new AuthError(\"Bad parameters\", 400);\n\n // appUrl is passed from the client to the server in the query string\n // this is necessary because the server does not have access to the client's window.location.origin\n // and can not accurately determine the appUrl (specially if the app is behind a reverse proxy)\n const appUrl =\n request.cookies.get(CodeVerifier.APP_URL)?.value ||\n request.nextUrl.searchParams.get(\"appUrl\");\n\n // If we have a code_verifier cookie and the appUrl, we can do a token exchange.\n // Otherwise, just render an empty page.\n // The initial redirect back from the auth server does not send cookies, because the redirect is from a 3rd-party domain.\n // The client will make an additional call to this route with cookies included, at which point we do the token exchange.\n console.log(\"handleCallback\", {\n code,\n state,\n appUrl,\n });\n\n const codeVerifier = request.cookies.get(CodeVerifier.COOKIE_NAME);\n\n if (!codeVerifier || !appUrl) {\n console.log(\"handleCallback no code_verifier found\", {\n state,\n serverTokenExchange: serverTokenExchangeFromState(`${state}`),\n });\n let response = new NextResponse(\n `<html><body><span style=\"display:none\">${TOKEN_EXCHANGE_TRIGGER_TEXT}</span></body></html>`,\n );\n\n // in server-side token exchange mode we need to launch a page that will trigger the token exchange\n // from the same domain, allowing it access to the code_verifier cookie\n // we only need to do this in redirect mode, as the iframe already triggers a client-side token exchange\n // if no code-verifier cookie is found\n if (state && serverTokenExchangeFromState(state)) {\n console.log(\n \"handleCallback serverTokenExchangeFromState, launching redirect page...\",\n {\n requestUrl: request.url,\n configCallbackUrl: resolvedConfigs.callbackUrl,\n },\n );\n // we need to replace the URL with resolved config in case the server is hosted\n // behind a reverse proxy or load balancer\n const requestUrl = new URL(request.url);\n const fetchUrl = `${resolvedConfigs.callbackUrl}?${requestUrl.searchParams.toString()}&sameDomainServerTokenExchange=true`;\n response = new NextResponse(\n `<html>\n <body>\n <span style=\"display:none\">\n <script>\n window.onload = function () {\n const appUrl = globalThis.window?.location?.origin;\n fetch('${fetchUrl}&appUrl=' + appUrl).then((response) => {\n response.json().then((jsonResponse) => {\n if (jsonResponse.redirectUrl) {\n window.location.href = jsonResponse.redirectUrl;\n }\n });\n });\n };\n </script>\n </span>\n </body>\n </html>\n `,\n );\n }\n response.headers.set(\"Content-Type\", \"text/html; charset=utf-8\");\n console.log(\n `handleCallback no code_verifier found, returning ${TOKEN_EXCHANGE_TRIGGER_TEXT}`,\n );\n return response;\n }\n\n await performTokenExchangeAndSetCookies(\n request,\n resolvedConfigs,\n code,\n state,\n appUrl,\n );\n\n if (request.url.includes(\"sameDomainServerTokenExchange=true\")) {\n console.log(\n \"handleCallback sameDomainServerTokenExchange = true, returnining redirectUrl\",\n appUrl,\n );\n return NextResponse.json({\n status: \"success\",\n redirectUrl: appUrl,\n });\n }\n\n // this is the case where a 'normal' redirect is happening\n if (serverTokenExchangeFromState(state)) {\n console.log(\n \"handleCallback serverTokenExchangeFromState, redirect to appUrl\",\n appUrl,\n );\n if (!appUrl) {\n throw new Error(\"appUrl undefined. Cannot redirect.\");\n }\n return NextResponse.redirect(`${appUrl}`);\n }\n // return an empty HTML response so the iframe doesn't show any response\n // in the short moment between the redirect and the parent window\n // acknowledging the redirect and closing the iframe\n const response = new NextResponse(\n `<html><span style=\"display:none\">${TOKEN_EXCHANGE_SUCCESS_TEXT}</span></html>`,\n );\n response.headers.set(\"Content-Type\", \"text/html; charset=utf-8\");\n return response;\n}\n\n/**\n * If redirectPath is an absolute path, return it as-is.\n * Otherwise for relative paths, append it to the current domain.\n * @param redirectPath\n * @returns\n */\nconst getAbsoluteRedirectPath = (\n redirectPath: string,\n currentBasePath: string,\n) => new URL(redirectPath, currentBasePath).href;\n\nexport async function handleLogout(\n request: NextRequest,\n config: AuthConfig,\n): Promise<NextResponse> {\n const resolvedConfigs = resolveAuthConfig(config);\n const defaultRedirectPath = resolvedConfigs.loginUrl ?? \"/\";\n const redirectTarget =\n new URL(request.url).searchParams.get(\"redirect\") || defaultRedirectPath;\n\n const isAbsoluteRedirect = /^(https?:\\/\\/|www\\.).+/i.test(redirectTarget);\n\n const appUrl = request.nextUrl.searchParams.get(\"appUrl\");\n\n const finalRedirectUrl = isAbsoluteRedirect\n ? redirectTarget\n : getAbsoluteRedirectPath(\n redirectTarget,\n new URL(appUrl ?? request.url).origin,\n );\n\n const response = NextResponse.redirect(finalRedirectUrl);\n\n await clearAuthCookies(config);\n\n try {\n revalidatePath(isAbsoluteRedirect ? finalRedirectUrl : redirectTarget);\n } catch (error) {\n logger.warn(\"Failed to revalidate path after logout:\", error);\n }\n\n return response;\n}\n\n/**\n * Creates an authentication handler for Next.js API routes\n *\n * Usage:\n * ```ts\n * // app/api/auth/[...civicauth]/route.ts\n * import { handler } from '@civic/auth/nextjs'\n * export const GET = handler({\n * // optional config overrides\n * })\n * ```\n */\nexport const handler =\n (authConfig = {}) =>\n async (request: NextRequest): Promise<NextResponse> => {\n const config = resolveAuthConfig(authConfig);\n\n try {\n const pathname = request.nextUrl.pathname;\n const pathSegments = pathname.split(\"/\");\n const lastSegment = pathSegments[pathSegments.length - 1];\n\n switch (lastSegment) {\n case \"challenge\":\n return await handleChallenge(request, config);\n case \"callback\":\n return await handleCallback(request, config);\n case \"logout\":\n return await handleLogout(request, config);\n default:\n throw new AuthError(`Invalid auth route: ${pathname}`, 404);\n }\n } catch (error) {\n logger.error(\"Auth handler error:\", error);\n\n const status = error instanceof AuthError ? error.status : 500;\n const message =\n error instanceof Error ? error.message : \"Authentication failed\";\n\n const response = NextResponse.json({ error: message }, { status });\n\n clearAuthCookies(config);\n return response;\n }\n };\n"]}
@@ -16,13 +16,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
16
16
  }) : function(o, v) {
17
17
  o["default"] = v;
18
18
  });
19
- var __importStar = (this && this.__importStar) || function (mod) {
20
- if (mod && mod.__esModule) return mod;
21
- var result = {};
22
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
- __setModuleDefault(result, mod);
24
- return result;
25
- };
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
26
36
  Object.defineProperty(exports, "__esModule", { value: true });
27
37
  exports.UserButton = void 0;
28
38
  const index_js_1 = require("../../reactjs/hooks/index.js");
@@ -52,7 +62,7 @@ const UserButton = ({ displayMode, className, }) => {
52
62
  }
53
63
  }, []);
54
64
  const handleSignOut = (0, react_1.useCallback)(async () => {
55
- signOut();
65
+ await signOut();
56
66
  setIsOpen(false);
57
67
  }, [signOut]);
58
68
  const handleSignIn = (0, react_1.useCallback)(async () => {
@@ -102,9 +112,9 @@ const UserButton = ({ displayMode, className, }) => {
102
112
  overflow: "hidden",
103
113
  borderRadius: "9999px",
104
114
  } },
105
- react_1.default.createElement("img", { style: { height: "100%", width: "100%", objectFit: "cover" }, src: user.picture, alt: user?.name || user?.email }))) : (react_1.default.createElement("div", null)),
115
+ react_1.default.createElement("img", { style: { height: "100%", width: "100%", objectFit: "cover" }, src: user.picture, alt: user?.name || user?.email }))) : (react_1.default.createElement("span", { style: { display: "block" } })),
106
116
  react_1.default.createElement("span", null, user?.name || user?.email),
107
- react_1.default.createElement("div", { style: { pointerEvents: "none" } }, isOpen ? react_1.default.createElement(ChevronUp, null) : react_1.default.createElement(ChevronDown, null))),
117
+ react_1.default.createElement("span", { style: { display: "block", pointerEvents: "none" } }, isOpen ? react_1.default.createElement(ChevronUp, null) : react_1.default.createElement(ChevronDown, null))),
108
118
  react_1.default.createElement("div", { ref: dropdownRef, style: isOpen
109
119
  ? {
110
120
  position: "absolute",
@@ -1 +1 @@
1
- {"version":3,"file":"UserButton.js","sourceRoot":"","sources":["../../../../src/reactjs/components/UserButton.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\nimport { useUser } from \"@/reactjs/hooks/index.js\";\nimport type { DisplayMode } from \"@/types.js\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\n\nconst ChevronDown = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-down\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\n\nconst ChevronUp = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-up\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n);\n\nconst UserButton = ({\n displayMode,\n className,\n}: {\n displayMode?: DisplayMode;\n className?: string;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [buttonWidth, setButtonWidth] = useState<number | null>(null);\n const { user, signIn, signOut } = useUser();\n const buttonRef = useRef<HTMLButtonElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (buttonRef.current) {\n setButtonWidth(buttonRef.current.offsetWidth);\n }\n }, [isOpen]);\n\n const handleClickOutside = useCallback((event: MouseEvent) => {\n const target = event.target as HTMLElement;\n\n if (\n buttonRef.current &&\n dropdownRef.current &&\n !buttonRef.current.contains(target) &&\n !dropdownRef.current.contains(target)\n ) {\n setIsOpen(false);\n }\n }, []);\n\n const handleSignOut = useCallback(async () => {\n signOut();\n\n setIsOpen(false);\n }, [signOut]);\n\n const handleSignIn = useCallback(async () => {\n await signIn(displayMode);\n\n setIsOpen(false);\n }, [signIn, displayMode]);\n\n const handleEscape = useCallback((event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setIsOpen(false);\n }\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n window.addEventListener(\"click\", handleClickOutside);\n\n window.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => {\n window.removeEventListener(\"click\", handleClickOutside);\n\n window.removeEventListener(\"keydown\", handleEscape);\n };\n }, [handleClickOutside, handleEscape, isOpen]);\n\n if (user) {\n return (\n <div\n style={{ position: \"relative\", width: \"auto\" }}\n id=\"civic-dropdown-container\"\n >\n <button\n ref={buttonRef}\n style={{\n cursor: \"pointer\",\n display: \"flex\",\n minWidth: \"10rem\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: \"0.5rem\",\n borderRadius: \"9999px\",\n border: \"1px solid #6b7280\",\n padding: \"0.75rem 1rem\",\n color: \"#6b7280\",\n background: \"none\",\n transition: \"background-color 0.2s\",\n }}\n className={className}\n onMouseEnter={(e) =>\n (e.currentTarget.style.backgroundColor = \"#f3f4f6\")\n }\n onMouseLeave={(e) =>\n (e.currentTarget.style.backgroundColor = \"transparent\")\n }\n onClick={() => {\n setIsOpen((isOpen) => !isOpen);\n }}\n >\n {user?.picture ? (\n <span\n style={{\n position: \"relative\",\n display: \"flex\",\n height: \"1.5rem\",\n width: \"1.5rem\",\n flexShrink: 0,\n gap: \"0.5rem\",\n overflow: \"hidden\",\n borderRadius: \"9999px\",\n }}\n >\n <img\n style={{ height: \"100%\", width: \"100%\", objectFit: \"cover\" }}\n src={user.picture}\n alt={user?.name || user?.email}\n />\n </span>\n ) : (\n <div />\n )}\n\n <span>{user?.name || user?.email}</span>\n\n <div style={{ pointerEvents: \"none\" }}>\n {isOpen ? <ChevronUp /> : <ChevronDown />}\n </div>\n </button>\n <div\n ref={dropdownRef}\n style={\n isOpen\n ? {\n position: \"absolute\",\n left: 0,\n width: buttonWidth || \"auto\",\n marginTop: \"0.5rem\",\n borderRadius: \"0.5rem\",\n backgroundColor: \"white\",\n padding: \"0.5rem 0\",\n color: \"#6b7280\",\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 : { display: \"none\" }\n }\n >\n <ul style={{ listStyleType: \"none\", margin: 0, padding: 0 }}>\n <li>\n <button\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"0.5rem 1rem\",\n transition: \"background-color 0.2s\",\n background: \"none\",\n border: \"none\",\n textAlign: \"center\",\n cursor: \"pointer\",\n }}\n onClick={handleSignOut}\n onMouseEnter={(e) =>\n (e.currentTarget.style.backgroundColor = \"#f3f4f6\")\n }\n onMouseLeave={(e) =>\n (e.currentTarget.style.backgroundColor = \"transparent\")\n }\n >\n Logout\n </button>\n </li>\n </ul>\n </div>\n </div>\n );\n }\n\n return (\n <button\n ref={buttonRef}\n data-testid=\"sign-in-button\"\n style={{\n cursor: \"pointer\",\n borderRadius: \"9999px\",\n border: \"1px solid #6b7280\",\n padding: \"0.75rem 1rem\",\n background: \"none\",\n transition: \"background-color 0.2s\",\n }}\n className={className}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = \"#f3f4f6\")}\n onMouseLeave={(e) =>\n (e.currentTarget.style.backgroundColor = \"transparent\")\n }\n onClick={handleSignIn}\n >\n Sign in\n </button>\n );\n};\n\nexport { UserButton };\n"]}
1
+ {"version":3,"file":"UserButton.js","sourceRoot":"","sources":["../../../../src/reactjs/components/UserButton.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\nimport { useUser } from \"@/reactjs/hooks/index.js\";\nimport type { DisplayMode } from \"@/types.js\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\n\nconst ChevronDown = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-down\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\n\nconst ChevronUp = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-up\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n);\n\nconst UserButton = ({\n displayMode,\n className,\n}: {\n displayMode?: DisplayMode;\n className?: string;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [buttonWidth, setButtonWidth] = useState<number | null>(null);\n const { user, signIn, signOut } = useUser();\n const buttonRef = useRef<HTMLButtonElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (buttonRef.current) {\n setButtonWidth(buttonRef.current.offsetWidth);\n }\n }, [isOpen]);\n\n const handleClickOutside = useCallback((event: MouseEvent) => {\n const target = event.target as HTMLElement;\n\n if (\n buttonRef.current &&\n dropdownRef.current &&\n !buttonRef.current.contains(target) &&\n !dropdownRef.current.contains(target)\n ) {\n setIsOpen(false);\n }\n }, []);\n\n const handleSignOut = useCallback(async () => {\n await signOut();\n\n setIsOpen(false);\n }, [signOut]);\n\n const handleSignIn = useCallback(async () => {\n await signIn(displayMode);\n\n setIsOpen(false);\n }, [signIn, displayMode]);\n\n const handleEscape = useCallback((event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setIsOpen(false);\n }\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n window.addEventListener(\"click\", handleClickOutside);\n\n window.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => {\n window.removeEventListener(\"click\", handleClickOutside);\n\n window.removeEventListener(\"keydown\", handleEscape);\n };\n }, [handleClickOutside, handleEscape, isOpen]);\n\n if (user) {\n return (\n <div\n style={{ position: \"relative\", width: \"auto\" }}\n id=\"civic-dropdown-container\"\n >\n <button\n ref={buttonRef}\n style={{\n cursor: \"pointer\",\n display: \"flex\",\n minWidth: \"10rem\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: \"0.5rem\",\n borderRadius: \"9999px\",\n border: \"1px solid #6b7280\",\n padding: \"0.75rem 1rem\",\n color: \"#6b7280\",\n background: \"none\",\n transition: \"background-color 0.2s\",\n }}\n className={className}\n onMouseEnter={(e) =>\n (e.currentTarget.style.backgroundColor = \"#f3f4f6\")\n }\n onMouseLeave={(e) =>\n (e.currentTarget.style.backgroundColor = \"transparent\")\n }\n onClick={() => {\n setIsOpen((isOpen) => !isOpen);\n }}\n >\n {user?.picture ? (\n <span\n style={{\n position: \"relative\",\n display: \"flex\",\n height: \"1.5rem\",\n width: \"1.5rem\",\n flexShrink: 0,\n gap: \"0.5rem\",\n overflow: \"hidden\",\n borderRadius: \"9999px\",\n }}\n >\n <img\n style={{ height: \"100%\", width: \"100%\", objectFit: \"cover\" }}\n src={user.picture}\n alt={user?.name || user?.email}\n />\n </span>\n ) : (\n <span style={{ display: \"block\" }} />\n )}\n\n <span>{user?.name || user?.email}</span>\n\n <span style={{ display: \"block\", pointerEvents: \"none\" }}>\n {isOpen ? <ChevronUp /> : <ChevronDown />}\n </span>\n </button>\n <div\n ref={dropdownRef}\n style={\n isOpen\n ? {\n position: \"absolute\",\n left: 0,\n width: buttonWidth || \"auto\",\n marginTop: \"0.5rem\",\n borderRadius: \"0.5rem\",\n backgroundColor: \"white\",\n padding: \"0.5rem 0\",\n color: \"#6b7280\",\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 : { display: \"none\" }\n }\n >\n <ul style={{ listStyleType: \"none\", margin: 0, padding: 0 }}>\n <li>\n <button\n style={{\n display: \"block\",\n width: \"100%\",\n padding: \"0.5rem 1rem\",\n transition: \"background-color 0.2s\",\n background: \"none\",\n border: \"none\",\n textAlign: \"center\",\n cursor: \"pointer\",\n }}\n onClick={handleSignOut}\n onMouseEnter={(e) =>\n (e.currentTarget.style.backgroundColor = \"#f3f4f6\")\n }\n onMouseLeave={(e) =>\n (e.currentTarget.style.backgroundColor = \"transparent\")\n }\n >\n Logout\n </button>\n </li>\n </ul>\n </div>\n </div>\n );\n }\n\n return (\n <button\n ref={buttonRef}\n data-testid=\"sign-in-button\"\n style={{\n cursor: \"pointer\",\n borderRadius: \"9999px\",\n border: \"1px solid #6b7280\",\n padding: \"0.75rem 1rem\",\n background: \"none\",\n transition: \"background-color 0.2s\",\n }}\n className={className}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = \"#f3f4f6\")}\n onMouseLeave={(e) =>\n (e.currentTarget.style.backgroundColor = \"transparent\")\n }\n onClick={handleSignIn}\n >\n Sign in\n </button>\n );\n};\n\nexport { UserButton };\n"]}
@@ -2,6 +2,5 @@ export { useUser } from "../../reactjs/hooks/useUser.js";
2
2
  export { useToken } from "../../shared/hooks/useToken.js";
3
3
  export { useAuth } from "../../shared/hooks/useAuth.js";
4
4
  export { useSession } from "../../shared/hooks/useSession.js";
5
- export { useConfig } from "../../shared/hooks/useConfig.js";
6
5
  export { useIframe } from "../../shared/hooks/useIframe.js";
7
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/reactjs/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/reactjs/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useIframe = exports.useConfig = exports.useSession = exports.useAuth = exports.useToken = exports.useUser = void 0;
3
+ exports.useIframe = exports.useSession = exports.useAuth = exports.useToken = exports.useUser = void 0;
4
4
  var useUser_js_1 = require("../../reactjs/hooks/useUser.js");
5
5
  Object.defineProperty(exports, "useUser", { enumerable: true, get: function () { return useUser_js_1.useUser; } });
6
6
  var useToken_js_1 = require("../../shared/hooks/useToken.js");
@@ -9,8 +9,6 @@ var useAuth_js_1 = require("../../shared/hooks/useAuth.js");
9
9
  Object.defineProperty(exports, "useAuth", { enumerable: true, get: function () { return useAuth_js_1.useAuth; } });
10
10
  var useSession_js_1 = require("../../shared/hooks/useSession.js");
11
11
  Object.defineProperty(exports, "useSession", { enumerable: true, get: function () { return useSession_js_1.useSession; } });
12
- var useConfig_js_1 = require("../../shared/hooks/useConfig.js");
13
- Object.defineProperty(exports, "useConfig", { enumerable: true, get: function () { return useConfig_js_1.useConfig; } });
14
12
  var useIframe_js_1 = require("../../shared/hooks/useIframe.js");
15
13
  Object.defineProperty(exports, "useIframe", { enumerable: true, get: function () { return useIframe_js_1.useIframe; } });
16
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/reactjs/hooks/index.ts"],"names":[],"mappings":";;;AAAA,yDAAqD;AAA5C,qGAAA,OAAO,OAAA;AAChB,0DAAsD;AAA7C,uGAAA,QAAQ,OAAA;AACjB,wDAAoD;AAA3C,qGAAA,OAAO,OAAA;AAChB,8DAA0D;AAAjD,2GAAA,UAAU,OAAA;AACnB,4DAAwD;AAA/C,yGAAA,SAAS,OAAA;AAClB,4DAAwD;AAA/C,yGAAA,SAAS,OAAA","sourcesContent":["export { useUser } from \"@/reactjs/hooks/useUser.js\";\nexport { useToken } from \"@/shared/hooks/useToken.js\";\nexport { useAuth } from \"@/shared/hooks/useAuth.js\";\nexport { useSession } from \"@/shared/hooks/useSession.js\";\nexport { useConfig } from \"@/shared/hooks/useConfig.js\";\nexport { useIframe } from \"@/shared/hooks/useIframe.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/reactjs/hooks/index.ts"],"names":[],"mappings":";;;AAAA,yDAAqD;AAA5C,qGAAA,OAAO,OAAA;AAChB,0DAAsD;AAA7C,uGAAA,QAAQ,OAAA;AACjB,wDAAoD;AAA3C,qGAAA,OAAO,OAAA;AAChB,8DAA0D;AAAjD,2GAAA,UAAU,OAAA;AACnB,4DAAwD;AAA/C,yGAAA,SAAS,OAAA","sourcesContent":["export { useUser } from \"@/reactjs/hooks/useUser.js\";\nexport { useToken } from \"@/shared/hooks/useToken.js\";\nexport { useAuth } from \"@/shared/hooks/useAuth.js\";\nexport { useSession } from \"@/shared/hooks/useSession.js\";\nexport { useIframe } from \"@/shared/hooks/useIframe.js\";\n"]}
@@ -27,7 +27,6 @@ export declare class BrowserAuthenticationInitiator implements AuthenticationIni
27
27
  protected config: {
28
28
  clientId: string;
29
29
  redirectUrl: string;
30
- state: string;
31
30
  scopes: string[];
32
31
  displayMode: DisplayMode;
33
32
  oauthServer: string;
@@ -35,6 +34,10 @@ export declare class BrowserAuthenticationInitiator implements AuthenticationIni
35
34
  pkceConsumer: PKCEConsumer;
36
35
  nonce?: string;
37
36
  };
37
+ setDisplayMode(displayMode: DisplayMode): void;
38
+ get displayMode(): DisplayMode;
39
+ get isServerTokenExchange(): boolean;
40
+ get state(): string;
38
41
  constructor(config: typeof this.config);
39
42
  handleLoginAppPopupFailed(redirectUrl: string): Promise<void>;
40
43
  signIn(iframeRef: HTMLIFrameElement | null): Promise<URL>;
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticationService.d.ts","sourceRoot":"","sources":["../../../src/services/AuthenticationService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,qBAAqB,EACrB,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAerE,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAM7B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,8BAA+B,YAAW,uBAAuB;IAC5E,OAAO,CAAC,kBAAkB,CAAgD;IAE1E,SAAS,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;QAEjB,WAAW,EAAE,WAAW,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QAEpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAEvC,YAAY,EAAE,YAAY,CAAC;QAE3B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;gBAEU,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM;IAIhC,yBAAyB,CAAC,WAAW,EAAE,MAAM;IAU7C,MAAM,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;IA8CzD,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;IAU7B,OAAO;CAKR;AAED;;;GAGG;AACH,qBAAa,8BAA+B,YAAW,uBAAuB;IAC5E,SAAS,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAEvC,YAAY,EAAE,YAAY,CAAC;KAC5B,CAAC;gBAEU,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM;IAMhC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC;IAItB,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;CAG9B;AAED,KAAK,2BAA2B,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,qBAAa,4BAA6B,SAAQ,8BAA8B;IAQ5E,SAAS,CAAC,YAAY;IAPxB,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,SAAS,CAAwB;gBAIvC,MAAM,EAAE,2BAA2B,EAEzB,YAAY,kCAAwC;IAa1D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBrB,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC;IAiC3B,cAAc,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAa7C,uBAAuB,IAAI,OAAO,CAAC,WAAW,CAAC;WAgCxC,KAAK,CAChB,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,sBAAsB,CAAC;CAMnC"}
1
+ {"version":3,"file":"AuthenticationService.d.ts","sourceRoot":"","sources":["../../../src/services/AuthenticationService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,qBAAqB,EACrB,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,+BAA+B,EAEhC,MAAM,oBAAoB,CAAC;AAe5B,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAQ7B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,8BAA+B,YAAW,uBAAuB;IAC5E,OAAO,CAAC,kBAAkB,CAAgD;IAE1E,SAAS,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,CAAC;QAEjB,WAAW,EAAE,WAAW,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QAEpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAEvC,YAAY,EAAE,YAAY,CAAC;QAE3B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAEK,cAAc,CAAC,WAAW,EAAE,WAAW;IAI9C,IAAI,WAAW,gBAEd;IAED,IAAI,qBAAqB,YAExB;IACD,IAAI,KAAK,WAER;gBACW,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM;IAIhC,yBAAyB,CAAC,WAAW,EAAE,MAAM;IAU7C,MAAM,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;IAiDzD,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;IAe7B,OAAO;CAKR;AAED;;;GAGG;AACH,qBAAa,8BAA+B,YAAW,uBAAuB;IAC5E,SAAS,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAEvC,YAAY,EAAE,YAAY,CAAC;KAC5B,CAAC;gBAEU,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM;IAMhC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC;IAItB,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;CAG9B;AAED,KAAK,2BAA2B,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,qBAAa,4BAA6B,SAAQ,8BAA8B;IAQ5E,SAAS,CAAC,YAAY;IAPxB,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,SAAS,CAAwB;gBAIvC,MAAM,EAAE,2BAA2B,EAEzB,YAAY,kCAAwC;IAY1D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBrB,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC;IA0C3B,cAAc,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAa7C,uBAAuB,IAAI,OAAO,CAAC,WAAW,CAAC;WAgCxC,KAAK,CAChB,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,sBAAsB,CAAC;CAMnC"}
@@ -11,6 +11,8 @@ const types_js_1 = require("../services/types.js");
11
11
  const windowUtil_js_1 = require("../lib/windowUtil.js");
12
12
  const constants_js_1 = require("../constants.js");
13
13
  const postMessage_js_1 = require("../lib/postMessage.js");
14
+ const session_js_1 = require("../shared/lib/session.js");
15
+ const UserSession_js_1 = require("../shared/lib/UserSession.js");
14
16
  /**
15
17
  * An authentication initiator that works on a browser. Since this is just triggering
16
18
  * login and logout, session data is not stored here.
@@ -35,6 +37,18 @@ const postMessage_js_1 = require("../lib/postMessage.js");
35
37
  class BrowserAuthenticationInitiator {
36
38
  postMessageHandler = null;
37
39
  config;
40
+ setDisplayMode(displayMode) {
41
+ this.config.displayMode = displayMode;
42
+ }
43
+ get displayMode() {
44
+ return this.config.displayMode;
45
+ }
46
+ get isServerTokenExchange() {
47
+ return this.config.pkceConsumer instanceof PKCE_js_1.ConfidentialClientPKCEConsumer;
48
+ }
49
+ get state() {
50
+ return (0, oauth_js_1.generateState)(this.config.displayMode, this.isServerTokenExchange);
51
+ }
38
52
  constructor(config) {
39
53
  this.config = config;
40
54
  }
@@ -45,7 +59,10 @@ class BrowserAuthenticationInitiator {
45
59
  // Use the config (Client ID, scopes OAuth Server, Endpoints, PKCEConsumer) to generate a new login url
46
60
  // and then use the display mode to decide how to send the user there
47
61
  async signIn(iframeRef) {
48
- const url = await (0, util_js_1.generateOauthLoginUrl)(this.config);
62
+ const url = await (0, util_js_1.generateOauthLoginUrl)({
63
+ ...this.config,
64
+ state: this.state,
65
+ });
49
66
  this.postMessageHandler = (event) => {
50
67
  const thisURL = new URL(window.location.href);
51
68
  if (event.origin.endsWith("civic.com") ||
@@ -81,9 +98,13 @@ class BrowserAuthenticationInitiator {
81
98
  return url;
82
99
  }
83
100
  async signOut() {
84
- const localStorage = new storage_js_1.LocalStorageAdapter();
85
- await (0, util_js_1.clearTokens)(localStorage);
86
- await (0, util_js_1.clearUser)(localStorage);
101
+ // we only use local storage for the client-side token exchange
102
+ if (!this.isServerTokenExchange) {
103
+ const localStorage = new storage_js_1.LocalStorageAdapter();
104
+ await (0, util_js_1.clearTokens)(localStorage);
105
+ await (0, util_js_1.clearUser)(localStorage);
106
+ storage_js_1.LocalStorageAdapter.emitter.emit("signOut");
107
+ }
87
108
  // TODO open the iframe or new tab etc: the logout URL is not currently
88
109
  // supported by on the oauth, so just clear state until then
89
110
  const url = await (0, util_js_1.generateOauthLogoutUrl)(this.config);
@@ -129,7 +150,6 @@ class BrowserAuthenticationService extends BrowserAuthenticationInitiator {
129
150
  pkceProducer = new PKCE_js_1.BrowserPublicClientPKCEProducer()) {
130
151
  super({
131
152
  ...config,
132
- state: (0, oauth_js_1.generateState)(config.displayMode),
133
153
  // Store and retrieve the PKCE challenge in local storage
134
154
  pkceConsumer: pkceProducer,
135
155
  });
@@ -158,11 +178,22 @@ class BrowserAuthenticationService extends BrowserAuthenticationInitiator {
158
178
  // exchange auth code for tokens
159
179
  const tokens = await (0, util_js_1.exchangeTokens)(code, state, this.pkceProducer, this.oauth2client, // clean up types here to avoid the ! operator
160
180
  this.config.oauthServer, this.endpoints);
161
- await (0, util_js_1.storeTokens)(new storage_js_1.LocalStorageAdapter(), tokens);
181
+ const clientStorage = new storage_js_1.LocalStorageAdapter();
182
+ await (0, util_js_1.storeTokens)(clientStorage, tokens);
183
+ const user = await (0, session_js_1.getUser)(clientStorage);
184
+ if (!user) {
185
+ throw new Error("Failed to get user info");
186
+ }
187
+ const userSession = new UserSession_js_1.GenericUserSession(clientStorage);
188
+ await userSession.set(user);
189
+ storage_js_1.LocalStorageAdapter.emitter.emit("signIn");
162
190
  // cleanup the browser window if needed
163
191
  const parsedDisplayMode = (0, oauth_js_1.displayModeFromState)(state, this.config.displayMode);
164
192
  if (parsedDisplayMode === "new_tab") {
165
193
  // Close the popup window
194
+ window.addEventListener("beforeunload", () => {
195
+ window?.opener?.focus();
196
+ });
166
197
  window.close();
167
198
  }
168
199
  // these are the default oAuth params that get added to the URL in redirect which we want to remove if present
@@ -186,7 +217,7 @@ class BrowserAuthenticationService extends BrowserAuthenticationInitiator {
186
217
  const sessionData = await this.getSessionData();
187
218
  if (!sessionData?.idToken || !sessionData.accessToken) {
188
219
  const unAuthenticatedSession = { ...sessionData, authenticated: false };
189
- await (0, util_js_1.clearTokens)(new storage_js_1.LocalStorageAdapter());
220
+ // await clearTokens(new LocalStorageAdapter());
190
221
  return unAuthenticatedSession;
191
222
  }
192
223
  if (!this.endpoints || !this.oauth2client)