@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.
- package/README.md +58 -4
- package/dist/context/auth-context.d.ts +21 -0
- package/dist/context/auth-context.js +23 -0
- package/dist/context/auth-context.js.map +1 -0
- package/dist/context/auth-provider.d.ts +16 -0
- package/dist/context/auth-provider.js +200 -0
- package/dist/context/auth-provider.js.map +1 -0
- package/dist/guards/auth-guard.d.ts +8 -0
- package/dist/guards/auth-guard.js +21 -0
- package/dist/guards/auth-guard.js.map +1 -0
- package/dist/guards/guest-guard.d.ts +8 -0
- package/dist/guards/guest-guard.js +21 -0
- package/dist/guards/guest-guard.js.map +1 -0
- package/dist/guards/require-permission.d.ts +10 -0
- package/dist/guards/require-permission.js +24 -0
- package/dist/guards/require-permission.js.map +1 -0
- package/dist/guards/require-role.d.ts +10 -0
- package/dist/guards/require-role.js +24 -0
- package/dist/guards/require-role.js.map +1 -0
- package/dist/hooks/use-access-token.d.ts +1 -0
- package/dist/hooks/use-access-token.js +21 -0
- package/dist/hooks/use-access-token.js.map +1 -0
- package/dist/hooks/use-auth-status.d.ts +8 -0
- package/dist/hooks/use-auth-status.js +12 -0
- package/dist/hooks/use-auth-status.js.map +1 -0
- package/dist/hooks/use-auth.d.ts +2 -0
- package/dist/hooks/use-auth.js +10 -0
- package/dist/hooks/use-auth.js.map +1 -0
- package/dist/hooks/use-has-role.d.ts +2 -0
- package/dist/hooks/use-has-role.js +16 -0
- package/dist/hooks/use-has-role.js.map +1 -0
- package/dist/hooks/use-session.d.ts +2 -0
- package/dist/hooks/use-session.js +7 -0
- package/dist/hooks/use-session.js.map +1 -0
- package/dist/hooks/use-user.d.ts +2 -0
- package/dist/hooks/use-user.js +7 -0
- package/dist/hooks/use-user.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/next/create-next-auth-helpers.d.ts +20 -0
- package/dist/next/create-next-auth-helpers.js +88 -0
- package/dist/next/create-next-auth-helpers.js.map +1 -0
- package/dist/next/next-auth-provider.d.ts +10 -0
- package/dist/next/next-auth-provider.js +17 -0
- package/dist/next/next-auth-provider.js.map +1 -0
- package/dist/sync/cross-tab-sync.d.ts +24 -0
- package/dist/sync/cross-tab-sync.js +109 -0
- package/dist/sync/cross-tab-sync.js.map +1 -0
- package/package.json +43 -30
- package/client/create-client.d.ts +0 -63
- package/client/create-client.d.ts.map +0 -1
- package/context/auth-context.d.ts +0 -50
- package/context/auth-context.d.ts.map +0 -1
- package/context/mfa-service-context.d.ts +0 -5
- package/context/mfa-service-context.d.ts.map +0 -1
- package/hooks/use-auth.d.ts +0 -50
- package/hooks/use-auth.d.ts.map +0 -1
- package/hooks/use-mfa.d.ts +0 -23
- package/hooks/use-mfa.d.ts.map +0 -1
- package/index.cjs +0 -6
- package/index.d.ts +0 -13
- package/index.js +0 -2779
- package/provider/nest-auth-provider.d.ts +0 -15
- package/provider/nest-auth-provider.d.ts.map +0 -1
- package/storage/token-storage.d.ts +0 -3
- package/storage/token-storage.d.ts.map +0 -1
- package/utils/errors.d.ts +0 -6
- package/utils/errors.d.ts.map +0 -1
- package/utils/request.d.ts +0 -10
- package/utils/request.d.ts.map +0 -1
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { AuthContext, AuthContextValue } from './context/auth-context';
|
|
2
|
+
export { AuthProvider, AuthProviderProps, InitialAuthState } from './context/auth-provider';
|
|
3
|
+
export { useNestAuth } from './hooks/use-auth';
|
|
4
|
+
export { useUser } from './hooks/use-user';
|
|
5
|
+
export { useSession } from './hooks/use-session';
|
|
6
|
+
export { useAccessToken } from './hooks/use-access-token';
|
|
7
|
+
export { useAuthStatus, AuthStatusResult } from './hooks/use-auth-status';
|
|
8
|
+
export { useHasRole, useHasPermission } from './hooks/use-has-role';
|
|
9
|
+
export { AuthGuard, AuthGuardProps } from './guards/auth-guard';
|
|
10
|
+
export { GuestGuard, GuestGuardProps } from './guards/guest-guard';
|
|
11
|
+
export { RequireRole, RequireRoleProps } from './guards/require-role';
|
|
12
|
+
export { RequirePermission, RequirePermissionProps } from './guards/require-permission';
|
|
13
|
+
export { createNextAuthHelpers, NextAuthHelpers, ServerAuthState } from './next/create-next-auth-helpers';
|
|
14
|
+
export { NextAuthProvider, NextAuthProviderProps } from './next/next-auth-provider';
|
|
15
|
+
export { CrossTabSync, createCrossTabSync, SyncEvent, SyncEventType, SyncHandler } from './sync/cross-tab-sync';
|
|
16
|
+
export type { IAuthUser as AuthUser, ClientSession as AuthSession, AuthStatus, AuthState, AuthError, ITokenPair as TokenPair, ILoginRequest as LoginDto, ISignupRequest as SignupDto, IAuthResponse as AuthResponse, AuthClientConfig, } from '@ackplus/nest-auth-client';
|
|
17
|
+
export { AuthClient } from '@ackplus/nest-auth-client';
|
|
18
|
+
export { hasRole, hasPermission, hasAnyAccess, hasAllAccess } from '@ackplus/nest-auth-client';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { AuthContext } from './context/auth-context';
|
|
2
|
+
export { AuthProvider } from './context/auth-provider';
|
|
3
|
+
export { useNestAuth } from './hooks/use-auth';
|
|
4
|
+
export { useUser } from './hooks/use-user';
|
|
5
|
+
export { useSession } from './hooks/use-session';
|
|
6
|
+
export { useAccessToken } from './hooks/use-access-token';
|
|
7
|
+
export { useAuthStatus } from './hooks/use-auth-status';
|
|
8
|
+
export { useHasRole, useHasPermission } from './hooks/use-has-role';
|
|
9
|
+
export { AuthGuard } from './guards/auth-guard';
|
|
10
|
+
export { GuestGuard } from './guards/guest-guard';
|
|
11
|
+
export { RequireRole } from './guards/require-role';
|
|
12
|
+
export { RequirePermission } from './guards/require-permission';
|
|
13
|
+
export { createNextAuthHelpers } from './next/create-next-auth-helpers';
|
|
14
|
+
export { NextAuthProvider } from './next/next-auth-provider';
|
|
15
|
+
export { CrossTabSync, createCrossTabSync } from './sync/cross-tab-sync';
|
|
16
|
+
export { AuthClient } from '@ackplus/nest-auth-client';
|
|
17
|
+
export { hasRole, hasPermission, hasAnyAccess, hasAllAccess } from '@ackplus/nest-auth-client';
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAoB,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAuC,MAAM,yBAAyB,CAAC;AAI5F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAoB,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAIpE,OAAO,EAAE,SAAS,EAAkB,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAmB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAoB,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAA0B,MAAM,6BAA6B,CAAC;AAIxF,OAAO,EAAE,qBAAqB,EAAoC,MAAM,iCAAiC,CAAC;AAC1G,OAAO,EAAE,gBAAgB,EAAyB,MAAM,2BAA2B,CAAC;AAIpF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAyC,MAAM,uBAAuB,CAAC;AAiBhH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGvD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AuthClientConfig, IAuthUser, ClientSession } from '@ackplus/nest-auth-client';
|
|
2
|
+
export interface ServerAuthState {
|
|
3
|
+
user: IAuthUser | null;
|
|
4
|
+
session: ClientSession | null;
|
|
5
|
+
}
|
|
6
|
+
export interface NextAuthHelpers {
|
|
7
|
+
getServerAuth: (request: Request | {
|
|
8
|
+
cookies: {
|
|
9
|
+
get: (name: string) => {
|
|
10
|
+
value: string;
|
|
11
|
+
} | undefined;
|
|
12
|
+
};
|
|
13
|
+
}) => Promise<ServerAuthState>;
|
|
14
|
+
withAuth: <T extends (...args: any[]) => any>(handler: T) => T;
|
|
15
|
+
createInitialState: (serverAuth: ServerAuthState) => {
|
|
16
|
+
user: IAuthUser | null;
|
|
17
|
+
session: ClientSession | null;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export declare function createNextAuthHelpers(config: AuthClientConfig): NextAuthHelpers;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { AuthClient, } from '@ackplus/nest-auth-client';
|
|
2
|
+
const COOKIE_NAMES = {
|
|
3
|
+
ACCESS_TOKEN: 'access_token',
|
|
4
|
+
REFRESH_TOKEN: 'refresh_token',
|
|
5
|
+
};
|
|
6
|
+
export function createNextAuthHelpers(config) {
|
|
7
|
+
const getServerAuth = async (request) => {
|
|
8
|
+
try {
|
|
9
|
+
let accessToken;
|
|
10
|
+
if (request instanceof Request) {
|
|
11
|
+
const cookieHeader = request.headers.get('cookie');
|
|
12
|
+
if (cookieHeader) {
|
|
13
|
+
const cookies = parseCookies(cookieHeader);
|
|
14
|
+
accessToken = cookies[COOKIE_NAMES.ACCESS_TOKEN];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
accessToken = request.cookies.get(COOKIE_NAMES.ACCESS_TOKEN)?.value;
|
|
19
|
+
}
|
|
20
|
+
if (!accessToken) {
|
|
21
|
+
return { user: null, session: null };
|
|
22
|
+
}
|
|
23
|
+
const serverClient = new AuthClient({
|
|
24
|
+
...config,
|
|
25
|
+
accessTokenType: 'header',
|
|
26
|
+
});
|
|
27
|
+
const response = await fetch(`${config.baseUrl}${config.endpoints?.verifySession || '/auth/verify-session'}`, {
|
|
28
|
+
headers: {
|
|
29
|
+
Authorization: `Bearer ${accessToken}`,
|
|
30
|
+
'Content-Type': 'application/json',
|
|
31
|
+
},
|
|
32
|
+
cache: 'no-store',
|
|
33
|
+
});
|
|
34
|
+
if (!response.ok) {
|
|
35
|
+
return { user: null, session: null };
|
|
36
|
+
}
|
|
37
|
+
const user = await response.json();
|
|
38
|
+
return {
|
|
39
|
+
user,
|
|
40
|
+
session: {
|
|
41
|
+
id: '',
|
|
42
|
+
userId: user.id,
|
|
43
|
+
accessToken,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return { user: null, session: null };
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const withAuth = (handler) => {
|
|
52
|
+
return (async (...args) => {
|
|
53
|
+
const request = args[0];
|
|
54
|
+
const auth = await getServerAuth(request);
|
|
55
|
+
if (!auth.user) {
|
|
56
|
+
return new Response(JSON.stringify({ message: 'Unauthorized' }), {
|
|
57
|
+
status: 401,
|
|
58
|
+
headers: { 'Content-Type': 'application/json' },
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
const headers = new Headers(request.headers);
|
|
62
|
+
headers.set('x-auth-user', JSON.stringify(auth.user));
|
|
63
|
+
return handler(...args);
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
const createInitialState = (serverAuth) => {
|
|
67
|
+
return {
|
|
68
|
+
user: serverAuth.user,
|
|
69
|
+
session: serverAuth.session,
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
return {
|
|
73
|
+
getServerAuth,
|
|
74
|
+
withAuth,
|
|
75
|
+
createInitialState,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function parseCookies(cookieHeader) {
|
|
79
|
+
const cookies = {};
|
|
80
|
+
cookieHeader.split(';').forEach(cookie => {
|
|
81
|
+
const [name, ...rest] = cookie.trim().split('=');
|
|
82
|
+
if (name) {
|
|
83
|
+
cookies[name] = rest.join('=');
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
return cookies;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=create-next-auth-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-next-auth-helpers.js","sourceRoot":"","sources":["../../src/next/create-next-auth-helpers.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,UAAU,GAIb,MAAM,2BAA2B,CAAC;AAkCnC,MAAM,YAAY,GAAG;IACjB,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;CACjC,CAAC;AAwBF,MAAM,UAAU,qBAAqB,CAAC,MAAwB;IAC1D,MAAM,aAAa,GAAG,KAAK,EACvB,OAAwF,EAChE,EAAE;QAC1B,IAAI,CAAC;YAED,IAAI,WAA+B,CAAC;YAEpC,IAAI,OAAO,YAAY,OAAO,EAAE,CAAC;gBAE7B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACnD,IAAI,YAAY,EAAE,CAAC;oBACf,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;oBAC3C,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;gBACrD,CAAC;YACL,CAAC;iBAAM,CAAC;gBAEJ,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;YACxE,CAAC;YAED,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACzC,CAAC;YAGD,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC;gBAChC,GAAG,MAAM;gBACT,eAAe,EAAE,QAAQ;aAC5B,CAAC,CAAC;YAGH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,aAAa,IAAI,sBAAsB,EAAE,EAAE;gBAC1G,OAAO,EAAE;oBACL,aAAa,EAAE,UAAU,WAAW,EAAE;oBACtC,cAAc,EAAE,kBAAkB;iBACrC;gBACD,KAAK,EAAE,UAAU;aACpB,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACzC,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,OAAO;gBACH,IAAI;gBACJ,OAAO,EAAE;oBACL,EAAE,EAAE,EAAE;oBACN,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,WAAW;iBACd;aACJ,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACzC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAoC,OAAU,EAAK,EAAE;QAClE,OAAO,CAAC,KAAK,EAAE,GAAG,IAAmB,EAAE,EAAE;YAErC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAY,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;YAE1C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACb,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE;oBAC7D,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAClD,CAAC,CAAC;YACP,CAAC;YAGD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAEtD,OAAO,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAM,CAAC;IACZ,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,CAAC,UAA2B,EAAE,EAAE;QACvD,OAAO;YACH,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,OAAO,EAAE,UAAU,CAAC,OAAO;SAC9B,CAAC;IACN,CAAC,CAAC;IAEF,OAAO;QACH,aAAa;QACb,QAAQ;QACR,kBAAkB;KACrB,CAAC;AACN,CAAC;AAKD,SAAS,YAAY,CAAC,YAAoB;IACtC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACrC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,IAAI,EAAE,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IAuthUser, ClientSession } from '@ackplus/nest-auth-client';
|
|
3
|
+
import { AuthProviderProps } from '../context/auth-provider';
|
|
4
|
+
export interface NextAuthProviderProps extends Omit<AuthProviderProps, 'initialState'> {
|
|
5
|
+
initialState?: {
|
|
6
|
+
user?: IAuthUser | null;
|
|
7
|
+
session?: ClientSession | null;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export declare function NextAuthProvider({ client, initialState, autoLoadMe, onUnauthenticated, children, }: NextAuthProviderProps): React.FunctionComponentElement<AuthProviderProps>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { AuthProvider } from '../context/auth-provider';
|
|
3
|
+
export function NextAuthProvider({ client, initialState, autoLoadMe = true, onUnauthenticated, children, }) {
|
|
4
|
+
const shouldAutoLoad = autoLoadMe && !initialState?.user;
|
|
5
|
+
return React.createElement(AuthProvider, {
|
|
6
|
+
client,
|
|
7
|
+
initialState: initialState ? {
|
|
8
|
+
user: initialState.user ?? null,
|
|
9
|
+
session: initialState.session ?? null,
|
|
10
|
+
status: initialState.user ? 'authenticated' : 'unauthenticated',
|
|
11
|
+
} : undefined,
|
|
12
|
+
autoLoadMe: shouldAutoLoad,
|
|
13
|
+
onUnauthenticated,
|
|
14
|
+
children,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=next-auth-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-auth-provider.js","sourceRoot":"","sources":["../../src/next/next-auth-provider.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAqB,MAAM,0BAA0B,CAAC;AA0C3E,MAAM,UAAU,gBAAgB,CAAC,EAC7B,MAAM,EACN,YAAY,EACZ,UAAU,GAAG,IAAI,EACjB,iBAAiB,EACjB,QAAQ,GACY;IAEpB,MAAM,cAAc,GAAG,UAAU,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;IAEzD,OAAO,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE;QACrC,MAAM;QACN,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;YACzB,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,IAAI;YAC/B,OAAO,EAAE,YAAY,CAAC,OAAO,IAAI,IAAI;YACrC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB;SAClE,CAAC,CAAC,CAAC,SAAS;QACb,UAAU,EAAE,cAAc;QAC1B,iBAAiB;QACjB,QAAQ;KACX,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type SyncEventType = 'logout' | 'login' | 'refresh';
|
|
2
|
+
export interface SyncEvent {
|
|
3
|
+
type: SyncEventType;
|
|
4
|
+
timestamp: number;
|
|
5
|
+
}
|
|
6
|
+
export type SyncHandler = (event: SyncEvent) => void;
|
|
7
|
+
export declare class CrossTabSync {
|
|
8
|
+
private channel;
|
|
9
|
+
private handlers;
|
|
10
|
+
private lastEventTime;
|
|
11
|
+
private storageListener;
|
|
12
|
+
constructor();
|
|
13
|
+
private initBroadcastChannel;
|
|
14
|
+
private initStorageFallback;
|
|
15
|
+
private isValidEvent;
|
|
16
|
+
private notifyHandlers;
|
|
17
|
+
subscribe(handler: SyncHandler): () => void;
|
|
18
|
+
broadcast(type: SyncEventType): void;
|
|
19
|
+
broadcastLogout(): void;
|
|
20
|
+
broadcastLogin(): void;
|
|
21
|
+
broadcastRefresh(): void;
|
|
22
|
+
destroy(): void;
|
|
23
|
+
}
|
|
24
|
+
export declare function createCrossTabSync(): CrossTabSync;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
const CHANNEL_NAME = 'nest-auth-sync';
|
|
2
|
+
const STORAGE_KEY = 'nest_auth_sync_event';
|
|
3
|
+
export class CrossTabSync {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.channel = null;
|
|
6
|
+
this.handlers = new Set();
|
|
7
|
+
this.lastEventTime = 0;
|
|
8
|
+
this.storageListener = null;
|
|
9
|
+
if (typeof window === 'undefined')
|
|
10
|
+
return;
|
|
11
|
+
if (typeof BroadcastChannel !== 'undefined') {
|
|
12
|
+
this.initBroadcastChannel();
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
this.initStorageFallback();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
initBroadcastChannel() {
|
|
19
|
+
try {
|
|
20
|
+
this.channel = new BroadcastChannel(CHANNEL_NAME);
|
|
21
|
+
this.channel.onmessage = (event) => {
|
|
22
|
+
if (event.data && this.isValidEvent(event.data)) {
|
|
23
|
+
this.notifyHandlers(event.data);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
this.initStorageFallback();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
initStorageFallback() {
|
|
32
|
+
this.storageListener = (event) => {
|
|
33
|
+
if (event.key === STORAGE_KEY && event.newValue) {
|
|
34
|
+
try {
|
|
35
|
+
const syncEvent = JSON.parse(event.newValue);
|
|
36
|
+
if (this.isValidEvent(syncEvent)) {
|
|
37
|
+
this.notifyHandlers(syncEvent);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
window.addEventListener('storage', this.storageListener);
|
|
45
|
+
}
|
|
46
|
+
isValidEvent(data) {
|
|
47
|
+
return (data &&
|
|
48
|
+
typeof data.type === 'string' &&
|
|
49
|
+
typeof data.timestamp === 'number' &&
|
|
50
|
+
data.timestamp > this.lastEventTime);
|
|
51
|
+
}
|
|
52
|
+
notifyHandlers(event) {
|
|
53
|
+
this.lastEventTime = event.timestamp;
|
|
54
|
+
this.handlers.forEach(handler => {
|
|
55
|
+
try {
|
|
56
|
+
handler(event);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
subscribe(handler) {
|
|
63
|
+
this.handlers.add(handler);
|
|
64
|
+
return () => {
|
|
65
|
+
this.handlers.delete(handler);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
broadcast(type) {
|
|
69
|
+
const event = {
|
|
70
|
+
type,
|
|
71
|
+
timestamp: Date.now(),
|
|
72
|
+
};
|
|
73
|
+
if (this.channel) {
|
|
74
|
+
this.channel.postMessage(event);
|
|
75
|
+
}
|
|
76
|
+
else if (typeof window !== 'undefined' && window.localStorage) {
|
|
77
|
+
try {
|
|
78
|
+
localStorage.setItem(STORAGE_KEY, JSON.stringify(event));
|
|
79
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
broadcastLogout() {
|
|
86
|
+
this.broadcast('logout');
|
|
87
|
+
}
|
|
88
|
+
broadcastLogin() {
|
|
89
|
+
this.broadcast('login');
|
|
90
|
+
}
|
|
91
|
+
broadcastRefresh() {
|
|
92
|
+
this.broadcast('refresh');
|
|
93
|
+
}
|
|
94
|
+
destroy() {
|
|
95
|
+
if (this.channel) {
|
|
96
|
+
this.channel.close();
|
|
97
|
+
this.channel = null;
|
|
98
|
+
}
|
|
99
|
+
if (this.storageListener) {
|
|
100
|
+
window.removeEventListener('storage', this.storageListener);
|
|
101
|
+
this.storageListener = null;
|
|
102
|
+
}
|
|
103
|
+
this.handlers.clear();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
export function createCrossTabSync() {
|
|
107
|
+
return new CrossTabSync();
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=cross-tab-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-tab-sync.js","sourceRoot":"","sources":["../../src/sync/cross-tab-sync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,40 +1,53 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ackplus/nest-auth-react",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
3
|
+
"version": "1.1.29",
|
|
4
|
+
"description": "React SDK for NestJS authentication - hooks, guards, and Next.js integration",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
7
9
|
"exports": {
|
|
8
10
|
".": {
|
|
9
|
-
"types": "./index.d.ts",
|
|
10
|
-
"import": "./index.js",
|
|
11
|
-
"require": "./index.
|
|
12
|
-
}
|
|
13
|
-
"./styles/default.css": {
|
|
14
|
-
"default": "./styles/default.css"
|
|
15
|
-
},
|
|
16
|
-
"./styles": {
|
|
17
|
-
"default": "./styles/default.css"
|
|
18
|
-
},
|
|
19
|
-
"./package.json": "./package.json"
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.js"
|
|
14
|
+
}
|
|
20
15
|
},
|
|
21
16
|
"files": [
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"client",
|
|
26
|
-
"context",
|
|
27
|
-
"hooks",
|
|
28
|
-
"provider",
|
|
29
|
-
"storage",
|
|
30
|
-
"types",
|
|
31
|
-
"utils"
|
|
17
|
+
"dist",
|
|
18
|
+
"README.md",
|
|
19
|
+
"LICENSE"
|
|
32
20
|
],
|
|
33
|
-
"
|
|
34
|
-
"
|
|
21
|
+
"keywords": [
|
|
22
|
+
"auth",
|
|
23
|
+
"authentication",
|
|
24
|
+
"react",
|
|
25
|
+
"hooks",
|
|
26
|
+
"nextjs",
|
|
27
|
+
"nestjs",
|
|
28
|
+
"jwt",
|
|
29
|
+
"oauth"
|
|
35
30
|
],
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": "https://github.com/ack-solutions/nest-auth"
|
|
34
|
+
},
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"author": "Ackplus",
|
|
36
37
|
"peerDependencies": {
|
|
37
|
-
"react": "^18.0.0"
|
|
38
|
-
|
|
38
|
+
"react": "^18.0.0 || ^19.0.0"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@ackplus/nest-auth-client": "1.1.29"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"typescript": "^5.7.3",
|
|
45
|
+
"@types/react": "^18.0.0"
|
|
46
|
+
},
|
|
47
|
+
"scripts": {
|
|
48
|
+
"clean": "rm -rf dist tsconfig.build.tsbuildinfo",
|
|
49
|
+
"build": "pnpm clean && tsc -p tsconfig.build.json",
|
|
50
|
+
"format": "prettier --write \"src/**/*.ts\" \"src/**/*.tsx\"",
|
|
51
|
+
"lint": "eslint \"src/**/*.ts\" \"src/**/*.tsx\" --fix"
|
|
39
52
|
}
|
|
40
|
-
}
|
|
53
|
+
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { AuthEndpoints, AuthSession, AuthResponse, AuthTokens, AuthUser, PasswordResetRequest, LoginCredentials, BackendAuthConfig, RefreshTokenInput, AuthResponse as RefreshTokenResponse, RegisterCredentials, PasswordResetVerification, PasswordResetOtpVerification, TenantOption, MfaVerification as VerifyMfaInput, PasswordChange as ChangePasswordInput, ToggleMfaInput, MfaStatusResponse, MfaDevice, VerifyTotpSetupInput } from '../types';
|
|
2
|
-
export interface AuthClient {
|
|
3
|
-
login(input: LoginCredentials): Promise<AuthResponse>;
|
|
4
|
-
register(input: RegisterCredentials): Promise<AuthResponse>;
|
|
5
|
-
logout(tokens?: AuthTokens | null): Promise<{
|
|
6
|
-
message?: string;
|
|
7
|
-
} | undefined>;
|
|
8
|
-
logoutAll(tokens?: AuthTokens | null): Promise<{
|
|
9
|
-
message?: string;
|
|
10
|
-
} | undefined>;
|
|
11
|
-
refreshToken(input: RefreshTokenInput): Promise<RefreshTokenResponse>;
|
|
12
|
-
getProfile(tokens?: AuthTokens | null): Promise<AuthUser>;
|
|
13
|
-
getSession(tokens?: AuthTokens | null): Promise<AuthSession>;
|
|
14
|
-
sendMfaCode(tokens: AuthTokens | null, method: string): Promise<{
|
|
15
|
-
message?: string;
|
|
16
|
-
}>;
|
|
17
|
-
verifyMfa(tokens: AuthTokens | null, input: VerifyMfaInput): Promise<AuthResponse>;
|
|
18
|
-
forgotPassword(input: PasswordResetRequest): Promise<{
|
|
19
|
-
message?: string;
|
|
20
|
-
}>;
|
|
21
|
-
verifyForgotPasswordOtp(input: PasswordResetOtpVerification): Promise<{
|
|
22
|
-
resetToken: string;
|
|
23
|
-
}>;
|
|
24
|
-
resetPasswordWithToken(input: PasswordResetVerification): Promise<{
|
|
25
|
-
message?: string;
|
|
26
|
-
}>;
|
|
27
|
-
changePassword(input: ChangePasswordInput, tokens?: AuthTokens | null): Promise<AuthResponse>;
|
|
28
|
-
getMfaStatus(tokens?: AuthTokens | null): Promise<MfaStatusResponse>;
|
|
29
|
-
toggleMfa(tokens: AuthTokens | null, input: ToggleMfaInput): Promise<{
|
|
30
|
-
message?: string;
|
|
31
|
-
}>;
|
|
32
|
-
listMfaDevices(tokens?: AuthTokens | null): Promise<MfaDevice[]>;
|
|
33
|
-
removeMfaDevice(tokens: AuthTokens | null, deviceId: string): Promise<{
|
|
34
|
-
message?: string;
|
|
35
|
-
}>;
|
|
36
|
-
setupTotp(tokens: AuthTokens | null): Promise<{
|
|
37
|
-
secret: string;
|
|
38
|
-
qrCode: string;
|
|
39
|
-
}>;
|
|
40
|
-
verifyTotpSetup(tokens: AuthTokens | null, input: VerifyTotpSetupInput): Promise<{
|
|
41
|
-
message?: string;
|
|
42
|
-
}>;
|
|
43
|
-
generateRecoveryCode(tokens: AuthTokens | null): Promise<{
|
|
44
|
-
code: string;
|
|
45
|
-
}>;
|
|
46
|
-
resetTotp(tokens: AuthTokens | null, code: string): Promise<{
|
|
47
|
-
message?: string;
|
|
48
|
-
}>;
|
|
49
|
-
sendEmailVerification(tokens: AuthTokens | null): Promise<{
|
|
50
|
-
message?: string;
|
|
51
|
-
}>;
|
|
52
|
-
verifyEmail(tokens: AuthTokens | null, otp: string): Promise<{
|
|
53
|
-
message?: string;
|
|
54
|
-
}>;
|
|
55
|
-
fetchClientConfig(): Promise<BackendAuthConfig>;
|
|
56
|
-
fetchTenants(tokens?: AuthTokens | null): Promise<TenantOption[]>;
|
|
57
|
-
}
|
|
58
|
-
export declare const createAuthClient: (params: {
|
|
59
|
-
baseUrl: string;
|
|
60
|
-
endpoints?: Partial<AuthEndpoints>;
|
|
61
|
-
defaultHeaders?: Record<string, string>;
|
|
62
|
-
}) => AuthClient;
|
|
63
|
-
//# sourceMappingURL=create-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-client.d.ts","sourceRoot":"","sources":["../../../../packages/nest-auth-react/src/client/create-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { AuthSession, AuthState, AuthSuccessResponse, AuthTokens, AuthUser, ForgotPasswordInput, LoginWithCredentialsInput, RedirectConfig, NestAuthBackendClientConfig, RefreshTokenResponse, RegisterInput, ResetPasswordWithTokenInput, VerifyForgotPasswordOtpInput, VerifyMfaInput, AuthEventEmitter, ChangePasswordInput, BackendAuthConfig } from '../types';
|
|
2
|
-
export interface AuthContextValue extends AuthState {
|
|
3
|
-
user: AuthUser | null;
|
|
4
|
-
session: AuthSession | null;
|
|
5
|
-
tokens: AuthTokens | null;
|
|
6
|
-
isLoading: boolean;
|
|
7
|
-
isLoadingUser: boolean;
|
|
8
|
-
baseUrl: string;
|
|
9
|
-
backendConfig?: BackendAuthConfig;
|
|
10
|
-
tenantId?: string;
|
|
11
|
-
events: AuthEventEmitter;
|
|
12
|
-
login: (input: LoginWithCredentialsInput) => Promise<AuthSuccessResponse>;
|
|
13
|
-
register: (input: RegisterInput) => Promise<AuthSuccessResponse>;
|
|
14
|
-
logout: () => Promise<void>;
|
|
15
|
-
logoutAll: () => Promise<void>;
|
|
16
|
-
refresh: () => Promise<RefreshTokenResponse | null>;
|
|
17
|
-
sendMfaCode: (method: string) => Promise<{
|
|
18
|
-
message?: string;
|
|
19
|
-
} | void>;
|
|
20
|
-
verifyMfa: (input: VerifyMfaInput) => Promise<AuthSuccessResponse>;
|
|
21
|
-
forgotPassword: (input: ForgotPasswordInput) => Promise<{
|
|
22
|
-
message?: string;
|
|
23
|
-
}>;
|
|
24
|
-
verifyForgotPasswordOtp: (input: VerifyForgotPasswordOtpInput) => Promise<{
|
|
25
|
-
resetToken: string;
|
|
26
|
-
}>;
|
|
27
|
-
resetPasswordWithToken: (input: ResetPasswordWithTokenInput) => Promise<{
|
|
28
|
-
message?: string;
|
|
29
|
-
}>;
|
|
30
|
-
changePassword: (input: ChangePasswordInput) => Promise<AuthSuccessResponse>;
|
|
31
|
-
sendEmailVerification: () => Promise<{
|
|
32
|
-
message?: string;
|
|
33
|
-
}>;
|
|
34
|
-
verifyEmail: (otp: string) => Promise<{
|
|
35
|
-
message?: string;
|
|
36
|
-
}>;
|
|
37
|
-
fetchBackendConfig: () => Promise<NestAuthBackendClientConfig | null>;
|
|
38
|
-
setTokens: (tokens: AuthTokens | null, options?: {
|
|
39
|
-
persist?: boolean;
|
|
40
|
-
}) => void;
|
|
41
|
-
setTenantId: (tenantId: string | null) => void;
|
|
42
|
-
clearError: () => void;
|
|
43
|
-
setUser: (user: AuthUser | null) => void;
|
|
44
|
-
redirects?: RedirectConfig;
|
|
45
|
-
navigate: (path: string) => void;
|
|
46
|
-
}
|
|
47
|
-
declare const AuthContext: import('react').Context<AuthContextValue>;
|
|
48
|
-
export declare const useAuthContext: () => AuthContextValue;
|
|
49
|
-
export default AuthContext;
|
|
50
|
-
//# sourceMappingURL=auth-context.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-context.d.ts","sourceRoot":"","sources":["../../../../packages/nest-auth-react/src/context/auth-context.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { MfaService } from '../services/mfa-service';
|
|
2
|
-
declare const MfaServiceContext: import('react').Context<MfaService>;
|
|
3
|
-
export declare const useMfaServiceContext: () => MfaService;
|
|
4
|
-
export default MfaServiceContext;
|
|
5
|
-
//# sourceMappingURL=mfa-service-context.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mfa-service-context.d.ts","sourceRoot":"","sources":["../../../../packages/nest-auth-react/src/context/mfa-service-context.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,QAAA,MAAM,iBAAiB,qCAAyC,CAAC;AAEjE,eAAO,MAAM,oBAAoB,QAAO,UAMvC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
package/hooks/use-auth.d.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { AuthContextValue } from '../context/auth-context';
|
|
2
|
-
import { BackendAuthConfig, TenantMode, TenantOption } from '../types';
|
|
3
|
-
import { AuthApiService } from '../services/auth-api-service';
|
|
4
|
-
/**
|
|
5
|
-
* Extended return type for useAuth hook
|
|
6
|
-
*/
|
|
7
|
-
export interface UseAuthReturn extends AuthContextValue {
|
|
8
|
-
isAuthenticated: boolean;
|
|
9
|
-
isUnauthenticated: boolean;
|
|
10
|
-
config: BackendAuthConfig;
|
|
11
|
-
isConfigLoaded: boolean;
|
|
12
|
-
isConfigLoading: boolean;
|
|
13
|
-
hasSession: boolean;
|
|
14
|
-
tenantOptions: TenantOption[];
|
|
15
|
-
tenantMode: TenantMode;
|
|
16
|
-
isMultiTenant: boolean;
|
|
17
|
-
api: AuthApiService | null;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Main authentication hook - provides all auth functionality
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```tsx
|
|
24
|
-
* const {
|
|
25
|
-
* // Auth state
|
|
26
|
-
* user,
|
|
27
|
-
* tokens,
|
|
28
|
-
* status,
|
|
29
|
-
* isLoading,
|
|
30
|
-
* isLoadingUser,
|
|
31
|
-
* isAuthenticated,
|
|
32
|
-
* isUnauthenticated,
|
|
33
|
-
*
|
|
34
|
-
* // Auth methods
|
|
35
|
-
* login,
|
|
36
|
-
* register,
|
|
37
|
-
* logout,
|
|
38
|
-
* refresh,
|
|
39
|
-
*
|
|
40
|
-
* // MFA factors (codes)
|
|
41
|
-
* sendMfaCode,
|
|
42
|
-
* verifyMfa,
|
|
43
|
-
*
|
|
44
|
-
* // User management
|
|
45
|
-
* api,
|
|
46
|
-
* } = useAuth();
|
|
47
|
-
* ```
|
|
48
|
-
*/
|
|
49
|
-
export declare const useAuth: () => UseAuthReturn;
|
|
50
|
-
//# sourceMappingURL=use-auth.d.ts.map
|
package/hooks/use-auth.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-auth.d.ts","sourceRoot":"","sources":["../../../../packages/nest-auth-react/src/hooks/use-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAc,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAgB9D;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,OAAO,QAAO,aAwF1B,CAAC"}
|
package/hooks/use-mfa.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { MfaServiceState } from '../services/mfa-service';
|
|
2
|
-
import { MfaMethod, VerifyTotpSetupInput } from '../types';
|
|
3
|
-
export interface UseMfaReturn extends MfaServiceState {
|
|
4
|
-
getStatus: (forceRefresh?: boolean) => Promise<MfaServiceState['status']>;
|
|
5
|
-
refreshStatus: () => Promise<MfaServiceState['status']>;
|
|
6
|
-
ensureStatusLoaded: () => Promise<void>;
|
|
7
|
-
toggleMfa: (input: {
|
|
8
|
-
enabled: boolean;
|
|
9
|
-
}) => Promise<unknown>;
|
|
10
|
-
setupTotp: () => Promise<{
|
|
11
|
-
secret: string;
|
|
12
|
-
qrCode: string;
|
|
13
|
-
}>;
|
|
14
|
-
verifyTotpSetup: (input: VerifyTotpSetupInput) => Promise<unknown>;
|
|
15
|
-
generateRecoveryCode: () => Promise<{
|
|
16
|
-
code: string;
|
|
17
|
-
}>;
|
|
18
|
-
resetTotp: (code: string) => Promise<unknown>;
|
|
19
|
-
removeDevice: (deviceId: string) => Promise<unknown>;
|
|
20
|
-
getAvailableMethods: () => MfaMethod[];
|
|
21
|
-
}
|
|
22
|
-
export declare const useMfa: () => UseMfaReturn;
|
|
23
|
-
//# sourceMappingURL=use-mfa.d.ts.map
|
package/hooks/use-mfa.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-mfa.d.ts","sourceRoot":"","sources":["../../../../packages/nest-auth-react/src/hooks/use-mfa.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhE,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1E,aAAa,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxD,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,SAAS,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,eAAe,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE,oBAAoB,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,mBAAmB,EAAE,MAAM,SAAS,EAAE,CAAC;CACxC;AAED,eAAO,MAAM,MAAM,QAAO,YAoCzB,CAAC"}
|