@civic/auth 0.0.1--.tsc.alpha.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 (744) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc.json +10 -0
  3. package/.prettierignore +3 -0
  4. package/.prettierrc +4 -0
  5. package/.turbo/turbo-build.log +13 -0
  6. package/.turbo/turbo-lint.log +6 -0
  7. package/.turbo/turbo-test.log +2415 -0
  8. package/README.md +202 -0
  9. package/civic-auth-0.0.1-beta.21.tgz +0 -0
  10. package/dist/cjs/src/browser/storage.d.ts +6 -0
  11. package/dist/cjs/src/browser/storage.d.ts.map +1 -0
  12. package/dist/cjs/src/browser/storage.js +13 -0
  13. package/dist/cjs/src/browser/storage.js.map +1 -0
  14. package/dist/cjs/src/config.d.ts +3 -0
  15. package/dist/cjs/src/config.d.ts.map +1 -0
  16. package/dist/cjs/src/config.js +8 -0
  17. package/dist/cjs/src/config.js.map +1 -0
  18. package/dist/cjs/src/constants.d.ts +9 -0
  19. package/dist/cjs/src/constants.d.ts.map +1 -0
  20. package/dist/cjs/src/constants.js +26 -0
  21. package/dist/cjs/src/constants.js.map +1 -0
  22. package/dist/cjs/src/index.d.ts +5 -0
  23. package/dist/cjs/src/index.d.ts.map +1 -0
  24. package/dist/cjs/src/index.js +5 -0
  25. package/dist/cjs/src/index.js.map +1 -0
  26. package/dist/cjs/src/lib/cookies.d.ts +7 -0
  27. package/dist/cjs/src/lib/cookies.d.ts.map +1 -0
  28. package/dist/cjs/src/lib/cookies.js +26 -0
  29. package/dist/cjs/src/lib/cookies.js.map +1 -0
  30. package/dist/cjs/src/lib/jwt.d.ts +3 -0
  31. package/dist/cjs/src/lib/jwt.d.ts.map +1 -0
  32. package/dist/cjs/src/lib/jwt.js +13 -0
  33. package/dist/cjs/src/lib/jwt.js.map +1 -0
  34. package/dist/cjs/src/lib/logger.d.ts +26 -0
  35. package/dist/cjs/src/lib/logger.d.ts.map +1 -0
  36. package/dist/cjs/src/lib/logger.js +62 -0
  37. package/dist/cjs/src/lib/logger.js.map +1 -0
  38. package/dist/cjs/src/lib/oauth.d.ts +19 -0
  39. package/dist/cjs/src/lib/oauth.d.ts.map +1 -0
  40. package/dist/cjs/src/lib/oauth.js +67 -0
  41. package/dist/cjs/src/lib/oauth.js.map +1 -0
  42. package/dist/cjs/src/lib/postMessage.d.ts +4 -0
  43. package/dist/cjs/src/lib/postMessage.d.ts.map +1 -0
  44. package/dist/cjs/src/lib/postMessage.js +18 -0
  45. package/dist/cjs/src/lib/postMessage.js.map +1 -0
  46. package/dist/cjs/src/lib/windowUtil.d.ts +4 -0
  47. package/dist/cjs/src/lib/windowUtil.d.ts.map +1 -0
  48. package/dist/cjs/src/lib/windowUtil.js +34 -0
  49. package/dist/cjs/src/lib/windowUtil.js.map +1 -0
  50. package/dist/cjs/src/nextjs/GetUser.d.ts +6 -0
  51. package/dist/cjs/src/nextjs/GetUser.d.ts.map +1 -0
  52. package/dist/cjs/src/nextjs/GetUser.js +22 -0
  53. package/dist/cjs/src/nextjs/GetUser.js.map +1 -0
  54. package/dist/cjs/src/nextjs/client/index.d.ts +2 -0
  55. package/dist/cjs/src/nextjs/client/index.d.ts.map +1 -0
  56. package/dist/cjs/src/nextjs/client/index.js +6 -0
  57. package/dist/cjs/src/nextjs/client/index.js.map +1 -0
  58. package/dist/cjs/src/nextjs/config.d.ts +180 -0
  59. package/dist/cjs/src/nextjs/config.d.ts.map +1 -0
  60. package/dist/cjs/src/nextjs/config.js +163 -0
  61. package/dist/cjs/src/nextjs/config.js.map +1 -0
  62. package/dist/cjs/src/nextjs/cookies.d.ts +30 -0
  63. package/dist/cjs/src/nextjs/cookies.d.ts.map +1 -0
  64. package/dist/cjs/src/nextjs/cookies.js +116 -0
  65. package/dist/cjs/src/nextjs/cookies.js.map +1 -0
  66. package/dist/cjs/src/nextjs/hooks/index.d.ts +2 -0
  67. package/dist/cjs/src/nextjs/hooks/index.d.ts.map +1 -0
  68. package/dist/cjs/src/nextjs/hooks/index.js +6 -0
  69. package/dist/cjs/src/nextjs/hooks/index.js.map +1 -0
  70. package/dist/cjs/src/nextjs/hooks/useTokenCookie.d.ts +3 -0
  71. package/dist/cjs/src/nextjs/hooks/useTokenCookie.d.ts.map +1 -0
  72. package/dist/cjs/src/nextjs/hooks/useTokenCookie.js +41 -0
  73. package/dist/cjs/src/nextjs/hooks/useTokenCookie.js.map +1 -0
  74. package/dist/cjs/src/nextjs/hooks/useUserCookie.d.ts +3 -0
  75. package/dist/cjs/src/nextjs/hooks/useUserCookie.d.ts.map +1 -0
  76. package/dist/cjs/src/nextjs/hooks/useUserCookie.js +40 -0
  77. package/dist/cjs/src/nextjs/hooks/useUserCookie.js.map +1 -0
  78. package/dist/cjs/src/nextjs/index.d.ts +7 -0
  79. package/dist/cjs/src/nextjs/index.d.ts.map +1 -0
  80. package/dist/cjs/src/nextjs/index.js +20 -0
  81. package/dist/cjs/src/nextjs/index.js.map +1 -0
  82. package/dist/cjs/src/nextjs/middleware/index.d.ts +2 -0
  83. package/dist/cjs/src/nextjs/middleware/index.d.ts.map +1 -0
  84. package/dist/cjs/src/nextjs/middleware/index.js +8 -0
  85. package/dist/cjs/src/nextjs/middleware/index.js.map +1 -0
  86. package/dist/cjs/src/nextjs/middleware.d.ts +59 -0
  87. package/dist/cjs/src/nextjs/middleware.d.ts.map +1 -0
  88. package/dist/cjs/src/nextjs/middleware.js +116 -0
  89. package/dist/cjs/src/nextjs/middleware.js.map +1 -0
  90. package/dist/cjs/src/nextjs/providers/NextAuthProvider.d.ts +9 -0
  91. package/dist/cjs/src/nextjs/providers/NextAuthProvider.d.ts.map +1 -0
  92. package/dist/cjs/src/nextjs/providers/NextAuthProvider.js +77 -0
  93. package/dist/cjs/src/nextjs/providers/NextAuthProvider.js.map +1 -0
  94. package/dist/cjs/src/nextjs/routeHandler.d.ts +18 -0
  95. package/dist/cjs/src/nextjs/routeHandler.d.ts.map +1 -0
  96. package/dist/cjs/src/nextjs/routeHandler.js +208 -0
  97. package/dist/cjs/src/nextjs/routeHandler.js.map +1 -0
  98. package/dist/cjs/src/nextjs/utils.d.ts +3 -0
  99. package/dist/cjs/src/nextjs/utils.d.ts.map +1 -0
  100. package/dist/cjs/src/nextjs/utils.js +10 -0
  101. package/dist/cjs/src/nextjs/utils.js.map +1 -0
  102. package/dist/cjs/src/nextjs/worker/index.d.ts +2 -0
  103. package/dist/cjs/src/nextjs/worker/index.d.ts.map +1 -0
  104. package/dist/cjs/src/nextjs/worker/index.js +8 -0
  105. package/dist/cjs/src/nextjs/worker/index.js.map +1 -0
  106. package/dist/cjs/src/reactjs/components/NextLogOut.d.ts +7 -0
  107. package/dist/cjs/src/reactjs/components/NextLogOut.d.ts.map +1 -0
  108. package/dist/cjs/src/reactjs/components/NextLogOut.js +18 -0
  109. package/dist/cjs/src/reactjs/components/NextLogOut.js.map +1 -0
  110. package/dist/cjs/src/reactjs/components/SignInButton.d.ts +8 -0
  111. package/dist/cjs/src/reactjs/components/SignInButton.d.ts.map +1 -0
  112. package/dist/cjs/src/reactjs/components/SignInButton.js +16 -0
  113. package/dist/cjs/src/reactjs/components/SignInButton.js.map +1 -0
  114. package/dist/cjs/src/reactjs/components/SignOutButton.d.ts +6 -0
  115. package/dist/cjs/src/reactjs/components/SignOutButton.d.ts.map +1 -0
  116. package/dist/cjs/src/reactjs/components/SignOutButton.js +16 -0
  117. package/dist/cjs/src/reactjs/components/SignOutButton.js.map +1 -0
  118. package/dist/cjs/src/reactjs/components/UserButton.d.ts +8 -0
  119. package/dist/cjs/src/reactjs/components/UserButton.d.ts.map +1 -0
  120. package/dist/cjs/src/reactjs/components/UserButton.js +84 -0
  121. package/dist/cjs/src/reactjs/components/UserButton.js.map +1 -0
  122. package/dist/cjs/src/reactjs/components/index.d.ts +6 -0
  123. package/dist/cjs/src/reactjs/components/index.d.ts.map +1 -0
  124. package/dist/cjs/src/reactjs/components/index.js +14 -0
  125. package/dist/cjs/src/reactjs/components/index.js.map +1 -0
  126. package/dist/cjs/src/reactjs/hooks/index.d.ts +9 -0
  127. package/dist/cjs/src/reactjs/hooks/index.d.ts.map +1 -0
  128. package/dist/cjs/src/reactjs/hooks/index.js +20 -0
  129. package/dist/cjs/src/reactjs/hooks/index.js.map +1 -0
  130. package/dist/cjs/src/reactjs/hooks/useAuth.d.ts +3 -0
  131. package/dist/cjs/src/reactjs/hooks/useAuth.d.ts.map +1 -0
  132. package/dist/cjs/src/reactjs/hooks/useAuth.js +15 -0
  133. package/dist/cjs/src/reactjs/hooks/useAuth.js.map +1 -0
  134. package/dist/cjs/src/reactjs/hooks/useUser.d.ts +4 -0
  135. package/dist/cjs/src/reactjs/hooks/useUser.d.ts.map +1 -0
  136. package/dist/cjs/src/reactjs/hooks/useUser.js +15 -0
  137. package/dist/cjs/src/reactjs/hooks/useUser.js.map +1 -0
  138. package/dist/cjs/src/reactjs/index.d.ts +6 -0
  139. package/dist/cjs/src/reactjs/index.d.ts.map +1 -0
  140. package/dist/cjs/src/reactjs/index.js +30 -0
  141. package/dist/cjs/src/reactjs/index.js.map +1 -0
  142. package/dist/cjs/src/reactjs/providers/index.d.ts +8 -0
  143. package/dist/cjs/src/reactjs/providers/index.d.ts.map +1 -0
  144. package/dist/cjs/src/reactjs/providers/index.js +19 -0
  145. package/dist/cjs/src/reactjs/providers/index.js.map +1 -0
  146. package/dist/cjs/src/server/ServerAuthenticationResolver.d.ts +18 -0
  147. package/dist/cjs/src/server/ServerAuthenticationResolver.d.ts.map +1 -0
  148. package/dist/cjs/src/server/ServerAuthenticationResolver.js +66 -0
  149. package/dist/cjs/src/server/ServerAuthenticationResolver.js.map +1 -0
  150. package/dist/cjs/src/server/config.d.ts +16 -0
  151. package/dist/cjs/src/server/config.d.ts.map +1 -0
  152. package/dist/cjs/src/server/config.js +3 -0
  153. package/dist/cjs/src/server/config.js.map +1 -0
  154. package/dist/cjs/src/server/index.d.ts +6 -0
  155. package/dist/cjs/src/server/index.d.ts.map +1 -0
  156. package/dist/cjs/src/server/index.js +14 -0
  157. package/dist/cjs/src/server/index.js.map +1 -0
  158. package/dist/cjs/src/server/login.d.ts +17 -0
  159. package/dist/cjs/src/server/login.d.ts.map +1 -0
  160. package/dist/cjs/src/server/login.js +42 -0
  161. package/dist/cjs/src/server/login.js.map +1 -0
  162. package/dist/cjs/src/server/refresh.d.ts +7 -0
  163. package/dist/cjs/src/server/refresh.d.ts.map +1 -0
  164. package/dist/cjs/src/server/refresh.js +16 -0
  165. package/dist/cjs/src/server/refresh.js.map +1 -0
  166. package/dist/cjs/src/services/AuthenticationService.d.ts +87 -0
  167. package/dist/cjs/src/services/AuthenticationService.d.ts.map +1 -0
  168. package/dist/cjs/src/services/AuthenticationService.js +228 -0
  169. package/dist/cjs/src/services/AuthenticationService.js.map +1 -0
  170. package/dist/cjs/src/services/PKCE.d.ts +20 -0
  171. package/dist/cjs/src/services/PKCE.d.ts.map +1 -0
  172. package/dist/cjs/src/services/PKCE.js +50 -0
  173. package/dist/cjs/src/services/PKCE.js.map +1 -0
  174. package/dist/cjs/src/services/types.d.ts +23 -0
  175. package/dist/cjs/src/services/types.d.ts.map +1 -0
  176. package/dist/cjs/src/services/types.js +11 -0
  177. package/dist/cjs/src/services/types.js.map +1 -0
  178. package/dist/cjs/src/shared/AuthContext.d.ts +10 -0
  179. package/dist/cjs/src/shared/AuthContext.d.ts.map +1 -0
  180. package/dist/cjs/src/shared/AuthContext.js +6 -0
  181. package/dist/cjs/src/shared/AuthContext.js.map +1 -0
  182. package/dist/cjs/src/shared/AuthProvider.d.ts +18 -0
  183. package/dist/cjs/src/shared/AuthProvider.d.ts.map +1 -0
  184. package/dist/cjs/src/shared/AuthProvider.js +276 -0
  185. package/dist/cjs/src/shared/AuthProvider.js.map +1 -0
  186. package/dist/cjs/src/shared/CivicAuthProvider.d.ts +7 -0
  187. package/dist/cjs/src/shared/CivicAuthProvider.d.ts.map +1 -0
  188. package/dist/cjs/src/shared/CivicAuthProvider.js +23 -0
  189. package/dist/cjs/src/shared/CivicAuthProvider.js.map +1 -0
  190. package/dist/cjs/src/shared/GenericAuthenticationRefresher.d.ts +15 -0
  191. package/dist/cjs/src/shared/GenericAuthenticationRefresher.d.ts.map +1 -0
  192. package/dist/cjs/src/shared/GenericAuthenticationRefresher.js +47 -0
  193. package/dist/cjs/src/shared/GenericAuthenticationRefresher.js.map +1 -0
  194. package/dist/cjs/src/shared/UserProvider.d.ts +18 -0
  195. package/dist/cjs/src/shared/UserProvider.d.ts.map +1 -0
  196. package/dist/cjs/src/shared/UserProvider.js +65 -0
  197. package/dist/cjs/src/shared/UserProvider.js.map +1 -0
  198. package/dist/cjs/src/shared/UserSession.d.ts +12 -0
  199. package/dist/cjs/src/shared/UserSession.d.ts.map +1 -0
  200. package/dist/cjs/src/shared/UserSession.js +24 -0
  201. package/dist/cjs/src/shared/UserSession.js.map +1 -0
  202. package/dist/cjs/src/shared/components/CivicAuthIframe.d.ts +8 -0
  203. package/dist/cjs/src/shared/components/CivicAuthIframe.d.ts.map +1 -0
  204. package/dist/cjs/src/shared/components/CivicAuthIframe.js +35 -0
  205. package/dist/cjs/src/shared/components/CivicAuthIframe.js.map +1 -0
  206. package/dist/cjs/src/shared/components/CivicAuthIframeContainer.d.ts +9 -0
  207. package/dist/cjs/src/shared/components/CivicAuthIframeContainer.d.ts.map +1 -0
  208. package/dist/cjs/src/shared/components/CivicAuthIframeContainer.js +117 -0
  209. package/dist/cjs/src/shared/components/CivicAuthIframeContainer.js.map +1 -0
  210. package/dist/cjs/src/shared/components/CloseIcon.d.ts +4 -0
  211. package/dist/cjs/src/shared/components/CloseIcon.d.ts.map +1 -0
  212. package/dist/cjs/src/shared/components/CloseIcon.js +12 -0
  213. package/dist/cjs/src/shared/components/CloseIcon.js.map +1 -0
  214. package/dist/cjs/src/shared/components/LoadingIcon.d.ts +4 -0
  215. package/dist/cjs/src/shared/components/LoadingIcon.d.ts.map +1 -0
  216. package/dist/cjs/src/shared/components/LoadingIcon.js +14 -0
  217. package/dist/cjs/src/shared/components/LoadingIcon.js.map +1 -0
  218. package/dist/cjs/src/shared/hooks/index.d.ts +5 -0
  219. package/dist/cjs/src/shared/hooks/index.d.ts.map +1 -0
  220. package/dist/cjs/src/shared/hooks/index.js +12 -0
  221. package/dist/cjs/src/shared/hooks/index.js.map +1 -0
  222. package/dist/cjs/src/shared/hooks/useAuth.d.ts +3 -0
  223. package/dist/cjs/src/shared/hooks/useAuth.d.ts.map +1 -0
  224. package/dist/cjs/src/shared/hooks/useAuth.js +15 -0
  225. package/dist/cjs/src/shared/hooks/useAuth.js.map +1 -0
  226. package/dist/cjs/src/shared/hooks/useConfig.d.ts +3 -0
  227. package/dist/cjs/src/shared/hooks/useConfig.d.ts.map +1 -0
  228. package/dist/cjs/src/shared/hooks/useConfig.js +16 -0
  229. package/dist/cjs/src/shared/hooks/useConfig.js.map +1 -0
  230. package/dist/cjs/src/shared/hooks/useIframe.d.ts +3 -0
  231. package/dist/cjs/src/shared/hooks/useIframe.d.ts.map +1 -0
  232. package/dist/cjs/src/shared/hooks/useIframe.js +16 -0
  233. package/dist/cjs/src/shared/hooks/useIframe.js.map +1 -0
  234. package/dist/cjs/src/shared/hooks/useSession.d.ts +3 -0
  235. package/dist/cjs/src/shared/hooks/useSession.d.ts.map +1 -0
  236. package/dist/cjs/src/shared/hooks/useSession.js +16 -0
  237. package/dist/cjs/src/shared/hooks/useSession.js.map +1 -0
  238. package/dist/cjs/src/shared/hooks/useToken.d.ts +3 -0
  239. package/dist/cjs/src/shared/hooks/useToken.d.ts.map +1 -0
  240. package/dist/cjs/src/shared/hooks/useToken.js +15 -0
  241. package/dist/cjs/src/shared/hooks/useToken.js.map +1 -0
  242. package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.d.ts +15 -0
  243. package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -0
  244. package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.js +47 -0
  245. package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.js.map +1 -0
  246. package/dist/cjs/src/shared/lib/UserSession.d.ts +12 -0
  247. package/dist/cjs/src/shared/lib/UserSession.d.ts.map +1 -0
  248. package/dist/cjs/src/shared/lib/UserSession.js +24 -0
  249. package/dist/cjs/src/shared/lib/UserSession.js.map +1 -0
  250. package/dist/cjs/src/shared/lib/session.d.ts +3 -0
  251. package/dist/cjs/src/shared/lib/session.d.ts.map +1 -0
  252. package/dist/cjs/src/shared/lib/session.js +13 -0
  253. package/dist/cjs/src/shared/lib/session.js.map +1 -0
  254. package/dist/cjs/src/shared/lib/storage.d.ts +25 -0
  255. package/dist/cjs/src/shared/lib/storage.d.ts.map +1 -0
  256. package/dist/cjs/src/shared/lib/storage.js +21 -0
  257. package/dist/cjs/src/shared/lib/storage.js.map +1 -0
  258. package/dist/cjs/src/shared/lib/types.d.ts +21 -0
  259. package/dist/cjs/src/shared/lib/types.d.ts.map +1 -0
  260. package/dist/cjs/src/shared/lib/types.js +18 -0
  261. package/dist/cjs/src/shared/lib/types.js.map +1 -0
  262. package/dist/cjs/src/shared/lib/util.d.ts +33 -0
  263. package/dist/cjs/src/shared/lib/util.d.ts.map +1 -0
  264. package/dist/cjs/src/shared/lib/util.js +164 -0
  265. package/dist/cjs/src/shared/lib/util.js.map +1 -0
  266. package/dist/cjs/src/shared/providers/AuthContext.d.ts +10 -0
  267. package/dist/cjs/src/shared/providers/AuthContext.d.ts.map +1 -0
  268. package/dist/cjs/src/shared/providers/AuthContext.js +6 -0
  269. package/dist/cjs/src/shared/providers/AuthContext.js.map +1 -0
  270. package/dist/cjs/src/shared/providers/AuthProvider.d.ts +18 -0
  271. package/dist/cjs/src/shared/providers/AuthProvider.d.ts.map +1 -0
  272. package/dist/cjs/src/shared/providers/AuthProvider.js +271 -0
  273. package/dist/cjs/src/shared/providers/AuthProvider.js.map +1 -0
  274. package/dist/cjs/src/shared/providers/CivicAuthProvider.d.ts +6 -0
  275. package/dist/cjs/src/shared/providers/CivicAuthProvider.d.ts.map +1 -0
  276. package/dist/cjs/src/shared/providers/CivicAuthProvider.js +23 -0
  277. package/dist/cjs/src/shared/providers/CivicAuthProvider.js.map +1 -0
  278. package/dist/cjs/src/shared/providers/ConfigProvider.d.ts +21 -0
  279. package/dist/cjs/src/shared/providers/ConfigProvider.d.ts.map +1 -0
  280. package/dist/cjs/src/shared/providers/ConfigProvider.js +46 -0
  281. package/dist/cjs/src/shared/providers/ConfigProvider.js.map +1 -0
  282. package/dist/cjs/src/shared/providers/IframeProvider.d.ts +16 -0
  283. package/dist/cjs/src/shared/providers/IframeProvider.d.ts.map +1 -0
  284. package/dist/cjs/src/shared/providers/IframeProvider.js +38 -0
  285. package/dist/cjs/src/shared/providers/IframeProvider.js.map +1 -0
  286. package/dist/cjs/src/shared/providers/SessionProvider.d.ts +13 -0
  287. package/dist/cjs/src/shared/providers/SessionProvider.d.ts.map +1 -0
  288. package/dist/cjs/src/shared/providers/SessionProvider.js +40 -0
  289. package/dist/cjs/src/shared/providers/SessionProvider.js.map +1 -0
  290. package/dist/cjs/src/shared/providers/TokenProvider.d.ts +18 -0
  291. package/dist/cjs/src/shared/providers/TokenProvider.d.ts.map +1 -0
  292. package/dist/cjs/src/shared/providers/TokenProvider.js +80 -0
  293. package/dist/cjs/src/shared/providers/TokenProvider.js.map +1 -0
  294. package/dist/cjs/src/shared/providers/UserProvider.d.ts +18 -0
  295. package/dist/cjs/src/shared/providers/UserProvider.d.ts.map +1 -0
  296. package/dist/cjs/src/shared/providers/UserProvider.js +65 -0
  297. package/dist/cjs/src/shared/providers/UserProvider.js.map +1 -0
  298. package/dist/cjs/src/shared/session.d.ts +3 -0
  299. package/dist/cjs/src/shared/session.d.ts.map +1 -0
  300. package/dist/cjs/src/shared/session.js +13 -0
  301. package/dist/cjs/src/shared/session.js.map +1 -0
  302. package/dist/cjs/src/shared/storage.d.ts +25 -0
  303. package/dist/cjs/src/shared/storage.d.ts.map +1 -0
  304. package/dist/cjs/src/shared/storage.js +21 -0
  305. package/dist/cjs/src/shared/storage.js.map +1 -0
  306. package/dist/cjs/src/shared/types.d.ts +21 -0
  307. package/dist/cjs/src/shared/types.d.ts.map +1 -0
  308. package/dist/cjs/src/shared/types.js +18 -0
  309. package/dist/cjs/src/shared/types.js.map +1 -0
  310. package/dist/cjs/src/shared/util.d.ts +33 -0
  311. package/dist/cjs/src/shared/util.d.ts.map +1 -0
  312. package/dist/cjs/src/shared/util.js +164 -0
  313. package/dist/cjs/src/shared/util.js.map +1 -0
  314. package/dist/cjs/src/types.d.ts +146 -0
  315. package/dist/cjs/src/types.d.ts.map +1 -0
  316. package/dist/cjs/src/types.js +3 -0
  317. package/dist/cjs/src/types.js.map +1 -0
  318. package/dist/cjs/src/utils.d.ts +17 -0
  319. package/dist/cjs/src/utils.d.ts.map +1 -0
  320. package/dist/cjs/src/utils.js +53 -0
  321. package/dist/cjs/src/utils.js.map +1 -0
  322. package/dist/cjs/src/worker/index.d.ts +2 -0
  323. package/dist/cjs/src/worker/index.d.ts.map +1 -0
  324. package/dist/cjs/src/worker/index.js +8 -0
  325. package/dist/cjs/src/worker/index.js.map +1 -0
  326. package/dist/cjs/tsconfig.build.tsbuildinfo +1 -0
  327. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  328. package/dist/esm/src/browser/storage.d.ts +6 -0
  329. package/dist/esm/src/browser/storage.d.ts.map +1 -0
  330. package/dist/esm/src/browser/storage.js +9 -0
  331. package/dist/esm/src/browser/storage.js.map +1 -0
  332. package/dist/esm/src/config.d.ts +3 -0
  333. package/dist/esm/src/config.d.ts.map +1 -0
  334. package/dist/esm/src/config.js +5 -0
  335. package/dist/esm/src/config.js.map +1 -0
  336. package/dist/esm/src/constants.d.ts +9 -0
  337. package/dist/esm/src/constants.d.ts.map +1 -0
  338. package/dist/esm/src/constants.js +17 -0
  339. package/dist/esm/src/constants.js.map +1 -0
  340. package/dist/esm/src/index.d.ts +5 -0
  341. package/dist/esm/src/index.d.ts.map +1 -0
  342. package/dist/esm/src/index.js +3 -0
  343. package/dist/esm/src/index.js.map +1 -0
  344. package/dist/esm/src/lib/cookies.d.ts +7 -0
  345. package/dist/esm/src/lib/cookies.d.ts.map +1 -0
  346. package/dist/esm/src/lib/cookies.js +23 -0
  347. package/dist/esm/src/lib/cookies.js.map +1 -0
  348. package/dist/esm/src/lib/jwt.d.ts +3 -0
  349. package/dist/esm/src/lib/jwt.d.ts.map +1 -0
  350. package/dist/esm/src/lib/jwt.js +9 -0
  351. package/dist/esm/src/lib/jwt.js.map +1 -0
  352. package/dist/esm/src/lib/logger.d.ts +26 -0
  353. package/dist/esm/src/lib/logger.d.ts.map +1 -0
  354. package/dist/esm/src/lib/logger.js +55 -0
  355. package/dist/esm/src/lib/logger.js.map +1 -0
  356. package/dist/esm/src/lib/oauth.d.ts +19 -0
  357. package/dist/esm/src/lib/oauth.d.ts.map +1 -0
  358. package/dist/esm/src/lib/oauth.js +60 -0
  359. package/dist/esm/src/lib/oauth.js.map +1 -0
  360. package/dist/esm/src/lib/postMessage.d.ts +4 -0
  361. package/dist/esm/src/lib/postMessage.d.ts.map +1 -0
  362. package/dist/esm/src/lib/postMessage.js +15 -0
  363. package/dist/esm/src/lib/postMessage.js.map +1 -0
  364. package/dist/esm/src/lib/windowUtil.d.ts +4 -0
  365. package/dist/esm/src/lib/windowUtil.d.ts.map +1 -0
  366. package/dist/esm/src/lib/windowUtil.js +30 -0
  367. package/dist/esm/src/lib/windowUtil.js.map +1 -0
  368. package/dist/esm/src/nextjs/GetUser.d.ts +6 -0
  369. package/dist/esm/src/nextjs/GetUser.d.ts.map +1 -0
  370. package/dist/esm/src/nextjs/GetUser.js +18 -0
  371. package/dist/esm/src/nextjs/GetUser.js.map +1 -0
  372. package/dist/esm/src/nextjs/client/index.d.ts +2 -0
  373. package/dist/esm/src/nextjs/client/index.d.ts.map +1 -0
  374. package/dist/esm/src/nextjs/client/index.js +2 -0
  375. package/dist/esm/src/nextjs/client/index.js.map +1 -0
  376. package/dist/esm/src/nextjs/config.d.ts +180 -0
  377. package/dist/esm/src/nextjs/config.d.ts.map +1 -0
  378. package/dist/esm/src/nextjs/config.js +158 -0
  379. package/dist/esm/src/nextjs/config.js.map +1 -0
  380. package/dist/esm/src/nextjs/cookies.d.ts +30 -0
  381. package/dist/esm/src/nextjs/cookies.d.ts.map +1 -0
  382. package/dist/esm/src/nextjs/cookies.js +109 -0
  383. package/dist/esm/src/nextjs/cookies.js.map +1 -0
  384. package/dist/esm/src/nextjs/hooks/index.d.ts +2 -0
  385. package/dist/esm/src/nextjs/hooks/index.d.ts.map +1 -0
  386. package/dist/esm/src/nextjs/hooks/index.js +2 -0
  387. package/dist/esm/src/nextjs/hooks/index.js.map +1 -0
  388. package/dist/esm/src/nextjs/hooks/useTokenCookie.d.ts +3 -0
  389. package/dist/esm/src/nextjs/hooks/useTokenCookie.d.ts.map +1 -0
  390. package/dist/esm/src/nextjs/hooks/useTokenCookie.js +37 -0
  391. package/dist/esm/src/nextjs/hooks/useTokenCookie.js.map +1 -0
  392. package/dist/esm/src/nextjs/hooks/useUserCookie.d.ts +3 -0
  393. package/dist/esm/src/nextjs/hooks/useUserCookie.d.ts.map +1 -0
  394. package/dist/esm/src/nextjs/hooks/useUserCookie.js +36 -0
  395. package/dist/esm/src/nextjs/hooks/useUserCookie.js.map +1 -0
  396. package/dist/esm/src/nextjs/index.d.ts +7 -0
  397. package/dist/esm/src/nextjs/index.d.ts.map +1 -0
  398. package/dist/esm/src/nextjs/index.js +6 -0
  399. package/dist/esm/src/nextjs/index.js.map +1 -0
  400. package/dist/esm/src/nextjs/middleware/index.d.ts +2 -0
  401. package/dist/esm/src/nextjs/middleware/index.d.ts.map +1 -0
  402. package/dist/esm/src/nextjs/middleware/index.js +2 -0
  403. package/dist/esm/src/nextjs/middleware/index.js.map +1 -0
  404. package/dist/esm/src/nextjs/middleware.d.ts +59 -0
  405. package/dist/esm/src/nextjs/middleware.d.ts.map +1 -0
  406. package/dist/esm/src/nextjs/middleware.js +107 -0
  407. package/dist/esm/src/nextjs/middleware.js.map +1 -0
  408. package/dist/esm/src/nextjs/providers/NextAuthProvider.d.ts +9 -0
  409. package/dist/esm/src/nextjs/providers/NextAuthProvider.d.ts.map +1 -0
  410. package/dist/esm/src/nextjs/providers/NextAuthProvider.js +51 -0
  411. package/dist/esm/src/nextjs/providers/NextAuthProvider.js.map +1 -0
  412. package/dist/esm/src/nextjs/routeHandler.d.ts +18 -0
  413. package/dist/esm/src/nextjs/routeHandler.d.ts.map +1 -0
  414. package/dist/esm/src/nextjs/routeHandler.js +203 -0
  415. package/dist/esm/src/nextjs/routeHandler.js.map +1 -0
  416. package/dist/esm/src/nextjs/utils.d.ts +3 -0
  417. package/dist/esm/src/nextjs/utils.d.ts.map +1 -0
  418. package/dist/esm/src/nextjs/utils.js +6 -0
  419. package/dist/esm/src/nextjs/utils.js.map +1 -0
  420. package/dist/esm/src/nextjs/worker/index.d.ts +2 -0
  421. package/dist/esm/src/nextjs/worker/index.d.ts.map +1 -0
  422. package/dist/esm/src/nextjs/worker/index.js +2 -0
  423. package/dist/esm/src/nextjs/worker/index.js.map +1 -0
  424. package/dist/esm/src/reactjs/components/NextLogOut.d.ts +7 -0
  425. package/dist/esm/src/reactjs/components/NextLogOut.d.ts.map +1 -0
  426. package/dist/esm/src/reactjs/components/NextLogOut.js +12 -0
  427. package/dist/esm/src/reactjs/components/NextLogOut.js.map +1 -0
  428. package/dist/esm/src/reactjs/components/SignInButton.d.ts +8 -0
  429. package/dist/esm/src/reactjs/components/SignInButton.d.ts.map +1 -0
  430. package/dist/esm/src/reactjs/components/SignInButton.js +10 -0
  431. package/dist/esm/src/reactjs/components/SignInButton.js.map +1 -0
  432. package/dist/esm/src/reactjs/components/SignOutButton.d.ts +6 -0
  433. package/dist/esm/src/reactjs/components/SignOutButton.d.ts.map +1 -0
  434. package/dist/esm/src/reactjs/components/SignOutButton.js +10 -0
  435. package/dist/esm/src/reactjs/components/SignOutButton.js.map +1 -0
  436. package/dist/esm/src/reactjs/components/UserButton.d.ts +8 -0
  437. package/dist/esm/src/reactjs/components/UserButton.d.ts.map +1 -0
  438. package/dist/esm/src/reactjs/components/UserButton.js +58 -0
  439. package/dist/esm/src/reactjs/components/UserButton.js.map +1 -0
  440. package/dist/esm/src/reactjs/components/index.d.ts +6 -0
  441. package/dist/esm/src/reactjs/components/index.d.ts.map +1 -0
  442. package/dist/esm/src/reactjs/components/index.js +6 -0
  443. package/dist/esm/src/reactjs/components/index.js.map +1 -0
  444. package/dist/esm/src/reactjs/hooks/index.d.ts +9 -0
  445. package/dist/esm/src/reactjs/hooks/index.d.ts.map +1 -0
  446. package/dist/esm/src/reactjs/hooks/index.js +9 -0
  447. package/dist/esm/src/reactjs/hooks/index.js.map +1 -0
  448. package/dist/esm/src/reactjs/hooks/useAuth.d.ts +3 -0
  449. package/dist/esm/src/reactjs/hooks/useAuth.d.ts.map +1 -0
  450. package/dist/esm/src/reactjs/hooks/useAuth.js +12 -0
  451. package/dist/esm/src/reactjs/hooks/useAuth.js.map +1 -0
  452. package/dist/esm/src/reactjs/hooks/useUser.d.ts +4 -0
  453. package/dist/esm/src/reactjs/hooks/useUser.d.ts.map +1 -0
  454. package/dist/esm/src/reactjs/hooks/useUser.js +12 -0
  455. package/dist/esm/src/reactjs/hooks/useUser.js.map +1 -0
  456. package/dist/esm/src/reactjs/index.d.ts +6 -0
  457. package/dist/esm/src/reactjs/index.d.ts.map +1 -0
  458. package/dist/esm/src/reactjs/index.js +8 -0
  459. package/dist/esm/src/reactjs/index.js.map +1 -0
  460. package/dist/esm/src/reactjs/providers/index.d.ts +8 -0
  461. package/dist/esm/src/reactjs/providers/index.d.ts.map +1 -0
  462. package/dist/esm/src/reactjs/providers/index.js +7 -0
  463. package/dist/esm/src/reactjs/providers/index.js.map +1 -0
  464. package/dist/esm/src/server/ServerAuthenticationResolver.d.ts +18 -0
  465. package/dist/esm/src/server/ServerAuthenticationResolver.d.ts.map +1 -0
  466. package/dist/esm/src/server/ServerAuthenticationResolver.js +62 -0
  467. package/dist/esm/src/server/ServerAuthenticationResolver.js.map +1 -0
  468. package/dist/esm/src/server/config.d.ts +16 -0
  469. package/dist/esm/src/server/config.d.ts.map +1 -0
  470. package/dist/esm/src/server/config.js +2 -0
  471. package/dist/esm/src/server/config.js.map +1 -0
  472. package/dist/esm/src/server/index.d.ts +6 -0
  473. package/dist/esm/src/server/index.d.ts.map +1 -0
  474. package/dist/esm/src/server/index.js +5 -0
  475. package/dist/esm/src/server/index.js.map +1 -0
  476. package/dist/esm/src/server/login.d.ts +17 -0
  477. package/dist/esm/src/server/login.d.ts.map +1 -0
  478. package/dist/esm/src/server/login.js +37 -0
  479. package/dist/esm/src/server/login.js.map +1 -0
  480. package/dist/esm/src/server/refresh.d.ts +7 -0
  481. package/dist/esm/src/server/refresh.d.ts.map +1 -0
  482. package/dist/esm/src/server/refresh.js +13 -0
  483. package/dist/esm/src/server/refresh.js.map +1 -0
  484. package/dist/esm/src/services/AuthenticationService.d.ts +87 -0
  485. package/dist/esm/src/services/AuthenticationService.d.ts.map +1 -0
  486. package/dist/esm/src/services/AuthenticationService.js +222 -0
  487. package/dist/esm/src/services/AuthenticationService.js.map +1 -0
  488. package/dist/esm/src/services/PKCE.d.ts +20 -0
  489. package/dist/esm/src/services/PKCE.d.ts.map +1 -0
  490. package/dist/esm/src/services/PKCE.js +44 -0
  491. package/dist/esm/src/services/PKCE.js.map +1 -0
  492. package/dist/esm/src/services/types.d.ts +23 -0
  493. package/dist/esm/src/services/types.d.ts.map +1 -0
  494. package/dist/esm/src/services/types.js +7 -0
  495. package/dist/esm/src/services/types.js.map +1 -0
  496. package/dist/esm/src/shared/AuthContext.d.ts +10 -0
  497. package/dist/esm/src/shared/AuthContext.d.ts.map +1 -0
  498. package/dist/esm/src/shared/AuthContext.js +3 -0
  499. package/dist/esm/src/shared/AuthContext.js.map +1 -0
  500. package/dist/esm/src/shared/AuthProvider.d.ts +18 -0
  501. package/dist/esm/src/shared/AuthProvider.d.ts.map +1 -0
  502. package/dist/esm/src/shared/AuthProvider.js +250 -0
  503. package/dist/esm/src/shared/AuthProvider.js.map +1 -0
  504. package/dist/esm/src/shared/CivicAuthProvider.d.ts +7 -0
  505. package/dist/esm/src/shared/CivicAuthProvider.d.ts.map +1 -0
  506. package/dist/esm/src/shared/CivicAuthProvider.js +17 -0
  507. package/dist/esm/src/shared/CivicAuthProvider.js.map +1 -0
  508. package/dist/esm/src/shared/GenericAuthenticationRefresher.d.ts +15 -0
  509. package/dist/esm/src/shared/GenericAuthenticationRefresher.d.ts.map +1 -0
  510. package/dist/esm/src/shared/GenericAuthenticationRefresher.js +43 -0
  511. package/dist/esm/src/shared/GenericAuthenticationRefresher.js.map +1 -0
  512. package/dist/esm/src/shared/UserProvider.d.ts +18 -0
  513. package/dist/esm/src/shared/UserProvider.d.ts.map +1 -0
  514. package/dist/esm/src/shared/UserProvider.js +38 -0
  515. package/dist/esm/src/shared/UserProvider.js.map +1 -0
  516. package/dist/esm/src/shared/UserSession.d.ts +12 -0
  517. package/dist/esm/src/shared/UserSession.d.ts.map +1 -0
  518. package/dist/esm/src/shared/UserSession.js +20 -0
  519. package/dist/esm/src/shared/UserSession.js.map +1 -0
  520. package/dist/esm/src/shared/components/CivicAuthIframe.d.ts +8 -0
  521. package/dist/esm/src/shared/components/CivicAuthIframe.d.ts.map +1 -0
  522. package/dist/esm/src/shared/components/CivicAuthIframe.js +9 -0
  523. package/dist/esm/src/shared/components/CivicAuthIframe.js.map +1 -0
  524. package/dist/esm/src/shared/components/CivicAuthIframeContainer.d.ts +9 -0
  525. package/dist/esm/src/shared/components/CivicAuthIframeContainer.d.ts.map +1 -0
  526. package/dist/esm/src/shared/components/CivicAuthIframeContainer.js +91 -0
  527. package/dist/esm/src/shared/components/CivicAuthIframeContainer.js.map +1 -0
  528. package/dist/esm/src/shared/components/CloseIcon.d.ts +4 -0
  529. package/dist/esm/src/shared/components/CloseIcon.d.ts.map +1 -0
  530. package/dist/esm/src/shared/components/CloseIcon.js +6 -0
  531. package/dist/esm/src/shared/components/CloseIcon.js.map +1 -0
  532. package/dist/esm/src/shared/components/LoadingIcon.d.ts +4 -0
  533. package/dist/esm/src/shared/components/LoadingIcon.d.ts.map +1 -0
  534. package/dist/esm/src/shared/components/LoadingIcon.js +8 -0
  535. package/dist/esm/src/shared/components/LoadingIcon.js.map +1 -0
  536. package/dist/esm/src/shared/hooks/index.d.ts +5 -0
  537. package/dist/esm/src/shared/hooks/index.d.ts.map +1 -0
  538. package/dist/esm/src/shared/hooks/index.js +5 -0
  539. package/dist/esm/src/shared/hooks/index.js.map +1 -0
  540. package/dist/esm/src/shared/hooks/useAuth.d.ts +3 -0
  541. package/dist/esm/src/shared/hooks/useAuth.d.ts.map +1 -0
  542. package/dist/esm/src/shared/hooks/useAuth.js +12 -0
  543. package/dist/esm/src/shared/hooks/useAuth.js.map +1 -0
  544. package/dist/esm/src/shared/hooks/useConfig.d.ts +3 -0
  545. package/dist/esm/src/shared/hooks/useConfig.d.ts.map +1 -0
  546. package/dist/esm/src/shared/hooks/useConfig.js +13 -0
  547. package/dist/esm/src/shared/hooks/useConfig.js.map +1 -0
  548. package/dist/esm/src/shared/hooks/useIframe.d.ts +3 -0
  549. package/dist/esm/src/shared/hooks/useIframe.d.ts.map +1 -0
  550. package/dist/esm/src/shared/hooks/useIframe.js +13 -0
  551. package/dist/esm/src/shared/hooks/useIframe.js.map +1 -0
  552. package/dist/esm/src/shared/hooks/useSession.d.ts +3 -0
  553. package/dist/esm/src/shared/hooks/useSession.d.ts.map +1 -0
  554. package/dist/esm/src/shared/hooks/useSession.js +13 -0
  555. package/dist/esm/src/shared/hooks/useSession.js.map +1 -0
  556. package/dist/esm/src/shared/hooks/useToken.d.ts +3 -0
  557. package/dist/esm/src/shared/hooks/useToken.d.ts.map +1 -0
  558. package/dist/esm/src/shared/hooks/useToken.js +12 -0
  559. package/dist/esm/src/shared/hooks/useToken.js.map +1 -0
  560. package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.d.ts +15 -0
  561. package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -0
  562. package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.js +43 -0
  563. package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.js.map +1 -0
  564. package/dist/esm/src/shared/lib/UserSession.d.ts +12 -0
  565. package/dist/esm/src/shared/lib/UserSession.d.ts.map +1 -0
  566. package/dist/esm/src/shared/lib/UserSession.js +20 -0
  567. package/dist/esm/src/shared/lib/UserSession.js.map +1 -0
  568. package/dist/esm/src/shared/lib/session.d.ts +3 -0
  569. package/dist/esm/src/shared/lib/session.d.ts.map +1 -0
  570. package/dist/esm/src/shared/lib/session.js +10 -0
  571. package/dist/esm/src/shared/lib/session.js.map +1 -0
  572. package/dist/esm/src/shared/lib/storage.d.ts +25 -0
  573. package/dist/esm/src/shared/lib/storage.d.ts.map +1 -0
  574. package/dist/esm/src/shared/lib/storage.js +17 -0
  575. package/dist/esm/src/shared/lib/storage.js.map +1 -0
  576. package/dist/esm/src/shared/lib/types.d.ts +21 -0
  577. package/dist/esm/src/shared/lib/types.d.ts.map +1 -0
  578. package/dist/esm/src/shared/lib/types.js +15 -0
  579. package/dist/esm/src/shared/lib/types.js.map +1 -0
  580. package/dist/esm/src/shared/lib/util.d.ts +33 -0
  581. package/dist/esm/src/shared/lib/util.d.ts.map +1 -0
  582. package/dist/esm/src/shared/lib/util.js +128 -0
  583. package/dist/esm/src/shared/lib/util.js.map +1 -0
  584. package/dist/esm/src/shared/providers/AuthContext.d.ts +10 -0
  585. package/dist/esm/src/shared/providers/AuthContext.d.ts.map +1 -0
  586. package/dist/esm/src/shared/providers/AuthContext.js +3 -0
  587. package/dist/esm/src/shared/providers/AuthContext.js.map +1 -0
  588. package/dist/esm/src/shared/providers/AuthProvider.d.ts +18 -0
  589. package/dist/esm/src/shared/providers/AuthProvider.d.ts.map +1 -0
  590. package/dist/esm/src/shared/providers/AuthProvider.js +245 -0
  591. package/dist/esm/src/shared/providers/AuthProvider.js.map +1 -0
  592. package/dist/esm/src/shared/providers/CivicAuthProvider.d.ts +6 -0
  593. package/dist/esm/src/shared/providers/CivicAuthProvider.d.ts.map +1 -0
  594. package/dist/esm/src/shared/providers/CivicAuthProvider.js +17 -0
  595. package/dist/esm/src/shared/providers/CivicAuthProvider.js.map +1 -0
  596. package/dist/esm/src/shared/providers/ConfigProvider.d.ts +21 -0
  597. package/dist/esm/src/shared/providers/ConfigProvider.d.ts.map +1 -0
  598. package/dist/esm/src/shared/providers/ConfigProvider.js +19 -0
  599. package/dist/esm/src/shared/providers/ConfigProvider.js.map +1 -0
  600. package/dist/esm/src/shared/providers/IframeProvider.d.ts +16 -0
  601. package/dist/esm/src/shared/providers/IframeProvider.d.ts.map +1 -0
  602. package/dist/esm/src/shared/providers/IframeProvider.js +11 -0
  603. package/dist/esm/src/shared/providers/IframeProvider.js.map +1 -0
  604. package/dist/esm/src/shared/providers/SessionProvider.d.ts +13 -0
  605. package/dist/esm/src/shared/providers/SessionProvider.d.ts.map +1 -0
  606. package/dist/esm/src/shared/providers/SessionProvider.js +13 -0
  607. package/dist/esm/src/shared/providers/SessionProvider.js.map +1 -0
  608. package/dist/esm/src/shared/providers/TokenProvider.d.ts +18 -0
  609. package/dist/esm/src/shared/providers/TokenProvider.d.ts.map +1 -0
  610. package/dist/esm/src/shared/providers/TokenProvider.js +53 -0
  611. package/dist/esm/src/shared/providers/TokenProvider.js.map +1 -0
  612. package/dist/esm/src/shared/providers/UserProvider.d.ts +18 -0
  613. package/dist/esm/src/shared/providers/UserProvider.d.ts.map +1 -0
  614. package/dist/esm/src/shared/providers/UserProvider.js +38 -0
  615. package/dist/esm/src/shared/providers/UserProvider.js.map +1 -0
  616. package/dist/esm/src/shared/session.d.ts +3 -0
  617. package/dist/esm/src/shared/session.d.ts.map +1 -0
  618. package/dist/esm/src/shared/session.js +10 -0
  619. package/dist/esm/src/shared/session.js.map +1 -0
  620. package/dist/esm/src/shared/storage.d.ts +25 -0
  621. package/dist/esm/src/shared/storage.d.ts.map +1 -0
  622. package/dist/esm/src/shared/storage.js +17 -0
  623. package/dist/esm/src/shared/storage.js.map +1 -0
  624. package/dist/esm/src/shared/types.d.ts +21 -0
  625. package/dist/esm/src/shared/types.d.ts.map +1 -0
  626. package/dist/esm/src/shared/types.js +15 -0
  627. package/dist/esm/src/shared/types.js.map +1 -0
  628. package/dist/esm/src/shared/util.d.ts +33 -0
  629. package/dist/esm/src/shared/util.d.ts.map +1 -0
  630. package/dist/esm/src/shared/util.js +128 -0
  631. package/dist/esm/src/shared/util.js.map +1 -0
  632. package/dist/esm/src/types.d.ts +146 -0
  633. package/dist/esm/src/types.d.ts.map +1 -0
  634. package/dist/esm/src/types.js +2 -0
  635. package/dist/esm/src/types.js.map +1 -0
  636. package/dist/esm/src/utils.d.ts +17 -0
  637. package/dist/esm/src/utils.d.ts.map +1 -0
  638. package/dist/esm/src/utils.js +48 -0
  639. package/dist/esm/src/utils.js.map +1 -0
  640. package/dist/esm/src/worker/index.d.ts +2 -0
  641. package/dist/esm/src/worker/index.d.ts.map +1 -0
  642. package/dist/esm/src/worker/index.js +2 -0
  643. package/dist/esm/src/worker/index.js.map +1 -0
  644. package/dist/esm/tsconfig.build.tsbuildinfo +1 -0
  645. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  646. package/package.json +115 -0
  647. package/postcss.config.cjs +6 -0
  648. package/src/browser/storage.ts +11 -0
  649. package/src/config.ts +6 -0
  650. package/src/constants.ts +29 -0
  651. package/src/index.ts +18 -0
  652. package/src/lib/cookies.ts +28 -0
  653. package/src/lib/jwt.ts +15 -0
  654. package/src/lib/logger.ts +72 -0
  655. package/src/lib/oauth.ts +83 -0
  656. package/src/lib/postMessage.ts +22 -0
  657. package/src/lib/windowUtil.ts +29 -0
  658. package/src/nextjs/GetUser.ts +22 -0
  659. package/src/nextjs/client/index.ts +4 -0
  660. package/src/nextjs/config.ts +203 -0
  661. package/src/nextjs/cookies.ts +166 -0
  662. package/src/nextjs/hooks/index.ts +1 -0
  663. package/src/nextjs/hooks/useTokenCookie.ts +41 -0
  664. package/src/nextjs/hooks/useUserCookie.ts +41 -0
  665. package/src/nextjs/index.ts +24 -0
  666. package/src/nextjs/middleware/index.ts +1 -0
  667. package/src/nextjs/middleware.ts +155 -0
  668. package/src/nextjs/providers/NextAuthProvider.tsx +89 -0
  669. package/src/nextjs/routeHandler.ts +276 -0
  670. package/src/nextjs/utils.ts +10 -0
  671. package/src/reactjs/components/SignInButton.tsx +30 -0
  672. package/src/reactjs/components/SignOutButton.tsx +22 -0
  673. package/src/reactjs/components/UserButton.tsx +153 -0
  674. package/src/reactjs/components/index.ts +5 -0
  675. package/src/reactjs/hooks/index.ts +8 -0
  676. package/src/reactjs/hooks/useAuth.ts +15 -0
  677. package/src/reactjs/hooks/useUser.ts +20 -0
  678. package/src/reactjs/index.ts +19 -0
  679. package/src/reactjs/providers/index.ts +27 -0
  680. package/src/server/ServerAuthenticationResolver.ts +107 -0
  681. package/src/server/config.ts +17 -0
  682. package/src/server/index.ts +12 -0
  683. package/src/server/login.ts +58 -0
  684. package/src/server/refresh.ts +23 -0
  685. package/src/services/AuthenticationService.ts +334 -0
  686. package/src/services/PKCE.ts +43 -0
  687. package/src/services/types.ts +54 -0
  688. package/src/shared/components/CivicAuthIframe.tsx +26 -0
  689. package/src/shared/components/CivicAuthIframeContainer.tsx +150 -0
  690. package/src/shared/components/CloseIcon.tsx +21 -0
  691. package/src/shared/components/LoadingIcon.tsx +25 -0
  692. package/src/shared/hooks/index.ts +4 -0
  693. package/src/shared/hooks/useAuth.ts +15 -0
  694. package/src/shared/hooks/useConfig.ts +14 -0
  695. package/src/shared/hooks/useIframe.ts +14 -0
  696. package/src/shared/hooks/useSession.ts +14 -0
  697. package/src/shared/hooks/useToken.ts +15 -0
  698. package/src/shared/lib/GenericAuthenticationRefresher.ts +75 -0
  699. package/src/shared/lib/UserSession.ts +25 -0
  700. package/src/shared/lib/session.ts +11 -0
  701. package/src/shared/lib/storage.ts +40 -0
  702. package/src/shared/lib/types.ts +25 -0
  703. package/src/shared/lib/util.ts +217 -0
  704. package/src/shared/providers/AuthContext.tsx +11 -0
  705. package/src/shared/providers/AuthProvider.tsx +364 -0
  706. package/src/shared/providers/CivicAuthProvider.tsx +34 -0
  707. package/src/shared/providers/ConfigProvider.tsx +50 -0
  708. package/src/shared/providers/IframeProvider.tsx +34 -0
  709. package/src/shared/providers/SessionProvider.tsx +29 -0
  710. package/src/shared/providers/TokenProvider.tsx +78 -0
  711. package/src/shared/providers/UserProvider.tsx +80 -0
  712. package/src/styles.css +3 -0
  713. package/src/types.ts +227 -0
  714. package/src/utils.ts +65 -0
  715. package/tailwind.config.js +8 -0
  716. package/test/integration/sdk.test.tsx +266 -0
  717. package/test/support/fixtures.ts +56 -0
  718. package/test/support/tokens.json +26 -0
  719. package/test/unit/lib/oauth.test.ts +72 -0
  720. package/test/unit/logger.test.ts +175 -0
  721. package/test/unit/nextjs/NextAuthProvider.test.tsx +38 -0
  722. package/test/unit/nextjs/config.test.ts +201 -0
  723. package/test/unit/nextjs/getUser.test.ts +41 -0
  724. package/test/unit/nextjs/middleware.test.ts +138 -0
  725. package/test/unit/nextjs/routeHandler.test.ts +369 -0
  726. package/test/unit/nextjs/utils.test.ts +26 -0
  727. package/test/unit/publicApi/__snapshots__/apiSnapshot.test.ts.snap +19 -0
  728. package/test/unit/publicApi/apiSnapshot.test.ts +11 -0
  729. package/test/unit/react/components/SignInButton.test.tsx +50 -0
  730. package/test/unit/react/components/SignOutButton.test.tsx +49 -0
  731. package/test/unit/server/login.test.ts +179 -0
  732. package/test/unit/server/session.test.ts +51 -0
  733. package/test/unit/services/AuthenticationService.test.ts +152 -0
  734. package/test/unit/services/ServerAuthenticationResolver.test.ts +110 -0
  735. package/test/unit/shared/GenericAuthenticationRefresher.test.ts +89 -0
  736. package/test/unit/shared/UserSession.test.ts +42 -0
  737. package/test/unit/shared/components/CivicAuthIframeContainer.test.tsx +154 -0
  738. package/test/unit/shared/storage.test.ts +67 -0
  739. package/test/unit/utils.test.ts +48 -0
  740. package/tsconfig.build.json +5 -0
  741. package/tsconfig.cjs.json +8 -0
  742. package/tsconfig.esm.json +7 -0
  743. package/tsconfig.json +42 -0
  744. package/vitest.config.ts +41 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthenticationService.js","sourceRoot":"","sources":["../../../../src/services/AuthenticationService.ts"],"names":[],"mappings":"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","sourcesContent":["// Proposals for revised versions of the SessionService AKA AuthSessionService\n\nimport type {\n DisplayMode,\n Endpoints,\n LoginPostMessage,\n OIDCTokenResponseBody,\n SessionData,\n} from \"@/types.js\";\nimport { BrowserPublicClientPKCEProducer } from \"@/services/PKCE.js\";\nimport {\n clearTokens,\n clearUser,\n exchangeTokens,\n generateOauthLoginUrl,\n generateOauthLogoutUrl,\n getEndpointsWithOverrides,\n retrieveTokens,\n storeTokens,\n validateOauth2Tokens,\n} from \"@/shared/lib/util.js\";\nimport { displayModeFromState, generateState } from \"@/lib/oauth.js\";\nimport { OAuth2Client } from \"oslo/oauth2\";\nimport { LocalStorageAdapter } from \"@/browser/storage.js\";\nimport type {\n AuthenticationInitiator,\n AuthenticationResolver,\n PKCEConsumer,\n} from \"@/services/types.js\";\nimport { PopupError } from \"@/services/types.js\";\nimport { removeParamsWithoutReload } from \"@/lib/windowUtil.js\";\nimport { DEFAULT_OAUTH_GET_PARAMS } from \"@/constants.js\";\nimport { validateLoginAppPostMessage } from \"@/lib/postMessage.js\";\n\n/**\n * An authentication initiator that works on a browser. Since this is just triggering\n * login and logout, session data is not stored here.\n * An associated AuthenticationResolver would be needed to get the session data.\n * Storage is needed for the code verifier, this is the domain of the PKCEConsumer\n * The storage used by the PKCEConsumer should be available to the AuthenticationResolver.\n *\n * Example usage:\n *\n * 1) Client-only SPA -eg a react app with no server:\n * new BrowserAuthenticationInitiator({\n * pkceConsumer: new BrowserPublicClientPKCEProducer(), // generate and retrieve the challenge client-side\n * ... other config\n * })\n *\n * 2) Client-side of a client/server app - eg a react app with a backend:\n * new BrowserAuthenticationInitiator({\n * pkceConsumer: new ConfidentialClientPKCEConsumer(\"https://myserver.com/pkce\"), // get the challenge from the server\n * ... other config\n * })\n */\nexport class BrowserAuthenticationInitiator implements AuthenticationInitiator {\n private postMessageHandler: null | ((event: MessageEvent) => void) = null;\n\n protected config: {\n clientId: string;\n redirectUrl: string;\n state: string;\n scopes: string[];\n // determines whether to trigger the login/logout in an iframe, a new browser window, or redirect the current one.\n displayMode: DisplayMode;\n oauthServer: string;\n // the endpoints to use for the login (if not obtained from the auth server\n endpointOverrides?: Partial<Endpoints>;\n // used to get the PKCE challenge\n pkceConsumer: PKCEConsumer;\n // the nonce to use for the login\n nonce?: string;\n };\n\n constructor(config: typeof this.config) {\n this.config = config;\n console.log(\"BrowserAuthenticationInitiator constructor\", this.config);\n }\n\n async handleLoginAppPopupFailed(redirectUrl: string) {\n console.warn(\n \"Login app popup failed open a popup, using redirect mode instead...\",\n redirectUrl,\n );\n window.location.href = redirectUrl;\n }\n\n // Use the config (Client ID, scopes OAuth Server, Endpoints, PKCEConsumer) to generate a new login url\n // and then use the display mode to decide how to send the user there\n async signIn(iframeRef: HTMLIFrameElement | null): Promise<URL> {\n const url = await generateOauthLoginUrl(this.config);\n\n this.postMessageHandler = (event: MessageEvent) => {\n const thisURL = new URL(window.location.href);\n if (\n event.origin.endsWith(\"civic.com\") ||\n thisURL.hostname === \"localhost\"\n ) {\n if (!validateLoginAppPostMessage(event.data, this.config.clientId)) {\n console.log(\"Received invalid message from login app\", event.data);\n return;\n }\n const loginMessage = event.data as LoginPostMessage;\n console.log(\"Received message from login app\", event.data);\n this.handleLoginAppPopupFailed(loginMessage.data.url);\n }\n };\n window.addEventListener(\"message\", this.postMessageHandler);\n if (this.config.displayMode === \"iframe\") {\n if (!iframeRef)\n throw new Error(\"iframeRef is required for displayMode 'iframe'\");\n iframeRef.setAttribute(\"src\", url.toString());\n }\n if (this.config.displayMode === \"redirect\") {\n window.location.href = url.toString();\n }\n if (this.config.displayMode === \"new_tab\") {\n try {\n const popupWindow = window.open(url.toString(), \"_blank\");\n console.log(\"signIn\", popupWindow);\n if (!popupWindow) {\n throw new PopupError(\"Failed to open popup window\");\n }\n } catch (error) {\n console.error(\"popupWindow\", error);\n throw new PopupError(\n \"window.open has thrown: Failed to open popup window\",\n );\n }\n }\n return url;\n }\n\n async signOut(): Promise<URL> {\n const localStorage = new LocalStorageAdapter();\n clearTokens(localStorage);\n clearUser(localStorage);\n // TODO open the iframe or new tab etc: the logout URL is not currently\n // supported by on the oauth, so just clear state until then\n const url = await generateOauthLogoutUrl(this.config);\n return url;\n }\n\n cleanup() {\n if (this.postMessageHandler) {\n window.removeEventListener(\"message\", this.postMessageHandler);\n }\n }\n}\n\n/** A general-purpose authentication initiator, that just generates urls, but lets\n * the caller decide how to use them. This is useful for server-side applications\n * that may serve this URL to their front-ends or just call them directly\n */\nexport class GenericAuthenticationInitiator implements AuthenticationInitiator {\n protected config: {\n clientId: string;\n redirectUrl: string;\n state: string;\n scopes: string[];\n oauthServer: string;\n nonce?: string;\n // the endpoints to use for the login (if not obtained from the auth server)\n endpointOverrides?: Partial<Endpoints>;\n // used to get the PKCE challenge\n pkceConsumer: PKCEConsumer;\n };\n\n constructor(config: typeof this.config) {\n this.config = config;\n console.log(\"GenericAuthenticationInitiator constructor\", {\n config,\n });\n }\n\n // Use the config (Client ID, scopes OAuth Server, Endpoints, PKCEConsumer) to generate a new login url\n // and simply return the url\n async signIn(): Promise<URL> {\n return generateOauthLoginUrl(this.config);\n }\n\n async signOut(): Promise<URL> {\n return generateOauthLogoutUrl(this.config);\n }\n}\n\ntype BrowserAuthenticationConfig = {\n clientId: string;\n redirectUrl: string;\n scopes: string[];\n oauthServer: string;\n endpointOverrides?: Partial<Endpoints>;\n displayMode: DisplayMode;\n};\n\n/**\n * An authentication resolver that can run on the browser (i.e. a public client)\n * It uses PKCE for security. PKCE and Session data are stored in local storage\n */\nexport class BrowserAuthenticationService extends BrowserAuthenticationInitiator {\n private oauth2client: OAuth2Client | undefined;\n private endpoints: Endpoints | undefined;\n\n // TODO WIP - perhaps we want to keep resolver and initiator separate here\n constructor(\n config: BrowserAuthenticationConfig,\n // Since we are running fully on the client, we produce as well as consume the PKCE challenge\n protected pkceProducer = new BrowserPublicClientPKCEProducer(),\n ) {\n console.log(\"BrowserAuthenticationService constructor\", {\n config,\n });\n super({\n ...config,\n state: generateState(config.displayMode),\n // Store and retrieve the PKCE challenge in local storage\n pkceConsumer: pkceProducer,\n });\n }\n\n // TODO too much code duplication here between the browser and the server variant.\n // Suggestion for refactor: Standardise the config for AuthenticationResolvers and create a one-shot\n // function for generating an oauth2client from it\n async init(): Promise<this> {\n // resolve oauth config\n this.endpoints = await getEndpointsWithOverrides(\n this.config.oauthServer,\n this.config.endpointOverrides,\n );\n this.oauth2client = new OAuth2Client(\n this.config.clientId,\n this.endpoints.auth,\n this.endpoints.token,\n {\n redirectURI: this.config.redirectUrl,\n },\n );\n\n return this;\n }\n\n // Two responsibilities:\n // 1. resolve the auth code to get the tokens (should use library code)\n // 2. store the tokens in local storage\n async tokenExchange(\n code: string,\n state: string,\n ): Promise<OIDCTokenResponseBody> {\n if (!this.oauth2client) await this.init();\n const codeVerifier = await this.pkceProducer.getCodeVerifier();\n if (!codeVerifier) throw new Error(\"Code verifier not found in storage\");\n\n // exchange auth code for tokens\n const tokens = await exchangeTokens(\n code,\n state,\n this.pkceProducer,\n this.oauth2client!, // clean up types here to avoid the ! operator\n this.config.oauthServer,\n this.endpoints!, // clean up types here to avoid the ! operator\n );\n\n storeTokens(new LocalStorageAdapter(), tokens);\n\n // cleanup the browser window if needed\n const parsedDisplayMode = displayModeFromState(\n state,\n this.config.displayMode,\n );\n\n if (parsedDisplayMode === \"new_tab\") {\n // Close the popup window\n window.close();\n }\n // these are the default oAuth params that get added to the URL in redirect which we want to remove if present\n removeParamsWithoutReload(DEFAULT_OAUTH_GET_PARAMS);\n return tokens;\n }\n\n // Get the session data from local storage\n async getSessionData(): Promise<SessionData | null> {\n const storageData = retrieveTokens(new LocalStorageAdapter());\n\n if (!storageData) return null;\n\n return {\n authenticated: !!storageData.id_token,\n idToken: storageData.id_token,\n accessToken: storageData.access_token,\n refreshToken: storageData.refresh_token,\n };\n }\n\n async validateExistingSession(): Promise<SessionData> {\n try {\n const sessionData = await this.getSessionData();\n if (!sessionData?.idToken || !sessionData.accessToken) {\n const unAuthenticatedSession = { ...sessionData, authenticated: false };\n clearTokens(new LocalStorageAdapter());\n return unAuthenticatedSession;\n }\n if (!this.endpoints || !this.oauth2client) await this.init();\n\n // this function will throw if any of the tokens are invalid\n await validateOauth2Tokens(\n {\n access_token: sessionData.accessToken,\n id_token: sessionData.idToken,\n refresh_token: sessionData.refreshToken,\n },\n this.endpoints!,\n this.oauth2client!,\n this.config.oauthServer,\n );\n return sessionData;\n } catch (error) {\n console.warn(\"Failed to validate existing tokens\", error);\n const unAuthenticatedSession = {\n authenticated: false,\n };\n clearTokens(new LocalStorageAdapter());\n return unAuthenticatedSession;\n }\n }\n\n static async build(\n config: BrowserAuthenticationConfig,\n ): Promise<AuthenticationResolver> {\n const resolver = new BrowserAuthenticationService(config);\n await resolver.init();\n\n return resolver;\n }\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import type { PKCEConsumer, PKCEProducer } from "../services/types.js";
