@civic/auth 0.1.2 → 0.1.4-beta.0

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 (737) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +329 -116
  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/config.d.ts.map +1 -1
  17. package/dist/cjs/nextjs/config.js +12 -0
  18. package/dist/cjs/nextjs/config.js.map +1 -1
  19. package/dist/cjs/nextjs/hooks/index.d.ts +1 -1
  20. package/dist/cjs/nextjs/hooks/index.d.ts.map +1 -1
  21. package/dist/cjs/nextjs/hooks/index.js +3 -3
  22. package/dist/cjs/nextjs/hooks/index.js.map +1 -1
  23. package/dist/cjs/nextjs/hooks/useUserCookie.d.ts.map +1 -1
  24. package/dist/cjs/nextjs/hooks/useUserCookie.js +43 -14
  25. package/dist/cjs/nextjs/hooks/useUserCookie.js.map +1 -1
  26. package/dist/cjs/nextjs/providers/NextAuthProvider.d.ts +5 -1
  27. package/dist/cjs/nextjs/providers/NextAuthProvider.d.ts.map +1 -1
  28. package/dist/cjs/nextjs/providers/NextAuthProvider.js +74 -35
  29. package/dist/cjs/nextjs/providers/NextAuthProvider.js.map +1 -1
  30. package/dist/cjs/reactjs/components/UserButton.js +20 -10
  31. package/dist/cjs/reactjs/components/UserButton.js.map +1 -1
  32. package/dist/cjs/reactjs/hooks/index.d.ts +0 -1
  33. package/dist/cjs/reactjs/hooks/index.d.ts.map +1 -1
  34. package/dist/cjs/reactjs/hooks/index.js +1 -3
  35. package/dist/cjs/reactjs/hooks/index.js.map +1 -1
  36. package/dist/cjs/services/AuthenticationService.d.ts +4 -1
  37. package/dist/cjs/services/AuthenticationService.d.ts.map +1 -1
  38. package/dist/cjs/services/AuthenticationService.js +38 -7
  39. package/dist/cjs/services/AuthenticationService.js.map +1 -1
  40. package/dist/cjs/shared/components/BlockDisplay.d.ts +7 -0
  41. package/dist/cjs/shared/components/BlockDisplay.d.ts.map +1 -0
  42. package/dist/cjs/shared/components/BlockDisplay.js +31 -0
  43. package/dist/cjs/shared/components/BlockDisplay.js.map +1 -0
  44. package/dist/cjs/shared/components/CivicAuthIframe.js +17 -7
  45. package/dist/cjs/shared/components/CivicAuthIframe.js.map +1 -1
  46. package/dist/cjs/shared/components/CivicAuthIframeContainer.d.ts.map +1 -1
  47. package/dist/cjs/shared/components/CivicAuthIframeContainer.js +39 -20
  48. package/dist/cjs/shared/components/CivicAuthIframeContainer.js.map +1 -1
  49. package/dist/cjs/shared/components/IFrameAndLoading.d.ts +7 -0
  50. package/dist/cjs/shared/components/IFrameAndLoading.d.ts.map +1 -0
  51. package/dist/cjs/shared/components/IFrameAndLoading.js +28 -0
  52. package/dist/cjs/shared/components/IFrameAndLoading.js.map +1 -0
  53. package/dist/cjs/shared/hooks/index.d.ts +5 -1
  54. package/dist/cjs/shared/hooks/index.d.ts.map +1 -1
  55. package/dist/cjs/shared/hooks/index.js +11 -3
  56. package/dist/cjs/shared/hooks/index.js.map +1 -1
  57. package/dist/cjs/shared/hooks/useCivicAuthConfig.d.ts +3 -0
  58. package/dist/cjs/shared/hooks/useCivicAuthConfig.d.ts.map +1 -0
  59. package/dist/cjs/shared/hooks/useCivicAuthConfig.js +13 -0
  60. package/dist/cjs/shared/hooks/useCivicAuthConfig.js.map +1 -0
  61. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.d.ts +3 -0
  62. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.d.ts.map +1 -0
  63. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.js +16 -0
  64. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.js.map +1 -0
  65. package/dist/cjs/shared/hooks/useCurrentUrl.d.ts +3 -0
  66. package/dist/cjs/shared/hooks/useCurrentUrl.d.ts.map +1 -0
  67. package/dist/cjs/shared/hooks/useCurrentUrl.js +27 -0
  68. package/dist/cjs/shared/hooks/useCurrentUrl.js.map +1 -0
  69. package/dist/cjs/shared/hooks/useIsInIframe.d.ts +3 -0
  70. package/dist/cjs/shared/hooks/useIsInIframe.d.ts.map +1 -0
  71. package/dist/cjs/shared/hooks/useIsInIframe.js +17 -0
  72. package/dist/cjs/shared/hooks/useIsInIframe.js.map +1 -0
  73. package/dist/cjs/shared/hooks/useOAuthEndpoints.d.ts +4 -0
  74. package/dist/cjs/shared/hooks/useOAuthEndpoints.d.ts.map +1 -0
  75. package/dist/cjs/shared/hooks/useOAuthEndpoints.js +17 -0
  76. package/dist/cjs/shared/hooks/useOAuthEndpoints.js.map +1 -0
  77. package/dist/cjs/shared/hooks/useRefresh.d.ts +4 -0
  78. package/dist/cjs/shared/hooks/useRefresh.d.ts.map +1 -0
  79. package/dist/cjs/shared/hooks/useRefresh.js +41 -0
  80. package/dist/cjs/shared/hooks/useRefresh.js.map +1 -0
  81. package/dist/cjs/shared/hooks/useSession.d.ts +1 -1
  82. package/dist/cjs/shared/hooks/useSession.d.ts.map +1 -1
  83. package/dist/cjs/shared/hooks/useSignIn.d.ts +14 -0
  84. package/dist/cjs/shared/hooks/useSignIn.d.ts.map +1 -0
  85. package/dist/cjs/shared/hooks/useSignIn.js +74 -0
  86. package/dist/cjs/shared/hooks/useSignIn.js.map +1 -0
  87. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.d.ts +4 -0
  88. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  89. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.js +30 -0
  90. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  91. package/dist/cjs/shared/lib/types.d.ts +14 -1
  92. package/dist/cjs/shared/lib/types.d.ts.map +1 -1
  93. package/dist/cjs/shared/lib/types.js +2 -0
  94. package/dist/cjs/shared/lib/types.js.map +1 -1
  95. package/dist/cjs/shared/lib/util.d.ts.map +1 -1
  96. package/dist/cjs/shared/lib/util.js +27 -9
  97. package/dist/cjs/shared/lib/util.js.map +1 -1
  98. package/dist/cjs/shared/providers/AuthProvider.d.ts +3 -2
  99. package/dist/cjs/shared/providers/AuthProvider.d.ts.map +1 -1
  100. package/dist/cjs/shared/providers/AuthProvider.js +53 -244
  101. package/dist/cjs/shared/providers/AuthProvider.js.map +1 -1
  102. package/dist/cjs/shared/providers/CivicAuthConfigContext.d.ts +16 -0
  103. package/dist/cjs/shared/providers/CivicAuthConfigContext.d.ts.map +1 -0
  104. package/dist/cjs/shared/providers/CivicAuthConfigContext.js +80 -0
  105. package/dist/cjs/shared/providers/CivicAuthConfigContext.js.map +1 -0
  106. package/dist/cjs/shared/providers/CivicAuthProvider.d.ts.map +1 -1
  107. package/dist/cjs/shared/providers/CivicAuthProvider.js +23 -6
  108. package/dist/cjs/shared/providers/CivicAuthProvider.js.map +1 -1
  109. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.d.ts +17 -0
  110. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.d.ts.map +1 -0
  111. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.js +183 -0
  112. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.js.map +1 -0
  113. package/dist/cjs/shared/providers/IframeProvider.d.ts +7 -4
  114. package/dist/cjs/shared/providers/IframeProvider.d.ts.map +1 -1
  115. package/dist/cjs/shared/providers/IframeProvider.js +37 -9
  116. package/dist/cjs/shared/providers/IframeProvider.js.map +1 -1
  117. package/dist/cjs/shared/providers/SessionProvider.d.ts +10 -4
  118. package/dist/cjs/shared/providers/SessionProvider.d.ts.map +1 -1
  119. package/dist/cjs/shared/providers/SessionProvider.js +32 -12
  120. package/dist/cjs/shared/providers/SessionProvider.js.map +1 -1
  121. package/dist/cjs/shared/providers/TokenProvider.d.ts.map +1 -1
  122. package/dist/cjs/shared/providers/TokenProvider.js +29 -30
  123. package/dist/cjs/shared/providers/TokenProvider.js.map +1 -1
  124. package/dist/cjs/shared/providers/UserProvider.d.ts +4 -3
  125. package/dist/cjs/shared/providers/UserProvider.d.ts.map +1 -1
  126. package/dist/cjs/shared/providers/UserProvider.js +46 -25
  127. package/dist/cjs/shared/providers/UserProvider.js.map +1 -1
  128. package/dist/cjs/types.d.ts +1 -0
  129. package/dist/cjs/types.d.ts.map +1 -1
  130. package/dist/cjs/types.js.map +1 -1
  131. package/dist/cjs/utils.d.ts.map +1 -1
  132. package/dist/esm/browser/storage.d.ts +3 -0
  133. package/dist/esm/browser/storage.d.ts.map +1 -1
  134. package/dist/esm/browser/storage.js +8 -0
  135. package/dist/esm/browser/storage.js.map +1 -1
  136. package/dist/esm/lib/cookies.d.ts +2 -2
  137. package/dist/esm/lib/cookies.d.ts.map +1 -1
  138. package/dist/esm/lib/cookies.js +7 -5
  139. package/dist/esm/lib/cookies.js.map +1 -1
  140. package/dist/esm/lib/postMessage.js +1 -1
  141. package/dist/esm/lib/postMessage.js.map +1 -1
  142. package/dist/esm/lib/windowUtil.d.ts.map +1 -1
  143. package/dist/esm/lib/windowUtil.js +1 -0
  144. package/dist/esm/lib/windowUtil.js.map +1 -1
  145. package/dist/esm/nextjs/config.d.ts.map +1 -1
  146. package/dist/esm/nextjs/config.js +12 -0
  147. package/dist/esm/nextjs/config.js.map +1 -1
  148. package/dist/esm/nextjs/hooks/index.d.ts +1 -1
  149. package/dist/esm/nextjs/hooks/index.d.ts.map +1 -1
  150. package/dist/esm/nextjs/hooks/index.js +1 -1
  151. package/dist/esm/nextjs/hooks/index.js.map +1 -1
  152. package/dist/esm/nextjs/hooks/useUserCookie.d.ts.map +1 -1
  153. package/dist/esm/nextjs/hooks/useUserCookie.js +45 -16
  154. package/dist/esm/nextjs/hooks/useUserCookie.js.map +1 -1
  155. package/dist/esm/nextjs/providers/NextAuthProvider.d.ts +5 -1
  156. package/dist/esm/nextjs/providers/NextAuthProvider.d.ts.map +1 -1
  157. package/dist/esm/nextjs/providers/NextAuthProvider.js +59 -30
  158. package/dist/esm/nextjs/providers/NextAuthProvider.js.map +1 -1
  159. package/dist/esm/reactjs/components/UserButton.js +3 -3
  160. package/dist/esm/reactjs/components/UserButton.js.map +1 -1
  161. package/dist/esm/reactjs/hooks/index.d.ts +0 -1
  162. package/dist/esm/reactjs/hooks/index.d.ts.map +1 -1
  163. package/dist/esm/reactjs/hooks/index.js +0 -1
  164. package/dist/esm/reactjs/hooks/index.js.map +1 -1
  165. package/dist/esm/services/AuthenticationService.d.ts +4 -1
  166. package/dist/esm/services/AuthenticationService.d.ts.map +1 -1
  167. package/dist/esm/services/AuthenticationService.js +39 -8
  168. package/dist/esm/services/AuthenticationService.js.map +1 -1
  169. package/dist/esm/shared/components/BlockDisplay.d.ts +7 -0
  170. package/dist/esm/shared/components/BlockDisplay.d.ts.map +1 -0
  171. package/dist/esm/shared/components/BlockDisplay.js +25 -0
  172. package/dist/esm/shared/components/BlockDisplay.js.map +1 -0
  173. package/dist/esm/shared/components/CivicAuthIframeContainer.d.ts.map +1 -1
  174. package/dist/esm/shared/components/CivicAuthIframeContainer.js +23 -14
  175. package/dist/esm/shared/components/CivicAuthIframeContainer.js.map +1 -1
  176. package/dist/esm/shared/components/IFrameAndLoading.d.ts +7 -0
  177. package/dist/esm/shared/components/IFrameAndLoading.d.ts.map +1 -0
  178. package/dist/esm/shared/components/IFrameAndLoading.js +22 -0
  179. package/dist/esm/shared/components/IFrameAndLoading.js.map +1 -0
  180. package/dist/esm/shared/hooks/index.d.ts +5 -1
  181. package/dist/esm/shared/hooks/index.d.ts.map +1 -1
  182. package/dist/esm/shared/hooks/index.js +5 -1
  183. package/dist/esm/shared/hooks/index.js.map +1 -1
  184. package/dist/esm/shared/hooks/useCivicAuthConfig.d.ts +3 -0
  185. package/dist/esm/shared/hooks/useCivicAuthConfig.d.ts.map +1 -0
  186. package/dist/esm/shared/hooks/useCivicAuthConfig.js +10 -0
  187. package/dist/esm/shared/hooks/useCivicAuthConfig.js.map +1 -0
  188. package/dist/esm/shared/hooks/useClientTokenExchangeSession.d.ts +3 -0
  189. package/dist/esm/shared/hooks/useClientTokenExchangeSession.d.ts.map +1 -0
  190. package/dist/esm/shared/hooks/useClientTokenExchangeSession.js +13 -0
  191. package/dist/esm/shared/hooks/useClientTokenExchangeSession.js.map +1 -0
  192. package/dist/esm/shared/hooks/useCurrentUrl.d.ts +3 -0
  193. package/dist/esm/shared/hooks/useCurrentUrl.d.ts.map +1 -0
  194. package/dist/esm/shared/hooks/useCurrentUrl.js +24 -0
  195. package/dist/esm/shared/hooks/useCurrentUrl.js.map +1 -0
  196. package/dist/esm/shared/hooks/useIsInIframe.d.ts +3 -0
  197. package/dist/esm/shared/hooks/useIsInIframe.d.ts.map +1 -0
  198. package/dist/esm/shared/hooks/useIsInIframe.js +14 -0
  199. package/dist/esm/shared/hooks/useIsInIframe.js.map +1 -0
  200. package/dist/esm/shared/hooks/useOAuthEndpoints.d.ts +4 -0
  201. package/dist/esm/shared/hooks/useOAuthEndpoints.d.ts.map +1 -0
  202. package/dist/esm/shared/hooks/useOAuthEndpoints.js +14 -0
  203. package/dist/esm/shared/hooks/useOAuthEndpoints.js.map +1 -0
  204. package/dist/esm/shared/hooks/useRefresh.d.ts +4 -0
  205. package/dist/esm/shared/hooks/useRefresh.d.ts.map +1 -0
  206. package/dist/esm/shared/hooks/useRefresh.js +38 -0
  207. package/dist/esm/shared/hooks/useRefresh.js.map +1 -0
  208. package/dist/esm/shared/hooks/useSession.d.ts +1 -1
  209. package/dist/esm/shared/hooks/useSession.d.ts.map +1 -1
  210. package/dist/esm/shared/hooks/useSignIn.d.ts +14 -0
  211. package/dist/esm/shared/hooks/useSignIn.d.ts.map +1 -0
  212. package/dist/esm/shared/hooks/useSignIn.js +71 -0
  213. package/dist/esm/shared/hooks/useSignIn.js.map +1 -0
  214. package/dist/esm/shared/lib/GenericAuthenticationRefresher.d.ts +4 -0
  215. package/dist/esm/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  216. package/dist/esm/shared/lib/GenericAuthenticationRefresher.js +30 -0
  217. package/dist/esm/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  218. package/dist/esm/shared/lib/types.d.ts +14 -1
  219. package/dist/esm/shared/lib/types.d.ts.map +1 -1
  220. package/dist/esm/shared/lib/types.js +2 -0
  221. package/dist/esm/shared/lib/types.js.map +1 -1
  222. package/dist/esm/shared/lib/util.d.ts.map +1 -1
  223. package/dist/esm/shared/lib/util.js +10 -2
  224. package/dist/esm/shared/lib/util.js.map +1 -1
  225. package/dist/esm/shared/providers/AuthProvider.d.ts +3 -2
  226. package/dist/esm/shared/providers/AuthProvider.d.ts.map +1 -1
  227. package/dist/esm/shared/providers/AuthProvider.js +37 -238
  228. package/dist/esm/shared/providers/AuthProvider.js.map +1 -1
  229. package/dist/esm/shared/providers/CivicAuthConfigContext.d.ts +16 -0
  230. package/dist/esm/shared/providers/CivicAuthConfigContext.d.ts.map +1 -0
  231. package/dist/esm/shared/providers/CivicAuthConfigContext.js +43 -0
  232. package/dist/esm/shared/providers/CivicAuthConfigContext.js.map +1 -0
  233. package/dist/esm/shared/providers/CivicAuthProvider.d.ts.map +1 -1
  234. package/dist/esm/shared/providers/CivicAuthProvider.js +23 -6
  235. package/dist/esm/shared/providers/CivicAuthProvider.js.map +1 -1
  236. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.d.ts +17 -0
  237. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.d.ts.map +1 -0
  238. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.js +146 -0
  239. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.js.map +1 -0
  240. package/dist/esm/shared/providers/IframeProvider.d.ts +7 -4
  241. package/dist/esm/shared/providers/IframeProvider.d.ts.map +1 -1
  242. package/dist/esm/shared/providers/IframeProvider.js +21 -3
  243. package/dist/esm/shared/providers/IframeProvider.js.map +1 -1
  244. package/dist/esm/shared/providers/SessionProvider.d.ts +10 -4
  245. package/dist/esm/shared/providers/SessionProvider.d.ts.map +1 -1
  246. package/dist/esm/shared/providers/SessionProvider.js +15 -5
  247. package/dist/esm/shared/providers/SessionProvider.js.map +1 -1
  248. package/dist/esm/shared/providers/TokenProvider.d.ts.map +1 -1
  249. package/dist/esm/shared/providers/TokenProvider.js +13 -24
  250. package/dist/esm/shared/providers/TokenProvider.js.map +1 -1
  251. package/dist/esm/shared/providers/UserProvider.d.ts +4 -3
  252. package/dist/esm/shared/providers/UserProvider.d.ts.map +1 -1
  253. package/dist/esm/shared/providers/UserProvider.js +30 -19
  254. package/dist/esm/shared/providers/UserProvider.js.map +1 -1
  255. package/dist/esm/types.d.ts +1 -0
  256. package/dist/esm/types.d.ts.map +1 -1
  257. package/dist/esm/types.js.map +1 -1
  258. package/dist/esm/utils.d.ts.map +1 -1
  259. package/dist/src/nextjs/hooks/useUserCookie.d.ts.map +1 -1
  260. package/dist/src/nextjs/hooks/useUserCookie.js +45 -16
  261. package/dist/src/nextjs/hooks/useUserCookie.js.map +1 -1
  262. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  263. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  264. package/dist/tsconfig.tsbuildinfo +1 -1
  265. package/package.json +9 -3
  266. package/.eslintignore +0 -3
  267. package/.eslintrc.json +0 -10
  268. package/.prettierignore +0 -3
  269. package/.prettierrc +0 -1
  270. package/.turbo/turbo-build.log +0 -13
  271. package/.turbo/turbo-lint$colon$fix.log +0 -10
  272. package/.turbo/turbo-test.log +0 -1153
  273. package/dist/cjs/nextjs/hooks/useTokenCookie.d.ts +0 -3
  274. package/dist/cjs/nextjs/hooks/useTokenCookie.d.ts.map +0 -1
  275. package/dist/cjs/nextjs/hooks/useTokenCookie.js +0 -41
  276. package/dist/cjs/nextjs/hooks/useTokenCookie.js.map +0 -1
  277. package/dist/cjs/shared/hooks/useConfig.d.ts +0 -3
  278. package/dist/cjs/shared/hooks/useConfig.d.ts.map +0 -1
  279. package/dist/cjs/shared/hooks/useConfig.js +0 -16
  280. package/dist/cjs/shared/hooks/useConfig.js.map +0 -1
  281. package/dist/cjs/shared/providers/ConfigProvider.d.ts +0 -21
  282. package/dist/cjs/shared/providers/ConfigProvider.d.ts.map +0 -1
  283. package/dist/cjs/shared/providers/ConfigProvider.js +0 -46
  284. package/dist/cjs/shared/providers/ConfigProvider.js.map +0 -1
  285. package/dist/esm/nextjs/hooks/useTokenCookie.d.ts +0 -3
  286. package/dist/esm/nextjs/hooks/useTokenCookie.d.ts.map +0 -1
  287. package/dist/esm/nextjs/hooks/useTokenCookie.js +0 -37
  288. package/dist/esm/nextjs/hooks/useTokenCookie.js.map +0 -1
  289. package/dist/esm/shared/hooks/useConfig.d.ts +0 -3
  290. package/dist/esm/shared/hooks/useConfig.d.ts.map +0 -1
  291. package/dist/esm/shared/hooks/useConfig.js +0 -13
  292. package/dist/esm/shared/hooks/useConfig.js.map +0 -1
  293. package/dist/esm/shared/providers/ConfigProvider.d.ts +0 -21
  294. package/dist/esm/shared/providers/ConfigProvider.d.ts.map +0 -1
  295. package/dist/esm/shared/providers/ConfigProvider.js +0 -19
  296. package/dist/esm/shared/providers/ConfigProvider.js.map +0 -1
  297. package/dist/src/browser/storage.d.ts +0 -6
  298. package/dist/src/browser/storage.d.ts.map +0 -1
  299. package/dist/src/browser/storage.js +0 -9
  300. package/dist/src/browser/storage.js.map +0 -1
  301. package/dist/src/config.d.ts +0 -3
  302. package/dist/src/config.d.ts.map +0 -1
  303. package/dist/src/config.js +0 -5
  304. package/dist/src/config.js.map +0 -1
  305. package/dist/src/constants.d.ts +0 -9
  306. package/dist/src/constants.d.ts.map +0 -1
  307. package/dist/src/constants.js +0 -17
  308. package/dist/src/constants.js.map +0 -1
  309. package/dist/src/index.d.ts +0 -4
  310. package/dist/src/index.d.ts.map +0 -1
  311. package/dist/src/index.js +0 -2
  312. package/dist/src/index.js.map +0 -1
  313. package/dist/src/lib/cookies.d.ts +0 -7
  314. package/dist/src/lib/cookies.d.ts.map +0 -1
  315. package/dist/src/lib/cookies.js +0 -23
  316. package/dist/src/lib/cookies.js.map +0 -1
  317. package/dist/src/lib/jwt.d.ts +0 -3
  318. package/dist/src/lib/jwt.d.ts.map +0 -1
  319. package/dist/src/lib/jwt.js +0 -9
  320. package/dist/src/lib/jwt.js.map +0 -1
  321. package/dist/src/lib/logger.d.ts +0 -26
  322. package/dist/src/lib/logger.d.ts.map +0 -1
  323. package/dist/src/lib/logger.js +0 -55
  324. package/dist/src/lib/logger.js.map +0 -1
  325. package/dist/src/lib/oauth.d.ts +0 -19
  326. package/dist/src/lib/oauth.d.ts.map +0 -1
  327. package/dist/src/lib/oauth.js +0 -60
  328. package/dist/src/lib/oauth.js.map +0 -1
  329. package/dist/src/lib/postMessage.d.ts +0 -4
  330. package/dist/src/lib/postMessage.d.ts.map +0 -1
  331. package/dist/src/lib/postMessage.js +0 -15
  332. package/dist/src/lib/postMessage.js.map +0 -1
  333. package/dist/src/lib/windowUtil.d.ts +0 -4
  334. package/dist/src/lib/windowUtil.d.ts.map +0 -1
  335. package/dist/src/lib/windowUtil.js +0 -30
  336. package/dist/src/lib/windowUtil.js.map +0 -1
  337. package/dist/src/nextjs/GetUser.d.ts +0 -6
  338. package/dist/src/nextjs/GetUser.d.ts.map +0 -1
  339. package/dist/src/nextjs/GetUser.js +0 -18
  340. package/dist/src/nextjs/GetUser.js.map +0 -1
  341. package/dist/src/nextjs/config.d.ts +0 -178
  342. package/dist/src/nextjs/config.d.ts.map +0 -1
  343. package/dist/src/nextjs/config.js +0 -161
  344. package/dist/src/nextjs/config.js.map +0 -1
  345. package/dist/src/nextjs/cookies.d.ts +0 -30
  346. package/dist/src/nextjs/cookies.d.ts.map +0 -1
  347. package/dist/src/nextjs/cookies.js +0 -112
  348. package/dist/src/nextjs/cookies.js.map +0 -1
  349. package/dist/src/nextjs/hooks/index.d.ts +0 -2
  350. package/dist/src/nextjs/hooks/index.d.ts.map +0 -1
  351. package/dist/src/nextjs/hooks/index.js +0 -2
  352. package/dist/src/nextjs/hooks/index.js.map +0 -1
  353. package/dist/src/nextjs/hooks/useTokenCookie.d.ts +0 -3
  354. package/dist/src/nextjs/hooks/useTokenCookie.d.ts.map +0 -1
  355. package/dist/src/nextjs/hooks/useTokenCookie.js +0 -37
  356. package/dist/src/nextjs/hooks/useTokenCookie.js.map +0 -1
  357. package/dist/src/nextjs/hooks/useUserCookie.d.ts +0 -3
  358. package/dist/src/nextjs/index.d.ts +0 -7
  359. package/dist/src/nextjs/index.d.ts.map +0 -1
  360. package/dist/src/nextjs/index.js +0 -6
  361. package/dist/src/nextjs/index.js.map +0 -1
  362. package/dist/src/nextjs/middleware/index.d.ts +0 -2
  363. package/dist/src/nextjs/middleware/index.d.ts.map +0 -1
  364. package/dist/src/nextjs/middleware/index.js +0 -2
  365. package/dist/src/nextjs/middleware/index.js.map +0 -1
  366. package/dist/src/nextjs/middleware.d.ts +0 -59
  367. package/dist/src/nextjs/middleware.d.ts.map +0 -1
  368. package/dist/src/nextjs/middleware.js +0 -107
  369. package/dist/src/nextjs/middleware.js.map +0 -1
  370. package/dist/src/nextjs/providers/NextAuthProvider.d.ts +0 -9
  371. package/dist/src/nextjs/providers/NextAuthProvider.d.ts.map +0 -1
  372. package/dist/src/nextjs/providers/NextAuthProvider.js +0 -50
  373. package/dist/src/nextjs/providers/NextAuthProvider.js.map +0 -1
  374. package/dist/src/nextjs/routeHandler.d.ts +0 -18
  375. package/dist/src/nextjs/routeHandler.d.ts.map +0 -1
  376. package/dist/src/nextjs/routeHandler.js +0 -212
  377. package/dist/src/nextjs/routeHandler.js.map +0 -1
  378. package/dist/src/nextjs/utils.d.ts +0 -3
  379. package/dist/src/nextjs/utils.d.ts.map +0 -1
  380. package/dist/src/nextjs/utils.js +0 -5
  381. package/dist/src/nextjs/utils.js.map +0 -1
  382. package/dist/src/reactjs/components/SignInButton.d.ts +0 -8
  383. package/dist/src/reactjs/components/SignInButton.d.ts.map +0 -1
  384. package/dist/src/reactjs/components/SignInButton.js +0 -14
  385. package/dist/src/reactjs/components/SignInButton.js.map +0 -1
  386. package/dist/src/reactjs/components/SignOutButton.d.ts +0 -6
  387. package/dist/src/reactjs/components/SignOutButton.d.ts.map +0 -1
  388. package/dist/src/reactjs/components/SignOutButton.js +0 -14
  389. package/dist/src/reactjs/components/SignOutButton.js.map +0 -1
  390. package/dist/src/reactjs/components/UserButton.d.ts +0 -8
  391. package/dist/src/reactjs/components/UserButton.d.ts.map +0 -1
  392. package/dist/src/reactjs/components/UserButton.js +0 -118
  393. package/dist/src/reactjs/components/UserButton.js.map +0 -1
  394. package/dist/src/reactjs/components/index.d.ts +0 -6
  395. package/dist/src/reactjs/components/index.d.ts.map +0 -1
  396. package/dist/src/reactjs/components/index.js +0 -6
  397. package/dist/src/reactjs/components/index.js.map +0 -1
  398. package/dist/src/reactjs/hooks/index.d.ts +0 -7
  399. package/dist/src/reactjs/hooks/index.d.ts.map +0 -1
  400. package/dist/src/reactjs/hooks/index.js +0 -7
  401. package/dist/src/reactjs/hooks/index.js.map +0 -1
  402. package/dist/src/reactjs/hooks/useAuth.d.ts +0 -3
  403. package/dist/src/reactjs/hooks/useAuth.d.ts.map +0 -1
  404. package/dist/src/reactjs/hooks/useAuth.js +0 -12
  405. package/dist/src/reactjs/hooks/useAuth.js.map +0 -1
  406. package/dist/src/reactjs/hooks/useUser.d.ts +0 -4
  407. package/dist/src/reactjs/hooks/useUser.d.ts.map +0 -1
  408. package/dist/src/reactjs/hooks/useUser.js +0 -12
  409. package/dist/src/reactjs/hooks/useUser.js.map +0 -1
  410. package/dist/src/reactjs/index.d.ts +0 -6
  411. package/dist/src/reactjs/index.d.ts.map +0 -1
  412. package/dist/src/reactjs/index.js +0 -8
  413. package/dist/src/reactjs/index.js.map +0 -1
  414. package/dist/src/reactjs/providers/index.d.ts +0 -8
  415. package/dist/src/reactjs/providers/index.d.ts.map +0 -1
  416. package/dist/src/reactjs/providers/index.js +0 -7
  417. package/dist/src/reactjs/providers/index.js.map +0 -1
  418. package/dist/src/server/ServerAuthenticationResolver.d.ts +0 -19
  419. package/dist/src/server/ServerAuthenticationResolver.d.ts.map +0 -1
  420. package/dist/src/server/ServerAuthenticationResolver.js +0 -61
  421. package/dist/src/server/ServerAuthenticationResolver.js.map +0 -1
  422. package/dist/src/server/config.d.ts +0 -9
  423. package/dist/src/server/config.d.ts.map +0 -1
  424. package/dist/src/server/config.js +0 -2
  425. package/dist/src/server/config.js.map +0 -1
  426. package/dist/src/server/index.d.ts +0 -7
  427. package/dist/src/server/index.d.ts.map +0 -1
  428. package/dist/src/server/index.js +0 -5
  429. package/dist/src/server/index.js.map +0 -1
  430. package/dist/src/server/login.d.ts +0 -17
  431. package/dist/src/server/login.d.ts.map +0 -1
  432. package/dist/src/server/login.js +0 -37
  433. package/dist/src/server/login.js.map +0 -1
  434. package/dist/src/server/refresh.d.ts +0 -7
  435. package/dist/src/server/refresh.d.ts.map +0 -1
  436. package/dist/src/server/refresh.js +0 -13
  437. package/dist/src/server/refresh.js.map +0 -1
  438. package/dist/src/services/AuthenticationService.d.ts +0 -87
  439. package/dist/src/services/AuthenticationService.d.ts.map +0 -1
  440. package/dist/src/services/AuthenticationService.js +0 -212
  441. package/dist/src/services/AuthenticationService.js.map +0 -1
  442. package/dist/src/services/PKCE.d.ts +0 -20
  443. package/dist/src/services/PKCE.d.ts.map +0 -1
  444. package/dist/src/services/PKCE.js +0 -44
  445. package/dist/src/services/PKCE.js.map +0 -1
  446. package/dist/src/services/types.d.ts +0 -23
  447. package/dist/src/services/types.d.ts.map +0 -1
  448. package/dist/src/services/types.js +0 -7
  449. package/dist/src/services/types.js.map +0 -1
  450. package/dist/src/shared/components/CivicAuthIframe.d.ts +0 -8
  451. package/dist/src/shared/components/CivicAuthIframe.d.ts.map +0 -1
  452. package/dist/src/shared/components/CivicAuthIframe.js +0 -9
  453. package/dist/src/shared/components/CivicAuthIframe.js.map +0 -1
  454. package/dist/src/shared/components/CivicAuthIframeContainer.d.ts +0 -9
  455. package/dist/src/shared/components/CivicAuthIframeContainer.d.ts.map +0 -1
  456. package/dist/src/shared/components/CivicAuthIframeContainer.js +0 -129
  457. package/dist/src/shared/components/CivicAuthIframeContainer.js.map +0 -1
  458. package/dist/src/shared/components/CloseIcon.d.ts +0 -4
  459. package/dist/src/shared/components/CloseIcon.d.ts.map +0 -1
  460. package/dist/src/shared/components/CloseIcon.js +0 -6
  461. package/dist/src/shared/components/CloseIcon.js.map +0 -1
  462. package/dist/src/shared/components/LoadingIcon.d.ts +0 -4
  463. package/dist/src/shared/components/LoadingIcon.d.ts.map +0 -1
  464. package/dist/src/shared/components/LoadingIcon.js +0 -30
  465. package/dist/src/shared/components/LoadingIcon.js.map +0 -1
  466. package/dist/src/shared/hooks/index.d.ts +0 -5
  467. package/dist/src/shared/hooks/index.d.ts.map +0 -1
  468. package/dist/src/shared/hooks/index.js +0 -5
  469. package/dist/src/shared/hooks/index.js.map +0 -1
  470. package/dist/src/shared/hooks/useAuth.d.ts +0 -3
  471. package/dist/src/shared/hooks/useAuth.d.ts.map +0 -1
  472. package/dist/src/shared/hooks/useAuth.js +0 -12
  473. package/dist/src/shared/hooks/useAuth.js.map +0 -1
  474. package/dist/src/shared/hooks/useConfig.d.ts +0 -3
  475. package/dist/src/shared/hooks/useConfig.d.ts.map +0 -1
  476. package/dist/src/shared/hooks/useConfig.js +0 -13
  477. package/dist/src/shared/hooks/useConfig.js.map +0 -1
  478. package/dist/src/shared/hooks/useIframe.d.ts +0 -3
  479. package/dist/src/shared/hooks/useIframe.d.ts.map +0 -1
  480. package/dist/src/shared/hooks/useIframe.js +0 -13
  481. package/dist/src/shared/hooks/useIframe.js.map +0 -1
  482. package/dist/src/shared/hooks/useSession.d.ts +0 -3
  483. package/dist/src/shared/hooks/useSession.d.ts.map +0 -1
  484. package/dist/src/shared/hooks/useSession.js +0 -13
  485. package/dist/src/shared/hooks/useSession.js.map +0 -1
  486. package/dist/src/shared/hooks/useToken.d.ts +0 -3
  487. package/dist/src/shared/hooks/useToken.d.ts.map +0 -1
  488. package/dist/src/shared/hooks/useToken.js +0 -12
  489. package/dist/src/shared/hooks/useToken.js.map +0 -1
  490. package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts +0 -16
  491. package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +0 -1
  492. package/dist/src/shared/lib/GenericAuthenticationRefresher.js +0 -43
  493. package/dist/src/shared/lib/GenericAuthenticationRefresher.js.map +0 -1
  494. package/dist/src/shared/lib/UserSession.d.ts +0 -12
  495. package/dist/src/shared/lib/UserSession.d.ts.map +0 -1
  496. package/dist/src/shared/lib/UserSession.js +0 -20
  497. package/dist/src/shared/lib/UserSession.js.map +0 -1
  498. package/dist/src/shared/lib/session.d.ts +0 -3
  499. package/dist/src/shared/lib/session.d.ts.map +0 -1
  500. package/dist/src/shared/lib/session.js +0 -10
  501. package/dist/src/shared/lib/session.js.map +0 -1
  502. package/dist/src/shared/lib/storage.d.ts +0 -25
  503. package/dist/src/shared/lib/storage.d.ts.map +0 -1
  504. package/dist/src/shared/lib/storage.js +0 -17
  505. package/dist/src/shared/lib/storage.js.map +0 -1
  506. package/dist/src/shared/lib/types.d.ts +0 -22
  507. package/dist/src/shared/lib/types.d.ts.map +0 -1
  508. package/dist/src/shared/lib/types.js +0 -16
  509. package/dist/src/shared/lib/types.js.map +0 -1
  510. package/dist/src/shared/lib/util.d.ts +0 -33
  511. package/dist/src/shared/lib/util.d.ts.map +0 -1
  512. package/dist/src/shared/lib/util.js +0 -124
  513. package/dist/src/shared/lib/util.js.map +0 -1
  514. package/dist/src/shared/providers/AuthContext.d.ts +0 -10
  515. package/dist/src/shared/providers/AuthContext.d.ts.map +0 -1
  516. package/dist/src/shared/providers/AuthContext.js +0 -3
  517. package/dist/src/shared/providers/AuthContext.js.map +0 -1
  518. package/dist/src/shared/providers/AuthProvider.d.ts +0 -20
  519. package/dist/src/shared/providers/AuthProvider.d.ts.map +0 -1
  520. package/dist/src/shared/providers/AuthProvider.js +0 -264
  521. package/dist/src/shared/providers/AuthProvider.js.map +0 -1
  522. package/dist/src/shared/providers/CivicAuthProvider.d.ts +0 -6
  523. package/dist/src/shared/providers/CivicAuthProvider.d.ts.map +0 -1
  524. package/dist/src/shared/providers/CivicAuthProvider.js +0 -15
  525. package/dist/src/shared/providers/CivicAuthProvider.js.map +0 -1
  526. package/dist/src/shared/providers/ConfigProvider.d.ts +0 -21
  527. package/dist/src/shared/providers/ConfigProvider.d.ts.map +0 -1
  528. package/dist/src/shared/providers/ConfigProvider.js +0 -19
  529. package/dist/src/shared/providers/ConfigProvider.js.map +0 -1
  530. package/dist/src/shared/providers/IframeProvider.d.ts +0 -16
  531. package/dist/src/shared/providers/IframeProvider.d.ts.map +0 -1
  532. package/dist/src/shared/providers/IframeProvider.js +0 -11
  533. package/dist/src/shared/providers/IframeProvider.js.map +0 -1
  534. package/dist/src/shared/providers/SessionProvider.d.ts +0 -13
  535. package/dist/src/shared/providers/SessionProvider.d.ts.map +0 -1
  536. package/dist/src/shared/providers/SessionProvider.js +0 -13
  537. package/dist/src/shared/providers/SessionProvider.js.map +0 -1
  538. package/dist/src/shared/providers/TokenProvider.d.ts +0 -18
  539. package/dist/src/shared/providers/TokenProvider.d.ts.map +0 -1
  540. package/dist/src/shared/providers/TokenProvider.js +0 -53
  541. package/dist/src/shared/providers/TokenProvider.js.map +0 -1
  542. package/dist/src/shared/providers/UserProvider.d.ts +0 -18
  543. package/dist/src/shared/providers/UserProvider.d.ts.map +0 -1
  544. package/dist/src/shared/providers/UserProvider.js +0 -38
  545. package/dist/src/shared/providers/UserProvider.js.map +0 -1
  546. package/dist/src/types.d.ts +0 -146
  547. package/dist/src/types.d.ts.map +0 -1
  548. package/dist/src/types.js +0 -2
  549. package/dist/src/types.js.map +0 -1
  550. package/dist/src/utils.d.ts +0 -15
  551. package/dist/src/utils.d.ts.map +0 -1
  552. package/dist/src/utils.js +0 -43
  553. package/dist/src/utils.js.map +0 -1
  554. package/dist/test/integration/sdk.test.d.ts +0 -2
  555. package/dist/test/integration/sdk.test.d.ts.map +0 -1
  556. package/dist/test/integration/sdk.test.js +0 -183
  557. package/dist/test/integration/sdk.test.js.map +0 -1
  558. package/dist/test/support/fixtures.d.ts +0 -26
  559. package/dist/test/support/fixtures.d.ts.map +0 -1
  560. package/dist/test/support/fixtures.js +0 -55
  561. package/dist/test/support/fixtures.js.map +0 -1
  562. package/dist/test/support/tokens.json +0 -26
  563. package/dist/test/unit/lib/oauth.test.d.ts +0 -2
  564. package/dist/test/unit/lib/oauth.test.d.ts.map +0 -1
  565. package/dist/test/unit/lib/oauth.test.js +0 -55
  566. package/dist/test/unit/lib/oauth.test.js.map +0 -1
  567. package/dist/test/unit/logger.test.d.ts +0 -2
  568. package/dist/test/unit/logger.test.d.ts.map +0 -1
  569. package/dist/test/unit/logger.test.js +0 -141
  570. package/dist/test/unit/logger.test.js.map +0 -1
  571. package/dist/test/unit/nextjs/NextAuthProvider.test.d.ts +0 -2
  572. package/dist/test/unit/nextjs/NextAuthProvider.test.d.ts.map +0 -1
  573. package/dist/test/unit/nextjs/NextAuthProvider.test.js +0 -29
  574. package/dist/test/unit/nextjs/NextAuthProvider.test.js.map +0 -1
  575. package/dist/test/unit/nextjs/config.test.d.ts +0 -2
  576. package/dist/test/unit/nextjs/config.test.d.ts.map +0 -1
  577. package/dist/test/unit/nextjs/config.test.js +0 -189
  578. package/dist/test/unit/nextjs/config.test.js.map +0 -1
  579. package/dist/test/unit/nextjs/getUser.test.d.ts +0 -2
  580. package/dist/test/unit/nextjs/getUser.test.d.ts.map +0 -1
  581. package/dist/test/unit/nextjs/getUser.test.js +0 -36
  582. package/dist/test/unit/nextjs/getUser.test.js.map +0 -1
  583. package/dist/test/unit/nextjs/middleware.test.d.ts +0 -2
  584. package/dist/test/unit/nextjs/middleware.test.d.ts.map +0 -1
  585. package/dist/test/unit/nextjs/middleware.test.js +0 -113
  586. package/dist/test/unit/nextjs/middleware.test.js.map +0 -1
  587. package/dist/test/unit/nextjs/utils.test.d.ts +0 -2
  588. package/dist/test/unit/nextjs/utils.test.d.ts.map +0 -1
  589. package/dist/test/unit/nextjs/utils.test.js +0 -13
  590. package/dist/test/unit/nextjs/utils.test.js.map +0 -1
  591. package/dist/test/unit/publicApi/apiSnapshot.test.d.ts +0 -2
  592. package/dist/test/unit/publicApi/apiSnapshot.test.d.ts.map +0 -1
  593. package/dist/test/unit/publicApi/apiSnapshot.test.js +0 -10
  594. package/dist/test/unit/publicApi/apiSnapshot.test.js.map +0 -1
  595. package/dist/test/unit/react/components/SignInButton.test.d.ts +0 -2
  596. package/dist/test/unit/react/components/SignInButton.test.d.ts.map +0 -1
  597. package/dist/test/unit/react/components/SignInButton.test.js +0 -31
  598. package/dist/test/unit/react/components/SignInButton.test.js.map +0 -1
  599. package/dist/test/unit/react/components/SignOutButton.test.d.ts +0 -2
  600. package/dist/test/unit/react/components/SignOutButton.test.d.ts.map +0 -1
  601. package/dist/test/unit/react/components/SignOutButton.test.js +0 -30
  602. package/dist/test/unit/react/components/SignOutButton.test.js.map +0 -1
  603. package/dist/test/unit/server/login.test.d.ts +0 -2
  604. package/dist/test/unit/server/login.test.d.ts.map +0 -1
  605. package/dist/test/unit/server/login.test.js +0 -127
  606. package/dist/test/unit/server/login.test.js.map +0 -1
  607. package/dist/test/unit/server/session.test.d.ts +0 -2
  608. package/dist/test/unit/server/session.test.d.ts.map +0 -1
  609. package/dist/test/unit/server/session.test.js +0 -41
  610. package/dist/test/unit/server/session.test.js.map +0 -1
  611. package/dist/test/unit/services/AuthenticationService.test.d.ts +0 -2
  612. package/dist/test/unit/services/AuthenticationService.test.d.ts.map +0 -1
  613. package/dist/test/unit/services/AuthenticationService.test.js +0 -104
  614. package/dist/test/unit/services/AuthenticationService.test.js.map +0 -1
  615. package/dist/test/unit/services/ServerAuthenticationResolver.test.d.ts +0 -2
  616. package/dist/test/unit/services/ServerAuthenticationResolver.test.d.ts.map +0 -1
  617. package/dist/test/unit/services/ServerAuthenticationResolver.test.js +0 -74
  618. package/dist/test/unit/services/ServerAuthenticationResolver.test.js.map +0 -1
  619. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.d.ts +0 -2
  620. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.d.ts.map +0 -1
  621. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.js +0 -61
  622. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.js.map +0 -1
  623. package/dist/test/unit/shared/UserSession.test.d.ts +0 -2
  624. package/dist/test/unit/shared/UserSession.test.d.ts.map +0 -1
  625. package/dist/test/unit/shared/UserSession.test.js +0 -37
  626. package/dist/test/unit/shared/UserSession.test.js.map +0 -1
  627. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.d.ts +0 -2
  628. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.d.ts.map +0 -1
  629. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js +0 -120
  630. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js.map +0 -1
  631. package/dist/test/unit/shared/storage.test.d.ts +0 -2
  632. package/dist/test/unit/shared/storage.test.d.ts.map +0 -1
  633. package/dist/test/unit/shared/storage.test.js +0 -53
  634. package/dist/test/unit/shared/storage.test.js.map +0 -1
  635. package/dist/test/unit/utils.test.d.ts +0 -2
  636. package/dist/test/unit/utils.test.d.ts.map +0 -1
  637. package/dist/test/unit/utils.test.js +0 -40
  638. package/dist/test/unit/utils.test.js.map +0 -1
  639. package/dist/vitest.config.d.ts +0 -3
  640. package/dist/vitest.config.d.ts.map +0 -1
  641. package/dist/vitest.config.js +0 -40
  642. package/dist/vitest.config.js.map +0 -1
  643. package/src/browser/storage.ts +0 -11
  644. package/src/config.ts +0 -6
  645. package/src/constants.ts +0 -29
  646. package/src/index.ts +0 -16
  647. package/src/lib/cookies.ts +0 -28
  648. package/src/lib/jwt.ts +0 -15
  649. package/src/lib/logger.ts +0 -72
  650. package/src/lib/oauth.ts +0 -83
  651. package/src/lib/postMessage.ts +0 -22
  652. package/src/lib/windowUtil.ts +0 -29
  653. package/src/nextjs/GetUser.ts +0 -22
  654. package/src/nextjs/config.ts +0 -203
  655. package/src/nextjs/cookies.ts +0 -162
  656. package/src/nextjs/hooks/index.ts +0 -1
  657. package/src/nextjs/hooks/useTokenCookie.ts +0 -41
  658. package/src/nextjs/hooks/useUserCookie.ts +0 -41
  659. package/src/nextjs/index.ts +0 -20
  660. package/src/nextjs/middleware/index.ts +0 -1
  661. package/src/nextjs/middleware.ts +0 -155
  662. package/src/nextjs/providers/NextAuthProvider.tsx +0 -87
  663. package/src/nextjs/routeHandler.ts +0 -297
  664. package/src/nextjs/utils.ts +0 -9
  665. package/src/reactjs/components/SignInButton.tsx +0 -32
  666. package/src/reactjs/components/SignOutButton.tsx +0 -24
  667. package/src/reactjs/components/UserButton.tsx +0 -239
  668. package/src/reactjs/components/index.ts +0 -5
  669. package/src/reactjs/hooks/index.ts +0 -6
  670. package/src/reactjs/hooks/useAuth.ts +0 -15
  671. package/src/reactjs/hooks/useUser.ts +0 -20
  672. package/src/reactjs/index.ts +0 -19
  673. package/src/reactjs/providers/index.ts +0 -27
  674. package/src/server/ServerAuthenticationResolver.ts +0 -107
  675. package/src/server/config.ts +0 -9
  676. package/src/server/index.ts +0 -13
  677. package/src/server/login.ts +0 -59
  678. package/src/server/refresh.ts +0 -23
  679. package/src/services/AuthenticationService.ts +0 -329
  680. package/src/services/PKCE.ts +0 -45
  681. package/src/services/types.ts +0 -54
  682. package/src/shared/components/CivicAuthIframe.tsx +0 -26
  683. package/src/shared/components/CivicAuthIframeContainer.tsx +0 -195
  684. package/src/shared/components/CloseIcon.tsx +0 -21
  685. package/src/shared/components/LoadingIcon.tsx +0 -53
  686. package/src/shared/hooks/index.ts +0 -4
  687. package/src/shared/hooks/useAuth.ts +0 -15
  688. package/src/shared/hooks/useConfig.ts +0 -14
  689. package/src/shared/hooks/useIframe.ts +0 -14
  690. package/src/shared/hooks/useSession.ts +0 -14
  691. package/src/shared/hooks/useToken.ts +0 -15
  692. package/src/shared/lib/GenericAuthenticationRefresher.ts +0 -75
  693. package/src/shared/lib/UserSession.ts +0 -25
  694. package/src/shared/lib/session.ts +0 -11
  695. package/src/shared/lib/storage.ts +0 -40
  696. package/src/shared/lib/types.ts +0 -26
  697. package/src/shared/lib/util.ts +0 -212
  698. package/src/shared/providers/AuthContext.tsx +0 -11
  699. package/src/shared/providers/AuthProvider.tsx +0 -397
  700. package/src/shared/providers/CivicAuthProvider.tsx +0 -31
  701. package/src/shared/providers/ConfigProvider.tsx +0 -50
  702. package/src/shared/providers/IframeProvider.tsx +0 -34
  703. package/src/shared/providers/SessionProvider.tsx +0 -29
  704. package/src/shared/providers/TokenProvider.tsx +0 -78
  705. package/src/shared/providers/UserProvider.tsx +0 -80
  706. package/src/types.ts +0 -227
  707. package/src/utils.ts +0 -58
  708. package/test/integration/sdk.test.tsx +0 -266
  709. package/test/support/fixtures.ts +0 -56
  710. package/test/support/tokens.json +0 -26
  711. package/test/unit/lib/oauth.test.ts +0 -72
  712. package/test/unit/logger.test.ts +0 -175
  713. package/test/unit/nextjs/NextAuthProvider.test.tsx +0 -38
  714. package/test/unit/nextjs/config.test.ts +0 -218
  715. package/test/unit/nextjs/getUser.test.ts +0 -41
  716. package/test/unit/nextjs/middleware.test.ts +0 -138
  717. package/test/unit/nextjs/routeHandler.test.ts.skipped +0 -369
  718. package/test/unit/nextjs/utils.test.ts +0 -17
  719. package/test/unit/publicApi/__snapshots__/apiSnapshot.test.ts.snap +0 -17
  720. package/test/unit/publicApi/apiSnapshot.test.ts +0 -11
  721. package/test/unit/react/components/SignInButton.test.tsx +0 -50
  722. package/test/unit/react/components/SignOutButton.test.tsx +0 -49
  723. package/test/unit/server/login.test.ts +0 -181
  724. package/test/unit/server/session.test.ts +0 -51
  725. package/test/unit/services/AuthenticationService.test.ts +0 -152
  726. package/test/unit/services/ServerAuthenticationResolver.test.ts +0 -115
  727. package/test/unit/shared/GenericAuthenticationRefresher.test.ts +0 -89
  728. package/test/unit/shared/UserSession.test.ts +0 -42
  729. package/test/unit/shared/components/CivicAuthIframeContainer.test.tsx +0 -154
  730. package/test/unit/shared/storage.test.ts +0 -67
  731. package/test/unit/utils.test.ts +0 -48
  732. package/tsconfig.build.json +0 -9
  733. package/tsconfig.cjs.json +0 -8
  734. package/tsconfig.esm.json +0 -7
  735. package/tsconfig.json +0 -42
  736. package/tsconfig.tsbuildinfo +0 -1
  737. package/vitest.config.ts +0 -41
