@civic/auth 0.10.0 → 0.11.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/browser/storage.d.ts +1 -0
  3. package/dist/browser/storage.d.ts.map +1 -1
  4. package/dist/browser/storage.js +1 -0
  5. package/dist/browser/storage.js.map +1 -1
  6. package/dist/index.d.ts +1 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/logger.d.ts +1 -0
  10. package/dist/lib/logger.d.ts.map +1 -1
  11. package/dist/lib/logger.js +1 -0
  12. package/dist/lib/logger.js.map +1 -1
  13. package/dist/nextjs/hooks/useInitialAuthConfig.d.ts +3 -1
  14. package/dist/nextjs/hooks/useInitialAuthConfig.d.ts.map +1 -1
  15. package/dist/nextjs/hooks/useInitialAuthConfig.js +15 -9
  16. package/dist/nextjs/hooks/useInitialAuthConfig.js.map +1 -1
  17. package/dist/nextjs/providers/NextAuthProvider.d.ts.map +1 -1
  18. package/dist/nextjs/providers/NextAuthProvider.js +2 -1
  19. package/dist/nextjs/providers/NextAuthProvider.js.map +1 -1
  20. package/dist/nextjs/providers/NextAuthProviderClient.d.ts.map +1 -1
  21. package/dist/nextjs/providers/NextAuthProviderClient.js +19 -5
  22. package/dist/nextjs/providers/NextAuthProviderClient.js.map +1 -1
  23. package/dist/nextjs/routeHandler.d.ts.map +1 -1
  24. package/dist/nextjs/routeHandler.js.map +1 -1
  25. package/dist/react-router-7/components/UserButton.d.ts +3 -3
  26. package/dist/react-router-7/components/UserButton.d.ts.map +1 -1
  27. package/dist/react-router-7/components/UserButton.js +4 -3
  28. package/dist/react-router-7/components/UserButton.js.map +1 -1
  29. package/dist/react-router-7/cookies.d.ts +4 -0
  30. package/dist/react-router-7/cookies.d.ts.map +1 -1
  31. package/dist/react-router-7/cookies.js +22 -0
  32. package/dist/react-router-7/cookies.js.map +1 -1
  33. package/dist/react-router-7/useUser.d.ts.map +1 -1
  34. package/dist/react-router-7/useUser.js +5 -2
  35. package/dist/react-router-7/useUser.js.map +1 -1
  36. package/dist/reactjs/components/Button.d.ts +12 -0
  37. package/dist/reactjs/components/Button.d.ts.map +1 -0
  38. package/dist/reactjs/components/Button.js +24 -0
  39. package/dist/reactjs/components/Button.js.map +1 -0
  40. package/dist/reactjs/components/CivicWrapper.d.ts +13 -0
  41. package/dist/reactjs/components/CivicWrapper.d.ts.map +1 -0
  42. package/dist/reactjs/components/CivicWrapper.js +36 -0
  43. package/dist/reactjs/components/CivicWrapper.js.map +1 -0
  44. package/dist/reactjs/components/SignInButton.js +1 -1
  45. package/dist/reactjs/components/SignInButton.js.map +1 -1
  46. package/dist/reactjs/components/UserButton.d.ts +5 -4
  47. package/dist/reactjs/components/UserButton.d.ts.map +1 -1
  48. package/dist/reactjs/components/UserButton.js +41 -50
  49. package/dist/reactjs/components/UserButton.js.map +1 -1
  50. package/dist/reactjs/core/GlobalAuthManager.d.ts +14 -4
  51. package/dist/reactjs/core/GlobalAuthManager.d.ts.map +1 -1
  52. package/dist/reactjs/core/GlobalAuthManager.js +40 -7
  53. package/dist/reactjs/core/GlobalAuthManager.js.map +1 -1
  54. package/dist/reactjs/hooks/useToken.d.ts +2 -2
  55. package/dist/reactjs/hooks/useToken.d.ts.map +1 -1
  56. package/dist/reactjs/hooks/useToken.js.map +1 -1
  57. package/dist/reactjs/hooks/useUser.d.ts +10 -4
  58. package/dist/reactjs/hooks/useUser.d.ts.map +1 -1
  59. package/dist/reactjs/hooks/useUser.js +13 -8
  60. package/dist/reactjs/hooks/useUser.js.map +1 -1
  61. package/dist/reactjs/index.d.ts +0 -2
  62. package/dist/reactjs/index.d.ts.map +1 -1
  63. package/dist/reactjs/index.js +0 -2
  64. package/dist/reactjs/index.js.map +1 -1
  65. package/dist/reactjs/providers/CivicAuthProvider.d.ts +10 -3
  66. package/dist/reactjs/providers/CivicAuthProvider.d.ts.map +1 -1
  67. package/dist/reactjs/providers/CivicAuthProvider.js.map +1 -1
  68. package/dist/reactjs/providers/index.d.ts +0 -1
  69. package/dist/reactjs/providers/index.d.ts.map +1 -1
  70. package/dist/reactjs/providers/index.js +0 -1
  71. package/dist/reactjs/providers/index.js.map +1 -1
  72. package/dist/reactjs/styles/colors.d.ts +49 -0
  73. package/dist/reactjs/styles/colors.d.ts.map +1 -0
  74. package/dist/reactjs/styles/colors.js +77 -0
  75. package/dist/reactjs/styles/colors.js.map +1 -0
  76. package/dist/shared/lib/storage.d.ts +1 -0
  77. package/dist/shared/lib/storage.d.ts.map +1 -1
  78. package/dist/shared/lib/storage.js +1 -0
  79. package/dist/shared/lib/storage.js.map +1 -1
  80. package/dist/shared/providers/types.d.ts +4 -2
  81. package/dist/shared/providers/types.d.ts.map +1 -1
  82. package/dist/shared/providers/types.js.map +1 -1
  83. package/dist/shared/version.d.ts +1 -1
  84. package/dist/shared/version.d.ts.map +1 -1
  85. package/dist/shared/version.js +1 -1
  86. package/dist/shared/version.js.map +1 -1
  87. package/dist/types.d.ts +24 -0
  88. package/dist/types.d.ts.map +1 -1
  89. package/dist/types.js.map +1 -1
  90. package/dist/vanillajs/auth/SessionManager.js +1 -1
  91. package/dist/vanillajs/auth/SessionManager.js.map +1 -1
  92. package/dist/vanillajs/auth/TokenRefresher.d.ts.map +1 -1
  93. package/dist/vanillajs/auth/TokenRefresher.js +6 -1
  94. package/dist/vanillajs/auth/TokenRefresher.js.map +1 -1
  95. package/dist/vanillajs/auth/config/ConfigProcessor.d.ts.map +1 -1
  96. package/dist/vanillajs/auth/config/ConfigProcessor.js +5 -3
  97. package/dist/vanillajs/auth/config/ConfigProcessor.js.map +1 -1
  98. package/dist/vanillajs/index.d.ts +1 -1
  99. package/dist/vanillajs/index.d.ts.map +1 -1
  100. package/dist/vanillajs/index.js.map +1 -1
  101. package/dist/vanillajs/types/index.d.ts +8 -0
  102. package/dist/vanillajs/types/index.d.ts.map +1 -1
  103. package/dist/vanillajs/types/index.js.map +1 -1
  104. package/package.json +1 -1
  105. package/dist/reactjs/providers/CivicAuthContext.d.ts +0 -44
  106. package/dist/reactjs/providers/CivicAuthContext.d.ts.map +0 -1
  107. package/dist/reactjs/providers/CivicAuthContext.js +0 -313
  108. package/dist/reactjs/providers/CivicAuthContext.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import type { User, ForwardedTokens } from "../../types.js";
2
2
  import type { AuthStatus } from "../../types.js";
3
3
  import type { DisplayMode } from "../../types.js";
4
- import { type GlobalAuthConfig } from "../core/GlobalAuthManager.js";
4
+ import type { Session } from "../../vanillajs/index.js";
5
5
  import type { VanillaJSDisplayMode } from "../../vanillajs/auth/types/AuthTypes.js";
6
6
  import type { IframeMode } from "../../types.js";
