@civic/auth 0.1.2 → 0.1.4-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (737) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +329 -116
  3. package/dist/cjs/browser/storage.d.ts +3 -0
  4. package/dist/cjs/browser/storage.d.ts.map +1 -1
  5. package/dist/cjs/browser/storage.js +8 -0
  6. package/dist/cjs/browser/storage.js.map +1 -1
  7. package/dist/cjs/lib/cookies.d.ts +2 -2
  8. package/dist/cjs/lib/cookies.d.ts.map +1 -1
  9. package/dist/cjs/lib/cookies.js +7 -5
  10. package/dist/cjs/lib/cookies.js.map +1 -1
  11. package/dist/cjs/lib/postMessage.js +1 -1
  12. package/dist/cjs/lib/postMessage.js.map +1 -1
  13. package/dist/cjs/lib/windowUtil.d.ts.map +1 -1
  14. package/dist/cjs/lib/windowUtil.js +1 -0
  15. package/dist/cjs/lib/windowUtil.js.map +1 -1
  16. package/dist/cjs/nextjs/config.d.ts.map +1 -1
  17. package/dist/cjs/nextjs/config.js +12 -0
  18. package/dist/cjs/nextjs/config.js.map +1 -1
  19. package/dist/cjs/nextjs/hooks/index.d.ts +1 -1
  20. package/dist/cjs/nextjs/hooks/index.d.ts.map +1 -1
  21. package/dist/cjs/nextjs/hooks/index.js +3 -3
  22. package/dist/cjs/nextjs/hooks/index.js.map +1 -1
  23. package/dist/cjs/nextjs/hooks/useUserCookie.d.ts.map +1 -1
  24. package/dist/cjs/nextjs/hooks/useUserCookie.js +43 -14
  25. package/dist/cjs/nextjs/hooks/useUserCookie.js.map +1 -1
  26. package/dist/cjs/nextjs/providers/NextAuthProvider.d.ts +5 -1
  27. package/dist/cjs/nextjs/providers/NextAuthProvider.d.ts.map +1 -1
  28. package/dist/cjs/nextjs/providers/NextAuthProvider.js +74 -35
  29. package/dist/cjs/nextjs/providers/NextAuthProvider.js.map +1 -1
  30. package/dist/cjs/reactjs/components/UserButton.js +20 -10
  31. package/dist/cjs/reactjs/components/UserButton.js.map +1 -1
  32. package/dist/cjs/reactjs/hooks/index.d.ts +0 -1
  33. package/dist/cjs/reactjs/hooks/index.d.ts.map +1 -1
  34. package/dist/cjs/reactjs/hooks/index.js +1 -3
  35. package/dist/cjs/reactjs/hooks/index.js.map +1 -1
  36. package/dist/cjs/services/AuthenticationService.d.ts +4 -1
  37. package/dist/cjs/services/AuthenticationService.d.ts.map +1 -1
  38. package/dist/cjs/services/AuthenticationService.js +38 -7
  39. package/dist/cjs/services/AuthenticationService.js.map +1 -1
  40. package/dist/cjs/shared/components/BlockDisplay.d.ts +7 -0
  41. package/dist/cjs/shared/components/BlockDisplay.d.ts.map +1 -0
  42. package/dist/cjs/shared/components/BlockDisplay.js +31 -0
  43. package/dist/cjs/shared/components/BlockDisplay.js.map +1 -0
  44. package/dist/cjs/shared/components/CivicAuthIframe.js +17 -7
  45. package/dist/cjs/shared/components/CivicAuthIframe.js.map +1 -1
  46. package/dist/cjs/shared/components/CivicAuthIframeContainer.d.ts.map +1 -1
  47. package/dist/cjs/shared/components/CivicAuthIframeContainer.js +39 -20
  48. package/dist/cjs/shared/components/CivicAuthIframeContainer.js.map +1 -1
  49. package/dist/cjs/shared/components/IFrameAndLoading.d.ts +7 -0
  50. package/dist/cjs/shared/components/IFrameAndLoading.d.ts.map +1 -0
  51. package/dist/cjs/shared/components/IFrameAndLoading.js +28 -0
  52. package/dist/cjs/shared/components/IFrameAndLoading.js.map +1 -0
  53. package/dist/cjs/shared/hooks/index.d.ts +5 -1
  54. package/dist/cjs/shared/hooks/index.d.ts.map +1 -1
  55. package/dist/cjs/shared/hooks/index.js +11 -3
  56. package/dist/cjs/shared/hooks/index.js.map +1 -1
  57. package/dist/cjs/shared/hooks/useCivicAuthConfig.d.ts +3 -0
  58. package/dist/cjs/shared/hooks/useCivicAuthConfig.d.ts.map +1 -0
  59. package/dist/cjs/shared/hooks/useCivicAuthConfig.js +13 -0
  60. package/dist/cjs/shared/hooks/useCivicAuthConfig.js.map +1 -0
  61. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.d.ts +3 -0
  62. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.d.ts.map +1 -0
  63. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.js +16 -0
  64. package/dist/cjs/shared/hooks/useClientTokenExchangeSession.js.map +1 -0
  65. package/dist/cjs/shared/hooks/useCurrentUrl.d.ts +3 -0
  66. package/dist/cjs/shared/hooks/useCurrentUrl.d.ts.map +1 -0
  67. package/dist/cjs/shared/hooks/useCurrentUrl.js +27 -0
  68. package/dist/cjs/shared/hooks/useCurrentUrl.js.map +1 -0
  69. package/dist/cjs/shared/hooks/useIsInIframe.d.ts +3 -0
  70. package/dist/cjs/shared/hooks/useIsInIframe.d.ts.map +1 -0
  71. package/dist/cjs/shared/hooks/useIsInIframe.js +17 -0
  72. package/dist/cjs/shared/hooks/useIsInIframe.js.map +1 -0
  73. package/dist/cjs/shared/hooks/useOAuthEndpoints.d.ts +4 -0
  74. package/dist/cjs/shared/hooks/useOAuthEndpoints.d.ts.map +1 -0
  75. package/dist/cjs/shared/hooks/useOAuthEndpoints.js +17 -0
  76. package/dist/cjs/shared/hooks/useOAuthEndpoints.js.map +1 -0
  77. package/dist/cjs/shared/hooks/useRefresh.d.ts +4 -0
  78. package/dist/cjs/shared/hooks/useRefresh.d.ts.map +1 -0
  79. package/dist/cjs/shared/hooks/useRefresh.js +41 -0
  80. package/dist/cjs/shared/hooks/useRefresh.js.map +1 -0
  81. package/dist/cjs/shared/hooks/useSession.d.ts +1 -1
  82. package/dist/cjs/shared/hooks/useSession.d.ts.map +1 -1
  83. package/dist/cjs/shared/hooks/useSignIn.d.ts +14 -0
  84. package/dist/cjs/shared/hooks/useSignIn.d.ts.map +1 -0
  85. package/dist/cjs/shared/hooks/useSignIn.js +74 -0
  86. package/dist/cjs/shared/hooks/useSignIn.js.map +1 -0
  87. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.d.ts +4 -0
  88. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  89. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.js +30 -0
  90. package/dist/cjs/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  91. package/dist/cjs/shared/lib/types.d.ts +14 -1
  92. package/dist/cjs/shared/lib/types.d.ts.map +1 -1
  93. package/dist/cjs/shared/lib/types.js +2 -0
  94. package/dist/cjs/shared/lib/types.js.map +1 -1
  95. package/dist/cjs/shared/lib/util.d.ts.map +1 -1
  96. package/dist/cjs/shared/lib/util.js +27 -9
  97. package/dist/cjs/shared/lib/util.js.map +1 -1
  98. package/dist/cjs/shared/providers/AuthProvider.d.ts +3 -2
  99. package/dist/cjs/shared/providers/AuthProvider.d.ts.map +1 -1
  100. package/dist/cjs/shared/providers/AuthProvider.js +53 -244
  101. package/dist/cjs/shared/providers/AuthProvider.js.map +1 -1
  102. package/dist/cjs/shared/providers/CivicAuthConfigContext.d.ts +16 -0
  103. package/dist/cjs/shared/providers/CivicAuthConfigContext.d.ts.map +1 -0
  104. package/dist/cjs/shared/providers/CivicAuthConfigContext.js +80 -0
  105. package/dist/cjs/shared/providers/CivicAuthConfigContext.js.map +1 -0
  106. package/dist/cjs/shared/providers/CivicAuthProvider.d.ts.map +1 -1
  107. package/dist/cjs/shared/providers/CivicAuthProvider.js +23 -6
  108. package/dist/cjs/shared/providers/CivicAuthProvider.js.map +1 -1
  109. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.d.ts +17 -0
  110. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.d.ts.map +1 -0
  111. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.js +183 -0
  112. package/dist/cjs/shared/providers/ClientTokenExchangeSessionProvider.js.map +1 -0
  113. package/dist/cjs/shared/providers/IframeProvider.d.ts +7 -4
  114. package/dist/cjs/shared/providers/IframeProvider.d.ts.map +1 -1
  115. package/dist/cjs/shared/providers/IframeProvider.js +37 -9
  116. package/dist/cjs/shared/providers/IframeProvider.js.map +1 -1
  117. package/dist/cjs/shared/providers/SessionProvider.d.ts +10 -4
  118. package/dist/cjs/shared/providers/SessionProvider.d.ts.map +1 -1
  119. package/dist/cjs/shared/providers/SessionProvider.js +32 -12
  120. package/dist/cjs/shared/providers/SessionProvider.js.map +1 -1
  121. package/dist/cjs/shared/providers/TokenProvider.d.ts.map +1 -1
  122. package/dist/cjs/shared/providers/TokenProvider.js +29 -30
  123. package/dist/cjs/shared/providers/TokenProvider.js.map +1 -1
  124. package/dist/cjs/shared/providers/UserProvider.d.ts +4 -3
  125. package/dist/cjs/shared/providers/UserProvider.d.ts.map +1 -1
  126. package/dist/cjs/shared/providers/UserProvider.js +46 -25
  127. package/dist/cjs/shared/providers/UserProvider.js.map +1 -1
  128. package/dist/cjs/types.d.ts +1 -0
  129. package/dist/cjs/types.d.ts.map +1 -1
  130. package/dist/cjs/types.js.map +1 -1
  131. package/dist/cjs/utils.d.ts.map +1 -1
  132. package/dist/esm/browser/storage.d.ts +3 -0
  133. package/dist/esm/browser/storage.d.ts.map +1 -1
  134. package/dist/esm/browser/storage.js +8 -0
  135. package/dist/esm/browser/storage.js.map +1 -1
  136. package/dist/esm/lib/cookies.d.ts +2 -2
  137. package/dist/esm/lib/cookies.d.ts.map +1 -1
  138. package/dist/esm/lib/cookies.js +7 -5
  139. package/dist/esm/lib/cookies.js.map +1 -1
  140. package/dist/esm/lib/postMessage.js +1 -1
  141. package/dist/esm/lib/postMessage.js.map +1 -1
  142. package/dist/esm/lib/windowUtil.d.ts.map +1 -1
  143. package/dist/esm/lib/windowUtil.js +1 -0
  144. package/dist/esm/lib/windowUtil.js.map +1 -1
  145. package/dist/esm/nextjs/config.d.ts.map +1 -1
  146. package/dist/esm/nextjs/config.js +12 -0
  147. package/dist/esm/nextjs/config.js.map +1 -1
  148. package/dist/esm/nextjs/hooks/index.d.ts +1 -1
  149. package/dist/esm/nextjs/hooks/index.d.ts.map +1 -1
  150. package/dist/esm/nextjs/hooks/index.js +1 -1
  151. package/dist/esm/nextjs/hooks/index.js.map +1 -1
  152. package/dist/esm/nextjs/hooks/useUserCookie.d.ts.map +1 -1
  153. package/dist/esm/nextjs/hooks/useUserCookie.js +45 -16
  154. package/dist/esm/nextjs/hooks/useUserCookie.js.map +1 -1
  155. package/dist/esm/nextjs/providers/NextAuthProvider.d.ts +5 -1
  156. package/dist/esm/nextjs/providers/NextAuthProvider.d.ts.map +1 -1
  157. package/dist/esm/nextjs/providers/NextAuthProvider.js +59 -30
  158. package/dist/esm/nextjs/providers/NextAuthProvider.js.map +1 -1
  159. package/dist/esm/reactjs/components/UserButton.js +3 -3
  160. package/dist/esm/reactjs/components/UserButton.js.map +1 -1
  161. package/dist/esm/reactjs/hooks/index.d.ts +0 -1
  162. package/dist/esm/reactjs/hooks/index.d.ts.map +1 -1
  163. package/dist/esm/reactjs/hooks/index.js +0 -1
  164. package/dist/esm/reactjs/hooks/index.js.map +1 -1
  165. package/dist/esm/services/AuthenticationService.d.ts +4 -1
  166. package/dist/esm/services/AuthenticationService.d.ts.map +1 -1
  167. package/dist/esm/services/AuthenticationService.js +39 -8
  168. package/dist/esm/services/AuthenticationService.js.map +1 -1
  169. package/dist/esm/shared/components/BlockDisplay.d.ts +7 -0
  170. package/dist/esm/shared/components/BlockDisplay.d.ts.map +1 -0
  171. package/dist/esm/shared/components/BlockDisplay.js +25 -0
  172. package/dist/esm/shared/components/BlockDisplay.js.map +1 -0
  173. package/dist/esm/shared/components/CivicAuthIframeContainer.d.ts.map +1 -1
  174. package/dist/esm/shared/components/CivicAuthIframeContainer.js +23 -14
  175. package/dist/esm/shared/components/CivicAuthIframeContainer.js.map +1 -1
  176. package/dist/esm/shared/components/IFrameAndLoading.d.ts +7 -0
  177. package/dist/esm/shared/components/IFrameAndLoading.d.ts.map +1 -0
  178. package/dist/esm/shared/components/IFrameAndLoading.js +22 -0
  179. package/dist/esm/shared/components/IFrameAndLoading.js.map +1 -0
  180. package/dist/esm/shared/hooks/index.d.ts +5 -1
  181. package/dist/esm/shared/hooks/index.d.ts.map +1 -1
  182. package/dist/esm/shared/hooks/index.js +5 -1
  183. package/dist/esm/shared/hooks/index.js.map +1 -1
  184. package/dist/esm/shared/hooks/useCivicAuthConfig.d.ts +3 -0
  185. package/dist/esm/shared/hooks/useCivicAuthConfig.d.ts.map +1 -0
  186. package/dist/esm/shared/hooks/useCivicAuthConfig.js +10 -0
  187. package/dist/esm/shared/hooks/useCivicAuthConfig.js.map +1 -0
  188. package/dist/esm/shared/hooks/useClientTokenExchangeSession.d.ts +3 -0
  189. package/dist/esm/shared/hooks/useClientTokenExchangeSession.d.ts.map +1 -0
  190. package/dist/esm/shared/hooks/useClientTokenExchangeSession.js +13 -0
  191. package/dist/esm/shared/hooks/useClientTokenExchangeSession.js.map +1 -0
  192. package/dist/esm/shared/hooks/useCurrentUrl.d.ts +3 -0
  193. package/dist/esm/shared/hooks/useCurrentUrl.d.ts.map +1 -0
  194. package/dist/esm/shared/hooks/useCurrentUrl.js +24 -0
  195. package/dist/esm/shared/hooks/useCurrentUrl.js.map +1 -0
  196. package/dist/esm/shared/hooks/useIsInIframe.d.ts +3 -0
  197. package/dist/esm/shared/hooks/useIsInIframe.d.ts.map +1 -0
  198. package/dist/esm/shared/hooks/useIsInIframe.js +14 -0
  199. package/dist/esm/shared/hooks/useIsInIframe.js.map +1 -0
  200. package/dist/esm/shared/hooks/useOAuthEndpoints.d.ts +4 -0
  201. package/dist/esm/shared/hooks/useOAuthEndpoints.d.ts.map +1 -0
  202. package/dist/esm/shared/hooks/useOAuthEndpoints.js +14 -0
  203. package/dist/esm/shared/hooks/useOAuthEndpoints.js.map +1 -0
  204. package/dist/esm/shared/hooks/useRefresh.d.ts +4 -0
  205. package/dist/esm/shared/hooks/useRefresh.d.ts.map +1 -0
  206. package/dist/esm/shared/hooks/useRefresh.js +38 -0
  207. package/dist/esm/shared/hooks/useRefresh.js.map +1 -0
  208. package/dist/esm/shared/hooks/useSession.d.ts +1 -1
  209. package/dist/esm/shared/hooks/useSession.d.ts.map +1 -1
  210. package/dist/esm/shared/hooks/useSignIn.d.ts +14 -0
  211. package/dist/esm/shared/hooks/useSignIn.d.ts.map +1 -0
  212. package/dist/esm/shared/hooks/useSignIn.js +71 -0
  213. package/dist/esm/shared/hooks/useSignIn.js.map +1 -0
  214. package/dist/esm/shared/lib/GenericAuthenticationRefresher.d.ts +4 -0
  215. package/dist/esm/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  216. package/dist/esm/shared/lib/GenericAuthenticationRefresher.js +30 -0
  217. package/dist/esm/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  218. package/dist/esm/shared/lib/types.d.ts +14 -1
  219. package/dist/esm/shared/lib/types.d.ts.map +1 -1
  220. package/dist/esm/shared/lib/types.js +2 -0
  221. package/dist/esm/shared/lib/types.js.map +1 -1
  222. package/dist/esm/shared/lib/util.d.ts.map +1 -1
  223. package/dist/esm/shared/lib/util.js +10 -2
  224. package/dist/esm/shared/lib/util.js.map +1 -1
  225. package/dist/esm/shared/providers/AuthProvider.d.ts +3 -2
  226. package/dist/esm/shared/providers/AuthProvider.d.ts.map +1 -1
  227. package/dist/esm/shared/providers/AuthProvider.js +37 -238
  228. package/dist/esm/shared/providers/AuthProvider.js.map +1 -1
  229. package/dist/esm/shared/providers/CivicAuthConfigContext.d.ts +16 -0
  230. package/dist/esm/shared/providers/CivicAuthConfigContext.d.ts.map +1 -0
  231. package/dist/esm/shared/providers/CivicAuthConfigContext.js +43 -0
  232. package/dist/esm/shared/providers/CivicAuthConfigContext.js.map +1 -0
  233. package/dist/esm/shared/providers/CivicAuthProvider.d.ts.map +1 -1
  234. package/dist/esm/shared/providers/CivicAuthProvider.js +23 -6
  235. package/dist/esm/shared/providers/CivicAuthProvider.js.map +1 -1
  236. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.d.ts +17 -0
  237. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.d.ts.map +1 -0
  238. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.js +146 -0
  239. package/dist/esm/shared/providers/ClientTokenExchangeSessionProvider.js.map +1 -0
  240. package/dist/esm/shared/providers/IframeProvider.d.ts +7 -4
  241. package/dist/esm/shared/providers/IframeProvider.d.ts.map +1 -1
  242. package/dist/esm/shared/providers/IframeProvider.js +21 -3
  243. package/dist/esm/shared/providers/IframeProvider.js.map +1 -1
  244. package/dist/esm/shared/providers/SessionProvider.d.ts +10 -4
  245. package/dist/esm/shared/providers/SessionProvider.d.ts.map +1 -1
  246. package/dist/esm/shared/providers/SessionProvider.js +15 -5
  247. package/dist/esm/shared/providers/SessionProvider.js.map +1 -1
  248. package/dist/esm/shared/providers/TokenProvider.d.ts.map +1 -1
  249. package/dist/esm/shared/providers/TokenProvider.js +13 -24
  250. package/dist/esm/shared/providers/TokenProvider.js.map +1 -1
  251. package/dist/esm/shared/providers/UserProvider.d.ts +4 -3
  252. package/dist/esm/shared/providers/UserProvider.d.ts.map +1 -1
  253. package/dist/esm/shared/providers/UserProvider.js +30 -19
  254. package/dist/esm/shared/providers/UserProvider.js.map +1 -1
  255. package/dist/esm/types.d.ts +1 -0
  256. package/dist/esm/types.d.ts.map +1 -1
  257. package/dist/esm/types.js.map +1 -1
  258. package/dist/esm/utils.d.ts.map +1 -1
  259. package/dist/src/nextjs/hooks/useUserCookie.d.ts.map +1 -1
  260. package/dist/src/nextjs/hooks/useUserCookie.js +45 -16
  261. package/dist/src/nextjs/hooks/useUserCookie.js.map +1 -1
  262. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  263. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  264. package/dist/tsconfig.tsbuildinfo +1 -1
  265. package/package.json +9 -3
  266. package/.eslintignore +0 -3
  267. package/.eslintrc.json +0 -10
  268. package/.prettierignore +0 -3
  269. package/.prettierrc +0 -1
  270. package/.turbo/turbo-build.log +0 -13
  271. package/.turbo/turbo-lint$colon$fix.log +0 -10
  272. package/.turbo/turbo-test.log +0 -1153
  273. package/dist/cjs/nextjs/hooks/useTokenCookie.d.ts +0 -3
  274. package/dist/cjs/nextjs/hooks/useTokenCookie.d.ts.map +0 -1
  275. package/dist/cjs/nextjs/hooks/useTokenCookie.js +0 -41
  276. package/dist/cjs/nextjs/hooks/useTokenCookie.js.map +0 -1
  277. package/dist/cjs/shared/hooks/useConfig.d.ts +0 -3
  278. package/dist/cjs/shared/hooks/useConfig.d.ts.map +0 -1
  279. package/dist/cjs/shared/hooks/useConfig.js +0 -16
  280. package/dist/cjs/shared/hooks/useConfig.js.map +0 -1
  281. package/dist/cjs/shared/providers/ConfigProvider.d.ts +0 -21
  282. package/dist/cjs/shared/providers/ConfigProvider.d.ts.map +0 -1
  283. package/dist/cjs/shared/providers/ConfigProvider.js +0 -46
  284. package/dist/cjs/shared/providers/ConfigProvider.js.map +0 -1
  285. package/dist/esm/nextjs/hooks/useTokenCookie.d.ts +0 -3
  286. package/dist/esm/nextjs/hooks/useTokenCookie.d.ts.map +0 -1
  287. package/dist/esm/nextjs/hooks/useTokenCookie.js +0 -37
  288. package/dist/esm/nextjs/hooks/useTokenCookie.js.map +0 -1
  289. package/dist/esm/shared/hooks/useConfig.d.ts +0 -3
  290. package/dist/esm/shared/hooks/useConfig.d.ts.map +0 -1
  291. package/dist/esm/shared/hooks/useConfig.js +0 -13
  292. package/dist/esm/shared/hooks/useConfig.js.map +0 -1
  293. package/dist/esm/shared/providers/ConfigProvider.d.ts +0 -21
  294. package/dist/esm/shared/providers/ConfigProvider.d.ts.map +0 -1
  295. package/dist/esm/shared/providers/ConfigProvider.js +0 -19
  296. package/dist/esm/shared/providers/ConfigProvider.js.map +0 -1
  297. package/dist/src/browser/storage.d.ts +0 -6
  298. package/dist/src/browser/storage.d.ts.map +0 -1
  299. package/dist/src/browser/storage.js +0 -9
  300. package/dist/src/browser/storage.js.map +0 -1
  301. package/dist/src/config.d.ts +0 -3
  302. package/dist/src/config.d.ts.map +0 -1
  303. package/dist/src/config.js +0 -5
  304. package/dist/src/config.js.map +0 -1
  305. package/dist/src/constants.d.ts +0 -9
  306. package/dist/src/constants.d.ts.map +0 -1
  307. package/dist/src/constants.js +0 -17
  308. package/dist/src/constants.js.map +0 -1
  309. package/dist/src/index.d.ts +0 -4
  310. package/dist/src/index.d.ts.map +0 -1
  311. package/dist/src/index.js +0 -2
  312. package/dist/src/index.js.map +0 -1
  313. package/dist/src/lib/cookies.d.ts +0 -7
  314. package/dist/src/lib/cookies.d.ts.map +0 -1
  315. package/dist/src/lib/cookies.js +0 -23
  316. package/dist/src/lib/cookies.js.map +0 -1
  317. package/dist/src/lib/jwt.d.ts +0 -3
  318. package/dist/src/lib/jwt.d.ts.map +0 -1
  319. package/dist/src/lib/jwt.js +0 -9
  320. package/dist/src/lib/jwt.js.map +0 -1
  321. package/dist/src/lib/logger.d.ts +0 -26
  322. package/dist/src/lib/logger.d.ts.map +0 -1
  323. package/dist/src/lib/logger.js +0 -55
  324. package/dist/src/lib/logger.js.map +0 -1
  325. package/dist/src/lib/oauth.d.ts +0 -19
  326. package/dist/src/lib/oauth.d.ts.map +0 -1
  327. package/dist/src/lib/oauth.js +0 -60
  328. package/dist/src/lib/oauth.js.map +0 -1
  329. package/dist/src/lib/postMessage.d.ts +0 -4
  330. package/dist/src/lib/postMessage.d.ts.map +0 -1
  331. package/dist/src/lib/postMessage.js +0 -15
  332. package/dist/src/lib/postMessage.js.map +0 -1
  333. package/dist/src/lib/windowUtil.d.ts +0 -4
  334. package/dist/src/lib/windowUtil.d.ts.map +0 -1
  335. package/dist/src/lib/windowUtil.js +0 -30
  336. package/dist/src/lib/windowUtil.js.map +0 -1
  337. package/dist/src/nextjs/GetUser.d.ts +0 -6
  338. package/dist/src/nextjs/GetUser.d.ts.map +0 -1
  339. package/dist/src/nextjs/GetUser.js +0 -18
  340. package/dist/src/nextjs/GetUser.js.map +0 -1
  341. package/dist/src/nextjs/config.d.ts +0 -178
  342. package/dist/src/nextjs/config.d.ts.map +0 -1
  343. package/dist/src/nextjs/config.js +0 -161
  344. package/dist/src/nextjs/config.js.map +0 -1
  345. package/dist/src/nextjs/cookies.d.ts +0 -30
  346. package/dist/src/nextjs/cookies.d.ts.map +0 -1
  347. package/dist/src/nextjs/cookies.js +0 -112
  348. package/dist/src/nextjs/cookies.js.map +0 -1
  349. package/dist/src/nextjs/hooks/index.d.ts +0 -2
  350. package/dist/src/nextjs/hooks/index.d.ts.map +0 -1
  351. package/dist/src/nextjs/hooks/index.js +0 -2
  352. package/dist/src/nextjs/hooks/index.js.map +0 -1
  353. package/dist/src/nextjs/hooks/useTokenCookie.d.ts +0 -3
  354. package/dist/src/nextjs/hooks/useTokenCookie.d.ts.map +0 -1
  355. package/dist/src/nextjs/hooks/useTokenCookie.js +0 -37
  356. package/dist/src/nextjs/hooks/useTokenCookie.js.map +0 -1
  357. package/dist/src/nextjs/hooks/useUserCookie.d.ts +0 -3
  358. package/dist/src/nextjs/index.d.ts +0 -7
  359. package/dist/src/nextjs/index.d.ts.map +0 -1
  360. package/dist/src/nextjs/index.js +0 -6
  361. package/dist/src/nextjs/index.js.map +0 -1
  362. package/dist/src/nextjs/middleware/index.d.ts +0 -2
  363. package/dist/src/nextjs/middleware/index.d.ts.map +0 -1
  364. package/dist/src/nextjs/middleware/index.js +0 -2
  365. package/dist/src/nextjs/middleware/index.js.map +0 -1
  366. package/dist/src/nextjs/middleware.d.ts +0 -59
  367. package/dist/src/nextjs/middleware.d.ts.map +0 -1
  368. package/dist/src/nextjs/middleware.js +0 -107
  369. package/dist/src/nextjs/middleware.js.map +0 -1
  370. package/dist/src/nextjs/providers/NextAuthProvider.d.ts +0 -9
  371. package/dist/src/nextjs/providers/NextAuthProvider.d.ts.map +0 -1
  372. package/dist/src/nextjs/providers/NextAuthProvider.js +0 -50
  373. package/dist/src/nextjs/providers/NextAuthProvider.js.map +0 -1
  374. package/dist/src/nextjs/routeHandler.d.ts +0 -18
  375. package/dist/src/nextjs/routeHandler.d.ts.map +0 -1
  376. package/dist/src/nextjs/routeHandler.js +0 -212
  377. package/dist/src/nextjs/routeHandler.js.map +0 -1
  378. package/dist/src/nextjs/utils.d.ts +0 -3
  379. package/dist/src/nextjs/utils.d.ts.map +0 -1
  380. package/dist/src/nextjs/utils.js +0 -5
  381. package/dist/src/nextjs/utils.js.map +0 -1
  382. package/dist/src/reactjs/components/SignInButton.d.ts +0 -8
  383. package/dist/src/reactjs/components/SignInButton.d.ts.map +0 -1
  384. package/dist/src/reactjs/components/SignInButton.js +0 -14
  385. package/dist/src/reactjs/components/SignInButton.js.map +0 -1
  386. package/dist/src/reactjs/components/SignOutButton.d.ts +0 -6
  387. package/dist/src/reactjs/components/SignOutButton.d.ts.map +0 -1
  388. package/dist/src/reactjs/components/SignOutButton.js +0 -14
  389. package/dist/src/reactjs/components/SignOutButton.js.map +0 -1
  390. package/dist/src/reactjs/components/UserButton.d.ts +0 -8
  391. package/dist/src/reactjs/components/UserButton.d.ts.map +0 -1
  392. package/dist/src/reactjs/components/UserButton.js +0 -118
  393. package/dist/src/reactjs/components/UserButton.js.map +0 -1
  394. package/dist/src/reactjs/components/index.d.ts +0 -6
  395. package/dist/src/reactjs/components/index.d.ts.map +0 -1
  396. package/dist/src/reactjs/components/index.js +0 -6
  397. package/dist/src/reactjs/components/index.js.map +0 -1
  398. package/dist/src/reactjs/hooks/index.d.ts +0 -7
  399. package/dist/src/reactjs/hooks/index.d.ts.map +0 -1
  400. package/dist/src/reactjs/hooks/index.js +0 -7
  401. package/dist/src/reactjs/hooks/index.js.map +0 -1
  402. package/dist/src/reactjs/hooks/useAuth.d.ts +0 -3
  403. package/dist/src/reactjs/hooks/useAuth.d.ts.map +0 -1
  404. package/dist/src/reactjs/hooks/useAuth.js +0 -12
  405. package/dist/src/reactjs/hooks/useAuth.js.map +0 -1
  406. package/dist/src/reactjs/hooks/useUser.d.ts +0 -4
  407. package/dist/src/reactjs/hooks/useUser.d.ts.map +0 -1
  408. package/dist/src/reactjs/hooks/useUser.js +0 -12
  409. package/dist/src/reactjs/hooks/useUser.js.map +0 -1
  410. package/dist/src/reactjs/index.d.ts +0 -6
  411. package/dist/src/reactjs/index.d.ts.map +0 -1
  412. package/dist/src/reactjs/index.js +0 -8
  413. package/dist/src/reactjs/index.js.map +0 -1
  414. package/dist/src/reactjs/providers/index.d.ts +0 -8
  415. package/dist/src/reactjs/providers/index.d.ts.map +0 -1
  416. package/dist/src/reactjs/providers/index.js +0 -7
  417. package/dist/src/reactjs/providers/index.js.map +0 -1
  418. package/dist/src/server/ServerAuthenticationResolver.d.ts +0 -19
  419. package/dist/src/server/ServerAuthenticationResolver.d.ts.map +0 -1
  420. package/dist/src/server/ServerAuthenticationResolver.js +0 -61
  421. package/dist/src/server/ServerAuthenticationResolver.js.map +0 -1
  422. package/dist/src/server/config.d.ts +0 -9
  423. package/dist/src/server/config.d.ts.map +0 -1
  424. package/dist/src/server/config.js +0 -2
  425. package/dist/src/server/config.js.map +0 -1
  426. package/dist/src/server/index.d.ts +0 -7
  427. package/dist/src/server/index.d.ts.map +0 -1
  428. package/dist/src/server/index.js +0 -5
  429. package/dist/src/server/index.js.map +0 -1
  430. package/dist/src/server/login.d.ts +0 -17
  431. package/dist/src/server/login.d.ts.map +0 -1
  432. package/dist/src/server/login.js +0 -37
  433. package/dist/src/server/login.js.map +0 -1
  434. package/dist/src/server/refresh.d.ts +0 -7
  435. package/dist/src/server/refresh.d.ts.map +0 -1
  436. package/dist/src/server/refresh.js +0 -13
  437. package/dist/src/server/refresh.js.map +0 -1
  438. package/dist/src/services/AuthenticationService.d.ts +0 -87
  439. package/dist/src/services/AuthenticationService.d.ts.map +0 -1
  440. package/dist/src/services/AuthenticationService.js +0 -212
  441. package/dist/src/services/AuthenticationService.js.map +0 -1
  442. package/dist/src/services/PKCE.d.ts +0 -20
  443. package/dist/src/services/PKCE.d.ts.map +0 -1
  444. package/dist/src/services/PKCE.js +0 -44
  445. package/dist/src/services/PKCE.js.map +0 -1
  446. package/dist/src/services/types.d.ts +0 -23
  447. package/dist/src/services/types.d.ts.map +0 -1
  448. package/dist/src/services/types.js +0 -7
  449. package/dist/src/services/types.js.map +0 -1
  450. package/dist/src/shared/components/CivicAuthIframe.d.ts +0 -8
  451. package/dist/src/shared/components/CivicAuthIframe.d.ts.map +0 -1
  452. package/dist/src/shared/components/CivicAuthIframe.js +0 -9
  453. package/dist/src/shared/components/CivicAuthIframe.js.map +0 -1
  454. package/dist/src/shared/components/CivicAuthIframeContainer.d.ts +0 -9
  455. package/dist/src/shared/components/CivicAuthIframeContainer.d.ts.map +0 -1
  456. package/dist/src/shared/components/CivicAuthIframeContainer.js +0 -129
  457. package/dist/src/shared/components/CivicAuthIframeContainer.js.map +0 -1
  458. package/dist/src/shared/components/CloseIcon.d.ts +0 -4
  459. package/dist/src/shared/components/CloseIcon.d.ts.map +0 -1
  460. package/dist/src/shared/components/CloseIcon.js +0 -6
  461. package/dist/src/shared/components/CloseIcon.js.map +0 -1
  462. package/dist/src/shared/components/LoadingIcon.d.ts +0 -4
  463. package/dist/src/shared/components/LoadingIcon.d.ts.map +0 -1
  464. package/dist/src/shared/components/LoadingIcon.js +0 -30
  465. package/dist/src/shared/components/LoadingIcon.js.map +0 -1
  466. package/dist/src/shared/hooks/index.d.ts +0 -5
  467. package/dist/src/shared/hooks/index.d.ts.map +0 -1
  468. package/dist/src/shared/hooks/index.js +0 -5
  469. package/dist/src/shared/hooks/index.js.map +0 -1
  470. package/dist/src/shared/hooks/useAuth.d.ts +0 -3
  471. package/dist/src/shared/hooks/useAuth.d.ts.map +0 -1
  472. package/dist/src/shared/hooks/useAuth.js +0 -12
  473. package/dist/src/shared/hooks/useAuth.js.map +0 -1
  474. package/dist/src/shared/hooks/useConfig.d.ts +0 -3
  475. package/dist/src/shared/hooks/useConfig.d.ts.map +0 -1
  476. package/dist/src/shared/hooks/useConfig.js +0 -13
  477. package/dist/src/shared/hooks/useConfig.js.map +0 -1
  478. package/dist/src/shared/hooks/useIframe.d.ts +0 -3
  479. package/dist/src/shared/hooks/useIframe.d.ts.map +0 -1
  480. package/dist/src/shared/hooks/useIframe.js +0 -13
  481. package/dist/src/shared/hooks/useIframe.js.map +0 -1
  482. package/dist/src/shared/hooks/useSession.d.ts +0 -3
  483. package/dist/src/shared/hooks/useSession.d.ts.map +0 -1
  484. package/dist/src/shared/hooks/useSession.js +0 -13
  485. package/dist/src/shared/hooks/useSession.js.map +0 -1
  486. package/dist/src/shared/hooks/useToken.d.ts +0 -3
  487. package/dist/src/shared/hooks/useToken.d.ts.map +0 -1
  488. package/dist/src/shared/hooks/useToken.js +0 -12
  489. package/dist/src/shared/hooks/useToken.js.map +0 -1
  490. package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts +0 -16
  491. package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +0 -1
  492. package/dist/src/shared/lib/GenericAuthenticationRefresher.js +0 -43
  493. package/dist/src/shared/lib/GenericAuthenticationRefresher.js.map +0 -1
  494. package/dist/src/shared/lib/UserSession.d.ts +0 -12
  495. package/dist/src/shared/lib/UserSession.d.ts.map +0 -1
  496. package/dist/src/shared/lib/UserSession.js +0 -20
  497. package/dist/src/shared/lib/UserSession.js.map +0 -1
  498. package/dist/src/shared/lib/session.d.ts +0 -3
  499. package/dist/src/shared/lib/session.d.ts.map +0 -1
  500. package/dist/src/shared/lib/session.js +0 -10
  501. package/dist/src/shared/lib/session.js.map +0 -1
  502. package/dist/src/shared/lib/storage.d.ts +0 -25
  503. package/dist/src/shared/lib/storage.d.ts.map +0 -1
  504. package/dist/src/shared/lib/storage.js +0 -17
  505. package/dist/src/shared/lib/storage.js.map +0 -1
  506. package/dist/src/shared/lib/types.d.ts +0 -22
  507. package/dist/src/shared/lib/types.d.ts.map +0 -1
  508. package/dist/src/shared/lib/types.js +0 -16
  509. package/dist/src/shared/lib/types.js.map +0 -1
  510. package/dist/src/shared/lib/util.d.ts +0 -33
  511. package/dist/src/shared/lib/util.d.ts.map +0 -1
  512. package/dist/src/shared/lib/util.js +0 -124
  513. package/dist/src/shared/lib/util.js.map +0 -1
  514. package/dist/src/shared/providers/AuthContext.d.ts +0 -10
  515. package/dist/src/shared/providers/AuthContext.d.ts.map +0 -1
  516. package/dist/src/shared/providers/AuthContext.js +0 -3
  517. package/dist/src/shared/providers/AuthContext.js.map +0 -1
  518. package/dist/src/shared/providers/AuthProvider.d.ts +0 -20
  519. package/dist/src/shared/providers/AuthProvider.d.ts.map +0 -1
  520. package/dist/src/shared/providers/AuthProvider.js +0 -264
  521. package/dist/src/shared/providers/AuthProvider.js.map +0 -1
  522. package/dist/src/shared/providers/CivicAuthProvider.d.ts +0 -6
  523. package/dist/src/shared/providers/CivicAuthProvider.d.ts.map +0 -1
  524. package/dist/src/shared/providers/CivicAuthProvider.js +0 -15
  525. package/dist/src/shared/providers/CivicAuthProvider.js.map +0 -1
  526. package/dist/src/shared/providers/ConfigProvider.d.ts +0 -21
  527. package/dist/src/shared/providers/ConfigProvider.d.ts.map +0 -1
  528. package/dist/src/shared/providers/ConfigProvider.js +0 -19
  529. package/dist/src/shared/providers/ConfigProvider.js.map +0 -1
  530. package/dist/src/shared/providers/IframeProvider.d.ts +0 -16
  531. package/dist/src/shared/providers/IframeProvider.d.ts.map +0 -1
  532. package/dist/src/shared/providers/IframeProvider.js +0 -11
  533. package/dist/src/shared/providers/IframeProvider.js.map +0 -1
  534. package/dist/src/shared/providers/SessionProvider.d.ts +0 -13
  535. package/dist/src/shared/providers/SessionProvider.d.ts.map +0 -1
  536. package/dist/src/shared/providers/SessionProvider.js +0 -13
  537. package/dist/src/shared/providers/SessionProvider.js.map +0 -1
  538. package/dist/src/shared/providers/TokenProvider.d.ts +0 -18
  539. package/dist/src/shared/providers/TokenProvider.d.ts.map +0 -1
  540. package/dist/src/shared/providers/TokenProvider.js +0 -53
  541. package/dist/src/shared/providers/TokenProvider.js.map +0 -1
  542. package/dist/src/shared/providers/UserProvider.d.ts +0 -18
  543. package/dist/src/shared/providers/UserProvider.d.ts.map +0 -1
  544. package/dist/src/shared/providers/UserProvider.js +0 -38
  545. package/dist/src/shared/providers/UserProvider.js.map +0 -1
  546. package/dist/src/types.d.ts +0 -146
  547. package/dist/src/types.d.ts.map +0 -1
  548. package/dist/src/types.js +0 -2
  549. package/dist/src/types.js.map +0 -1
  550. package/dist/src/utils.d.ts +0 -15
  551. package/dist/src/utils.d.ts.map +0 -1
  552. package/dist/src/utils.js +0 -43
  553. package/dist/src/utils.js.map +0 -1
  554. package/dist/test/integration/sdk.test.d.ts +0 -2
  555. package/dist/test/integration/sdk.test.d.ts.map +0 -1
  556. package/dist/test/integration/sdk.test.js +0 -183
  557. package/dist/test/integration/sdk.test.js.map +0 -1
  558. package/dist/test/support/fixtures.d.ts +0 -26
  559. package/dist/test/support/fixtures.d.ts.map +0 -1
  560. package/dist/test/support/fixtures.js +0 -55
  561. package/dist/test/support/fixtures.js.map +0 -1
  562. package/dist/test/support/tokens.json +0 -26
  563. package/dist/test/unit/lib/oauth.test.d.ts +0 -2
  564. package/dist/test/unit/lib/oauth.test.d.ts.map +0 -1
  565. package/dist/test/unit/lib/oauth.test.js +0 -55
  566. package/dist/test/unit/lib/oauth.test.js.map +0 -1
  567. package/dist/test/unit/logger.test.d.ts +0 -2
  568. package/dist/test/unit/logger.test.d.ts.map +0 -1
  569. package/dist/test/unit/logger.test.js +0 -141
  570. package/dist/test/unit/logger.test.js.map +0 -1
  571. package/dist/test/unit/nextjs/NextAuthProvider.test.d.ts +0 -2
  572. package/dist/test/unit/nextjs/NextAuthProvider.test.d.ts.map +0 -1
  573. package/dist/test/unit/nextjs/NextAuthProvider.test.js +0 -29
  574. package/dist/test/unit/nextjs/NextAuthProvider.test.js.map +0 -1
  575. package/dist/test/unit/nextjs/config.test.d.ts +0 -2
  576. package/dist/test/unit/nextjs/config.test.d.ts.map +0 -1
  577. package/dist/test/unit/nextjs/config.test.js +0 -189
  578. package/dist/test/unit/nextjs/config.test.js.map +0 -1
  579. package/dist/test/unit/nextjs/getUser.test.d.ts +0 -2
  580. package/dist/test/unit/nextjs/getUser.test.d.ts.map +0 -1
  581. package/dist/test/unit/nextjs/getUser.test.js +0 -36
  582. package/dist/test/unit/nextjs/getUser.test.js.map +0 -1
  583. package/dist/test/unit/nextjs/middleware.test.d.ts +0 -2
  584. package/dist/test/unit/nextjs/middleware.test.d.ts.map +0 -1
  585. package/dist/test/unit/nextjs/middleware.test.js +0 -113
  586. package/dist/test/unit/nextjs/middleware.test.js.map +0 -1
  587. package/dist/test/unit/nextjs/utils.test.d.ts +0 -2
  588. package/dist/test/unit/nextjs/utils.test.d.ts.map +0 -1
  589. package/dist/test/unit/nextjs/utils.test.js +0 -13
  590. package/dist/test/unit/nextjs/utils.test.js.map +0 -1
  591. package/dist/test/unit/publicApi/apiSnapshot.test.d.ts +0 -2
  592. package/dist/test/unit/publicApi/apiSnapshot.test.d.ts.map +0 -1
  593. package/dist/test/unit/publicApi/apiSnapshot.test.js +0 -10
  594. package/dist/test/unit/publicApi/apiSnapshot.test.js.map +0 -1
  595. package/dist/test/unit/react/components/SignInButton.test.d.ts +0 -2
  596. package/dist/test/unit/react/components/SignInButton.test.d.ts.map +0 -1
  597. package/dist/test/unit/react/components/SignInButton.test.js +0 -31
  598. package/dist/test/unit/react/components/SignInButton.test.js.map +0 -1
  599. package/dist/test/unit/react/components/SignOutButton.test.d.ts +0 -2
  600. package/dist/test/unit/react/components/SignOutButton.test.d.ts.map +0 -1
  601. package/dist/test/unit/react/components/SignOutButton.test.js +0 -30
  602. package/dist/test/unit/react/components/SignOutButton.test.js.map +0 -1
  603. package/dist/test/unit/server/login.test.d.ts +0 -2
  604. package/dist/test/unit/server/login.test.d.ts.map +0 -1
  605. package/dist/test/unit/server/login.test.js +0 -127
  606. package/dist/test/unit/server/login.test.js.map +0 -1
  607. package/dist/test/unit/server/session.test.d.ts +0 -2
  608. package/dist/test/unit/server/session.test.d.ts.map +0 -1
  609. package/dist/test/unit/server/session.test.js +0 -41
  610. package/dist/test/unit/server/session.test.js.map +0 -1
  611. package/dist/test/unit/services/AuthenticationService.test.d.ts +0 -2
  612. package/dist/test/unit/services/AuthenticationService.test.d.ts.map +0 -1
  613. package/dist/test/unit/services/AuthenticationService.test.js +0 -104
  614. package/dist/test/unit/services/AuthenticationService.test.js.map +0 -1
  615. package/dist/test/unit/services/ServerAuthenticationResolver.test.d.ts +0 -2
  616. package/dist/test/unit/services/ServerAuthenticationResolver.test.d.ts.map +0 -1
  617. package/dist/test/unit/services/ServerAuthenticationResolver.test.js +0 -74
  618. package/dist/test/unit/services/ServerAuthenticationResolver.test.js.map +0 -1
  619. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.d.ts +0 -2
  620. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.d.ts.map +0 -1
  621. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.js +0 -61
  622. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.js.map +0 -1
  623. package/dist/test/unit/shared/UserSession.test.d.ts +0 -2
  624. package/dist/test/unit/shared/UserSession.test.d.ts.map +0 -1
  625. package/dist/test/unit/shared/UserSession.test.js +0 -37
  626. package/dist/test/unit/shared/UserSession.test.js.map +0 -1
  627. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.d.ts +0 -2
  628. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.d.ts.map +0 -1
  629. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js +0 -120
  630. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js.map +0 -1
  631. package/dist/test/unit/shared/storage.test.d.ts +0 -2
  632. package/dist/test/unit/shared/storage.test.d.ts.map +0 -1
  633. package/dist/test/unit/shared/storage.test.js +0 -53
  634. package/dist/test/unit/shared/storage.test.js.map +0 -1
  635. package/dist/test/unit/utils.test.d.ts +0 -2
  636. package/dist/test/unit/utils.test.d.ts.map +0 -1
  637. package/dist/test/unit/utils.test.js +0 -40
  638. package/dist/test/unit/utils.test.js.map +0 -1
  639. package/dist/vitest.config.d.ts +0 -3
  640. package/dist/vitest.config.d.ts.map +0 -1
  641. package/dist/vitest.config.js +0 -40
  642. package/dist/vitest.config.js.map +0 -1
  643. package/src/browser/storage.ts +0 -11
  644. package/src/config.ts +0 -6
  645. package/src/constants.ts +0 -29
  646. package/src/index.ts +0 -16
  647. package/src/lib/cookies.ts +0 -28
  648. package/src/lib/jwt.ts +0 -15
  649. package/src/lib/logger.ts +0 -72
  650. package/src/lib/oauth.ts +0 -83
  651. package/src/lib/postMessage.ts +0 -22
  652. package/src/lib/windowUtil.ts +0 -29
  653. package/src/nextjs/GetUser.ts +0 -22
  654. package/src/nextjs/config.ts +0 -203
  655. package/src/nextjs/cookies.ts +0 -162
  656. package/src/nextjs/hooks/index.ts +0 -1
  657. package/src/nextjs/hooks/useTokenCookie.ts +0 -41
  658. package/src/nextjs/hooks/useUserCookie.ts +0 -41
  659. package/src/nextjs/index.ts +0 -20
  660. package/src/nextjs/middleware/index.ts +0 -1
  661. package/src/nextjs/middleware.ts +0 -155
  662. package/src/nextjs/providers/NextAuthProvider.tsx +0 -87
  663. package/src/nextjs/routeHandler.ts +0 -297
  664. package/src/nextjs/utils.ts +0 -9
  665. package/src/reactjs/components/SignInButton.tsx +0 -32
  666. package/src/reactjs/components/SignOutButton.tsx +0 -24
  667. package/src/reactjs/components/UserButton.tsx +0 -239
  668. package/src/reactjs/components/index.ts +0 -5
  669. package/src/reactjs/hooks/index.ts +0 -6
  670. package/src/reactjs/hooks/useAuth.ts +0 -15
  671. package/src/reactjs/hooks/useUser.ts +0 -20
  672. package/src/reactjs/index.ts +0 -19
  673. package/src/reactjs/providers/index.ts +0 -27
  674. package/src/server/ServerAuthenticationResolver.ts +0 -107
  675. package/src/server/config.ts +0 -9
  676. package/src/server/index.ts +0 -13
  677. package/src/server/login.ts +0 -59
  678. package/src/server/refresh.ts +0 -23
  679. package/src/services/AuthenticationService.ts +0 -329
  680. package/src/services/PKCE.ts +0 -45
  681. package/src/services/types.ts +0 -54
  682. package/src/shared/components/CivicAuthIframe.tsx +0 -26
  683. package/src/shared/components/CivicAuthIframeContainer.tsx +0 -195
  684. package/src/shared/components/CloseIcon.tsx +0 -21
  685. package/src/shared/components/LoadingIcon.tsx +0 -53
  686. package/src/shared/hooks/index.ts +0 -4
  687. package/src/shared/hooks/useAuth.ts +0 -15
  688. package/src/shared/hooks/useConfig.ts +0 -14
  689. package/src/shared/hooks/useIframe.ts +0 -14
  690. package/src/shared/hooks/useSession.ts +0 -14
  691. package/src/shared/hooks/useToken.ts +0 -15
  692. package/src/shared/lib/GenericAuthenticationRefresher.ts +0 -75
  693. package/src/shared/lib/UserSession.ts +0 -25
  694. package/src/shared/lib/session.ts +0 -11
  695. package/src/shared/lib/storage.ts +0 -40
  696. package/src/shared/lib/types.ts +0 -26
  697. package/src/shared/lib/util.ts +0 -212
  698. package/src/shared/providers/AuthContext.tsx +0 -11
  699. package/src/shared/providers/AuthProvider.tsx +0 -397
  700. package/src/shared/providers/CivicAuthProvider.tsx +0 -31
  701. package/src/shared/providers/ConfigProvider.tsx +0 -50
  702. package/src/shared/providers/IframeProvider.tsx +0 -34
  703. package/src/shared/providers/SessionProvider.tsx +0 -29
  704. package/src/shared/providers/TokenProvider.tsx +0 -78
  705. package/src/shared/providers/UserProvider.tsx +0 -80
  706. package/src/types.ts +0 -227
  707. package/src/utils.ts +0 -58
  708. package/test/integration/sdk.test.tsx +0 -266
  709. package/test/support/fixtures.ts +0 -56
  710. package/test/support/tokens.json +0 -26
  711. package/test/unit/lib/oauth.test.ts +0 -72
  712. package/test/unit/logger.test.ts +0 -175
  713. package/test/unit/nextjs/NextAuthProvider.test.tsx +0 -38
  714. package/test/unit/nextjs/config.test.ts +0 -218
  715. package/test/unit/nextjs/getUser.test.ts +0 -41
  716. package/test/unit/nextjs/middleware.test.ts +0 -138
  717. package/test/unit/nextjs/routeHandler.test.ts.skipped +0 -369
  718. package/test/unit/nextjs/utils.test.ts +0 -17
  719. package/test/unit/publicApi/__snapshots__/apiSnapshot.test.ts.snap +0 -17
  720. package/test/unit/publicApi/apiSnapshot.test.ts +0 -11
  721. package/test/unit/react/components/SignInButton.test.tsx +0 -50
  722. package/test/unit/react/components/SignOutButton.test.tsx +0 -49
  723. package/test/unit/server/login.test.ts +0 -181
  724. package/test/unit/server/session.test.ts +0 -51
  725. package/test/unit/services/AuthenticationService.test.ts +0 -152
  726. package/test/unit/services/ServerAuthenticationResolver.test.ts +0 -115
  727. package/test/unit/shared/GenericAuthenticationRefresher.test.ts +0 -89
  728. package/test/unit/shared/UserSession.test.ts +0 -42
  729. package/test/unit/shared/components/CivicAuthIframeContainer.test.tsx +0 -154
  730. package/test/unit/shared/storage.test.ts +0 -67
  731. package/test/unit/utils.test.ts +0 -48
  732. package/tsconfig.build.json +0 -9
  733. package/tsconfig.cjs.json +0 -8
  734. package/tsconfig.esm.json +0 -7
  735. package/tsconfig.json +0 -42
  736. package/tsconfig.tsbuildinfo +0 -1
  737. package/vitest.config.ts +0 -41
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useIframe = exports.useConfig = exports.useSession = exports.useAuth = exports.useToken = exports.useUser = void 0;
3
+ exports.useIframe = exports.useSession = exports.useAuth = exports.useToken = exports.useUser = void 0;
4
4
  var useUser_js_1 = require("../../reactjs/hooks/useUser.js");