2
+ import type { AuthStorage } from "../types.js";
3
+ /** A PKCE consumer that retrieves the challenge from a server endpoint */
4
+ export declare class ConfidentialClientPKCEConsumer implements PKCEConsumer {
5
+ private pkceChallengeEndpoint;
6
+ constructor(pkceChallengeEndpoint: string);
7
+ getCodeChallenge(): Promise<string>;
8
+ }
9
+ /** A PKCE Producer that can generate and store a code verifier, but is agnostic as to the storage location */
10
+ export declare class GenericPublicClientPKCEProducer implements PKCEProducer {
11
+ private storage;
12
+ constructor(storage: AuthStorage);
13
+ getCodeChallenge(): Promise<string>;
14
+ getCodeVerifier(): Promise<string | null>;
15
+ }
16
+ /** A PKCE Producer that is expected to run on a browser, and does not need a backend */
17
+ export declare class BrowserPublicClientPKCEProducer extends GenericPublicClientPKCEProducer {
18
+ constructor();
19
+ }
20
+ //# sourceMappingURL=PKCE.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PKCE.d.ts","sourceRoot":"","sources":["../../../../src/services/PKCE.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,0EAA0E;AAC1E,qBAAa,8BAA+B,YAAW,YAAY;IACrD,OAAO,CAAC,qBAAqB;gBAArB,qBAAqB,EAAE,MAAM;IAC3C,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;CAK1C;AAED,8GAA8G;AAC9G,qBAAa,+BAAgC,YAAW,YAAY;IACtD,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,WAAW;IAIlC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IASnC,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAGhD;AAED,wFAAwF;AACxF,qBAAa,+BAAgC,SAAQ,+BAA+B;;CAInF"}
@@ -0,0 +1,44 @@
1
+ import { deriveCodeChallenge } from "../shared/lib/util.js";
2
+ import { generateCodeVerifier } from "oslo/oauth2";
3
+ import { LocalStorageAdapter } from "../browser/storage.js";
4
+ import { CodeVerifier } from "../shared/lib/types.js";
5
+ /** A PKCE consumer that retrieves the challenge from a server endpoint */
6
+ export class ConfidentialClientPKCEConsumer {
7
+ pkceChallengeEndpoint;
8
+ constructor(pkceChallengeEndpoint) {
9
+ this.pkceChallengeEndpoint = pkceChallengeEndpoint;
10
+ }
11
+ async getCodeChallenge() {
12
+ const response = await fetch(this.pkceChallengeEndpoint);
13
+ const data = (await response.json());
14
+ return data.challenge;
15
+ }
16
+ }
17
+ /** A PKCE Producer that can generate and store a code verifier, but is agnostic as to the storage location */
18
+ export class GenericPublicClientPKCEProducer {
19
+ storage;
20
+ constructor(storage) {
21
+ this.storage = storage;
22
+ }
23
+ // if there is already a verifier, return it,
24
+ // If not, create a new one and store it
25
+ async getCodeChallenge() {
26
+ // let verifier = await this.getCodeVerifier();
27
+ // if (!verifier) {
28
+ const verifier = generateCodeVerifier();
29
+ this.storage.set(CodeVerifier.COOKIE_NAME, verifier);
30
+ // }
31
+ return deriveCodeChallenge(verifier);
32
+ }
33
+ // if there is already a verifier, return it,
34
+ async getCodeVerifier() {
35
+ return this.storage.get(CodeVerifier.COOKIE_NAME);
36
+ }
37
+ }
38
+ /** A PKCE Producer that is expected to run on a browser, and does not need a backend */
39
+ export class BrowserPublicClientPKCEProducer extends GenericPublicClientPKCEProducer {
40
+ constructor() {
41
+ super(new LocalStorageAdapter());
42
+ }
43
+ }
44
+ //# sourceMappingURL=PKCE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PKCE.js","sourceRoot":"","sources":["../../../../src/services/PKCE.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,0EAA0E;AAC1E,MAAM,OAAO,8BAA8B;IACrB;IAApB,YAAoB,qBAA6B;QAA7B,0BAAqB,GAArB,qBAAqB,CAAQ;IAAG,CAAC;IACrD,KAAK,CAAC,gBAAgB;QACpB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA0B,CAAC;QAC9D,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF;AAED,8GAA8G;AAC9G,MAAM,OAAO,+BAA+B;IACtB;IAApB,YAAoB,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;IAAG,CAAC;IAE5C,6CAA6C;IAC7C,wCAAwC;IACxC,KAAK,CAAC,gBAAgB;QACpB,+CAA+C;QAC/C,mBAAmB;QACnB,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI;QACJ,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IACD,6CAA6C;IAC7C,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC;CACF;AAED,wFAAwF;AACxF,MAAM,OAAO,+BAAgC,SAAQ,+BAA+B;IAClF;QACE,KAAK,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;IACnC,CAAC;CACF","sourcesContent":["import { deriveCodeChallenge } from \"@/shared/lib/util.js\";\nimport { generateCodeVerifier } from \"oslo/oauth2\";\nimport { LocalStorageAdapter } from \"@/browser/storage.js\";\nimport type { PKCEConsumer, PKCEProducer } from \"@/services/types.js\";\nimport type { AuthStorage } from \"@/types.js\";\nimport { CodeVerifier } from \"@/shared/lib/types.js\";\n\n/** A PKCE consumer that retrieves the challenge from a server endpoint */\nexport class ConfidentialClientPKCEConsumer implements PKCEConsumer {\n constructor(private pkceChallengeEndpoint: string) {}\n async getCodeChallenge(): Promise<string> {\n const response = await fetch(this.pkceChallengeEndpoint);\n const data = (await response.json()) as { challenge: string };\n return data.challenge;\n }\n}\n\n/** A PKCE Producer that can generate and store a code verifier, but is agnostic as to the storage location */\nexport class GenericPublicClientPKCEProducer implements PKCEProducer {\n constructor(private storage: AuthStorage) {}\n\n // if there is already a verifier, return it,\n // If not, create a new one and store it\n async getCodeChallenge(): Promise<string> {\n // let verifier = await this.getCodeVerifier();\n // if (!verifier) {\n const verifier = generateCodeVerifier();\n this.storage.set(CodeVerifier.COOKIE_NAME, verifier);\n // }\n return deriveCodeChallenge(verifier);\n }\n // if there is already a verifier, return it,\n async getCodeVerifier(): Promise<string | null> {\n return this.storage.get(CodeVerifier.COOKIE_NAME);\n }\n}\n\n/** A PKCE Producer that is expected to run on a browser, and does not need a backend */\nexport class BrowserPublicClientPKCEProducer extends GenericPublicClientPKCEProducer {\n constructor() {\n super(new LocalStorageAdapter());\n }\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import type { OIDCTokenResponseBody, SessionData } from "../types.js";
2
+ export interface PKCEConsumer {
3
+ getCodeChallenge(): Promise<string>;
4
+ }
5
+ export interface PKCEProducer extends PKCEConsumer {
6
+ getCodeVerifier(): Promise<string | null>;
7
+ }
8
+ export interface AuthenticationInitiator {
9
+ signIn(iframeRef: HTMLIFrameElement | null): Promise<URL>;
10
+ signOut(): Promise<URL>;
11
+ }
12
+ export interface AuthenticationResolver {
13
+ tokenExchange(code: string, state: string): Promise<OIDCTokenResponseBody>;
14
+ getSessionData(): Promise<SessionData | null>;
15
+ validateExistingSession(): Promise<SessionData>;
16
+ }
17
+ export interface AuthenticationRefresher {
18
+ refreshTokens: () => Promise<OIDCTokenResponseBody>;
19
+ }
20
+ export declare class PopupError extends Error {
21
+ constructor(message: string);
22
+ }
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/services/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AASrE,MAAM,WAAW,YAAY;IAE3B,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACrC;AAGD,MAAM,WAAW,YAAa,SAAQ,YAAY;IAEhD,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC3C;AAGD,MAAM,WAAW,uBAAuB;IAEtC,MAAM,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAG1D,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;CACzB;AAGD,MAAM,WAAW,sBAAsB;IAKrC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAG3E,cAAc,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAG9C,uBAAuB,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACrD;AAED,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAI5B"}
@@ -0,0 +1,7 @@
1
+ export class PopupError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ Object.setPrototypeOf(this, PopupError.prototype);
5
+ }
6
+ }
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/services/types.ts"],"names":[],"mappings":"AAgDA,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF","sourcesContent":["import type { OIDCTokenResponseBody, SessionData } from \"@/types.js\";\n\n// A PKCEConsumer can get a code challenge to use in the login process\n// A PKCEProducer can also generate and store verifiers. The producer must also be a consumer in order to get the challenge from an existing flow\n// Examples:\n// - Client-only SPA: The SPA generates the code challenge and verifier, stores the verifier in state and returns the code challenge\n// Note - The SPA should use PKCEProducer instead to do both\n// - Client-side of a client/server app: The client calls the backend to get the challenge.\n// - Server-side: The server should generate a new stored verifier and derive the challenge from it.\nexport interface PKCEConsumer {\n // Retrieve a new PKCE challenge\n getCodeChallenge(): Promise<string>;\n}\n\n// All producers are consumers, because the producer can get its own challenge\nexport interface PKCEProducer extends PKCEConsumer {\n // Retrieve the PKCE challenge from the session if one exists\n getCodeVerifier(): Promise<string | null>;\n}\n\n// A service that can initiate requests to login or log out\nexport interface AuthenticationInitiator {\n // trigger a new login\n signIn(iframeRef: HTMLIFrameElement | null): Promise<URL>;\n\n // trigger a new logout\n signOut(): Promise<URL>;\n}\n\n// A service that can resolve an authentication request according to the OAuth Auth Code grant types\nexport interface AuthenticationResolver {\n // Given an auth code, get the tokens from the auth server and store them. works in PKCE and non-PKCE environments\n // Note, if we choose later to implement other grants, this method would move into a subinterface specifically\n // for the authorization code grant type.\n // The return type is just for convenience and can be ignored, as the same data would be provided by getSessionData\n tokenExchange(code: string, state: string): Promise<OIDCTokenResponseBody>;\n\n // If the tokens have already been retrieved, return them\n getSessionData(): Promise<SessionData | null>;\n\n // If an existing session is found, validate it and return the session data\n validateExistingSession(): Promise<SessionData>;\n}\n\nexport interface AuthenticationRefresher {\n refreshTokens: () => Promise<OIDCTokenResponseBody>;\n}\n\nexport class PopupError extends Error {\n constructor(message: string) {\n super(message);\n Object.setPrototypeOf(this, PopupError.prototype);\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { DisplayMode } from "../types.js";
2
+ export type AuthContextType = {
3
+ signIn: (displayMode?: DisplayMode) => Promise<void>;
4
+ isAuthenticated: boolean;
5
+ isLoading: boolean;
6
+ error: Error | null;
7
+ signOut: () => Promise<void>;
8
+ };
9
+ export declare const AuthContext: import("react").Context<AuthContextType | null>;
10
+ //# sourceMappingURL=AuthContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthContext.d.ts","sourceRoot":"","sources":["../../../../src/shared/AuthContext.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AACF,eAAO,MAAM,WAAW,iDAA8C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { createContext } from "react";
2
+ export const AuthContext = createContext(null);
3
+ //# sourceMappingURL=AuthContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthContext.js","sourceRoot":"","sources":["../../../../src/shared/AuthContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAUtC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAyB,IAAI,CAAC,CAAC","sourcesContent":["import { createContext } from \"react\";\nimport type { DisplayMode } from \"@/types.js\";\n\nexport type AuthContextType = {\n signIn: (displayMode?: DisplayMode) => Promise<void>;\n isAuthenticated: boolean;\n isLoading: boolean;\n error: Error | null;\n signOut: () => Promise<void>;\n};\nexport const AuthContext = createContext<AuthContextType | null>(null);\n"]}
@@ -0,0 +1,18 @@
1
+ import React, { type ReactNode } from "react";
2
+ import type { Config, SessionData } from "../types.js";
3
+ import type { PKCEConsumer } from "../services/types.js";
4
+ export type AuthProviderProps = {
5
+ children: ReactNode;
6
+ clientId: string;
7
+ redirectUrl?: string;
8
+ nonce?: string;
9
+ config?: Config;
10
+ onSignIn?: (error?: Error) => void;
11
+ onSignOut?: () => Promise<void>;
12
+ pkceConsumer?: PKCEConsumer;
13
+ modalIframe?: boolean;
14
+ sessionData?: SessionData;
15
+ };
16
+ declare const AuthProvider: ({ children, clientId, redirectUrl: inputRedirectUrl, config, onSignIn, onSignOut, pkceConsumer, nonce, modalIframe, sessionData: inputSessionData, }: AuthProviderProps) => React.JSX.Element | null;
17
+ export { AuthProvider };
18
+ //# sourceMappingURL=AuthProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/AuthProvider.tsx"],"names":[],"mappings":"AACA,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,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAYF,QAAA,MAAM,YAAY,yJAWf,iBAAiB,6BAgSnB,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,250 @@
1
+ "use client";
2
+ import React, { useCallback, useEffect, useMemo, useRef, useState, } from "react";
3
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
4
+ import { CivicAuthIframeContainer } from "@/shared/components/CivicAuthIframeContainer.jsx";
5
+ import { TokenProvider } from "../shared/providers/TokenProvider.js";
6
+ import { SessionProvider } from "../shared/providers/SessionProvider.js";
7
+ import { DEFAULT_SCOPES } from "../constants.js";
8
+ import { authConfig } from "../config.js";
9
+ import { LoadingIcon } from "../shared/components/LoadingIcon.js";
10
+ import { isWindowInIframe } from "../lib/windowUtil.js";
11
+ import { AuthContext } from "@/shared/AuthContext.jsx";
12
+ import { BrowserAuthenticationInitiator, BrowserAuthenticationService, } from "../services/AuthenticationService.js";
13
+ import { PopupError } from "../services/types.js";
14
+ import { ConfidentialClientPKCEConsumer } from "../services/PKCE.js";
15
+ import { generateState } from "../lib/oauth.js";
16
+ import { LocalStorageAdapter } from "../browser/storage.js";
17
+ import { ConfigProvider } from "@/shared/providers/ConfigProvider.jsx";
18
+ import { getUser } from "./session.js";
19
+ import { GenericUserSession } from "./UserSession.js";
20
+ import { IframeProvider } from "../shared/providers/IframeProvider.js";
21
+ // Global this object setup
22
+ let globalThisObject;
23
+ if (typeof window !== "undefined") {
24
+ globalThisObject = window;
25
+ }
26
+ else if (typeof global !== "undefined") {
27
+ globalThisObject = global;
28
+ }
29
+ else {
30
+ globalThisObject = Function("return this")();
31
+ }
32
+ globalThisObject.globalThis = globalThisObject;
33
+ function BlockDisplay({ children }) {
34
+ return (React.createElement("div", { className: "cac-relative cac-left-0 cac-top-0 cac-z-50 cac-flex cac-h-screen cac-w-screen cac-items-center cac-justify-center cac-bg-white" },
35
+ React.createElement("div", { className: "cac-absolute cac-inset-0 cac-flex cac-items-center cac-justify-center cac-bg-white" }, children)));
36
+ }
37
+ const AuthProvider = ({ children, clientId, redirectUrl: inputRedirectUrl, config = authConfig, onSignIn, onSignOut, pkceConsumer, nonce, modalIframe = true, sessionData: inputSessionData, }) => {
38
+ const [iframeUrl, setIframeUrl] = useState(null);
39
+ const [currentUrl, setCurrentUrl] = useState(null);
40
+ const [isInIframe, setIsInIframe] = useState(false);
41
+ const [authResponseUrl, setAuthResponseUrl] = useState(null);
42
+ const [tokenExchangeError, setTokenExchangeError] = useState();
43
+ const [displayMode, setDisplayMode] = useState("iframe");
44
+ const [browserAuthenticationInitiator, setBrowserAuthenticationInitiator] = useState();
45
+ const [showIFrame, setShowIFrame] = useState(false);
46
+ const [isRedirecting, setIsRedirecting] = useState(false);
47
+ const queryClient = useQueryClient();
48
+ const iframeRef = useRef(null);
49
+ // TODO maybe we want to support or derive serverTokenExchange another way?
50
+ const serverTokenExchange = pkceConsumer instanceof ConfidentialClientPKCEConsumer;
51
+ // check if the current window is in an iframe with the iframe id, and set an isInIframe state
52
+ useEffect(() => {
53
+ if (typeof globalThis.window !== "undefined") {
54
+ setCurrentUrl(globalThis.window.location.href);
55
+ const isInIframeVal = isWindowInIframe(globalThis.window);
56
+ setIsInIframe(isInIframeVal);
57
+ }
58
+ }, []);
59
+ const redirectUrl = useMemo(() => (inputRedirectUrl || currentUrl || "").split("?")[0], [currentUrl, inputRedirectUrl]);
60
+ const [authService, setAuthService] = useState();
61
+ useEffect(() => {
62
+ if (!currentUrl || !redirectUrl)
63
+ return;
64
+ BrowserAuthenticationService.build({
65
+ clientId,
66
+ redirectUrl,
67
+ oauthServer: config.oauthServer,
68
+ scopes: DEFAULT_SCOPES,
69
+ displayMode,
70
+ }).then(setAuthService);
71
+ }, [currentUrl, clientId, redirectUrl, config, displayMode]);
72
+ const { data: session, isLoading, error, } = useQuery({
73
+ queryKey: [
74
+ "session",
75
+ authResponseUrl,
76
+ iframeUrl,
77
+ currentUrl,
78
+ isInIframe,
79
+ authService,
80
+ ],
81
+ queryFn: async () => {
82
+ if (!authService) {
83
+ return { authenticated: false };
84
+ }
85
+ if (inputSessionData) {
86
+ return inputSessionData;
87
+ }
88
+ const url = new URL(authResponseUrl
89
+ ? authResponseUrl
90
+ : globalThis.window.location.href || "");
91
+ // if we have existing tokens, then validate them and return the session data
92
+ // otherwise check if we have a code in the url and exchange it for tokens
93
+ // if we have neither, return undefined
94
+ const existingSessionData = await authService.validateExistingSession();
95
+ if (existingSessionData.authenticated) {
96
+ return existingSessionData;
97
+ }
98
+ const code = url.searchParams.get("code");
99
+ const state = url.searchParams.get("state");
100
+ if (!serverTokenExchange && code && state && !isInIframe) {
101
+ try {
102
+ console.log("AuthProvider useQuery code", {
103
+ isInIframe,
104
+ code,
105
+ state,
106
+ });
107
+ await authService.tokenExchange(code, state);
108
+ const clientStorage = new LocalStorageAdapter();
109
+ const user = await getUser(clientStorage);
110
+ if (!user) {
111
+ throw new Error("Failed to get user info");
112
+ }
113
+ const userSession = new GenericUserSession(clientStorage);
114
+ userSession.set(user);
115
+ onSignIn?.(); // Call onSignIn without an error if successful
116
+ return authService.getSessionData();
117
+ }
118
+ catch (error) {
119
+ setTokenExchangeError(error);
120
+ onSignIn?.(error instanceof Error ? error : new Error("Failed to sign in")); // Pass the error to onSignIn
121
+ return { authenticated: false };
122
+ }
123
+ }
124
+ return existingSessionData;
125
+ },
126
+ });
127
+ const signOutMutation = useMutation({
128
+ mutationFn: async () => {
129
+ // Implement signOut logic here
130
+ const authInitiator = getAuthInitiator();
131
+ authInitiator?.signOut();
132
+ setIframeUrl(null);
133
+ setShowIFrame(false);
134
+ setAuthResponseUrl(null);
135
+ onSignOut?.();
136
+ },
137
+ onSuccess: () => {
138
+ queryClient.setQueryData([
139
+ "session",
140
+ authResponseUrl,
141
+ iframeUrl,
142
+ currentUrl,
143
+ isInIframe,
144
+ authService,
145
+ ], null);
146
+ },
147
+ });
148
+ const getAuthInitiator = useCallback((overrideDisplayMode) => {
149
+ const useDisplayMode = overrideDisplayMode || displayMode;
150
+ if (!pkceConsumer || !redirectUrl) {
151
+ return null;
152
+ }
153
+ return (browserAuthenticationInitiator ||
154
+ new BrowserAuthenticationInitiator({
155
+ pkceConsumer, // generate and retrieve the challenge client-side
156
+ clientId,
157
+ redirectUrl,
158
+ state: generateState(useDisplayMode, serverTokenExchange),
159
+ scopes: DEFAULT_SCOPES,
160
+ displayMode: useDisplayMode,
161
+ oauthServer: config.oauthServer,
162
+ // the endpoints to use for the login (if not obtained from the auth server
163
+ endpointOverrides: config.endpoints,
164
+ nonce,
165
+ }));
166
+ }, [
167
+ serverTokenExchange,
168
+ displayMode,
169
+ browserAuthenticationInitiator,
170
+ clientId,
171
+ redirectUrl,
172
+ config.oauthServer,
173
+ config.endpoints,
174
+ pkceConsumer,
175
+ nonce,
176
+ ]);
177
+ const signIn = useCallback(async (overrideDisplayMode = "iframe") => {
178
+ setDisplayMode(overrideDisplayMode);
179
+ const authInitiator = getAuthInitiator(overrideDisplayMode);
180
+ setBrowserAuthenticationInitiator(authInitiator);
181
+ if (overrideDisplayMode === "iframe") {
182
+ setShowIFrame(true);
183
+ }
184
+ else if (overrideDisplayMode === "redirect") {
185
+ setIsRedirecting(true);
186
+ }
187
+ authInitiator?.signIn(iframeRef.current).catch((error) => {
188
+ console.log("signIn error", {
189
+ error,
190
+ isPopupError: error instanceof PopupError,
191
+ });
192
+ // if we've tried to open a popup and it has failed, then fallback to redirect mode
193
+ if (error instanceof PopupError) {
194
+ signIn("redirect");
195
+ }
196
+ });
197
+ }, [getAuthInitiator]);
198
+ // remove event listeners when the component unmounts
199
+ useEffect(() => {
200
+ return () => {
201
+ if (browserAuthenticationInitiator) {
202
+ browserAuthenticationInitiator.cleanup();
203
+ }
204
+ };
205
+ }, [browserAuthenticationInitiator]);
206
+ const isAuthenticated = useMemo(() => (session ? session.authenticated : false), [session]);
207
+ useQuery({
208
+ queryKey: ["autoSignIn", modalIframe, redirectUrl, isAuthenticated],
209
+ queryFn: async () => {
210
+ if (!modalIframe &&
211
+ redirectUrl &&
212
+ !isAuthenticated &&
213
+ iframeRef.current) {
214
+ signIn("iframe");
215
+ }
216
+ return true;
217
+ },
218
+ refetchOnWindowFocus: false,
219
+ });
220
+ const value = useMemo(() => ({
221
+ isLoading,
222
+ error: error,
223
+ signOut: async () => {
224
+ await signOutMutation.mutateAsync();
225
+ },
226
+ isAuthenticated,
227
+ signIn,
228
+ }), [isLoading, error, signOutMutation, isAuthenticated, signIn]);
229
+ if (!redirectUrl)
230
+ return null;
231
+ return (React.createElement(AuthContext.Provider, { value: value },
232
+ React.createElement(ConfigProvider, { config: config, redirectUrl: redirectUrl, modalIframe: modalIframe, serverTokenExchange: serverTokenExchange },
233
+ React.createElement(IframeProvider, { setAuthResponseUrl: setAuthResponseUrl, iframeRef: iframeRef },
234
+ React.createElement(SessionProvider, { session: session },
235
+ React.createElement(TokenProvider, null,
236
+ modalIframe && !isInIframe && !session?.authenticated && (React.createElement("div", { style: showIFrame ? { display: "block" } : { display: "none" } },
237
+ React.createElement(CivicAuthIframeContainer, { onClose: () => setShowIFrame(false) }))),
238
+ modalIframe &&
239
+ (isInIframe ||
240
+ isRedirecting ||
241
+ (isLoading && !serverTokenExchange)) && (React.createElement(BlockDisplay, null,
242
+ React.createElement(LoadingIcon, null))),
243
+ (tokenExchangeError || error) && (React.createElement(BlockDisplay, null,
244
+ React.createElement("div", null,
245
+ "Error: ",
246
+ (tokenExchangeError || error).message))),
247
+ children))))));
248
+ };
249
+ export { AuthProvider };
250
+ //# sourceMappingURL=AuthProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthProvider.js","sourceRoot":"","sources":["../../../../src/shared/AuthProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\nimport React, {\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport type { Config, DisplayMode, SessionData } from \"@/types.js\";\nimport { CivicAuthIframeContainer } from \"@/shared/components/CivicAuthIframeContainer.jsx\";\nimport { TokenProvider } from \"@/shared/providers/TokenProvider.js\";\nimport { SessionProvider } from \"@/shared/providers/SessionProvider.js\";\nimport { DEFAULT_SCOPES } from \"@/constants.js\";\nimport { authConfig } from \"@/config.js\";\nimport { LoadingIcon } from \"@/shared/components/LoadingIcon.js\";\nimport { isWindowInIframe } from \"@/lib/windowUtil.js\";\nimport { AuthContext } from \"@/shared/AuthContext.jsx\";\nimport {\n BrowserAuthenticationInitiator,\n BrowserAuthenticationService,\n} from \"@/services/AuthenticationService.js\";\nimport type { AuthenticationResolver, PKCEConsumer } from \"@/services/types.js\";\nimport { PopupError } from \"@/services/types.js\";\nimport { ConfidentialClientPKCEConsumer } from \"@/services/PKCE.js\";\nimport { generateState } from \"@/lib/oauth.js\";\nimport { LocalStorageAdapter } from \"@/browser/storage.js\";\nimport { ConfigProvider } from \"@/shared/providers/ConfigProvider.jsx\";\nimport { getUser } from \"./session.js\";\nimport { GenericUserSession } from \"./UserSession.js\";\nimport { IframeProvider } from \"@/shared/providers/IframeProvider.js\";\n\n// Global this object setup\nlet globalThisObject;\nif (typeof window !== \"undefined\") {\n globalThisObject = window;\n} else if (typeof global !== \"undefined\") {\n globalThisObject = global;\n} else {\n globalThisObject = Function(\"return this\")();\n}\nglobalThisObject.globalThis = globalThisObject;\n\nexport type AuthProviderProps = {\n children: ReactNode;\n clientId: string;\n redirectUrl?: string;\n nonce?: string;\n config?: Config;\n onSignIn?: (error?: Error) => void;\n onSignOut?: () => Promise<void>;\n pkceConsumer?: PKCEConsumer;\n modalIframe?: boolean;\n sessionData?: SessionData;\n};\n\nfunction BlockDisplay({ children }: { children: ReactNode }) {\n return (\n <div className=\"cac-relative cac-left-0 cac-top-0 cac-z-50 cac-flex cac-h-screen cac-w-screen cac-items-center cac-justify-center cac-bg-white\">\n <div className=\"cac-absolute cac-inset-0 cac-flex cac-items-center cac-justify-center cac-bg-white\">\n {children}\n </div>\n </div>\n );\n}\n\nconst AuthProvider = ({\n children,\n clientId,\n redirectUrl: inputRedirectUrl,\n config = authConfig,\n onSignIn,\n onSignOut,\n pkceConsumer,\n nonce,\n modalIframe = true,\n sessionData: inputSessionData,\n}: AuthProviderProps) => {\n const [iframeUrl, setIframeUrl] = useState<string | null>(null);\n const [currentUrl, setCurrentUrl] = useState<string | null>(null);\n const [isInIframe, setIsInIframe] = useState(false);\n const [authResponseUrl, setAuthResponseUrl] = useState<string | null>(null);\n const [tokenExchangeError, setTokenExchangeError] = useState<Error>();\n const [displayMode, setDisplayMode] = useState<DisplayMode>(\"iframe\");\n const [browserAuthenticationInitiator, setBrowserAuthenticationInitiator] =\n useState<BrowserAuthenticationInitiator | null>();\n const [showIFrame, setShowIFrame] = useState(false);\n const [isRedirecting, setIsRedirecting] = useState(false);\n const queryClient = useQueryClient();\n const iframeRef = useRef<HTMLIFrameElement>(null);\n\n // TODO maybe we want to support or derive serverTokenExchange another way?\n const serverTokenExchange =\n pkceConsumer instanceof ConfidentialClientPKCEConsumer;\n // check if the current window is in an iframe with the iframe id, and set an isInIframe state\n useEffect(() => {\n if (typeof globalThis.window !== \"undefined\") {\n setCurrentUrl(globalThis.window.location.href);\n const isInIframeVal = isWindowInIframe(globalThis.window);\n setIsInIframe(isInIframeVal);\n }\n }, []);\n\n const redirectUrl = useMemo(\n () => (inputRedirectUrl || currentUrl || \"\").split(\"?\")[0],\n [currentUrl, inputRedirectUrl],\n );\n\n const [authService, setAuthService] = useState<AuthenticationResolver>();\n\n useEffect(() => {\n if (!currentUrl || !redirectUrl) return;\n BrowserAuthenticationService.build({\n clientId,\n redirectUrl,\n oauthServer: config.oauthServer,\n scopes: DEFAULT_SCOPES,\n displayMode,\n }).then(setAuthService);\n }, [currentUrl, clientId, redirectUrl, config, displayMode]);\n\n const {\n data: session,\n isLoading,\n error,\n } = useQuery({\n queryKey: [\n \"session\",\n authResponseUrl,\n iframeUrl,\n currentUrl,\n isInIframe,\n authService,\n ],\n queryFn: async () => {\n if (!authService) {\n return { authenticated: false };\n }\n if (inputSessionData) {\n return inputSessionData;\n }\n const url = new URL(\n authResponseUrl\n ? authResponseUrl\n : globalThis.window.location.href || \"\",\n );\n // if we have existing tokens, then validate them and return the session data\n // otherwise check if we have a code in the url and exchange it for tokens\n // if we have neither, return undefined\n const existingSessionData = await authService.validateExistingSession();\n if (existingSessionData.authenticated) {\n return existingSessionData;\n }\n const code = url.searchParams.get(\"code\");\n const state = url.searchParams.get(\"state\");\n if (!serverTokenExchange && code && state && !isInIframe) {\n try {\n console.log(\"AuthProvider useQuery code\", {\n isInIframe,\n code,\n state,\n });\n await authService.tokenExchange(code, state);\n const clientStorage = new LocalStorageAdapter();\n const user = await getUser(clientStorage);\n if (!user) {\n throw new Error(\"Failed to get user info\");\n }\n\n const userSession = new GenericUserSession(clientStorage);\n userSession.set(user);\n\n onSignIn?.(); // Call onSignIn without an error if successful\n return authService.getSessionData();\n } catch (error) {\n setTokenExchangeError(error as Error);\n onSignIn?.(\n error instanceof Error ? error : new Error(\"Failed to sign in\"),\n ); // Pass the error to onSignIn\n return { authenticated: false };\n }\n }\n\n return existingSessionData;\n },\n });\n\n const signOutMutation = useMutation({\n mutationFn: async () => {\n // Implement signOut logic here\n const authInitiator = getAuthInitiator();\n authInitiator?.signOut();\n setIframeUrl(null);\n setShowIFrame(false);\n setAuthResponseUrl(null);\n onSignOut?.();\n },\n onSuccess: () => {\n queryClient.setQueryData(\n [\n \"session\",\n authResponseUrl,\n iframeUrl,\n currentUrl,\n isInIframe,\n authService,\n ],\n null,\n );\n },\n });\n\n const getAuthInitiator = useCallback(\n (overrideDisplayMode?: DisplayMode) => {\n const useDisplayMode = overrideDisplayMode || displayMode;\n if (!pkceConsumer || !redirectUrl) {\n return null;\n }\n return (\n browserAuthenticationInitiator ||\n new BrowserAuthenticationInitiator({\n pkceConsumer, // generate and retrieve the challenge client-side\n clientId,\n redirectUrl,\n state: generateState(useDisplayMode, serverTokenExchange),\n scopes: DEFAULT_SCOPES,\n displayMode: useDisplayMode,\n oauthServer: config.oauthServer,\n // the endpoints to use for the login (if not obtained from the auth server\n endpointOverrides: config.endpoints,\n nonce,\n })\n );\n },\n [\n serverTokenExchange,\n displayMode,\n browserAuthenticationInitiator,\n clientId,\n redirectUrl,\n config.oauthServer,\n config.endpoints,\n pkceConsumer,\n nonce,\n ],\n );\n\n const signIn = useCallback(\n async (overrideDisplayMode: DisplayMode = \"iframe\") => {\n setDisplayMode(overrideDisplayMode);\n const authInitiator = getAuthInitiator(overrideDisplayMode);\n setBrowserAuthenticationInitiator(authInitiator);\n if (overrideDisplayMode === \"iframe\") {\n setShowIFrame(true);\n } else if (overrideDisplayMode === \"redirect\") {\n setIsRedirecting(true);\n }\n authInitiator?.signIn(iframeRef.current).catch((error) => {\n console.log(\"signIn error\", {\n error,\n isPopupError: error instanceof PopupError,\n });\n // if we've tried to open a popup and it has failed, then fallback to redirect mode\n if (error instanceof PopupError) {\n signIn(\"redirect\");\n }\n });\n },\n [getAuthInitiator],\n );\n\n // remove event listeners when the component unmounts\n useEffect(() => {\n return () => {\n if (browserAuthenticationInitiator) {\n browserAuthenticationInitiator.cleanup();\n }\n };\n }, [browserAuthenticationInitiator]);\n\n const isAuthenticated = useMemo(\n () => (session ? session.authenticated : false),\n [session],\n );\n\n useQuery({\n queryKey: [\"autoSignIn\", modalIframe, redirectUrl, isAuthenticated],\n queryFn: async () => {\n if (\n !modalIframe &&\n redirectUrl &&\n !isAuthenticated &&\n iframeRef.current\n ) {\n signIn(\"iframe\");\n }\n return true;\n },\n refetchOnWindowFocus: false,\n });\n\n const value = useMemo(\n () => ({\n isLoading,\n error: error as Error | null,\n signOut: async () => {\n await signOutMutation.mutateAsync();\n },\n isAuthenticated,\n signIn,\n }),\n [isLoading, error, signOutMutation, isAuthenticated, signIn],\n );\n\n if (!redirectUrl) return null;\n\n return (\n <AuthContext.Provider value={value}>\n <ConfigProvider\n config={config}\n redirectUrl={redirectUrl}\n modalIframe={modalIframe}\n serverTokenExchange={serverTokenExchange}\n >\n <IframeProvider\n setAuthResponseUrl={setAuthResponseUrl}\n iframeRef={iframeRef}\n >\n <SessionProvider session={session}>\n <TokenProvider>\n {modalIframe && !isInIframe && !session?.authenticated && (\n <div\n style={\n showIFrame ? { display: \"block\" } : { display: \"none\" }\n }\n >\n <CivicAuthIframeContainer\n onClose={() => setShowIFrame(false)}\n />\n </div>\n )}\n\n {modalIframe &&\n (isInIframe ||\n isRedirecting ||\n (isLoading && !serverTokenExchange)) && (\n <BlockDisplay>\n <LoadingIcon />\n </BlockDisplay>\n )}\n\n {(tokenExchangeError || error) && (\n <BlockDisplay>\n <div>\n Error: {(tokenExchangeError || (error as Error)).message}\n </div>\n </BlockDisplay>\n )}\n {children}\n </TokenProvider>\n </SessionProvider>\n </IframeProvider>\n </ConfigProvider>\n </AuthContext.Provider>\n );\n};\n\nexport { AuthProvider };\n"]}
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ import { type AuthProviderProps } from "../shared/AuthProvider.js";
3
+ import "@civic/auth/styles.css";
4
+ type CivicAuthProviderProps = Omit<AuthProviderProps, "pkceConsumer">;
5
+ declare const CivicAuthProvider: ({ children, ...props }: CivicAuthProviderProps) => React.JSX.Element;
6
+ export { CivicAuthProvider, type CivicAuthProviderProps };
7
+ //# sourceMappingURL=CivicAuthProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CivicAuthProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/CivicAuthProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAOhF,OAAO,wBAAwB,CAAC;AAIhC,KAAK,sBAAsB,GAAG,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;AAEtE,QAAA,MAAM,iBAAiB,2BAA4B,sBAAsB,sBAaxE,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import React from "react";
3
+ import { AuthProvider } from "../shared/AuthProvider.js";
4
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
5
+ import { BrowserPublicClientPKCEProducer } from "../services/PKCE.js";
6
+ import { UserProvider } from "./UserProvider.js";
7
+ import { LocalStorageAdapter } from "../browser/storage.js";
8
+ // adding the styles import here to be added to the bundle
9
+ import "@civic/auth/styles.css";
10
+ const queryClient = new QueryClient();
11
+ const CivicAuthProvider = ({ children, ...props }) => {
12
+ return (React.createElement(QueryClientProvider, { client: queryClient },
13
+ React.createElement(AuthProvider, { ...props, pkceConsumer: new BrowserPublicClientPKCEProducer() },
14
+ React.createElement(UserProvider, { storage: new LocalStorageAdapter() }, children))));
15
+ };
16
+ export { CivicAuthProvider };
17
+ //# sourceMappingURL=CivicAuthProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CivicAuthProvider.js","sourceRoot":"","sources":["../../../../src/shared/CivicAuthProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAA0B,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,0DAA0D;AAC1D,OAAO,wBAAwB,CAAC;AAEhC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAItC,MAAM,iBAAiB,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAA0B,EAAE,EAAE;IAC3E,OAAO,CACL,oBAAC,mBAAmB,IAAC,MAAM,EAAE,WAAW;QACtC,oBAAC,YAAY,OACP,KAAK,EACT,YAAY,EAAE,IAAI,+BAA+B,EAAE;YAEnD,oBAAC,YAAY,IAAC,OAAO,EAAE,IAAI,mBAAmB,EAAE,IAC7C,QAAQ,CACI,CACF,CACK,CACvB,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAA+B,CAAC","sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { AuthProvider, type AuthProviderProps } from \"@/shared/AuthProvider.js\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { BrowserPublicClientPKCEProducer } from \"@/services/PKCE.js\";\nimport { UserProvider } from \"./UserProvider.js\";\nimport { LocalStorageAdapter } from \"@/browser/storage.js\";\n\n// adding the styles import here to be added to the bundle\nimport \"@civic/auth/styles.css\";\n\nconst queryClient = new QueryClient();\n\ntype CivicAuthProviderProps = Omit<AuthProviderProps, \"pkceConsumer\">;\n\nconst CivicAuthProvider = ({ children, ...props }: CivicAuthProviderProps) => {\n return (\n <QueryClientProvider client={queryClient}>\n <AuthProvider\n {...props}\n pkceConsumer={new BrowserPublicClientPKCEProducer()}\n >\n <UserProvider storage={new LocalStorageAdapter()}>\n {children}\n </UserProvider>\n </AuthProvider>\n </QueryClientProvider>\n );\n};\n\nexport { CivicAuthProvider, type CivicAuthProviderProps };\n"]}
@@ -0,0 +1,15 @@
1
+ import type { AuthenticationRefresher } from "../services/types.js";
2
+ import type { AuthStorage, Endpoints, OIDCTokenResponseBody } from "../types.js";
3
+ import type { AuthConfig } from "../server/config.js";
4
+ export declare class GenericAuthenticationRefresher implements AuthenticationRefresher {
5
+ private authConfig;
6
+ private storage;
7
+ private endpointOverrides?;
8
+ private oauth2client;
9
+ private endpoints;
10
+ private constructor();
11
+ init(): Promise<this>;
12
+ static build(authConfig: AuthConfig, storage: AuthStorage, endpointOverrides?: Partial<Endpoints>): Promise<GenericAuthenticationRefresher>;
13
+ refreshTokens(): Promise<OIDCTokenResponseBody>;
14
+ }
15
+ //# sourceMappingURL=GenericAuthenticationRefresher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericAuthenticationRefresher.d.ts","sourceRoot":"","sources":["../../../../src/shared/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;AAGrD,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;IAWD,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"}
@@ -0,0 +1,43 @@
1
+ import { getEndpointsWithOverrides, retrieveTokens, storeTokens, } from "../shared/util.js";
2
+ import { OAuth2Client } from "oslo/oauth2";
3
+ export class GenericAuthenticationRefresher {
4
+ authConfig;
5
+ storage;
6
+ endpointOverrides;
7
+ oauth2client;
8
+ endpoints;
9
+ constructor(authConfig, storage, endpointOverrides) {
10
+ this.authConfig = authConfig;
11
+ this.storage = storage;
12
+ this.endpointOverrides = endpointOverrides;
13
+ console.log("GenericAuthenticationRefresher constructor", {
14
+ authConfig,
15
+ endpointOverrides,
16
+ });
17
+ }
18
+ async init() {
19
+ // resolve oauth config
20
+ this.endpoints = await getEndpointsWithOverrides(this.authConfig.oauthServer, this.endpointOverrides);
21
+ this.oauth2client = new OAuth2Client(this.authConfig.clientId, this.endpoints.auth, this.endpoints.token, {
22
+ redirectURI: this.authConfig.redirectUrl,
23
+ });
24
+ return this;
25
+ }
26
+ static async build(authConfig, storage, endpointOverrides) {
27
+ const refresher = new GenericAuthenticationRefresher(authConfig, storage, endpointOverrides);
28
+ await refresher.init();
29
+ return refresher;
30
+ }
31
+ async refreshTokens() {
32
+ if (!this.oauth2client)
33
+ await this.init();
34
+ const tokens = retrieveTokens(this.storage);
35
+ if (!tokens?.refresh_token)
36
+ throw new Error("No refresh token available");
37
+ const oauth2Client = this.oauth2client;
38
+ const refreshedTokens = await oauth2Client.refreshAccessToken(tokens.refresh_token);
39
+ storeTokens(this.storage, refreshedTokens);
40
+ return tokens;
41
+ }
42
+ }
43
+ //# sourceMappingURL=GenericAuthenticationRefresher.js.map