7
7
  export interface SignInConfig {
@@ -15,8 +15,14 @@ export interface SignInConfig {
15
15
  authProcessTimeout?: number;
16
16
  preloadIframe?: boolean;
17
17
  autoRedirect?: boolean;
18
- onSignIn?: (error?: Error) => void;
19
- onSignOut?: () => void;
18
+ onSignIn?: (options: {
19
+ error?: Error;
20
+ user?: User | null;
21
+ session?: Session | null;
22
+ }) => void | Promise<void>;
23
+ onSignOut?: (options: {
24
+ error?: Error;
25
+ }) => void | Promise<void>;
20
26
  onUrlChange?: (url: string, source?: string) => void;
21
27
  }
22
28
  export interface UserContextType<T extends Record<string, unknown> = Record<string, never>> {
@@ -37,6 +43,6 @@ export interface UserContextType<T extends Record<string, unknown> = Record<stri
37
43
  getPreloadEnabled: () => boolean;
38
44
  displayMode?: DisplayMode;
39
45
  }
40
- declare const useUser: <T extends Record<string, unknown> = Record<string, never>>(config?: GlobalAuthConfig) => UserContextType<T>;
46
+ declare const useUser: <T extends Record<string, unknown> = Record<string, never>>(config?: SignInConfig) => UserContextType<T>;
41
47
  export { useUser };
42
48
  //# sourceMappingURL=useUser.d.ts.map
@@ -1 +1 @@
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;AAEtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAYjD,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED,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,CAAC,MAAM,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;IAC9D,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD,yBAAyB,EAAE,MAAM,OAAO,CAAC;IACzC,iBAAiB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,iBAAiB,EAAE,MAAM,OAAO,CAAC;IACjC,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,CAuOnB,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,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAOxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAYjD,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE;QACnB,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;KAC1B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED,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,CAAC,MAAM,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;IAC9D,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD,yBAAyB,EAAE,MAAM,OAAO,CAAC;IACzC,iBAAiB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,iBAAiB,EAAE,MAAM,OAAO,CAAC;IACjC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,QAAA,MAAM,OAAO,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,mCACvC,YAAY,KACpB,eAAe,CAAC,CAAC,CA4OnB,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -28,8 +28,8 @@
28
28
  * config: { oauthServer: "https://auth.civic.com/oauth/" },
29
29
  * displayMode: "iframe", // or "redirect", "popup", etc.
30
30
  * scopes: ["openid", "profile", "email"],
31
- * onSignIn: (error) => console.log("Sign in completed", error),
32
- * onSignOut: () => console.log("Sign out completed")
31
+ * onSignIn: ({ user: signedInUser }) => console.log("Sign in completed", signedInUser),
32
+ * onSignOut: ({}) => console.log("Sign out completed")
33
33
  * });
34
34
  *
35
35
  * // Generic typing for custom user data
@@ -87,15 +87,16 @@ const useUser = (config) => {
87
87
  ...(overrides.autoRedirect !== undefined && {
88
88
  autoRedirect: overrides.autoRedirect,
89
89
  }),
90
- ...(overrides.onSignIn && { onSignIn: overrides.onSignIn }),
91
- ...(overrides.onSignOut && { onSignOut: overrides.onSignOut }),
92
90
  ...(overrides.onUrlChange && { onUrlChange: overrides.onUrlChange }),
93
91
  ...(currentConfig && serverAuthData
94
92
  ? { storage: new BrowserCookieStorage() }
95
93
  : localStorageAdapter), // Use cookie storage if server data present
96
94
  ...(currentConfig && initialUser ? { initialUser } : {}), // Use server user as initial user if available
97
95
  };
98
- }, [config, initialUser, serverAuthData, localStorageAdapter]);
96
+ },
97
+ // use JSON.stringify to ensure stable identity otherwise config causes re-rendering loop as it includes functions
98
+ // eslint-disable-next-line react-hooks/exhaustive-deps
99
+ [JSON.stringify(config), initialUser, serverAuthData, localStorageAdapter]);
99
100
  // Global manager preloading functions
