@atzentis/auth-react 0.0.11 → 0.0.12

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.
package/dist/index.d.ts CHANGED
@@ -1,34 +1,56 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as react from 'react';
3
3
  import * as _atzentis_auth_sdk from '@atzentis/auth-sdk';
4
- import { AuthClient, User, AuthConfig, LoginCredentials, SignupData } from '@atzentis/auth-sdk';
4
+ import { AuthClient, User, Session, AuthError, LoginAlert, ITokenStorage, LoginCredentials, SignupData } from '@atzentis/auth-sdk';
5
5
 
6
+ interface AuthProviderProps {
7
+ apiKey?: string;
8
+ baseUrl: string;
9
+ autoRefreshToken?: boolean;
10
+ refreshThreshold?: number;
11
+ timeout?: number;
12
+ collectDeviceSignals?: boolean;
13
+ onSessionExpired?: () => void;
14
+ onTokenRefreshed?: (token: string) => void;
15
+ onNewDeviceAlert?: (alert: LoginAlert) => void;
16
+ children: React.ReactNode;
17
+ initialToken?: string;
18
+ initialUser?: User;
19
+ storage?: ITokenStorage;
20
+ }
6
21
  interface AuthContextValue {
7
22
  client: AuthClient;
8
23
  user: User | null;
24
+ session: Session | null;
9
25
  isAuthenticated: boolean;
10
26
  isLoading: boolean;
27
+ error: AuthError | null;
11
28
  setUser: (user: User | null) => void;
29
+ setSession: (session: Session | null) => void;
30
+ setError: (error: AuthError | null) => void;
31
+ clearError: () => void;
12
32
  }
33
+
13
34
  declare const AuthContext: react.Context<AuthContextValue | null>;
14
- interface AuthProviderProps {
15
- config: AuthConfig;
16
- children: React.ReactNode;
17
- }
18
- declare function AuthProvider({ config, children }: AuthProviderProps): react_jsx_runtime.JSX.Element;
35
+ declare function AuthProvider({ apiKey, baseUrl, autoRefreshToken, refreshThreshold, timeout, collectDeviceSignals, onSessionExpired, onTokenRefreshed, onNewDeviceAlert, children, initialUser, storage, }: AuthProviderProps): react_jsx_runtime.JSX.Element;
19
36
 
20
37
  declare function useAuth(): {
21
38
  user: _atzentis_auth_sdk.User | null;
22
39
  isAuthenticated: boolean;
23
40
  isLoading: boolean;
41
+ error: _atzentis_auth_sdk.AuthError | null;
24
42
  login: (credentials: LoginCredentials) => Promise<_atzentis_auth_sdk.LoginResponse>;
25
43
  signup: (data: SignupData) => Promise<_atzentis_auth_sdk.SignupResponse>;
44
+ clearError: () => void;
26
45
  };
27
46
 
47
+ declare function useAuthContext(): AuthContextValue;
48
+
28
49
  declare function useSession(): {
29
50
  user: _atzentis_auth_sdk.User | null;
51
+ session: _atzentis_auth_sdk.Session | null;
30
52
  isAuthenticated: boolean;
31
53
  isLoading: boolean;
32
54
  };
33
55
 
34
- export { AuthContext, type AuthContextValue, AuthProvider, useAuth, useSession };
56
+ export { AuthContext, type AuthContextValue, AuthProvider, type AuthProviderProps, useAuth, useAuthContext, useSession };
package/dist/index.js CHANGED
@@ -1,30 +1,76 @@
1
1
  import { AuthClient } from '@atzentis/auth-sdk';
2
- import { createContext, useState, useMemo, useContext, useCallback } from 'react';
2
+ import { createContext, useState, useCallback, useMemo, useContext } from 'react';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
 
5
5
  var AuthContext = createContext(null);
