@civic/auth 0.1.4-beta.2 → 0.1.4-beta.3

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 (269) hide show
  1. package/CHANGELOG.md +0 -1
  2. package/README.md +8 -10
  3. package/dist/cjs/index.d.ts.map +1 -1
  4. package/dist/cjs/index.js +5 -0
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/cjs/nextjs/index.d.ts.map +1 -1
  7. package/dist/cjs/nextjs/index.js +2 -0
  8. package/dist/cjs/nextjs/index.js.map +1 -1
  9. package/dist/cjs/nextjs/providers/NextAuthProvider.js +2 -2
  10. package/dist/cjs/nextjs/providers/NextAuthProvider.js.map +1 -1
  11. package/dist/cjs/reactjs/index.d.ts.map +1 -1
  12. package/dist/cjs/reactjs/index.js +2 -0
  13. package/dist/cjs/reactjs/index.js.map +1 -1
  14. package/dist/cjs/server/index.d.ts.map +1 -1
  15. package/dist/cjs/server/index.js +2 -0
  16. package/dist/cjs/server/index.js.map +1 -1
  17. package/dist/cjs/shared/components/IFrameAndLoading.d.ts.map +1 -1
  18. package/dist/cjs/shared/components/IFrameAndLoading.js +3 -3
  19. package/dist/cjs/shared/components/IFrameAndLoading.js.map +1 -1
  20. package/dist/cjs/version.d.ts +2 -0
  21. package/dist/cjs/version.d.ts.map +1 -0
  22. package/dist/cjs/version.js +6 -0
  23. package/dist/cjs/version.js.map +1 -0
  24. package/dist/esm/index.d.ts.map +1 -1
  25. package/dist/esm/index.js +5 -1
  26. package/dist/esm/index.js.map +1 -1
  27. package/dist/esm/nextjs/index.d.ts.map +1 -1
  28. package/dist/esm/nextjs/index.js +2 -0
  29. package/dist/esm/nextjs/index.js.map +1 -1
  30. package/dist/esm/nextjs/providers/NextAuthProvider.js +1 -1
  31. package/dist/esm/nextjs/providers/NextAuthProvider.js.map +1 -1
  32. package/dist/esm/reactjs/index.d.ts.map +1 -1
  33. package/dist/esm/reactjs/index.js +2 -0
  34. package/dist/esm/reactjs/index.js.map +1 -1
  35. package/dist/esm/server/index.d.ts.map +1 -1
  36. package/dist/esm/server/index.js +2 -0
  37. package/dist/esm/server/index.js.map +1 -1
  38. package/dist/esm/shared/components/IFrameAndLoading.d.ts.map +1 -1
  39. package/dist/esm/shared/components/IFrameAndLoading.js +3 -3
  40. package/dist/esm/shared/components/IFrameAndLoading.js.map +1 -1
  41. package/dist/esm/version.d.ts +2 -0
  42. package/dist/esm/version.d.ts.map +1 -0
  43. package/dist/esm/version.js +3 -0
  44. package/dist/esm/version.js.map +1 -0
  45. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  46. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  47. package/package.json +9 -6
  48. package/dist/src/browser/storage.d.ts +0 -9
  49. package/dist/src/browser/storage.d.ts.map +0 -1
  50. package/dist/src/browser/storage.js +0 -17
  51. package/dist/src/browser/storage.js.map +0 -1
  52. package/dist/src/config.d.ts.map +0 -1
  53. package/dist/src/index.d.ts.map +0 -1
  54. package/dist/src/lib/cookies.d.ts +0 -7
  55. package/dist/src/lib/cookies.d.ts.map +0 -1
  56. package/dist/src/lib/cookies.js +0 -25
  57. package/dist/src/lib/cookies.js.map +0 -1
  58. package/dist/src/lib/jwt.d.ts.map +0 -1
  59. package/dist/src/lib/oauth.d.ts.map +0 -1
  60. package/dist/src/lib/postMessage.d.ts.map +0 -1
  61. package/dist/src/lib/postMessage.js +0 -15
  62. package/dist/src/lib/postMessage.js.map +0 -1
  63. package/dist/src/lib/windowUtil.d.ts.map +0 -1
  64. package/dist/src/lib/windowUtil.js +0 -31
  65. package/dist/src/lib/windowUtil.js.map +0 -1
  66. package/dist/src/nextjs/GetUser.d.ts.map +0 -1
  67. package/dist/src/nextjs/GetUser.js +0 -7
  68. package/dist/src/nextjs/GetUser.js.map +0 -1
  69. package/dist/src/nextjs/config.d.ts.map +0 -1
  70. package/dist/src/nextjs/config.js +0 -173
  71. package/dist/src/nextjs/config.js.map +0 -1
  72. package/dist/src/nextjs/cookies.d.ts.map +0 -1
  73. package/dist/src/nextjs/hooks/index.d.ts +0 -2
  74. package/dist/src/nextjs/hooks/index.d.ts.map +0 -1
  75. package/dist/src/nextjs/hooks/index.js +0 -2
  76. package/dist/src/nextjs/hooks/index.js.map +0 -1
  77. package/dist/src/nextjs/hooks/useRefresh.d.ts +0 -4
  78. package/dist/src/nextjs/hooks/useRefresh.d.ts.map +0 -1
  79. package/dist/src/nextjs/hooks/useRefresh.js +0 -38
  80. package/dist/src/nextjs/hooks/useRefresh.js.map +0 -1
  81. package/dist/src/nextjs/hooks/useTokenCookie.d.ts +0 -3
  82. package/dist/src/nextjs/hooks/useTokenCookie.d.ts.map +0 -1
  83. package/dist/src/nextjs/hooks/useTokenCookie.js +0 -37
  84. package/dist/src/nextjs/hooks/useTokenCookie.js.map +0 -1
  85. package/dist/src/nextjs/hooks/useUserCookie.d.ts +0 -6
  86. package/dist/src/nextjs/hooks/useUserCookie.d.ts.map +0 -1
  87. package/dist/src/nextjs/hooks/useUserCookie.js +0 -64
  88. package/dist/src/nextjs/hooks/useUserCookie.js.map +0 -1
  89. package/dist/src/nextjs/index.d.ts.map +0 -1
  90. package/dist/src/nextjs/middleware/index.d.ts.map +0 -1
  91. package/dist/src/nextjs/middleware.d.ts.map +0 -1
  92. package/dist/src/nextjs/providers/NextAuthProvider.d.ts +0 -13
  93. package/dist/src/nextjs/providers/NextAuthProvider.d.ts.map +0 -1
  94. package/dist/src/nextjs/providers/NextAuthProvider.js +0 -79
  95. package/dist/src/nextjs/providers/NextAuthProvider.js.map +0 -1
  96. package/dist/src/nextjs/routeHandler.d.ts.map +0 -1
  97. package/dist/src/nextjs/routeHandler.js +0 -212
  98. package/dist/src/nextjs/routeHandler.js.map +0 -1
  99. package/dist/src/nextjs/utils.d.ts.map +0 -1
  100. package/dist/src/reactjs/components/SignInButton.d.ts.map +0 -1
  101. package/dist/src/reactjs/components/SignOutButton.d.ts.map +0 -1
  102. package/dist/src/reactjs/components/UserButton.d.ts.map +0 -1
  103. package/dist/src/reactjs/components/UserButton.js +0 -118
  104. package/dist/src/reactjs/components/UserButton.js.map +0 -1
  105. package/dist/src/reactjs/components/index.d.ts.map +0 -1
  106. package/dist/src/reactjs/hooks/index.d.ts +0 -6
  107. package/dist/src/reactjs/hooks/index.d.ts.map +0 -1
  108. package/dist/src/reactjs/hooks/index.js +0 -6
  109. package/dist/src/reactjs/hooks/index.js.map +0 -1
  110. package/dist/src/reactjs/hooks/useAuth.d.ts.map +0 -1
  111. package/dist/src/reactjs/hooks/useRefresh.d.ts +0 -4
  112. package/dist/src/reactjs/hooks/useRefresh.d.ts.map +0 -1
  113. package/dist/src/reactjs/hooks/useRefresh.js +0 -28
  114. package/dist/src/reactjs/hooks/useRefresh.js.map +0 -1
  115. package/dist/src/reactjs/hooks/useUser.d.ts.map +0 -1
  116. package/dist/src/reactjs/index.d.ts.map +0 -1
  117. package/dist/src/reactjs/providers/index.d.ts.map +0 -1
  118. package/dist/src/server/ServerAuthenticationResolver.d.ts.map +0 -1
  119. package/dist/src/server/config.d.ts.map +0 -1
  120. package/dist/src/server/index.d.ts.map +0 -1
  121. package/dist/src/server/login.d.ts.map +0 -1
  122. package/dist/src/server/refresh.d.ts.map +0 -1
  123. package/dist/src/services/AuthenticationService.d.ts +0 -90
  124. package/dist/src/services/AuthenticationService.d.ts.map +0 -1
  125. package/dist/src/services/AuthenticationService.js +0 -243
  126. package/dist/src/services/AuthenticationService.js.map +0 -1
  127. package/dist/src/services/PKCE.d.ts.map +0 -1
  128. package/dist/src/services/types.d.ts.map +0 -1
  129. package/dist/src/shared/components/BlockDisplay.d.ts +0 -7
  130. package/dist/src/shared/components/BlockDisplay.d.ts.map +0 -1
  131. package/dist/src/shared/components/BlockDisplay.js +0 -25
  132. package/dist/src/shared/components/BlockDisplay.js.map +0 -1
  133. package/dist/src/shared/components/CivicAuthIframe.d.ts.map +0 -1
  134. package/dist/src/shared/components/CivicAuthIframe.js +0 -9
  135. package/dist/src/shared/components/CivicAuthIframe.js.map +0 -1
  136. package/dist/src/shared/components/CivicAuthIframeContainer.d.ts.map +0 -1
  137. package/dist/src/shared/components/CivicAuthIframeContainer.js +0 -138
  138. package/dist/src/shared/components/CivicAuthIframeContainer.js.map +0 -1
  139. package/dist/src/shared/components/IFrameAndLoading.d.ts +0 -7
  140. package/dist/src/shared/components/IFrameAndLoading.d.ts.map +0 -1
  141. package/dist/src/shared/components/IFrameAndLoading.js +0 -22
  142. package/dist/src/shared/components/IFrameAndLoading.js.map +0 -1
  143. package/dist/src/shared/hooks/index.d.ts +0 -9
  144. package/dist/src/shared/hooks/index.d.ts.map +0 -1
  145. package/dist/src/shared/hooks/index.js +0 -9
  146. package/dist/src/shared/hooks/index.js.map +0 -1
  147. package/dist/src/shared/hooks/useAuth.d.ts.map +0 -1
  148. package/dist/src/shared/hooks/useCivicAuthConfig.d.ts +0 -3
  149. package/dist/src/shared/hooks/useCivicAuthConfig.d.ts.map +0 -1
  150. package/dist/src/shared/hooks/useCivicAuthConfig.js +0 -10
  151. package/dist/src/shared/hooks/useCivicAuthConfig.js.map +0 -1
  152. package/dist/src/shared/hooks/useClientTokenExchangeSession.d.ts +0 -3
  153. package/dist/src/shared/hooks/useClientTokenExchangeSession.d.ts.map +0 -1
  154. package/dist/src/shared/hooks/useClientTokenExchangeSession.js +0 -13
  155. package/dist/src/shared/hooks/useClientTokenExchangeSession.js.map +0 -1
  156. package/dist/src/shared/hooks/useConfig.d.ts +0 -3
  157. package/dist/src/shared/hooks/useConfig.d.ts.map +0 -1
  158. package/dist/src/shared/hooks/useConfig.js +0 -13
  159. package/dist/src/shared/hooks/useConfig.js.map +0 -1
  160. package/dist/src/shared/hooks/useCurrentUrl.d.ts +0 -3
  161. package/dist/src/shared/hooks/useCurrentUrl.d.ts.map +0 -1
  162. package/dist/src/shared/hooks/useCurrentUrl.js +0 -24
  163. package/dist/src/shared/hooks/useCurrentUrl.js.map +0 -1
  164. package/dist/src/shared/hooks/useIframe.d.ts.map +0 -1
  165. package/dist/src/shared/hooks/useIsInIframe.d.ts +0 -3
  166. package/dist/src/shared/hooks/useIsInIframe.d.ts.map +0 -1
  167. package/dist/src/shared/hooks/useIsInIframe.js +0 -14
  168. package/dist/src/shared/hooks/useIsInIframe.js.map +0 -1
  169. package/dist/src/shared/hooks/useOAuthEndpoints.d.ts +0 -4
  170. package/dist/src/shared/hooks/useOAuthEndpoints.d.ts.map +0 -1
  171. package/dist/src/shared/hooks/useOAuthEndpoints.js +0 -14
  172. package/dist/src/shared/hooks/useOAuthEndpoints.js.map +0 -1
  173. package/dist/src/shared/hooks/useRefresh.d.ts +0 -4
  174. package/dist/src/shared/hooks/useRefresh.d.ts.map +0 -1
  175. package/dist/src/shared/hooks/useRefresh.js +0 -38
  176. package/dist/src/shared/hooks/useRefresh.js.map +0 -1
  177. package/dist/src/shared/hooks/useSession.d.ts +0 -3
  178. package/dist/src/shared/hooks/useSession.d.ts.map +0 -1
  179. package/dist/src/shared/hooks/useSignIn.d.ts +0 -14
  180. package/dist/src/shared/hooks/useSignIn.d.ts.map +0 -1
  181. package/dist/src/shared/hooks/useSignIn.js +0 -71
  182. package/dist/src/shared/hooks/useSignIn.js.map +0 -1
  183. package/dist/src/shared/hooks/useToken.d.ts.map +0 -1
  184. package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts +0 -20
  185. package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +0 -1
  186. package/dist/src/shared/lib/GenericAuthenticationRefresher.js +0 -73
  187. package/dist/src/shared/lib/GenericAuthenticationRefresher.js.map +0 -1
  188. package/dist/src/shared/lib/UserSession.d.ts.map +0 -1
  189. package/dist/src/shared/lib/session.d.ts +0 -3
  190. package/dist/src/shared/lib/session.d.ts.map +0 -1
  191. package/dist/src/shared/lib/session.js +0 -21
  192. package/dist/src/shared/lib/session.js.map +0 -1
  193. package/dist/src/shared/lib/storage.d.ts.map +0 -1
  194. package/dist/src/shared/lib/types.d.ts +0 -35
  195. package/dist/src/shared/lib/types.d.ts.map +0 -1
  196. package/dist/src/shared/lib/types.js +0 -18
  197. package/dist/src/shared/lib/types.js.map +0 -1
  198. package/dist/src/shared/lib/util.d.ts.map +0 -1
  199. package/dist/src/shared/lib/util.js +0 -133
  200. package/dist/src/shared/lib/util.js.map +0 -1
  201. package/dist/src/shared/providers/AuthContext.d.ts.map +0 -1
  202. package/dist/src/shared/providers/AuthProvider.d.ts +0 -21
  203. package/dist/src/shared/providers/AuthProvider.d.ts.map +0 -1
  204. package/dist/src/shared/providers/AuthProvider.js +0 -63
  205. package/dist/src/shared/providers/AuthProvider.js.map +0 -1
  206. package/dist/src/shared/providers/CivicAuthConfigContext.d.ts +0 -16
  207. package/dist/src/shared/providers/CivicAuthConfigContext.d.ts.map +0 -1
  208. package/dist/src/shared/providers/CivicAuthConfigContext.js +0 -43
  209. package/dist/src/shared/providers/CivicAuthConfigContext.js.map +0 -1
  210. package/dist/src/shared/providers/CivicAuthProvider.d.ts.map +0 -1
  211. package/dist/src/shared/providers/CivicAuthProvider.js +0 -32
  212. package/dist/src/shared/providers/CivicAuthProvider.js.map +0 -1
  213. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.d.ts +0 -17
  214. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.d.ts.map +0 -1
  215. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.js +0 -146
  216. package/dist/src/shared/providers/ClientTokenExchangeSessionProvider.js.map +0 -1
  217. package/dist/src/shared/providers/ConfigProvider.d.ts +0 -21
  218. package/dist/src/shared/providers/ConfigProvider.d.ts.map +0 -1
  219. package/dist/src/shared/providers/ConfigProvider.js +0 -19
  220. package/dist/src/shared/providers/ConfigProvider.js.map +0 -1
  221. package/dist/src/shared/providers/IframeProvider.d.ts +0 -19
  222. package/dist/src/shared/providers/IframeProvider.d.ts.map +0 -1
  223. package/dist/src/shared/providers/IframeProvider.js +0 -29
  224. package/dist/src/shared/providers/IframeProvider.js.map +0 -1
  225. package/dist/src/shared/providers/SessionProvider.d.ts +0 -19
  226. package/dist/src/shared/providers/SessionProvider.d.ts.map +0 -1
  227. package/dist/src/shared/providers/SessionProvider.js +0 -23
  228. package/dist/src/shared/providers/SessionProvider.js.map +0 -1
  229. package/dist/src/shared/providers/TokenProvider.d.ts.map +0 -1
  230. package/dist/src/shared/providers/TokenProvider.js +0 -42
  231. package/dist/src/shared/providers/TokenProvider.js.map +0 -1
  232. package/dist/src/shared/providers/UserProvider.d.ts +0 -20
  233. package/dist/src/shared/providers/UserProvider.d.ts.map +0 -1
  234. package/dist/src/shared/providers/UserProvider.js +0 -51
  235. package/dist/src/shared/providers/UserProvider.js.map +0 -1
  236. package/dist/src/types.d.ts +0 -146
  237. package/dist/src/types.d.ts.map +0 -1
  238. package/dist/src/types.js +0 -4
  239. package/dist/src/types.js.map +0 -1
  240. package/dist/test/integration/sdk.test.d.ts.map +0 -1
  241. package/dist/test/integration/sdk.test.js +0 -189
  242. package/dist/test/integration/sdk.test.js.map +0 -1
  243. package/dist/test/unit/lib/oauth.test.d.ts.map +0 -1
  244. package/dist/test/unit/nextjs/NextAuthProvider.test.d.ts.map +0 -1
  245. package/dist/test/unit/nextjs/NextAuthProvider.test.js +0 -31
  246. package/dist/test/unit/nextjs/NextAuthProvider.test.js.map +0 -1
  247. package/dist/test/unit/nextjs/config.test.d.ts.map +0 -1
  248. package/dist/test/unit/nextjs/getUser.test.d.ts.map +0 -1
  249. package/dist/test/unit/nextjs/getUser.test.js +0 -22
  250. package/dist/test/unit/nextjs/getUser.test.js.map +0 -1
  251. package/dist/test/unit/nextjs/middleware.test.d.ts.map +0 -1
  252. package/dist/test/unit/nextjs/utils.test.d.ts.map +0 -1
  253. package/dist/test/unit/publicApi/apiSnapshot.test.d.ts.map +0 -1
  254. package/dist/test/unit/react/components/SignInButton.test.d.ts.map +0 -1
  255. package/dist/test/unit/react/components/SignOutButton.test.d.ts.map +0 -1
  256. package/dist/test/unit/server/login.test.d.ts.map +0 -1
  257. package/dist/test/unit/server/refresh.test.d.ts.map +0 -1
  258. package/dist/test/unit/server/session.test.d.ts.map +0 -1
  259. package/dist/test/unit/services/AuthenticationService.test.d.ts.map +0 -1
  260. package/dist/test/unit/services/AuthenticationService.test.js +0 -121
  261. package/dist/test/unit/services/AuthenticationService.test.js.map +0 -1
  262. package/dist/test/unit/services/ServerAuthenticationResolver.test.d.ts.map +0 -1
  263. package/dist/test/unit/shared/GenericAuthenticationRefresher.test.d.ts.map +0 -1
  264. package/dist/test/unit/shared/UserSession.test.d.ts.map +0 -1
  265. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.d.ts.map +0 -1
  266. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js +0 -122
  267. package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js.map +0 -1
  268. package/dist/test/unit/shared/storage.test.d.ts.map +0 -1
  269. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,138 +0,0 @@
