@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,24 @@
1
+ export {
2
+ createCivicAuthPlugin,
3
+ defaultAuthConfig,
4
+ resolveAuthConfig,
5
+ } from "@/nextjs/config.js";
6
+ export { getUser } from "@/nextjs/GetUser.js";
7
+ export { handler } from "@/nextjs/routeHandler.js";
8
+ export {
9
+ createTokenCookies,
10
+ createUserInfoCookie,
11
+ clearAuthCookies,
12
+ NextjsCookieStorage,
13
+ NextjsClientStorage,
14
+ } from "@/nextjs/cookies.js";
15
+ export type {
16
+ AuthConfig,
17
+ CookiesConfigObject,
18
+ AuthConfigWithDefaults,
19
+ DefinedAuthConfig,
20
+ } from "@/nextjs/config.js";
21
+ export {
22
+ CivicNextAuthProvider as CivicAuthProvider,
23
+ type NextCivicAuthProviderProps as AuthProviderProps,
24
+ } from "@/nextjs/providers/NextAuthProvider.js";
@@ -0,0 +1 @@
1
+ export { authMiddleware, auth, withAuth } from "@/nextjs/middleware.js";
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Authenticates the user on all requests by checking the token cookie
3
+ *
4
+ * Usage:
5
+ * Option 1: use if no other middleware (e.g. no next-intl etc)
6
+ * export default authMiddleware();
7
+ *
8
+ * Option 2: use if other middleware is needed - default auth config
9
+ * export default withAuth((request) => {
10
+ * console.log('in custom middleware', request.nextUrl.pathname);
11
+ * return NextResponse.next();
12
+ * })
13
+ *
14
+ * Option 3: use if other middleware is needed - specifying auth config
15
+ * const withCivicAuth = auth({ loginUrl: '/login', include: ['/[.*]/user'] })
16
+ * export default withCivicAuth((request) => {
17
+ * console.log('in custom middleware', request.url);
18
+ * return NextResponse.next();
19
+ * })
20
+ *
21
+ */
22
+ import type { NextRequest } from "next/server.js";
23
+ import { NextResponse } from "next/server.js";
24
+ import picomatch from "picomatch";
25
+ import type { AuthConfig } from "@/nextjs/config.js";
26
+ import { resolveAuthConfig } from "@/nextjs/config.js";
27
+
28
+ type Middleware = (
29
+ request: NextRequest,
30
+ ) => Promise<NextResponse> | NextResponse;
31
+
32
+ // Matches globs:
33
+ // Examples:
34
+ // /user
35
+ // /user/*
36
+ // /user/**/info
37
+ const matchGlob = (pathname: string, globPattern: string) => {
38
+ const matches = picomatch(globPattern);
39
+ return matches(pathname);
40
+ };
41
+
42
+ // Matches globs:
43
+ // Examples:
44
+ // /user
45
+ // /user/*
46
+ // /user/**/info
47
+ const matchesGlobs = (pathname: string, patterns: string[]) =>
48
+ patterns.some((pattern) => {
49
+ if (!pattern) return false;
50
+ console.log("matching", {
51
+ pattern,
52
+ pathname,
53
+ match: matchGlob(pathname, pattern),
54
+ });
55
+ return matchGlob(pathname, pattern);
56
+ });
57
+
58
+ // internal - used by all exported functions
59
+ const applyAuth = async (
60
+ authConfig: AuthConfig,
61
+ request: NextRequest,
62
+ ): Promise<NextResponse | undefined> => {
63
+ const authConfigWithDefaults = resolveAuthConfig(authConfig);
64
+ // Check for any valid auth token
65
+ const isAuthenticated = !!request.cookies.get("id_token");
66
+
67
+ // skip auth check for redirect to login url
68
+ if (
69
+ request.nextUrl.pathname === authConfigWithDefaults.loginUrl &&
70
+ request.method === "GET"
71
+ ) {
72
+ console.log("→ Skipping auth check - this is the login URL");
73
+ return undefined;
74
+ }
75
+
76
+ if (!matchesGlobs(request.nextUrl.pathname, authConfigWithDefaults.include)) {
77
+ console.log("→ Skipping auth check - path not in include patterns");
78
+ return undefined;
79
+ }
80
+
81
+ if (matchesGlobs(request.nextUrl.pathname, authConfigWithDefaults.exclude)) {
82
+ console.log("→ Skipping auth check - path in exclude patterns");
83
+ return undefined;
84
+ }
85
+
86
+ // Check for either token type
87
+ if (!isAuthenticated) {
88
+ const loginUrl = new URL(authConfigWithDefaults.loginUrl, request.url);
89
+ console.log("→ No valid token found - redirecting to login", loginUrl);
90
+ return NextResponse.redirect(loginUrl);
91
+ }
92
+
93
+ console.log("→ Auth check passed");
94
+ return undefined;
95
+ };
96
+
97
+ /**
98
+ *
99
+ * Use this when auth is the only middleware you need.
100
+ * Usage:
101
+ *
102
+ * export default authMiddleware({ loginUrl = '/login' }); // or just authMiddleware();
103
+ *
104
+ */
105
+ export const authMiddleware =
106
+ (authConfig: Partial<AuthConfig> = {}) =>
107
+ async (request: NextRequest): Promise<NextResponse> => {
108
+ const response = await applyAuth(authConfig, request);
109
+ if (response) return response;
110
+
111
+ // NextJS doesn't do middleware chaining yet, so this does not mean
112
+ // "call the next middleware" - it means "continue to the route handler"
113
+ return NextResponse.next();
114
+ };
115
+
116
+ /**
117
+ * Usage:
118
+ *
119
+ * export default withAuth(async (request) => {
120
+ * console.log('my middleware');
121
+ * return NextResponse.next();
122
+ * })
123
+ */
124
+ // use this when you have your own middleware to chain
125
+ export function withAuth(
126
+ middleware: Middleware,
127
+ ): (request: NextRequest) => Promise<NextResponse> {
128
+ return auth()(middleware);
129
+ }
130
+
131
+ /**
132
+ * Use this when you want to configure the middleware here (an alternative is to do it in the next.config file)
133
+ *
134
+ * Usage:
135
+ *
136
+ * const withAuth = auth({ loginUrl = '/login' }); // or just auth();
137
+ *
138
+ * export default withAuth(async (request) => {
139
+ * console.log('my middleware');
140
+ * return NextResponse.next();
141
+ * })
142
+ *
143
+ */
144
+ export function auth(authConfig: AuthConfig = {}) {
145
+ return (
146
+ middleware: Middleware,
147
+ ): ((request: NextRequest) => Promise<NextResponse>) => {
148
+ return async (request: NextRequest): Promise<NextResponse> => {
149
+ const response = await applyAuth(authConfig, request);
150
+ if (response) return response;
151
+
152
+ return middleware(request);
153
+ };
154
+ };
155
+ }
@@ -0,0 +1,89 @@
1
+ "use client";
2
+ /**
3
+ * A very small context provider for the user object - it takes the user object from the cookie and provides it to the app.
4
+ */
5
+ import React, { useEffect, useState } from "react";
6
+ import type { AuthProviderProps } from "@/shared/providers/AuthProvider.js";
7
+ import { AuthProvider } from "@/shared/providers/AuthProvider.js";
8
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
9
+ import type { User } from "@/types.js";
10
+ import { resolveAuthConfig } from "@/nextjs/config.js";
11
+ import { resolveCallbackUrl } from "@/nextjs/utils.js";
12
+ import { ConfidentialClientPKCEConsumer } from "@/services/PKCE.js";
13
+ import { NextjsClientStorage } from "@/nextjs/cookies.js";
14
+ import { UserProvider } from "@/shared/providers/UserProvider.js";
15
+ import { OAuthTokens } from "@/shared/lib/types.js";
16
+ import { useUserCookie } from "@/nextjs/hooks/useUserCookie.js";
17
+ import { useTokenCookie } from "@/nextjs/hooks/index.js";
18
+
19
+ // adding the styles import here to be added to the bundle
20
+ // import "../../styles.css";
21
+
22
+ const queryClient = new QueryClient();
23
+
24
+ type NextCivicAuthProviderProps = Omit<AuthProviderProps, "clientId">;
25
+
26
+ const CivicNextAuthProviderInternal = ({
27
+ children,
28
+ ...props
29
+ }: NextCivicAuthProviderProps) => {
30
+ const [redirectUrl, setRedirectUrl] = useState<string>("");
31
+ const resolvedConfig = resolveAuthConfig();
32
+ const { clientId, oauthServer, callbackUrl, challengeUrl, logoutUrl } =
33
+ resolvedConfig;
34
+
35
+ useEffect(() => {
36
+ if (typeof globalThis.window !== "undefined") {
37
+ const currentUrl = globalThis.window.location.href;
38
+ setRedirectUrl(resolveCallbackUrl(resolvedConfig, currentUrl));
39
+ }
40
+ }, [callbackUrl, resolvedConfig]);
41
+
42
+ const user = useUserCookie();
43
+ const idToken = useTokenCookie(OAuthTokens.ID_TOKEN);
44
+ const combinedUser = user ? ({ ...(user || {}), idToken } as User) : null;
45
+ const sessionData = {
46
+ authenticated: !!user,
47
+ ...(idToken ? { idToken } : {}),
48
+ };
49
+ const signOut = async (): Promise<void> => {
50
+ if (props.onSignOut) {
51
+ await props.onSignOut();
52
+ }
53
+ window.location.href = logoutUrl;
54
+ return;
55
+ };
56
+ return (
57
+ <AuthProvider
58
+ {...props}
59
+ redirectUrl={redirectUrl}
60
+ config={{ oauthServer }}
61
+ clientId={clientId}
62
+ pkceConsumer={new ConfidentialClientPKCEConsumer(challengeUrl)}
63
+ sessionData={sessionData}
64
+ >
65
+ <UserProvider
66
+ storage={new NextjsClientStorage()}
67
+ user={combinedUser}
68
+ signOut={signOut}
69
+ >
70
+ {children}
71
+ </UserProvider>
72
+ </AuthProvider>
73
+ );
74
+ };
75
+
76
+ const CivicNextAuthProvider = ({
77
+ children,
78
+ ...props
79
+ }: NextCivicAuthProviderProps) => {
80
+ return (
81
+ <QueryClientProvider client={queryClient}>
82
+ <CivicNextAuthProviderInternal {...props}>
83
+ {children}
84
+ </CivicNextAuthProviderInternal>
85
+ </QueryClientProvider>
86
+ );
87
+ };
88
+
89
+ export { CivicNextAuthProvider, type NextCivicAuthProviderProps };
@@ -0,0 +1,276 @@
1
+ import type { NextRequest } from "next/server.js";
2
+ import { NextResponse } from "next/server.js";
3
+ import { revalidatePath } from "next/cache.js";
4
+ import type { AuthConfig } from "@/nextjs/config.js";
5
+ import { resolveAuthConfig } from "@/nextjs/config.js";
6
+ import { loggers } from "@/lib/logger.js";
7
+ import {
8
+ clearAuthCookies,
9
+ NextjsClientStorage,
10
+ NextjsCookieStorage,
11
+ } from "@/nextjs/cookies.js";
12
+ import { GenericPublicClientPKCEProducer } from "@/services/PKCE.js";
13
+ import { resolveOAuthAccessCode } from "@/server/login.js";
14
+ import { getUser } from "@/shared/lib/session.js";
15
+ import { resolveCallbackUrl } from "@/nextjs/utils.js";
16
+ import { GenericUserSession } from "@/shared/lib/UserSession.js";
17
+ import {
18
+ TOKEN_EXCHANGE_SUCCESS_TEXT,
19
+ TOKEN_EXCHANGE_TRIGGER_TEXT,
20
+ } from "@/constants.js";
21
+ import { serverTokenExchangeFromState } from "@/lib/oauth.js";
22
+ import { cookies } from "next/headers.js";
23
+ import { CodeVerifier } from "@/shared/lib/types.js";
24
+
25
+ const logger = loggers.nextjs.handlers.auth;
26
+
27
+ class AuthError extends Error {
28
+ constructor(
29
+ message: string,
30
+ public readonly status: number = 401,
31
+ ) {
32
+ super(message);
33
+ this.name = "AuthError";
34
+ }
35
+ }
36
+
37
+ /**
38
+ * create a code verifier and challenge for PKCE
39
+ * saving the verifier in a cookie for later use
40
+ * @returns {Promise<NextResponse>}
41
+ */
42
+ async function handleChallenge(config: AuthConfig): Promise<NextResponse> {
43
+ const cookieStorage = new NextjsCookieStorage(config.cookies?.tokens ?? {});
44
+ const pkceProducer = new GenericPublicClientPKCEProducer(cookieStorage);
45
+
46
+ const challenge = await pkceProducer.getCodeChallenge();
47
+
48
+ return NextResponse.json({ status: "success", challenge });
49
+ }
50
+
51
+ async function performTokenExchangeAndSetCookies(
52
+ request: NextRequest,
53
+ config: AuthConfig,
54
+ code: string,
55
+ state: string,
56
+ ) {
57
+ const resolvedConfigs = resolveAuthConfig(config);
58
+ const cookieStorage = new NextjsCookieStorage(resolvedConfigs.cookies.tokens);
59
+
60
+ const callbackUrl = resolveCallbackUrl(resolvedConfigs, request.url);
61
+ try {
62
+ await resolveOAuthAccessCode(code, state, cookieStorage, {
63
+ ...resolvedConfigs,
64
+ redirectUrl: callbackUrl,
65
+ });
66
+ } catch (error) {
67
+ logger.error("Token exchange failed:", error);
68
+ throw new AuthError("Failed to authenticate user", 401);
69
+ }
70
+
71
+ const user = await getUser(cookieStorage);
72
+ if (!user) {
73
+ throw new AuthError("Failed to get user info", 401);
74
+ }
75
+
76
+ const clientStorage = new NextjsClientStorage();
77
+ const userSession = new GenericUserSession(clientStorage);
78
+ userSession.set(user);
79
+ }
80
+ async function handleCallback(
81
+ request: NextRequest,
82
+ config: AuthConfig,
83
+ ): Promise<NextResponse> {
84
+ const resolvedConfigs = resolveAuthConfig(config);
85
+ console.log("handleCallback", { request, resolvedConfigs });
86
+ const code = request.nextUrl.searchParams.get("code");
87
+ const state = request.nextUrl.searchParams.get("state") || "";
88
+ if (!code || !state) throw new AuthError("Bad parameters", 400);
89
+
90
+ // If we have a code_verifier cookie, we can do a token exchange.
91
+ // Otherwise, just render an empty page.
92
+ // The initial redirect back from the auth server does not send cookies, because the redirect is from a 3rd-party domain.
93
+ // The client will make an additional call to this route with cookies included, at which point we do the token exchange.
94
+ console.log("handleCallback", { code, state, cookies: cookies() });
95
+ if (!request.cookies.get(CodeVerifier.COOKIE_NAME)) {
96
+ console.log("handleCallback no code_verifier found", {
97
+ state,
98
+ serverTokenExchange: serverTokenExchangeFromState(`${state}`),
99
+ });
100
+ let response = new NextResponse(
101
+ `<html><body><span style="display:none">${TOKEN_EXCHANGE_TRIGGER_TEXT}</span></body></html>`,
102
+ );
103
+ // in server-side token exchange mode we need to launch a page that will trigger the token exchange
104
+ // from the same domain, allowing it access to the code_verifier cookie
105
+ // we only need to do this in redirect mode, as the iframe already triggers a client-side token exchange
106
+ // if no code-verifier cookie is found
107
+ if (state && serverTokenExchangeFromState(state)) {
108
+ console.log(
109
+ "handleCallback serverTokenExchangeFromState, launching redirect page...",
110
+ {
111
+ requestUrl: request.url,
112
+ configCallbackUrl: resolvedConfigs.callbackUrl,
113
+ },
114
+ );
115
+ // we need to replace the URL with resolved config in case the server is hosted
116
+ // behind a reverse proxy or load balancer
117
+ const requestUrl = new URL(request.url);
118
+ const fetchUrl = `${resolvedConfigs.callbackUrl}?${requestUrl.searchParams.toString()}&sameDomainServerTokenExchange=true`;
119
+ response = new NextResponse(
120
+ `<html>
121
+ <body>
122
+ <span style="display:none">
123
+ <script>
124
+ window.onload = function () {
125
+ fetch('${fetchUrl}').then((response) => {
126
+ response.json().then((jsonResponse) => {
127
+ console.log('fetch jsonResponse', jsonResponse);
128
+ if (jsonResponse.redirectUrl) {
129
+ console.log('handleCallback serverTokenExchangeFromState, redirecting');
130
+ window.location.href = jsonResponse.redirectUrl;
131
+ }
132
+ });
133
+ });
134
+ };
135
+ </script>
136
+ </span>
137
+ </body>
138
+ </html>
139
+ `,
140
+ );
141
+ }
142
+ response.headers.set("Content-Type", "text/html; charset=utf-8");
143
+ console.log(
144
+ `handleCallback no code_verifier found, returning ${TOKEN_EXCHANGE_TRIGGER_TEXT}`,
145
+ );
146
+ return response;
147
+ }
148
+
149
+ await performTokenExchangeAndSetCookies(
150
+ request,
151
+ resolvedConfigs,
152
+ code,
153
+ state,
154
+ );
155
+
156
+ if (request.url.includes("sameDomainServerTokenExchange=true")) {
157
+ console.log(
158
+ "handleCallback sameDomainServerTokenExchange = true, returnining redirectUrl",
159
+ resolvedConfigs.appUrl,
160
+ );
161
+ return NextResponse.json({
162
+ status: "success",
163
+ redirectUrl: resolvedConfigs.appUrl,
164
+ });
165
+ }
166
+
167
+ // this is the case where a 'normal' redirect is happening
168
+ if (serverTokenExchangeFromState(state)) {
169
+ console.log(
170
+ "handleCallback serverTokenExchangeFromState, redirect to config.appUrl",
171
+ resolvedConfigs.appUrl,
172
+ );
173
+ if (!resolvedConfigs.appUrl) {
174
+ throw new Error("appUrl not defined in config. Cannot redirect.");
175
+ }
176
+ return NextResponse.redirect(`${resolvedConfigs.appUrl}`);
177
+ }
178
+ // return an empty HTML response so the iframe doesn't show any response
179
+ // in the short moment between the redirect and the parent window
180
+ // acknowledging the redirect and closing the iframe
181
+ const response = new NextResponse(
182
+ `<html><span style="display:none">${TOKEN_EXCHANGE_SUCCESS_TEXT}</span></html>`,
183
+ );
184
+ response.headers.set("Content-Type", "text/html; charset=utf-8");
185
+ return response;
186
+ }
187
+
188
+ /**
189
+ * If redirectPath is an absolute path, return it as-is.
190
+ * Otherwise for relative paths, append it to the current domain.
191
+ * @param redirectPath
192
+ * @returns
193
+ */
194
+ const getAbsoluteRedirectPath = (
195
+ redirectPath: string,
196
+ currentBasePath: string,
197
+ ) => {
198
+ // Check if the redirectPath is an absolute URL
199
+ if (/^(https?:\/\/|www\.).+/i.test(redirectPath)) {
200
+ return redirectPath; // Return as-is if it's an absolute URL
201
+ }
202
+ return new URL(redirectPath, currentBasePath).href;
203
+ };
204
+
205
+ export async function handleLogout(
206
+ request: NextRequest,
207
+ config: AuthConfig,
208
+ ): Promise<NextResponse> {
209
+ const resolvedConfigs = resolveAuthConfig(config);
210
+ const defaultRedirectPath = resolvedConfigs.loginUrl ?? "/";
211
+ const redirectTarget =
212
+ new URL(request.url).searchParams.get("redirect") || defaultRedirectPath;
213
+ const isAbsoluteRedirect = /^(https?:\/\/|www\.).+/i.test(redirectTarget);
214
+ const finalRedirectUrl = getAbsoluteRedirectPath(
215
+ redirectTarget,
216
+ new URL(resolvedConfigs.appUrl ?? request.url).origin,
217
+ );
218
+
219
+ const response = NextResponse.redirect(finalRedirectUrl);
220
+
221
+ clearAuthCookies(config);
222
+
223
+ try {
224
+ revalidatePath(isAbsoluteRedirect ? finalRedirectUrl : redirectTarget);
225
+ } catch (error) {
226
+ logger.warn("Failed to revalidate path after logout:", error);
227
+ }
228
+
229
+ return response;
230
+ }
231
+
232
+ /**
233
+ * Creates an authentication handler for Next.js API routes
234
+ *
235
+ * Usage:
236
+ * ```ts
237
+ * // app/api/auth/[...civicauth]/route.ts
238
+ * import { handler } from '@civic/auth/nextjs'
239
+ * export const GET = handler({
240
+ * // optional config overrides
241
+ * })
242
+ * ```
243
+ */
244
+ export const handler =
245
+ (authConfig = {}) =>
246
+ async (request: NextRequest): Promise<NextResponse> => {
247
+ const config = resolveAuthConfig(authConfig);
248
+
249
+ try {
250
+ const pathname = request.nextUrl.pathname;
251
+ const pathSegments = pathname.split("/");
252
+ const lastSegment = pathSegments[pathSegments.length - 1];
253
+
254
+ switch (lastSegment) {
255
+ case "challenge":
256
+ return await handleChallenge(config);
257
+ case "callback":
258
+ return await handleCallback(request, config);
259
+ case "logout":
260
+ return await handleLogout(request, config);
261
+ default:
262
+ throw new AuthError(`Invalid auth route: ${pathname}`, 404);
263
+ }
264
+ } catch (error) {
265
+ logger.error("Auth handler error:", error);
266
+
267
+ const status = error instanceof AuthError ? error.status : 500;
268
+ const message =
269
+ error instanceof Error ? error.message : "Authentication failed";
270
+
271
+ const response = NextResponse.json({ error: message }, { status });
272
+
273
+ clearAuthCookies(config);
274
+ return response;
275
+ }
276
+ };
@@ -0,0 +1,10 @@
1
+ import type { AuthConfigWithDefaults } from "@/nextjs/config.js";
2
+
3
+ export const resolveCallbackUrl = (
4
+ config: AuthConfigWithDefaults,
5
+ alternativeUrl?: string,
6
+ ): string => {
7
+ const baseUrl = config.appUrl ?? alternativeUrl;
8
+ const callbackUrl = new URL(config?.callbackUrl, baseUrl).toString();
9
+ return callbackUrl.toString();
10
+ };
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ import React from "react";
3
+ import { cn } from "@/utils.js";
4
+ import type { DisplayMode } from "@/types.js";
5
+ import { useUser } from "@/reactjs/hooks/useUser.js";
6
+
7
+ const SignInButton = ({
8
+ displayMode,
9
+ className,
10
+ }: {
11
+ displayMode?: DisplayMode;
12
+ className?: string;
13
+ }) => {
14
+ const { signIn } = useUser();
15
+
16
+ return (
17
+ <button
18
+ data-testid="sign-in-button"
19
+ className={cn(
20
+ "cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50",
21
+ className,
22
+ )}
23
+ onClick={() => signIn(displayMode)}
24
+ >
25
+ Sign In
26
+ </button>
27
+ );
28
+ };
29
+
30
+ export { SignInButton };
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ import React from "react";
3
+ import { cn } from "@/utils.js";
4
+ import { useUser } from "@/reactjs/hooks/useUser.js";
5
+
6
+ const SignOutButton = ({ className }: { className?: string }) => {
7
+ const { signOut } = useUser();
8
+
9
+ return (
10
+ <button
11
+ className={cn(
12
+ "cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50",
13
+ className,
14
+ )}
15
+ onClick={() => signOut()}
16
+ >
17
+ Sign Out
18
+ </button>
19
+ );
20
+ };
21
+
22
+ export { SignOutButton };