@civic/auth 0.1.3 → 0.1.4-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (752) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +13 -10
  3. package/dist/cjs/browser/storage.d.ts +3 -0
  4. package/dist/cjs/browser/storage.d.ts.map +1 -1
  5. package/dist/cjs/browser/storage.js +8 -0
  6. package/dist/cjs/browser/storage.js.map +1 -1
  7. package/dist/cjs/lib/cookies.d.ts +2 -2
  8. package/dist/cjs/lib/cookies.d.ts.map +1 -1
  9. package/dist/cjs/lib/cookies.js +7 -5
  10. package/dist/cjs/lib/cookies.js.map +1 -1
  11. package/dist/cjs/lib/postMessage.js +1 -1
  12. package/dist/cjs/lib/postMessage.js.map +1 -1
  13. package/dist/cjs/lib/windowUtil.d.ts.map +1 -1
  14. package/dist/cjs/lib/windowUtil.js +1 -0
  15. package/dist/cjs/lib/windowUtil.js.map +1 -1
  16. package/dist/cjs/nextjs/GetUser.d.ts.map +1 -1
  17. package/dist/cjs/nextjs/GetUser.js +2 -13
  18. package/dist/cjs/nextjs/GetUser.js.map +1 -1
  19. package/dist/cjs/nextjs/config.d.ts.map +1 -1
  20. package/dist/cjs/nextjs/config.js +12 -0
  21. package/dist/cjs/nextjs/config.js.map +1 -1
  22. package/dist/cjs/nextjs/hooks/index.d.ts +1 -1
  23. package/dist/cjs/nextjs/hooks/index.d.ts.map +1 -1
  24. package/dist/cjs/nextjs/hooks/index.js +3 -3
  25. package/dist/cjs/nextjs/hooks/index.js.map +1 -1
  26. package/dist/cjs/nextjs/hooks/useUserCookie.d.ts +4 -1
  27. package/dist/cjs/nextjs/hooks/useUserCookie.d.ts.map +1 -1
  28. package/dist/cjs/nextjs/hooks/useUserCookie.js +43 -15
  29. package/dist/cjs/nextjs/hooks/useUserCookie.js.map +1 -1
  30. package/dist/cjs/nextjs/providers/NextAuthProvider.d.ts +5 -1
  31. package/dist/cjs/nextjs/providers/NextAuthProvider.d.ts.map +1 -1
  32. package/dist/cjs/nextjs/providers/NextAuthProvider.js +74 -35
  33. package/dist/cjs/nextjs/providers/NextAuthProvider.js.map +1 -1
  34. package/dist/cjs/nextjs/routeHandler.js +2 -2
  35. package/dist/cjs/nextjs/routeHandler.js.map +1 -1
  36. package/dist/cjs/reactjs/components/UserButton.js +20 -10
  37. package/dist/cjs/reactjs/components/UserButton.js.map +1 -1
  38. package/dist/cjs/reactjs/hooks/index.d.ts +0 -1
  39. package/dist/cjs/reactjs/hooks/index.d.ts.map +1 -1
  40. package/dist/cjs/reactjs/hooks/index.js +1 -3
  41. package/dist/cjs/reactjs/hooks/index.js.map +1 -1
  42. package/dist/cjs/services/AuthenticationService.d.ts +4 -1
  43. package/dist/cjs/services/AuthenticationService.d.ts.map +1 -1
  44. package/dist/cjs/services/AuthenticationService.js +38 -7
  45. package/dist/cjs/services/AuthenticationService.js.map +1 -1
  46. package/dist/cjs/shared/components/BlockDisplay.d.ts +7 -0
  47. package/dist/cjs/shared/components/BlockDisplay.d.ts.map +1 -0
  48. package/dist/cjs/shared/components/BlockDisplay.js +31 -0
  49. package/dist/cjs/shared/components/BlockDisplay.js.map +1 -0
  50. package/dist/cjs/shared/components/CivicAuthIframe.js +18 -8
  51. package/dist/cjs/shared/components/CivicAuthIframe.js.map +1 -1
  52. package/dist/cjs/shared/components/CivicAuthIframeContainer.d.ts.map +1 -1
  53. package/dist/cjs/shared/components/CivicAuthIframeContainer.js +39 -20
  54. package/dist/cjs/shared/components/CivicAuthIframeContainer.js.map +1 -1
  55. package/dist/cjs/shared/components/IFrameAndLoading.d.ts +7 -0
  56. package/dist/cjs/shared/components/IFrameAndLoading.d.ts.map +1 -0
  57. package/dist/cjs/shared/components/IFrameAndLoading.js +28 -0
  58. package/dist/cjs/shared/components/IFrameAndLoading.js.map +1 -0
  59. package/dist/cjs/shared/hooks/index.d.ts +5 -1
  60. package/dist/cjs/shared/hooks/index.d.ts.map +1 -1
  61. package/dist/cjs/shared/hooks/index.js +11 -3
  62. package/dist/cjs/shared/hooks/index.js.map +1 -1
  63. package/dist/cjs/shared/hooks/useCivicAuthConfig.d.ts +3 -0
  64. package/dist/cjs/shared/hooks/useCivicAuthConfig.d.ts.map +1 -0
  65. package/dist/cjs/shared/hooks/useCivicAuthConfig.js +13 -0
  66. package/dist/cjs/shared/hooks/useCivicAuthConfig.js.map +1 -0
  67. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.d.ts +3 -0
  68. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.d.ts.map +1 -0
  69. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.js +16 -0
  70. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.js.map +1 -0
  71. package/dist/cjs/shared/hooks/useCurrentUrl.d.ts +3 -0
  72. package/dist/cjs/shared/hooks/useCurrentUrl.d.ts.map +1 -0
  73. package/dist/cjs/shared/hooks/useCurrentUrl.js +27 -0
  74. package/dist/cjs/shared/hooks/useCurrentUrl.js.map +1 -0
  75. package/dist/cjs/shared/hooks/useIsInIframe.d.ts +3 -0
  76. package/dist/cjs/shared/hooks/useIsInIframe.d.ts.map +1 -0
  77. package/dist/cjs/shared/hooks/useIsInIframe.js +17 -0
  78. package/dist/cjs/shared/hooks/useIsInIframe.js.map +1 -0
  79. package/dist/cjs/shared/hooks/useOAuthEndpoints.d.ts +4 -0
  80. package/dist/cjs/shared/hooks/useOAuthEndpoints.d.ts.map +1 -0
  81. package/dist/cjs/shared/hooks/useOAuthEndpoints.js +17 -0
  82. package/dist/cjs/shared/hooks/useOAuthEndpoints.js.map +1 -0
  83. package/dist/cjs/shared/hooks/useRefresh.d.ts +4 -0
  84. package/dist/cjs/shared/hooks/useRefresh.d.ts.map +1 -0
  85. package/dist/cjs/shared/hooks/useRefresh.js +41 -0
  86. package/dist/cjs/shared/hooks/useRefresh.js.map +1 -0
  87. package/dist/cjs/shared/hooks/useSession.d.ts +1 -1
  88. package/dist/cjs/shared/hooks/useSession.d.ts.map +1 -1
  89. package/dist/cjs/shared/hooks/useSignIn.d.ts +14 -0
  90. package/dist/cjs/shared/hooks/useSignIn.d.ts.map +1 -0
  91. package/dist/cjs/shared/hooks/useSignIn.js +74 -0
  92. package/dist/cjs/shared/hooks/useSignIn.js.map +1 -0
  93. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.d.ts +4 -0
  94. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  95. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.js +30 -0
  96. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  97. package/dist/cjs/shared/lib/session.d.ts +1 -1
  98. package/dist/cjs/shared/lib/session.d.ts.map +1 -1
  99. package/dist/cjs/shared/lib/session.js +12 -1
  100. package/dist/cjs/shared/lib/session.js.map +1 -1
  101. package/dist/cjs/shared/lib/types.d.ts +14 -1
  102. package/dist/cjs/shared/lib/types.d.ts.map +1 -1
  103. package/dist/cjs/shared/lib/types.js +2 -0
  104. package/dist/cjs/shared/lib/types.js.map +1 -1
  105. package/dist/cjs/shared/lib/util.d.ts.map +1 -1
  106. package/dist/cjs/shared/lib/util.js +28 -9
  107. package/dist/cjs/shared/lib/util.js.map +1 -1
  108. package/dist/cjs/shared/providers/AuthProvider.d.ts +3 -2
  109. package/dist/cjs/shared/providers/AuthProvider.d.ts.map +1 -1
  110. package/dist/cjs/shared/providers/AuthProvider.js +53 -244
  111. package/dist/cjs/shared/providers/AuthProvider.js.map +1 -1
  112. package/dist/cjs/shared/providers/CivicAuthConfigContext.d.ts +16 -0
  113. package/dist/cjs/shared/providers/CivicAuthConfigContext.d.ts.map +1 -0
  114. package/dist/cjs/shared/providers/CivicAuthConfigContext.js +80 -0
  115. package/dist/cjs/shared/providers/CivicAuthConfigContext.js.map +1 -0
  116. package/dist/cjs/shared/providers/CivicAuthProvider.d.ts.map +1 -1
  117. package/dist/cjs/shared/providers/CivicAuthProvider.js +23 -6
  118. package/dist/cjs/shared/providers/CivicAuthProvider.js.map +1 -1
  119. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.d.ts +17 -0
  120. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.d.ts.map +1 -0
  121. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.js +183 -0
  122. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.js.map +1 -0
  123. package/dist/cjs/shared/providers/IframeProvider.d.ts +7 -4
  124. package/dist/cjs/shared/providers/IframeProvider.d.ts.map +1 -1
  125. package/dist/cjs/shared/providers/IframeProvider.js +37 -9
  126. package/dist/cjs/shared/providers/IframeProvider.js.map +1 -1
  127. package/dist/cjs/shared/providers/SessionProvider.d.ts +10 -4
  128. package/dist/cjs/shared/providers/SessionProvider.d.ts.map +1 -1
  129. package/dist/cjs/shared/providers/SessionProvider.js +32 -12
  130. package/dist/cjs/shared/providers/SessionProvider.js.map +1 -1
  131. package/dist/cjs/shared/providers/TokenProvider.d.ts.map +1 -1
  132. package/dist/cjs/shared/providers/TokenProvider.js +29 -30
  133. package/dist/cjs/shared/providers/TokenProvider.js.map +1 -1
  134. package/dist/cjs/shared/providers/UserProvider.d.ts +6 -4
  135. package/dist/cjs/shared/providers/UserProvider.d.ts.map +1 -1
  136. package/dist/cjs/shared/providers/UserProvider.js +49 -26
  137. package/dist/cjs/shared/providers/UserProvider.js.map +1 -1
  138. package/dist/cjs/types.d.ts +5 -5
  139. package/dist/cjs/types.d.ts.map +1 -1
  140. package/dist/cjs/types.js +4 -0
  141. package/dist/cjs/types.js.map +1 -1
  142. package/dist/cjs/utils.d.ts.map +1 -1
  143. package/dist/esm/browser/storage.d.ts +3 -0
  144. package/dist/esm/browser/storage.d.ts.map +1 -1
  145. package/dist/esm/browser/storage.js +8 -0
  146. package/dist/esm/browser/storage.js.map +1 -1
  147. package/dist/esm/lib/cookies.d.ts +2 -2
  148. package/dist/esm/lib/cookies.d.ts.map +1 -1
  149. package/dist/esm/lib/cookies.js +7 -5
  150. package/dist/esm/lib/cookies.js.map +1 -1
  151. package/dist/esm/lib/postMessage.js +1 -1
  152. package/dist/esm/lib/postMessage.js.map +1 -1
  153. package/dist/esm/lib/windowUtil.d.ts.map +1 -1
  154. package/dist/esm/lib/windowUtil.js +1 -0
  155. package/dist/esm/lib/windowUtil.js.map +1 -1
  156. package/dist/esm/nextjs/GetUser.d.ts.map +1 -1
  157. package/dist/esm/nextjs/GetUser.js +2 -13
  158. package/dist/esm/nextjs/GetUser.js.map +1 -1
  159. package/dist/esm/nextjs/config.d.ts.map +1 -1
  160. package/dist/esm/nextjs/config.js +12 -0
  161. package/dist/esm/nextjs/config.js.map +1 -1
  162. package/dist/esm/nextjs/hooks/index.d.ts +1 -1
  163. package/dist/esm/nextjs/hooks/index.d.ts.map +1 -1
  164. package/dist/esm/nextjs/hooks/index.js +1 -1
  165. package/dist/esm/nextjs/hooks/index.js.map +1 -1
  166. package/dist/esm/nextjs/hooks/useUserCookie.d.ts +4 -1
  167. package/dist/esm/nextjs/hooks/useUserCookie.d.ts.map +1 -1
  168. package/dist/esm/nextjs/hooks/useUserCookie.js +45 -17
  169. package/dist/esm/nextjs/hooks/useUserCookie.js.map +1 -1
  170. package/dist/esm/nextjs/providers/NextAuthProvider.d.ts +5 -1
  171. package/dist/esm/nextjs/providers/NextAuthProvider.d.ts.map +1 -1
  172. package/dist/esm/nextjs/providers/NextAuthProvider.js +59 -30
  173. package/dist/esm/nextjs/providers/NextAuthProvider.js.map +1 -1
  174. package/dist/esm/nextjs/routeHandler.js +2 -2
  175. package/dist/esm/nextjs/routeHandler.js.map +1 -1
  176. package/dist/esm/reactjs/components/UserButton.js +3 -3
  177. package/dist/esm/reactjs/components/UserButton.js.map +1 -1
  178. package/dist/esm/reactjs/hooks/index.d.ts +0 -1
  179. package/dist/esm/reactjs/hooks/index.d.ts.map +1 -1
  180. package/dist/esm/reactjs/hooks/index.js +0 -1
  181. package/dist/esm/reactjs/hooks/index.js.map +1 -1
  182. package/dist/esm/services/AuthenticationService.d.ts +4 -1
  183. package/dist/esm/services/AuthenticationService.d.ts.map +1 -1
  184. package/dist/esm/services/AuthenticationService.js +39 -8
  185. package/dist/esm/services/AuthenticationService.js.map +1 -1
  186. package/dist/esm/shared/components/BlockDisplay.d.ts +7 -0
  187. package/dist/esm/shared/components/BlockDisplay.d.ts.map +1 -0
  188. package/dist/esm/shared/components/BlockDisplay.js +25 -0
  189. package/dist/esm/shared/components/BlockDisplay.js.map +1 -0
  190. package/dist/esm/shared/components/CivicAuthIframe.js +1 -1
  191. package/dist/esm/shared/components/CivicAuthIframe.js.map +1 -1
  192. package/dist/esm/shared/components/CivicAuthIframeContainer.d.ts.map +1 -1
  193. package/dist/esm/shared/components/CivicAuthIframeContainer.js +23 -14
  194. package/dist/esm/shared/components/CivicAuthIframeContainer.js.map +1 -1
  195. package/dist/esm/shared/components/IFrameAndLoading.d.ts +7 -0
  196. package/dist/esm/shared/components/IFrameAndLoading.d.ts.map +1 -0
  197. package/dist/esm/shared/components/IFrameAndLoading.js +22 -0
  198. package/dist/esm/shared/components/IFrameAndLoading.js.map +1 -0
  199. package/dist/esm/shared/hooks/index.d.ts +5 -1
  200. package/dist/esm/shared/hooks/index.d.ts.map +1 -1
  201. package/dist/esm/shared/hooks/index.js +5 -1
  202. package/dist/esm/shared/hooks/index.js.map +1 -1
  203. package/dist/esm/shared/hooks/useCivicAuthConfig.d.ts +3 -0
  204. package/dist/esm/shared/hooks/useCivicAuthConfig.d.ts.map +1 -0
  205. package/dist/esm/shared/hooks/useCivicAuthConfig.js +10 -0
  206. package/dist/esm/shared/hooks/useCivicAuthConfig.js.map +1 -0
  207. package/dist/esm/shared/hooks/useClientTokenExchangeSession.d.ts +3 -0
  208. package/dist/esm/shared/hooks/useClientTokenExchangeSession.d.ts.map +1 -0
  209. package/dist/esm/shared/hooks/useClientTokenExchangeSession.js +13 -0
  210. package/dist/esm/shared/hooks/useClientTokenExchangeSession.js.map +1 -0
  211. package/dist/esm/shared/hooks/useCurrentUrl.d.ts +3 -0
  212. package/dist/esm/shared/hooks/useCurrentUrl.d.ts.map +1 -0
  213. package/dist/esm/shared/hooks/useCurrentUrl.js +24 -0
  214. package/dist/esm/shared/hooks/useCurrentUrl.js.map +1 -0
  215. package/dist/esm/shared/hooks/useIsInIframe.d.ts +3 -0
  216. package/dist/esm/shared/hooks/useIsInIframe.d.ts.map +1 -0
  217. package/dist/esm/shared/hooks/useIsInIframe.js +14 -0
  218. package/dist/esm/shared/hooks/useIsInIframe.js.map +1 -0
  219. package/dist/esm/shared/hooks/useOAuthEndpoints.d.ts +4 -0
  220. package/dist/esm/shared/hooks/useOAuthEndpoints.d.ts.map +1 -0
  221. package/dist/esm/shared/hooks/useOAuthEndpoints.js +14 -0
  222. package/dist/esm/shared/hooks/useOAuthEndpoints.js.map +1 -0
  223. package/dist/esm/shared/hooks/useRefresh.d.ts +4 -0
  224. package/dist/esm/shared/hooks/useRefresh.d.ts.map +1 -0
  225. package/dist/esm/shared/hooks/useRefresh.js +38 -0
  226. package/dist/esm/shared/hooks/useRefresh.js.map +1 -0
  227. package/dist/esm/shared/hooks/useSession.d.ts +1 -1
  228. package/dist/esm/shared/hooks/useSession.d.ts.map +1 -1
  229. package/dist/esm/shared/hooks/useSignIn.d.ts +14 -0
  230. package/dist/esm/shared/hooks/useSignIn.d.ts.map +1 -0
  231. package/dist/esm/shared/hooks/useSignIn.js +71 -0
  232. package/dist/esm/shared/hooks/useSignIn.js.map +1 -0
  233. package/dist/esm/shared/lib/GenericAuthenticationRefresher.d.ts +4 -0
  234. package/dist/esm/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  235. package/dist/esm/shared/lib/GenericAuthenticationRefresher.js +30 -0
  236. package/dist/esm/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  237. package/dist/esm/shared/lib/session.d.ts +1 -1
  238. package/dist/esm/shared/lib/session.d.ts.map +1 -1
  239. package/dist/esm/shared/lib/session.js +12 -1
  240. package/dist/esm/shared/lib/session.js.map +1 -1
  241. package/dist/esm/shared/lib/types.d.ts +14 -1
  242. package/dist/esm/shared/lib/types.d.ts.map +1 -1
  243. package/dist/esm/shared/lib/types.js +2 -0
  244. package/dist/esm/shared/lib/types.js.map +1 -1
  245. package/dist/esm/shared/lib/util.d.ts.map +1 -1
  246. package/dist/esm/shared/lib/util.js +11 -2
  247. package/dist/esm/shared/lib/util.js.map +1 -1
  248. package/dist/esm/shared/providers/AuthProvider.d.ts +3 -2
  249. package/dist/esm/shared/providers/AuthProvider.d.ts.map +1 -1
  250. package/dist/esm/shared/providers/AuthProvider.js +37 -238
  251. package/dist/esm/shared/providers/AuthProvider.js.map +1 -1
  252. package/dist/esm/shared/providers/CivicAuthConfigContext.d.ts +16 -0
  253. package/dist/esm/shared/providers/CivicAuthConfigContext.d.ts.map +1 -0
  254. package/dist/esm/shared/providers/CivicAuthConfigContext.js +43 -0
  255. package/dist/esm/shared/providers/CivicAuthConfigContext.js.map +1 -0
  256. package/dist/esm/shared/providers/CivicAuthProvider.d.ts.map +1 -1
  257. package/dist/esm/shared/providers/CivicAuthProvider.js +23 -6
  258. package/dist/esm/shared/providers/CivicAuthProvider.js.map +1 -1
  259. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.d.ts +17 -0
  260. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.d.ts.map +1 -0
  261. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.js +146 -0
  262. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.js.map +1 -0
  263. package/dist/esm/shared/providers/IframeProvider.d.ts +7 -4
  264. package/dist/esm/shared/providers/IframeProvider.d.ts.map +1 -1
  265. package/dist/esm/shared/providers/IframeProvider.js +21 -3
  266. package/dist/esm/shared/providers/IframeProvider.js.map +1 -1
  267. package/dist/esm/shared/providers/SessionProvider.d.ts +10 -4
  268. package/dist/esm/shared/providers/SessionProvider.d.ts.map +1 -1
  269. package/dist/esm/shared/providers/SessionProvider.js +15 -5
  270. package/dist/esm/shared/providers/SessionProvider.js.map +1 -1
  271. package/dist/esm/shared/providers/TokenProvider.d.ts.map +1 -1
  272. package/dist/esm/shared/providers/TokenProvider.js +13 -24
  273. package/dist/esm/shared/providers/TokenProvider.js.map +1 -1
  274. package/dist/esm/shared/providers/UserProvider.d.ts +6 -4
  275. package/dist/esm/shared/providers/UserProvider.d.ts.map +1 -1
  276. package/dist/esm/shared/providers/UserProvider.js +33 -20
  277. package/dist/esm/shared/providers/UserProvider.js.map +1 -1
  278. package/dist/esm/types.d.ts +5 -5
  279. package/dist/esm/types.d.ts.map +1 -1
  280. package/dist/esm/types.js +3 -1
  281. package/dist/esm/types.js.map +1 -1
  282. package/dist/esm/utils.d.ts.map +1 -1
  283. package/dist/src/browser/storage.d.ts +3 -0
  284. package/dist/src/browser/storage.d.ts.map +1 -1
  285. package/dist/src/browser/storage.js +8 -0
  286. package/dist/src/browser/storage.js.map +1 -1
  287. package/dist/src/lib/cookies.d.ts +2 -2
  288. package/dist/src/lib/cookies.d.ts.map +1 -1
  289. package/dist/src/lib/cookies.js +7 -5
  290. package/dist/src/lib/cookies.js.map +1 -1
  291. package/dist/src/lib/postMessage.js +1 -1
  292. package/dist/src/lib/postMessage.js.map +1 -1
  293. package/dist/src/lib/windowUtil.d.ts.map +1 -1
  294. package/dist/src/lib/windowUtil.js +1 -0
  295. package/dist/src/lib/windowUtil.js.map +1 -1
  296. package/dist/src/nextjs/GetUser.d.ts.map +1 -1
  297. package/dist/src/nextjs/GetUser.js +2 -13
  298. package/dist/src/nextjs/GetUser.js.map +1 -1
  299. package/dist/src/nextjs/config.d.ts.map +1 -1
  300. package/dist/src/nextjs/config.js +12 -0
  301. package/dist/src/nextjs/config.js.map +1 -1
  302. package/dist/src/nextjs/hooks/index.d.ts +1 -1
  303. package/dist/src/nextjs/hooks/index.d.ts.map +1 -1
  304. package/dist/src/nextjs/hooks/index.js +1 -1
  305. package/dist/src/nextjs/hooks/index.js.map +1 -1
  306. package/dist/src/nextjs/hooks/useRefresh.d.ts +4 -0
  307. package/dist/src/nextjs/hooks/useRefresh.d.ts.map +1 -0
  308. package/dist/src/nextjs/hooks/useRefresh.js +38 -0
  309. package/dist/src/nextjs/hooks/useRefresh.js.map +1 -0
  310. package/dist/src/nextjs/hooks/useUserCookie.d.ts +4 -1
  311. package/dist/src/nextjs/hooks/useUserCookie.d.ts.map +1 -1
  312. package/dist/src/nextjs/hooks/useUserCookie.js +45 -17
  313. package/dist/src/nextjs/hooks/useUserCookie.js.map +1 -1
  314. package/dist/src/nextjs/providers/NextAuthProvider.d.ts +5 -1
  315. package/dist/src/nextjs/providers/NextAuthProvider.d.ts.map +1 -1
  316. package/dist/src/nextjs/providers/NextAuthProvider.js +59 -30
  317. package/dist/src/nextjs/providers/NextAuthProvider.js.map +1 -1
  318. package/dist/src/nextjs/routeHandler.js +2 -2
  319. package/dist/src/nextjs/routeHandler.js.map +1 -1
  320. package/dist/src/reactjs/components/UserButton.js +3 -3
  321. package/dist/src/reactjs/components/UserButton.js.map +1 -1
  322. package/dist/src/reactjs/hooks/index.d.ts +0 -1
  323. package/dist/src/reactjs/hooks/index.d.ts.map +1 -1
  324. package/dist/src/reactjs/hooks/index.js +0 -1
  325. package/dist/src/reactjs/hooks/index.js.map +1 -1
  326. package/dist/src/reactjs/hooks/useRefresh.d.ts +4 -0
  327. package/dist/src/reactjs/hooks/useRefresh.d.ts.map +1 -0
  328. package/dist/src/reactjs/hooks/useRefresh.js +28 -0
  329. package/dist/src/reactjs/hooks/useRefresh.js.map +1 -0
  330. package/dist/src/services/AuthenticationService.d.ts +4 -1
  331. package/dist/src/services/AuthenticationService.d.ts.map +1 -1
  332. package/dist/src/services/AuthenticationService.js +39 -8
  333. package/dist/src/services/AuthenticationService.js.map +1 -1
  334. package/dist/src/shared/components/BlockDisplay.d.ts +7 -0
  335. package/dist/src/shared/components/BlockDisplay.d.ts.map +1 -0
  336. package/dist/src/shared/components/BlockDisplay.js +25 -0
  337. package/dist/src/shared/components/BlockDisplay.js.map +1 -0
  338. package/dist/src/shared/components/CivicAuthIframe.js +1 -1
  339. package/dist/src/shared/components/CivicAuthIframe.js.map +1 -1
  340. package/dist/src/shared/components/CivicAuthIframeContainer.d.ts.map +1 -1
  341. package/dist/src/shared/components/CivicAuthIframeContainer.js +23 -14
  342. package/dist/src/shared/components/CivicAuthIframeContainer.js.map +1 -1
  343. package/dist/src/shared/components/IFrameAndLoading.d.ts +7 -0
  344. package/dist/src/shared/components/IFrameAndLoading.d.ts.map +1 -0
  345. package/dist/src/shared/components/IFrameAndLoading.js +22 -0
  346. package/dist/src/shared/components/IFrameAndLoading.js.map +1 -0
  347. package/dist/src/shared/hooks/index.d.ts +5 -1
  348. package/dist/src/shared/hooks/index.d.ts.map +1 -1
  349. package/dist/src/shared/hooks/index.js +5 -1
  350. package/dist/src/shared/hooks/index.js.map +1 -1
  351. package/dist/src/shared/hooks/useCivicAuthConfig.d.ts +3 -0
  352. package/dist/src/shared/hooks/useCivicAuthConfig.d.ts.map +1 -0
  353. package/dist/src/shared/hooks/useCivicAuthConfig.js +10 -0
  354. package/dist/src/shared/hooks/useCivicAuthConfig.js.map +1 -0
  355. package/dist/src/shared/hooks/useClientTokenExchangeSession.d.ts +3 -0
  356. package/dist/src/shared/hooks/useClientTokenExchangeSession.d.ts.map +1 -0
  357. package/dist/src/shared/hooks/useClientTokenExchangeSession.js +13 -0
  358. package/dist/src/shared/hooks/useClientTokenExchangeSession.js.map +1 -0
  359. package/dist/src/shared/hooks/useCurrentUrl.d.ts +3 -0
  360. package/dist/src/shared/hooks/useCurrentUrl.d.ts.map +1 -0
  361. package/dist/src/shared/hooks/useCurrentUrl.js +24 -0
  362. package/dist/src/shared/hooks/useCurrentUrl.js.map +1 -0
  363. package/dist/src/shared/hooks/useIsInIframe.d.ts +3 -0
  364. package/dist/src/shared/hooks/useIsInIframe.d.ts.map +1 -0
  365. package/dist/src/shared/hooks/useIsInIframe.js +14 -0
  366. package/dist/src/shared/hooks/useIsInIframe.js.map +1 -0
  367. package/dist/src/shared/hooks/useOAuthEndpoints.d.ts +4 -0
  368. package/dist/src/shared/hooks/useOAuthEndpoints.d.ts.map +1 -0
  369. package/dist/src/shared/hooks/useOAuthEndpoints.js +14 -0
  370. package/dist/src/shared/hooks/useOAuthEndpoints.js.map +1 -0
  371. package/dist/src/shared/hooks/useRefresh.d.ts +4 -0
  372. package/dist/src/shared/hooks/useRefresh.d.ts.map +1 -0
  373. package/dist/src/shared/hooks/useRefresh.js +38 -0
  374. package/dist/src/shared/hooks/useRefresh.js.map +1 -0
  375. package/dist/src/shared/hooks/useSession.d.ts +1 -1
  376. package/dist/src/shared/hooks/useSession.d.ts.map +1 -1
  377. package/dist/src/shared/hooks/useSignIn.d.ts +14 -0
  378. package/dist/src/shared/hooks/useSignIn.d.ts.map +1 -0
  379. package/dist/src/shared/hooks/useSignIn.js +71 -0
  380. package/dist/src/shared/hooks/useSignIn.js.map +1 -0
  381. package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts +4 -0
  382. package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  383. package/dist/src/shared/lib/GenericAuthenticationRefresher.js +30 -0
  384. package/dist/src/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  385. package/dist/src/shared/lib/session.d.ts +1 -1
  386. package/dist/src/shared/lib/session.d.ts.map +1 -1
  387. package/dist/src/shared/lib/session.js +12 -1
  388. package/dist/src/shared/lib/session.js.map +1 -1
  389. package/dist/src/shared/lib/types.d.ts +14 -1
  390. package/dist/src/shared/lib/types.d.ts.map +1 -1
  391. package/dist/src/shared/lib/types.js +2 -0
  392. package/dist/src/shared/lib/types.js.map +1 -1
  393. package/dist/src/shared/lib/util.d.ts.map +1 -1
  394. package/dist/src/shared/lib/util.js +11 -2
  395. package/dist/src/shared/lib/util.js.map +1 -1
  396. package/dist/src/shared/providers/AuthProvider.d.ts +3 -2
  397. package/dist/src/shared/providers/AuthProvider.d.ts.map +1 -1
  398. package/dist/src/shared/providers/AuthProvider.js +37 -238
  399. package/dist/src/shared/providers/AuthProvider.js.map +1 -1
  400. package/dist/src/shared/providers/CivicAuthConfigContext.d.ts +16 -0
  401. package/dist/src/shared/providers/CivicAuthConfigContext.d.ts.map +1 -0
  402. package/dist/src/shared/providers/CivicAuthConfigContext.js +43 -0
  403. package/dist/src/shared/providers/CivicAuthConfigContext.js.map +1 -0
  404. package/dist/src/shared/providers/CivicAuthProvider.d.ts.map +1 -1
  405. package/dist/src/shared/providers/CivicAuthProvider.js +23 -6
  406. package/dist/src/shared/providers/CivicAuthProvider.js.map +1 -1
  407. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.d.ts +17 -0
  408. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.d.ts.map +1 -0
  409. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.js +146 -0
  410. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.js.map +1 -0
  411. package/dist/src/shared/providers/IframeProvider.d.ts +7 -4
  412. package/dist/src/shared/providers/IframeProvider.d.ts.map +1 -1
  413. package/dist/src/shared/providers/IframeProvider.js +21 -3
  414. package/dist/src/shared/providers/IframeProvider.js.map +1 -1
  415. package/dist/src/shared/providers/SessionProvider.d.ts +10 -4
  416. package/dist/src/shared/providers/SessionProvider.d.ts.map +1 -1
  417. package/dist/src/shared/providers/SessionProvider.js +15 -5
  418. package/dist/src/shared/providers/SessionProvider.js.map +1 -1
  419. package/dist/src/shared/providers/TokenProvider.d.ts.map +1 -1
  420. package/dist/src/shared/providers/TokenProvider.js +13 -24
  421. package/dist/src/shared/providers/TokenProvider.js.map +1 -1
  422. package/dist/src/shared/providers/UserProvider.d.ts +6 -4
  423. package/dist/src/shared/providers/UserProvider.d.ts.map +1 -1
  424. package/dist/src/shared/providers/UserProvider.js +33 -20
  425. package/dist/src/shared/providers/UserProvider.js.map +1 -1
  426. package/dist/src/types.d.ts +5 -5
  427. package/dist/src/types.d.ts.map +1 -1
  428. package/dist/src/types.js +3 -1
  429. package/dist/src/types.js.map +1 -1
  430. package/dist/test/integration/sdk.test.d.ts.map +1 -1
  431. package/dist/test/integration/sdk.test.js +39 -33
  432. package/dist/test/integration/sdk.test.js.map +1 -1
  433. package/dist/test/unit/nextjs/NextAuthProvider.test.js +8 -6
  434. package/dist/test/unit/nextjs/NextAuthProvider.test.js.map +1 -1
  435. package/dist/test/unit/nextjs/getUser.test.js +2 -16
  436. package/dist/test/unit/nextjs/getUser.test.js.map +1 -1
  437. package/dist/test/unit/server/refresh.test.d.ts.map +1 -0
  438. package/dist/test/unit/services/AuthenticationService.test.js +18 -1
  439. package/dist/test/unit/services/AuthenticationService.test.js.map +1 -1
  440. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js +12 -10
  441. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js.map +1 -1
  442. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  443. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  444. package/dist/tsconfig.tsbuildinfo +1 -1
  445. package/package.json +7 -1
  446. package/.eslintignore +0 -3
  447. package/.eslintrc.json +0 -10
  448. package/.prettierignore +0 -3
  449. package/.prettierrc +0 -1
  450. package/.turbo/turbo-build.log +0 -13
  451. package/.turbo/turbo-lint$colon$fix.log +0 -10
  452. package/.turbo/turbo-test.log +0 -1153
  453. package/dist/cjs/nextjs/hooks/useTokenCookie.d.ts +0 -3
  454. package/dist/cjs/nextjs/hooks/useTokenCookie.d.ts.map +0 -1
  455. package/dist/cjs/nextjs/hooks/useTokenCookie.js +0 -41
  456. package/dist/cjs/nextjs/hooks/useTokenCookie.js.map +0 -1
  457. package/dist/cjs/shared/hooks/useConfig.d.ts +0 -3
  458. package/dist/cjs/shared/hooks/useConfig.d.ts.map +0 -1
  459. package/dist/cjs/shared/hooks/useConfig.js +0 -16
  460. package/dist/cjs/shared/hooks/useConfig.js.map +0 -1
  461. package/dist/cjs/shared/providers/ConfigProvider.d.ts +0 -21
  462. package/dist/cjs/shared/providers/ConfigProvider.d.ts.map +0 -1
  463. package/dist/cjs/shared/providers/ConfigProvider.js +0 -46
  464. package/dist/cjs/shared/providers/ConfigProvider.js.map +0 -1
  465. package/dist/esm/nextjs/hooks/useTokenCookie.d.ts +0 -3
  466. package/dist/esm/nextjs/hooks/useTokenCookie.d.ts.map +0 -1
  467. package/dist/esm/nextjs/hooks/useTokenCookie.js +0 -37
  468. package/dist/esm/nextjs/hooks/useTokenCookie.js.map +0 -1
  469. package/dist/esm/shared/hooks/useConfig.d.ts +0 -3
  470. package/dist/esm/shared/hooks/useConfig.d.ts.map +0 -1
  471. package/dist/esm/shared/hooks/useConfig.js +0 -13
  472. package/dist/esm/shared/hooks/useConfig.js.map +0 -1
  473. package/dist/esm/shared/providers/ConfigProvider.d.ts +0 -21
  474. package/dist/esm/shared/providers/ConfigProvider.d.ts.map +0 -1
  475. package/dist/esm/shared/providers/ConfigProvider.js +0 -19
  476. package/dist/esm/shared/providers/ConfigProvider.js.map +0 -1
  477. package/dist/src/config.d.ts +0 -3
  478. package/dist/src/config.js +0 -5
  479. package/dist/src/config.js.map +0 -1
  480. package/dist/src/constants.d.ts +0 -9
  481. package/dist/src/constants.d.ts.map +0 -1
  482. package/dist/src/constants.js +0 -17
  483. package/dist/src/constants.js.map +0 -1
  484. package/dist/src/index.d.ts +0 -4
  485. package/dist/src/index.js +0 -2
  486. package/dist/src/index.js.map +0 -1
  487. package/dist/src/lib/jwt.d.ts +0 -3
  488. package/dist/src/lib/jwt.js +0 -9
  489. package/dist/src/lib/jwt.js.map +0 -1
  490. package/dist/src/lib/logger.d.ts +0 -26
  491. package/dist/src/lib/logger.d.ts.map +0 -1
  492. package/dist/src/lib/logger.js +0 -55
  493. package/dist/src/lib/logger.js.map +0 -1
  494. package/dist/src/lib/oauth.d.ts +0 -19
  495. package/dist/src/lib/oauth.js +0 -60
  496. package/dist/src/lib/oauth.js.map +0 -1
  497. package/dist/src/lib/postMessage.d.ts +0 -4
  498. package/dist/src/lib/windowUtil.d.ts +0 -4
  499. package/dist/src/nextjs/GetUser.d.ts +0 -6
  500. package/dist/src/nextjs/config.d.ts +0 -178
  501. package/dist/src/nextjs/cookies.d.ts +0 -30
  502. package/dist/src/nextjs/cookies.js +0 -112
  503. package/dist/src/nextjs/cookies.js.map +0 -1
  504. package/dist/src/nextjs/index.d.ts +0 -7
  505. package/dist/src/nextjs/index.js +0 -6
  506. package/dist/src/nextjs/index.js.map +0 -1
  507. package/dist/src/nextjs/middleware/index.d.ts +0 -2
  508. package/dist/src/nextjs/middleware/index.js +0 -2
  509. package/dist/src/nextjs/middleware/index.js.map +0 -1
  510. package/dist/src/nextjs/middleware.d.ts +0 -59
  511. package/dist/src/nextjs/middleware.js +0 -107
  512. package/dist/src/nextjs/middleware.js.map +0 -1
  513. package/dist/src/nextjs/routeHandler.d.ts +0 -18
  514. package/dist/src/nextjs/utils.d.ts +0 -3
  515. package/dist/src/nextjs/utils.js +0 -5
  516. package/dist/src/nextjs/utils.js.map +0 -1
  517. package/dist/src/reactjs/components/SignInButton.d.ts +0 -8
  518. package/dist/src/reactjs/components/SignInButton.js +0 -14
  519. package/dist/src/reactjs/components/SignInButton.js.map +0 -1
  520. package/dist/src/reactjs/components/SignOutButton.d.ts +0 -6
  521. package/dist/src/reactjs/components/SignOutButton.js +0 -14
  522. package/dist/src/reactjs/components/SignOutButton.js.map +0 -1
  523. package/dist/src/reactjs/components/UserButton.d.ts +0 -8
  524. package/dist/src/reactjs/components/index.d.ts +0 -6
  525. package/dist/src/reactjs/components/index.js +0 -6
  526. package/dist/src/reactjs/components/index.js.map +0 -1
  527. package/dist/src/reactjs/hooks/useAuth.d.ts +0 -3
  528. package/dist/src/reactjs/hooks/useAuth.js +0 -12
  529. package/dist/src/reactjs/hooks/useAuth.js.map +0 -1
  530. package/dist/src/reactjs/hooks/useUser.d.ts +0 -4
  531. package/dist/src/reactjs/hooks/useUser.js +0 -12
  532. package/dist/src/reactjs/hooks/useUser.js.map +0 -1
  533. package/dist/src/reactjs/index.d.ts +0 -6
  534. package/dist/src/reactjs/index.js +0 -8
  535. package/dist/src/reactjs/index.js.map +0 -1
  536. package/dist/src/reactjs/providers/index.d.ts +0 -8
  537. package/dist/src/reactjs/providers/index.js +0 -7
  538. package/dist/src/reactjs/providers/index.js.map +0 -1
  539. package/dist/src/server/ServerAuthenticationResolver.d.ts +0 -19
  540. package/dist/src/server/ServerAuthenticationResolver.js +0 -61
  541. package/dist/src/server/ServerAuthenticationResolver.js.map +0 -1
  542. package/dist/src/server/config.d.ts +0 -9
  543. package/dist/src/server/config.js +0 -2
  544. package/dist/src/server/config.js.map +0 -1
  545. package/dist/src/server/index.d.ts +0 -7
  546. package/dist/src/server/index.js +0 -5
  547. package/dist/src/server/index.js.map +0 -1
  548. package/dist/src/server/login.d.ts +0 -17
  549. package/dist/src/server/login.js +0 -37
  550. package/dist/src/server/login.js.map +0 -1
  551. package/dist/src/server/refresh.d.ts +0 -7
  552. package/dist/src/server/refresh.js +0 -13
  553. package/dist/src/server/refresh.js.map +0 -1
  554. package/dist/src/services/PKCE.d.ts +0 -20
  555. package/dist/src/services/PKCE.js +0 -44
  556. package/dist/src/services/PKCE.js.map +0 -1
  557. package/dist/src/services/types.d.ts +0 -23
  558. package/dist/src/services/types.js +0 -7
  559. package/dist/src/services/types.js.map +0 -1
  560. package/dist/src/shared/components/CivicAuthIframe.d.ts +0 -8
  561. package/dist/src/shared/components/CivicAuthIframeContainer.d.ts +0 -9
  562. package/dist/src/shared/components/CloseIcon.d.ts +0 -4
  563. package/dist/src/shared/components/CloseIcon.d.ts.map +0 -1
  564. package/dist/src/shared/components/CloseIcon.js +0 -6
  565. package/dist/src/shared/components/CloseIcon.js.map +0 -1
  566. package/dist/src/shared/components/LoadingIcon.d.ts +0 -4
  567. package/dist/src/shared/components/LoadingIcon.d.ts.map +0 -1
  568. package/dist/src/shared/components/LoadingIcon.js +0 -30
  569. package/dist/src/shared/components/LoadingIcon.js.map +0 -1
  570. package/dist/src/shared/hooks/useAuth.d.ts +0 -3
  571. package/dist/src/shared/hooks/useAuth.js +0 -12
  572. package/dist/src/shared/hooks/useAuth.js.map +0 -1
  573. package/dist/src/shared/hooks/useIframe.d.ts +0 -3
  574. package/dist/src/shared/hooks/useIframe.js +0 -13
  575. package/dist/src/shared/hooks/useIframe.js.map +0 -1
  576. package/dist/src/shared/hooks/useSession.js +0 -13
  577. package/dist/src/shared/hooks/useSession.js.map +0 -1
  578. package/dist/src/shared/hooks/useToken.d.ts +0 -3
  579. package/dist/src/shared/hooks/useToken.js +0 -12
  580. package/dist/src/shared/hooks/useToken.js.map +0 -1
  581. package/dist/src/shared/lib/UserSession.d.ts +0 -12
  582. package/dist/src/shared/lib/UserSession.js +0 -20
  583. package/dist/src/shared/lib/UserSession.js.map +0 -1
  584. package/dist/src/shared/lib/storage.d.ts +0 -25
  585. package/dist/src/shared/lib/storage.js +0 -17
  586. package/dist/src/shared/lib/storage.js.map +0 -1
  587. package/dist/src/shared/lib/util.d.ts +0 -33
  588. package/dist/src/shared/providers/AuthContext.d.ts +0 -10
  589. package/dist/src/shared/providers/AuthContext.js +0 -3
  590. package/dist/src/shared/providers/AuthContext.js.map +0 -1
  591. package/dist/src/shared/providers/CivicAuthProvider.d.ts +0 -6
  592. package/dist/src/shared/providers/TokenProvider.d.ts +0 -18
  593. package/dist/src/utils.d.ts +0 -15
  594. package/dist/src/utils.d.ts.map +0 -1
  595. package/dist/src/utils.js +0 -43
  596. package/dist/src/utils.js.map +0 -1
  597. package/dist/test/integration/sdk.test.d.ts +0 -2
  598. package/dist/test/support/fixtures.d.ts +0 -26
  599. package/dist/test/support/fixtures.d.ts.map +0 -1
  600. package/dist/test/support/fixtures.js +0 -55
  601. package/dist/test/support/fixtures.js.map +0 -1
  602. package/dist/test/support/tokens.json +0 -26
  603. package/dist/test/unit/lib/oauth.test.d.ts +0 -2
  604. package/dist/test/unit/lib/oauth.test.js +0 -55
  605. package/dist/test/unit/lib/oauth.test.js.map +0 -1
  606. package/dist/test/unit/logger.test.d.ts +0 -2
  607. package/dist/test/unit/logger.test.d.ts.map +0 -1
  608. package/dist/test/unit/logger.test.js +0 -141
  609. package/dist/test/unit/logger.test.js.map +0 -1
  610. package/dist/test/unit/nextjs/NextAuthProvider.test.d.ts +0 -2
  611. package/dist/test/unit/nextjs/config.test.d.ts +0 -2
  612. package/dist/test/unit/nextjs/config.test.js +0 -189
  613. package/dist/test/unit/nextjs/config.test.js.map +0 -1
  614. package/dist/test/unit/nextjs/getUser.test.d.ts +0 -2
  615. package/dist/test/unit/nextjs/middleware.test.d.ts +0 -2
  616. package/dist/test/unit/nextjs/middleware.test.js +0 -113
  617. package/dist/test/unit/nextjs/middleware.test.js.map +0 -1
  618. package/dist/test/unit/nextjs/utils.test.d.ts +0 -2
  619. package/dist/test/unit/nextjs/utils.test.js +0 -13
  620. package/dist/test/unit/nextjs/utils.test.js.map +0 -1
  621. package/dist/test/unit/publicApi/apiSnapshot.test.d.ts +0 -2
  622. package/dist/test/unit/publicApi/apiSnapshot.test.js +0 -10
  623. package/dist/test/unit/publicApi/apiSnapshot.test.js.map +0 -1
  624. package/dist/test/unit/react/components/SignInButton.test.d.ts +0 -2
  625. package/dist/test/unit/react/components/SignInButton.test.js +0 -31
  626. package/dist/test/unit/react/components/SignInButton.test.js.map +0 -1
  627. package/dist/test/unit/react/components/SignOutButton.test.d.ts +0 -2
  628. package/dist/test/unit/react/components/SignOutButton.test.js +0 -30
  629. package/dist/test/unit/react/components/SignOutButton.test.js.map +0 -1
  630. package/dist/test/unit/server/login.test.d.ts +0 -2
  631. package/dist/test/unit/server/login.test.js +0 -127
  632. package/dist/test/unit/server/login.test.js.map +0 -1
  633. package/dist/test/unit/server/session.test.d.ts +0 -2
  634. package/dist/test/unit/server/session.test.js +0 -41
  635. package/dist/test/unit/server/session.test.js.map +0 -1
  636. package/dist/test/unit/services/AuthenticationService.test.d.ts +0 -2
  637. package/dist/test/unit/services/ServerAuthenticationResolver.test.d.ts +0 -2
  638. package/dist/test/unit/services/ServerAuthenticationResolver.test.js +0 -74
  639. package/dist/test/unit/services/ServerAuthenticationResolver.test.js.map +0 -1
  640. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.d.ts +0 -2
  641. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.js +0 -61
  642. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.js.map +0 -1
  643. package/dist/test/unit/shared/UserSession.test.d.ts +0 -2
  644. package/dist/test/unit/shared/UserSession.test.js +0 -37
  645. package/dist/test/unit/shared/UserSession.test.js.map +0 -1
  646. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.d.ts +0 -2
  647. package/dist/test/unit/shared/storage.test.d.ts +0 -2
  648. package/dist/test/unit/shared/storage.test.js +0 -53
  649. package/dist/test/unit/shared/storage.test.js.map +0 -1
  650. package/dist/test/unit/utils.test.d.ts +0 -2
  651. package/dist/test/unit/utils.test.d.ts.map +0 -1
  652. package/dist/test/unit/utils.test.js +0 -40
  653. package/dist/test/unit/utils.test.js.map +0 -1
  654. package/dist/vitest.config.d.ts +0 -3
  655. package/dist/vitest.config.d.ts.map +0 -1
  656. package/dist/vitest.config.js +0 -40
  657. package/dist/vitest.config.js.map +0 -1
  658. package/src/browser/storage.ts +0 -11
  659. package/src/config.ts +0 -6
  660. package/src/constants.ts +0 -29
  661. package/src/index.ts +0 -16
  662. package/src/lib/cookies.ts +0 -28
  663. package/src/lib/jwt.ts +0 -15
  664. package/src/lib/logger.ts +0 -72
  665. package/src/lib/oauth.ts +0 -83
  666. package/src/lib/postMessage.ts +0 -22
  667. package/src/lib/windowUtil.ts +0 -29
  668. package/src/nextjs/GetUser.ts +0 -22
  669. package/src/nextjs/config.ts +0 -203
  670. package/src/nextjs/cookies.ts +0 -162
  671. package/src/nextjs/hooks/index.ts +0 -1
  672. package/src/nextjs/hooks/useTokenCookie.ts +0 -41
  673. package/src/nextjs/hooks/useUserCookie.ts +0 -41
  674. package/src/nextjs/index.ts +0 -20
  675. package/src/nextjs/middleware/index.ts +0 -1
  676. package/src/nextjs/middleware.ts +0 -155
  677. package/src/nextjs/providers/NextAuthProvider.tsx +0 -87
  678. package/src/nextjs/routeHandler.ts +0 -297
  679. package/src/nextjs/utils.ts +0 -9
  680. package/src/reactjs/components/SignInButton.tsx +0 -32
  681. package/src/reactjs/components/SignOutButton.tsx +0 -24
  682. package/src/reactjs/components/UserButton.tsx +0 -239
  683. package/src/reactjs/components/index.ts +0 -5
  684. package/src/reactjs/hooks/index.ts +0 -6
  685. package/src/reactjs/hooks/useAuth.ts +0 -15
  686. package/src/reactjs/hooks/useUser.ts +0 -20
  687. package/src/reactjs/index.ts +0 -19
  688. package/src/reactjs/providers/index.ts +0 -27
  689. package/src/server/ServerAuthenticationResolver.ts +0 -107
  690. package/src/server/config.ts +0 -9
  691. package/src/server/index.ts +0 -13
  692. package/src/server/login.ts +0 -59
  693. package/src/server/refresh.ts +0 -23
  694. package/src/services/AuthenticationService.ts +0 -329
  695. package/src/services/PKCE.ts +0 -45
  696. package/src/services/types.ts +0 -54
  697. package/src/shared/components/CivicAuthIframe.tsx +0 -26
  698. package/src/shared/components/CivicAuthIframeContainer.tsx +0 -195
  699. package/src/shared/components/CloseIcon.tsx +0 -21
  700. package/src/shared/components/LoadingIcon.tsx +0 -53
  701. package/src/shared/hooks/index.ts +0 -4
  702. package/src/shared/hooks/useAuth.ts +0 -15
  703. package/src/shared/hooks/useConfig.ts +0 -14
  704. package/src/shared/hooks/useIframe.ts +0 -14
  705. package/src/shared/hooks/useSession.ts +0 -14
  706. package/src/shared/hooks/useToken.ts +0 -15
  707. package/src/shared/lib/GenericAuthenticationRefresher.ts +0 -75
  708. package/src/shared/lib/UserSession.ts +0 -25
  709. package/src/shared/lib/session.ts +0 -11
  710. package/src/shared/lib/storage.ts +0 -40
  711. package/src/shared/lib/types.ts +0 -26
  712. package/src/shared/lib/util.ts +0 -212
  713. package/src/shared/providers/AuthContext.tsx +0 -11
  714. package/src/shared/providers/AuthProvider.tsx +0 -397
  715. package/src/shared/providers/CivicAuthProvider.tsx +0 -31
  716. package/src/shared/providers/ConfigProvider.tsx +0 -50
  717. package/src/shared/providers/IframeProvider.tsx +0 -34
  718. package/src/shared/providers/SessionProvider.tsx +0 -29
  719. package/src/shared/providers/TokenProvider.tsx +0 -78
  720. package/src/shared/providers/UserProvider.tsx +0 -80
  721. package/src/types.ts +0 -227
  722. package/src/utils.ts +0 -58
  723. package/test/integration/sdk.test.tsx +0 -266
  724. package/test/support/fixtures.ts +0 -56
  725. package/test/support/tokens.json +0 -26
  726. package/test/unit/lib/oauth.test.ts +0 -72
  727. package/test/unit/logger.test.ts +0 -175
  728. package/test/unit/nextjs/NextAuthProvider.test.tsx +0 -38
  729. package/test/unit/nextjs/config.test.ts +0 -218
  730. package/test/unit/nextjs/getUser.test.ts +0 -41
  731. package/test/unit/nextjs/middleware.test.ts +0 -138
  732. package/test/unit/nextjs/routeHandler.test.ts.skipped +0 -369
  733. package/test/unit/nextjs/utils.test.ts +0 -17
  734. package/test/unit/publicApi/__snapshots__/apiSnapshot.test.ts.snap +0 -17
  735. package/test/unit/publicApi/apiSnapshot.test.ts +0 -11
  736. package/test/unit/react/components/SignInButton.test.tsx +0 -50
  737. package/test/unit/react/components/SignOutButton.test.tsx +0 -49
  738. package/test/unit/server/login.test.ts +0 -181
  739. package/test/unit/server/session.test.ts +0 -51
  740. package/test/unit/services/AuthenticationService.test.ts +0 -152
  741. package/test/unit/services/ServerAuthenticationResolver.test.ts +0 -115
  742. package/test/unit/shared/GenericAuthenticationRefresher.test.ts +0 -89
  743. package/test/unit/shared/UserSession.test.ts +0 -42
  744. package/test/unit/shared/components/CivicAuthIframeContainer.test.tsx +0 -154
  745. package/test/unit/shared/storage.test.ts +0 -67
  746. package/test/unit/utils.test.ts +0 -48
  747. package/tsconfig.build.json +0 -9
  748. package/tsconfig.cjs.json +0 -8
  749. package/tsconfig.esm.json +0 -7
  750. package/tsconfig.json +0 -42
  751. package/tsconfig.tsbuildinfo +0 -1
  752. package/vitest.config.ts +0 -41
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOAuthEndpoints.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useOAuthEndpoints.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,QAAA,MAAM,iBAAiB,iBAAkB,MAAM,qBAW9C,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useOAuthEndpoints = void 0;
4
+ const constants_js_1 = require("../../constants.js");
5
+ const oauth_js_1 = require("../../lib/oauth.js");
6
+ const react_1 = require("react");
7
+ const useOAuthEndpoints = (oauthServer) => {
8
+ const [endpoints, setEndpoints] = (0, react_1.useState)(null);
9
+ (0, react_1.useEffect)(() => {
10
+ (0, oauth_js_1.getOauthEndpoints)(oauthServer || constants_js_1.DEFAULT_AUTH_SERVER).then((retrievedEndpoints) => {
11
+ setEndpoints(retrievedEndpoints);
12
+ });
13
+ }, [oauthServer]);
14
+ return endpoints;
15
+ };
16
+ exports.useOAuthEndpoints = useOAuthEndpoints;
17
+ //# sourceMappingURL=useOAuthEndpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOAuthEndpoints.js","sourceRoot":"","sources":["../../../../src/shared/hooks/useOAuthEndpoints.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;AACrD,6CAAmD;AAEnD,iCAA4C;AAE5C,MAAM,iBAAiB,GAAG,CAAC,WAAoB,EAAE,EAAE;IACjD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAmB,IAAI,CAAC,CAAC;IACnE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAA,4BAAiB,EAAC,WAAW,IAAI,kCAAmB,CAAC,CAAC,IAAI,CACxD,CAAC,kBAAkB,EAAE,EAAE;YACrB,YAAY,CAAC,kBAAkB,CAAC,CAAC;QACnC,CAAC,CACF,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEO,8CAAiB","sourcesContent":["import { DEFAULT_AUTH_SERVER } from \"@/constants.js\";\nimport { getOauthEndpoints } from \"@/lib/oauth.js\";\nimport type { Endpoints } from \"@/types.js\";\nimport { useEffect, useState } from \"react\";\n\nconst useOAuthEndpoints = (oauthServer?: string) => {\n const [endpoints, setEndpoints] = useState<Endpoints | null>(null);\n useEffect(() => {\n getOauthEndpoints(oauthServer || DEFAULT_AUTH_SERVER).then(\n (retrievedEndpoints) => {\n setEndpoints(retrievedEndpoints);\n },\n );\n }, [oauthServer]);\n\n return endpoints;\n};\n\nexport { useOAuthEndpoints };\n"]}
@@ -0,0 +1,4 @@
1
+ import type { SessionData } from "../../types.js";
2
+ declare const useRefresh: (session: SessionData | null) => void;
3
+ export { useRefresh };
4
+ //# sourceMappingURL=useRefresh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRefresh.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useRefresh.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,QAAA,MAAM,UAAU,YAAa,WAAW,GAAG,IAAI,SAuC9C,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useRefresh = void 0;
4
+ const storage_js_1 = require("../../browser/storage.js");
5
+ const react_1 = require("react");
6
+ const GenericAuthenticationRefresher_js_1 = require("../lib/GenericAuthenticationRefresher.js");
7
+ const useCivicAuthConfig_js_1 = require("./useCivicAuthConfig.js");
8
+ const useRefresh = (session) => {
9
+ const authConfig = (0, useCivicAuthConfig_js_1.useCivicAuthConfig)();
10
+ const storage = (0, react_1.useMemo)(() => new storage_js_1.LocalStorageAdapter(), []);
11
+ // setup token autorefresh
12
+ const [refresher, setRefresher] = (0, react_1.useState)(undefined);
13
+ (0, react_1.useEffect)(() => {
14
+ if (!authConfig)
15
+ return;
16
+ const abortController = new AbortController();
17
+ const currentRefresher = refresher;
18
+ GenericAuthenticationRefresher_js_1.GenericAuthenticationRefresher.build({ ...authConfig }, storage).then((newRefresher) => {
19
+ if (abortController.signal.aborted)
20
+ return;
21
+ currentRefresher?.clearAutorefresh();
22
+ setRefresher(newRefresher);
23
+ });
24
+ return () => {
25
+ abortController.abort();
26
+ currentRefresher?.clearAutorefresh();
27
+ };
28
+ // eslint-disable-next-line react-hooks/exhaustive-deps
29
+ }, [authConfig, storage]); // Only depend on what actually changes
30
+ (0, react_1.useEffect)(() => {
31
+ if (session?.authenticated) {
32
+ refresher?.setupAutorefresh();
33
+ }
34
+ else {
35
+ refresher?.clearAutorefresh();
36
+ }
37
+ return () => refresher?.clearAutorefresh();
38
+ }, [refresher, session?.authenticated]);
39
+ };
40
+ exports.useRefresh = useRefresh;
41
+ //# sourceMappingURL=useRefresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRefresh.js","sourceRoot":"","sources":["../../../../src/shared/hooks/useRefresh.ts"],"names":[],"mappings":";;;AAAA,qDAA2D;AAC3D,iCAAqD;AACrD,gGAA0F;AAC1F,mEAA6D;AAG7D,MAAM,UAAU,GAAG,CAAC,OAA2B,EAAE,EAAE;IACjD,MAAM,UAAU,GAAG,IAAA,0CAAkB,GAAE,CAAC;IACxC,MAAM,OAAO,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,IAAI,gCAAmB,EAAE,EAAE,EAAE,CAAC,CAAC;IAE7D,0BAA0B;IAC1B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAExC,SAAS,CAAC,CAAC;IAEb,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,MAAM,gBAAgB,GAAG,SAAS,CAAC;QAEnC,kEAA8B,CAAC,KAAK,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CACnE,CAAC,YAAY,EAAE,EAAE;YACf,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO;YAE3C,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;YACrC,YAAY,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC,CACF,CAAC;QAEF,OAAO,GAAG,EAAE;YACV,eAAe,CAAC,KAAK,EAAE,CAAC;YACxB,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;QACvC,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,uCAAuC;IAElE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;YAC3B,SAAS,EAAE,gBAAgB,EAAE,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,SAAS,EAAE,gBAAgB,EAAE,CAAC;QAChC,CAAC;QAED,OAAO,GAAG,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC7C,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEO,gCAAU","sourcesContent":["import { LocalStorageAdapter } from \"@/browser/storage.js\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { GenericAuthenticationRefresher } from \"../lib/GenericAuthenticationRefresher.js\";\nimport { useCivicAuthConfig } from \"./useCivicAuthConfig.js\";\nimport type { SessionData } from \"@/types.js\";\n\nconst useRefresh = (session: SessionData | null) => {\n const authConfig = useCivicAuthConfig();\n const storage = useMemo(() => new LocalStorageAdapter(), []);\n\n // setup token autorefresh\n const [refresher, setRefresher] = useState<\n GenericAuthenticationRefresher | undefined\n >(undefined);\n\n useEffect(() => {\n if (!authConfig) return;\n const abortController = new AbortController();\n const currentRefresher = refresher;\n\n GenericAuthenticationRefresher.build({ ...authConfig }, storage).then(\n (newRefresher) => {\n if (abortController.signal.aborted) return;\n\n currentRefresher?.clearAutorefresh();\n setRefresher(newRefresher);\n },\n );\n\n return () => {\n abortController.abort();\n currentRefresher?.clearAutorefresh();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [authConfig, storage]); // Only depend on what actually changes\n\n useEffect(() => {\n if (session?.authenticated) {\n refresher?.setupAutorefresh();\n } else {\n refresher?.clearAutorefresh();\n }\n\n return () => refresher?.clearAutorefresh();\n }, [refresher, session?.authenticated]);\n};\n\nexport { useRefresh };\n"]}
@@ -1,3 +1,3 @@
1
- declare const useSession: () => import("../../types").SessionData;
1
+ declare const useSession: () => import("../../shared/providers/SessionProvider.js").SessionProviderOutput;
2
2
  export { useSession };
