@civic/auth 0.7.0 → 0.7.1-beta.2

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 (149) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +19 -1
  3. package/dist/nextjs/config.d.ts +1 -0
  4. package/dist/nextjs/config.d.ts.map +1 -1
  5. package/dist/nextjs/config.js +1 -1
  6. package/dist/nextjs/config.js.map +1 -1
  7. package/dist/nextjs/hooks/useRefresh.d.ts.map +1 -1
  8. package/dist/nextjs/hooks/useRefresh.js +7 -1
  9. package/dist/nextjs/hooks/useRefresh.js.map +1 -1
  10. package/dist/nextjs/routeHandler.d.ts.map +1 -1
  11. package/dist/nextjs/routeHandler.js +7 -0
  12. package/dist/nextjs/routeHandler.js.map +1 -1
  13. package/dist/reactjs/components/SignInButton.d.ts.map +1 -1
  14. package/dist/reactjs/components/SignInButton.js +8 -3
  15. package/dist/reactjs/components/SignInButton.js.map +1 -1
  16. package/dist/reactjs/components/SignOutButton.d.ts.map +1 -1
  17. package/dist/reactjs/components/SignOutButton.js +3 -1
  18. package/dist/reactjs/components/SignOutButton.js.map +1 -1
  19. package/dist/reactjs/components/UserButton.d.ts.map +1 -1
  20. package/dist/reactjs/components/UserButton.js +11 -6
  21. package/dist/reactjs/components/UserButton.js.map +1 -1
  22. package/dist/reactjs/components/index.d.ts +5 -5
  23. package/dist/reactjs/components/index.d.ts.map +1 -1
  24. package/dist/reactjs/components/index.js +5 -5
  25. package/dist/reactjs/components/index.js.map +1 -1
  26. package/dist/reactjs/core/GlobalAuthManager.d.ts +120 -0
  27. package/dist/reactjs/core/GlobalAuthManager.d.ts.map +1 -0
  28. package/dist/reactjs/core/GlobalAuthManager.js +296 -0
  29. package/dist/reactjs/core/GlobalAuthManager.js.map +1 -0
  30. package/dist/reactjs/hooks/index.d.ts +2 -2
  31. package/dist/reactjs/hooks/index.d.ts.map +1 -1
  32. package/dist/reactjs/hooks/index.js +2 -2
  33. package/dist/reactjs/hooks/index.js.map +1 -1
  34. package/dist/reactjs/hooks/useToken.d.ts +13 -0
  35. package/dist/reactjs/hooks/useToken.d.ts.map +1 -0
  36. package/dist/reactjs/hooks/useToken.js +48 -0
  37. package/dist/reactjs/hooks/useToken.js.map +1 -0
  38. package/dist/reactjs/hooks/useUser.d.ts +20 -2
  39. package/dist/reactjs/hooks/useUser.d.ts.map +1 -1
  40. package/dist/reactjs/hooks/useUser.js +163 -7
  41. package/dist/reactjs/hooks/useUser.js.map +1 -1
  42. package/dist/reactjs/index.d.ts +6 -2
  43. package/dist/reactjs/index.d.ts.map +1 -1
  44. package/dist/reactjs/index.js +7 -1
  45. package/dist/reactjs/index.js.map +1 -1
  46. package/dist/reactjs/providers/CivicAuthContext.d.ts +40 -0
  47. package/dist/reactjs/providers/CivicAuthContext.d.ts.map +1 -0
  48. package/dist/reactjs/providers/CivicAuthContext.js +303 -0
  49. package/dist/reactjs/providers/CivicAuthContext.js.map +1 -0
  50. package/dist/reactjs/providers/CivicAuthProvider.d.ts +20 -4
  51. package/dist/reactjs/providers/CivicAuthProvider.d.ts.map +1 -1
  52. package/dist/reactjs/providers/CivicAuthProvider.js +46 -25
  53. package/dist/reactjs/providers/CivicAuthProvider.js.map +1 -1
  54. package/dist/reactjs/providers/index.d.ts +2 -2
  55. package/dist/reactjs/providers/index.d.ts.map +1 -1
  56. package/dist/reactjs/providers/index.js +4 -2
  57. package/dist/reactjs/providers/index.js.map +1 -1
  58. package/dist/server/ServerAuthenticationResolver.d.ts.map +1 -1
  59. package/dist/server/ServerAuthenticationResolver.js +28 -11
  60. package/dist/server/ServerAuthenticationResolver.js.map +1 -1
  61. package/dist/server/config.d.ts +2 -0
  62. package/dist/server/config.d.ts.map +1 -1
  63. package/dist/server/config.js.map +1 -1
  64. package/dist/server/login.d.ts +2 -2
  65. package/dist/server/login.d.ts.map +1 -1
  66. package/dist/server/login.js +7 -2
  67. package/dist/server/login.js.map +1 -1
  68. package/dist/services/AuthenticationService.d.ts +1 -1
  69. package/dist/services/AuthenticationService.d.ts.map +1 -1
  70. package/dist/services/AuthenticationService.js +2 -2
  71. package/dist/services/AuthenticationService.js.map +1 -1
  72. package/dist/shared/components/CivicAuthIframe.js +1 -1
  73. package/dist/shared/components/CivicAuthIframe.js.map +1 -1
  74. package/dist/shared/components/CivicAuthIframeContainer.js +2 -2
  75. package/dist/shared/components/CivicAuthIframeContainer.js.map +1 -1
  76. package/dist/shared/hooks/index.d.ts +1 -2
  77. package/dist/shared/hooks/index.d.ts.map +1 -1
  78. package/dist/shared/hooks/index.js +1 -2
  79. package/dist/shared/hooks/index.js.map +1 -1
  80. package/dist/shared/hooks/useClientTokenExchangeSession.d.ts +7 -0
  81. package/dist/shared/hooks/useClientTokenExchangeSession.d.ts.map +1 -0
  82. package/dist/shared/hooks/useClientTokenExchangeSession.js +17 -0
  83. package/dist/shared/hooks/useClientTokenExchangeSession.js.map +1 -0
  84. package/dist/shared/lib/BrowserAuthenticationRefresher.js +3 -3
  85. package/dist/shared/lib/BrowserAuthenticationRefresher.js.map +1 -1
  86. package/dist/shared/lib/types.d.ts +1 -1
  87. package/dist/shared/lib/types.js +1 -1
  88. package/dist/shared/lib/types.js.map +1 -1
  89. package/dist/shared/lib/util.d.ts +5 -6
  90. package/dist/shared/lib/util.d.ts.map +1 -1
  91. package/dist/shared/lib/util.js +66 -75
  92. package/dist/shared/lib/util.js.map +1 -1
  93. package/dist/shared/providers/CivicAuthConfigContext.d.ts +2 -2
  94. package/dist/shared/providers/CivicAuthConfigContext.d.ts.map +1 -1
  95. package/dist/shared/providers/CivicAuthConfigContext.js +1 -1
  96. package/dist/shared/providers/CivicAuthConfigContext.js.map +1 -1
  97. package/dist/shared/providers/TokenProvider.d.ts.map +1 -1
  98. package/dist/shared/providers/TokenProvider.js +4 -7
  99. package/dist/shared/providers/TokenProvider.js.map +1 -1
  100. package/dist/shared/version.d.ts +1 -1
  101. package/dist/shared/version.d.ts.map +1 -1
  102. package/dist/shared/version.js +1 -1
  103. package/dist/shared/version.js.map +1 -1
  104. package/dist/types.d.ts +2 -2
  105. package/dist/types.js.map +1 -1
  106. package/dist/utils.d.ts +8 -0
  107. package/dist/utils.d.ts.map +1 -1
  108. package/dist/utils.js +23 -0
  109. package/dist/utils.js.map +1 -1
  110. package/dist/vanillajs/auth/CivicAuth.d.ts +12 -0
  111. package/dist/vanillajs/auth/CivicAuth.d.ts.map +1 -1
  112. package/dist/vanillajs/auth/CivicAuth.js +88 -5
  113. package/dist/vanillajs/auth/CivicAuth.js.map +1 -1
  114. package/dist/vanillajs/auth/SessionManager.d.ts +7 -1
  115. package/dist/vanillajs/auth/SessionManager.d.ts.map +1 -1
  116. package/dist/vanillajs/auth/SessionManager.js +34 -3
  117. package/dist/vanillajs/auth/SessionManager.js.map +1 -1
  118. package/dist/vanillajs/auth/TokenRefresher.js +2 -2
  119. package/dist/vanillajs/auth/TokenRefresher.js.map +1 -1
  120. package/dist/vanillajs/auth/config/ConfigProcessor.d.ts.map +1 -1
  121. package/dist/vanillajs/auth/config/ConfigProcessor.js +7 -2
  122. package/dist/vanillajs/auth/config/ConfigProcessor.js.map +1 -1
  123. package/dist/vanillajs/auth/types/AuthTypes.d.ts +3 -0
  124. package/dist/vanillajs/auth/types/AuthTypes.d.ts.map +1 -1
  125. package/dist/vanillajs/auth/types/AuthTypes.js.map +1 -1
  126. package/dist/vanillajs/index.d.ts +2 -0
  127. package/dist/vanillajs/index.d.ts.map +1 -1
  128. package/dist/vanillajs/index.js +2 -0
  129. package/dist/vanillajs/index.js.map +1 -1
  130. package/dist/vanillajs/types/index.d.ts +1 -1
  131. package/dist/vanillajs/types/index.d.ts.map +1 -1
  132. package/dist/vanillajs/types/index.js.map +1 -1
  133. package/dist/vanillajs/utils/auth-utils.d.ts +14 -0
  134. package/dist/vanillajs/utils/auth-utils.d.ts.map +1 -1
  135. package/dist/vanillajs/utils/auth-utils.js +39 -0
  136. package/dist/vanillajs/utils/auth-utils.js.map +1 -1
  137. package/package.json +3 -3
  138. package/dist/reactjs/hooks/useClientTokenExchangeSession.d.ts +0 -3
  139. package/dist/reactjs/hooks/useClientTokenExchangeSession.d.ts.map +0 -1
  140. package/dist/reactjs/hooks/useClientTokenExchangeSession.js +0 -13
  141. package/dist/reactjs/hooks/useClientTokenExchangeSession.js.map +0 -1
  142. package/dist/reactjs/providers/AuthProvider.d.ts +0 -10
  143. package/dist/reactjs/providers/AuthProvider.d.ts.map +0 -1
  144. package/dist/reactjs/providers/AuthProvider.js +0 -79
  145. package/dist/reactjs/providers/AuthProvider.js.map +0 -1
  146. package/dist/reactjs/providers/ClientTokenExchangeSessionProvider.d.ts +0 -17
  147. package/dist/reactjs/providers/ClientTokenExchangeSessionProvider.d.ts.map +0 -1
  148. package/dist/reactjs/providers/ClientTokenExchangeSessionProvider.js +0 -190
  149. package/dist/reactjs/providers/ClientTokenExchangeSessionProvider.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reactjs/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC","sourcesContent":["export { useUser } from \"@/reactjs/hooks/useUser.js\";\nexport { useToken } from \"@/shared/hooks/useToken.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reactjs/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAwB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAyB,MAAM,eAAe,CAAC","sourcesContent":["export { useUser, type UserContextType } from \"./useUser.js\";\nexport { useToken, type TokenContextType } from \"./useToken.js\";\n"]}
