@ackplus/nest-auth-react 1.1.8 → 1.1.29

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 (71) hide show
  1. package/README.md +58 -4
  2. package/dist/context/auth-context.d.ts +21 -0
  3. package/dist/context/auth-context.js +23 -0
  4. package/dist/context/auth-context.js.map +1 -0
  5. package/dist/context/auth-provider.d.ts +16 -0
  6. package/dist/context/auth-provider.js +200 -0
  7. package/dist/context/auth-provider.js.map +1 -0
  8. package/dist/guards/auth-guard.d.ts +8 -0
  9. package/dist/guards/auth-guard.js +21 -0
  10. package/dist/guards/auth-guard.js.map +1 -0
  11. package/dist/guards/guest-guard.d.ts +8 -0
  12. package/dist/guards/guest-guard.js +21 -0
  13. package/dist/guards/guest-guard.js.map +1 -0
  14. package/dist/guards/require-permission.d.ts +10 -0
  15. package/dist/guards/require-permission.js +24 -0
  16. package/dist/guards/require-permission.js.map +1 -0
  17. package/dist/guards/require-role.d.ts +10 -0
  18. package/dist/guards/require-role.js +24 -0
  19. package/dist/guards/require-role.js.map +1 -0
  20. package/dist/hooks/use-access-token.d.ts +1 -0
  21. package/dist/hooks/use-access-token.js +21 -0
  22. package/dist/hooks/use-access-token.js.map +1 -0
  23. package/dist/hooks/use-auth-status.d.ts +8 -0
  24. package/dist/hooks/use-auth-status.js +12 -0
  25. package/dist/hooks/use-auth-status.js.map +1 -0
  26. package/dist/hooks/use-auth.d.ts +2 -0
  27. package/dist/hooks/use-auth.js +10 -0
  28. package/dist/hooks/use-auth.js.map +1 -0
  29. package/dist/hooks/use-has-role.d.ts +2 -0
  30. package/dist/hooks/use-has-role.js +16 -0
  31. package/dist/hooks/use-has-role.js.map +1 -0
  32. package/dist/hooks/use-session.d.ts +2 -0
  33. package/dist/hooks/use-session.js +7 -0
  34. package/dist/hooks/use-session.js.map +1 -0
  35. package/dist/hooks/use-user.d.ts +2 -0
  36. package/dist/hooks/use-user.js +7 -0
  37. package/dist/hooks/use-user.js.map +1 -0
  38. package/dist/index.d.ts +18 -0
  39. package/dist/index.js +18 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/next/create-next-auth-helpers.d.ts +20 -0
  42. package/dist/next/create-next-auth-helpers.js +88 -0
  43. package/dist/next/create-next-auth-helpers.js.map +1 -0
  44. package/dist/next/next-auth-provider.d.ts +10 -0
  45. package/dist/next/next-auth-provider.js +17 -0
  46. package/dist/next/next-auth-provider.js.map +1 -0
  47. package/dist/sync/cross-tab-sync.d.ts +24 -0
  48. package/dist/sync/cross-tab-sync.js +109 -0
  49. package/dist/sync/cross-tab-sync.js.map +1 -0
  50. package/package.json +43 -30
  51. package/client/create-client.d.ts +0 -63
  52. package/client/create-client.d.ts.map +0 -1
  53. package/context/auth-context.d.ts +0 -50
  54. package/context/auth-context.d.ts.map +0 -1
  55. package/context/mfa-service-context.d.ts +0 -5
  56. package/context/mfa-service-context.d.ts.map +0 -1
  57. package/hooks/use-auth.d.ts +0 -50
  58. package/hooks/use-auth.d.ts.map +0 -1
  59. package/hooks/use-mfa.d.ts +0 -23
  60. package/hooks/use-mfa.d.ts.map +0 -1
  61. package/index.cjs +0 -6
  62. package/index.d.ts +0 -13
  63. package/index.js +0 -2779
  64. package/provider/nest-auth-provider.d.ts +0 -15
  65. package/provider/nest-auth-provider.d.ts.map +0 -1
  66. package/storage/token-storage.d.ts +0 -3
  67. package/storage/token-storage.d.ts.map +0 -1
  68. package/utils/errors.d.ts +0 -6
  69. package/utils/errors.d.ts.map +0 -1
  70. package/utils/request.d.ts +0 -10
  71. package/utils/request.d.ts.map +0 -1