3
3
  //# sourceMappingURL=useSession.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSession.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useSession.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,UAAU,yCAMf,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"useSession.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useSession.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,UAAU,6EAMf,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { DisplayMode } from "../../types.js";
2
+ import { type PKCEConsumer } from "../../services/types.js";
3
+ type SignInProps = {
4
+ pkceConsumer?: PKCEConsumer;
5
+ preSignOut?: () => Promise<void>;
6
+ postSignOut?: () => Promise<void>;
7
+ };
8
+ declare const useSignIn: ({ pkceConsumer, preSignOut, postSignOut }: SignInProps) => {
9
+ signIn: (inDisplayMode?: DisplayMode) => Promise<void>;
10
+ signOut: () => Promise<void>;
11
+ displayMode: DisplayMode;
12
+ };
13
+ export { useSignIn };
14
+ //# sourceMappingURL=useSignIn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSignIn.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useSignIn.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEpE,KAAK,WAAW,GAAG;IACjB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC,CAAC;AACF,QAAA,MAAM,SAAS,8CAA+C,WAAW;6BAgC/C,WAAW,KAAc,OAAO,CAAC,IAAI,CAAC;;;CAuC/D,CAAC;AACF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useSignIn = void 0;
4
+ const AuthenticationService_js_1 = require("../../services/AuthenticationService.js");
5
+ const PKCE_js_1 = require("../../services/PKCE.js");
6
+ const useCivicAuthConfig_js_1 = require("../../shared/hooks/useCivicAuthConfig.js");
7
+ const useIframe_js_1 = require("../../shared/hooks/useIframe.js");
8
+ const react_1 = require("react");
9
+ const types_js_1 = require("../../services/types.js");
10
+ const useSignIn = ({ pkceConsumer, preSignOut, postSignOut }) => {
11
+ const civicAuthConfig = (0, useCivicAuthConfig_js_1.useCivicAuthConfig)();
12
+ const { iframeRef, setIframeIsVisible } = (0, useIframe_js_1.useIframe)();
13
+ const [displayMode, setDisplayMode] = (0, react_1.useState)("iframe");
14
+ const authInitiator = (0, react_1.useMemo)(() => {
15
+ if (!civicAuthConfig) {
16
+ return null;
17
+ }
18
+ const { clientId, redirectUrl, nonce, oauthServer, endpoints, scopes } = civicAuthConfig;
19
+ return new AuthenticationService_js_1.BrowserAuthenticationInitiator({
20
+ pkceConsumer: pkceConsumer || new PKCE_js_1.BrowserPublicClientPKCEProducer(), // generate and retrieve the challenge client-side
21
+ clientId,
22
+ redirectUrl,
23
+ scopes,
24
+ displayMode,
25
+ oauthServer,
26
+ endpointOverrides: endpoints,
27
+ nonce,
28
+ });
29
+ }, [civicAuthConfig, displayMode, pkceConsumer]);
30
+ (0, react_1.useEffect)(() => {
31
+ return () => {
32
+ if (authInitiator) {
33
+ authInitiator.cleanup();
34
+ }
35
+ };
36
+ }, [authInitiator]);
37
+ const signIn = (0, react_1.useCallback)(async (inDisplayMode = "iframe") => {
38
+ if (!authInitiator)
39
+ return;
40
+ authInitiator.setDisplayMode(inDisplayMode);
41
+ setDisplayMode(inDisplayMode);
42
+ if (inDisplayMode === "iframe") {
43
+ setIframeIsVisible(true);
44
+ }
45
+ const useIframeRef = iframeRef?.current || null;
46
+ await authInitiator.signIn(useIframeRef).catch((error) => {
47
+ console.log("signIn error", {
48
+ error,
49
+ isPopupError: error instanceof types_js_1.PopupError,
50
+ });
51
+ // if we've tried to open a popup and it has failed, then fallback to redirect mode
52
+ if (error instanceof types_js_1.PopupError) {
53
+ setDisplayMode("redirect");
54
+ setIframeIsVisible(false); // hide the iframe
55
+ authInitiator.cleanup(); // clear any event listeners from before
56
+ authInitiator.setDisplayMode("redirect"); // switch to redirect mode
57
+ authInitiator.signIn(useIframeRef); // retry the sign in
58
+ }
59
+ });
60
+ }, [authInitiator, iframeRef, setIframeIsVisible]);
61
+ const signOut = (0, react_1.useCallback)(async () => {
62
+ await preSignOut?.();
63
+ await authInitiator?.signOut();
64
+ setIframeIsVisible(false);
65
+ await postSignOut?.();
66
+ }, [preSignOut, authInitiator, setIframeIsVisible, postSignOut]);
67
+ return {
68
+ signIn,
69
+ signOut,
70
+ displayMode,
71
+ };
72
+ };
73
+ exports.useSignIn = useSignIn;
74
+ //# sourceMappingURL=useSignIn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSignIn.js","sourceRoot":"","sources":["../../../../src/shared/hooks/useSignIn.ts"],"names":[],"mappings":"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","sourcesContent":["import { BrowserAuthenticationInitiator } from \"@/services/AuthenticationService.js\";\nimport { BrowserPublicClientPKCEProducer } from \"@/services/PKCE.js\";\nimport { useCivicAuthConfig } from \"@/shared/hooks/useCivicAuthConfig.js\";\nimport type { DisplayMode } from \"@/types.js\";\nimport { useIframe } from \"@/shared/hooks/useIframe.js\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { PopupError, type PKCEConsumer } from \"@/services/types.js\";\n\ntype SignInProps = {\n pkceConsumer?: PKCEConsumer;\n preSignOut?: () => Promise<void>;\n postSignOut?: () => Promise<void>;\n};\nconst useSignIn = ({ pkceConsumer, preSignOut, postSignOut }: SignInProps) => {\n const civicAuthConfig = useCivicAuthConfig();\n const { iframeRef, setIframeIsVisible } = useIframe();\n const [displayMode, setDisplayMode] = useState<DisplayMode>(\"iframe\");\n\n const authInitiator = useMemo(() => {\n if (!civicAuthConfig) {\n return null;\n }\n const { clientId, redirectUrl, nonce, oauthServer, endpoints, scopes } =\n civicAuthConfig;\n return new BrowserAuthenticationInitiator({\n pkceConsumer: pkceConsumer || new BrowserPublicClientPKCEProducer(), // generate and retrieve the challenge client-side\n clientId,\n redirectUrl,\n scopes,\n displayMode,\n oauthServer,\n endpointOverrides: endpoints,\n nonce,\n });\n }, [civicAuthConfig, displayMode, pkceConsumer]);\n\n useEffect(() => {\n return () => {\n if (authInitiator) {\n authInitiator.cleanup();\n }\n };\n }, [authInitiator]);\n\n const signIn = useCallback(\n async (inDisplayMode: DisplayMode = \"iframe\"): Promise<void> => {\n if (!authInitiator) return;\n\n authInitiator.setDisplayMode(inDisplayMode);\n setDisplayMode(inDisplayMode);\n if (inDisplayMode === \"iframe\") {\n setIframeIsVisible(true);\n }\n const useIframeRef = iframeRef?.current || null;\n await authInitiator.signIn(useIframeRef).catch((error) => {\n console.log(\"signIn error\", {\n error,\n isPopupError: error instanceof PopupError,\n });\n // if we've tried to open a popup and it has failed, then fallback to redirect mode\n if (error instanceof PopupError) {\n setDisplayMode(\"redirect\");\n setIframeIsVisible(false); // hide the iframe\n authInitiator.cleanup(); // clear any event listeners from before\n authInitiator.setDisplayMode(\"redirect\"); // switch to redirect mode\n authInitiator.signIn(useIframeRef); // retry the sign in\n }\n });\n },\n [authInitiator, iframeRef, setIframeIsVisible],\n );\n\n const signOut = useCallback(async () => {\n await preSignOut?.();\n await authInitiator?.signOut();\n setIframeIsVisible(false);\n await postSignOut?.();\n }, [preSignOut, authInitiator, setIframeIsVisible, postSignOut]);\n\n return {\n signIn,\n signOut,\n displayMode,\n };\n};\nexport { useSignIn };\n"]}
@@ -7,10 +7,14 @@ export declare class GenericAuthenticationRefresher implements AuthenticationRef
7
7
  private endpointOverrides?;