@@ -0,0 +1,13 @@
1
+ import type { ForwardedTokens } from "../../types.js";
2
+ import type { GlobalAuthConfig } from "../core/GlobalAuthManager.js";
3
+ export interface TokenContextType {
4
+ idToken?: string | null;
5
+ accessToken?: string | null;
6
+ refreshToken?: string | null;
7
+ forwardedTokens?: ForwardedTokens;
8
+ isLoading: boolean;
9
+ error: Error | null;
10
+ }
11
+ declare const useToken: (config?: GlobalAuthConfig) => TokenContextType;
12
+ export { useToken };
13
+ //# sourceMappingURL=useToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToken.d.ts","sourceRoot":"","sources":["../../../src/reactjs/hooks/useToken.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,QAAQ,YAAa,gBAAgB,KAAG,gBAuB7C,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * useToken Hook
3
+ *
4
+ * A backwards-compatible token hook that extracts token-related properties from useUser.
5
+ * This hook provides access to authentication tokens without user profile information.
6
+ *
7
+ * Use this hook when you:
8
+ * - Only need access to tokens (idToken, accessToken, refreshToken, forwardedTokens)
9
+ * - Want to maintain backwards compatibility with existing code
10
+ * - Don't need user profile information
11
+ *
12
+ * This hook supports the same authentication patterns as useUser with automatic fallback:
13
+ * 1. Provider-based (legacy): Uses CivicAuthProvider or CivicNextAuthProvider
14
+ * 2. Provider-free (modern): Direct configuration via useToken(config)
15
+ *
16
+ * Usage Examples:
17
+ *
18
+ * // With provider (existing approach)
19
+ * <CivicAuthProvider clientId="..." config={{ oauthServer: "..." }}>
20
+ * const { accessToken, idToken, forwardedTokens } = useToken();
21
+ * </CivicAuthProvider>
22
+ *
23
+ * // Without provider (new approach) - direct configuration
24
+ * const { accessToken, idToken, refreshToken } = useToken({
25
+ * clientId: "your-client-id",
26
+ * config: { oauthServer: "https://auth.civic.com/oauth/" },
27
+ * displayMode: "iframe",
28
+ * scopes: ["openid", "profile", "email"]
29
+ * });
30
+ */
31
+ "use client";
32
+ import { useMemo } from "react";
33
+ import { useUser } from "./useUser.js";
34
+ const useToken = (config) => {
35
+ // Leverage the existing useUser hook which handles all the fallback logic
36
+ const { idToken, accessToken, refreshToken, forwardedTokens, isLoading, error, } = useUser(config);
37
+ // Return only token-related properties for backwards compatibility
38
+ return useMemo(() => ({
39
+ idToken,
40
+ accessToken,
41
+ refreshToken,
42
+ forwardedTokens,
43
+ isLoading,
44
+ error,
45
+ }), [idToken, accessToken, refreshToken, forwardedTokens, isLoading, error]);
46
+ };
47
+ export { useToken };
48
+ //# sourceMappingURL=useToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToken.js","sourceRoot":"","sources":["../../../src/reactjs/hooks/useToken.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,YAAY,CAAC;AACb,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAavC,MAAM,QAAQ,GAAG,CAAC,MAAyB,EAAoB,EAAE;IAC/D,0EAA0E;IAC1E,MAAM,EACJ,OAAO,EACP,WAAW,EACX,YAAY,EACZ,eAAe,EACf,SAAS,EACT,KAAK,GACN,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpB,mEAAmE;IACnE,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,OAAO;QACP,WAAW;QACX,YAAY;QACZ,eAAe;QACf,SAAS;QACT,KAAK;KACN,CAAC,EACF,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,CAAC,CACxE,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC","sourcesContent":["/**\n * useToken Hook\n *\n * A backwards-compatible token hook that extracts token-related properties from useUser.\n * This hook provides access to authentication tokens without user profile information.\n *\n * Use this hook when you:\n * - Only need access to tokens (idToken, accessToken, refreshToken, forwardedTokens)\n * - Want to maintain backwards compatibility with existing code\n * - Don't need user profile information\n *\n * This hook supports the same authentication patterns as useUser with automatic fallback:\n * 1. Provider-based (legacy): Uses CivicAuthProvider or CivicNextAuthProvider\n * 2. Provider-free (modern): Direct configuration via useToken(config)\n *\n * Usage Examples:\n *\n * // With provider (existing approach)\n * <CivicAuthProvider clientId=\"...\" config={{ oauthServer: \"...\" }}>\n * const { accessToken, idToken, forwardedTokens } = useToken();\n * </CivicAuthProvider>\n *\n * // Without provider (new approach) - direct configuration\n * const { accessToken, idToken, refreshToken } = useToken({\n * clientId: \"your-client-id\",\n * config: { oauthServer: \"https://auth.civic.com/oauth/\" },\n * displayMode: \"iframe\",\n * scopes: [\"openid\", \"profile\", \"email\"]\n * });\n */\n\"use client\";\nimport { useMemo } from \"react\";\nimport { useUser } from \"./useUser.js\";\nimport type { ForwardedTokens } from \"../../types.js\";\nimport type { GlobalAuthConfig } from \"../core/GlobalAuthManager.js\";\n\nexport interface TokenContextType {\n idToken?: string | null;\n accessToken?: string | null;\n refreshToken?: string | null;\n forwardedTokens?: ForwardedTokens;\n isLoading: boolean;\n error: Error | null;\n}\n\nconst useToken = (config?: GlobalAuthConfig): TokenContextType => {\n // Leverage the existing useUser hook which handles all the fallback logic\n const {\n idToken,\n accessToken,\n refreshToken,\n forwardedTokens,\n isLoading,\n error,\n } = useUser(config);\n\n // Return only token-related properties for backwards compatibility\n return useMemo(\n () => ({\n idToken,\n accessToken,\n refreshToken,\n forwardedTokens,\n isLoading,\n error,\n }),\n [idToken, accessToken, refreshToken, forwardedTokens, isLoading, error],\n );\n};\n\nexport { useToken };\n"]}
@@ -1,4 +1,22 @@
1
- import { type UserContextType } from "../../shared/providers/UserProvider.js";
2
- declare const useUser: <T extends Record<string, unknown> = Record<string, never>>() => UserContextType<T>;
1
+ import type { User, ForwardedTokens } from "../../types.js";
2
+ import type { AuthStatus } from "../../types.js";
3
+ import type { DisplayMode } from "../../types.js";
4
+ import { type GlobalAuthConfig } from "../core/GlobalAuthManager.js";
5
+ export interface UserContextType<T extends Record<string, unknown> = Record<string, never>> {
6
+ user: User<T> | null;
7
+ idToken?: string | null;
8
+ accessToken?: string | null;
9
+ refreshToken?: string | null;
10
+ forwardedTokens?: ForwardedTokens;
11
+ isLoading: boolean;
12
+ authStatus: AuthStatus;
13
+ error: Error | null;
14
+ signIn: () => Promise<{
15
+ user: User<T>;
16
+ }>;
17
+ signOut: () => Promise<void>;
18
+ displayMode?: DisplayMode;
19
+ }
20
+ declare const useUser: <T extends Record<string, unknown> = Record<string, never>>(config?: GlobalAuthConfig) => UserContextType<T>;
3
21
  export { useUser };