@@ -7,6 +7,7 @@ export class GenericAuthenticationRefresher {
7
7
  endpointOverrides;
8
8
  oauth2client;
9
9
  endpoints;
10
+ refreshTimeout;
10
11
  constructor(authConfig, storage, endpointOverrides) {
11
12
  this.authConfig = authConfig;
12
13
  this.storage = storage;
@@ -39,5 +40,34 @@ export class GenericAuthenticationRefresher {
39
40
  await storeTokens(this.storage, refreshedTokens);
40
41
  return tokens;
41
42
  }
43
+ async handleRefresh() {
44
+ try {
45
+ await this.refreshTokens();
46
+ await this.setupAutorefresh(); // Reset the timeout after successful refresh
47
+ console.log("Autorefreshed tokens");
48
+ }
49
+ catch (error) {
50
+ console.error("Failed to refresh tokens:", error);
51
+ }
52
+ }
53
+ async setupAutorefresh() {
54
+ // Clear any existing timeout
55
+ this.clearAutorefresh();
56
+ // get expires_in
57
+ const tokens = await retrieveTokens(this.storage);
58
+ const expires_in = tokens?.expires_in || 60;
59
+ // Calculate time until expiry (subtract 30 seconds as buffer)
60
+ const bufferTimeMs = 30 * 1000; // 30 seconds in milliseconds
61
+ const expiresInMs = expires_in * 1000; // Convert to milliseconds
62
+ const refreshTimeMs = Math.max(0, expiresInMs - bufferTimeMs);
63
+ this.refreshTimeout = setTimeout(() => {
64
+ this.handleRefresh();
65
+ }, refreshTimeMs);
66
+ }
67
+ clearAutorefresh() {
68
+ if (this.refreshTimeout) {
69
+ clearTimeout(this.refreshTimeout);
70
+ }
71
+ }
42
72
  }
43
73
  //# sourceMappingURL=GenericAuthenticationRefresher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GenericAuthenticationRefresher.js","sourceRoot":"","sources":["../../../../src/shared/lib/GenericAuthenticationRefresher.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,OAAO,8BAA8B;IAK/B;IACA;IACA;IANF,YAAY,CAA2B;IACvC,SAAS,CAAwB;IAEzC,YACU,UAAsB,EACtB,OAAoB,EACpB,iBAAsC;QAFtC,eAAU,GAAV,UAAU,CAAY;QACtB,YAAO,GAAP,OAAO,CAAa;QACpB,sBAAiB,GAAjB,iBAAiB,CAAqB;IAC7C,CAAC;IAEJ,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,mBAAmB,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,IAAI;QACR,uBAAuB;QACvB,IAAI,CAAC,SAAS,GAAG,MAAM,yBAAyB,CAC9C,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,iBAAiB,CACvB,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAClC,IAAI,CAAC,UAAU,CAAC,QAAQ,EACxB,IAAI,CAAC,SAAS,CAAC,IAAI,EACnB,IAAI,CAAC,SAAS,CAAC,KAAK,EACpB;YACE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW;SACzC,CACF,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAChB,UAAsB,EACtB,OAAoB,EACpB,iBAAsC;QAEtC,MAAM,SAAS,GAAG,IAAI,8BAA8B,CAClD,UAAU,EACV,OAAO,EACP,iBAAiB,CAClB,CAAC;QACF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;QAEvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAE1C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAE1E,MAAM,YAAY,GAAG,IAAI,CAAC,YAAa,CAAC;QACxC,MAAM,eAAe,GACnB,MAAM,YAAY,CAAC,kBAAkB,CACnC,MAAM,CAAC,aAAa,CACrB,CAAC;QAEJ,MAAM,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAEjD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["import type { AuthenticationRefresher } from \"@/services/types.js\";\nimport type { AuthStorage, Endpoints, OIDCTokenResponseBody } from \"@/types.js\";\nimport {\n getEndpointsWithOverrides,\n retrieveTokens,\n storeTokens,\n} from \"@/shared/lib/util.js\";\nimport type { AuthConfig } from \"@/server/config.js\";\nimport { OAuth2Client } from \"oslo/oauth2\";\nimport { DEFAULT_AUTH_SERVER } from \"@/constants.js\";\n\nexport class GenericAuthenticationRefresher implements AuthenticationRefresher {\n private oauth2client: OAuth2Client | undefined;\n private endpoints: Endpoints | undefined;\n\n private constructor(\n private authConfig: AuthConfig,\n private storage: AuthStorage,\n private endpointOverrides?: Partial<Endpoints>,\n ) {}\n\n get oauthServer(): string {\n return this.authConfig.oauthServer || DEFAULT_AUTH_SERVER;\n }\n\n async init(): Promise<this> {\n // resolve oauth config\n this.endpoints = await getEndpointsWithOverrides(\n this.oauthServer,\n this.endpointOverrides,\n );\n this.oauth2client = new OAuth2Client(\n this.authConfig.clientId,\n this.endpoints.auth,\n this.endpoints.token,\n {\n redirectURI: this.authConfig.redirectUrl,\n },\n );\n\n return this;\n }\n\n static async build(\n authConfig: AuthConfig,\n storage: AuthStorage,\n endpointOverrides?: Partial<Endpoints>,\n ): Promise<GenericAuthenticationRefresher> {\n const refresher = new GenericAuthenticationRefresher(\n authConfig,\n storage,\n endpointOverrides,\n );\n await refresher.init();\n\n return refresher;\n }\n\n async refreshTokens() {\n if (!this.oauth2client) await this.init();\n\n const tokens = await retrieveTokens(this.storage);\n if (!tokens?.refresh_token) throw new Error(\"No refresh token available\");\n\n const oauth2Client = this.oauth2client!;\n const refreshedTokens =\n await oauth2Client.refreshAccessToken<OIDCTokenResponseBody>(\n tokens.refresh_token,\n );\n\n await storeTokens(this.storage, refreshedTokens);\n\n return tokens;\n }\n}\n"]}
1
+ {"version":3,"file":"GenericAuthenticationRefresher.js","sourceRoot":"","sources":["../../../../src/shared/lib/GenericAuthenticationRefresher.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AuthenticationRefresher } from \"@/services/types.js\";\nimport type { AuthStorage, Endpoints, OIDCTokenResponseBody } from \"@/types.js\";\nimport {\n getEndpointsWithOverrides,\n retrieveTokens,\n storeTokens,\n} from \"@/shared/lib/util.js\";\nimport type { AuthConfig } from \"@/server/config.js\";\nimport { OAuth2Client } from \"oslo/oauth2\";\nimport { DEFAULT_AUTH_SERVER } from \"@/constants.js\";\n\nexport class GenericAuthenticationRefresher implements AuthenticationRefresher {\n private oauth2client: OAuth2Client | undefined;\n private endpoints: Endpoints | undefined;\n private refreshTimeout: NodeJS.Timeout | undefined;\n\n private constructor(\n private authConfig: AuthConfig,\n private storage: AuthStorage,\n private endpointOverrides?: Partial<Endpoints>,\n ) {}\n\n get oauthServer(): string {\n return this.authConfig.oauthServer || DEFAULT_AUTH_SERVER;\n }\n\n async init(): Promise<this> {\n // resolve oauth config\n this.endpoints = await getEndpointsWithOverrides(\n this.oauthServer,\n this.endpointOverrides,\n );\n this.oauth2client = new OAuth2Client(\n this.authConfig.clientId,\n this.endpoints.auth,\n this.endpoints.token,\n {\n redirectURI: this.authConfig.redirectUrl,\n },\n );\n\n return this;\n }\n\n static async build(\n authConfig: AuthConfig,\n storage: AuthStorage,\n endpointOverrides?: Partial<Endpoints>,\n ): Promise<GenericAuthenticationRefresher> {\n const refresher = new GenericAuthenticationRefresher(\n authConfig,\n storage,\n endpointOverrides,\n );\n await refresher.init();\n\n return refresher;\n }\n\n async refreshTokens() {\n if (!this.oauth2client) await this.init();\n\n const tokens = await retrieveTokens(this.storage);\n if (!tokens?.refresh_token) throw new Error(\"No refresh token available\");\n\n const oauth2Client = this.oauth2client!;\n const refreshedTokens =\n await oauth2Client.refreshAccessToken<OIDCTokenResponseBody>(\n tokens.refresh_token,\n );\n\n await storeTokens(this.storage, refreshedTokens);\n\n return tokens;\n }\n\n private async handleRefresh() {\n try {\n await this.refreshTokens();\n await this.setupAutorefresh(); // Reset the timeout after successful refresh\n\n console.log(\"Autorefreshed tokens\");\n } catch (error) {\n console.error(\"Failed to refresh tokens:\", error);\n }\n }\n\n async setupAutorefresh() {\n // Clear any existing timeout\n this.clearAutorefresh();\n\n // get expires_in\n const tokens = await retrieveTokens(this.storage);\n const expires_in = tokens?.expires_in || 60;\n\n // Calculate time until expiry (subtract 30 seconds as buffer)\n const bufferTimeMs = 30 * 1000; // 30 seconds in milliseconds\n const expiresInMs = expires_in * 1000; // Convert to milliseconds\n const refreshTimeMs = Math.max(0, expiresInMs - bufferTimeMs);\n\n this.refreshTimeout = setTimeout(() => {\n this.handleRefresh();\n }, refreshTimeMs);\n }\n\n clearAutorefresh() {\n if (this.refreshTimeout) {\n clearTimeout(this.refreshTimeout);\n }\n }\n}\n"]}
@@ -1,7 +1,10 @@
1
+ import type { Endpoints } from "../../types.js";
1
2
  export declare enum OAuthTokens {
2
3
  ID_TOKEN = "id_token",
3
4
  ACCESS_TOKEN = "access_token",
4
- REFRESH_TOKEN = "refresh_token"
5
+ REFRESH_TOKEN = "refresh_token",
6
+ EXPIRES_IN = "expires_in",
7
+ TIMESTAMP = "timestamp"
5
8
  }
6
9
  export declare enum CodeVerifier {
7
10
  COOKIE_NAME = "code_verifier",
@@ -19,4 +22,14 @@ export interface CookieConfig {
19
22
  httpOnly?: boolean;
20
23
  }
21
24
  export type TokensCookieConfig = Record<OAuthTokens | CodeVerifier, CookieConfig>;
25
+ export type CivicAuthConfig = null | {
26
+ clientId: string;
27
+ redirectUrl: string;
28
+ oauthServer: string;
29
+ endpoints: Endpoints;
30
+ scopes: string[];
31
+ nonce?: string;
32
+ challengeUrl?: string;
33
+ logoutUrl?: string;
34
+ };
22
35
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/types.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACrB,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;CAChC;AAED,oBAAY,YAAY;IACtB,WAAW,kBAAkB;IAC7B,OAAO,YAAY;CACpB;AACD,oBAAY,WAAW;IACrB,IAAI,SAAS;CACd;AACD,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CACrC,WAAW,GAAG,YAAY,EAC1B,YAAY,CACb,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,oBAAY,WAAW;IACrB,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,SAAS,cAAc;CACxB;AAED,oBAAY,YAAY;IACtB,WAAW,kBAAkB;IAC7B,OAAO,YAAY;CACpB;AACD,oBAAY,WAAW;IACrB,IAAI,SAAS;CACd;AACD,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CACrC,WAAW,GAAG,YAAY,EAC1B,YAAY,CACb,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC"}
@@ -3,6 +3,8 @@ export var OAuthTokens;
3
3
  OAuthTokens["ID_TOKEN"] = "id_token";
4
4
  OAuthTokens["ACCESS_TOKEN"] = "access_token";
5
5
  OAuthTokens["REFRESH_TOKEN"] = "refresh_token";
6
+ OAuthTokens["EXPIRES_IN"] = "expires_in";
7
+ OAuthTokens["TIMESTAMP"] = "timestamp";
6
8
  })(OAuthTokens || (OAuthTokens = {}));