package/README.md CHANGED
@@ -1,7 +1,61 @@
1
- # @packages/nest-auth-react
1
+ # @ackplus/nest-auth-react
2
2
 
3
- This library was generated with [Nx](https://nx.dev).
3
+ React SDK for `@ackplus/nest-auth`. Provides hooks and components for easy authentication integration in React applications.
4
4
 
5
- ## Running unit tests
5
+ > **Note:** This package is designed to work with the `@ackplus/nest-auth` backend module. Make sure your API is set up with it.
6
6
 
7
- Run `nx test @packages/nest-auth-react` to execute the unit tests via [Vitest](https://vitest.dev/).
7
+ ## Features
8
+
9
+ - 🪝 **useAuth Hook** - Easy access to user, login, logout, and token state.
10
+ - 🔒 **Protected Routes** - Helper components for auth guarding.
11
+ - 🔄 **Auto Refresh** - Handles token refresh automatically (coming soon).
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ npm install @ackplus/nest-auth-react
17
+ # or
18
+ pnpm add @ackplus/nest-auth-react
19
+ ```
20
+
21
+ ## Quick Start
22
+
23
+ 1. Wrap your app in `AuthProvider`:
24
+
25
+ ```tsx
26
+ import { AuthProvider } from '@ackplus/nest-auth-react';
27
+
28
+ function App() {
29
+ return (
30
+ <AuthProvider config={{ apiUrl: 'http://localhost:3000' }}>
31
+ <YourApp />
32
+ </AuthProvider>
33
+ );
34
+ }
35
+ ```
36
+
37
+ 2. Use hooks in your components:
38
+
39
+ ```tsx
40
+ import { useAuth } from '@ackplus/nest-auth-react';
41
+
42
+ function UserProfile() {
43
+ const { user, login, logout } = useAuth();
44
+
45
+ if (!user) {
46
+ return <button onClick={() => login(credentials)}>Login</button>;
47
+ }
48
+
49
+ return (
50
+ <div>
51
+ <h1>Welcome, {{user.firstName}}</h1>
52
+ <button onClick={logout}>Logout</button>
53
+ </div>
54
+ );
55
+ }
56
+ ```
57
+
58
+ ## Related Packages
59
+
60
+ - [@ackplus/nest-auth](../nest-auth) - The backend NestJS module.
61
+ - [@ackplus/nest-auth-client](../nest-auth-client) - The underlying JS client.
@@ -0,0 +1,21 @@
1
+ import { AuthClient, IAuthUser, ClientSession, AuthError, AuthStatus, ILoginRequest, ISignupRequest, ITokenPair, IAuthResponse, IVerify2faRequest, IVerify2faResponse } from '@ackplus/nest-auth-client';
2
+ export interface AuthContextValue {
3
+ status: AuthStatus;
4
+ user: IAuthUser | null;
5
+ session: ClientSession | null;
6
+ error: AuthError | null;
7
+ isLoading: boolean;
8
+ isAuthenticated: boolean;
9
+ client: AuthClient;
10
+ login: (dto: ILoginRequest) => Promise<IAuthResponse>;
11
+ signup: (dto: ISignupRequest) => Promise<IAuthResponse>;
12
+ logout: () => Promise<void>;
13
+ refresh: () => Promise<ITokenPair>;
14
+ verifySession: () => Promise<boolean>;
15
+ verify2fa: (dto: IVerify2faRequest) => Promise<IVerify2faResponse>;
16
+ setMode: (mode: 'header' | 'cookie') => void;
17
+ getMode: () => 'header' | 'cookie';
18
+ setTenantId: (id: string) => void;
19
+ getTenantId: () => string | undefined;
20
+ }
21
+ export declare const AuthContext: import("react").Context<AuthContextValue>;
@@ -0,0 +1,23 @@
1
+ import { createContext } from 'react';
2
+ const defaultContextValue = {
3
+ status: 'loading',
4
+ user: null,
5
+ session: null,
6
+ error: null,
7
+ isLoading: true,
8
+ isAuthenticated: false,
9
+ client: null,
10
+ login: () => Promise.reject(new Error('AuthProvider not found')),
11
+ signup: () => Promise.reject(new Error('AuthProvider not found')),
12
+ logout: () => Promise.reject(new Error('AuthProvider not found')),
13
+ refresh: () => Promise.reject(new Error('AuthProvider not found')),
14
+ verifySession: () => Promise.reject(new Error('AuthProvider not found')),
15
+ verify2fa: () => Promise.reject(new Error('AuthProvider not found')),
16
+ setMode: () => { throw new Error('AuthProvider not found'); },
17
+ getMode: () => 'header',
18
+ setTenantId: () => { throw new Error('AuthProvider not found'); },
19
+ getTenantId: () => undefined,
20
+ };
21
+ export const AuthContext = createContext(defaultContextValue);
22
+ AuthContext.displayName = 'AuthContext';
23
+ //# sourceMappingURL=auth-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-context.js","sourceRoot":"","sources":["../../src/context/auth-context.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AA8DtC,MAAM,mBAAmB,GAAqB;IAC1C,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,IAAI;IACf,eAAe,EAAE,KAAK;IACtB,MAAM,EAAE,IAAW;IACnB,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAChE,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACjE,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACjE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAClE,aAAa,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACxE,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACpE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ;IACvB,WAAW,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;IACjE,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS;CAC/B,CAAC;AAKF,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAmB,mBAAmB,CAAC,CAAC;AAEhF,WAAW,CAAC,WAAW,GAAG,aAAa,CAAC"}
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { AuthClient, IAuthUser, ClientSession, AuthStatus } from '@ackplus/nest-auth-client';
3
+ import { AuthContextValue } from './auth-context';
4
+ export interface InitialAuthState {
5
+ user?: IAuthUser | null;
6
+ session?: ClientSession | null;
7
+ status?: AuthStatus;
8
+ }
9
+ export interface AuthProviderProps {
10
+ client: AuthClient;
11
+ initialState?: InitialAuthState;
12
+ autoLoadMe?: boolean;
13
+ onUnauthenticated?: () => void;
14
+ children: React.ReactNode;
15
+ }
16
+ export declare function AuthProvider({ client, initialState, autoLoadMe, onUnauthenticated, children, }: AuthProviderProps): React.FunctionComponentElement<React.ProviderProps<AuthContextValue>>;
@@ -0,0 +1,200 @@
1
+ import React, { useState, useEffect, useCallback, useMemo, useRef } from 'react';
2
+ import { AuthContext } from './auth-context';
3
+ export function AuthProvider({ client, initialState, autoLoadMe = true, onUnauthenticated, children, }) {
4
+ const [status, setStatus] = useState(() => {
5
+ if (initialState?.status)
6
+ return initialState.status;
7
+ if (initialState?.user)
8
+ return 'authenticated';
9
+ if (client.getUser())
10
+ return 'authenticated';
11
+ return 'loading';
12
+ });
13
+ const [user, setUser] = useState(() => {
14
+ return initialState?.user ?? client.getUser();
15
+ });
16
+ const [session, setSession] = useState(() => {
17
+ return initialState?.session ?? client.getSession();
18
+ });
19
+ const [error, setError] = useState(null);
20
+ const initialLoadRef = useRef(false);
21
+ const onUnauthenticatedRef = useRef(onUnauthenticated);
22
+ onUnauthenticatedRef.current = onUnauthenticated;
23
+ useEffect(() => {
24
+ const unsubscribeAuthState = client.onAuthStateChange((newUser) => {
25
+ setUser(newUser);
26
+ setStatus(newUser ? 'authenticated' : 'unauthenticated');
27
+ if (!newUser && initialLoadRef.current) {
28
+ onUnauthenticatedRef.current?.();
29
+ }
30
+ });
31
+ const unsubscribeError = client.onError((err) => {
32
+ setError(err);
33
+ });
34
+ return () => {
35
+ unsubscribeAuthState();
36
+ unsubscribeError();
37
+ };
38
+ }, [client]);
39
+ useEffect(() => {
40
+ if (!autoLoadMe || initialLoadRef.current)
41
+ return;
42
+ if (initialState?.user !== undefined) {
43
+ initialLoadRef.current = true;
44
+ if (!initialState.user) {
45
+ setStatus('unauthenticated');
46
+ }
47
+ return;
48
+ }
49
+ const loadUser = async () => {
50
+ try {
51
+ await client.verifySession();
52
+ setUser(client.getUser());
53
+ setSession(client.getSession());
54
+ setStatus('authenticated');
55
+ }
56
+ catch {
57
+ setUser(null);
58
+ setSession(null);
59
+ setStatus('unauthenticated');
60
+ }
61
+ finally {
62
+ initialLoadRef.current = true;
63
+ }
64
+ };
65
+ loadUser();
66
+ }, [client, autoLoadMe, initialState]);
67
+ const login = useCallback(async (dto) => {
68
+ setError(null);
69
+ try {
70
+ const response = await client.login(dto);
71
+ if (!response.isRequiresMfa) {
72
+ setUser(client.getUser());
73
+ setSession(client.getSession());
74
+ setStatus('authenticated');
75
+ }
76
+ return response;
77
+ }
78
+ catch (err) {
79
+ setError(err);
80
+ throw err;
81
+ }
82
+ }, [client]);
83
+ const signup = useCallback(async (dto) => {
84
+ setError(null);
85
+ try {
86
+ const response = await client.signup(dto);
87
+ setUser(client.getUser());
88
+ setSession(client.getSession());
89
+ setStatus('authenticated');
90
+ return response;
91
+ }
92
+ catch (err) {
93
+ setError(err);
94
+ throw err;
95
+ }
96
+ }, [client]);
97
+ const logout = useCallback(async () => {
98
+ setError(null);
99
+ try {
100
+ await client.logout();
101
+ setUser(null);
102
+ setSession(null);
103
+ setStatus('unauthenticated');
104
+ }
105
+ catch (err) {
106
+ setUser(null);
107
+ setSession(null);
108
+ setStatus('unauthenticated');
109
+ }
110
+ }, [client]);
111
+ const refresh = useCallback(async () => {
112
+ setError(null);
113
+ try {
114
+ const tokens = await client.refresh();
115
+ setSession(client.getSession());
116
+ return tokens;
117
+ }
118
+ catch (err) {
119
+ setError(err);
120
+ throw err;
121
+ }
122
+ }, [client]);
123
+ const verifySession = useCallback(async () => {
124
+ setError(null);
125
+ try {
126
+ await client.verifySession();
127
+ setUser(client.getUser());
128
+ setSession(client.getSession());
129
+ setStatus('authenticated');
130
+ return true;
131
+ }
132
+ catch (err) {
133
+ setError(err);
134
+ throw err;
135
+ }
136
+ }, [client]);
137
+ const verify2fa = useCallback(async (dto) => {
138
+ setError(null);
139
+ try {
140
+ const response = await client.verify2fa(dto);
141
+ setUser(client.getUser());
142
+ setSession(client.getSession());
143
+ setStatus('authenticated');
144
+ return response;
145
+ }
146
+ catch (err) {
147
+ setError(err);
148
+ throw err;
149
+ }
150
+ }, [client]);
151
+ const setMode = useCallback((mode) => {
152
+ client.setMode(mode);
153
+ }, [client]);
154
+ const getMode = useCallback(() => {
155
+ return client.getMode();
156
+ }, [client]);
157
+ const setTenantId = useCallback((id) => {
158
+ client.setTenantId(id);
159
+ }, [client]);
160
+ const getTenantId = useCallback(() => {
161
+ return client.getTenantId();
162
+ }, [client]);
163
+ const contextValue = useMemo(() => ({
164
+ status,
165
+ user,
166
+ session,
167
+ error,
168
+ isLoading: status === 'loading',
169
+ isAuthenticated: status === 'authenticated' && user !== null,
170
+ client,
171
+ login,
172
+ signup,
173
+ logout,
174
+ refresh,
175
+ verifySession,
176
+ verify2fa,
177
+ setMode,
178
+ getMode,
179
+ setTenantId,
180
+ getTenantId,
181
+ }), [
182
+ status,
183
+ user,
184
+ session,
185
+ error,
186
+ client,
187
+ login,
188
+ signup,
189
+ logout,
190
+ refresh,
191
+ verifySession,
192
+ verify2fa,
193
+ setMode,
194
+ getMode,
195
+ setTenantId,
196
+ getTenantId,
197
+ ]);
198
+ return React.createElement(AuthContext.Provider, { value: contextValue }, children);
199
+ }
200
+ //# sourceMappingURL=auth-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-provider.js","sourceRoot":"","sources":["../../src/context/auth-provider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export interface AuthGuardProps {
3
+ children: React.ReactNode;
4
+ loadingFallback?: React.ReactNode;
5
+ fallback?: React.ReactNode;
6
+ onUnauthenticated?: () => void;
7
+ }
8
+ export declare function AuthGuard({ children, loadingFallback, fallback, onUnauthenticated, }: AuthGuardProps): React.ReactElement | null;
@@ -0,0 +1,21 @@
1
+ import React, { useEffect } from 'react';
2
+ import { useAuthStatus } from '../hooks/use-auth-status';
3
+ export function AuthGuard({ children, loadingFallback = null, fallback = null, onUnauthenticated, }) {
4
+ const { isLoading, isAuthenticated } = useAuthStatus();
5
+ useEffect(() => {
6
+ if (!isLoading && !isAuthenticated && onUnauthenticated) {
7
+ onUnauthenticated();
8
+ }
9
+ }, [isLoading, isAuthenticated, onUnauthenticated]);
10
+ if (isLoading) {
11
+ return React.createElement(React.Fragment, null, loadingFallback);
12
+ }
13
+ if (!isAuthenticated) {
14
+ if (onUnauthenticated) {
15
+ return React.createElement(React.Fragment, null, loadingFallback);
16
+ }
17
+ return React.createElement(React.Fragment, null, fallback);
18
+ }
19
+ return React.createElement(React.Fragment, null, children);
20
+ }
21
+ //# sourceMappingURL=auth-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-guard.js","sourceRoot":"","sources":["../../src/guards/auth-guard.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AA+CzD,MAAM,UAAU,SAAS,CAAC,EACtB,QAAQ,EACR,eAAe,GAAG,IAAI,EACtB,QAAQ,GAAG,IAAI,EACf,iBAAiB,GACJ;IACb,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,IAAI,iBAAiB,EAAE,CAAC;YACtD,iBAAiB,EAAE,CAAC;QACxB,CAAC;IACL,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAGpD,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC;IAGD,IAAI,CAAC,eAAe,EAAE,CAAC;QAEnB,IAAI,iBAAiB,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;QACtE,CAAC;QAGD,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAGD,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export interface GuestGuardProps {
3
+ children: React.ReactNode;
4
+ loadingFallback?: React.ReactNode;
5
+ fallback?: React.ReactNode;
6
+ onAuthenticated?: () => void;
7
+ }
8
+ export declare function GuestGuard({ children, loadingFallback, fallback, onAuthenticated, }: GuestGuardProps): React.ReactElement | null;
@@ -0,0 +1,21 @@
1
+ import React, { useEffect } from 'react';
2
+ import { useAuthStatus } from '../hooks/use-auth-status';
3
+ export function GuestGuard({ children, loadingFallback = null, fallback = null, onAuthenticated, }) {
4
+ const { isLoading, isAuthenticated } = useAuthStatus();
5
+ useEffect(() => {
6
+ if (!isLoading && isAuthenticated && onAuthenticated) {
7
+ onAuthenticated();
8
+ }
9
+ }, [isLoading, isAuthenticated, onAuthenticated]);
10
+ if (isLoading) {
11
+ return React.createElement(React.Fragment, null, loadingFallback);
12
+ }
13
+ if (isAuthenticated) {
14
+ if (onAuthenticated) {
15
+ return React.createElement(React.Fragment, null, loadingFallback);
16
+ }
17
+ return React.createElement(React.Fragment, null, fallback);
18
+ }
19
+ return React.createElement(React.Fragment, null, children);
20
+ }
21
+ //# sourceMappingURL=guest-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guest-guard.js","sourceRoot":"","sources":["../../src/guards/guest-guard.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAuCzD,MAAM,UAAU,UAAU,CAAC,EACvB,QAAQ,EACR,eAAe,GAAG,IAAI,EACtB,QAAQ,GAAG,IAAI,EACf,eAAe,GACD;IACd,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,SAAS,IAAI,eAAe,IAAI,eAAe,EAAE,CAAC;YACnD,eAAe,EAAE,CAAC;QACtB,CAAC;IACL,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;IAGlD,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC;IAGD,IAAI,eAAe,EAAE,CAAC;QAElB,IAAI,eAAe,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAGD,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ export interface RequirePermissionProps {
3
+ children: React.ReactNode;
4
+ permission: string | string[];
5
+ matchAll?: boolean;
6
+ loadingFallback?: React.ReactNode;
7
+ fallback?: React.ReactNode;
8
+ onAccessDenied?: () => void;
9
+ }
10
+ export declare function RequirePermission({ children, permission, matchAll, loadingFallback, fallback, onAccessDenied, }: RequirePermissionProps): React.ReactElement | null;
@@ -0,0 +1,24 @@
1
+ import React, { useEffect } from 'react';
2
+ import { useAuthStatus } from '../hooks/use-auth-status';
3
+ import { useHasPermission } from '../hooks/use-has-role';
4
+ export function RequirePermission({ children, permission, matchAll = false, loadingFallback = null, fallback = null, onAccessDenied, }) {
5
+ const { isLoading, isAuthenticated } = useAuthStatus();
6
+ const hasRequiredPermission = useHasPermission(permission, matchAll);
7
+ const accessDenied = !isAuthenticated || !hasRequiredPermission;
8
+ useEffect(() => {
9
+ if (!isLoading && accessDenied && onAccessDenied) {
10
+ onAccessDenied();
11
+ }
12
+ }, [isLoading, accessDenied, onAccessDenied]);
13
+ if (isLoading) {
14
+ return React.createElement(React.Fragment, null, loadingFallback);
15
+ }
16
+ if (accessDenied) {
17
+ if (onAccessDenied) {
18
+ return React.createElement(React.Fragment, null, loadingFallback);
19
+ }
20
+ return React.createElement(React.Fragment, null, fallback);
21
+ }
22
+ return React.createElement(React.Fragment, null, children);
23
+ }
24
+ //# sourceMappingURL=require-permission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-permission.js","sourceRoot":"","sources":["../../src/guards/require-permission.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAgDzD,MAAM,UAAU,iBAAiB,CAAC,EAC9B,QAAQ,EACR,UAAU,EACV,QAAQ,GAAG,KAAK,EAChB,eAAe,GAAG,IAAI,EACtB,QAAQ,GAAG,IAAI,EACf,cAAc,GACO;IACrB,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAAC;IACvD,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,CAAC,eAAe,IAAI,CAAC,qBAAqB,CAAC;IAEhE,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,SAAS,IAAI,YAAY,IAAI,cAAc,EAAE,CAAC;YAC/C,cAAc,EAAE,CAAC;QACrB,CAAC;IACL,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IAG9C,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC;IAGD,IAAI,YAAY,EAAE,CAAC;QAEf,IAAI,cAAc,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAGD,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ export interface RequireRoleProps {
3
+ children: React.ReactNode;
4
+ role: string | string[];
5
+ matchAll?: boolean;
6
+ loadingFallback?: React.ReactNode;
7
+ fallback?: React.ReactNode;
8
+ onAccessDenied?: () => void;
9
+ }
10
+ export declare function RequireRole({ children, role, matchAll, loadingFallback, fallback, onAccessDenied, }: RequireRoleProps): React.ReactElement | null;
@@ -0,0 +1,24 @@
1
+ import React, { useEffect } from 'react';
2
+ import { useAuthStatus } from '../hooks/use-auth-status';
3
+ import { useHasRole } from '../hooks/use-has-role';
4
+ export function RequireRole({ children, role, matchAll = false, loadingFallback = null, fallback = null, onAccessDenied, }) {
5
+ const { isLoading, isAuthenticated } = useAuthStatus();
6
+ const hasRequiredRole = useHasRole(role, matchAll);
7
+ const accessDenied = !isAuthenticated || !hasRequiredRole;
8
+ useEffect(() => {
9
+ if (!isLoading && accessDenied && onAccessDenied) {
10
+ onAccessDenied();
11
+ }
12
+ }, [isLoading, accessDenied, onAccessDenied]);
13
+ if (isLoading) {
14
+ return React.createElement(React.Fragment, null, loadingFallback);
15
+ }
16
+ if (accessDenied) {
17
+ if (onAccessDenied) {
18
+ return React.createElement(React.Fragment, null, loadingFallback);
19
+ }
20
+ return React.createElement(React.Fragment, null, fallback);
21
+ }
22
+ return React.createElement(React.Fragment, null, children);
23
+ }
24
+ //# sourceMappingURL=require-role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-role.js","sourceRoot":"","sources":["../../src/guards/require-role.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAiDnD,MAAM,UAAU,WAAW,CAAC,EACxB,QAAQ,EACR,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,eAAe,GAAG,IAAI,EACtB,QAAQ,GAAG,IAAI,EACf,cAAc,GACC;IACf,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAAC;IACvD,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC;IAE1D,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,SAAS,IAAI,YAAY,IAAI,cAAc,EAAE,CAAC;YAC/C,cAAc,EAAE,CAAC;QACrB,CAAC;IACL,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IAG9C,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC;IAGD,IAAI,YAAY,EAAE,CAAC;QAEf,IAAI,cAAc,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAGD,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function useAccessToken(): string | null;
@@ -0,0 +1,21 @@
1
+ import { useContext, useState, useEffect } from 'react';
2
+ import { AuthContext } from '../context/auth-context';
3
+ export function useAccessToken() {
4
+ const context = useContext(AuthContext);
5
+ const [token, setToken] = useState(null);
6
+ useEffect(() => {
7
+ let mounted = true;
8
+ const loadToken = async () => {
9
+ const accessToken = await context.client?.getAccessToken?.();
10
+ if (mounted) {
11
+ setToken(accessToken ?? null);
12
+ }
13
+ };
14
+ loadToken();
15
+ return () => {
16
+ mounted = false;
17
+ };
18
+ }, [context.client, context.session]);
19
+ return token;
20
+ }
21
+ //# sourceMappingURL=use-access-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-access-token.js","sourceRoot":"","sources":["../../src/hooks/use-access-token.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAyBtD,MAAM,UAAU,cAAc;IAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;YACzB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,CAAC;YAC7D,IAAI,OAAO,EAAE,CAAC;gBACV,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;YAClC,CAAC;QACL,CAAC,CAAC;QAEF,SAAS,EAAE,CAAC;QAEZ,OAAO,GAAG,EAAE;YACR,OAAO,GAAG,KAAK,CAAC;QACpB,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtC,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { AuthStatus } from '@ackplus/nest-auth-client';
2
+ export interface AuthStatusResult {
3
+ status: AuthStatus;
4
+ isLoading: boolean;
5
+ isAuthenticated: boolean;
6
+ isUnauthenticated: boolean;
7
+ }
8
+ export declare function useAuthStatus(): AuthStatusResult;
@@ -0,0 +1,12 @@
1
+ import { useContext } from 'react';
2
+ import { AuthContext } from '../context/auth-context';
3
+ export function useAuthStatus() {
4
+ const context = useContext(AuthContext);
5
+ return {
6
+ status: context.status,
7
+ isLoading: context.status === 'loading',
8
+ isAuthenticated: context.status === 'authenticated' && context.user !== null,
9
+ isUnauthenticated: context.status === 'unauthenticated',
10
+ };
11
+ }
12
+ //# sourceMappingURL=use-auth-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-auth-status.js","sourceRoot":"","sources":["../../src/hooks/use-auth-status.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAiCtD,MAAM,UAAU,aAAa;IACzB,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAExC,OAAO;QACH,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS;QACvC,eAAe,EAAE,OAAO,CAAC,MAAM,KAAK,eAAe,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;QAC5E,iBAAiB,EAAE,OAAO,CAAC,MAAM,KAAK,iBAAiB;KAC1D,CAAC;AACN,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { AuthContextValue } from '../context/auth-context';
2
+ export declare function useNestAuth(): AuthContextValue;
@@ -0,0 +1,10 @@
1
+ import { useContext } from 'react';
2
+ import { AuthContext } from '../context/auth-context';
3
+ export function useNestAuth() {
4
+ const context = useContext(AuthContext);
5
+ if (!context.client) {
6
+ throw new Error('useNestAuth must be used within an AuthProvider');
7
+ }
8
+ return context;
9
+ }
10
+ //# sourceMappingURL=use-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-auth.js","sourceRoot":"","sources":["../../src/hooks/use-auth.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,WAAW,EAAoB,MAAM,yBAAyB,CAAC;AA0BxE,MAAM,UAAU,WAAW;IACvB,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAExC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function useHasRole(role: string | string[], matchAll?: boolean): boolean;
2
+ export declare function useHasPermission(permission: string | string[], matchAll?: boolean): boolean;
@@ -0,0 +1,16 @@
1
+ import { useContext, useMemo } from 'react';
2
+ import { hasRole, hasPermission } from '@ackplus/nest-auth-client';
3
+ import { AuthContext } from '../context/auth-context';
4
+ export function useHasRole(role, matchAll = false) {
5
+ const context = useContext(AuthContext);
6
+ return useMemo(() => {
7
+ return hasRole(context.user, role, matchAll);
8
+ }, [context.user, role, matchAll]);
9
+ }
10
+ export function useHasPermission(permission, matchAll = false) {
11
+ const context = useContext(AuthContext);
12
+ return useMemo(() => {
13
+ return hasPermission(context.user, permission, matchAll);
14
+ }, [context.user, permission, matchAll]);
15
+ }
16
+ //# sourceMappingURL=use-has-role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-has-role.js","sourceRoot":"","sources":["../../src/hooks/use-has-role.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAsBtD,MAAM,UAAU,UAAU,CAAC,IAAuB,EAAE,WAAoB,KAAK;IACzE,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAExC,OAAO,OAAO,CAAC,GAAG,EAAE;QAChB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AACvC,CAAC;AA4BD,MAAM,UAAU,gBAAgB,CAAC,UAA6B,EAAE,WAAoB,KAAK;IACrF,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAExC,OAAO,OAAO,CAAC,GAAG,EAAE;QAChB,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7D,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { ClientSession } from '@ackplus/nest-auth-client';
2
+ export declare function useSession(): ClientSession | null;
@@ -0,0 +1,7 @@
1
+ import { useContext } from 'react';
2
+ import { AuthContext } from '../context/auth-context';
3
+ export function useSession() {
4
+ const context = useContext(AuthContext);
5
+ return context.session;
6
+ }
7
+ //# sourceMappingURL=use-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-session.js","sourceRoot":"","sources":["../../src/hooks/use-session.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA2BtD,MAAM,UAAU,UAAU;IACtB,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO,OAAO,CAAC,OAAO,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { IAuthUser } from '@ackplus/nest-auth-client';
2
+ export declare function useUser(): IAuthUser | null;
@@ -0,0 +1,7 @@
1
+ import { useContext } from 'react';
2
+ import { AuthContext } from '../context/auth-context';
3
+ export function useUser() {
4
+ const context = useContext(AuthContext);
5
+ return context.user;
6
+ }
7
+ //# sourceMappingURL=use-user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-user.js","sourceRoot":"","sources":["../../src/hooks/use-user.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAyBtD,MAAM,UAAU,OAAO;IACnB,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC;AACxB,CAAC"}