5
5
  Object.defineProperty(exports, "useUser", { enumerable: true, get: function () { return useUser_js_1.useUser; } });
6
6
  var useToken_js_1 = require("../../shared/hooks/useToken.js");
@@ -9,8 +9,6 @@ var useAuth_js_1 = require("../../shared/hooks/useAuth.js");
9
9
  Object.defineProperty(exports, "useAuth", { enumerable: true, get: function () { return useAuth_js_1.useAuth; } });
10
10
  var useSession_js_1 = require("../../shared/hooks/useSession.js");
11
11
  Object.defineProperty(exports, "useSession", { enumerable: true, get: function () { return useSession_js_1.useSession; } });
12
- var useConfig_js_1 = require("../../shared/hooks/useConfig.js");
13
- Object.defineProperty(exports, "useConfig", { enumerable: true, get: function () { return useConfig_js_1.useConfig; } });
14
12
  var useIframe_js_1 = require("../../shared/hooks/useIframe.js");
15
13
  Object.defineProperty(exports, "useIframe", { enumerable: true, get: function () { return useIframe_js_1.useIframe; } });
16
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/reactjs/hooks/index.ts"],"names":[],"mappings":";;;AAAA,yDAAqD;AAA5C,qGAAA,OAAO,OAAA;AAChB,0DAAsD;AAA7C,uGAAA,QAAQ,OAAA;AACjB,wDAAoD;AAA3C,qGAAA,OAAO,OAAA;AAChB,8DAA0D;AAAjD,2GAAA,UAAU,OAAA;AACnB,4DAAwD;AAA/C,yGAAA,SAAS,OAAA;AAClB,4DAAwD;AAA/C,yGAAA,SAAS,OAAA","sourcesContent":["export { useUser } from \"@/reactjs/hooks/useUser.js\";\nexport { useToken } from \"@/shared/hooks/useToken.js\";\nexport { useAuth } from \"@/shared/hooks/useAuth.js\";\nexport { useSession } from \"@/shared/hooks/useSession.js\";\nexport { useConfig } from \"@/shared/hooks/useConfig.js\";\nexport { useIframe } from \"@/shared/hooks/useIframe.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/reactjs/hooks/index.ts"],"names":[],"mappings":";;;AAAA,yDAAqD;AAA5C,qGAAA,OAAO,OAAA;AAChB,0DAAsD;AAA7C,uGAAA,QAAQ,OAAA;AACjB,wDAAoD;AAA3C,qGAAA,OAAO,OAAA;AAChB,8DAA0D;AAAjD,2GAAA,UAAU,OAAA;AACnB,4DAAwD;AAA/C,yGAAA,SAAS,OAAA","sourcesContent":["export { useUser } from \"@/reactjs/hooks/useUser.js\";\nexport { useToken } from \"@/shared/hooks/useToken.js\";\nexport { useAuth } from \"@/shared/hooks/useAuth.js\";\nexport { useSession } from \"@/shared/hooks/useSession.js\";\nexport { useIframe } from \"@/shared/hooks/useIframe.js\";\n"]}
@@ -27,7 +27,6 @@ export declare class BrowserAuthenticationInitiator implements AuthenticationIni
27
27
  protected config: {
28
28
  clientId: string;
29
29
  redirectUrl: string;
30
- state: string;
31
30
  scopes: string[];
32
31
  displayMode: DisplayMode;
33
32
  oauthServer: string;
@@ -35,6 +34,10 @@ export declare class BrowserAuthenticationInitiator implements AuthenticationIni
35
34
  pkceConsumer: PKCEConsumer;
36
35
  nonce?: string;
37
36
  };