4
22
  //# sourceMappingURL=useUser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useUser.d.ts","sourceRoot":"","sources":["../../../src/reactjs/hooks/useUser.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,oCAAoC,CAAC;AAE5C,QAAA,MAAM,OAAO,GACX,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,+BAC9B,eAAe,CAAC,CAAC,CAQrB,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"useUser.d.ts","sourceRoot":"","sources":["../../../src/reactjs/hooks/useUser.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,8BAA8B,CAAC;AAGtC,MAAM,WAAW,eAAe,CAC9B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAEzD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;IACzC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,QAAA,MAAM,OAAO,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,mCACvC,gBAAgB,KACxB,eAAe,CAAC,CAAC,CA2InB,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -1,12 +1,168 @@
1
+ /**
2
+ * useUser Hook
3
+ *
4
+ * A comprehensive user session hook that provides full user data including profile information,
5
+ * authentication tokens, and authentication state. Supports generic typing for custom user data.
6
+ *
7
+ * Use this hook when you:
8
+ * - Need access to user profile information (user object)
9
+ * - Need authentication tokens (JWT, access, refresh tokens)
10
+ * - Are working with custom user data types
11
+ * - Need comprehensive user session data
12
+ * - Want backward compatibility with legacy UserContext
13
+ *
14
+ * This hook supports two authentication patterns with automatic fallback:
15
+ * 1. Provider-based (legacy): Uses CivicAuthProvider or CivicNextAuthProvider
16
+ * 2. Provider-free (modern): Direct configuration via useUser(config)
17
+ *
18
+ * Usage Examples:
19
+ *
20
+ * // With provider (existing approach - NextJS/React providers)
21
+ * <CivicAuthProvider clientId="..." config={{ oauthServer: "..." }}>
22
+ * const { user, isLoading, signIn } = useUser();
23
+ * </CivicAuthProvider>
24
+ *
25
+ * // Without provider (new approach) - direct configuration
26
+ * const { user, authStatus, signOut } = useUser({
27
+ * clientId: "your-client-id",
28
+ * config: { oauthServer: "https://auth.civic.com/oauth/" },
29
+ * displayMode: "iframe", // or "redirect", "popup", etc.
30
+ * scopes: ["openid", "profile", "email"],
31
+ * onSignIn: (error) => console.log("Sign in completed", error),
32
+ * onSignOut: () => console.log("Sign out completed")
33
+ * });
34
+ *
35
+ * // Generic typing for custom user data
36
+ * interface CustomUser { customField: string; }
37
+ * const { user } = useUser<CustomUser>(); // user will be User<CustomUser> | null
38
+ */
1
39
  "use client";