7
9
  export var CodeVerifier;
8
10
  (function (CodeVerifier) {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/shared/lib/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,oCAAqB,CAAA;IACrB,4CAA6B,CAAA;IAC7B,8CAA+B,CAAA;AACjC,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAED,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,6CAA6B,CAAA;IAC7B,mCAAmB,CAAA;AACrB,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AACD,MAAM,CAAN,IAAY,WAEX;AAFD,WAAY,WAAW;IACrB,4BAAa,CAAA;AACf,CAAC,EAFW,WAAW,KAAX,WAAW,QAEtB","sourcesContent":["export enum OAuthTokens {\n ID_TOKEN = \"id_token\",\n ACCESS_TOKEN = \"access_token\",\n REFRESH_TOKEN = \"refresh_token\",\n}\n\nexport enum CodeVerifier {\n COOKIE_NAME = \"code_verifier\",\n APP_URL = \"app_url\",\n}\nexport enum UserStorage {\n USER = \"user\",\n}\nexport interface CookieConfig {\n secure?: boolean;\n sameSite?: \"strict\" | \"lax\" | \"none\";\n domain?: string;\n path?: string;\n maxAge?: number;\n httpOnly?: boolean;\n}\n\nexport type TokensCookieConfig = Record<\n OAuthTokens | CodeVerifier,\n CookieConfig\n>;\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/shared/lib/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,oCAAqB,CAAA;IACrB,4CAA6B,CAAA;IAC7B,8CAA+B,CAAA;IAC/B,wCAAyB,CAAA;IACzB,sCAAuB,CAAA;AACzB,CAAC,EANW,WAAW,KAAX,WAAW,QAMtB;AAED,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,6CAA6B,CAAA;IAC7B,mCAAmB,CAAA;AACrB,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AACD,MAAM,CAAN,IAAY,WAEX;AAFD,WAAY,WAAW;IACrB,4BAAa,CAAA;AACf,CAAC,EAFW,WAAW,KAAX,WAAW,QAEtB","sourcesContent":["import type { Endpoints } from \"@/types.js\";\n\nexport enum OAuthTokens {\n ID_TOKEN = \"id_token\",\n ACCESS_TOKEN = \"access_token\",\n REFRESH_TOKEN = \"refresh_token\",\n EXPIRES_IN = \"expires_in\",\n TIMESTAMP = \"timestamp\",\n}\n\nexport enum CodeVerifier {\n COOKIE_NAME = \"code_verifier\",\n APP_URL = \"app_url\",\n}\nexport enum UserStorage {\n USER = \"user\",\n}\nexport interface CookieConfig {\n secure?: boolean;\n sameSite?: \"strict\" | \"lax\" | \"none\";\n domain?: string;\n path?: string;\n maxAge?: number;\n httpOnly?: boolean;\n}\n\nexport type TokensCookieConfig = Record<\n OAuthTokens | CodeVerifier,\n CookieConfig\n>;\n\nexport type CivicAuthConfig = null | {\n clientId: string;\n redirectUrl: string;\n oauthServer: string;\n endpoints: Endpoints;\n scopes: string[];\n nonce?: string;\n challengeUrl?: string;\n logoutUrl?: string;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/util.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,qBAAqB,EACrB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGtE;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,MAAM,GAAE,OAAO,GAAG,MAAe,GAChC,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,iBAAiB,GAAE,OAAO,CAAC,SAAS,CAAM,GACzC,OAAO,CAAC,SAAS,CAAC,CAMpB;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAEvC,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,OAAO,CAAC,GAAG,CAAC,CA2Bf;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAEvC,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,OAAO,CAAC,GAAG,CAAC,CAIf;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,GACnB,YAAY,CAId;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,kCAqBrB;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,qBAAqB,iBAQ9B;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,iBAKrD;AACD,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,iBAGnD;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAYvC;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CA2BvB"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/util.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,qBAAqB,EACrB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGtE;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,MAAM,GAAE,OAAO,GAAG,MAAe,GAChC,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,iBAAiB,GAAE,OAAO,CAAC,SAAS,CAAM,GACzC,OAAO,CAAC,SAAS,CAAC,CAMpB;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAEvC,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,OAAO,CAAC,GAAG,CAAC,CA2Bf;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAEvC,YAAY,EAAE,YAAY,CAAC;CAC5B,GAAG,OAAO,CAAC,GAAG,CAAC,CAIf;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,GACnB,YAAY,CAId;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,kCAqBrB;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,qBAAqB,iBAY9B;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,iBAKrD;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,iBAGnD;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAgBvC;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CA2BvB"}
@@ -81,10 +81,14 @@ export async function storeTokens(storage, tokens) {
81
81
  if (tokens.refresh_token) {
82
82
  await storage.set(OAuthTokens.REFRESH_TOKEN, tokens.refresh_token);
83
83
  }
84
+ if (tokens.expires_in) {
85
+ await storage.set(OAuthTokens.EXPIRES_IN, tokens.expires_in.toString());
86
+ await storage.set(OAuthTokens.TIMESTAMP, new Date().getTime().toString());
87
+ }
84
88
  }
85
89
  export async function clearTokens(storage) {
86
- const clearOAuthPromises = Object.values(OAuthTokens).map((cookie) => {
87
- storage.set(cookie, "");
90
+ const clearOAuthPromises = Object.values(OAuthTokens).map(async (key) => {
91
+ await storage.set(key, "");
88
92
  });
89
93
  await Promise.all([...clearOAuthPromises]);
90
94
  }
@@ -96,12 +100,16 @@ export async function retrieveTokens(storage) {
96
100
  const idToken = await storage.get(OAuthTokens.ID_TOKEN);
97
101
  const accessToken = await storage.get(OAuthTokens.ACCESS_TOKEN);
98
102
  const refreshToken = await storage.get(OAuthTokens.REFRESH_TOKEN);
103
+ const expiresIn = await storage.get(OAuthTokens.EXPIRES_IN);
104
+ const timestamp = await storage.get(OAuthTokens.TIMESTAMP);
99
105
  if (!idToken || !accessToken)
100
106
  return null;
101
107
  return {
102
108
  id_token: idToken,
103
109
  access_token: accessToken,
104
110
  refresh_token: refreshToken ?? undefined,
111
+ expires_in: expiresIn ? parseInt(expiresIn, 10) : undefined, // Convert string to number
112
+ timestamp: timestamp ? parseInt(timestamp, 10) : undefined, // Convert string to number
105
113
  };
106
114
  }
107
115
  export async function validateOauth2Tokens(tokens, endpoints, oauth2Client, issuer) {
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/shared/lib/util.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,YAAoB,EACpB,SAA2B,MAAM;IAEjC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC3D,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;SACxD,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,WAAmB,EACnB,oBAAwC,EAAE;IAE1C,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACvD,OAAO;QACL,GAAG,SAAS;QACZ,GAAG,iBAAiB;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAU3C;IACC,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAC/C,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,iBAAiB,CACzB,CAAC;IACF,MAAM,YAAY,GAAG,iBAAiB,CACpC,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,WAAW,EAClB,SAAS,CACV,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,sBAAsB,CAAC;QACzD,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;IACH,yGAAyG;IACzG,yEAAyE;IACzE,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAC1D,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,uDAAuD;QACvD,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IACD,uDAAuD;IACvD,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAElD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAO5C;IACC,kCAAkC;IAClC,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,MAAM,CAAC,CAAC;IAC9D,OAAO,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAAgB,EAChB,WAAmB,EACnB,SAAoB;IAEpB,OAAO,IAAI,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE;QACjE,WAAW,EAAE,WAAW;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,KAAa,EACb,YAA0B,EAC1B,YAA0B,EAC1B,WAAmB,EACnB,SAAoB;IAEpB,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAC;IAC1D,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAEvE,MAAM,MAAM,GACV,MAAM,YAAY,CAAC,yBAAyB,CAAwB,IAAI,EAAE;QACxE,YAAY;KACb,CAAC,CAAC;IAEL,2BAA2B;IAC3B,IAAI,CAAC;QACH,MAAM,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACxD,MAAM,IAAI,KAAK,CACb,kCAAmC,KAAe,CAAC,OAAO,EAAE,CAC7D,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAoB,EACpB,MAA6B;IAE7B,4GAA4G;IAC5G,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IACjE,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACnE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;AAC7C,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAoB;IAClD,MAAM,WAAW,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAoB;IAEpB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAElE,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE1C,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,YAAY,EAAE,WAAW;QACzB,aAAa,EAAE,YAAY,IAAI,SAAS;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAA6B,EAC7B,SAAoB,EACpB,YAA0B,EAC1B,MAAc;IAEd,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9D,wBAAwB;IACxB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,SAAS,CAC1C,MAAM,CAAC,QAAQ,EACf,IAAI,EACJ;QACE,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,YAAY,CAAC,QAAQ;KAChC,CACF,CAAC;IAEF,4BAA4B;IAC5B,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,SAAS,CAC9C,MAAM,CAAC,YAAY,EACnB,IAAI,EACJ;QACE,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC;KACpC,CACF,CAAC;IAEF,OAAO,gBAAgB,CAAC;QACtB,QAAQ,EAAE,eAAe,CAAC,OAAO;QACjC,YAAY,EAAE,mBAAmB,CAAC,OAAO;QACzC,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC,CAAC;AACL,CAAC","sourcesContent":["// Utility functions shared by auth server and client integrations\n// Typically these functions should be used inside AuthenticationInitiator and AuthenticationResolver implementations\nimport type {\n AuthStorage,\n Endpoints,\n JWTPayload,\n OIDCTokenResponseBody,\n ParsedTokens,\n} from \"@/types.js\";\nimport { OAuthTokens } from \"./types.js\";\nimport { OAuth2Client } from \"oslo/oauth2\";\nimport { getIssuerVariations, getOauthEndpoints } from \"@/lib/oauth.js\";\nimport * as jose from \"jose\";\nimport { withoutUndefined } from \"@/utils.js\";\nimport type { PKCEConsumer, PKCEProducer } from \"@/services/types.js\";\nimport { GenericUserSession } from \"@/shared/lib/UserSession.js\";\n\n/**\n * Given a PKCE code verifier, derive the code challenge using SHA\n */\nexport async function deriveCodeChallenge(\n codeVerifier: string,\n method: \"Plain\" | \"S256\" = \"S256\",\n): Promise<string> {\n if (method === \"Plain\") {\n console.warn(\"Using insecure plain code challenge method\");\n return codeVerifier;\n }\n\n const encoder = new TextEncoder();\n const data = encoder.encode(codeVerifier);\n const digest = await crypto.subtle.digest(\"SHA-256\", data);\n return btoa(String.fromCharCode(...new Uint8Array(digest)))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nexport async function getEndpointsWithOverrides(\n oauthServer: string,\n endpointOverrides: Partial<Endpoints> = {},\n): Promise<Endpoints> {\n const endpoints = await getOauthEndpoints(oauthServer);\n return {\n ...endpoints,\n ...endpointOverrides,\n };\n}\n\nexport async function generateOauthLoginUrl(config: {\n clientId: string;\n scopes: string[];\n state: string;\n redirectUrl: string;\n oauthServer: string;\n nonce?: string;\n endpointOverrides?: Partial<Endpoints>;\n // used to get the PKCE challenge\n pkceConsumer: PKCEConsumer;\n}): Promise<URL> {\n const endpoints = await getEndpointsWithOverrides(\n config.oauthServer,\n config.endpointOverrides,\n );\n const oauth2Client = buildOauth2Client(\n config.clientId,\n config.redirectUrl,\n endpoints,\n );\n const challenge = await config.pkceConsumer.getCodeChallenge();\n const oAuthUrl = await oauth2Client.createAuthorizationURL({\n state: config.state,\n scopes: config.scopes,\n });\n // The OAuth2 client supports PKCE, but does not allow passing in a code challenge from some other source\n // It only allows passing in a code verifier which it then hashes itself.\n oAuthUrl.searchParams.append(\"code_challenge\", challenge);\n oAuthUrl.searchParams.append(\"code_challenge_method\", \"S256\");\n if (config.nonce) {\n // nonce isn't supported by oslo, so we add it manually\n oAuthUrl.searchParams.append(\"nonce\", config.nonce);\n }\n // Required by the auth server for offline_access scope\n oAuthUrl.searchParams.append(\"prompt\", \"consent\");\n\n return oAuthUrl;\n}\n\nexport async function generateOauthLogoutUrl(config: {\n clientId: string;\n scopes: string[];\n oauthServer: string;\n endpointOverrides?: Partial<Endpoints>;\n // used to get the PKCE challenge\n pkceConsumer: PKCEConsumer;\n}): Promise<URL> {\n // TODO TECH-676: Implement logout\n console.log(\"generateOauthLogoutUrl not implemented\", config);\n return new URL(\"http://localhost\");\n}\n\nexport function buildOauth2Client(\n clientId: string,\n redirectUri: string,\n endpoints: Endpoints,\n): OAuth2Client {\n return new OAuth2Client(clientId, endpoints.auth, endpoints.token, {\n redirectURI: redirectUri,\n });\n}\n\nexport async function exchangeTokens(\n code: string,\n state: string,\n pkceProducer: PKCEProducer,\n oauth2Client: OAuth2Client,\n oauthServer: string,\n endpoints: Endpoints,\n) {\n const codeVerifier = await pkceProducer.getCodeVerifier();\n if (!codeVerifier) throw new Error(\"Code verifier not found in state\");\n\n const tokens =\n await oauth2Client.validateAuthorizationCode<OIDCTokenResponseBody>(code, {\n codeVerifier,\n });\n\n // Validate relevant tokens\n try {\n await validateOauth2Tokens(tokens, endpoints, oauth2Client, oauthServer);\n } catch (error) {\n console.error(\"tokenExchange error\", { error, tokens });\n throw new Error(\n `OIDC tokens validation failed: ${(error as Error).message}`,\n );\n }\n\n return tokens;\n}\n\nexport async function storeTokens(\n storage: AuthStorage,\n tokens: OIDCTokenResponseBody,\n) {\n // store tokens in storage ( TODO we should probably store them against the state to allow multiple logins )\n await storage.set(OAuthTokens.ID_TOKEN, tokens.id_token);\n await storage.set(OAuthTokens.ACCESS_TOKEN, tokens.access_token);\n if (tokens.refresh_token) {\n await storage.set(OAuthTokens.REFRESH_TOKEN, tokens.refresh_token);\n }\n}\n\nexport async function clearTokens(storage: AuthStorage) {\n const clearOAuthPromises = Object.values(OAuthTokens).map((cookie) => {\n storage.set(cookie, \"\");\n });\n await Promise.all([...clearOAuthPromises]);\n}\nexport async function clearUser(storage: AuthStorage) {\n const userSession = new GenericUserSession(storage);\n await userSession.set(null);\n}\n\nexport async function retrieveTokens(\n storage: AuthStorage,\n): Promise<OIDCTokenResponseBody | null> {\n const idToken = await storage.get(OAuthTokens.ID_TOKEN);\n const accessToken = await storage.get(OAuthTokens.ACCESS_TOKEN);\n const refreshToken = await storage.get(OAuthTokens.REFRESH_TOKEN);\n\n if (!idToken || !accessToken) return null;\n\n return {\n id_token: idToken,\n access_token: accessToken,\n refresh_token: refreshToken ?? undefined,\n };\n}\n\nexport async function validateOauth2Tokens(\n tokens: OIDCTokenResponseBody,\n endpoints: Endpoints,\n oauth2Client: OAuth2Client,\n issuer: string,\n): Promise<ParsedTokens> {\n const JWKS = jose.createRemoteJWKSet(new URL(endpoints.jwks));\n\n // validate the ID token\n const idTokenResponse = await jose.jwtVerify<JWTPayload>(\n tokens.id_token,\n JWKS,\n {\n issuer: getIssuerVariations(issuer),\n audience: oauth2Client.clientId,\n },\n );\n\n // validate the access token\n const accessTokenResponse = await jose.jwtVerify<JWTPayload>(\n tokens.access_token,\n JWKS,\n {\n issuer: getIssuerVariations(issuer),\n },\n );\n\n return withoutUndefined({\n id_token: idTokenResponse.payload,\n access_token: accessTokenResponse.payload,\n refresh_token: tokens.refresh_token,\n });\n}\n"]}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/shared/lib/util.ts"],"names":[],"mappings":"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","sourcesContent":["// Utility functions shared by auth server and client integrations\n// Typically these functions should be used inside AuthenticationInitiator and AuthenticationResolver implementations\nimport type {\n AuthStorage,\n Endpoints,\n JWTPayload,\n OIDCTokenResponseBody,\n ParsedTokens,\n} from \"@/types.js\";\nimport { OAuthTokens } from \"./types.js\";\nimport { OAuth2Client } from \"oslo/oauth2\";\nimport { getIssuerVariations, getOauthEndpoints } from \"@/lib/oauth.js\";\nimport * as jose from \"jose\";\nimport { withoutUndefined } from \"@/utils.js\";\nimport type { PKCEConsumer, PKCEProducer } from \"@/services/types.js\";\nimport { GenericUserSession } from \"@/shared/lib/UserSession.js\";\n\n/**\n * Given a PKCE code verifier, derive the code challenge using SHA\n */\nexport async function deriveCodeChallenge(\n codeVerifier: string,\n method: \"Plain\" | \"S256\" = \"S256\",\n): Promise<string> {\n if (method === \"Plain\") {\n console.warn(\"Using insecure plain code challenge method\");\n return codeVerifier;\n }\n\n const encoder = new TextEncoder();\n const data = encoder.encode(codeVerifier);\n const digest = await crypto.subtle.digest(\"SHA-256\", data);\n return btoa(String.fromCharCode(...new Uint8Array(digest)))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nexport async function getEndpointsWithOverrides(\n oauthServer: string,\n endpointOverrides: Partial<Endpoints> = {},\n): Promise<Endpoints> {\n const endpoints = await getOauthEndpoints(oauthServer);\n return {\n ...endpoints,\n ...endpointOverrides,\n };\n}\n\nexport async function generateOauthLoginUrl(config: {\n clientId: string;\n scopes: string[];\n state: string;\n redirectUrl: string;\n oauthServer: string;\n nonce?: string;\n endpointOverrides?: Partial<Endpoints>;\n // used to get the PKCE challenge\n pkceConsumer: PKCEConsumer;\n}): Promise<URL> {\n const endpoints = await getEndpointsWithOverrides(\n config.oauthServer,\n config.endpointOverrides,\n );\n const oauth2Client = buildOauth2Client(\n config.clientId,\n config.redirectUrl,\n endpoints,\n );\n const challenge = await config.pkceConsumer.getCodeChallenge();\n const oAuthUrl = await oauth2Client.createAuthorizationURL({\n state: config.state,\n scopes: config.scopes,\n });\n // The OAuth2 client supports PKCE, but does not allow passing in a code challenge from some other source\n // It only allows passing in a code verifier which it then hashes itself.\n oAuthUrl.searchParams.append(\"code_challenge\", challenge);\n oAuthUrl.searchParams.append(\"code_challenge_method\", \"S256\");\n if (config.nonce) {\n // nonce isn't supported by oslo, so we add it manually\n oAuthUrl.searchParams.append(\"nonce\", config.nonce);\n }\n // Required by the auth server for offline_access scope\n oAuthUrl.searchParams.append(\"prompt\", \"consent\");\n\n return oAuthUrl;\n}\n\nexport async function generateOauthLogoutUrl(config: {\n clientId: string;\n scopes: string[];\n oauthServer: string;\n endpointOverrides?: Partial<Endpoints>;\n // used to get the PKCE challenge\n pkceConsumer: PKCEConsumer;\n}): Promise<URL> {\n // TODO TECH-676: Implement logout\n console.log(\"generateOauthLogoutUrl not implemented\", config);\n return new URL(\"http://localhost\");\n}\n\nexport function buildOauth2Client(\n clientId: string,\n redirectUri: string,\n endpoints: Endpoints,\n): OAuth2Client {\n return new OAuth2Client(clientId, endpoints.auth, endpoints.token, {\n redirectURI: redirectUri,\n });\n}\n\nexport async function exchangeTokens(\n code: string,\n state: string,\n pkceProducer: PKCEProducer,\n oauth2Client: OAuth2Client,\n oauthServer: string,\n endpoints: Endpoints,\n) {\n const codeVerifier = await pkceProducer.getCodeVerifier();\n if (!codeVerifier) throw new Error(\"Code verifier not found in state\");\n\n const tokens =\n await oauth2Client.validateAuthorizationCode<OIDCTokenResponseBody>(code, {\n codeVerifier,\n });\n\n // Validate relevant tokens\n try {\n await validateOauth2Tokens(tokens, endpoints, oauth2Client, oauthServer);\n } catch (error) {\n console.error(\"tokenExchange error\", { error, tokens });\n throw new Error(\n `OIDC tokens validation failed: ${(error as Error).message}`,\n );\n }\n\n return tokens;\n}\n\nexport async function storeTokens(\n storage: AuthStorage,\n tokens: OIDCTokenResponseBody,\n) {\n // store tokens in storage ( TODO we should probably store them against the state to allow multiple logins )\n await storage.set(OAuthTokens.ID_TOKEN, tokens.id_token);\n await storage.set(OAuthTokens.ACCESS_TOKEN, tokens.access_token);\n if (tokens.refresh_token) {\n await storage.set(OAuthTokens.REFRESH_TOKEN, tokens.refresh_token);\n }\n if (tokens.expires_in) {\n await storage.set(OAuthTokens.EXPIRES_IN, tokens.expires_in.toString());\n await storage.set(OAuthTokens.TIMESTAMP, new Date().getTime().toString());\n }\n}\n\nexport async function clearTokens(storage: AuthStorage) {\n const clearOAuthPromises = Object.values(OAuthTokens).map(async (key) => {\n await storage.set(key, \"\");\n });\n await Promise.all([...clearOAuthPromises]);\n}\n\nexport async function clearUser(storage: AuthStorage) {\n const userSession = new GenericUserSession(storage);\n await userSession.set(null);\n}\n\nexport async function retrieveTokens(\n storage: AuthStorage,\n): Promise<OIDCTokenResponseBody | null> {\n const idToken = await storage.get(OAuthTokens.ID_TOKEN);\n const accessToken = await storage.get(OAuthTokens.ACCESS_TOKEN);\n const refreshToken = await storage.get(OAuthTokens.REFRESH_TOKEN);\n const expiresIn = await storage.get(OAuthTokens.EXPIRES_IN);\n const timestamp = await storage.get(OAuthTokens.TIMESTAMP);\n\n if (!idToken || !accessToken) return null;\n\n return {\n id_token: idToken,\n access_token: accessToken,\n refresh_token: refreshToken ?? undefined,\n expires_in: expiresIn ? parseInt(expiresIn, 10) : undefined, // Convert string to number\n timestamp: timestamp ? parseInt(timestamp, 10) : undefined, // Convert string to number\n };\n}\n\nexport async function validateOauth2Tokens(\n tokens: OIDCTokenResponseBody,\n endpoints: Endpoints,\n oauth2Client: OAuth2Client,\n issuer: string,\n): Promise<ParsedTokens> {\n const JWKS = jose.createRemoteJWKSet(new URL(endpoints.jwks));\n\n // validate the ID token\n const idTokenResponse = await jose.jwtVerify<JWTPayload>(\n tokens.id_token,\n JWKS,\n {\n issuer: getIssuerVariations(issuer),\n audience: oauth2Client.clientId,\n },\n );\n\n // validate the access token\n const accessTokenResponse = await jose.jwtVerify<JWTPayload>(\n tokens.access_token,\n JWKS,\n {\n issuer: getIssuerVariations(issuer),\n },\n );\n\n return withoutUndefined({\n id_token: idTokenResponse.payload,\n access_token: accessTokenResponse.payload,\n refresh_token: tokens.refresh_token,\n });\n}\n"]}
@@ -1,13 +1,14 @@
1
1
  import React, { type ReactNode } from "react";
2
2
  import type { Config, SessionData } from "../../types.js";
3
3
  import type { PKCEConsumer } from "../../services/types.js";
4
+ export type IframeMode = "embedded" | "modal";
4
5
  export type AuthProviderProps = {
5
6
  children: ReactNode;
6
7
  clientId: string;
7
8
  nonce?: string;
8
9
  onSignIn?: (error?: Error) => void;
9
10
  onSignOut?: () => Promise<void>;
10
- modalIframe?: boolean;
11
+ iframeMode?: IframeMode;
11
12
  config?: Config;
12
13
  redirectUrl?: string;
13
14
  };
@@ -15,6 +16,6 @@ export type InternalAuthProviderProps = AuthProviderProps & {
15
16
  sessionData?: SessionData;
16
17
  pkceConsumer?: PKCEConsumer;
17
18
  };
18
- declare const AuthProvider: ({ children, clientId, redirectUrl: inputRedirectUrl, config, onSignIn, onSignOut, pkceConsumer, nonce, modalIframe, sessionData: inputSessionData, }: InternalAuthProviderProps) => React.JSX.Element | null;
19
+ declare const AuthProvider: ({ children, onSignIn, onSignOut, pkceConsumer, iframeMode, }: InternalAuthProviderProps) => React.JSX.Element;
19
20
  export { AuthProvider };
20
21
  //# sourceMappingURL=AuthProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/AuthProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EACZ,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,MAAM,EAAe,WAAW,EAAE,MAAM,YAAY,CAAC;AAanE,OAAO,KAAK,EAA0B,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAqBhF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,GAAG;IAC1D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAoCF,QAAA,MAAM,YAAY,yJAWf,yBAAyB,6BAgS3B,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/AuthProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAgC,MAAM,OAAO,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAkBxD,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;AAC9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,GAAG;IAC1D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF,QAAA,MAAM,YAAY,iEAMf,yBAAyB,sBA6D3B,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -1,23 +1,11 @@
1
1
  "use client";
2
- import React, { useCallback, useEffect, useMemo, useRef, useState, } from "react";
3
- import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
4
- import { CivicAuthIframeContainer } from "../../shared/components/CivicAuthIframeContainer.js";
5
- import { TokenProvider } from "../../shared/providers/TokenProvider.js";
6
- import { SessionProvider } from "../../shared/providers/SessionProvider.js";
7
- import { DEFAULT_SCOPES } from "../../constants.js";
8
- import { authConfig } from "../../config.js";
9
- import { LoadingIcon } from "../../shared/components/LoadingIcon.js";
10
- import { isWindowInIframe } from "../../lib/windowUtil.js";
2
+ import React, { useEffect, useMemo, useState } from "react";
11
3
  import { AuthContext } from "../../shared/providers/AuthContext.js";
12
- import { BrowserAuthenticationInitiator, BrowserAuthenticationService, } from "../../services/AuthenticationService.js";
13
- import { PopupError } from "../../services/types.js";
14
- import { ConfidentialClientPKCEConsumer } from "../../services/PKCE.js";
15
- import { generateState } from "../../lib/oauth.js";
16
- import { LocalStorageAdapter } from "../../browser/storage.js";
17
- import { ConfigProvider } from "../../shared/providers/ConfigProvider.js";
18
- import { getUser } from "../lib/session.js";
19
- import { GenericUserSession } from "../lib/UserSession.js";
20
- import { IframeProvider } from "../../shared/providers/IframeProvider.js";
4
+ import { useSignIn } from "../../shared/hooks/useSignIn.js";
5
+ import { useIframe } from "../../shared/hooks/useIframe.js";
6
+ import { useCivicAuthConfig } from "../../shared/hooks/useCivicAuthConfig.js";
7
+ import { useSession } from "../../shared/hooks/useSession.js";
8
+ import { IFrameAndLoading } from "../../shared/components/IFrameAndLoading.js";
21
9
  // Global this object setup
22
10
  let globalThisObject;
23
11
  if (typeof window !== "undefined") {
@@ -30,235 +18,46 @@ else {
30
18
  globalThisObject = Function("return this")();
31
19
  }
32
20
  globalThisObject.globalThis = globalThisObject;
33
- function BlockDisplay({ children }) {
34
- return (React.createElement("div", { id: "iframe-block-display-wrapper", style: {
35
- position: "relative",
36
- left: 0,
37
- top: 0,
38
- zIndex: 50,
39
- display: "flex",
40
- height: "100vh",
41
- width: "100vw",
42
- alignItems: "center",
43
- justifyContent: "center",
44
- backgroundColor: "white",
45
- } },
46
- React.createElement("div", { id: "iframe-block-display", style: {
47
- position: "absolute",
48
- inset: 0,
49
- display: "flex",
50
- alignItems: "center",
51
- justifyContent: "center",
52
- backgroundColor: "white",
53
- } }, children)));
54
- }
55
- const AuthProvider = ({ children, clientId, redirectUrl: inputRedirectUrl, config = authConfig, onSignIn, onSignOut, pkceConsumer, nonce, modalIframe = true, sessionData: inputSessionData, }) => {
56
- const [iframeUrl, setIframeUrl] = useState(null);
57
- const [currentUrl, setCurrentUrl] = useState(null);
58
- const [isInIframe, setIsInIframe] = useState(false);
59
- const [authResponseUrl, setAuthResponseUrl] = useState(null);
60
- const [tokenExchangeError, setTokenExchangeError] = useState();
61
- const [displayMode, setDisplayMode] = useState("iframe");
62
- const [browserAuthenticationInitiator, setBrowserAuthenticationInitiator] = useState();
63
- const [showIFrame, setShowIFrame] = useState(false);
64
- const [isRedirecting, setIsRedirecting] = useState(false);
65
- const queryClient = useQueryClient();
66
- const iframeRef = useRef(null);
67
- // TODO maybe we want to support or derive serverTokenExchange another way?
68
- const serverTokenExchange = pkceConsumer instanceof ConfidentialClientPKCEConsumer;
69
- // check if the current window is in an iframe with the iframe id, and set an isInIframe state
70
- useEffect(() => {
71
- if (typeof globalThis.window !== "undefined") {
72
- setCurrentUrl(globalThis.window.location.href);
73
- const isInIframeVal = isWindowInIframe(globalThis.window);
74
- setIsInIframe(isInIframeVal);
75
- }
76
- }, []);
77
- const redirectUrl = useMemo(() => (inputRedirectUrl || currentUrl || "").split("?")[0], [currentUrl, inputRedirectUrl]);
78
- const [authService, setAuthService] = useState();
21
+ const AuthProvider = ({ children, onSignIn, onSignOut, pkceConsumer, iframeMode = "modal", }) => {
22
+ const authConfig = useCivicAuthConfig();
23
+ const { redirectUrl } = authConfig || {};
24
+ const { iframeRef } = useIframe();
25
+ const { signIn, signOut } = useSignIn({
26
+ preSignOut: onSignOut,
27
+ pkceConsumer,
28
+ });
29
+ const [localSessionData, setLocalSessionData] = useState();
30
+ const { data: session, error: tokenExchangeError, isLoading: tokenExchangeInProgress, } = useSession();
79
31
  useEffect(() => {
80
- if (!currentUrl || !redirectUrl)
81
- return;
82
- BrowserAuthenticationService.build({
83
- clientId,
84
- redirectUrl,
85
- oauthServer: config.oauthServer,
86
- scopes: DEFAULT_SCOPES,
87
- displayMode,
88
- }).then(setAuthService);
89
- }, [currentUrl, clientId, redirectUrl, config, displayMode]);
90
- const { data: session, isLoading, error, } = useQuery({
91
- queryKey: [
92
- "session",
93
- authResponseUrl,
94
- iframeUrl,
95
- currentUrl,
96
- isInIframe,
97
- authService,
98
- ],
99
- queryFn: async () => {
100
- if (!authService) {
101
- return { authenticated: false };
32
+ if (session) {
33
+ setLocalSessionData(session);
34
+ if (session.authenticated) {
35
+ onSignIn?.();
102
36
  }
103
- if (inputSessionData) {
104
- return inputSessionData;
105
- }
106
- const url = new URL(authResponseUrl
107
- ? authResponseUrl
108
- : globalThis.window.location.href || "");
109
- // if we have existing tokens, then validate them and return the session data
110
- // otherwise check if we have a code in the url and exchange it for tokens
111
- // if we have neither, return undefined
112
- const existingSessionData = await authService.validateExistingSession();
113
- if (existingSessionData.authenticated) {
114
- return existingSessionData;
115
- }
116
- const code = url.searchParams.get("code");
117
- const state = url.searchParams.get("state");
118
- if (!serverTokenExchange && code && state && !isInIframe) {
119
- try {
120
- await authService.tokenExchange(code, state);
121
- const clientStorage = new LocalStorageAdapter();
122
- const user = await getUser(clientStorage);
123
- if (!user) {
124
- throw new Error("Failed to get user info");
125
- }
126
- const userSession = new GenericUserSession(clientStorage);
127
- userSession.set(user);
128
- onSignIn?.(); // Call onSignIn without an error if successful
129
- return authService.getSessionData();
130
- }
131
- catch (error) {
132
- setTokenExchangeError(error);
133
- onSignIn?.(error instanceof Error ? error : new Error("Failed to sign in")); // Pass the error to onSignIn
134
- return { authenticated: false };
135
- }
136
- }
137
- return existingSessionData;
138
- },
139
- });
140
- const signOutMutation = useMutation({
141
- mutationFn: async () => {
142
- await onSignOut?.();
143
- // Implement signOut logic here
144
- const authInitiator = getAuthInitiator();
145
- await authInitiator?.signOut();
146
- setIframeUrl(null);
147
- setShowIFrame(false);
148
- setAuthResponseUrl(null);
149
- },
150
- onSuccess: () => {
151
- queryClient.setQueryData([
152
- "session",
153
- authResponseUrl,
154
- iframeUrl,
155
- currentUrl,
156
- isInIframe,
157
- authService,
158
- ], null);
159
- },
160
- });
161
- const getAuthInitiator = useCallback((overrideDisplayMode) => {
162
- const useDisplayMode = overrideDisplayMode || displayMode;
163
- if (!pkceConsumer || !redirectUrl) {
164
- return null;
165
37
  }
166
- return new BrowserAuthenticationInitiator({
167
- pkceConsumer, // generate and retrieve the challenge client-side
168
- clientId,
169
- redirectUrl,
170
- state: generateState(useDisplayMode, serverTokenExchange),
171
- scopes: DEFAULT_SCOPES,
172
- displayMode: useDisplayMode,
173
- oauthServer: config.oauthServer,
174
- // the endpoints to use for the login (if not obtained from the auth server
175
- endpointOverrides: config.endpoints,
176
- nonce,
177
- });
178
- }, [
179
- serverTokenExchange,
180
- displayMode,
181
- clientId,
182
- redirectUrl,
183
- config.oauthServer,
184
- config.endpoints,
185
- pkceConsumer,
186
- nonce,
187
- ]);
188
- const signIn = useCallback(async (overrideDisplayMode = "iframe") => {
189
- setDisplayMode(overrideDisplayMode);
190
- const authInitiator = getAuthInitiator(overrideDisplayMode);
191
- setBrowserAuthenticationInitiator(authInitiator);
192
- if (overrideDisplayMode === "iframe") {
193
- setShowIFrame(true);
194
- }
195
- else if (overrideDisplayMode === "redirect") {
196
- setIsRedirecting(true);
197
- }
198
- if (!authInitiator) {
199
- throw new Error("Failed to get auth initiator");
200
- }
201
- authInitiator.signIn(iframeRef.current).catch((error) => {
202
- console.log("signIn error", {
203
- error,
204
- isPopupError: error instanceof PopupError,
205
- });
206
- // if we've tried to open a popup and it has failed, then fallback to redirect mode
207
- if (error instanceof PopupError) {
208
- signIn("redirect");
209
- }
210
- });
211
- }, [getAuthInitiator]);
212
- // remove event listeners when the component unmounts
38
+ }, [onSignIn, session]);
39
+ const isAuthenticated = useMemo(() => {
40
+ return !!localSessionData?.idToken;
41
+ }, [localSessionData]);
213
42
  useEffect(() => {
214
- return () => {
215
- if (browserAuthenticationInitiator) {
216
- browserAuthenticationInitiator.cleanup();
217
- }
218
- };
219
- }, [browserAuthenticationInitiator]);
220
- const isAuthenticated = useMemo(() => (session ? session.authenticated : false), [session]);
221
- useQuery({
222
- queryKey: ["autoSignIn", modalIframe, redirectUrl, isAuthenticated],
223
- queryFn: async () => {
224
- if (!modalIframe &&
225
- redirectUrl &&
226
- !isAuthenticated &&
227
- iframeRef.current) {
228
- signIn("iframe");
229
- }
230
- return true;
231
- },
232
- refetchOnWindowFocus: false,
233
- });
43
+ if (iframeMode === "embedded" &&
44
+ redirectUrl &&
45
+ !isAuthenticated &&
46
+ iframeRef?.current) {
47
+ signIn("iframe");
48
+ }
49
+ }, [iframeMode, redirectUrl, isAuthenticated, iframeRef, signIn]);
50
+ const isLoading = tokenExchangeInProgress || !authConfig;
234
51
  const value = useMemo(() => ({
235
52
  isLoading,
236
- error: error,
237
- signOut: async () => {
238
- await signOutMutation.mutateAsync();
239
- },
53
+ error: tokenExchangeError,
54
+ signOut,
240
55
  isAuthenticated,
241
56
  signIn,
242
- }), [isLoading, error, signOutMutation, isAuthenticated, signIn]);
243
- if (!redirectUrl)
244
- return null;
245
- const showIframeLoadingOverlay = modalIframe &&
246
- (isInIframe || isRedirecting || (isLoading && !serverTokenExchange));
247
- const showErrorOverlay = tokenExchangeError || error;
57
+ }), [isLoading, tokenExchangeError, isAuthenticated, signIn, signOut]);
248
58
  return (React.createElement(AuthContext.Provider, { value: value },
249
- React.createElement(ConfigProvider, { config: config, redirectUrl: redirectUrl, modalIframe: modalIframe, serverTokenExchange: serverTokenExchange },
250
- React.createElement(IframeProvider, { setAuthResponseUrl: setAuthResponseUrl, iframeRef: iframeRef },
251
- React.createElement(SessionProvider, { session: session },
252
- React.createElement(TokenProvider, null,
253
- modalIframe && !isInIframe && !session?.authenticated && (React.createElement("div", { style: showIFrame ? { display: "block" } : { display: "none" } },
254
- React.createElement(CivicAuthIframeContainer, { onClose: () => setShowIFrame(false) }))),
255
- showErrorOverlay && (React.createElement(BlockDisplay, null,
256
- React.createElement("div", null,
257
- "Error: ",
258
- (tokenExchangeError || error).message))),
259
- showIframeLoadingOverlay && !showErrorOverlay && (React.createElement(BlockDisplay, null,
260
- React.createElement(LoadingIcon, null))),
261
- children))))));
59
+ React.createElement(IFrameAndLoading, { error: tokenExchangeError, isLoading: isLoading }),
60
+ children));
262
61
  };
263
62
  export { AuthProvider };
264
63
  //# sourceMappingURL=AuthProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthProvider.js","sourceRoot":"","sources":["../../../../src/shared/providers/AuthProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport React, {\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport type { Config, DisplayMode, SessionData } from \"@/types.js\";\nimport { CivicAuthIframeContainer } from \"@/shared/components/CivicAuthIframeContainer.js\";\nimport { TokenProvider } from \"@/shared/providers/TokenProvider.js\";\nimport { SessionProvider } from \"@/shared/providers/SessionProvider.js\";\nimport { DEFAULT_SCOPES } from \"@/constants.js\";\nimport { authConfig } from \"@/config.js\";\nimport { LoadingIcon } from \"@/shared/components/LoadingIcon.js\";\nimport { isWindowInIframe } from \"@/lib/windowUtil.js\";\nimport { AuthContext } from \"@/shared/providers/AuthContext.js\";\nimport {\n BrowserAuthenticationInitiator,\n BrowserAuthenticationService,\n} from \"@/services/AuthenticationService.js\";\nimport type { AuthenticationResolver, PKCEConsumer } from \"@/services/types.js\";\nimport { PopupError } from \"@/services/types.js\";\nimport { ConfidentialClientPKCEConsumer } from \"@/services/PKCE.js\";\nimport { generateState } from \"@/lib/oauth.js\";\nimport { LocalStorageAdapter } from \"@/browser/storage.js\";\nimport { ConfigProvider } from \"@/shared/providers/ConfigProvider.js\";\nimport { getUser } from \"../lib/session.js\";\nimport { GenericUserSession } from \"../lib/UserSession.js\";\nimport { IframeProvider } from \"@/shared/providers/IframeProvider.js\";\n\n// Global this object setup\nlet globalThisObject;\nif (typeof window !== \"undefined\") {\n globalThisObject = window;\n} else if (typeof global !== \"undefined\") {\n globalThisObject = global;\n} else {\n globalThisObject = Function(\"return this\")();\n}\nglobalThisObject.globalThis = globalThisObject;\n\nexport type AuthProviderProps = {\n children: ReactNode;\n clientId: string;\n nonce?: string;\n onSignIn?: (error?: Error) => void;\n onSignOut?: () => Promise<void>;\n modalIframe?: boolean; // set to false if the iframe is being embedded in the client app\n config?: Config;\n redirectUrl?: string;\n};\n\nexport type InternalAuthProviderProps = AuthProviderProps & {\n sessionData?: SessionData;\n pkceConsumer?: PKCEConsumer;\n};\n\nfunction BlockDisplay({ children }: { children: ReactNode }) {\n return (\n <div\n id=\"iframe-block-display-wrapper\"\n style={{\n position: \"relative\",\n left: 0,\n top: 0,\n zIndex: 50,\n display: \"flex\",\n height: \"100vh\",\n width: \"100vw\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"white\",\n }}\n >\n <div\n id=\"iframe-block-display\"\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"white\",\n }}\n >\n {children}\n </div>\n </div>\n );\n}\n\nconst AuthProvider = ({\n children,\n clientId,\n redirectUrl: inputRedirectUrl,\n config = authConfig,\n onSignIn,\n onSignOut,\n pkceConsumer,\n nonce,\n modalIframe = true,\n sessionData: inputSessionData,\n}: InternalAuthProviderProps) => {\n const [iframeUrl, setIframeUrl] = useState<string | null>(null);\n const [currentUrl, setCurrentUrl] = useState<string | null>(null);\n const [isInIframe, setIsInIframe] = useState(false);\n const [authResponseUrl, setAuthResponseUrl] = useState<string | null>(null);\n const [tokenExchangeError, setTokenExchangeError] = useState<Error>();\n const [displayMode, setDisplayMode] = useState<DisplayMode>(\"iframe\");\n const [browserAuthenticationInitiator, setBrowserAuthenticationInitiator] =\n useState<BrowserAuthenticationInitiator | null>();\n const [showIFrame, setShowIFrame] = useState(false);\n const [isRedirecting, setIsRedirecting] = useState(false);\n const queryClient = useQueryClient();\n const iframeRef = useRef<HTMLIFrameElement>(null);\n\n // TODO maybe we want to support or derive serverTokenExchange another way?\n const serverTokenExchange =\n pkceConsumer instanceof ConfidentialClientPKCEConsumer;\n // check if the current window is in an iframe with the iframe id, and set an isInIframe state\n useEffect(() => {\n if (typeof globalThis.window !== \"undefined\") {\n setCurrentUrl(globalThis.window.location.href);\n const isInIframeVal = isWindowInIframe(globalThis.window);\n setIsInIframe(isInIframeVal);\n }\n }, []);\n\n const redirectUrl = useMemo(\n () => (inputRedirectUrl || currentUrl || \"\").split(\"?\")[0],\n [currentUrl, inputRedirectUrl],\n );\n\n const [authService, setAuthService] = useState<AuthenticationResolver>();\n\n useEffect(() => {\n if (!currentUrl || !redirectUrl) return;\n BrowserAuthenticationService.build({\n clientId,\n redirectUrl,\n oauthServer: config.oauthServer,\n scopes: DEFAULT_SCOPES,\n displayMode,\n }).then(setAuthService);\n }, [currentUrl, clientId, redirectUrl, config, displayMode]);\n\n const {\n data: session,\n isLoading,\n error,\n } = useQuery({\n queryKey: [\n \"session\",\n authResponseUrl,\n iframeUrl,\n currentUrl,\n isInIframe,\n authService,\n ],\n queryFn: async () => {\n if (!authService) {\n return { authenticated: false };\n }\n if (inputSessionData) {\n return inputSessionData;\n }\n const url = new URL(\n authResponseUrl\n ? authResponseUrl\n : globalThis.window.location.href || \"\",\n );\n // if we have existing tokens, then validate them and return the session data\n // otherwise check if we have a code in the url and exchange it for tokens\n // if we have neither, return undefined\n const existingSessionData = await authService.validateExistingSession();\n if (existingSessionData.authenticated) {\n return existingSessionData;\n }\n const code = url.searchParams.get(\"code\");\n const state = url.searchParams.get(\"state\");\n if (!serverTokenExchange && code && state && !isInIframe) {\n try {\n await authService.tokenExchange(code, state);\n const clientStorage = new LocalStorageAdapter();\n const user = await getUser(clientStorage);\n if (!user) {\n throw new Error(\"Failed to get user info\");\n }\n\n const userSession = new GenericUserSession(clientStorage);\n userSession.set(user);\n\n onSignIn?.(); // Call onSignIn without an error if successful\n return authService.getSessionData();\n } catch (error) {\n setTokenExchangeError(error as Error);\n onSignIn?.(\n error instanceof Error ? error : new Error(\"Failed to sign in\"),\n ); // Pass the error to onSignIn\n return { authenticated: false };\n }\n }\n\n return existingSessionData;\n },\n });\n\n const signOutMutation = useMutation({\n mutationFn: async () => {\n await onSignOut?.();\n // Implement signOut logic here\n const authInitiator = getAuthInitiator();\n await authInitiator?.signOut();\n setIframeUrl(null);\n setShowIFrame(false);\n setAuthResponseUrl(null);\n },\n onSuccess: () => {\n queryClient.setQueryData(\n [\n \"session\",\n authResponseUrl,\n iframeUrl,\n currentUrl,\n isInIframe,\n authService,\n ],\n null,\n );\n },\n });\n\n const getAuthInitiator = useCallback(\n (overrideDisplayMode?: DisplayMode) => {\n const useDisplayMode = overrideDisplayMode || displayMode;\n\n if (!pkceConsumer || !redirectUrl) {\n return null;\n }\n\n return new BrowserAuthenticationInitiator({\n pkceConsumer, // generate and retrieve the challenge client-side\n clientId,\n redirectUrl,\n state: generateState(useDisplayMode, serverTokenExchange),\n scopes: DEFAULT_SCOPES,\n displayMode: useDisplayMode,\n oauthServer: config.oauthServer,\n // the endpoints to use for the login (if not obtained from the auth server\n endpointOverrides: config.endpoints,\n nonce,\n });\n },\n [\n serverTokenExchange,\n displayMode,\n clientId,\n redirectUrl,\n config.oauthServer,\n config.endpoints,\n pkceConsumer,\n nonce,\n ],\n );\n\n const signIn = useCallback(\n async (overrideDisplayMode: DisplayMode = \"iframe\") => {\n setDisplayMode(overrideDisplayMode);\n const authInitiator = getAuthInitiator(overrideDisplayMode);\n setBrowserAuthenticationInitiator(authInitiator);\n if (overrideDisplayMode === \"iframe\") {\n setShowIFrame(true);\n } else if (overrideDisplayMode === \"redirect\") {\n setIsRedirecting(true);\n }\n\n if (!authInitiator) {\n throw new Error(\"Failed to get auth initiator\");\n }\n\n authInitiator.signIn(iframeRef.current).catch((error) => {\n console.log(\"signIn error\", {\n error,\n isPopupError: error instanceof PopupError,\n });\n // if we've tried to open a popup and it has failed, then fallback to redirect mode\n if (error instanceof PopupError) {\n signIn(\"redirect\");\n }\n });\n },\n [getAuthInitiator],\n );\n\n // remove event listeners when the component unmounts\n useEffect(() => {\n return () => {\n if (browserAuthenticationInitiator) {\n browserAuthenticationInitiator.cleanup();\n }\n };\n }, [browserAuthenticationInitiator]);\n\n const isAuthenticated = useMemo(\n () => (session ? session.authenticated : false),\n [session],\n );\n\n useQuery({\n queryKey: [\"autoSignIn\", modalIframe, redirectUrl, isAuthenticated],\n queryFn: async () => {\n if (\n !modalIframe &&\n redirectUrl &&\n !isAuthenticated &&\n iframeRef.current\n ) {\n signIn(\"iframe\");\n }\n return true;\n },\n refetchOnWindowFocus: false,\n });\n\n const value = useMemo(\n () => ({\n isLoading,\n error: error as Error | null,\n signOut: async () => {\n await signOutMutation.mutateAsync();\n },\n isAuthenticated,\n signIn,\n }),\n [isLoading, error, signOutMutation, isAuthenticated, signIn],\n );\n\n if (!redirectUrl) return null;\n\n const showIframeLoadingOverlay =\n modalIframe &&\n (isInIframe || isRedirecting || (isLoading && !serverTokenExchange));\n const showErrorOverlay = tokenExchangeError || error;\n return (\n <AuthContext.Provider value={value}>\n <ConfigProvider\n config={config}\n redirectUrl={redirectUrl}\n modalIframe={modalIframe}\n serverTokenExchange={serverTokenExchange}\n >\n <IframeProvider\n setAuthResponseUrl={setAuthResponseUrl}\n iframeRef={iframeRef}\n >\n <SessionProvider session={session}>\n <TokenProvider>\n {modalIframe && !isInIframe && !session?.authenticated && (\n <div\n style={\n showIFrame ? { display: \"block\" } : { display: \"none\" }\n }\n >\n <CivicAuthIframeContainer\n onClose={() => setShowIFrame(false)}\n />\n </div>\n )}\n\n {showErrorOverlay && (\n <BlockDisplay>\n <div>\n Error: {(tokenExchangeError || (error as Error)).message}\n </div>\n </BlockDisplay>\n )}\n\n {showIframeLoadingOverlay && !showErrorOverlay && (\n <BlockDisplay>\n <LoadingIcon />\n </BlockDisplay>\n )}\n\n {children}\n </TokenProvider>\n </SessionProvider>\n </IframeProvider>\n </ConfigProvider>\n </AuthContext.Provider>\n );\n};\n\nexport { AuthProvider };\n"]}
1
+ {"version":3,"file":"AuthProvider.js","sourceRoot":"","sources":["../../../../src/shared/providers/AuthProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport React, { type ReactNode, useEffect, useMemo, useState } from \"react\";\nimport type { Config, SessionData } from \"@/types.js\";\nimport { AuthContext } from \"@/shared/providers/AuthContext.js\";\nimport type { PKCEConsumer } from \"@/services/types.js\";\nimport { useSignIn } from \"@/shared/hooks/useSignIn.js\";\nimport { useIframe } from \"@/shared/hooks/useIframe.js\";\nimport { useCivicAuthConfig } from \"@/shared/hooks/useCivicAuthConfig.js\";\nimport { useSession } from \"@/shared/hooks/useSession.js\";\nimport { IFrameAndLoading } from \"@/shared/components/IFrameAndLoading.js\";\n\n// Global this object setup\nlet globalThisObject;\nif (typeof window !== \"undefined\") {\n globalThisObject = window;\n} else if (typeof global !== \"undefined\") {\n globalThisObject = global;\n} else {\n globalThisObject = Function(\"return this\")();\n}\nglobalThisObject.globalThis = globalThisObject;\n\nexport type IframeMode = \"embedded\" | \"modal\";\nexport type AuthProviderProps = {\n children: ReactNode;\n clientId: string;\n nonce?: string;\n onSignIn?: (error?: Error) => void;\n onSignOut?: () => Promise<void>;\n iframeMode?: IframeMode;\n config?: Config;\n redirectUrl?: string;\n};\n\nexport type InternalAuthProviderProps = AuthProviderProps & {\n sessionData?: SessionData;\n pkceConsumer?: PKCEConsumer;\n};\n\nconst AuthProvider = ({\n children,\n onSignIn,\n onSignOut,\n pkceConsumer,\n iframeMode = \"modal\",\n}: InternalAuthProviderProps) => {\n const authConfig = useCivicAuthConfig();\n const { redirectUrl } = authConfig || {};\n const { iframeRef } = useIframe();\n\n const { signIn, signOut } = useSignIn({\n preSignOut: onSignOut,\n pkceConsumer,\n });\n\n const [localSessionData, setLocalSessionData] =\n useState<SessionData | null>();\n\n const {\n data: session,\n error: tokenExchangeError,\n isLoading: tokenExchangeInProgress,\n } = useSession();\n\n useEffect(() => {\n if (session) {\n setLocalSessionData(session);\n if (session.authenticated) {\n onSignIn?.();\n }\n }\n }, [onSignIn, session]);\n\n const isAuthenticated = useMemo(() => {\n return !!localSessionData?.idToken;\n }, [localSessionData]);\n\n useEffect(() => {\n if (\n iframeMode === \"embedded\" &&\n redirectUrl &&\n !isAuthenticated &&\n iframeRef?.current\n ) {\n signIn(\"iframe\");\n }\n }, [iframeMode, redirectUrl, isAuthenticated, iframeRef, signIn]);\n\n const isLoading = tokenExchangeInProgress || !authConfig;\n const value = useMemo(\n () => ({\n isLoading,\n error: tokenExchangeError as Error | null,\n signOut,\n isAuthenticated,\n signIn,\n }),\n [isLoading, tokenExchangeError, isAuthenticated, signIn, signOut],\n );\n\n return (\n <AuthContext.Provider value={value}>\n <IFrameAndLoading error={tokenExchangeError} isLoading={isLoading} />\n {children}\n </AuthContext.Provider>\n );\n};\n\nexport { AuthProvider };\n"]}