8
8
  private oauth2client;
9
9
  private endpoints;
10
+ private refreshTimeout;
10
11
  private constructor();
11
12
  get oauthServer(): string;
12
13
  init(): Promise<this>;
13
14
  static build(authConfig: AuthConfig, storage: AuthStorage, endpointOverrides?: Partial<Endpoints>): Promise<GenericAuthenticationRefresher>;
14
15
  refreshTokens(): Promise<OIDCTokenResponseBody>;
16
+ private handleRefresh;
17
+ setupAutorefresh(): Promise<void>;
18
+ clearAutorefresh(): void;
15
19
  }
16
20
  //# sourceMappingURL=GenericAuthenticationRefresher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GenericAuthenticationRefresher.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/GenericAuthenticationRefresher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAMhF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,qBAAa,8BAA+B,YAAW,uBAAuB;IAK1E,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,iBAAiB,CAAC;IAN5B,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,SAAS,CAAwB;IAEzC,OAAO;IAMP,IAAI,WAAW,IAAI,MAAM,CAExB;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;WAkBd,KAAK,CAChB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,WAAW,EACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GACrC,OAAO,CAAC,8BAA8B,CAAC;IAWpC,aAAa;CAgBpB"}
1
+ {"version":3,"file":"GenericAuthenticationRefresher.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/GenericAuthenticationRefresher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAMhF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,qBAAa,8BAA+B,YAAW,uBAAuB;IAM1E,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,iBAAiB,CAAC;IAP5B,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,cAAc,CAA6B;IAEnD,OAAO;IAMP,IAAI,WAAW,IAAI,MAAM,CAExB;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;WAkBd,KAAK,CAChB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,WAAW,EACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GACrC,OAAO,CAAC,8BAA8B,CAAC;IAWpC,aAAa;YAiBL,aAAa;IAWrB,gBAAgB;IAkBtB,gBAAgB;CAKjB"}
@@ -10,6 +10,7 @@ class GenericAuthenticationRefresher {
10
10
  endpointOverrides;
11
11
  oauth2client;
12
12
  endpoints;
13
+ refreshTimeout;
13
14
  constructor(authConfig, storage, endpointOverrides) {
14
15
  this.authConfig = authConfig;
15
16
  this.storage = storage;
@@ -42,6 +43,35 @@ class GenericAuthenticationRefresher {
42
43
  await (0, util_js_1.storeTokens)(this.storage, refreshedTokens);
43
44
  return tokens;
44
45
  }
46
+ async handleRefresh() {
47
+ try {
48
+ await this.refreshTokens();
49
+ await this.setupAutorefresh(); // Reset the timeout after successful refresh
50
+ console.log("Autorefreshed tokens");
51
+ }
52
+ catch (error) {
53
+ console.error("Failed to refresh tokens:", error);
54
+ }
55
+ }
56
+ async setupAutorefresh() {
57
+ // Clear any existing timeout
58
+ this.clearAutorefresh();
59
+ // get expires_in
60
+ const tokens = await (0, util_js_1.retrieveTokens)(this.storage);
61
+ const expires_in = tokens?.expires_in || 60;
62
+ // Calculate time until expiry (subtract 30 seconds as buffer)
63
+ const bufferTimeMs = 30 * 1000; // 30 seconds in milliseconds
64
+ const expiresInMs = expires_in * 1000; // Convert to milliseconds
65
+ const refreshTimeMs = Math.max(0, expiresInMs - bufferTimeMs);
66
+ this.refreshTimeout = setTimeout(() => {
67
+ this.handleRefresh();
68
+ }, refreshTimeMs);
69
+ }
70
+ clearAutorefresh() {
71
+ if (this.refreshTimeout) {
72
+ clearTimeout(this.refreshTimeout);
73
+ }
74
+ }
45
75
  }
46
76
  exports.GenericAuthenticationRefresher = GenericAuthenticationRefresher;
47
77
  //# sourceMappingURL=GenericAuthenticationRefresher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GenericAuthenticationRefresher.js","sourceRoot":"","sources":["../../../../src/shared/lib/GenericAuthenticationRefresher.ts"],"names":[],"mappings":";;;AAEA,kDAI8B;AAE9B,wCAA2C;AAC3C,iDAAqD;AAErD,MAAa,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,kCAAmB,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,IAAI;QACR,uBAAuB;QACvB,IAAI,CAAC,SAAS,GAAG,MAAM,IAAA,mCAAyB,EAC9C,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,iBAAiB,CACvB,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,IAAI,qBAAY,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,IAAA,wBAAc,EAAC,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,IAAA,qBAAW,EAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAEjD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA/DD,wEA+DC","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,3 +1,3 @@
1
- import type { AuthStorage, User } from "../../types.js";
1
+ import { type AuthStorage, type User } from "../../types.js";
2
2
  export declare function getUser(storage: AuthStorage): Promise<User | null>;
3
3
  //# sourceMappingURL=session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEpD,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAMxE"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/shared/lib/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,WAAW,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAcpE,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAQxE"}
@@ -3,11 +3,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getUser = getUser;
4
4
  const util_js_1 = require("../../shared/lib/util.js");
5
5
  const jwt_1 = require("oslo/jwt");
6
+ const types_js_1 = require("../../types.js");
7
+ // Function to omit keys from an object
8
+ const omitKeys = (keys, obj) => {
9
+ const result = { ...obj };
10
+ keys.forEach((key) => {
11
+ delete result[key];
12
+ });
13
+ return result;
14
+ };
6
15
  async function getUser(storage) {
7
16
  const tokens = await (0, util_js_1.retrieveTokens)(storage);
8
17
  if (!tokens)
9
18
  return null;
19
+ const parsedToken = (0, jwt_1.parseJWT)(tokens.id_token)?.payload;
10
20
  // Assumes all information is in the ID token
11
- return (0, jwt_1.parseJWT)(tokens.id_token)?.payload ?? null;
21
+ // remove the token keys from the user object to stop it getting too large
22
+ return parsedToken ? omitKeys(types_js_1.tokenKeys, parsedToken) : null;
12
23
  }
13
24
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../src/shared/lib/session.ts"],"names":[],"mappings":";;AAIA,0BAMC;AAVD,kDAAsD;AACtD,kCAAoC;AAG7B,KAAK,UAAU,OAAO,CAAC,OAAoB;IAChD,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAc,EAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,6CAA6C;IAC7C,OAAQ,IAAA,cAAQ,EAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAgB,IAAI,IAAI,CAAC;AAC9D,CAAC","sourcesContent":["import { retrieveTokens } from \"@/shared/lib/util.js\";\nimport { parseJWT } from \"oslo/jwt\";\nimport type { AuthStorage, User } from \"@/types.js\";\n\nexport async function getUser(storage: AuthStorage): Promise<User | null> {\n const tokens = await retrieveTokens(storage);\n if (!tokens) return null;\n\n // Assumes all information is in the ID token\n return (parseJWT(tokens.id_token)?.payload as User) ?? null;\n}\n"]}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../src/shared/lib/session.ts"],"names":[],"mappings":";;AAgBA,0BAQC;AAxBD,kDAAsD;AACtD,kCAAoC;AACpC,yCAAoE;AAEpE,uCAAuC;AACvC,MAAM,QAAQ,GAAG,CACf,IAAS,EACT,GAAM,EACM,EAAE;IACd,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAC1B,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEK,KAAK,UAAU,OAAO,CAAC,OAAoB;IAChD,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAc,EAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,WAAW,GAAG,IAAA,cAAQ,EAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAe,CAAC;IAC/D,6CAA6C;IAC7C,0EAA0E;IAC1E,OAAO,WAAW,CAAC,CAAC,CAAE,QAAQ,CAAC,oBAAS,EAAE,WAAW,CAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACzE,CAAC","sourcesContent":["import { retrieveTokens } from \"@/shared/lib/util.js\";\nimport { parseJWT } from \"oslo/jwt\";\nimport { tokenKeys, type AuthStorage, type User } from \"@/types.js\";\n\n// Function to omit keys from an object\nconst omitKeys = <K extends keyof T, T extends Record<string, unknown>>(\n keys: K[],\n obj: T,\n): Omit<T, K> => {\n const result = { ...obj };\n keys.forEach((key) => {\n delete result[key];\n });\n return result;\n};\n\nexport async function getUser(storage: AuthStorage): Promise<User | null> {\n const tokens = await retrieveTokens(storage);\n if (!tokens) return null;\n\n const parsedToken = parseJWT(tokens.id_token)?.payload as User;\n // Assumes all information is in the ID token\n // remove the token keys from the user object to stop it getting too large\n return parsedToken ? (omitKeys(tokenKeys, parsedToken) as User) : null;\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"}
@@ -6,6 +6,8 @@ var OAuthTokens;
6
6
  OAuthTokens["ID_TOKEN"] = "id_token";