2
- import { useContext } from "react";
3
- import { UserContext, } from "../../shared/providers/UserProvider.js";
4
- const useUser = () => {
5
- const context = useContext(UserContext);
6
- if (!context) {
7
- throw new Error("useUser must be used within a UserProvider");
40
+ import { useContext, useState, useEffect, useCallback, useMemo } from "react";
41
+ import { UserContext } from "../../shared/providers/UserProvider.js";
42
+ import { GlobalAuthManager, } from "../core/GlobalAuthManager.js";
43
+ import { extractTokensFromSession } from "../../vanillajs/utils/auth-utils.js";
44
+ const useUser = (config) => {
45
+ // Always call context hooks unconditionally (rules of hooks)
46
+ const sharedContext = useContext(UserContext);
47
+ // State for global manager approach
48
+ const [globalState, setGlobalState] = useState(null);
49
+ // Determine which approach to use
50
+ const hasProviderContext = sharedContext;
51
+ const shouldUseGlobal = !hasProviderContext;
52
+ // Initialize global manager if no provider context
53
+ useEffect(() => {
54
+ if (!shouldUseGlobal)
55
+ return;
56
+ const manager = GlobalAuthManager.getInstance();
57
+ // If config is provided, initialize with it
58
+ if (config) {
59
+ const initializeAuth = async () => {
60
+ try {
61
+ await manager.initialize(config);
62
+ }
63
+ catch (error) {
64
+ console.error("Failed to initialize auth:", error);
65
+ }
66
+ };
67
+ initializeAuth();
68
+ }
69
+ // Subscribe to state changes
70
+ const unsubscribe = manager.subscribe((newState) => {
71
+ setGlobalState(newState);
72
+ });
73
+ // Get current state
74
+ setGlobalState(manager.getState());
75
+ return unsubscribe;
76
+ }, [shouldUseGlobal, config]);
77
+ // Global manager sign in/out functions
78
+ const globalSignIn = useCallback(async () => {
79
+ const manager = GlobalAuthManager.getInstance();
80
+ await manager.signIn();
81
+ // Get the user after sign in
82
+ const state = manager.getState();
83
+ if (!state.user) {
84
+ throw new Error("Authentication succeeded but no user was returned");
85
+ }
86
+ return { user: state.user };
87
+ }, []);
88
+ const globalSignOut = useCallback(async () => {
89
+ const manager = GlobalAuthManager.getInstance();
90
+ await manager.signOut();
91
+ }, []);
92
+ // Extract tokens from global state
93
+ const globalTokens = useMemo(() => {
94
+ return extractTokensFromSession(globalState?.session || null);
95
+ }, [globalState?.session]);
96
+ // Create wrapper functions for different signIn signatures
97
+ const wrapSharedSignIn = useCallback(async () => {
98
+ if (sharedContext) {
99
+ await sharedContext.signIn(); // This returns void
100
+ // Get user from context after sign in
101
+ if (sharedContext.user) {
102
+ return { user: sharedContext.user };
103
+ }
104
+ // We don't return a user yet in nextjs until the next refactor
105
+ return { user: null };
106
+ }
107
+ throw new Error("Shared context not available");
108
+ }, [sharedContext]);
109
+ // ========================================================================
110
+ // FALLBACK PRIORITY SYSTEM - Two authentication context approaches
111
+ // ========================================================================
112
+ // 1. DEPRECATED UserContext (ACTIVE - Used by NextJS)
113
+ // Framework-agnostic shared context from UserProvider
114
+ // Location: shared/providers/UserProvider.tsx
115
+ // Usage: NextJS example uses CivicNextAuthProvider → UserProvider → UserContext
116
+ if (sharedContext) {
117
+ return {
118
+ user: sharedContext.user,
119
+ idToken: sharedContext.idToken,
120
+ accessToken: sharedContext.accessToken,
121
+ refreshToken: undefined, // Not available in shared context
122
+ forwardedTokens: sharedContext.forwardedTokens,
123
+ isLoading: sharedContext.isLoading,
124
+ authStatus: sharedContext.authStatus,
125
+ error: sharedContext.error,
126
+ signIn: wrapSharedSignIn,
127
+ signOut: sharedContext.signOut,
128
+ displayMode: sharedContext.displayMode,
129
+ };
8
130
  }
9
- return context;
131
+ // 2. GlobalAuthManager (MODERN - Provider-free approach)
132
+ // Singleton-based state management, eliminates need for React providers
133
+ // Location: reactjs/core/GlobalAuthManager.ts
134
+ // Usage: React example uses CivicAuthProvider → GlobalAuthManager internally
135
+ // Can also be used directly: useUser({ clientId: "...", config: {...} })
136
+ if (globalState) {
137
+ return {
138
+ user: globalState.user,
139
+ idToken: globalTokens.idToken,
140
+ accessToken: globalTokens.accessToken,
141
+ refreshToken: globalTokens.refreshToken,
142
+ forwardedTokens: globalTokens.forwardedTokens,
143
+ isLoading: globalState.isLoading,
144
+ authStatus: globalState.authStatus,
145
+ error: globalState.error,
146
+ signIn: globalSignIn,
147
+ signOut: globalSignOut,
148
+ displayMode: globalState.displayMode,
149
+ };
150
+ }
151
+ // If no context and no global state, provide default loading state
152
+ // This happens when CivicAuthProvider is present but GlobalAuthManager hasn't initialized yet
153
+ return {
154
+ user: null,
155
+ idToken: null,
156
+ accessToken: null,
157
+ refreshToken: null,
158
+ forwardedTokens: undefined,
159
+ isLoading: true,
160
+ authStatus: "unauthenticated",
161
+ error: null,
162
+ signIn: globalSignIn,
163
+ signOut: globalSignOut,
164
+ displayMode: config?.displayMode,
165
+ };
10
166
  };
11
167
  export { useUser };
12
168
  //# sourceMappingURL=useUser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useUser.js","sourceRoot":"","sources":["../../../src/reactjs/hooks/useUser.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EACL,WAAW,GAEZ,MAAM,oCAAoC,CAAC;AAE5C,MAAM,OAAO,GAAG,GAEQ,EAAE;IACxB,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAExC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,OAA6B,CAAC;AACvC,CAAC,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC","sourcesContent":["\"use client\";\nimport { useContext } from \"react\";\nimport {\n UserContext,\n type UserContextType,\n} from \"@/shared/providers/UserProvider.js\";\n\nconst useUser = <\n T extends Record<string, unknown> = Record<string, never>,\n>(): UserContextType<T> => {\n const context = useContext(UserContext);\n\n if (!context) {\n throw new Error(\"useUser must be used within a UserProvider\");\n }\n\n return context as UserContextType<T>;\n};\n\nexport { useUser };\n"]}
1
+ {"version":3,"file":"useUser.js","sourceRoot":"","sources":["../../../src/reactjs/hooks/useUser.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * useUser Hook\n *\n * A comprehensive user session hook that provides full user data including profile information,\n * authentication tokens, and authentication state. Supports generic typing for custom user data.\n *\n * Use this hook when you:\n * - Need access to user profile information (user object)\n * - Need authentication tokens (JWT, access, refresh tokens)\n * - Are working with custom user data types\n * - Need comprehensive user session data\n * - Want backward compatibility with legacy UserContext\n *\n * This hook supports two authentication patterns with automatic fallback:\n * 1. Provider-based (legacy): Uses CivicAuthProvider or CivicNextAuthProvider\n * 2. Provider-free (modern): Direct configuration via useUser(config)\n *\n * Usage Examples:\n *\n * // With provider (existing approach - NextJS/React providers)\n * <CivicAuthProvider clientId=\"...\" config={{ oauthServer: \"...\" }}>\n * const { user, isLoading, signIn } = useUser();\n * </CivicAuthProvider>\n *\n * // Without provider (new approach) - direct configuration\n * const { user, authStatus, signOut } = useUser({\n * clientId: \"your-client-id\",\n * config: { oauthServer: \"https://auth.civic.com/oauth/\" },\n * displayMode: \"iframe\", // or \"redirect\", \"popup\", etc.\n * scopes: [\"openid\", \"profile\", \"email\"],\n * onSignIn: (error) => console.log(\"Sign in completed\", error),\n * onSignOut: () => console.log(\"Sign out completed\")\n * });\n *\n * // Generic typing for custom user data\n * interface CustomUser { customField: string; }\n * const { user } = useUser<CustomUser>(); // user will be User<CustomUser> | null\n */\n\"use client\";\nimport { useContext, useState, useEffect, useCallback, useMemo } from \"react\";\nimport { UserContext } from \"../../shared/providers/UserProvider.js\";\nimport type { User, ForwardedTokens } from \"../../types.js\";\nimport type { AuthStatus } from \"../../types.js\";\nimport type { DisplayMode } from \"../../types.js\";\nimport {\n GlobalAuthManager,\n type GlobalAuthConfig,\n type GlobalAuthState,\n} from \"../core/GlobalAuthManager.js\";\nimport { extractTokensFromSession } from \"../../vanillajs/utils/auth-utils.js\";\n\nexport interface UserContextType<\n T extends Record<string, unknown> = Record<string, never>,\n> {\n user: User<T> | null;\n idToken?: string | null;\n accessToken?: string | null;\n refreshToken?: string | null;\n forwardedTokens?: ForwardedTokens;\n isLoading: boolean;\n authStatus: AuthStatus;\n error: Error | null;\n signIn: () => Promise<{ user: User<T> }>;\n signOut: () => Promise<void>;\n displayMode?: DisplayMode;\n}\n\nconst useUser = <T extends Record<string, unknown> = Record<string, never>>(\n config?: GlobalAuthConfig,\n): UserContextType<T> => {\n // Always call context hooks unconditionally (rules of hooks)\n const sharedContext = useContext(UserContext);\n\n // State for global manager approach\n const [globalState, setGlobalState] = useState<GlobalAuthState | null>(null);\n\n // Determine which approach to use\n const hasProviderContext = sharedContext;\n const shouldUseGlobal = !hasProviderContext;\n\n // Initialize global manager if no provider context\n useEffect(() => {\n if (!shouldUseGlobal) return;\n\n const manager = GlobalAuthManager.getInstance();\n\n // If config is provided, initialize with it\n if (config) {\n const initializeAuth = async () => {\n try {\n await manager.initialize(config);\n } catch (error) {\n console.error(\"Failed to initialize auth:\", error);\n }\n };\n initializeAuth();\n }\n\n // Subscribe to state changes\n const unsubscribe = manager.subscribe((newState) => {\n setGlobalState(newState);\n });\n\n // Get current state\n setGlobalState(manager.getState());\n\n return unsubscribe;\n }, [shouldUseGlobal, config]);\n\n // Global manager sign in/out functions\n const globalSignIn = useCallback(async () => {\n const manager = GlobalAuthManager.getInstance();\n await manager.signIn();\n\n // Get the user after sign in\n const state = manager.getState();\n if (!state.user) {\n throw new Error(\"Authentication succeeded but no user was returned\");\n }\n\n return { user: state.user as User<T> };\n }, []);\n\n const globalSignOut = useCallback(async () => {\n const manager = GlobalAuthManager.getInstance();\n await manager.signOut();\n }, []);\n\n // Extract tokens from global state\n const globalTokens = useMemo(() => {\n return extractTokensFromSession(globalState?.session || null);\n }, [globalState?.session]);\n\n // Create wrapper functions for different signIn signatures\n const wrapSharedSignIn = useCallback(async (): Promise<{ user: User<T> }> => {\n if (sharedContext) {\n await sharedContext.signIn(); // This returns void\n // Get user from context after sign in\n if (sharedContext.user) {\n return { user: sharedContext.user as User<T> };\n }\n\n // We don't return a user yet in nextjs until the next refactor\n return { user: null as unknown as User<T> };\n }\n throw new Error(\"Shared context not available\");\n }, [sharedContext]);\n\n // ========================================================================\n // FALLBACK PRIORITY SYSTEM - Two authentication context approaches\n // ========================================================================\n\n // 1. DEPRECATED UserContext (ACTIVE - Used by NextJS)\n // Framework-agnostic shared context from UserProvider\n // Location: shared/providers/UserProvider.tsx\n // Usage: NextJS example uses CivicNextAuthProvider → UserProvider → UserContext\n if (sharedContext) {\n return {\n user: sharedContext.user as User<T> | null,\n idToken: sharedContext.idToken,\n accessToken: sharedContext.accessToken,\n refreshToken: undefined, // Not available in shared context\n forwardedTokens: sharedContext.forwardedTokens,\n isLoading: sharedContext.isLoading,\n authStatus: sharedContext.authStatus,\n error: sharedContext.error,\n signIn: wrapSharedSignIn,\n signOut: sharedContext.signOut,\n displayMode: sharedContext.displayMode,\n };\n }\n\n // 2. GlobalAuthManager (MODERN - Provider-free approach)\n // Singleton-based state management, eliminates need for React providers\n // Location: reactjs/core/GlobalAuthManager.ts\n // Usage: React example uses CivicAuthProvider → GlobalAuthManager internally\n // Can also be used directly: useUser({ clientId: \"...\", config: {...} })\n if (globalState) {\n return {\n user: globalState.user as User<T> | null,\n idToken: globalTokens.idToken,\n accessToken: globalTokens.accessToken,\n refreshToken: globalTokens.refreshToken,\n forwardedTokens: globalTokens.forwardedTokens,\n isLoading: globalState.isLoading,\n authStatus: globalState.authStatus as AuthStatus,\n error: globalState.error,\n signIn: globalSignIn,\n signOut: globalSignOut,\n displayMode: globalState.displayMode,\n };\n }\n\n // If no context and no global state, provide default loading state\n // This happens when CivicAuthProvider is present but GlobalAuthManager hasn't initialized yet\n return {\n user: null,\n idToken: null,\n accessToken: null,\n refreshToken: null,\n forwardedTokens: undefined,\n isLoading: true,\n authStatus: \"unauthenticated\" as AuthStatus,\n error: null,\n signIn: globalSignIn,\n signOut: globalSignOut,\n displayMode: config?.displayMode,\n };\n};\n\nexport { useUser };\n"]}
@@ -1,6 +1,10 @@
1
1
  export * from "../reactjs/hooks/index.js";
2
- export { CivicAuthProvider, type CivicAuthProviderProps, } from "../reactjs/providers/index.js";
3
- export type { AuthContextType, TokenContextType, UserContextType, } from "../reactjs/providers/index.js";
2
+ export { GlobalAuthManager } from "../reactjs/core/GlobalAuthManager.js";
3
+ export type { GlobalAuthConfig, GlobalAuthState, } from "../reactjs/core/GlobalAuthManager.js";
4
+ export { CivicAuthProvider, type CivicAuthProviderProps, } from "../reactjs/providers/CivicAuthProvider.js";
5
+ export { useCivicAuthContext } from "../reactjs/providers/CivicAuthContext.js";
4
6
  export { CivicAuthIframeContainer } from "../shared/components/CivicAuthIframeContainer.js";
7
+ export type { CivicAuthContextType, AuthStatusEnum, } from "../reactjs/providers/CivicAuthContext.js";
8
+ export type { UserContextType } from "../reactjs/hooks/index.js";
5
9
  export { UserButton, SignInButton, SignOutButton, } from "../reactjs/components/index.js";
6
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reactjs/index.ts"],"names":[],"mappings":"AAMA,cAAc,0BAA0B,CAAC;AACzC,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EACL,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reactjs/index.ts"],"names":[],"mappings":"AAMA,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,YAAY,EACV,gBAAgB,EAChB,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAE3F,YAAY,EACV,oBAAoB,EACpB,cAAc,GACf,MAAM,yCAAyC,CAAC;AAGjD,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,EACL,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,+BAA+B,CAAC"}
@@ -4,7 +4,13 @@
4
4
  import { printVersion } from "../shared/index.js";
5
5
  printVersion();
6
6
  export * from "../reactjs/hooks/index.js";
7
- export { CivicAuthProvider, } from "../reactjs/providers/index.js";
7
+ // Global auth manager for advanced usage
8
+ export { GlobalAuthManager } from "../reactjs/core/GlobalAuthManager.js";
9
+ // Provider-based approach (for apps that prefer providers)
10
+ export { CivicAuthProvider, } from "../reactjs/providers/CivicAuthProvider.js";
11
+ // Export new context and hook for advanced usage
12
+ export { useCivicAuthContext } from "../reactjs/providers/CivicAuthContext.js";
8
13
  export { CivicAuthIframeContainer } from "../shared/components/CivicAuthIframeContainer.js";
14
+ // Export our VanillaJS-based components
9
15
  export { UserButton, SignInButton, SignOutButton, } from "../reactjs/components/index.js";
10
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reactjs/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,gHAAgH;AAChH,kGAAkG;AAClG,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,CAAC;AAEf,cAAc,0BAA0B,CAAC;AACzC,OAAO,EACL,iBAAiB,GAElB,MAAM,8BAA8B,CAAC;AAMtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EACL,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,+BAA+B,CAAC","sourcesContent":["// These are the default exports of the project.\n// They are limited by design to ensure that the public API does not expose any internal implementation details.\n// Do not change this without thinking carefully about the impact on the client-facing public API.\nimport { printVersion } from \"@/shared/index.js\";\nprintVersion();\n\nexport * from \"@/reactjs/hooks/index.js\";\nexport {\n CivicAuthProvider,\n type CivicAuthProviderProps,\n} from \"@/reactjs/providers/index.js\";\nexport type {\n AuthContextType,\n TokenContextType,\n UserContextType,\n} from \"@/reactjs/providers/index.js\";\nexport { CivicAuthIframeContainer } from \"@/shared/components/CivicAuthIframeContainer.js\";\nexport {\n UserButton,\n SignInButton,\n SignOutButton,\n} from \"@/reactjs/components/index.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reactjs/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,gHAAgH;AAChH,kGAAkG;AAClG,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,CAAC;AAEf,cAAc,0BAA0B,CAAC;AAEzC,yCAAyC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAMxE,2DAA2D;AAC3D,OAAO,EACL,iBAAiB,GAElB,MAAM,0CAA0C,CAAC;AAElD,iDAAiD;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAU3F,wCAAwC;AACxC,OAAO,EACL,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,+BAA+B,CAAC","sourcesContent":["// These are the default exports of the project.\n// They are limited by design to ensure that the public API does not expose any internal implementation details.\n// Do not change this without thinking carefully about the impact on the client-facing public API.\nimport { printVersion } from \"@/shared/index.js\";\nprintVersion();\n\nexport * from \"@/reactjs/hooks/index.js\";\n\n// Global auth manager for advanced usage\nexport { GlobalAuthManager } from \"@/reactjs/core/GlobalAuthManager.js\";\nexport type {\n GlobalAuthConfig,\n GlobalAuthState,\n} from \"@/reactjs/core/GlobalAuthManager.js\";\n\n// Provider-based approach (for apps that prefer providers)\nexport {\n CivicAuthProvider,\n type CivicAuthProviderProps,\n} from \"@/reactjs/providers/CivicAuthProvider.js\";\n\n// Export new context and hook for advanced usage\nexport { useCivicAuthContext } from \"@/reactjs/providers/CivicAuthContext.js\";\nexport { CivicAuthIframeContainer } from \"@/shared/components/CivicAuthIframeContainer.js\";\n// Export new context types\nexport type {\n CivicAuthContextType,\n AuthStatusEnum,\n} from \"@/reactjs/providers/CivicAuthContext.js\";\n\n// Export types\nexport type { UserContextType } from \"@/reactjs/hooks/index.js\";\n\n// Export our VanillaJS-based components\nexport {\n UserButton,\n SignInButton,\n SignOutButton,\n} from \"@/reactjs/components/index.js\";\n"]}
@@ -0,0 +1,40 @@
1
+ import React from "react";
2
+ import type { ReactNode } from "react";
3
+ import { CivicAuth, type Session, type User } from "../../vanillajs/index.js";
4
+ import type { DisplayMode, ForwardedTokens } from "../../types.js";
5
+ export type AuthStatusEnum = "authenticated" | "unauthenticated" | "authenticating" | "error" | "signing_out";
6
+ export interface CivicAuthContextType {
7
+ auth: CivicAuth | null;
8
+ user: User | null;
9
+ session: Session | null;
10
+ isLoading: boolean;
11
+ authStatus: AuthStatusEnum;
12
+ error: Error | null;
13
+ idToken?: string;
14
+ accessToken?: string;
15
+ refreshToken?: string;
16
+ forwardedTokens?: ForwardedTokens;
17
+ signIn: () => Promise<{
18
+ user: User;
19
+ }>;
20
+ signOut: () => Promise<void>;
21
+ displayMode?: DisplayMode;
22
+ }
23
+ declare const CivicAuthContext: React.Context<CivicAuthContextType | null>;
24
+ export interface CivicAuthContextProviderProps {
25
+ children: ReactNode;
26
+ clientId: string;
27
+ redirectUrl?: string;
28
+ oauthServerBaseUrl?: string;
29
+ scopes?: string[];
30
+ displayMode?: DisplayMode;
31
+ iframeDisplayMode?: "modal" | "embedded";
32
+ onSignIn?: (error?: Error) => void;
33
+ onSignOut?: () => void;
34
+ nonce?: string;
35
+ authProcessTimeout?: number;
36
+ }
37
+ export declare const CivicAuthContextProvider: React.FC<CivicAuthContextProviderProps>;
38
+ export declare const useCivicAuthContext: () => CivicAuthContextType;
39
+ export { CivicAuthContext };
40
+ //# sourceMappingURL=CivicAuthContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CivicAuthContext.d.ts","sourceRoot":"","sources":["../../../src/reactjs/providers/CivicAuthContext.tsx"],"names":[],"mappings":"AACA,OAAO,KAQN,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EACL,SAAS,EAET,KAAK,OAAO,EACZ,KAAK,IAAI,EACV,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAQnE,MAAM,MAAM,cAAc,GACtB,eAAe,GACf,iBAAiB,GACjB,gBAAgB,GAChB,OAAO,GACP,aAAa,CAAC;AAElB,MAAM,WAAW,oBAAoB;IAEnC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAGvB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAGxB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,cAAc,CAAC;IAC3B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAGpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,CAAC;IAGlC,MAAM,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACtC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAG7B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,QAAA,MAAM,gBAAgB,4CAAmD,CAAC;AAE1E,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAC7C,6BAA6B,CA8V9B,CAAC;AAEF,eAAO,MAAM,mBAAmB,QAAO,oBAQtC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}