37
+ setDisplayMode(displayMode: DisplayMode): void;
38
+ get displayMode(): DisplayMode;
39
+ get isServerTokenExchange(): boolean;
40
+ get state(): string;
38
41
  constructor(config: typeof this.config);
39
42
  handleLoginAppPopupFailed(redirectUrl: string): Promise<void>;
40
43
  signIn(iframeRef: HTMLIFrameElement | null): Promise<URL>;
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticationService.d.ts","sourceRoot":"","sources":["../../../src/services/AuthenticationService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,qBAAqB,EACrB,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAerE,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAM7B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,8BAA+B,YAAW,uBAAuB;IAC5E,OAAO,CAAC,kBAAkB,CAAgD;IAE1E,SAAS,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;QAEjB,WAAW,EAAE,WAAW,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QAEpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAEvC,YAAY,EAAE,YAAY,CAAC;QAE3B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;gBAEU,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM;IAIhC,yBAAyB,CAAC,WAAW,EAAE,MAAM;IAU7C,MAAM,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;IA8CzD,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;IAU7B,OAAO;CAKR;AAED;;;GAGG;AACH,qBAAa,8BAA+B,YAAW,uBAAuB;IAC5E,SAAS,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAEvC,YAAY,EAAE,YAAY,CAAC;KAC5B,CAAC;gBAEU,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM;IAMhC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC;IAItB,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;CAG9B;AAED,KAAK,2BAA2B,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,qBAAa,4BAA6B,SAAQ,8BAA8B;IAQ5E,SAAS,CAAC,YAAY;IAPxB,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,SAAS,CAAwB;gBAIvC,MAAM,EAAE,2BAA2B,EAEzB,YAAY,kCAAwC;IAa1D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBrB,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC;IAiC3B,cAAc,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAa7C,uBAAuB,IAAI,OAAO,CAAC,WAAW,CAAC;WAgCxC,KAAK,CAChB,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,sBAAsB,CAAC;CAMnC"}
1
+ {"version":3,"file":"AuthenticationService.d.ts","sourceRoot":"","sources":["../../../src/services/AuthenticationService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EAET,qBAAqB,EACrB,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,+BAA+B,EAEhC,MAAM,oBAAoB,CAAC;AAe5B,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAQ7B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,8BAA+B,YAAW,uBAAuB;IAC5E,OAAO,CAAC,kBAAkB,CAAgD;IAE1E,SAAS,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,CAAC;QAEjB,WAAW,EAAE,WAAW,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QAEpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAEvC,YAAY,EAAE,YAAY,CAAC;QAE3B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAEK,cAAc,CAAC,WAAW,EAAE,WAAW;IAI9C,IAAI,WAAW,gBAEd;IAED,IAAI,qBAAqB,YAExB;IACD,IAAI,KAAK,WAER;gBACW,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM;IAIhC,yBAAyB,CAAC,WAAW,EAAE,MAAM;IAU7C,MAAM,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;IAiDzD,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;IAe7B,OAAO;CAKR;AAED;;;GAGG;AACH,qBAAa,8BAA+B,YAAW,uBAAuB;IAC5E,SAAS,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAEvC,YAAY,EAAE,YAAY,CAAC;KAC5B,CAAC;gBAEU,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM;IAMhC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC;IAItB,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;CAG9B;AAED,KAAK,2BAA2B,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,qBAAa,4BAA6B,SAAQ,8BAA8B;IAQ5E,SAAS,CAAC,YAAY;IAPxB,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,SAAS,CAAwB;gBAIvC,MAAM,EAAE,2BAA2B,EAEzB,YAAY,kCAAwC;IAY1D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBrB,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC;IA0C3B,cAAc,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAa7C,uBAAuB,IAAI,OAAO,CAAC,WAAW,CAAC;WAgCxC,KAAK,CAChB,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,sBAAsB,CAAC;CAMnC"}
@@ -11,6 +11,8 @@ const types_js_1 = require("../services/types.js");
11
11
  const windowUtil_js_1 = require("../lib/windowUtil.js");
12
12
  const constants_js_1 = require("../constants.js");
13
13
  const postMessage_js_1 = require("../lib/postMessage.js");
14
+ const session_js_1 = require("../shared/lib/session.js");
15
+ const UserSession_js_1 = require("../shared/lib/UserSession.js");
14
16
  /**
15
17
  * An authentication initiator that works on a browser. Since this is just triggering
16
18
  * login and logout, session data is not stored here.
@@ -35,6 +37,18 @@ const postMessage_js_1 = require("../lib/postMessage.js");
35
37
  class BrowserAuthenticationInitiator {
36
38
  postMessageHandler = null;
37
39
  config;
40
+ setDisplayMode(displayMode) {
41
+ this.config.displayMode = displayMode;
42
+ }
43
+ get displayMode() {
44
+ return this.config.displayMode;
45
+ }
46
+ get isServerTokenExchange() {
47
+ return this.config.pkceConsumer instanceof PKCE_js_1.ConfidentialClientPKCEConsumer;
48
+ }
49
+ get state() {
50
+ return (0, oauth_js_1.generateState)(this.config.displayMode, this.isServerTokenExchange);
51
+ }
38
52
  constructor(config) {
39
53
  this.config = config;
40
54
  }
@@ -45,7 +59,10 @@ class BrowserAuthenticationInitiator {
45
59
  // Use the config (Client ID, scopes OAuth Server, Endpoints, PKCEConsumer) to generate a new login url
46
60
  // and then use the display mode to decide how to send the user there
47
61
  async signIn(iframeRef) {
48
- const url = await (0, util_js_1.generateOauthLoginUrl)(this.config);
62
+ const url = await (0, util_js_1.generateOauthLoginUrl)({
63
+ ...this.config,
64
+ state: this.state,
65
+ });
49
66
  this.postMessageHandler = (event) => {
50
67
  const thisURL = new URL(window.location.href);
51
68
  if (event.origin.endsWith("civic.com") ||
@@ -81,9 +98,13 @@ class BrowserAuthenticationInitiator {
81
98
  return url;
82
99
  }
83
100
  async signOut() {
84
- const localStorage = new storage_js_1.LocalStorageAdapter();
85
- await (0, util_js_1.clearTokens)(localStorage);
86
- await (0, util_js_1.clearUser)(localStorage);
101
+ // we only use local storage for the client-side token exchange
102
+ if (!this.isServerTokenExchange) {
103
+ const localStorage = new storage_js_1.LocalStorageAdapter();
104
+ await (0, util_js_1.clearTokens)(localStorage);
105
+ await (0, util_js_1.clearUser)(localStorage);
106
+ storage_js_1.LocalStorageAdapter.emitter.emit("signOut");
107
+ }
87
108
  // TODO open the iframe or new tab etc: the logout URL is not currently
88
109
  // supported by on the oauth, so just clear state until then
89
110
  const url = await (0, util_js_1.generateOauthLogoutUrl)(this.config);
@@ -129,7 +150,6 @@ class BrowserAuthenticationService extends BrowserAuthenticationInitiator {
129
150
  pkceProducer = new PKCE_js_1.BrowserPublicClientPKCEProducer()) {
130
151
  super({
131
152
  ...config,
132
- state: (0, oauth_js_1.generateState)(config.displayMode),
133
153
  // Store and retrieve the PKCE challenge in local storage
134
154
  pkceConsumer: pkceProducer,
135
155
  });
@@ -158,11 +178,22 @@ class BrowserAuthenticationService extends BrowserAuthenticationInitiator {
158
178
  // exchange auth code for tokens
159
179
  const tokens = await (0, util_js_1.exchangeTokens)(code, state, this.pkceProducer, this.oauth2client, // clean up types here to avoid the ! operator
160
180
  this.config.oauthServer, this.endpoints);
161
- await (0, util_js_1.storeTokens)(new storage_js_1.LocalStorageAdapter(), tokens);
181
+ const clientStorage = new storage_js_1.LocalStorageAdapter();
182
+ await (0, util_js_1.storeTokens)(clientStorage, tokens);
183
+ const user = await (0, session_js_1.getUser)(clientStorage);
184
+ if (!user) {
185
+ throw new Error("Failed to get user info");
186
+ }
187
+ const userSession = new UserSession_js_1.GenericUserSession(clientStorage);
188
+ await userSession.set(user);
189
+ storage_js_1.LocalStorageAdapter.emitter.emit("signIn");
162
190
  // cleanup the browser window if needed
163
191
  const parsedDisplayMode = (0, oauth_js_1.displayModeFromState)(state, this.config.displayMode);
164
192
  if (parsedDisplayMode === "new_tab") {
165
193
  // Close the popup window
194
+ window.addEventListener("beforeunload", () => {
195
+ window?.opener?.focus();
196
+ });
166
197
  window.close();
167
198
  }
168
199
  // these are the default oAuth params that get added to the URL in redirect which we want to remove if present
@@ -186,7 +217,7 @@ class BrowserAuthenticationService extends BrowserAuthenticationInitiator {
186
217
  const sessionData = await this.getSessionData();
187
218
  if (!sessionData?.idToken || !sessionData.accessToken) {
188
219
  const unAuthenticatedSession = { ...sessionData, authenticated: false };
189
- await (0, util_js_1.clearTokens)(new storage_js_1.LocalStorageAdapter());
220
+ // await clearTokens(new LocalStorageAdapter());
190
221
  return unAuthenticatedSession;
191
222
  }
192
223
  if (!this.endpoints || !this.oauth2client)
@@ -1 +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 }\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 return;\n }\n const loginMessage = event.data as LoginPostMessage;\n this.handleLoginAppPopupFailed(loginMessage.data.url);\n }\n };\n\n window.addEventListener(\"message\", this.postMessageHandler);\n\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\n if (this.config.displayMode === \"redirect\") {\n window.location.href = url.toString();\n }\n\n if (this.config.displayMode === \"new_tab\") {\n try {\n const popupWindow = window.open(url.toString(), \"_blank\");\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\n return url;\n }\n\n async signOut(): Promise<URL> {\n const localStorage = new LocalStorageAdapter();\n await clearTokens(localStorage);\n await 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 }\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 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 await 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 = await 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 await 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 await 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"]}
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 {\n BrowserPublicClientPKCEProducer,\n ConfidentialClientPKCEConsumer,\n} 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\";\nimport { getUser } from \"@/shared/lib/session.js\";\nimport { GenericUserSession } from \"@/shared/lib/UserSession.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 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 public setDisplayMode(displayMode: DisplayMode) {\n this.config.displayMode = displayMode;\n }\n\n get displayMode() {\n return this.config.displayMode;\n }\n\n get isServerTokenExchange() {\n return this.config.pkceConsumer instanceof ConfidentialClientPKCEConsumer;\n }\n get state() {\n return generateState(this.config.displayMode, this.isServerTokenExchange);\n }\n constructor(config: typeof this.config) {\n this.config = 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({\n ...this.config,\n state: this.state,\n });\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 return;\n }\n const loginMessage = event.data as LoginPostMessage;\n this.handleLoginAppPopupFailed(loginMessage.data.url);\n }\n };\n\n window.addEventListener(\"message\", this.postMessageHandler);\n\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\n if (this.config.displayMode === \"redirect\") {\n window.location.href = url.toString();\n }\n\n if (this.config.displayMode === \"new_tab\") {\n try {\n const popupWindow = window.open(url.toString(), \"_blank\");\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\n return url;\n }\n\n async signOut(): Promise<URL> {\n // we only use local storage for the client-side token exchange\n if (!this.isServerTokenExchange) {\n const localStorage = new LocalStorageAdapter();\n await clearTokens(localStorage);\n await clearUser(localStorage);\n LocalStorageAdapter.emitter.emit(\"signOut\");\n }\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\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 }\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 super({\n ...config,\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 const clientStorage = new LocalStorageAdapter();\n await storeTokens(clientStorage, tokens);\n const user = await getUser(clientStorage);\n if (!user) {\n throw new Error(\"Failed to get user info\");\n }\n const userSession = new GenericUserSession(clientStorage);\n await userSession.set(user);\n LocalStorageAdapter.emitter.emit(\"signIn\");\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.addEventListener(\"beforeunload\", () => {\n window?.opener?.focus();\n });\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 = await 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 // await 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 await 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,7 @@
1
+ import type { ReactNode } from "react";
2
+ import React from "react";
3
+ declare const BlockDisplay: ({ children }: {
4
+ children: ReactNode;
5
+ }) => React.JSX.Element;
6
+ export { BlockDisplay };
7
+ //# sourceMappingURL=BlockDisplay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockDisplay.d.ts","sourceRoot":"","sources":["../../../../src/shared/components/BlockDisplay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,QAAA,MAAM,YAAY,iBAAkB;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,sBAgC1D,CAAC;AACF,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BlockDisplay = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const BlockDisplay = ({ children }) => {
9
+ return (react_1.default.createElement("div", { id: "iframe-block-display-wrapper", style: {
10
+ position: "relative",
11
+ left: 0,
12
+ top: 0,
13
+ zIndex: 50,
14
+ display: "flex",
15
+ height: "100vh",
16
+ width: "100vw",
17
+ alignItems: "center",
18
+ justifyContent: "center",
19
+ backgroundColor: "white",
20
+ } },
21
+ react_1.default.createElement("div", { id: "iframe-block-display", style: {
22
+ position: "absolute",
23
+ inset: 0,
24
+ display: "flex",
25
+ alignItems: "center",
26
+ justifyContent: "center",
27
+ backgroundColor: "white",
28
+ } }, children)));
29
+ };
30
+ exports.BlockDisplay = BlockDisplay;
31
+ //# sourceMappingURL=BlockDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockDisplay.js","sourceRoot":"","sources":["../../../../src/shared/components/BlockDisplay.tsx"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAE1B,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAA2B,EAAE,EAAE;IAC7D,OAAO,CACL,uCACE,EAAE,EAAC,8BAA8B,EACjC,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,CAAC;YACP,GAAG,EAAE,CAAC;YACN,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,OAAO;YACd,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,eAAe,EAAE,OAAO;SACzB;QAED,uCACE,EAAE,EAAC,sBAAsB,EACzB,KAAK,EAAE;gBACL,QAAQ,EAAE,UAAU;gBACpB,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,QAAQ;gBACxB,eAAe,EAAE,OAAO;aACzB,IAEA,QAAQ,CACL,CACF,CACP,CAAC;AACJ,CAAC,CAAC;AACO,oCAAY","sourcesContent":["import type { ReactNode } from \"react\";\nimport React from \"react\";\n\nconst BlockDisplay = ({ children }: { children: ReactNode }) => {\n return (\n <div\n id=\"iframe-block-display-wrapper\"\n style={{\n position: \"relative\",\n left: 0,\n top: 0,\n zIndex: 50,\n display: \"flex\",\n height: \"100vh\",\n width: \"100vw\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"white\",\n }}\n >\n <div\n id=\"iframe-block-display\"\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"white\",\n }}\n >\n {children}\n </div>\n </div>\n );\n};\nexport { BlockDisplay };\n"]}
@@ -16,13 +16,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
16
16
  }) : function(o, v) {
17
17
  o["default"] = v;
18
18
  });
19
- var __importStar = (this && this.__importStar) || function (mod) {
20
- if (mod && mod.__esModule) return mod;
21
- var result = {};
22
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
- __setModuleDefault(result, mod);
24
- return result;
25
- };
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
26
36
  Object.defineProperty(exports, "__esModule", { value: true });
27
37
  exports.CivicAuthIframe = void 0;
28
38
  const constants_js_1 = require("../../constants.js");
@@ -1 +1 @@
1
- {"version":3,"file":"CivicAuthIframe.js","sourceRoot":"","sources":["../../../../src/shared/components/CivicAuthIframe.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;AACb,iDAA2C;AAC3C,+CAA0C;AAM1C,MAAM,eAAe,GAAG,IAAA,kBAAU,EAChC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE;IAClB,OAAO,CACL,0CACE,EAAE,EAAE,wBAAS,EACb,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EACzD,MAAM,EAAE,MAAM,GACd,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AAMO,0CAAe;AAJxB,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAC","sourcesContent":["\"use client\";\nimport { IFRAME_ID } from \"@/constants.js\";\nimport React, { forwardRef } from \"react\";\n\ntype CivicAuthIframeProps = {\n onLoad?: () => void;\n};\n\nconst CivicAuthIframe = forwardRef<HTMLIFrameElement, CivicAuthIframeProps>(\n ({ onLoad }, ref) => {\n return (\n <iframe\n id={IFRAME_ID}\n ref={ref}\n style={{ height: \"26rem\", width: \"100%\", border: \"none\" }}\n onLoad={onLoad}\n />\n );\n },\n);\n\nCivicAuthIframe.displayName = \"CivicAuthIframe\";\n\nexport type { CivicAuthIframeProps };\n\nexport { CivicAuthIframe };\n"]}
1
+ {"version":3,"file":"CivicAuthIframe.js","sourceRoot":"","sources":["../../../../src/shared/components/CivicAuthIframe.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACb,iDAA2C;AAC3C,+CAA0C;AAM1C,MAAM,eAAe,GAAG,IAAA,kBAAU,EAChC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE;IAClB,OAAO,CACL,0CACE,EAAE,EAAE,wBAAS,EACb,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EACzD,MAAM,EAAE,MAAM,GACd,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AAMO,0CAAe;AAJxB,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAC","sourcesContent":["\"use client\";\nimport { IFRAME_ID } from \"@/constants.js\";\nimport React, { forwardRef } from \"react\";\n\ntype CivicAuthIframeProps = {\n onLoad?: () => void;\n};\n\nconst CivicAuthIframe = forwardRef<HTMLIFrameElement, CivicAuthIframeProps>(\n ({ onLoad }, ref) => {\n return (\n <iframe\n id={IFRAME_ID}\n ref={ref}\n style={{ height: \"26rem\", width: \"100%\", border: \"none\" }}\n onLoad={onLoad}\n />\n );\n },\n);\n\nCivicAuthIframe.displayName = \"CivicAuthIframe\";\n\nexport type { CivicAuthIframeProps };\n\nexport { CivicAuthIframe };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CivicAuthIframeContainer.d.ts","sourceRoot":"","sources":["../../../../src/shared/components/CivicAuthIframeContainer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAOxE,KAAK,6BAA6B,GAAG;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAuEF,QAAA,MAAM,wBAAwB,kCAG3B,6BAA6B,sBAwG/B,CAAC;AAEF,YAAY,EAAE,6BAA6B,EAAE,CAAC;AAE9C,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"CivicAuthIframeContainer.d.ts","sourceRoot":"","sources":["../../../../src/shared/components/CivicAuthIframeContainer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE,KAAK,6BAA6B,GAAG;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAuEF,QAAA,MAAM,wBAAwB,kCAG3B,6BAA6B,sBA8G/B,CAAC;AAEF,YAAY,EAAE,6BAA6B,EAAE,CAAC;AAE9C,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -16,13 +16,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
16
16
  }) : function(o, v) {
17
17
  o["default"] = v;
18
18
  });
19
- var __importStar = (this && this.__importStar) || function (mod) {
20
- if (mod && mod.__esModule) return mod;
21
- var result = {};
22
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
- __setModuleDefault(result, mod);
24
- return result;
25
- };
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
26
36
  Object.defineProperty(exports, "__esModule", { value: true });
27
37
  exports.CivicAuthIframeContainer = void 0;
28
38
  const react_1 = __importStar(require("react"));
@@ -31,6 +41,9 @@ const CloseIcon_js_1 = require("../../shared/components/CloseIcon.js");
31
41
  const CivicAuthIframe_js_1 = require("../../shared/components/CivicAuthIframe.js");
32
42
  const index_js_1 = require("../../shared/hooks/index.js");
33
43
  const constants_js_1 = require("../../constants.js");
44
+ const index_js_2 = require("../../shared/hooks/index.js");
45
+ const index_js_3 = require("../../shared/hooks/index.js");
46
+ const index_js_4 = require("../../shared/hooks/index.js");
34
47
  function NoChrome({ children, }) {
35
48
  return react_1.default.createElement("div", { style: { position: "relative" } }, children);
36
49
  }
@@ -74,10 +87,19 @@ function IframeChrome({ children, onClose, }) {
74
87
  }
75
88
  const CivicAuthIframeContainer = ({ onClose, closeOnRedirect = true, }) => {
76
89
  const [isLoading, setIsLoading] = (0, react_1.useState)(true);
77
- const { isLoading: isAuthLoading } = (0, index_js_1.useAuth)();
78
- const config = (0, index_js_1.useConfig)();
79
- const { setAuthResponseUrl, iframeRef } = (0, index_js_1.useIframe)();
90
+ const { isLoading: isAuthLoading, data: session } = (0, index_js_4.useSession)();
91
+ const config = (0, index_js_2.useCivicAuthConfig)();
92
+ const [tokenExchangeUrl, setTokenExchangeUrl] = (0, react_1.useState)(null);
93
+ const { doTokenExchange } = (0, index_js_3.useClientTokenExchangeSession)();
94
+ const { iframeRef, iframeMode } = (0, index_js_1.useIframe)();
95
+ (0, react_1.useEffect)(() => {
96
+ if (tokenExchangeUrl) {
97
+ doTokenExchange?.(tokenExchangeUrl);
98
+ }
99
+ }, [doTokenExchange, tokenExchangeUrl]);
80
100
  const processIframeUrl = (0, react_1.useCallback)(() => {
101
+ if (!config)
102
+ return;
81
103
  if (iframeRef && iframeRef.current && iframeRef.current.contentWindow) {
82
104
  try {
83
105
  const iframeUrl = iframeRef.current.contentWindow.location.href;
@@ -99,7 +121,8 @@ const CivicAuthIframeContainer = ({ onClose, closeOnRedirect = true, }) => {
99
121
  else {
100
122
  // if we're doing token-exchange in the client, we can just set the authResponseUrl
101
123
  // to be handled by the auth provider
102
- setAuthResponseUrl(iframeUrl);
124
+ // iframeRef.current.setAttribute("src", "");
125
+ setTokenExchangeUrl(iframeUrl);
103
126
  }
104
127
  if (closeOnRedirect)
105
128
  onClose?.();
@@ -112,13 +135,7 @@ const CivicAuthIframeContainer = ({ onClose, closeOnRedirect = true, }) => {
112
135
  }
113
136
  }
114
137
  return false; // Haven't processed the URL yet
115
- }, [
116
- closeOnRedirect,
117
- config.redirectUrl,
118
- iframeRef,
119
- onClose,
120
- setAuthResponseUrl,
121
- ]);
138
+ }, [closeOnRedirect, config, iframeRef, onClose]);
122
139
  const intervalId = (0, react_1.useRef)();
123
140
  const handleEscape = (0, react_1.useCallback)((event) => {
124
141
  if (event.key === "Escape") {
@@ -137,8 +154,10 @@ const CivicAuthIframeContainer = ({ onClose, closeOnRedirect = true, }) => {
137
154
  clearInterval(intervalId.current);
138
155
  }
139
156
  }, [processIframeUrl, setIsLoading, intervalId]);
140
- const showLoadingIcon = isLoading || isAuthLoading;
141
- const WrapperComponent = config.modalIframe ? IframeChrome : NoChrome;
157
+ // if we're already authenticated then we're waiting either for the iframe to be closed
158
+ // or the page to redirect, so we want to show the loading icon
159
+ const showLoadingIcon = session?.authenticated || isLoading || isAuthLoading;
160
+ const WrapperComponent = iframeMode === "embedded" ? NoChrome : IframeChrome;
142
161
  return (react_1.default.createElement(WrapperComponent, { onClose: onClose },
143
162
  showLoadingIcon ? (react_1.default.createElement("div", { id: "civic-auth-loading-icon-wrapper", style: {
144
163
  position: "absolute",
@@ -1 +1 @@
1
- {"version":3,"file":"CivicAuthIframeContainer.js","sourceRoot":"","sources":["../../../../src/shared/components/CivicAuthIframeContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { LoadingIcon } from \"@/shared/components/LoadingIcon.js\";\nimport { CloseIcon } from \"@/shared/components/CloseIcon.js\";\nimport { CivicAuthIframe } from \"@/shared/components/CivicAuthIframe.js\";\nimport { useAuth, useConfig, useIframe } from \"@/shared/hooks/index.js\";\nimport { TOKEN_EXCHANGE_TRIGGER_TEXT } from \"@/constants.js\";\n\ntype CivicAuthIframeContainerProps = {\n onClose?: () => void;\n closeOnRedirect?: boolean;\n};\n\nfunction NoChrome({\n children,\n}: {\n children: React.ReactNode;\n onClose?: () => void;\n}) {\n return <div style={{ position: \"relative\" }}>{children}</div>;\n}\n\nfunction IframeChrome({\n children,\n onClose,\n}: {\n children: React.ReactNode;\n onClose?: () => void;\n}) {\n return (\n <div\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n zIndex: 50,\n display: \"flex\",\n height: \"100vh\",\n width: \"100vw\",\n minWidth: \"18rem\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(17, 24, 39, 0.5)\",\n }}\n onClick={onClose}\n >\n <div\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n borderRadius: \"1.5rem\",\n backgroundColor: \"white\",\n padding: \"1.5rem\",\n boxShadow:\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <button\n style={{\n position: \"absolute\",\n right: \"1rem\",\n top: \"1rem\",\n display: \"flex\",\n cursor: \"pointer\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"none\",\n backgroundColor: \"transparent\",\n padding: \"0.25rem\",\n color: \"#9ca3af\",\n }}\n onClick={onClose}\n >\n <CloseIcon />\n </button>\n\n {children}\n </div>\n </div>\n );\n}\nconst CivicAuthIframeContainer = ({\n onClose,\n closeOnRedirect = true,\n}: CivicAuthIframeContainerProps) => {\n const [isLoading, setIsLoading] = useState(true);\n const { isLoading: isAuthLoading } = useAuth();\n const config = useConfig();\n const { setAuthResponseUrl, iframeRef } = useIframe();\n\n const processIframeUrl = useCallback(() => {\n if (iframeRef && iframeRef.current && iframeRef.current.contentWindow) {\n try {\n const iframeUrl = iframeRef.current.contentWindow.location.href;\n // we know that oauth has finished when the iframe redirects to our redirectUrl\n if (iframeUrl.startsWith(config.redirectUrl)) {\n // we still want to show the spinner during redirect\n setIsLoading(true);\n const iframeBody =\n iframeRef.current.contentWindow.document.body.innerHTML;\n\n // If we're doing a server token exchange, we need to call the server a second time\n // using a fetch so that we're on the same domain and cookies can be sent and read\n // The server will use the presence of the code_verifier cookie to determine whether to do a token exchange or not.\n // On the initial (3rd party) redirect from the auth server, the cookie won't be sent, so the server-side callback route will just render a blank page,\n // and we'll do the exchange request from here, which will include the cookies.\n if (iframeBody.includes(TOKEN_EXCHANGE_TRIGGER_TEXT)) {\n const params = new URL(iframeUrl).searchParams;\n const appUrl = globalThis.window?.location?.origin;\n fetch(\n `${config.redirectUrl}?${params.toString()}&appUrl=${appUrl}`,\n );\n } else {\n // if we're doing token-exchange in the client, we can just set the authResponseUrl\n // to be handled by the auth provider\n setAuthResponseUrl(iframeUrl);\n }\n\n if (closeOnRedirect) onClose?.();\n return true; // Successfully processed the URL\n }\n } catch {\n // If we get here, the iframe hasn't redirected to our origin yet\n console.log(\"Waiting for redirect...\");\n }\n }\n return false; // Haven't processed the URL yet\n }, [\n closeOnRedirect,\n config.redirectUrl,\n iframeRef,\n onClose,\n setAuthResponseUrl,\n ]);\n\n const intervalId = useRef<NodeJS.Timeout>();\n\n const handleEscape = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose?.();\n }\n },\n [onClose],\n );\n\n // handle Escape\n useEffect(() => {\n window.addEventListener(\"keydown\", handleEscape);\n\n return () => window.removeEventListener(\"keydown\", handleEscape);\n });\n\n const handleIframeLoad = useCallback(() => {\n setIsLoading(false);\n\n const iframeHasUrl = processIframeUrl();\n\n if (iframeHasUrl && intervalId.current) {\n clearInterval(intervalId.current);\n }\n }, [processIframeUrl, setIsLoading, intervalId]);\n\n const showLoadingIcon = isLoading || isAuthLoading;\n\n const WrapperComponent = config.modalIframe ? IframeChrome : NoChrome;\n\n return (\n <WrapperComponent onClose={onClose}>\n {showLoadingIcon ? (\n <div\n id=\"civic-auth-loading-icon-wrapper\"\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"white\",\n }}\n >\n <LoadingIcon />\n </div>\n ) : null}\n\n <CivicAuthIframe ref={iframeRef} onLoad={handleIframeLoad} />\n </WrapperComponent>\n );\n};\n\nexport type { CivicAuthIframeContainerProps };\n\nexport { CivicAuthIframeContainer };\n"]}
1
+ {"version":3,"file":"CivicAuthIframeContainer.js","sourceRoot":"","sources":["../../../../src/shared/components/CivicAuthIframeContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { LoadingIcon } from \"@/shared/components/LoadingIcon.js\";\nimport { CloseIcon } from \"@/shared/components/CloseIcon.js\";\nimport { CivicAuthIframe } from \"@/shared/components/CivicAuthIframe.js\";\nimport { useIframe } from \"@/shared/hooks/index.js\";\nimport { TOKEN_EXCHANGE_TRIGGER_TEXT } from \"@/constants.js\";\nimport { useCivicAuthConfig } from \"@/shared/hooks/index.js\";\nimport { useClientTokenExchangeSession } from \"@/shared/hooks/index.js\";\nimport { useSession } from \"@/shared/hooks/index.js\";\n\ntype CivicAuthIframeContainerProps = {\n onClose?: () => void;\n closeOnRedirect?: boolean;\n};\n\nfunction NoChrome({\n children,\n}: {\n children: React.ReactNode;\n onClose?: () => void;\n}) {\n return <div style={{ position: \"relative\" }}>{children}</div>;\n}\n\nfunction IframeChrome({\n children,\n onClose,\n}: {\n children: React.ReactNode;\n onClose?: () => void;\n}) {\n return (\n <div\n style={{\n position: \"absolute\",\n left: 0,\n top: 0,\n zIndex: 50,\n display: \"flex\",\n height: \"100vh\",\n width: \"100vw\",\n minWidth: \"18rem\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(17, 24, 39, 0.5)\",\n }}\n onClick={onClose}\n >\n <div\n style={{\n position: \"relative\",\n overflow: \"hidden\",\n borderRadius: \"1.5rem\",\n backgroundColor: \"white\",\n padding: \"1.5rem\",\n boxShadow:\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <button\n style={{\n position: \"absolute\",\n right: \"1rem\",\n top: \"1rem\",\n display: \"flex\",\n cursor: \"pointer\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"none\",\n backgroundColor: \"transparent\",\n padding: \"0.25rem\",\n color: \"#9ca3af\",\n }}\n onClick={onClose}\n >\n <CloseIcon />\n </button>\n\n {children}\n </div>\n </div>\n );\n}\nconst CivicAuthIframeContainer = ({\n onClose,\n closeOnRedirect = true,\n}: CivicAuthIframeContainerProps) => {\n const [isLoading, setIsLoading] = useState(true);\n const { isLoading: isAuthLoading, data: session } = useSession();\n const config = useCivicAuthConfig();\n const [tokenExchangeUrl, setTokenExchangeUrl] = useState<string | null>(null);\n const { doTokenExchange } = useClientTokenExchangeSession();\n const { iframeRef, iframeMode } = useIframe();\n\n useEffect(() => {\n if (tokenExchangeUrl) {\n doTokenExchange?.(tokenExchangeUrl);\n }\n }, [doTokenExchange, tokenExchangeUrl]);\n\n const processIframeUrl = useCallback(() => {\n if (!config) return;\n if (iframeRef && iframeRef.current && iframeRef.current.contentWindow) {\n try {\n const iframeUrl = iframeRef.current.contentWindow.location.href;\n // we know that oauth has finished when the iframe redirects to our redirectUrl\n if (iframeUrl.startsWith(config.redirectUrl)) {\n // we still want to show the spinner during redirect\n setIsLoading(true);\n const iframeBody =\n iframeRef.current.contentWindow.document.body.innerHTML;\n\n // If we're doing a server token exchange, we need to call the server a second time\n // using a fetch so that we're on the same domain and cookies can be sent and read\n // The server will use the presence of the code_verifier cookie to determine whether to do a token exchange or not.\n // On the initial (3rd party) redirect from the auth server, the cookie won't be sent, so the server-side callback route will just render a blank page,\n // and we'll do the exchange request from here, which will include the cookies.\n if (iframeBody.includes(TOKEN_EXCHANGE_TRIGGER_TEXT)) {\n const params = new URL(iframeUrl).searchParams;\n const appUrl = globalThis.window?.location?.origin;\n fetch(\n `${config.redirectUrl}?${params.toString()}&appUrl=${appUrl}`,\n );\n } else {\n // if we're doing token-exchange in the client, we can just set the authResponseUrl\n // to be handled by the auth provider\n // iframeRef.current.setAttribute(\"src\", \"\");\n setTokenExchangeUrl(iframeUrl);\n }\n\n if (closeOnRedirect) onClose?.();\n return true; // Successfully processed the URL\n }\n } catch {\n // If we get here, the iframe hasn't redirected to our origin yet\n console.log(\"Waiting for redirect...\");\n }\n }\n return false; // Haven't processed the URL yet\n }, [closeOnRedirect, config, iframeRef, onClose]);\n\n const intervalId = useRef<NodeJS.Timeout>();\n\n const handleEscape = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose?.();\n }\n },\n [onClose],\n );\n\n // handle Escape\n useEffect(() => {\n window.addEventListener(\"keydown\", handleEscape);\n\n return () => window.removeEventListener(\"keydown\", handleEscape);\n });\n\n const handleIframeLoad = useCallback(() => {\n setIsLoading(false);\n\n const iframeHasUrl = processIframeUrl();\n\n if (iframeHasUrl && intervalId.current) {\n clearInterval(intervalId.current);\n }\n }, [processIframeUrl, setIsLoading, intervalId]);\n\n // if we're already authenticated then we're waiting either for the iframe to be closed\n // or the page to redirect, so we want to show the loading icon\n const showLoadingIcon = session?.authenticated || isLoading || isAuthLoading;\n\n const WrapperComponent = iframeMode === \"embedded\" ? NoChrome : IframeChrome;\n\n return (\n <WrapperComponent onClose={onClose}>\n {showLoadingIcon ? (\n <div\n id=\"civic-auth-loading-icon-wrapper\"\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"white\",\n }}\n >\n <LoadingIcon />\n </div>\n ) : null}\n\n <CivicAuthIframe ref={iframeRef} onLoad={handleIframeLoad} />\n </WrapperComponent>\n );\n};\n\nexport type { CivicAuthIframeContainerProps };\n\nexport { CivicAuthIframeContainer };\n"]}
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ declare const IFrameAndLoading: ({ error, isLoading, }: {
3
+ error: Error | null;
4
+ isLoading: boolean;
5
+ }) => React.JSX.Element;
6
+ export { IFrameAndLoading };
7
+ //# sourceMappingURL=IFrameAndLoading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IFrameAndLoading.d.ts","sourceRoot":"","sources":["../../../../src/shared/components/IFrameAndLoading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,QAAA,MAAM,gBAAgB,0BAGnB;IACD,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,sBA8BA,CAAC;AACF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.IFrameAndLoading = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const useIframe_js_1 = require("../hooks/useIframe.js");
9
+ const useIsInIframe_js_1 = require("../hooks/useIsInIframe.js");
10
+ const CivicAuthIframeContainer_js_1 = require("./CivicAuthIframeContainer.js");
11
+ const BlockDisplay_js_1 = require("./BlockDisplay.js");
12
+ const LoadingIcon_js_1 = require("./LoadingIcon.js");
13
+ const IFrameAndLoading = ({ error, isLoading, }) => {
14
+ const isInIframe = (0, useIsInIframe_js_1.useIsInIframe)();
15
+ const { renderIframe, iframeIsVisible, setIframeIsVisible, iframeMode } = (0, useIframe_js_1.useIframe)();
16
+ const showIframeLoadingOverlay = iframeMode === "modal" && (isInIframe || isLoading);
17
+ return (react_1.default.createElement(react_1.default.Fragment, null,
18
+ renderIframe && (react_1.default.createElement("div", { style: iframeIsVisible ? { display: "block" } : { display: "none" } },
19
+ react_1.default.createElement(CivicAuthIframeContainer_js_1.CivicAuthIframeContainer, { onClose: () => setIframeIsVisible(false) }))),
20
+ error && (react_1.default.createElement(BlockDisplay_js_1.BlockDisplay, null,
21
+ react_1.default.createElement("div", null,
22
+ "Error: ",
23
+ error?.message))),
24
+ showIframeLoadingOverlay && !error && (react_1.default.createElement(BlockDisplay_js_1.BlockDisplay, null,
25
+ react_1.default.createElement(LoadingIcon_js_1.LoadingIcon, null)))));
26
+ };
27
+ exports.IFrameAndLoading = IFrameAndLoading;
28
+ //# sourceMappingURL=IFrameAndLoading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IFrameAndLoading.js","sourceRoot":"","sources":["../../../../src/shared/components/IFrameAndLoading.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,wDAAkD;AAClD,gEAA0D;AAC1D,+EAAyE;AACzE,uDAAiD;AACjD,qDAA+C;AAE/C,MAAM,gBAAgB,GAAG,CAAC,EACxB,KAAK,EACL,SAAS,GAIV,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,IAAA,gCAAa,GAAE,CAAC;IACnC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,UAAU,EAAE,GACrE,IAAA,wBAAS,GAAE,CAAC;IACd,MAAM,wBAAwB,GAC5B,UAAU,KAAK,OAAO,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC;IAEtD,OAAO,CACL;QACG,YAAY,IAAI,CACf,uCACE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE;YAEnE,8BAAC,sDAAwB,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAI,CAClE,CACP;QAEA,KAAK,IAAI,CACR,8BAAC,8BAAY;YACX;;gBAAa,KAAK,EAAE,OAAO,CAAO,CACrB,CAChB;QAEA,wBAAwB,IAAI,CAAC,KAAK,IAAI,CACrC,8BAAC,8BAAY;YACX,8BAAC,4BAAW,OAAG,CACF,CAChB,CACA,CACJ,CAAC;AACJ,CAAC,CAAC;AACO,4CAAgB","sourcesContent":["import React from \"react\";\nimport { useIframe } from \"../hooks/useIframe.js\";\nimport { useIsInIframe } from \"../hooks/useIsInIframe.js\";\nimport { CivicAuthIframeContainer } from \"./CivicAuthIframeContainer.js\";\nimport { BlockDisplay } from \"./BlockDisplay.js\";\nimport { LoadingIcon } from \"./LoadingIcon.js\";\n\nconst IFrameAndLoading = ({\n error,\n isLoading,\n}: {\n error: Error | null;\n isLoading: boolean;\n}) => {\n const isInIframe = useIsInIframe();\n const { renderIframe, iframeIsVisible, setIframeIsVisible, iframeMode } =\n useIframe();\n const showIframeLoadingOverlay =\n iframeMode === \"modal\" && (isInIframe || isLoading);\n\n return (\n <>\n {renderIframe && (\n <div\n style={iframeIsVisible ? { display: \"block\" } : { display: \"none\" }}\n >\n <CivicAuthIframeContainer onClose={() => setIframeIsVisible(false)} />\n </div>\n )}\n\n {error && (\n <BlockDisplay>\n <div>Error: {error?.message}</div>\n </BlockDisplay>\n )}\n\n {showIframeLoadingOverlay && !error && (\n <BlockDisplay>\n <LoadingIcon />\n </BlockDisplay>\n )}\n </>\n );\n};\nexport { IFrameAndLoading };\n"]}
@@ -1,5 +1,9 @@
1
1
  export { useToken } from "../../shared/hooks/useToken.js";
2
2
  export { useAuth } from "../../shared/hooks/useAuth.js";
3
- export { useConfig } from "../../shared/hooks/useConfig.js";
4
3
  export { useIframe } from "../../shared/hooks/useIframe.js";
4
+ export { useSession } from "../../shared/hooks/useSession.js";
5
+ export { useCivicAuthConfig } from "../../shared/hooks/useCivicAuthConfig.js";
6
+ export { useOAuthEndpoints } from "../../shared/hooks/useOAuthEndpoints.js";
7
+ export { useCurrentUrl } from "../../shared/hooks/useCurrentUrl.js";
8
+ export { useClientTokenExchangeSession } from "../../shared/hooks/useClientTokenExchangeSession.js";
5
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iDAAiD,CAAC"}
@@ -1,12 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useIframe = exports.useConfig = exports.useAuth = exports.useToken = void 0;
3
+ exports.useClientTokenExchangeSession = exports.useCurrentUrl = exports.useOAuthEndpoints = exports.useCivicAuthConfig = exports.useSession = exports.useIframe = exports.useAuth = exports.useToken = void 0;
4
4
  var useToken_js_1 = require("../../shared/hooks/useToken.js");
5
5
  Object.defineProperty(exports, "useToken", { enumerable: true, get: function () { return useToken_js_1.useToken; } });
6
6
  var useAuth_js_1 = require("../../shared/hooks/useAuth.js");
7
7
  Object.defineProperty(exports, "useAuth", { enumerable: true, get: function () { return useAuth_js_1.useAuth; } });
8
- var useConfig_js_1 = require("../../shared/hooks/useConfig.js");
9
- Object.defineProperty(exports, "useConfig", { enumerable: true, get: function () { return useConfig_js_1.useConfig; } });
10
8
  var useIframe_js_1 = require("../../shared/hooks/useIframe.js");
11
9
  Object.defineProperty(exports, "useIframe", { enumerable: true, get: function () { return useIframe_js_1.useIframe; } });
10
+ var useSession_js_1 = require("../../shared/hooks/useSession.js");
11
+ Object.defineProperty(exports, "useSession", { enumerable: true, get: function () { return useSession_js_1.useSession; } });
12
+ var useCivicAuthConfig_js_1 = require("../../shared/hooks/useCivicAuthConfig.js");
13
+ Object.defineProperty(exports, "useCivicAuthConfig", { enumerable: true, get: function () { return useCivicAuthConfig_js_1.useCivicAuthConfig; } });
14
+ var useOAuthEndpoints_js_1 = require("../../shared/hooks/useOAuthEndpoints.js");
15
+ Object.defineProperty(exports, "useOAuthEndpoints", { enumerable: true, get: function () { return useOAuthEndpoints_js_1.useOAuthEndpoints; } });
16
+ var useCurrentUrl_js_1 = require("../../shared/hooks/useCurrentUrl.js");
17
+ Object.defineProperty(exports, "useCurrentUrl", { enumerable: true, get: function () { return useCurrentUrl_js_1.useCurrentUrl; } });
18
+ var useClientTokenExchangeSession_js_1 = require("../../shared/hooks/useClientTokenExchangeSession.js");
19
+ Object.defineProperty(exports, "useClientTokenExchangeSession", { enumerable: true, get: function () { return useClientTokenExchangeSession_js_1.useClientTokenExchangeSession; } });
12
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared/hooks/index.ts"],"names":[],"mappings":";;;AAAA,0DAAsD;AAA7C,uGAAA,QAAQ,OAAA;AACjB,wDAAoD;AAA3C,qGAAA,OAAO,OAAA;AAChB,4DAAwD;AAA/C,yGAAA,SAAS,OAAA;AAClB,4DAAwD;AAA/C,yGAAA,SAAS,OAAA","sourcesContent":["export { useToken } from \"@/shared/hooks/useToken.js\";\nexport { useAuth } from \"@/shared/hooks/useAuth.js\";\nexport { useConfig } from \"@/shared/hooks/useConfig.js\";\nexport { useIframe } from \"@/shared/hooks/useIframe.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/shared/hooks/index.ts"],"names":[],"mappings":";;;AAAA,0DAAsD;AAA7C,uGAAA,QAAQ,OAAA;AACjB,wDAAoD;AAA3C,qGAAA,OAAO,OAAA;AAChB,4DAAwD;AAA/C,yGAAA,SAAS,OAAA;AAClB,8DAA0D;AAAjD,2GAAA,UAAU,OAAA;AACnB,8EAA0E;AAAjE,2HAAA,kBAAkB,OAAA;AAC3B,4EAAwE;AAA/D,yHAAA,iBAAiB,OAAA;AAC1B,oEAAgE;AAAvD,iHAAA,aAAa,OAAA;AACtB,oGAAgG;AAAvF,iJAAA,6BAA6B,OAAA","sourcesContent":["export { useToken } from \"@/shared/hooks/useToken.js\";\nexport { useAuth } from \"@/shared/hooks/useAuth.js\";\nexport { useIframe } from \"@/shared/hooks/useIframe.js\";\nexport { useSession } from \"@/shared/hooks/useSession.js\";\nexport { useCivicAuthConfig } from \"@/shared/hooks/useCivicAuthConfig.js\";\nexport { useOAuthEndpoints } from \"@/shared/hooks/useOAuthEndpoints.js\";\nexport { useCurrentUrl } from \"@/shared/hooks/useCurrentUrl.js\";\nexport { useClientTokenExchangeSession } from \"@/shared/hooks/useClientTokenExchangeSession.js\";\n"]}
@@ -0,0 +1,3 @@
1
+ declare const useCivicAuthConfig: () => import("../..").CivicAuthConfig;
2
+ export { useCivicAuthConfig };
3
+ //# sourceMappingURL=useCivicAuthConfig.d.ts.map