7
7
  OAuthTokens["ACCESS_TOKEN"] = "access_token";
8
8
  OAuthTokens["REFRESH_TOKEN"] = "refresh_token";
9
+ OAuthTokens["EXPIRES_IN"] = "expires_in";
10
+ OAuthTokens["TIMESTAMP"] = "timestamp";
9
11
  })(OAuthTokens || (exports.OAuthTokens = OAuthTokens = {}));
10
12
  var CodeVerifier;
11
13
  (function (CodeVerifier) {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/shared/lib/types.ts"],"names":[],"mappings":";;;AAAA,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,oCAAqB,CAAA;IACrB,4CAA6B,CAAA;IAC7B,8CAA+B,CAAA;AACjC,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAED,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,6CAA6B,CAAA;IAC7B,mCAAmB,CAAA;AACrB,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB;AACD,IAAY,WAEX;AAFD,WAAY,WAAW;IACrB,4BAAa,CAAA;AACf,CAAC,EAFW,WAAW,2BAAX,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,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,2BAAX,WAAW,QAMtB;AAED,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,6CAA6B,CAAA;IAC7B,mCAAmB,CAAA;AACrB,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB;AACD,IAAY,WAEX;AAFD,WAAY,WAAW;IACrB,4BAAa,CAAA;AACf,CAAC,EAFW,WAAW,2BAAX,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,kCAoBrB;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,qBAAqB,iBAY9B;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,iBAKrD;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,iBAInD;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAgBvC;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CA2BvB"}
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  Object.defineProperty(exports, "__esModule", { value: true });
26
36
  exports.deriveCodeChallenge = deriveCodeChallenge;
27
37
  exports.getEndpointsWithOverrides = getEndpointsWithOverrides;
@@ -117,27 +127,36 @@ async function storeTokens(storage, tokens) {
117
127
  if (tokens.refresh_token) {
118
128
  await storage.set(types_js_1.OAuthTokens.REFRESH_TOKEN, tokens.refresh_token);
119
129
  }
130
+ if (tokens.expires_in) {
131
+ await storage.set(types_js_1.OAuthTokens.EXPIRES_IN, tokens.expires_in.toString());
132
+ await storage.set(types_js_1.OAuthTokens.TIMESTAMP, new Date().getTime().toString());
133
+ }
120
134
  }
121
135
  async function clearTokens(storage) {
122
- const clearOAuthPromises = Object.values(types_js_1.OAuthTokens).map((cookie) => {
123
- storage.set(cookie, "");
136
+ const clearOAuthPromises = Object.values(types_js_1.OAuthTokens).map(async (key) => {
137
+ await storage.set(key, "");
124
138
  });
125
139
  await Promise.all([...clearOAuthPromises]);
126
140
  }
127
141
  async function clearUser(storage) {
128
142
  const userSession = new UserSession_js_1.GenericUserSession(storage);
143
+ console.log("clearUser");
129
144
  await userSession.set(null);
130
145
  }
131
146
  async function retrieveTokens(storage) {
132
147
  const idToken = await storage.get(types_js_1.OAuthTokens.ID_TOKEN);
133
148
  const accessToken = await storage.get(types_js_1.OAuthTokens.ACCESS_TOKEN);
134
149
  const refreshToken = await storage.get(types_js_1.OAuthTokens.REFRESH_TOKEN);
150
+ const expiresIn = await storage.get(types_js_1.OAuthTokens.EXPIRES_IN);
151
+ const timestamp = await storage.get(types_js_1.OAuthTokens.TIMESTAMP);
135
152
  if (!idToken || !accessToken)
136
153
  return null;
137
154
  return {
138
155
  id_token: idToken,
139
156
  access_token: accessToken,
140
157
  refresh_token: refreshToken ?? undefined,
158
+ expires_in: expiresIn ? parseInt(expiresIn, 10) : undefined, // Convert string to number
159
+ timestamp: timestamp ? parseInt(timestamp, 10) : undefined, // Convert string to number
141
160
  };
142
161
  }
143
162
  async function validateOauth2Tokens(tokens, endpoints, oauth2Client, issuer) {
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/shared/lib/util.ts"],"names":[],"mappings":"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","sourcesContent":["// Utility functions shared by auth server and client integrations\n// Typically these functions should be used inside AuthenticationInitiator and AuthenticationResolver implementations\nimport type {\n AuthStorage,\n Endpoints,\n JWTPayload,\n OIDCTokenResponseBody,\n ParsedTokens,\n} from \"@/types.js\";\nimport { OAuthTokens } from \"./types.js\";\nimport { OAuth2Client } from \"oslo/oauth2\";\nimport { getIssuerVariations, getOauthEndpoints } from \"@/lib/oauth.js\";\nimport * as jose from \"jose\";\nimport { withoutUndefined } from \"@/utils.js\";\nimport type { PKCEConsumer, PKCEProducer } from \"@/services/types.js\";\nimport { GenericUserSession } from \"@/shared/lib/UserSession.js\";\n\n/**\n * Given a PKCE code verifier, derive the code challenge using SHA\n */\nexport async function deriveCodeChallenge(\n codeVerifier: string,\n method: \"Plain\" | \"S256\" = \"S256\",\n): Promise<string> {\n if (method === \"Plain\") {\n console.warn(\"Using insecure plain code challenge method\");\n return codeVerifier;\n }\n\n const encoder = new TextEncoder();\n const data = encoder.encode(codeVerifier);\n const digest = await crypto.subtle.digest(\"SHA-256\", data);\n return btoa(String.fromCharCode(...new Uint8Array(digest)))\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nexport async function getEndpointsWithOverrides(\n oauthServer: string,\n endpointOverrides: Partial<Endpoints> = {},\n): Promise<Endpoints> {\n const endpoints = await getOauthEndpoints(oauthServer);\n return {\n ...endpoints,\n ...endpointOverrides,\n };\n}\n\nexport async function generateOauthLoginUrl(config: {\n clientId: string;\n scopes: string[];\n state: string;\n redirectUrl: string;\n oauthServer: string;\n nonce?: string;\n endpointOverrides?: Partial<Endpoints>;\n // used to get the PKCE challenge\n pkceConsumer: PKCEConsumer;\n}): Promise<URL> {\n const endpoints = await getEndpointsWithOverrides(\n config.oauthServer,\n config.endpointOverrides,\n );\n const oauth2Client = buildOauth2Client(\n config.clientId,\n config.redirectUrl,\n endpoints,\n );\n const challenge = await config.pkceConsumer.getCodeChallenge();\n const oAuthUrl = await oauth2Client.createAuthorizationURL({\n state: config.state,\n scopes: config.scopes,\n });\n // The OAuth2 client supports PKCE, but does not allow passing in a code challenge from some other source\n // It only allows passing in a code verifier which it then hashes itself.\n oAuthUrl.searchParams.append(\"code_challenge\", challenge);\n oAuthUrl.searchParams.append(\"code_challenge_method\", \"S256\");\n if (config.nonce) {\n // nonce isn't supported by oslo, so we add it manually\n oAuthUrl.searchParams.append(\"nonce\", config.nonce);\n }\n // Required by the auth server for offline_access scope\n oAuthUrl.searchParams.append(\"prompt\", \"consent\");\n\n return oAuthUrl;\n}\n\nexport async function generateOauthLogoutUrl(config: {\n clientId: string;\n 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 return tokens;\n}\n\nexport async function storeTokens(\n storage: AuthStorage,\n tokens: OIDCTokenResponseBody,\n) {\n // store tokens in storage ( TODO we should probably store them against the state to allow multiple logins )\n await storage.set(OAuthTokens.ID_TOKEN, tokens.id_token);\n await storage.set(OAuthTokens.ACCESS_TOKEN, tokens.access_token);\n if (tokens.refresh_token) {\n await storage.set(OAuthTokens.REFRESH_TOKEN, tokens.refresh_token);\n }\n if (tokens.expires_in) {\n await storage.set(OAuthTokens.EXPIRES_IN, tokens.expires_in.toString());\n await storage.set(OAuthTokens.TIMESTAMP, new Date().getTime().toString());\n }\n}\n\nexport async function clearTokens(storage: AuthStorage) {\n const clearOAuthPromises = Object.values(OAuthTokens).map(async (key) => {\n await storage.set(key, \"\");\n });\n await Promise.all([...clearOAuthPromises]);\n}\n\nexport async function clearUser(storage: AuthStorage) {\n const userSession = new GenericUserSession(storage);\n console.log(\"clearUser\");\n await userSession.set(null);\n}\n\nexport async function retrieveTokens(\n storage: AuthStorage,\n): Promise<OIDCTokenResponseBody | null> {\n const idToken = await storage.get(OAuthTokens.ID_TOKEN);\n const accessToken = await storage.get(OAuthTokens.ACCESS_TOKEN);\n const refreshToken = await storage.get(OAuthTokens.REFRESH_TOKEN);\n const expiresIn = await storage.get(OAuthTokens.EXPIRES_IN);\n const timestamp = await storage.get(OAuthTokens.TIMESTAMP);\n\n if (!idToken || !accessToken) return null;\n\n return {\n id_token: idToken,\n access_token: accessToken,\n refresh_token: refreshToken ?? undefined,\n expires_in: expiresIn ? parseInt(expiresIn, 10) : undefined, // Convert string to number\n timestamp: timestamp ? parseInt(timestamp, 10) : undefined, // Convert string to number\n };\n}\n\nexport async function 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"}