100
101
  const globalIsAuthenticationPreloaded = useCallback(() => {
101
102
  const manager = GlobalAuthManager.getInstance();
@@ -158,7 +159,6 @@ const useUser = (config) => {
158
159
  setPreloadEnabled: globalSetPreloadEnabled,
159
160
  getPreloadEnabled: globalGetPreloadEnabled,
160
161
  displayMode: config?.displayMode,
161
- storage: config?.storage,
162
162
  }
163
163
  : null;
164
164
  // State for global manager approach
@@ -166,7 +166,11 @@ const useUser = (config) => {
166
166
  // Initialize global manager if no provider context
167
167
  useEffect(() => {
168
168
  const manager = GlobalAuthManager.getInstance();
169
- const mergedConfig = createConfigWithOverrides({});
169
+ const mergedConfig = createConfigWithOverrides(config || {});
170
+ manager.updateCallbacks({
171
+ ...(config?.onSignIn ? { onPreSignIn: config.onSignIn } : {}),
172
+ ...(config?.onSignOut ? { onPreSignOut: config.onSignOut } : {}),
173
+ });
170
174
  // If config is provided, initialize with it
171
175
  if (mergedConfig?.config) {
172
176
  const initializeAuth = async () => {
@@ -189,8 +193,9 @@ const useUser = (config) => {
189
193
  setGlobalState(currentState);
190
194
  }
191
195
  return unsubscribe;
196
+ // use JSON.stringify to ensure stable identity otherwise config causes re-rendering loop as it includes functions
192
197
  // eslint-disable-next-line react-hooks/exhaustive-deps
193
- }, [config]);
198
+ }, [JSON.stringify(config)]);
194
199
  // Extract tokens from global state
195
200
  const globalTokens = useMemo(() => {
196
201
  return extractTokensFromSession(globalState?.session || null);
@@ -1 +1 @@
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 { ServerUserContext } from \"../../nextjs/providers/ServerUserContext.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\";\nimport type { VanillaJSDisplayMode } from \"../../vanillajs/auth/types/AuthTypes.js\";\nimport type { IframeMode } from \"../../types.js\";\nimport { BrowserCookieStorage } from \"@/shared/index.js\";\nimport { GenericUserSession } from \"@/shared/lib/UserSession.js\";\nimport { LocalStorageAdapter } from \"@/browser/storage.js\";\nimport { useIsClient } from \"usehooks-ts\";\n\n// Type for server user data that may include forwardedTokens from session storage\ntype ServerUserWithTokens<\n T extends Record<string, unknown> = Record<string, never>,\n> = User<T> & { forwardedTokens?: ForwardedTokens };\n\n// Configuration type for signIn and signOut functions\nexport interface SignInConfig {\n displayMode?: VanillaJSDisplayMode;\n iframeMode?: IframeMode;\n clientId?: string;\n redirectUrl?: string;\n logoutRedirectUrl?: string;\n targetContainerElement?: HTMLElement | string;\n scopes?: string[];\n authProcessTimeout?: number;\n preloadIframe?: boolean;\n autoRedirect?: boolean;\n onSignIn?: (error?: Error) => void;\n onSignOut?: () => void;\n onUrlChange?: (url: string, source?: string) => void;\n}\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: (config?: SignInConfig) => Promise<{ user: User<T> }>;\n signOut: (config?: SignInConfig) => Promise<void>;\n // Preloading methods\n isAuthenticationPreloaded: () => boolean;\n setPreloadEnabled: (enabled: boolean) => void;\n getPreloadEnabled: () => boolean;\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 serverAuthData = useContext(ServerUserContext);\n const { user: serverUser, tokens: serverTokens } = serverAuthData || {};\n const isClient = useIsClient();\n const localStorageAdapter = useMemo(\n () => (isClient ? new LocalStorageAdapter() : null),\n [isClient],\n );\n const localUserStorage = useMemo(\n () =>\n localStorageAdapter\n ? new GenericUserSession<T>(localStorageAdapter)\n : null,\n [localStorageAdapter],\n );\n const localStorageUserData = localUserStorage?.getSync() || null; // Get user from local storage if available\n const initialUser = serverUser || localStorageUserData; // Get initial user from server context or local storage\n\n // Helper to merge config overrides with current manager config\n const createConfigWithOverrides = useCallback(\n (overrides: SignInConfig): GlobalAuthConfig => {\n const manager = GlobalAuthManager.getInstance();\n const currentConfig = manager.getConfig();\n\n // Use current config from manager, or fall back to initial config if manager not initialized\n const baseConfig = currentConfig || config || {};\n\n return {\n ...baseConfig, // Complete current config from GlobalAuthManager\n // Override specific properties while keeping the base config\n ...(overrides.displayMode && { displayMode: overrides.displayMode }),\n ...(overrides.iframeMode !== undefined && {\n iframeMode: overrides.iframeMode,\n }),\n ...(overrides.clientId && { clientId: overrides.clientId }),\n ...(overrides.redirectUrl && { redirectUrl: overrides.redirectUrl }),\n ...(overrides.logoutRedirectUrl && {\n logoutRedirectUrl: overrides.logoutRedirectUrl,\n }),\n ...(overrides.targetContainerElement && {\n targetContainerElement: overrides.targetContainerElement,\n }),\n ...(overrides.scopes && { scopes: overrides.scopes }),\n ...(overrides.authProcessTimeout && {\n authProcessTimeout: overrides.authProcessTimeout,\n }),\n ...(overrides.preloadIframe !== undefined && {\n preloadIframe: overrides.preloadIframe,\n }),\n ...(overrides.autoRedirect !== undefined && {\n autoRedirect: overrides.autoRedirect,\n }),\n ...(overrides.onSignIn && { onSignIn: overrides.onSignIn }),\n ...(overrides.onSignOut && { onSignOut: overrides.onSignOut }),\n ...(overrides.onUrlChange && { onUrlChange: overrides.onUrlChange }),\n ...(currentConfig && serverAuthData\n ? { storage: new BrowserCookieStorage() }\n : localStorageAdapter), // Use cookie storage if server data present\n ...(currentConfig && initialUser ? { initialUser } : {}), // Use server user as initial user if available\n };\n },\n [config, initialUser, serverAuthData, localStorageAdapter],\n );\n\n // Global manager preloading functions\n const globalIsAuthenticationPreloaded = useCallback(() => {\n const manager = GlobalAuthManager.getInstance();\n return manager.isAuthenticationPreloaded();\n }, []);\n\n const globalSetPreloadEnabled = useCallback((enabled: boolean) => {\n const manager = GlobalAuthManager.getInstance();\n manager.setPreloadEnabled(enabled);\n }, []);\n\n const globalGetPreloadEnabled = useCallback(() => {\n const manager = GlobalAuthManager.getInstance();\n return manager.getPreloadEnabled();\n }, []);\n\n // Global manager sign in/out functions\n const globalSignIn = useCallback(\n async (signInConfig?: SignInConfig) => {\n const manager = GlobalAuthManager.getInstance();\n\n // If config is provided, reinitialize with merged config\n if (signInConfig) {\n const mergedConfig = createConfigWithOverrides(signInConfig);\n await manager.initialize(mergedConfig);\n }\n\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 [createConfigWithOverrides],\n );\n\n const globalSignOut = useCallback(\n async (signOutConfig?: SignInConfig) => {\n const manager = GlobalAuthManager.getInstance();\n\n // If config is provided, reinitialize with merged config\n if (signOutConfig) {\n const mergedConfig = createConfigWithOverrides(signOutConfig);\n await manager.initialize(mergedConfig);\n }\n\n await manager.signOut();\n },\n [createConfigWithOverrides],\n );\n\n // Only set initial state if we have server data or local storage data\n const initialState = initialUser\n ? {\n session: {\n user: initialUser as User<T>,\n idToken: serverTokens?.idToken,\n accessToken: serverTokens?.accessToken,\n refreshToken: serverTokens?.refreshToken,\n },\n user: initialUser as User<T> | null,\n idToken: serverTokens?.idToken || null,\n accessToken: serverTokens?.accessToken || null,\n refreshToken: serverTokens?.refreshToken || null,\n forwardedTokens: (serverUser as ServerUserWithTokens<T>)\n ?.forwardedTokens,\n isLoading: false, // Server data is immediately available\n authStatus: \"authenticated\" as AuthStatus,\n error: null,\n signIn: globalSignIn,\n signOut: globalSignOut,\n isAuthenticationPreloaded: globalIsAuthenticationPreloaded,\n setPreloadEnabled: globalSetPreloadEnabled,\n getPreloadEnabled: globalGetPreloadEnabled,\n displayMode: config?.displayMode as DisplayMode,\n storage: config?.storage,\n }\n : null;\n\n // State for global manager approach\n const [globalState, setGlobalState] = useState<GlobalAuthState | null>(\n initialState,\n );\n\n // Initialize global manager if no provider context\n useEffect(() => {\n const manager = GlobalAuthManager.getInstance();\n const mergedConfig = createConfigWithOverrides({});\n // If config is provided, initialize with it\n if (mergedConfig?.config) {\n const initializeAuth = async () => {\n try {\n await manager.initialize(mergedConfig);\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 const currentState = manager.getState();\n // Get current state\n if (manager.getConfig()) {\n setGlobalState(currentState);\n }\n\n return unsubscribe;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [config]);\n\n // Extract tokens from global state\n const globalTokens = useMemo(() => {\n return extractTokensFromSession(globalState?.session || null);\n }, [globalState?.session]);\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 isAuthenticationPreloaded: globalIsAuthenticationPreloaded,\n setPreloadEnabled: globalSetPreloadEnabled,\n getPreloadEnabled: globalGetPreloadEnabled,\n displayMode: globalState.displayMode as 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 isAuthenticationPreloaded: globalIsAuthenticationPreloaded,\n setPreloadEnabled: globalSetPreloadEnabled,\n getPreloadEnabled: globalGetPreloadEnabled,\n displayMode: config?.displayMode as DisplayMode,\n };\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: ({ user: signedInUser }) => console.log(\"Sign in completed\", signedInUser),\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 { ServerUserContext } from \"../../nextjs/providers/ServerUserContext.js\";\nimport type { User, ForwardedTokens } from \"../../types.js\";\nimport type { AuthStatus } from \"../../types.js\";\nimport type { DisplayMode } from \"../../types.js\";\nimport type { Session } from \"../../vanillajs/index.js\";\nimport {\n GlobalAuthManager,\n type GlobalAuthConfig,\n type GlobalAuthState,\n} from \"../core/GlobalAuthManager.js\";\nimport { extractTokensFromSession } from \"../../vanillajs/utils/auth-utils.js\";\nimport type { VanillaJSDisplayMode } from \"../../vanillajs/auth/types/AuthTypes.js\";\nimport type { IframeMode } from \"../../types.js\";\nimport { BrowserCookieStorage } from \"@/shared/index.js\";\nimport { GenericUserSession } from \"@/shared/lib/UserSession.js\";\nimport { LocalStorageAdapter } from \"@/browser/storage.js\";\nimport { useIsClient } from \"usehooks-ts\";\n\n// Type for server user data that may include forwardedTokens from session storage\ntype ServerUserWithTokens<\n T extends Record<string, unknown> = Record<string, never>,\n> = User<T> & { forwardedTokens?: ForwardedTokens };\n\n// Configuration type for signIn and signOut functions\nexport interface SignInConfig {\n displayMode?: VanillaJSDisplayMode;\n iframeMode?: IframeMode;\n clientId?: string;\n redirectUrl?: string;\n logoutRedirectUrl?: string;\n targetContainerElement?: HTMLElement | string;\n scopes?: string[];\n authProcessTimeout?: number;\n preloadIframe?: boolean;\n autoRedirect?: boolean;\n onSignIn?: (options: {\n error?: Error;\n user?: User | null;\n session?: Session | null;\n }) => void | Promise<void>;\n onSignOut?: (options: { error?: Error }) => void | Promise<void>;\n onUrlChange?: (url: string, source?: string) => void;\n}\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: (config?: SignInConfig) => Promise<{ user: User<T> }>;\n signOut: (config?: SignInConfig) => Promise<void>;\n // Preloading methods\n isAuthenticationPreloaded: () => boolean;\n setPreloadEnabled: (enabled: boolean) => void;\n getPreloadEnabled: () => boolean;\n displayMode?: DisplayMode;\n}\n\nconst useUser = <T extends Record<string, unknown> = Record<string, never>>(\n config?: SignInConfig,\n): UserContextType<T> => {\n // Always call context hooks unconditionally (rules of hooks)\n const serverAuthData = useContext(ServerUserContext);\n const { user: serverUser, tokens: serverTokens } = serverAuthData || {};\n const isClient = useIsClient();\n const localStorageAdapter = useMemo(\n () => (isClient ? new LocalStorageAdapter() : null),\n [isClient],\n );\n const localUserStorage = useMemo(\n () =>\n localStorageAdapter\n ? new GenericUserSession<T>(localStorageAdapter)\n : null,\n [localStorageAdapter],\n );\n const localStorageUserData = localUserStorage?.getSync() || null; // Get user from local storage if available\n const initialUser = serverUser || localStorageUserData; // Get initial user from server context or local storage\n\n // Helper to merge config overrides with current manager config\n const createConfigWithOverrides = useCallback(\n (overrides: SignInConfig): GlobalAuthConfig => {\n const manager = GlobalAuthManager.getInstance();\n const currentConfig = manager.getConfig();\n\n // Use current config from manager, or fall back to initial config if manager not initialized\n const baseConfig = currentConfig || config || {};\n\n return {\n ...baseConfig, // Complete current config from GlobalAuthManager\n // Override specific properties while keeping the base config\n ...(overrides.displayMode && { displayMode: overrides.displayMode }),\n ...(overrides.iframeMode !== undefined && {\n iframeMode: overrides.iframeMode,\n }),\n ...(overrides.clientId && { clientId: overrides.clientId }),\n ...(overrides.redirectUrl && { redirectUrl: overrides.redirectUrl }),\n ...(overrides.logoutRedirectUrl && {\n logoutRedirectUrl: overrides.logoutRedirectUrl,\n }),\n ...(overrides.targetContainerElement && {\n targetContainerElement: overrides.targetContainerElement,\n }),\n ...(overrides.scopes && { scopes: overrides.scopes }),\n ...(overrides.authProcessTimeout && {\n authProcessTimeout: overrides.authProcessTimeout,\n }),\n ...(overrides.preloadIframe !== undefined && {\n preloadIframe: overrides.preloadIframe,\n }),\n ...(overrides.autoRedirect !== undefined && {\n autoRedirect: overrides.autoRedirect,\n }),\n ...(overrides.onUrlChange && { onUrlChange: overrides.onUrlChange }),\n ...(currentConfig && serverAuthData\n ? { storage: new BrowserCookieStorage() }\n : localStorageAdapter), // Use cookie storage if server data present\n ...(currentConfig && initialUser ? { initialUser } : {}), // Use server user as initial user if available\n };\n },\n // use JSON.stringify to ensure stable identity otherwise config causes re-rendering loop as it includes functions\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(config), initialUser, serverAuthData, localStorageAdapter],\n );\n\n // Global manager preloading functions\n const globalIsAuthenticationPreloaded = useCallback(() => {\n const manager = GlobalAuthManager.getInstance();\n return manager.isAuthenticationPreloaded();\n }, []);\n\n const globalSetPreloadEnabled = useCallback((enabled: boolean) => {\n const manager = GlobalAuthManager.getInstance();\n manager.setPreloadEnabled(enabled);\n }, []);\n\n const globalGetPreloadEnabled = useCallback(() => {\n const manager = GlobalAuthManager.getInstance();\n return manager.getPreloadEnabled();\n }, []);\n\n // Global manager sign in/out functions\n const globalSignIn = useCallback(\n async (signInConfig?: SignInConfig) => {\n const manager = GlobalAuthManager.getInstance();\n\n // If config is provided, reinitialize with merged config\n if (signInConfig) {\n const mergedConfig = createConfigWithOverrides(signInConfig);\n await manager.initialize(mergedConfig);\n }\n\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 [createConfigWithOverrides],\n );\n\n const globalSignOut = useCallback(\n async (signOutConfig?: SignInConfig) => {\n const manager = GlobalAuthManager.getInstance();\n\n // If config is provided, reinitialize with merged config\n if (signOutConfig) {\n const mergedConfig = createConfigWithOverrides(signOutConfig);\n await manager.initialize(mergedConfig);\n }\n\n await manager.signOut();\n },\n [createConfigWithOverrides],\n );\n\n // Only set initial state if we have server data or local storage data\n const initialState = initialUser\n ? {\n session: {\n user: initialUser as User<T>,\n idToken: serverTokens?.idToken,\n accessToken: serverTokens?.accessToken,\n refreshToken: serverTokens?.refreshToken,\n },\n user: initialUser as User<T> | null,\n idToken: serverTokens?.idToken || null,\n accessToken: serverTokens?.accessToken || null,\n refreshToken: serverTokens?.refreshToken || null,\n forwardedTokens: (serverUser as ServerUserWithTokens<T>)\n ?.forwardedTokens,\n isLoading: false, // Server data is immediately available\n authStatus: \"authenticated\" as AuthStatus,\n error: null,\n signIn: globalSignIn,\n signOut: globalSignOut,\n isAuthenticationPreloaded: globalIsAuthenticationPreloaded,\n setPreloadEnabled: globalSetPreloadEnabled,\n getPreloadEnabled: globalGetPreloadEnabled,\n displayMode: config?.displayMode as DisplayMode,\n }\n : null;\n\n // State for global manager approach\n const [globalState, setGlobalState] = useState<GlobalAuthState | null>(\n initialState,\n );\n\n // Initialize global manager if no provider context\n useEffect(() => {\n const manager = GlobalAuthManager.getInstance();\n const mergedConfig = createConfigWithOverrides(config || {});\n\n manager.updateCallbacks({\n ...(config?.onSignIn ? { onPreSignIn: config.onSignIn } : {}),\n ...(config?.onSignOut ? { onPreSignOut: config.onSignOut } : {}),\n });\n // If config is provided, initialize with it\n if (mergedConfig?.config) {\n const initializeAuth = async () => {\n try {\n await manager.initialize(mergedConfig);\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 const currentState = manager.getState();\n // Get current state\n if (manager.getConfig()) {\n setGlobalState(currentState);\n }\n\n return unsubscribe;\n // use JSON.stringify to ensure stable identity otherwise config causes re-rendering loop as it includes functions\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(config)]);\n\n // Extract tokens from global state\n const globalTokens = useMemo(() => {\n return extractTokensFromSession(globalState?.session || null);\n }, [globalState?.session]);\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 isAuthenticationPreloaded: globalIsAuthenticationPreloaded,\n setPreloadEnabled: globalSetPreloadEnabled,\n getPreloadEnabled: globalGetPreloadEnabled,\n displayMode: globalState.displayMode as 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 isAuthenticationPreloaded: globalIsAuthenticationPreloaded,\n setPreloadEnabled: globalSetPreloadEnabled,\n getPreloadEnabled: globalGetPreloadEnabled,\n displayMode: config?.displayMode as DisplayMode,\n };\n};\n\nexport { useUser };\n"]}
@@ -2,8 +2,6 @@ export * from "../reactjs/hooks/index.js";
2
2
  export { GlobalAuthManager } from "../reactjs/core/GlobalAuthManager.js";
3
3
  export type { GlobalAuthConfig, GlobalAuthState, } from "../reactjs/core/GlobalAuthManager.js";
4
4
  export { CivicAuthProvider, type CivicAuthProviderProps, } from "../reactjs/providers/CivicAuthProvider.js";
5
- export { useCivicAuthContext } from "../reactjs/providers/CivicAuthContext.js";
6
- export type { CivicAuthContextType, AuthStatusEnum, } from "../reactjs/providers/CivicAuthContext.js";
7
5
  export type { UserContextType } from "../reactjs/hooks/index.js";
8
6
  export { UserButton, SignInButton, SignOutButton, CivicAuthIframeContainer, } from "../reactjs/components/index.js";
9
7
  //# 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;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;AAE9E,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,EACb,wBAAwB,GACzB,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,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,EACL,UAAU,EACV,YAAY,EACZ,aAAa,EACb,wBAAwB,GACzB,MAAM,+BAA+B,CAAC"}
@@ -8,8 +8,6 @@ export * from "../reactjs/hooks/index.js";
8
8
  export { GlobalAuthManager } from "../reactjs/core/GlobalAuthManager.js";
9
9
  // Provider-based approach (for apps that prefer providers)
10
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";
13
11
  // Export our VanillaJS-based components
14
12
  export { UserButton, SignInButton, SignOutButton, CivicAuthIframeContainer, } from "../reactjs/components/index.js";
15
13
  //# 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;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;AAU9E,wCAAwC;AACxC,OAAO,EACL,UAAU,EACV,YAAY,EACZ,aAAa,EACb,wBAAwB,GACzB,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\";\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 CivicAuthIframeContainer,\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;AAKlD,wCAAwC;AACxC,OAAO,EACL,UAAU,EACV,YAAY,EACZ,aAAa,EACb,wBAAwB,GACzB,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 types\nexport type { UserContextType } from \"@/reactjs/hooks/index.js\";\n\n// Export our VanillaJS-based components\nexport {\n UserButton,\n SignInButton,\n SignOutButton,\n CivicAuthIframeContainer,\n} from \"@/reactjs/components/index.js\";\n"]}
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
- import type { DisplayMode } from "../../types.js";
2
+ import type { DisplayMode, User } from "../../types.js";
3
3
  import type { LoggingConfig } from "../../vanillajs/auth/types/AuthTypes.js";
4
+ import type { Session } from "../../vanillajs/index.js";
4
5
  export interface CivicAuthProviderProps {
5
6
  children: React.ReactNode;
6
7
  clientId?: string;
@@ -12,8 +13,14 @@ export interface CivicAuthProviderProps {
12
13
  scopes?: string[];
13
14
  displayMode?: DisplayMode;
14
15
  iframeMode?: "modal" | "embedded";
15
- onSignIn?: (error?: Error) => void;
16
- onSignOut?: () => void;
16
+ onSignIn?: (options: {
17
+ error?: Error;
18
+ user?: User | null;
19
+ session?: Session | null;
20
+ }) => void | Promise<void>;
21
+ onSignOut?: (options: {
22
+ error?: Error;
23
+ }) => void | Promise<void>;
17
24
  nonce?: string;
18
25
  logoutRedirectUrl?: string;
19
26
  authProcessTimeout?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"CivicAuthProvider.d.ts","sourceRoot":"","sources":["../../../src/reactjs/providers/CivicAuthProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAKzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEzE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAClC,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,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAwEvD,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"CivicAuthProvider.d.ts","sourceRoot":"","sources":["../../../src/reactjs/providers/CivicAuthProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAKzC,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE;QACnB,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;KAC1B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAwEvD,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"CivicAuthProvider.js","sourceRoot":"","sources":["../../../src/reactjs/providers/CivicAuthProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EACL,iBAAiB,GAElB,MAAM,8BAA8B,CAAC;AAyBtC,MAAM,iBAAiB,GAAqC,CAAC,EAC3D,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,MAAM,EACN,MAAM,EACN,WAAW,GAAG,QAAQ,EACtB,UAAU,GAAG,OAAO,EACpB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,OAAO,EACP,YAAY,GAAG,IAAI,GACpB,EAAE,EAAE;IACH,wDAAwD;IACxD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAqB;YACrC,QAAQ;YACR,QAAQ;YACR,WAAW;YACX,MAAM,EAAE;gBACN,WAAW,EAAE,MAAM,EAAE,WAAW;aACjC;YACD,MAAM;YACN,WAAW;YACX,UAAU;YACV,KAAK;YACL,iBAAiB;YACjB,kBAAkB;YAClB,aAAa;YACb,QAAQ;YACR,SAAS;YACT,OAAO;YACP,YAAY;YACZ,SAAS,EAAE,SAAS;SACrB,CAAC;QAEF,MAAM,OAAO,GAAG,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAEhD,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CAAC;QAEF,cAAc,EAAE,CAAC;IACnB,CAAC,EAAE;QACD,QAAQ;QACR,QAAQ;QACR,WAAW;QACX,MAAM,EAAE,WAAW;QACnB,MAAM;QACN,WAAW;QACX,UAAU;QACV,KAAK;QACL,iBAAiB;QACjB,kBAAkB;QAClB,aAAa;QACb,QAAQ;QACR,SAAS;QACT,OAAO;QACP,YAAY;KACb,CAAC,CAAC;IAEH,oDAAoD;IACpD,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["\"use client\";\nimport React, { useEffect } from \"react\";\nimport {\n GlobalAuthManager,\n type GlobalAuthConfig,\n} from \"../core/GlobalAuthManager.js\";\nimport type { DisplayMode } from \"@/types.js\";\nimport type { LoggingConfig } from \"@/vanillajs/auth/types/AuthTypes.js\";\n\nexport interface CivicAuthProviderProps {\n children: React.ReactNode;\n clientId?: string;\n loginUrl?: string;\n redirectUrl?: string;\n config?: {\n oauthServer?: string;\n };\n scopes?: string[];\n displayMode?: DisplayMode;\n iframeMode?: \"modal\" | \"embedded\";\n onSignIn?: (error?: Error) => void;\n onSignOut?: () => void;\n nonce?: string;\n logoutRedirectUrl?: string;\n authProcessTimeout?: number;\n preloadIframe?: boolean;\n logging?: LoggingConfig;\n autoRedirect?: boolean;\n}\n\nconst CivicAuthProvider: React.FC<CivicAuthProviderProps> = ({\n children,\n clientId,\n loginUrl,\n redirectUrl,\n config,\n scopes,\n displayMode = \"iframe\",\n iframeMode = \"modal\",\n onSignIn,\n onSignOut,\n nonce,\n logoutRedirectUrl,\n authProcessTimeout,\n preloadIframe,\n logging,\n autoRedirect = true,\n}) => {\n // Initialize GlobalAuthManager with the provider config\n useEffect(() => {\n const globalConfig: GlobalAuthConfig = {\n clientId,\n loginUrl,\n redirectUrl,\n config: {\n oauthServer: config?.oauthServer,\n },\n scopes,\n displayMode,\n iframeMode,\n nonce,\n logoutRedirectUrl,\n authProcessTimeout,\n preloadIframe,\n onSignIn,\n onSignOut,\n logging,\n autoRedirect,\n framework: \"reactjs\",\n };\n\n const manager = GlobalAuthManager.getInstance();\n\n const initializeAuth = async () => {\n try {\n await manager.initialize(globalConfig);\n } catch (error) {\n console.error(\"Failed to initialize auth in CivicAuthProvider:\", error);\n }\n };\n\n initializeAuth();\n }, [\n clientId,\n loginUrl,\n redirectUrl,\n config?.oauthServer,\n scopes,\n displayMode,\n iframeMode,\n nonce,\n logoutRedirectUrl,\n authProcessTimeout,\n preloadIframe,\n onSignIn,\n onSignOut,\n logging,\n autoRedirect,\n ]);\n\n // Just render children - no context provider needed\n return <>{children}</>;\n};\n\nexport { CivicAuthProvider };\n"]}
1
+ {"version":3,"file":"CivicAuthProvider.js","sourceRoot":"","sources":["../../../src/reactjs/providers/CivicAuthProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EACL,iBAAiB,GAElB,MAAM,8BAA8B,CAAC;AA8BtC,MAAM,iBAAiB,GAAqC,CAAC,EAC3D,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,MAAM,EACN,MAAM,EACN,WAAW,GAAG,QAAQ,EACtB,UAAU,GAAG,OAAO,EACpB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,OAAO,EACP,YAAY,GAAG,IAAI,GACpB,EAAE,EAAE;IACH,wDAAwD;IACxD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAqB;YACrC,QAAQ;YACR,QAAQ;YACR,WAAW;YACX,MAAM,EAAE;gBACN,WAAW,EAAE,MAAM,EAAE,WAAW;aACjC;YACD,MAAM;YACN,WAAW;YACX,UAAU;YACV,KAAK;YACL,iBAAiB;YACjB,kBAAkB;YAClB,aAAa;YACb,QAAQ;YACR,SAAS;YACT,OAAO;YACP,YAAY;YACZ,SAAS,EAAE,SAAS;SACrB,CAAC;QAEF,MAAM,OAAO,GAAG,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAEhD,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CAAC;QAEF,cAAc,EAAE,CAAC;IACnB,CAAC,EAAE;QACD,QAAQ;QACR,QAAQ;QACR,WAAW;QACX,MAAM,EAAE,WAAW;QACnB,MAAM;QACN,WAAW;QACX,UAAU;QACV,KAAK;QACL,iBAAiB;QACjB,kBAAkB;QAClB,aAAa;QACb,QAAQ;QACR,SAAS;QACT,OAAO;QACP,YAAY;KACb,CAAC,CAAC;IAEH,oDAAoD;IACpD,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["\"use client\";\nimport React, { useEffect } from \"react\";\nimport {\n GlobalAuthManager,\n type GlobalAuthConfig,\n} from \"../core/GlobalAuthManager.js\";\nimport type { DisplayMode, User } from \"@/types.js\";\nimport type { LoggingConfig } from \"@/vanillajs/auth/types/AuthTypes.js\";\nimport type { Session } from \"@/vanillajs/index.js\";\n\nexport interface CivicAuthProviderProps {\n children: React.ReactNode;\n clientId?: string;\n loginUrl?: string;\n redirectUrl?: string;\n config?: {\n oauthServer?: string;\n };\n scopes?: string[];\n displayMode?: DisplayMode;\n iframeMode?: \"modal\" | \"embedded\";\n onSignIn?: (options: {\n error?: Error;\n user?: User | null;\n session?: Session | null;\n }) => void | Promise<void>;\n onSignOut?: (options: { error?: Error }) => void | Promise<void>;\n nonce?: string;\n logoutRedirectUrl?: string;\n authProcessTimeout?: number;\n preloadIframe?: boolean;\n logging?: LoggingConfig;\n autoRedirect?: boolean;\n}\n\nconst CivicAuthProvider: React.FC<CivicAuthProviderProps> = ({\n children,\n clientId,\n loginUrl,\n redirectUrl,\n config,\n scopes,\n displayMode = \"iframe\",\n iframeMode = \"modal\",\n onSignIn,\n onSignOut,\n nonce,\n logoutRedirectUrl,\n authProcessTimeout,\n preloadIframe,\n logging,\n autoRedirect = true,\n}) => {\n // Initialize GlobalAuthManager with the provider config\n useEffect(() => {\n const globalConfig: GlobalAuthConfig = {\n clientId,\n loginUrl,\n redirectUrl,\n config: {\n oauthServer: config?.oauthServer,\n },\n scopes,\n displayMode,\n iframeMode,\n nonce,\n logoutRedirectUrl,\n authProcessTimeout,\n preloadIframe,\n onSignIn,\n onSignOut,\n logging,\n autoRedirect,\n framework: \"reactjs\",\n };\n\n const manager = GlobalAuthManager.getInstance();\n\n const initializeAuth = async () => {\n try {\n await manager.initialize(globalConfig);\n } catch (error) {\n console.error(\"Failed to initialize auth in CivicAuthProvider:\", error);\n }\n };\n\n initializeAuth();\n }, [\n clientId,\n loginUrl,\n redirectUrl,\n config?.oauthServer,\n scopes,\n displayMode,\n iframeMode,\n nonce,\n logoutRedirectUrl,\n authProcessTimeout,\n preloadIframe,\n onSignIn,\n onSignOut,\n logging,\n autoRedirect,\n ]);\n\n // Just render children - no context provider needed\n return <>{children}</>;\n};\n\nexport { CivicAuthProvider };\n"]}
@@ -4,5 +4,4 @@ export { SessionProvider, SessionContext, type SessionContextType, } from "../..
4
4
  export { AuthContext } from "../../shared/providers/AuthContext.js";
5
5
  export type { AuthContextType } from "../../shared/providers/AuthContext.js";
6
6
  export { CivicAuthProvider, type CivicAuthProviderProps, } from "../../reactjs/providers/CivicAuthProvider.js";
7
- export { CivicAuthContext, CivicAuthContextProvider, useCivicAuthContext, type CivicAuthContextType, type CivicAuthContextProviderProps, type AuthStatusEnum, } from "../../reactjs/providers/CivicAuthContext.js";
8
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reactjs/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,WAAW,EACX,KAAK,eAAe,GACrB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,aAAa,EACb,YAAY,EACZ,KAAK,gBAAgB,GACtB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,eAAe,EACf,cAAc,EACd,KAAK,kBAAkB,GACxB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzE,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,0CAA0C,CAAC;AAElD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,6BAA6B,EAClC,KAAK,cAAc,GACpB,MAAM,yCAAyC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reactjs/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,WAAW,EACX,KAAK,eAAe,GACrB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,aAAa,EACb,YAAY,EACZ,KAAK,gBAAgB,GACtB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,eAAe,EACf,cAAc,EACd,KAAK,kBAAkB,GACxB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzE,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,0CAA0C,CAAC"}
@@ -5,5 +5,4 @@ export { SessionProvider, SessionContext, } from "../../shared/providers/Session
5
5
  export { AuthContext } from "../../shared/providers/AuthContext.js";
6
6
  // Main exports - new VanillaJS-based implementation
7
7
  export { CivicAuthProvider, } from "../../reactjs/providers/CivicAuthProvider.js";
8
- export { CivicAuthContext, CivicAuthContextProvider, useCivicAuthContext, } from "../../reactjs/providers/CivicAuthContext.js";
9
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reactjs/providers/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,EACL,YAAY,EACZ,WAAW,GAEZ,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,aAAa,EACb,YAAY,GAEb,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,eAAe,EACf,cAAc,GAEf,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAGhE,oDAAoD;AACpD,OAAO,EACL,iBAAiB,GAElB,MAAM,0CAA0C,CAAC;AAElD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,GAIpB,MAAM,yCAAyC,CAAC","sourcesContent":["// Legacy exports for backward compatibility\nexport {\n UserProvider,\n UserContext,\n type UserContextType,\n} from \"@/shared/providers/UserProvider.js\";\n\nexport {\n TokenProvider,\n TokenContext,\n type TokenContextType,\n} from \"@/shared/providers/TokenProvider.js\";\n\nexport {\n SessionProvider,\n SessionContext,\n type SessionContextType,\n} from \"@/shared/providers/SessionProvider.js\";\n\nexport { AuthContext } from \"@/shared/providers/AuthContext.js\";\nexport type { AuthContextType } from \"@/shared/providers/AuthContext.js\";\n\n// Main exports - new VanillaJS-based implementation\nexport {\n CivicAuthProvider,\n type CivicAuthProviderProps,\n} from \"@/reactjs/providers/CivicAuthProvider.js\";\n\nexport {\n CivicAuthContext,\n CivicAuthContextProvider,\n useCivicAuthContext,\n type CivicAuthContextType,\n type CivicAuthContextProviderProps,\n type AuthStatusEnum,\n} from \"@/reactjs/providers/CivicAuthContext.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reactjs/providers/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,EACL,YAAY,EACZ,WAAW,GAEZ,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,aAAa,EACb,YAAY,GAEb,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EACL,eAAe,EACf,cAAc,GAEf,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAGhE,oDAAoD;AACpD,OAAO,EACL,iBAAiB,GAElB,MAAM,0CAA0C,CAAC","sourcesContent":["// Legacy exports for backward compatibility\nexport {\n UserProvider,\n UserContext,\n type UserContextType,\n} from \"@/shared/providers/UserProvider.js\";\n\nexport {\n TokenProvider,\n TokenContext,\n type TokenContextType,\n} from \"@/shared/providers/TokenProvider.js\";\n\nexport {\n SessionProvider,\n SessionContext,\n type SessionContextType,\n} from \"@/shared/providers/SessionProvider.js\";\n\nexport { AuthContext } from \"@/shared/providers/AuthContext.js\";\nexport type { AuthContextType } from \"@/shared/providers/AuthContext.js\";\n\n// Main exports - new VanillaJS-based implementation\nexport {\n CivicAuthProvider,\n type CivicAuthProviderProps,\n} from \"@/reactjs/providers/CivicAuthProvider.js\";\n"]}
@@ -0,0 +1,49 @@
1
+ export declare const lightColors: {
2
+ "background-neutral": string;
3
+ "background-neutral-glass": string;
4
+ "background-tertiary": string;
5
+ "border-secondary": string;
6
+ "border-tertiary": string;
7
+ "icon-secondary": string;
8
+ "icon-tertiary": string;
9
+ "text-paragraph": string;
10
+ "text-tertiary": string;
11
+ };
12
+ export declare const darkColors: {
13
+ "background-neutral": string;
14
+ "background-tertiary": string;
15
+ "background-neutral-glass": string;
16
+ "border-secondary": string;
17
+ "border-tertiary": string;
18
+ "icon-secondary": string;
19
+ "icon-tertiary": string;
20
+ "text-paragraph": string;
21
+ "text-tertiary": string;
22
+ };
23
+ export declare const colors: {
24
+ light: {
25
+ "background-neutral": string;
26
+ "background-neutral-glass": string;
27
+ "background-tertiary": string;
28
+ "border-secondary": string;
29
+ "border-tertiary": string;
30
+ "icon-secondary": string;
31
+ "icon-tertiary": string;
32
+ "text-paragraph": string;
33
+ "text-tertiary": string;
34
+ };
35
+ dark: {
36
+ "background-neutral": string;
37
+ "background-tertiary": string;
38
+ "background-neutral-glass": string;
39
+ "border-secondary": string;
40
+ "border-tertiary": string;
41
+ "icon-secondary": string;
42
+ "icon-tertiary": string;
43
+ "text-paragraph": string;
44
+ "text-tertiary": string;
45
+ };
46
+ };
47
+ export declare const getCSSWithAutoTheme: (componentClass?: string) => string;
48
+ export declare const getCSSVariables: (theme?: "light" | "dark") => Record<string, string>;
49
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../../src/reactjs/styles/colors.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,WAAW;;;;;;;;;;CAUvB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;CAUtB,CAAC;AAEF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;CAGlB,CAAC;AAGF,eAAO,MAAM,mBAAmB,oBACd,MAAM,WA0CvB,CAAC;AAGF,eAAO,MAAM,eAAe,WAAW,OAAO,GAAG,MAAM,2BAStD,CAAC"}
@@ -0,0 +1,77 @@
1
+ // Centralized color variables as TypeScript objects
2
+ export const lightColors = {
3
+ "background-neutral": "#F0F0F0",
4
+ "background-neutral-glass": "#FFFFFF80",
5
+ "background-tertiary": "#F9F9F9",
6
+ "border-secondary": "#d4d4d4",
7
+ "border-tertiary": "#e5e5e5",
8
+ "icon-secondary": "#a3a3a3",
9
+ "icon-tertiary": "#d4d4d4",
10
+ "text-paragraph": "#0a0919",
11
+ "text-tertiary": "#737373",
12
+ };
13
+ export const darkColors = {
14
+ "background-neutral": "#24242480",
15
+ "background-tertiary": "#090d13",
16
+ "background-neutral-glass": "#181818",
17
+ "border-secondary": "#64748b",
18
+ "border-tertiary": "#64748b4c",
19
+ "icon-secondary": "#a3a3a3",
20
+ "icon-tertiary": "#a3a3a3",
21
+ "text-paragraph": "#fff1f2",
22
+ "text-tertiary": "#d4d4d4",
23
+ };
24
+ export const colors = {
25
+ light: lightColors,
26
+ dark: darkColors,
27
+ };
28
+ // Generate CSS that works within component scope using CSS custom properties
29
+ export const getCSSWithAutoTheme = (componentClass = "civic-component") => {
30
+ const lightVars = Object.entries(lightColors)
31
+ .map(([key, value]) => ` --${key}: var(--civic-${key}, ${value});`)
32
+ .join("\n");
33
+ const darkVars = Object.entries(darkColors)
34
+ .map(([key, value]) => ` --civic-${key}: ${value};`)
35
+ .join("\n");
36
+ const lightOverride = Object.entries(lightColors)
37
+ .map(([key, value]) => ` --civic-${key}: ${value};`)
38
+ .join("\n");
39
+ return `
40
+ /* Light theme (default) */
41
+ .${componentClass} {
42
+ ${lightVars}
43
+ }
44
+
45
+ /* Manual theme overrides */
46
+ .${componentClass}.civic-theme-light {
47
+ ${lightOverride}
48
+ }
49
+
50
+ .${componentClass}.civic-theme-dark {
51
+ ${darkVars}
52
+ }
53
+
54
+ /* Global dark mode classes that can be set on parent elements */
55
+ :root.dark,
56
+ :root[data-theme="dark"],
57
+ body.dark,
58
+ body[data-theme="dark"],
59
+ html.dark,
60
+ html[data-theme="dark"],
61
+ .dark,
62
+ .dark-mode,
63
+ .theme-dark {
64
+ ${darkVars}
65
+ }
66
+ `;
67
+ };
68
+ // Utility function to get CSS variables as a style object for manual theme
69
+ export const getCSSVariables = (theme = "light") => {
70
+ const colorSet = theme === "dark" ? darkColors : lightColors;
71
+ const cssVars = {};
72
+ Object.entries(colorSet).forEach(([key, value]) => {
73
+ cssVars[`--${key}`] = value;
74
+ });
75
+ return cssVars;
76
+ };
77
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../../src/reactjs/styles/colors.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,oBAAoB,EAAE,SAAS;IAC/B,0BAA0B,EAAE,WAAW;IACvC,qBAAqB,EAAE,SAAS;IAChC,kBAAkB,EAAE,SAAS;IAC7B,iBAAiB,EAAE,SAAS;IAC5B,gBAAgB,EAAE,SAAS;IAC3B,eAAe,EAAE,SAAS;IAC1B,gBAAgB,EAAE,SAAS;IAC3B,eAAe,EAAE,SAAS;CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,oBAAoB,EAAE,WAAW;IACjC,qBAAqB,EAAE,SAAS;IAChC,0BAA0B,EAAE,SAAS;IACrC,kBAAkB,EAAE,SAAS;IAC7B,iBAAiB,EAAE,WAAW;IAC9B,gBAAgB,EAAE,SAAS;IAC3B,eAAe,EAAE,SAAS;IAC1B,gBAAgB,EAAE,SAAS;IAC3B,eAAe,EAAE,SAAS;CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,UAAU;CACjB,CAAC;AAEF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,iBAAyB,iBAAiB,EAC1C,EAAE;IACF,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;SAC1C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,GAAG,iBAAiB,GAAG,KAAK,KAAK,IAAI,CAAC;SACnE,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,aAAa,GAAG,KAAK,KAAK,GAAG,CAAC;SACpD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;SAC9C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,aAAa,GAAG,KAAK,KAAK,GAAG,CAAC;SACpD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;GAEN,cAAc;EACf,SAAS;;;;GAIR,cAAc;EACf,aAAa;;;GAGZ,cAAc;EACf,QAAQ;;;;;;;;;;;;;EAaR,QAAQ;;CAET,CAAC;AACF,CAAC,CAAC;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAA0B,OAAO,EAAE,EAAE;IACnE,MAAM,QAAQ,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;IAC7D,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAChD,OAAO,CAAC,KAAK,GAAG,EAAY,CAAC,GAAG,KAAK,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["// Centralized color variables as TypeScript objects\nexport const lightColors = {\n \"background-neutral\": \"#F0F0F0\",\n \"background-neutral-glass\": \"#FFFFFF80\",\n \"background-tertiary\": \"#F9F9F9\",\n \"border-secondary\": \"#d4d4d4\",\n \"border-tertiary\": \"#e5e5e5\",\n \"icon-secondary\": \"#a3a3a3\",\n \"icon-tertiary\": \"#d4d4d4\",\n \"text-paragraph\": \"#0a0919\",\n \"text-tertiary\": \"#737373\",\n};\n\nexport const darkColors = {\n \"background-neutral\": \"#24242480\",\n \"background-tertiary\": \"#090d13\",\n \"background-neutral-glass\": \"#181818\",\n \"border-secondary\": \"#64748b\",\n \"border-tertiary\": \"#64748b4c\",\n \"icon-secondary\": \"#a3a3a3\",\n \"icon-tertiary\": \"#a3a3a3\",\n \"text-paragraph\": \"#fff1f2\",\n \"text-tertiary\": \"#d4d4d4\",\n};\n\nexport const colors = {\n light: lightColors,\n dark: darkColors,\n};\n\n// Generate CSS that works within component scope using CSS custom properties\nexport const getCSSWithAutoTheme = (\n componentClass: string = \"civic-component\",\n) => {\n const lightVars = Object.entries(lightColors)\n .map(([key, value]) => ` --${key}: var(--civic-${key}, ${value});`)\n .join(\"\\n\");\n\n const darkVars = Object.entries(darkColors)\n .map(([key, value]) => ` --civic-${key}: ${value};`)\n .join(\"\\n\");\n\n const lightOverride = Object.entries(lightColors)\n .map(([key, value]) => ` --civic-${key}: ${value};`)\n .join(\"\\n\");\n\n return `\n/* Light theme (default) */\n.${componentClass} {\n${lightVars}\n}\n\n/* Manual theme overrides */\n.${componentClass}.civic-theme-light {\n${lightOverride}\n}\n\n.${componentClass}.civic-theme-dark {\n${darkVars}\n}\n\n/* Global dark mode classes that can be set on parent elements */\n:root.dark,\n:root[data-theme=\"dark\"],\nbody.dark,\nbody[data-theme=\"dark\"],\nhtml.dark,\nhtml[data-theme=\"dark\"],\n.dark,\n.dark-mode,\n.theme-dark {\n${darkVars}\n}\n`;\n};\n\n// Utility function to get CSS variables as a style object for manual theme\nexport const getCSSVariables = (theme: \"light\" | \"dark\" = \"light\") => {\n const colorSet = theme === \"dark\" ? darkColors : lightColors;\n const cssVars: Record<string, string> = {};\n\n Object.entries(colorSet).forEach(([key, value]) => {\n cssVars[`--${key}` as string] = value;\n });\n\n return cssVars;\n};\n"]}
@@ -17,6 +17,7 @@ export type CookieStorageSettings = {
17
17
  };
18
18
  export declare const DEFAULT_COOKIE_DURATION: number;
19
19
  export declare abstract class CookieStorage implements AuthStorage {
20
+ storageType: "cookie";
20
21
  protected settings: CookieStorageSettings;
21
22
  protected constructor(settings?: Partial<CookieStorageSettings>);
22
23
  abstract get(key: string): Promise<string | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/shared/lib/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,KAAK,cAAc,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,GAAG,IAAI,WAAW,CAAC;IACnB,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IACtC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACtC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IAChD,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAU,CAAC;AAE/C,8BAAsB,aAAc,YAAW,WAAW;IACxD,SAAS,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IAC1C,SAAS,aAAa,QAAQ,GAAE,OAAO,CAAC,qBAAqB,CAAM;IAanE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,GAAG,CACV,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,oBAAoB,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC3C,OAAO,CAAC,IAAI,CAAC;IAChB,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAC5C;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/shared/lib/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,KAAK,cAAc,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,GAAG,IAAI,WAAW,CAAC;IACnB,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IACtC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACtC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IAChD,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAU,CAAC;AAE/C,8BAAsB,aAAc,YAAW,WAAW;IACxD,WAAW,EAAG,QAAQ,CAAU;IAChC,SAAS,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IAC1C,SAAS,aAAa,QAAQ,GAAE,OAAO,CAAC,qBAAqB,CAAM;IAanE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,GAAG,CACV,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,oBAAoB,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC3C,OAAO,CAAC,IAAI,CAAC;IAChB,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAC5C;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export const DEFAULT_COOKIE_DURATION = 60 * 15; // 15 minutes
2
2
  export class CookieStorage {
3
+ storageType = "cookie";
3
4
  settings;
4
5
  constructor(settings = {}) {
5
6
  this.settings = {
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/shared/lib/storage.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,aAAa;AAE7D,MAAM,OAAgB,aAAa;IACvB,QAAQ,CAAwB;IAC1C,YAAsB,WAA2C,EAAE;QACjE,IAAI,CAAC,QAAQ,GAAG;YACd,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI;YACnC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI;YAC/B,6CAA6C;YAC7C,kEAAkE;YAClE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,KAAK;YACpC,OAAO,EACL,QAAQ,CAAC,OAAO;gBAChB,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,uBAAuB,CAAC;YACvD,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,GAAG;SAC3B,CAAC;IACJ,CAAC;CAQF","sourcesContent":["import type { AuthStorage, SessionData, UnknownObject, User } from \"@/types.js\";\nimport type { CookieConfig } from \"./types.js\";\n\ntype SameSiteOption = \"strict\" | \"lax\" | \"none\";\n\nexport interface SessionStorage {\n get(): SessionData;\n getUser(): User<UnknownObject> | null;\n set(data: Partial<SessionData>): void;\n setUser(data: User<UnknownObject> | null): void;\n clear(): void;\n}\n\nexport type CookieStorageSettings = {\n httpOnly: boolean;\n secure: boolean;\n sameSite: SameSiteOption;\n expires: Date;\n path: string;\n};\n\nexport const DEFAULT_COOKIE_DURATION = 60 * 15; // 15 minutes\n\nexport abstract class CookieStorage implements AuthStorage {\n protected settings: CookieStorageSettings;\n protected constructor(settings: Partial<CookieStorageSettings> = {}) {\n this.settings = {\n httpOnly: settings.httpOnly ?? true,\n secure: settings.secure ?? true,\n // the callback request comes the auth server\n // 'lax' ensures the code_verifier cookie is sent with the request\n sameSite: settings.sameSite ?? \"lax\",\n expires:\n settings.expires ??\n new Date(Date.now() + 1000 * DEFAULT_COOKIE_DURATION),\n path: settings.path ?? \"/\",\n };\n }\n abstract get(key: string): Promise<string | null>;\n abstract set(\n key: string,\n value: string,\n cookieConfigOverride?: Partial<CookieConfig>,\n ): Promise<void>;\n abstract delete(key: string): Promise<void>;\n}\n\nexport type AuthCookieStorageSettings = {\n httpOnly: boolean;\n secure: boolean;\n sameSite: SameSiteOption;\n expires: Date;\n path: string;\n timestamp: Date;\n};\n"]}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/shared/lib/storage.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,aAAa;AAE7D,MAAM,OAAgB,aAAa;IACjC,WAAW,GAAG,QAAiB,CAAC;IACtB,QAAQ,CAAwB;IAC1C,YAAsB,WAA2C,EAAE;QACjE,IAAI,CAAC,QAAQ,GAAG;YACd,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI;YACnC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI;YAC/B,6CAA6C;YAC7C,kEAAkE;YAClE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,KAAK;YACpC,OAAO,EACL,QAAQ,CAAC,OAAO;gBAChB,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,uBAAuB,CAAC;YACvD,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,GAAG;SAC3B,CAAC;IACJ,CAAC;CAQF","sourcesContent":["import type { AuthStorage, SessionData, UnknownObject, User } from \"@/types.js\";\nimport type { CookieConfig } from \"./types.js\";\n\ntype SameSiteOption = \"strict\" | \"lax\" | \"none\";\n\nexport interface SessionStorage {\n get(): SessionData;\n getUser(): User<UnknownObject> | null;\n set(data: Partial<SessionData>): void;\n setUser(data: User<UnknownObject> | null): void;\n clear(): void;\n}\n\nexport type CookieStorageSettings = {\n httpOnly: boolean;\n secure: boolean;\n sameSite: SameSiteOption;\n expires: Date;\n path: string;\n};\n\nexport const DEFAULT_COOKIE_DURATION = 60 * 15; // 15 minutes\n\nexport abstract class CookieStorage implements AuthStorage {\n storageType = \"cookie\" as const;\n protected settings: CookieStorageSettings;\n protected constructor(settings: Partial<CookieStorageSettings> = {}) {\n this.settings = {\n httpOnly: settings.httpOnly ?? true,\n secure: settings.secure ?? true,\n // the callback request comes the auth server\n // 'lax' ensures the code_verifier cookie is sent with the request\n sameSite: settings.sameSite ?? \"lax\",\n expires:\n settings.expires ??\n new Date(Date.now() + 1000 * DEFAULT_COOKIE_DURATION),\n path: settings.path ?? \"/\",\n };\n }\n abstract get(key: string): Promise<string | null>;\n abstract set(\n key: string,\n value: string,\n cookieConfigOverride?: Partial<CookieConfig>,\n ): Promise<void>;\n abstract delete(key: string): Promise<void>;\n}\n\nexport type AuthCookieStorageSettings = {\n httpOnly: boolean;\n secure: boolean;\n sameSite: SameSiteOption;\n expires: Date;\n path: string;\n timestamp: Date;\n};\n"]}
@@ -1,16 +1,18 @@
1
1
  import type { Config, DisplayMode, IframeMode } from "../../types.js";
2
+ import type { LoggingConfig, OnSignInResponse, OnSignOutResponse } from "../../vanillajs/index.js";
2
3
  import type { ReactNode } from "react";
3
4
  export type AuthProviderProps = {
4
5
  children: ReactNode;
5
6
  clientId: string;
6
7
  nonce?: string;
7
- onSignIn?: (error?: Error) => void;
8
- onSignOut?: () => Promise<void>;
8
+ onSignIn?: (response: OnSignInResponse) => void | Promise<void>;
9
+ onSignOut?: (response: OnSignOutResponse) => void | Promise<void>;
9
10
  iframeMode?: IframeMode;
10
11
  config?: Config;
11
12
  redirectUrl?: string;
12
13
  logoutRedirectUrl?: string;
13
14
  displayMode?: DisplayMode;
14
15
  targetContainerElement?: HTMLElement | string;
16
+ logging?: LoggingConfig;
15
17
  };
16
18
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,sBAAsB,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;CAC/C,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,sBAAsB,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC9C,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/providers/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Config, DisplayMode, IframeMode } from \"@/types.js\";\nimport type { ReactNode } from \"react\";\n\nexport type AuthProviderProps = {\n children: ReactNode;\n clientId: string;\n nonce?: string;\n onSignIn?: (error?: Error) => void;\n onSignOut?: () => Promise<void>;\n iframeMode?: IframeMode;\n config?: Config;\n redirectUrl?: string;\n logoutRedirectUrl?: string;\n displayMode?: DisplayMode;\n targetContainerElement?: HTMLElement | string;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/providers/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Config, DisplayMode, IframeMode } from \"@/types.js\";\nimport type {\n LoggingConfig,\n OnSignInResponse,\n OnSignOutResponse,\n} from \"@/vanillajs/index.js\";\nimport type { ReactNode } from \"react\";\n\nexport type AuthProviderProps = {\n children: ReactNode;\n clientId: string;\n nonce?: string;\n onSignIn?: (response: OnSignInResponse) => void | Promise<void>;\n onSignOut?: (response: OnSignOutResponse) => void | Promise<void>;\n iframeMode?: IframeMode;\n config?: Config;\n redirectUrl?: string;\n logoutRedirectUrl?: string;\n displayMode?: DisplayMode;\n targetContainerElement?: HTMLElement | string;\n logging?: LoggingConfig;\n};\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "@civic/auth:0.10.0";
1
+ export declare const VERSION = "@civic/auth:0.11.0-beta.1";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/shared/version.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,uBAAuB,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/shared/version.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,8BAA8B,CAAC"}
@@ -1,3 +1,3 @@
1
1
  // This is an auto-generated file. Do not edit.
2
- export const VERSION = "@civic/auth:0.10.0";
2
+ export const VERSION = "@civic/auth:0.11.0-beta.1";
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/shared/version.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,MAAM,CAAC,MAAM,OAAO,GAAG,oBAAoB,CAAC","sourcesContent":["// This is an auto-generated file. Do not edit.\n\nexport const VERSION = \"@civic/auth:0.10.0\";\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/shared/version.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,MAAM,CAAC,MAAM,OAAO,GAAG,2BAA2B,CAAC","sourcesContent":["// This is an auto-generated file. Do not edit.\n\nexport const VERSION = \"@civic/auth:0.11.0-beta.1\";\n"]}