1
- "use client";
2
- import React, { useCallback, useEffect, useRef, useState } from "react";
3
- import { LoadingIcon } from "@/shared/components/LoadingIcon.js";
4
- import { CloseIcon } from "@/shared/components/CloseIcon.js";
5
- import { CivicAuthIframe } from "@/shared/components/CivicAuthIframe.js";
6
- import { useIframe } from "@/shared/hooks/index.js";
7
- import { TOKEN_EXCHANGE_TRIGGER_TEXT } from "@/constants.js";
8
- import { useCivicAuthConfig } from "@/shared/hooks/index.js";
9
- import { useClientTokenExchangeSession } from "@/shared/hooks/index.js";
10
- import { useSession } from "@/shared/hooks/index.js";
11
- function NoChrome({ children, }) {
12
- return React.createElement("div", { style: { position: "relative" } }, children);
13
- }
14
- function IframeChrome({ children, onClose, }) {
15
- return (React.createElement("div", { style: {
16
- position: "absolute",
17
- left: 0,
18
- top: 0,
19
- zIndex: 50,
20
- display: "flex",
21
- height: "100vh",
22
- width: "100vw",
23
- minWidth: "18rem",
24
- alignItems: "center",
25
- justifyContent: "center",
26
- backgroundColor: "rgba(17, 24, 39, 0.5)",
27
- }, onClick: onClose },
28
- React.createElement("div", { style: {
29
- position: "relative",
30
- overflow: "hidden",
31
- borderRadius: "1.5rem",
32
- backgroundColor: "white",
33
- padding: "1.5rem",
34
- boxShadow: "0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)",
35
- }, onClick: (e) => e.stopPropagation() },
36
- React.createElement("button", { style: {
37
- position: "absolute",
38
- right: "1rem",
39
- top: "1rem",
40
- display: "flex",
41
- cursor: "pointer",
42
- alignItems: "center",
43
- justifyContent: "center",
44
- border: "none",
45
- backgroundColor: "transparent",
46
- padding: "0.25rem",
47
- color: "#9ca3af",
48
- }, onClick: onClose },
49
- React.createElement(CloseIcon, null)),
50
- children)));
51
- }
52
- const CivicAuthIframeContainer = ({ onClose, closeOnRedirect = true, }) => {
53
- const [isLoading, setIsLoading] = useState(true);
54
- const { isLoading: isAuthLoading, data: session } = useSession();
55
- const config = useCivicAuthConfig();
56
- const [tokenExchangeUrl, setTokenExchangeUrl] = useState(null);
57
- const { doTokenExchange } = useClientTokenExchangeSession();
58
- const { iframeRef, iframeMode } = useIframe();
59
- useEffect(() => {
60
- if (tokenExchangeUrl) {
61
- doTokenExchange?.(tokenExchangeUrl);
62
- }
63
- }, [doTokenExchange, tokenExchangeUrl]);
64
- const processIframeUrl = useCallback(() => {
65
- if (!config)
66
- return;
67
- if (iframeRef && iframeRef.current && iframeRef.current.contentWindow) {
68
- try {
69
- const iframeUrl = iframeRef.current.contentWindow.location.href;
70
- // we know that oauth has finished when the iframe redirects to our redirectUrl
71
- if (iframeUrl.startsWith(config.redirectUrl)) {
72
- // we still want to show the spinner during redirect
73
- setIsLoading(true);
74
- const iframeBody = iframeRef.current.contentWindow.document.body.innerHTML;
75
- // If we're doing a server token exchange, we need to call the server a second time
76
- // using a fetch so that we're on the same domain and cookies can be sent and read
77
- // The server will use the presence of the code_verifier cookie to determine whether to do a token exchange or not.
78
- // 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,
79
- // and we'll do the exchange request from here, which will include the cookies.
80
- if (iframeBody.includes(TOKEN_EXCHANGE_TRIGGER_TEXT)) {
81
- const params = new URL(iframeUrl).searchParams;
82
- const appUrl = globalThis.window?.location?.origin;
83
- fetch(`${config.redirectUrl}?${params.toString()}&appUrl=${appUrl}`);
84
- }
85
- else {
86
- // if we're doing token-exchange in the client, we can just set the authResponseUrl
87
- // to be handled by the auth provider
88
- // iframeRef.current.setAttribute("src", "");
89
- setTokenExchangeUrl(iframeUrl);
90
- }
91
- if (closeOnRedirect)
92
- onClose?.();
93
- return true; // Successfully processed the URL
94
- }
95
- }
96
- catch {
97
- // If we get here, the iframe hasn't redirected to our origin yet
98
- console.log("Waiting for redirect...");
99
- }
100
- }
101
- return false; // Haven't processed the URL yet
102
- }, [closeOnRedirect, config, iframeRef, onClose]);
103
- const intervalId = useRef();
104
- const handleEscape = useCallback((event) => {
105
- if (event.key === "Escape") {
106
- onClose?.();
107
- }
108
- }, [onClose]);
109
- // handle Escape
110
- useEffect(() => {
111
- window.addEventListener("keydown", handleEscape);
112
- return () => window.removeEventListener("keydown", handleEscape);
113
- });
114
- const handleIframeLoad = useCallback(() => {
115
- setIsLoading(false);
116
- const iframeHasUrl = processIframeUrl();
117
- if (iframeHasUrl && intervalId.current) {
118
- clearInterval(intervalId.current);
119
- }
120
- }, [processIframeUrl, setIsLoading, intervalId]);
121
- // if we're already authenticated then we're waiting either for the iframe to be closed
122
- // or the page to redirect, so we want to show the loading icon
123
- const showLoadingIcon = session?.authenticated || isLoading || isAuthLoading;
124
- const WrapperComponent = iframeMode === "embedded" ? NoChrome : IframeChrome;
125
- return (React.createElement(WrapperComponent, { onClose: onClose },
126
- showLoadingIcon ? (React.createElement("div", { id: "civic-auth-loading-icon-wrapper", style: {
127
- position: "absolute",
128
- inset: 0,
129
- display: "flex",
130
- alignItems: "center",
131
- justifyContent: "center",
132
- backgroundColor: "white",
133
- } },
134
- React.createElement(LoadingIcon, null))) : null,
135
- React.createElement(CivicAuthIframe, { ref: iframeRef, onLoad: handleIframeLoad })));
136
- };
137
- export { CivicAuthIframeContainer };
138
- //# sourceMappingURL=CivicAuthIframeContainer.js.map
@@ -1 +0,0 @@
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"]}
@@ -1,7 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,22 +0,0 @@
1
- import React from "react";
2
- import { useIframe } from "../hooks/useIframe.js";
3
- import { useIsInIframe } from "../hooks/useIsInIframe.js";
4
- import { CivicAuthIframeContainer } from "./CivicAuthIframeContainer.js";
5
- import { BlockDisplay } from "./BlockDisplay.js";
6
- import { LoadingIcon } from "./LoadingIcon.js";
7
- const IFrameAndLoading = ({ error, isLoading, }) => {
8
- const isInIframe = useIsInIframe();
9
- const { renderIframe, iframeIsVisible, setIframeIsVisible, iframeMode } = useIframe();
10
- const showIframeLoadingOverlay = iframeMode === "modal" && (isInIframe || isLoading);
11
- return (React.createElement(React.Fragment, null,
12
- renderIframe && (React.createElement("div", { style: iframeIsVisible ? { display: "block" } : { display: "none" } },
13
- React.createElement(CivicAuthIframeContainer, { onClose: () => setIframeIsVisible(false) }))),
14
- error && (React.createElement(BlockDisplay, null,
15
- React.createElement("div", null,
16
- "Error: ",
17
- error?.message))),
18
- showIframeLoadingOverlay && !error && (React.createElement(BlockDisplay, null,
19
- React.createElement(LoadingIcon, null)))));
20
- };
21
- export { IFrameAndLoading };
22
- //# sourceMappingURL=IFrameAndLoading.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"IFrameAndLoading.js","sourceRoot":"","sources":["../../../../src/shared/components/IFrameAndLoading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,gBAAgB,GAAG,CAAC,EACxB,KAAK,EACL,SAAS,GAIV,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,UAAU,EAAE,GACrE,SAAS,EAAE,CAAC;IACd,MAAM,wBAAwB,GAC5B,UAAU,KAAK,OAAO,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC;IAEtD,OAAO,CACL;QACG,YAAY,IAAI,CACf,6BACE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE;YAEnE,oBAAC,wBAAwB,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAI,CAClE,CACP;QAEA,KAAK,IAAI,CACR,oBAAC,YAAY;YACX;;gBAAa,KAAK,EAAE,OAAO,CAAO,CACrB,CAChB;QAEA,wBAAwB,IAAI,CAAC,KAAK,IAAI,CACrC,oBAAC,YAAY;YACX,oBAAC,WAAW,OAAG,CACF,CAChB,CACA,CACJ,CAAC;AACJ,CAAC,CAAC;AACF,OAAO,EAAE,gBAAgB,EAAE,CAAC","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,9 +0,0 @@
1
- export { useToken } from "@/shared/hooks/useToken.js";
2
- export { useAuth } from "@/shared/hooks/useAuth.js";
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";
9
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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,9 +0,0 @@
1
- export { useToken } from "@/shared/hooks/useToken.js";
2
- export { useAuth } from "@/shared/hooks/useAuth.js";
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";
9
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","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","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"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useAuth.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,OAAO,mEAQZ,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -1,3 +0,0 @@
1
- declare const useCivicAuthConfig: () => import("../lib/types.js").CivicAuthConfig;
2
- export { useCivicAuthConfig };
3
- //# sourceMappingURL=useCivicAuthConfig.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCivicAuthConfig.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useCivicAuthConfig.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,kBAAkB,iDAGvB,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,10 +0,0 @@
1
- "use client";
2
- import { useContext } from "react";
3
- import { CivicAuthConfigContext } from "@/shared/providers/CivicAuthConfigContext.js";
4
- // TokenProvider will use this internal context to access Config
5
- const useCivicAuthConfig = () => {
6
- const context = useContext(CivicAuthConfigContext);
7
- return context;
8
- };
9
- export { useCivicAuthConfig };
10
- //# sourceMappingURL=useCivicAuthConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCivicAuthConfig.js","sourceRoot":"","sources":["../../../../src/shared/hooks/useCivicAuthConfig.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AAEtF,gEAAgE;AAChE,MAAM,kBAAkB,GAAG,GAAG,EAAE;IAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACnD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC","sourcesContent":["\"use client\";\nimport { useContext } from \"react\";\nimport { CivicAuthConfigContext } from \"@/shared/providers/CivicAuthConfigContext.js\";\n\n// TokenProvider will use this internal context to access Config\nconst useCivicAuthConfig = () => {\n const context = useContext(CivicAuthConfigContext);\n return context;\n};\n\nexport { useCivicAuthConfig };\n"]}
@@ -1,3 +0,0 @@
1
- declare const useClientTokenExchangeSession: () => import("@/shared/providers/ClientTokenExchangeSessionProvider.js").ClientTokenExchangeSessionProviderOutput;
2
- export { useClientTokenExchangeSession };
3
- //# sourceMappingURL=useClientTokenExchangeSession.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useClientTokenExchangeSession.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useClientTokenExchangeSession.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,6BAA6B,mHAMlC,CAAC;AAEF,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
@@ -1,13 +0,0 @@
1
- "use client";
2
- import { useContext } from "react";
3
- import { ClientTokenExchangeSessionContext } from "@/shared/providers/ClientTokenExchangeSessionProvider.js";
4
- // TokenProvider will use this internal context to access session
5
- const useClientTokenExchangeSession = () => {
6
- const context = useContext(ClientTokenExchangeSessionContext);
7
- if (!context) {
8
- throw new Error("useSession must be used within an SessionProvider");
9
- }
10
- return context;
11
- };
12
- export { useClientTokenExchangeSession };
13
- //# sourceMappingURL=useClientTokenExchangeSession.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useClientTokenExchangeSession.js","sourceRoot":"","sources":["../../../../src/shared/hooks/useClientTokenExchangeSession.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,iCAAiC,EAAE,MAAM,0DAA0D,CAAC;AAE7G,iEAAiE;AACjE,MAAM,6BAA6B,GAAG,GAAG,EAAE;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,iCAAiC,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,EAAE,6BAA6B,EAAE,CAAC","sourcesContent":["\"use client\";\nimport { useContext } from \"react\";\nimport { ClientTokenExchangeSessionContext } from \"@/shared/providers/ClientTokenExchangeSessionProvider.js\";\n\n// TokenProvider will use this internal context to access session\nconst useClientTokenExchangeSession = () => {\n const context = useContext(ClientTokenExchangeSessionContext);\n if (!context) {\n throw new Error(\"useSession must be used within an SessionProvider\");\n }\n return context;\n};\n\nexport { useClientTokenExchangeSession };\n"]}
@@ -1,3 +0,0 @@
1
- declare const useConfig: () => import("@/shared/providers/ConfigProvider.js").ConfigProviderOutput;
2
- export { useConfig };
3
- //# sourceMappingURL=useConfig.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useConfig.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useConfig.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,SAAS,2EAMd,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -1,13 +0,0 @@
1
- "use client";
2
- import { useContext } from "react";
3
- import { ConfigContext } from "@/shared/providers/ConfigProvider.js";
4
- // TokenProvider will use this internal context to access Config
5
- const useConfig = () => {
6
- const context = useContext(ConfigContext);
7
- if (!context) {
8
- throw new Error("useConfig must be used within an ConfigProvider");
9
- }
10
- return context;
11
- };
12
- export { useConfig };
13
- //# sourceMappingURL=useConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useConfig.js","sourceRoot":"","sources":["../../../../src/shared/hooks/useConfig.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,gEAAgE;AAChE,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["\"use client\";\nimport { useContext } from \"react\";\nimport { ConfigContext } from \"@/shared/providers/ConfigProvider.js\";\n\n// TokenProvider will use this internal context to access Config\nconst useConfig = () => {\n const context = useContext(ConfigContext);\n if (!context) {\n throw new Error(\"useConfig must be used within an ConfigProvider\");\n }\n return context;\n};\n\nexport { useConfig };\n"]}
@@ -1,3 +0,0 @@
1
- declare const useCurrentUrl: () => string | undefined;
2
- export { useCurrentUrl };
3
- //# sourceMappingURL=useCurrentUrl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCurrentUrl.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useCurrentUrl.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,aAAa,0BAuBlB,CAAC;AACF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1,24 +0,0 @@
1
- import { useEffect, useState } from "react";
2
- const useCurrentUrl = () => {
3
- const [currentUrl, setCurrentUrl] = useState();
4
- // update the current url when the url changes
5
- useEffect(() => {
6
- const handleUrlChange = () => {
7
- setCurrentUrl(window.location.href);
8
- };
9
- window.addEventListener("popstate", handleUrlChange);
10
- window.addEventListener("pushstate", handleUrlChange);
11
- window.addEventListener("replacestate", handleUrlChange);
12
- handleUrlChange();
13
- return () => {
14
- if (typeof window !== "undefined") {
15
- window.removeEventListener("popstate", handleUrlChange);
16
- window.removeEventListener("pushstate", handleUrlChange);
17
- window.removeEventListener("replacestate", handleUrlChange);
18
- }
19
- };
20
- }, []);
21
- return currentUrl;
22
- };
23
- export { useCurrentUrl };
24
- //# sourceMappingURL=useCurrentUrl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCurrentUrl.js","sourceRoot":"","sources":["../../../../src/shared/hooks/useCurrentUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,aAAa,GAAG,GAAG,EAAE;IACzB,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,EAAsB,CAAC;IACnE,8CAA8C;IAC9C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,eAAe,GAAG,GAAG,EAAE;YAC3B,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACrD,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QACtD,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QAEzD,eAAe,EAAE,CAAC;QAElB,OAAO,GAAG,EAAE;YACV,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;gBACxD,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;gBACzD,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AACF,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import { useEffect, useState } from \"react\";\n\nconst useCurrentUrl = () => {\n const [currentUrl, setCurrentUrl] = useState<string | undefined>();\n // update the current url when the url changes\n useEffect(() => {\n const handleUrlChange = () => {\n setCurrentUrl(window.location.href);\n };\n window.addEventListener(\"popstate\", handleUrlChange);\n window.addEventListener(\"pushstate\", handleUrlChange);\n window.addEventListener(\"replacestate\", handleUrlChange);\n\n handleUrlChange();\n\n return () => {\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"popstate\", handleUrlChange);\n window.removeEventListener(\"pushstate\", handleUrlChange);\n window.removeEventListener(\"replacestate\", handleUrlChange);\n }\n };\n }, []);\n\n return currentUrl;\n};\nexport { useCurrentUrl };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useIframe.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useIframe.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,SAAS,2EAMd,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -1,3 +0,0 @@
1
- declare const useIsInIframe: () => boolean;
2
- export { useIsInIframe };
3
- //# sourceMappingURL=useIsInIframe.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useIsInIframe.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useIsInIframe.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,aAAa,eASlB,CAAC;AACF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1,14 +0,0 @@
1
- import { isWindowInIframe } from "@/lib/windowUtil.js";
2
- import { useEffect, useState } from "react";
3
- const useIsInIframe = () => {
4
- const [isInIframe, setIsInIframe] = useState(true);
5
- useEffect(() => {
6
- if (typeof globalThis.window !== "undefined") {
7
- const isInIframeVal = isWindowInIframe(globalThis.window);
8
- setIsInIframe(isInIframeVal);
9
- }
10
- }, []);
11
- return isInIframe;
12
- };
13
- export { useIsInIframe };
14
- //# sourceMappingURL=useIsInIframe.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useIsInIframe.js","sourceRoot":"","sources":["../../../../src/shared/hooks/useIsInIframe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,aAAa,GAAG,GAAG,EAAE;IACzB,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,UAAU,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC7C,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1D,aAAa,CAAC,aAAa,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AACF,OAAO,EAAE,aAAa,EAAE,CAAC","sourcesContent":["import { isWindowInIframe } from \"@/lib/windowUtil.js\";\nimport { useEffect, useState } from \"react\";\n\nconst useIsInIframe = () => {\n const [isInIframe, setIsInIframe] = useState(true);\n useEffect(() => {\n if (typeof globalThis.window !== \"undefined\") {\n const isInIframeVal = isWindowInIframe(globalThis.window);\n setIsInIframe(isInIframeVal);\n }\n }, []);\n return isInIframe;\n};\nexport { useIsInIframe };\n"]}
@@ -1,4 +0,0 @@
1
- import type { Endpoints } from "@/types.js";
2
- declare const useOAuthEndpoints: (oauthServer?: string) => Endpoints | null;
3
- export { useOAuthEndpoints };
4
- //# sourceMappingURL=useOAuthEndpoints.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useOAuthEndpoints.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useOAuthEndpoints.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,QAAA,MAAM,iBAAiB,iBAAkB,MAAM,qBAW9C,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1,14 +0,0 @@
1
- import { DEFAULT_AUTH_SERVER } from "@/constants.js";
2
- import { getOauthEndpoints } from "@/lib/oauth.js";
3
- import { useEffect, useState } from "react";
4
- const useOAuthEndpoints = (oauthServer) => {
5
- const [endpoints, setEndpoints] = useState(null);
6
- useEffect(() => {
7
- getOauthEndpoints(oauthServer || DEFAULT_AUTH_SERVER).then((retrievedEndpoints) => {
8
- setEndpoints(retrievedEndpoints);
9
- });
10
- }, [oauthServer]);
11
- return endpoints;
12
- };
13
- export { useOAuthEndpoints };
14
- //# sourceMappingURL=useOAuthEndpoints.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useOAuthEndpoints.js","sourceRoot":"","sources":["../../../../src/shared/hooks/useOAuthEndpoints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,iBAAiB,GAAG,CAAC,WAAoB,EAAE,EAAE;IACjD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAmB,IAAI,CAAC,CAAC;IACnE,SAAS,CAAC,GAAG,EAAE;QACb,iBAAiB,CAAC,WAAW,IAAI,mBAAmB,CAAC,CAAC,IAAI,CACxD,CAAC,kBAAkB,EAAE,EAAE;YACrB,YAAY,CAAC,kBAAkB,CAAC,CAAC;QACnC,CAAC,CACF,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import { DEFAULT_AUTH_SERVER } from \"@/constants.js\";\nimport { getOauthEndpoints } from \"@/lib/oauth.js\";\nimport type { Endpoints } from \"@/types.js\";\nimport { useEffect, useState } from \"react\";\n\nconst useOAuthEndpoints = (oauthServer?: string) => {\n const [endpoints, setEndpoints] = useState<Endpoints | null>(null);\n useEffect(() => {\n getOauthEndpoints(oauthServer || DEFAULT_AUTH_SERVER).then(\n (retrievedEndpoints) => {\n setEndpoints(retrievedEndpoints);\n },\n );\n }, [oauthServer]);\n\n return endpoints;\n};\n\nexport { useOAuthEndpoints };\n"]}
@@ -1,4 +0,0 @@
1
- import type { SessionData } from "@/types.js";
2
- declare const useRefresh: (session: SessionData | null) => void;
3
- export { useRefresh };
4
- //# sourceMappingURL=useRefresh.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useRefresh.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useRefresh.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,QAAA,MAAM,UAAU,YAAa,WAAW,GAAG,IAAI,SAuC9C,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -1,38 +0,0 @@
1
- import { LocalStorageAdapter } from "@/browser/storage.js";
2
- import { useEffect, useMemo, useState } from "react";
3
- import { GenericAuthenticationRefresher } from "../lib/GenericAuthenticationRefresher.js";
4
- import { useCivicAuthConfig } from "./useCivicAuthConfig.js";
5
- const useRefresh = (session) => {
6
- const authConfig = useCivicAuthConfig();
7
- const storage = useMemo(() => new LocalStorageAdapter(), []);
8
- // setup token autorefresh
9
- const [refresher, setRefresher] = useState(undefined);
10
- useEffect(() => {
11
- if (!authConfig)
12
- return;
13
- const abortController = new AbortController();
14
- const currentRefresher = refresher;
15
- GenericAuthenticationRefresher.build({ ...authConfig }, storage).then((newRefresher) => {
16
- if (abortController.signal.aborted)
17
- return;
18
- currentRefresher?.clearAutorefresh();
19
- setRefresher(newRefresher);
20
- });
21
- return () => {
22
- abortController.abort();
23
- currentRefresher?.clearAutorefresh();
24
- };
25
- // eslint-disable-next-line react-hooks/exhaustive-deps
26
- }, [authConfig, storage]); // Only depend on what actually changes
27
- useEffect(() => {
28
- if (session?.authenticated) {
29
- refresher?.setupAutorefresh();
30
- }
31
- else {
32
- refresher?.clearAutorefresh();
33
- }
34
- return () => refresher?.clearAutorefresh();
35
- }, [refresher, session?.authenticated]);
36
- };
37
- export { useRefresh };
38
- //# sourceMappingURL=useRefresh.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useRefresh.js","sourceRoot":"","sources":["../../../../src/shared/hooks/useRefresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,MAAM,UAAU,GAAG,CAAC,OAA2B,EAAE,EAAE;IACjD,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,mBAAmB,EAAE,EAAE,EAAE,CAAC,CAAC;IAE7D,0BAA0B;IAC1B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAExC,SAAS,CAAC,CAAC;IAEb,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,MAAM,gBAAgB,GAAG,SAAS,CAAC;QAEnC,8BAA8B,CAAC,KAAK,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CACnE,CAAC,YAAY,EAAE,EAAE;YACf,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO;YAE3C,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;YACrC,YAAY,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC,CACF,CAAC;QAEF,OAAO,GAAG,EAAE;YACV,eAAe,CAAC,KAAK,EAAE,CAAC;YACxB,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;QACvC,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,uCAAuC;IAElE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;YAC3B,SAAS,EAAE,gBAAgB,EAAE,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,SAAS,EAAE,gBAAgB,EAAE,CAAC;QAChC,CAAC;QAED,OAAO,GAAG,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC7C,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC","sourcesContent":["import { LocalStorageAdapter } from \"@/browser/storage.js\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { GenericAuthenticationRefresher } from \"../lib/GenericAuthenticationRefresher.js\";\nimport { useCivicAuthConfig } from \"./useCivicAuthConfig.js\";\nimport type { SessionData } from \"@/types.js\";\n\nconst useRefresh = (session: SessionData | null) => {\n const authConfig = useCivicAuthConfig();\n const storage = useMemo(() => new LocalStorageAdapter(), []);\n\n // setup token autorefresh\n const [refresher, setRefresher] = useState<\n GenericAuthenticationRefresher | undefined\n >(undefined);\n\n useEffect(() => {\n if (!authConfig) return;\n const abortController = new AbortController();\n const currentRefresher = refresher;\n\n GenericAuthenticationRefresher.build({ ...authConfig }, storage).then(\n (newRefresher) => {\n if (abortController.signal.aborted) return;\n\n currentRefresher?.clearAutorefresh();\n setRefresher(newRefresher);\n },\n );\n\n return () => {\n abortController.abort();\n currentRefresher?.clearAutorefresh();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [authConfig, storage]); // Only depend on what actually changes\n\n useEffect(() => {\n if (session?.authenticated) {\n refresher?.setupAutorefresh();\n } else {\n refresher?.clearAutorefresh();\n }\n\n return () => refresher?.clearAutorefresh();\n }, [refresher, session?.authenticated]);\n};\n\nexport { useRefresh };\n"]}
@@ -1,3 +0,0 @@
1
- declare const useSession: () => import("@/shared/providers/SessionProvider.js").SessionProviderOutput;
2
- export { useSession };
3
- //# sourceMappingURL=useSession.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSession.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useSession.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,UAAU,6EAMf,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -1,14 +0,0 @@
1
- import type { DisplayMode } from "@/types.js";
2
- import { type PKCEConsumer } from "@/services/types.js";
3
- type SignInProps = {
4
- pkceConsumer?: PKCEConsumer;
5
- preSignOut?: () => Promise<void>;
6
- postSignOut?: () => Promise<void>;
7
- };
8
- declare const useSignIn: ({ pkceConsumer, preSignOut, postSignOut }: SignInProps) => {
9
- signIn: (inDisplayMode?: DisplayMode) => Promise<void>;
10
- signOut: () => Promise<void>;
11
- displayMode: DisplayMode;
12
- };
13
- export { useSignIn };
14
- //# sourceMappingURL=useSignIn.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSignIn.d.ts","sourceRoot":"","sources":["../../../../src/shared/hooks/useSignIn.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEpE,KAAK,WAAW,GAAG;IACjB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC,CAAC;AACF,QAAA,MAAM,SAAS,8CAA+C,WAAW;6BAgC/C,WAAW,KAAc,OAAO,CAAC,IAAI,CAAC;;;CAuC/D,CAAC;AACF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -1,71 +0,0 @@
1
- import { BrowserAuthenticationInitiator } from "@/services/AuthenticationService.js";
2
- import { BrowserPublicClientPKCEProducer } from "@/services/PKCE.js";
3
- import { useCivicAuthConfig } from "@/shared/hooks/useCivicAuthConfig.js";
4
- import { useIframe } from "@/shared/hooks/useIframe.js";
5
- import { useCallback, useEffect, useMemo, useState } from "react";
6
- import { PopupError } from "@/services/types.js";
7
- const useSignIn = ({ pkceConsumer, preSignOut, postSignOut }) => {
8
- const civicAuthConfig = useCivicAuthConfig();
9
- const { iframeRef, setIframeIsVisible } = useIframe();
10
- const [displayMode, setDisplayMode] = useState("iframe");
11
- const authInitiator = useMemo(() => {
12
- if (!civicAuthConfig) {
13
- return null;
14
- }
15
- const { clientId, redirectUrl, nonce, oauthServer, endpoints, scopes } = civicAuthConfig;
16
- return new BrowserAuthenticationInitiator({
17
- pkceConsumer: pkceConsumer || new BrowserPublicClientPKCEProducer(), // generate and retrieve the challenge client-side
18
- clientId,
19
- redirectUrl,
20
- scopes,
21
- displayMode,
22
- oauthServer,
23
- endpointOverrides: endpoints,
24
- nonce,
25
- });
26
- }, [civicAuthConfig, displayMode, pkceConsumer]);
27
- useEffect(() => {
28
- return () => {
29
- if (authInitiator) {
30
- authInitiator.cleanup();
31
- }
32
- };
33
- }, [authInitiator]);
34
- const signIn = useCallback(async (inDisplayMode = "iframe") => {
35
- if (!authInitiator)
36
- return;
37
- authInitiator.setDisplayMode(inDisplayMode);
38
- setDisplayMode(inDisplayMode);
39
- if (inDisplayMode === "iframe") {
40
- setIframeIsVisible(true);
41
- }
42
- const useIframeRef = iframeRef?.current || null;
43
- await authInitiator.signIn(useIframeRef).catch((error) => {
44
- console.log("signIn error", {
45
- error,
46
- isPopupError: error instanceof PopupError,
47
- });
48
- // if we've tried to open a popup and it has failed, then fallback to redirect mode
49
- if (error instanceof PopupError) {
50
- setDisplayMode("redirect");
51
- setIframeIsVisible(false); // hide the iframe
52
- authInitiator.cleanup(); // clear any event listeners from before
53
- authInitiator.setDisplayMode("redirect"); // switch to redirect mode
54
- authInitiator.signIn(useIframeRef); // retry the sign in
55
- }
56
- });
57
- }, [authInitiator, iframeRef, setIframeIsVisible]);
58
- const signOut = useCallback(async () => {
59
- await preSignOut?.();
60
- await authInitiator?.signOut();
61
- setIframeIsVisible(false);
62
- await postSignOut?.();
63
- }, [preSignOut, authInitiator, setIframeIsVisible, postSignOut]);
64
- return {
65
- signIn,
66
- signOut,
67
- displayMode,
68
- };
69
- };
70
- export { useSignIn };
71
- //# sourceMappingURL=useSignIn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSignIn.js","sourceRoot":"","sources":["../../../../src/shared/hooks/useSignIn.ts"],"names":[],"mappings":"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","sourcesContent":["import { BrowserAuthenticationInitiator } from \"@/services/AuthenticationService.js\";\nimport { BrowserPublicClientPKCEProducer } from \"@/services/PKCE.js\";\nimport { useCivicAuthConfig } from \"@/shared/hooks/useCivicAuthConfig.js\";\nimport type { DisplayMode } from \"@/types.js\";\nimport { useIframe } from \"@/shared/hooks/useIframe.js\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { PopupError, type PKCEConsumer } from \"@/services/types.js\";\n\ntype SignInProps = {\n pkceConsumer?: PKCEConsumer;\n preSignOut?: () => Promise<void>;\n postSignOut?: () => Promise<void>;\n};\nconst useSignIn = ({ pkceConsumer, preSignOut, postSignOut }: SignInProps) => {\n const civicAuthConfig = useCivicAuthConfig();\n const { iframeRef, setIframeIsVisible } = useIframe();\n const [displayMode, setDisplayMode] = useState<DisplayMode>(\"iframe\");\n\n const authInitiator = useMemo(() => {\n if (!civicAuthConfig) {\n return null;\n }\n const { clientId, redirectUrl, nonce, oauthServer, endpoints, scopes } =\n civicAuthConfig;\n return new BrowserAuthenticationInitiator({\n pkceConsumer: pkceConsumer || new BrowserPublicClientPKCEProducer(), // generate and retrieve the challenge client-side\n clientId,\n redirectUrl,\n scopes,\n displayMode,\n oauthServer,\n endpointOverrides: endpoints,\n nonce,\n });\n }, [civicAuthConfig, displayMode, pkceConsumer]);\n\n useEffect(() => {\n return () => {\n if (authInitiator) {\n authInitiator.cleanup();\n }\n };\n }, [authInitiator]);\n\n const signIn = useCallback(\n async (inDisplayMode: DisplayMode = \"iframe\"): Promise<void> => {\n if (!authInitiator) return;\n\n authInitiator.setDisplayMode(inDisplayMode);\n setDisplayMode(inDisplayMode);\n if (inDisplayMode === \"iframe\") {\n setIframeIsVisible(true);\n }\n const useIframeRef = iframeRef?.current || null;\n await authInitiator.signIn(useIframeRef).catch((error) => {\n console.log(\"signIn error\", {\n error,\n isPopupError: error instanceof PopupError,\n });\n // if we've tried to open a popup and it has failed, then fallback to redirect mode\n if (error instanceof PopupError) {\n setDisplayMode(\"redirect\");\n setIframeIsVisible(false); // hide the iframe\n authInitiator.cleanup(); // clear any event listeners from before\n authInitiator.setDisplayMode(\"redirect\"); // switch to redirect mode\n authInitiator.signIn(useIframeRef); // retry the sign in\n }\n });\n },\n [authInitiator, iframeRef, setIframeIsVisible],\n );\n\n const signOut = useCallback(async () => {\n await preSignOut?.();\n await authInitiator?.signOut();\n setIframeIsVisible(false);\n await postSignOut?.();\n }, [preSignOut, authInitiator, setIframeIsVisible, postSignOut]);\n\n return {\n signIn,\n signOut,\n displayMode,\n };\n};\nexport { useSignIn };\n"]}