6
- function AuthProvider({ config, children }) {
7
- const [client] = useState(() => new AuthClient(config));
8
- const [user, setUser] = useState(null);
6
+ function AuthProvider({
7
+ apiKey,
8
+ baseUrl,
9
+ autoRefreshToken,
10
+ refreshThreshold,
11
+ timeout,
12
+ collectDeviceSignals,
13
+ onSessionExpired,
14
+ onTokenRefreshed,
15
+ onNewDeviceAlert,
16
+ children,
17
+ initialUser,
18
+ storage
19
+ }) {
20
+ const [client] = useState(() => {
21
+ const handleSessionExpired = () => {
22
+ setUser(null);
23
+ setSession(null);
24
+ onSessionExpired?.();
25
+ };
26
+ return new AuthClient({
27
+ apiKey,
28
+ baseUrl,
29
+ timeout,
30
+ autoRefreshToken,
31
+ refreshThreshold,
32
+ collectDeviceSignals,
33
+ onSessionExpired: handleSessionExpired,
34
+ onTokenRefreshed,
35
+ onNewDeviceAlert,
36
+ storage
37
+ });
38
+ });
39
+ const [user, setUser] = useState(initialUser ?? null);
40
+ const [session, setSession] = useState(null);
9
41
  const [isLoading] = useState(false);
42
+ const [error, setError] = useState(null);
43
+ const clearError = useCallback(() => {
44
+ setError(null);
45
+ }, []);
10
46
  const value = useMemo(
11
47
  () => ({
12
48
  client,
13
49
  user,
50
+ session,
14
51
  isAuthenticated: user !== null,
15
52
  isLoading,
16
- setUser
53
+ error,
54
+ setUser,
55
+ setSession,
56
+ setError,
57
+ clearError
17
58
  }),
18
- [client, user, isLoading]
59
+ [client, user, session, isLoading, error, clearError]
19
60
  );
20
61
  return /* @__PURE__ */ jsx(AuthContext.Provider, { value, children });
21
62
  }
22
- function useAuth() {
63
+ function useAuthContext() {
23
64
  const context = useContext(AuthContext);
24
65
  if (!context) {
25
- throw new Error("useAuth must be used within AuthProvider");
66
+ throw new Error("useAuthContext must be used within AuthProvider");
26
67
  }
27
- const { client, user, isAuthenticated, isLoading, setUser } = context;
68
+ return context;
69
+ }
70
+
71
+ // src/use-auth.ts
72
+ function useAuth() {
73
+ const { client, user, isAuthenticated, isLoading, error, setUser, clearError } = useAuthContext();
28
74
  const login = useCallback(
29
75
  async (credentials) => {
30
76
  const response = await client.login(credentials);
@@ -45,22 +91,24 @@ function useAuth() {
45
91
  user,
46
92
  isAuthenticated,
47
93
  isLoading,
94
+ error,
48
95
  login,
49
- signup
96
+ signup,
97
+ clearError
50
98
  };
51
99
  }
100
+
101
+ // src/use-session.ts
52
102
  function useSession() {
53
- const context = useContext(AuthContext);
54
- if (!context) {
55
- throw new Error("useSession must be used within AuthProvider");
56
- }
103
+ const { user, session, isAuthenticated, isLoading } = useAuthContext();
57
104
  return {
58
- user: context.user,
59
- isAuthenticated: context.isAuthenticated,
60
- isLoading: context.isLoading
105
+ user,
106
+ session,
107
+ isAuthenticated,
108
+ isLoading
61
109
  };
62
110
  }
63
111
 
64
- export { AuthContext, AuthProvider, useAuth, useSession };
112
+ export { AuthContext, AuthProvider, useAuth, useAuthContext, useSession };
65
113
  //# sourceMappingURL=index.js.map
66
114
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/provider.tsx","../src/use-auth.ts","../src/use-session.ts"],"names":["useContext"],"mappings":";;;;AAYO,IAAM,WAAA,GAAc,cAAuC,IAAI;AAO/D,SAAS,YAAA,CAAa,EAAE,MAAA,EAAQ,QAAA,EAAS,EAAsB;AACpE,EAAA,MAAM,CAAC,MAAM,CAAA,GAAI,QAAA,CAAS,MAAM,IAAI,UAAA,CAAW,MAAM,CAAC,CAAA;AACtD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAsB,IAAI,CAAA;AAClD,EAAA,MAAM,CAAC,SAAS,CAAA,GAAI,QAAA,CAAS,KAAK,CAAA;AAElC,EAAA,MAAM,KAAA,GAA0B,OAAA;AAAA,IAC9B,OAAO;AAAA,MACL,MAAA;AAAA,MACA,IAAA;AAAA,MACA,iBAAiB,IAAA,KAAS,IAAA;AAAA,MAC1B,SAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,IAAA,EAAM,SAAS;AAAA,GAC1B;AAEA,EAAA,uBAAO,GAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,OAAe,QAAA,EAAS,CAAA;AACvD;AChCO,SAAS,OAAA,GAAU;AACxB,EAAA,MAAM,OAAA,GAAU,WAAW,WAAW,CAAA;AAEtC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AAEA,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,eAAA,EAAiB,SAAA,EAAW,SAAQ,GAAI,OAAA;AAE9D,EAAA,MAAM,KAAA,GAAQ,WAAA;AAAA,IACZ,OAAO,WAAA,KAAkC;AACvC,MAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,KAAA,CAAM,WAAW,CAAA;AAC/C,MAAA,OAAA,CAAQ,SAAS,IAAI,CAAA;AACrB,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,QAAQ,OAAO;AAAA,GAClB;AAEA,EAAA,MAAM,MAAA,GAAS,WAAA;AAAA,IACb,OAAO,IAAA,KAAqB;AAC1B,MAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AACzC,MAAA,OAAA,CAAQ,SAAS,IAAI,CAAA;AACrB,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,QAAQ,OAAO;AAAA,GAClB;AAEA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF;ACnCO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,OAAA,GAAUA,WAAW,WAAW,CAAA;AAEtC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,EAC/D;AAEA,EAAA,OAAO;AAAA,IACL,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,iBAAiB,OAAA,CAAQ,eAAA;AAAA,IACzB,WAAW,OAAA,CAAQ;AAAA,GACrB;AACF","file":"index.js","sourcesContent":["import type { AuthConfig, User } from \"@atzentis/auth-sdk\";\nimport { AuthClient } from \"@atzentis/auth-sdk\";\nimport { createContext, useMemo, useState } from \"react\";\n\nexport interface AuthContextValue {\n client: AuthClient;\n user: User | null;\n isAuthenticated: boolean;\n isLoading: boolean;\n setUser: (user: User | null) => void;\n}\n\nexport const AuthContext = createContext<AuthContextValue | null>(null);\n\ninterface AuthProviderProps {\n config: AuthConfig;\n children: React.ReactNode;\n}\n\nexport function AuthProvider({ config, children }: AuthProviderProps) {\n const [client] = useState(() => new AuthClient(config));\n const [user, setUser] = useState<User | null>(null);\n const [isLoading] = useState(false);\n\n const value: AuthContextValue = useMemo(\n () => ({\n client,\n user,\n isAuthenticated: user !== null,\n isLoading,\n setUser,\n }),\n [client, user, isLoading],\n );\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n","import type { LoginCredentials, SignupData } from \"@atzentis/auth-sdk\";\nimport { useCallback, useContext } from \"react\";\nimport { AuthContext } from \"./provider\";\n\nexport function useAuth() {\n const context = useContext(AuthContext);\n\n if (!context) {\n throw new Error(\"useAuth must be used within AuthProvider\");\n }\n\n const { client, user, isAuthenticated, isLoading, setUser } = context;\n\n const login = useCallback(\n async (credentials: LoginCredentials) => {\n const response = await client.login(credentials);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n const signup = useCallback(\n async (data: SignupData) => {\n const response = await client.signup(data);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n return {\n user,\n isAuthenticated,\n isLoading,\n login,\n signup,\n };\n}\n","import { useContext } from \"react\";\nimport { AuthContext } from \"./provider\";\n\nexport function useSession() {\n const context = useContext(AuthContext);\n\n if (!context) {\n throw new Error(\"useSession must be used within AuthProvider\");\n }\n\n return {\n user: context.user,\n isAuthenticated: context.isAuthenticated,\n isLoading: context.isLoading,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/provider.tsx","../src/use-auth-context.ts","../src/use-auth.ts","../src/use-session.ts"],"names":["useCallback"],"mappings":"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","file":"index.js","sourcesContent":["// AuthProvider — React context provider for @atzentis/auth-react\n\nimport type { AuthError, User } from \"@atzentis/auth-sdk\";\nimport { AuthClient } from \"@atzentis/auth-sdk\";\nimport type { Session } from \"@atzentis/auth-sdk\";\nimport { createContext, useCallback, useMemo, useState } from \"react\";\nimport type { AuthContextValue, AuthProviderProps } from \"./types\";\n\nexport const AuthContext = createContext<AuthContextValue | null>(null);\n\nexport function AuthProvider({\n apiKey,\n baseUrl,\n autoRefreshToken,\n refreshThreshold,\n timeout,\n collectDeviceSignals,\n onSessionExpired,\n onTokenRefreshed,\n onNewDeviceAlert,\n children,\n initialUser,\n storage,\n}: AuthProviderProps) {\n const [client] = useState(() => {\n const handleSessionExpired = () => {\n setUser(null);\n setSession(null);\n onSessionExpired?.();\n };\n\n return new AuthClient({\n apiKey,\n baseUrl,\n timeout,\n autoRefreshToken,\n refreshThreshold,\n collectDeviceSignals,\n onSessionExpired: handleSessionExpired,\n onTokenRefreshed,\n onNewDeviceAlert,\n storage,\n });\n });\n\n const [user, setUser] = useState<User | null>(initialUser ?? null);\n const [session, setSession] = useState<Session | null>(null);\n const [isLoading] = useState(false);\n const [error, setError] = useState<AuthError | null>(null);\n\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n const value: AuthContextValue = useMemo(\n () => ({\n client,\n user,\n session,\n isAuthenticated: user !== null,\n isLoading,\n error,\n setUser,\n setSession,\n setError,\n clearError,\n }),\n [client, user, session, isLoading, error, clearError],\n );\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n","// Internal hook to access auth context with error boundary\n\nimport { useContext } from \"react\";\nimport { AuthContext } from \"./provider\";\nimport type { AuthContextValue } from \"./types\";\n\nexport function useAuthContext(): AuthContextValue {\n const context = useContext(AuthContext);\n\n if (!context) {\n throw new Error(\"useAuthContext must be used within AuthProvider\");\n }\n\n return context;\n}\n","// useAuth hook — auth state and methods\n\nimport type { LoginCredentials, SignupData } from \"@atzentis/auth-sdk\";\nimport { useCallback } from \"react\";\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useAuth() {\n const { client, user, isAuthenticated, isLoading, error, setUser, clearError } = useAuthContext();\n\n const login = useCallback(\n async (credentials: LoginCredentials) => {\n const response = await client.login(credentials);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n const signup = useCallback(\n async (data: SignupData) => {\n const response = await client.signup(data);\n setUser(response.user);\n return response;\n },\n [client, setUser],\n );\n\n return {\n user,\n isAuthenticated,\n isLoading,\n error,\n login,\n signup,\n clearError,\n };\n}\n","// useSession hook current session state\n\nimport { useAuthContext } from \"./use-auth-context\";\n\nexport function useSession() {\n const { user, session, isAuthenticated, isLoading } = useAuthContext();\n\n return {\n user,\n session,\n isAuthenticated,\n isLoading,\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atzentis/auth-react",
3
- "version": "0.0.11",
3
+ "version": "0.0.12",
4
4
  "description": "Atzentis Auth React — hooks and components for auth.atzentis.com",
5
5
  "keywords": [
6
6
  "atzentis",
@@ -34,13 +34,14 @@
34
34
  "LICENSE"
35
35
  ],
36
36
  "dependencies": {
37
- "@atzentis/auth-sdk": "0.0.11"
37
+ "@atzentis/auth-sdk": "0.0.12"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "react": ">=18.0.0",
41
41
  "react-dom": ">=18.0.0"
42
42
  },
43
43
  "devDependencies": {
44
+ "@testing-library/react": "^16.3.2",
44
45
  "@types/react": "^19.0.0",
45
46
  "jsdom": "^28.0.0",
46
47
  "react": "^19.0.0",