@rovela-ai/sdk 0.3.17 → 0.3.20
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/admin/api/settings.d.ts.map +1 -1
- package/dist/admin/api/settings.js +4 -0
- package/dist/admin/api/settings.js.map +1 -1
- package/dist/admin/components/AdminAcceptInviteForm.js +1 -1
- package/dist/admin/components/AdminAcceptInviteForm.js.map +1 -1
- package/dist/admin/components/AdminAccountPage.js +1 -1
- package/dist/admin/components/AdminAccountPage.js.map +1 -1
- package/dist/admin/components/AdminForgotPasswordForm.js +1 -1
- package/dist/admin/components/AdminForgotPasswordForm.js.map +1 -1
- package/dist/admin/components/AdminLoginForm.js +1 -1
- package/dist/admin/components/AdminLoginForm.js.map +1 -1
- package/dist/admin/components/AdminResetPasswordForm.js +1 -1
- package/dist/admin/components/AdminResetPasswordForm.js.map +1 -1
- package/dist/admin/components/AdminSetupForm.js +1 -1
- package/dist/admin/components/AdminSetupForm.js.map +1 -1
- package/dist/admin/components/InviteUserDialog.js +1 -1
- package/dist/admin/components/InviteUserDialog.js.map +1 -1
- package/dist/admin/components/StoreSettings.d.ts.map +1 -1
- package/dist/admin/components/StoreSettings.js +11 -3
- package/dist/admin/components/StoreSettings.js.map +1 -1
- package/dist/admin/config.d.ts +30 -38
- package/dist/admin/config.d.ts.map +1 -1
- package/dist/admin/config.js +106 -67
- package/dist/admin/config.js.map +1 -1
- package/dist/admin/hooks/index.d.ts +2 -0
- package/dist/admin/hooks/index.d.ts.map +1 -1
- package/dist/admin/hooks/index.js +1 -0
- package/dist/admin/hooks/index.js.map +1 -1
- package/dist/admin/hooks/useAdminAuth.d.ts +3 -14
- package/dist/admin/hooks/useAdminAuth.d.ts.map +1 -1
- package/dist/admin/hooks/useAdminAuth.js +110 -55
- package/dist/admin/hooks/useAdminAuth.js.map +1 -1
- package/dist/admin/hooks/useAdminSession.d.ts +23 -0
- package/dist/admin/hooks/useAdminSession.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminSession.js +117 -0
- package/dist/admin/hooks/useAdminSession.js.map +1 -0
- package/dist/admin/index.d.ts +2 -1
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/server/admin-service.d.ts.map +1 -1
- package/dist/admin/server/admin-service.js +15 -0
- package/dist/admin/server/admin-service.js.map +1 -1
- package/dist/admin/server/admin-session.d.ts +11 -12
- package/dist/admin/server/admin-session.d.ts.map +1 -1
- package/dist/admin/server/admin-session.js +20 -20
- package/dist/admin/server/admin-session.js.map +1 -1
- package/dist/admin/types.d.ts +5 -0
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/auth/api/request-refund.d.ts.map +1 -1
- package/dist/auth/api/request-refund.js +7 -8
- package/dist/auth/api/request-refund.js.map +1 -1
- package/dist/auth/api/request-return.d.ts.map +1 -1
- package/dist/auth/api/request-return.js +7 -8
- package/dist/auth/api/request-return.js.map +1 -1
- package/dist/auth/components/ForgotPasswordForm.d.ts.map +1 -1
- package/dist/auth/components/ForgotPasswordForm.js +2 -1
- package/dist/auth/components/ForgotPasswordForm.js.map +1 -1
- package/dist/auth/components/Label.d.ts +19 -0
- package/dist/auth/components/Label.d.ts.map +1 -0
- package/dist/auth/components/Label.js +18 -0
- package/dist/auth/components/Label.js.map +1 -0
- package/dist/auth/components/ResetPasswordForm.d.ts.map +1 -1
- package/dist/auth/components/ResetPasswordForm.js +2 -1
- package/dist/auth/components/ResetPasswordForm.js.map +1 -1
- package/dist/auth/components/SignInForm.d.ts.map +1 -1
- package/dist/auth/components/SignInForm.js +2 -1
- package/dist/auth/components/SignInForm.js.map +1 -1
- package/dist/auth/components/SignUpForm.d.ts.map +1 -1
- package/dist/auth/components/SignUpForm.js +2 -1
- package/dist/auth/components/SignUpForm.js.map +1 -1
- package/dist/auth/components/index.d.ts +2 -0
- package/dist/auth/components/index.d.ts.map +1 -1
- package/dist/auth/components/index.js +1 -0
- package/dist/auth/components/index.js.map +1 -1
- package/dist/auth/config.d.ts +22 -10
- package/dist/auth/config.d.ts.map +1 -1
- package/dist/auth/config.js +51 -98
- package/dist/auth/config.js.map +1 -1
- package/dist/auth/hooks/useAuth.d.ts.map +1 -1
- package/dist/auth/hooks/useAuth.js +11 -1
- package/dist/auth/hooks/useAuth.js.map +1 -1
- package/dist/auth/index.d.ts +2 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +2 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/server/customer-session.d.ts +81 -0
- package/dist/auth/server/customer-session.d.ts.map +1 -0
- package/dist/auth/server/customer-session.js +115 -0
- package/dist/auth/server/customer-session.js.map +1 -0
- package/dist/auth/server/index.d.ts +2 -0
- package/dist/auth/server/index.d.ts.map +1 -1
- package/dist/auth/server/index.js +2 -0
- package/dist/auth/server/index.js.map +1 -1
- package/dist/core/cookie-consent/CookieBanner.d.ts +2 -0
- package/dist/core/cookie-consent/CookieBanner.d.ts.map +1 -0
- package/dist/core/cookie-consent/CookieBanner.js +207 -0
- package/dist/core/cookie-consent/CookieBanner.js.map +1 -0
- package/dist/core/cookie-consent/CookieConsentProvider.d.ts +53 -0
- package/dist/core/cookie-consent/CookieConsentProvider.d.ts.map +1 -0
- package/dist/core/cookie-consent/CookieConsentProvider.js +162 -0
- package/dist/core/cookie-consent/CookieConsentProvider.js.map +1 -0
- package/dist/core/cookie-consent/CookiePreferencesLink.d.ts +15 -0
- package/dist/core/cookie-consent/CookiePreferencesLink.d.ts.map +1 -0
- package/dist/core/cookie-consent/CookiePreferencesLink.js +12 -0
- package/dist/core/cookie-consent/CookiePreferencesLink.js.map +1 -0
- package/dist/core/cookie-consent/index.d.ts +17 -0
- package/dist/core/cookie-consent/index.d.ts.map +1 -0
- package/dist/core/cookie-consent/index.js +16 -0
- package/dist/core/cookie-consent/index.js.map +1 -0
- package/dist/core/cookie-consent/types.d.ts +31 -0
- package/dist/core/cookie-consent/types.d.ts.map +1 -0
- package/dist/core/cookie-consent/types.js +10 -0
- package/dist/core/cookie-consent/types.js.map +1 -0
- package/dist/core/cookie-consent/useCookieConsent.d.ts +14 -0
- package/dist/core/cookie-consent/useCookieConsent.d.ts.map +1 -0
- package/dist/core/cookie-consent/useCookieConsent.js +25 -0
- package/dist/core/cookie-consent/useCookieConsent.js.map +1 -0
- package/dist/core/db/queries.d.ts +1 -0
- package/dist/core/db/queries.d.ts.map +1 -1
- package/dist/core/db/queries.js +6 -0
- package/dist/core/db/queries.js.map +1 -1
- package/dist/core/db/schema.d.ts +17 -0
- package/dist/core/db/schema.d.ts.map +1 -1
- package/dist/core/db/schema.js +5 -0
- package/dist/core/db/schema.js.map +1 -1
- package/dist/core/server/index.d.ts +1 -1
- package/dist/core/server/index.d.ts.map +1 -1
- package/dist/core/server/index.js +3 -1
- package/dist/core/server/index.js.map +1 -1
- package/package.json +5 -1
package/dist/admin/config.d.ts
CHANGED
|
@@ -1,36 +1,35 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @rovela/sdk/admin/config
|
|
2
|
+
* @rovela-ai/sdk/admin/config
|
|
3
3
|
*
|
|
4
|
-
* NextAuth configuration for
|
|
5
|
-
* Uses JWT strategy with credentials provider.
|
|
4
|
+
* NextAuth configuration for STORE ADMIN authentication.
|
|
6
5
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* Completely separate from customer auth:
|
|
7
|
+
* - Mounts at its OWN NextAuth endpoint: `/api/admin-auth/[...nextauth]`
|
|
8
|
+
* - Writes its OWN session cookie: `__Secure-rovela.admin.session-token`
|
|
9
|
+
* - Uses only the `admin-credentials` provider
|
|
10
|
+
*
|
|
11
|
+
* Because the cookie name differs from customer auth, both sessions can
|
|
12
|
+
* coexist in the same browser — a merchant can be signed into `/admin` as
|
|
13
|
+
* an admin AND signed into `/account` as a customer simultaneously. This
|
|
14
|
+
* is the foundation of the "linked customer" feature.
|
|
15
|
+
*
|
|
16
|
+
* `sameSite: 'none'` + `secure: true` is required for the Rovela preview
|
|
17
|
+
* iframe (rovela.ai embeds the sandbox storefront cross-origin).
|
|
11
18
|
*/
|
|
12
19
|
import type { NextAuthOptions } from 'next-auth';
|
|
13
20
|
import type { AdminSession, AdminAuthConfigOptions } from './types';
|
|
14
21
|
/**
|
|
15
|
-
* Create NextAuth options for
|
|
16
|
-
*
|
|
17
|
-
* @deprecated The Rovela sandbox template mounts exactly ONE NextAuth
|
|
18
|
-
* endpoint at `/api/auth/[...nextauth]`, wired to `createAuthOptions()`
|
|
19
|
-
* from `@rovela-ai/sdk/auth` — which already knows both the `credentials`
|
|
20
|
-
* and `admin-credentials` providers. `requireAdmin()` reads sessions via
|
|
21
|
-
* that same unified config, so the cookie name and SameSite policy match
|
|
22
|
-
* between write and read.
|
|
23
|
-
*
|
|
24
|
-
* Mounting a separate `/api/admin/auth/[...nextauth]` with this function
|
|
25
|
-
* creates a second cookie namespace that will NOT be read by
|
|
26
|
-
* `requireAdmin()`. Every admin API call will return 401.
|
|
22
|
+
* Create NextAuth options for STORE ADMIN authentication.
|
|
27
23
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* // app/api/admin-auth/[...nextauth]/route.ts
|
|
27
|
+
* import NextAuth from 'next-auth'
|
|
28
|
+
* import { createAdminAuthOptions } from '@rovela-ai/sdk/admin'
|
|
31
29
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
30
|
+
* const handler = NextAuth(createAdminAuthOptions())
|
|
31
|
+
* export { handler as GET, handler as POST }
|
|
32
|
+
* ```
|
|
34
33
|
*/
|
|
35
34
|
export declare function createAdminAuthOptions(options?: AdminAuthConfigOptions): NextAuthOptions;
|
|
36
35
|
/**
|
|
@@ -42,7 +41,7 @@ export declare function createAdminAuthOptions(options?: AdminAuthConfigOptions)
|
|
|
42
41
|
*
|
|
43
42
|
* @example
|
|
44
43
|
* ```typescript
|
|
45
|
-
* const session = await getServerSession(
|
|
44
|
+
* const session = await getServerSession(createAdminAuthOptions())
|
|
46
45
|
* if (session?.user?.id) {
|
|
47
46
|
* const admin = await getAdminSession(session.user.id)
|
|
48
47
|
* }
|
|
@@ -50,27 +49,20 @@ export declare function createAdminAuthOptions(options?: AdminAuthConfigOptions)
|
|
|
50
49
|
*/
|
|
51
50
|
export declare function getAdminSession(adminId: string): Promise<AdminSession | null>;
|
|
52
51
|
/**
|
|
53
|
-
* Default admin auth configuration.
|
|
54
|
-
* Use this if you don't need custom options.
|
|
52
|
+
* Default admin auth configuration (no options).
|
|
55
53
|
*/
|
|
56
54
|
export declare const adminAuthConfig: NextAuthOptions;
|
|
57
55
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
* @example
|
|
62
|
-
* ```typescript
|
|
63
|
-
* // app/api/admin/auth/[...nextauth]/route.ts
|
|
64
|
-
* import NextAuth from 'next-auth'
|
|
65
|
-
* import { adminAuthConfig } from '@rovela/sdk/admin'
|
|
66
|
-
* const handler = NextAuth(adminAuthConfig)
|
|
56
|
+
* @deprecated Use `createAdminAuthOptions()` directly in a route handler:
|
|
57
|
+
* ```ts
|
|
58
|
+
* const handler = NextAuth(createAdminAuthOptions())
|
|
67
59
|
* export { handler as GET, handler as POST }
|
|
68
60
|
* ```
|
|
69
61
|
*/
|
|
70
62
|
export declare function createAdminNextAuthHandler(): () => Promise<any>;
|
|
71
63
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
64
|
+
* @deprecated Mount the endpoint manually (see `createAdminAuthOptions`).
|
|
65
|
+
* Kept so existing SDK consumers don't error on import.
|
|
74
66
|
*/
|
|
75
67
|
export declare const adminAuthHandlers: {
|
|
76
68
|
GET: () => Promise<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/admin/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/admin/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,WAAW,CAAA;AAI/D,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAwBnE;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,sBAA2B,GACnC,eAAe,CAsLjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAE9B;AA+BD;;GAEG;AACH,eAAO,MAAM,eAAe,iBAA2B,CAAA;AAEvD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,uBAMzC;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;CAG7B,CAAA"}
|
package/dist/admin/config.js
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @rovela/sdk/admin/config
|
|
2
|
+
* @rovela-ai/sdk/admin/config
|
|
3
3
|
*
|
|
4
|
-
* NextAuth configuration for
|
|
5
|
-
* Uses JWT strategy with credentials provider.
|
|
4
|
+
* NextAuth configuration for STORE ADMIN authentication.
|
|
6
5
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* Completely separate from customer auth:
|
|
7
|
+
* - Mounts at its OWN NextAuth endpoint: `/api/admin-auth/[...nextauth]`
|
|
8
|
+
* - Writes its OWN session cookie: `__Secure-rovela.admin.session-token`
|
|
9
|
+
* - Uses only the `admin-credentials` provider
|
|
10
|
+
*
|
|
11
|
+
* Because the cookie name differs from customer auth, both sessions can
|
|
12
|
+
* coexist in the same browser — a merchant can be signed into `/admin` as
|
|
13
|
+
* an admin AND signed into `/account` as a customer simultaneously. This
|
|
14
|
+
* is the foundation of the "linked customer" feature.
|
|
15
|
+
*
|
|
16
|
+
* `sameSite: 'none'` + `secure: true` is required for the Rovela preview
|
|
17
|
+
* iframe (rovela.ai embeds the sandbox storefront cross-origin).
|
|
11
18
|
*/
|
|
12
19
|
import CredentialsProvider from 'next-auth/providers/credentials';
|
|
13
20
|
import { authenticateAdmin, findAdminForSession } from './server/admin-service';
|
|
@@ -15,36 +22,34 @@ import { authenticateAdmin, findAdminForSession } from './server/admin-service';
|
|
|
15
22
|
// Constants
|
|
16
23
|
// =============================================================================
|
|
17
24
|
/**
|
|
18
|
-
* Default session duration:
|
|
19
|
-
*
|
|
25
|
+
* Default admin session duration: 24 hours.
|
|
26
|
+
*
|
|
27
|
+
* Matches the customer default because merchants expect parity between
|
|
28
|
+
* the two sessions. With `rememberMe=true` this extends to 30 days.
|
|
29
|
+
*/
|
|
30
|
+
const DEFAULT_SESSION_MAX_AGE = 24 * 60 * 60;
|
|
31
|
+
/**
|
|
32
|
+
* Remember-me session duration: 30 days.
|
|
20
33
|
*/
|
|
21
|
-
const
|
|
34
|
+
const REMEMBER_ME_MAX_AGE = 30 * 24 * 60 * 60;
|
|
22
35
|
// =============================================================================
|
|
23
36
|
// Auth Configuration
|
|
24
37
|
// =============================================================================
|
|
25
38
|
/**
|
|
26
|
-
* Create NextAuth options for
|
|
39
|
+
* Create NextAuth options for STORE ADMIN authentication.
|
|
27
40
|
*
|
|
28
|
-
* @
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* between write and read.
|
|
34
|
-
*
|
|
35
|
-
* Mounting a separate `/api/admin/auth/[...nextauth]` with this function
|
|
36
|
-
* creates a second cookie namespace that will NOT be read by
|
|
37
|
-
* `requireAdmin()`. Every admin API call will return 401.
|
|
38
|
-
*
|
|
39
|
-
* Use `createAuthOptions()` from `@rovela-ai/sdk/auth` instead. This
|
|
40
|
-
* function is kept to preserve SDK API compatibility for existing
|
|
41
|
-
* consumers and will be removed in a future major release.
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* // app/api/admin-auth/[...nextauth]/route.ts
|
|
44
|
+
* import NextAuth from 'next-auth'
|
|
45
|
+
* import { createAdminAuthOptions } from '@rovela-ai/sdk/admin'
|
|
42
46
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
47
|
+
* const handler = NextAuth(createAdminAuthOptions())
|
|
48
|
+
* export { handler as GET, handler as POST }
|
|
49
|
+
* ```
|
|
45
50
|
*/
|
|
46
51
|
export function createAdminAuthOptions(options = {}) {
|
|
47
|
-
const { sessionMaxAge = DEFAULT_SESSION_MAX_AGE, signInPage = '/admin/login', errorPage = '/admin/login', dashboardPage = '/admin', } = options;
|
|
52
|
+
const { sessionMaxAge = DEFAULT_SESSION_MAX_AGE, rememberMeMaxAge = REMEMBER_ME_MAX_AGE, signInPage = '/admin/login', errorPage = '/admin/login', dashboardPage = '/admin', } = options;
|
|
48
53
|
return {
|
|
49
54
|
providers: [
|
|
50
55
|
CredentialsProvider({
|
|
@@ -54,6 +59,7 @@ export function createAdminAuthOptions(options = {}) {
|
|
|
54
59
|
credentials: {
|
|
55
60
|
email: { label: 'Email', type: 'email' },
|
|
56
61
|
password: { label: 'Password', type: 'password' },
|
|
62
|
+
rememberMe: { label: 'Remember Me', type: 'checkbox' },
|
|
57
63
|
},
|
|
58
64
|
async authorize(credentials) {
|
|
59
65
|
if (!credentials?.email || !credentials?.password) {
|
|
@@ -61,12 +67,11 @@ export function createAdminAuthOptions(options = {}) {
|
|
|
61
67
|
}
|
|
62
68
|
const result = await authenticateAdmin(credentials.email, credentials.password);
|
|
63
69
|
if (!result.success) {
|
|
64
|
-
// Throw error with specific code for frontend handling
|
|
65
70
|
throw new Error(result.error, { cause: result.code });
|
|
66
71
|
}
|
|
67
|
-
//
|
|
68
|
-
//
|
|
69
|
-
//
|
|
72
|
+
// `sessionVersion` is embedded in the JWT so `requireAdmin` can
|
|
73
|
+
// detect forced logouts after password changes (Phase 4 session
|
|
74
|
+
// versioning). See admin-session.ts.
|
|
70
75
|
const sessionVersion = result.admin.sessionVersion ?? 0;
|
|
71
76
|
return {
|
|
72
77
|
id: result.admin.id,
|
|
@@ -74,41 +79,67 @@ export function createAdminAuthOptions(options = {}) {
|
|
|
74
79
|
name: result.admin.name,
|
|
75
80
|
role: result.admin.role,
|
|
76
81
|
sessionVersion,
|
|
82
|
+
rememberMe: credentials.rememberMe === 'true',
|
|
77
83
|
};
|
|
78
84
|
},
|
|
79
85
|
}),
|
|
80
86
|
],
|
|
87
|
+
// Cookie + JWT lifetime ceiling is the longest possible session (30 days)
|
|
88
|
+
// so "keep me signed in" cookies outlast shorter per-session expiries.
|
|
89
|
+
// Per-session expiration is enforced by `token.exp` in the JWT callback.
|
|
81
90
|
session: {
|
|
82
91
|
strategy: 'jwt',
|
|
83
|
-
maxAge:
|
|
92
|
+
maxAge: rememberMeMaxAge,
|
|
84
93
|
},
|
|
85
94
|
jwt: {
|
|
86
|
-
maxAge:
|
|
95
|
+
maxAge: rememberMeMaxAge,
|
|
87
96
|
},
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
//
|
|
97
|
+
pages: {
|
|
98
|
+
signIn: signInPage,
|
|
99
|
+
error: errorPage,
|
|
100
|
+
},
|
|
101
|
+
// =========================================================================
|
|
102
|
+
// Cookie Configuration
|
|
103
|
+
// =========================================================================
|
|
104
|
+
// Admin-specific cookie names so the admin session lives in a completely
|
|
105
|
+
// separate cookie jar from the customer session. Both can coexist in the
|
|
106
|
+
// same browser; neither can be mistaken for the other.
|
|
107
|
+
//
|
|
108
|
+
// `sameSite: 'none'` + `secure: true` is required for cross-origin iframe
|
|
109
|
+
// contexts (the rovela.ai preview embeds the sandbox storefront, and the
|
|
110
|
+
// admin login page posts credentials via postMessage through that frame).
|
|
93
111
|
cookies: {
|
|
94
112
|
sessionToken: {
|
|
95
|
-
name:
|
|
113
|
+
name: `__Secure-rovela.admin.session-token`,
|
|
96
114
|
options: {
|
|
97
115
|
httpOnly: true,
|
|
98
|
-
sameSite: '
|
|
116
|
+
sameSite: 'none',
|
|
99
117
|
path: '/',
|
|
100
|
-
secure:
|
|
118
|
+
secure: true,
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
callbackUrl: {
|
|
122
|
+
name: `__Secure-rovela.admin.callback-url`,
|
|
123
|
+
options: {
|
|
124
|
+
sameSite: 'none',
|
|
125
|
+
path: '/',
|
|
126
|
+
secure: true,
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
csrfToken: {
|
|
130
|
+
name: `__Host-rovela.admin.csrf-token`,
|
|
131
|
+
options: {
|
|
132
|
+
httpOnly: true,
|
|
133
|
+
sameSite: 'none',
|
|
134
|
+
path: '/',
|
|
135
|
+
secure: true,
|
|
101
136
|
},
|
|
102
137
|
},
|
|
103
|
-
},
|
|
104
|
-
pages: {
|
|
105
|
-
signIn: signInPage,
|
|
106
|
-
error: errorPage,
|
|
107
138
|
},
|
|
108
139
|
callbacks: {
|
|
109
|
-
async jwt({ token, user }) {
|
|
110
|
-
// Cast token to admin type for custom fields
|
|
140
|
+
async jwt({ token, user, trigger, session }) {
|
|
111
141
|
const adminToken = token;
|
|
142
|
+
const now = Math.floor(Date.now() / 1000);
|
|
112
143
|
// Initial sign in
|
|
113
144
|
if (user) {
|
|
114
145
|
const adminUser = user;
|
|
@@ -117,11 +148,29 @@ export function createAdminAuthOptions(options = {}) {
|
|
|
117
148
|
adminToken.name = user.name ?? undefined;
|
|
118
149
|
adminToken.role = adminUser.role;
|
|
119
150
|
adminToken.sessionVersion = adminUser.sessionVersion ?? 0;
|
|
151
|
+
// Persist rememberMe + originalIat so silent refreshes can
|
|
152
|
+
// recompute the same absolute exp without sliding the session.
|
|
153
|
+
const rememberMe = Boolean(adminUser.rememberMe);
|
|
154
|
+
adminToken.rememberMe = rememberMe;
|
|
155
|
+
adminToken.originalIat = now;
|
|
156
|
+
const effectiveMaxAge = rememberMe ? rememberMeMaxAge : sessionMaxAge;
|
|
157
|
+
adminToken.exp = now + effectiveMaxAge;
|
|
158
|
+
}
|
|
159
|
+
else if (adminToken.originalIat) {
|
|
160
|
+
// Silent refresh — re-apply absolute exp from originalIat.
|
|
161
|
+
const rememberMe = Boolean(adminToken.rememberMe);
|
|
162
|
+
const effectiveMaxAge = rememberMe ? rememberMeMaxAge : sessionMaxAge;
|
|
163
|
+
adminToken.exp = adminToken.originalIat + effectiveMaxAge;
|
|
164
|
+
}
|
|
165
|
+
// Update trigger (client calling useSession().update())
|
|
166
|
+
if (trigger === 'update' && session) {
|
|
167
|
+
if (session.name !== undefined) {
|
|
168
|
+
adminToken.name = session.name;
|
|
169
|
+
}
|
|
120
170
|
}
|
|
121
171
|
return token;
|
|
122
172
|
},
|
|
123
173
|
async session({ session, token }) {
|
|
124
|
-
// Build admin session from token
|
|
125
174
|
if (token) {
|
|
126
175
|
const adminToken = token;
|
|
127
176
|
const user = session.user;
|
|
@@ -134,7 +183,6 @@ export function createAdminAuthOptions(options = {}) {
|
|
|
134
183
|
return session;
|
|
135
184
|
},
|
|
136
185
|
async redirect({ url, baseUrl }) {
|
|
137
|
-
// Handle redirects after sign in
|
|
138
186
|
if (url.startsWith('/')) {
|
|
139
187
|
return `${baseUrl}${url}`;
|
|
140
188
|
}
|
|
@@ -152,7 +200,6 @@ export function createAdminAuthOptions(options = {}) {
|
|
|
152
200
|
console.log(`[Admin Auth] Admin signed out: ${token?.email}`);
|
|
153
201
|
},
|
|
154
202
|
},
|
|
155
|
-
// Enable debug in development
|
|
156
203
|
debug: process.env.NODE_ENV === 'development',
|
|
157
204
|
};
|
|
158
205
|
}
|
|
@@ -165,7 +212,7 @@ export function createAdminAuthOptions(options = {}) {
|
|
|
165
212
|
*
|
|
166
213
|
* @example
|
|
167
214
|
* ```typescript
|
|
168
|
-
* const session = await getServerSession(
|
|
215
|
+
* const session = await getServerSession(createAdminAuthOptions())
|
|
169
216
|
* if (session?.user?.id) {
|
|
170
217
|
* const admin = await getAdminSession(session.user.id)
|
|
171
218
|
* }
|
|
@@ -175,28 +222,20 @@ export async function getAdminSession(adminId) {
|
|
|
175
222
|
return findAdminForSession(adminId);
|
|
176
223
|
}
|
|
177
224
|
// =============================================================================
|
|
178
|
-
// Convenience Exports
|
|
225
|
+
// Convenience Exports (kept for backward API compatibility)
|
|
179
226
|
// =============================================================================
|
|
180
227
|
/**
|
|
181
|
-
* Default admin auth configuration.
|
|
182
|
-
* Use this if you don't need custom options.
|
|
228
|
+
* Default admin auth configuration (no options).
|
|
183
229
|
*/
|
|
184
230
|
export const adminAuthConfig = createAdminAuthOptions();
|
|
185
231
|
/**
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
* @example
|
|
190
|
-
* ```typescript
|
|
191
|
-
* // app/api/admin/auth/[...nextauth]/route.ts
|
|
192
|
-
* import NextAuth from 'next-auth'
|
|
193
|
-
* import { adminAuthConfig } from '@rovela/sdk/admin'
|
|
194
|
-
* const handler = NextAuth(adminAuthConfig)
|
|
232
|
+
* @deprecated Use `createAdminAuthOptions()` directly in a route handler:
|
|
233
|
+
* ```ts
|
|
234
|
+
* const handler = NextAuth(createAdminAuthOptions())
|
|
195
235
|
* export { handler as GET, handler as POST }
|
|
196
236
|
* ```
|
|
197
237
|
*/
|
|
198
238
|
export function createAdminNextAuthHandler() {
|
|
199
|
-
// Dynamic import to avoid issues
|
|
200
239
|
const createHandler = async () => {
|
|
201
240
|
const NextAuth = (await import('next-auth')).default;
|
|
202
241
|
return NextAuth(adminAuthConfig);
|
|
@@ -204,8 +243,8 @@ export function createAdminNextAuthHandler() {
|
|
|
204
243
|
return createHandler;
|
|
205
244
|
}
|
|
206
245
|
/**
|
|
207
|
-
*
|
|
208
|
-
*
|
|
246
|
+
* @deprecated Mount the endpoint manually (see `createAdminAuthOptions`).
|
|
247
|
+
* Kept so existing SDK consumers don't error on import.
|
|
209
248
|
*/
|
|
210
249
|
export const adminAuthHandlers = {
|
|
211
250
|
GET: createAdminNextAuthHandler(),
|
package/dist/admin/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/admin/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/admin/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,mBAAmB,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAI/E,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;AAE5C;;GAEG;AACH,MAAM,mBAAmB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;AAE7C,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAkC,EAAE;IAEpC,MAAM,EACJ,aAAa,GAAG,uBAAuB,EACvC,gBAAgB,GAAG,mBAAmB,EACtC,UAAU,GAAG,cAAc,EAC3B,SAAS,GAAG,cAAc,EAC1B,aAAa,GAAG,QAAQ,GACzB,GAAG,OAAO,CAAA;IAEX,OAAO;QACL,SAAS,EAAE;YACT,mBAAmB,CAAC;gBAClB,4DAA4D;gBAC5D,EAAE,EAAE,mBAAmB;gBACvB,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE;oBACX,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;oBACxC,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;oBACjD,UAAU,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE;iBACvD;gBACD,KAAK,CAAC,SAAS,CAAC,WAAW;oBACzB,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC;wBAClD,OAAO,IAAI,CAAA;oBACb,CAAC;oBAED,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC,WAAW,CAAC,KAAK,EACjB,WAAW,CAAC,QAAQ,CACrB,CAAA;oBAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;oBACvD,CAAC;oBAED,gEAAgE;oBAChE,gEAAgE;oBAChE,qCAAqC;oBACrC,MAAM,cAAc,GACjB,MAAM,CAAC,KAAqC,CAAC,cAAc,IAAI,CAAC,CAAA;oBACnE,OAAO;wBACL,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;wBACnB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK;wBACzB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;wBACvB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;wBACvB,cAAc;wBACd,UAAU,EAAE,WAAW,CAAC,UAAU,KAAK,MAAM;qBAC3B,CAAA;gBACtB,CAAC;aACF,CAAC;SACH;QAED,0EAA0E;QAC1E,uEAAuE;QACvE,yEAAyE;QACzE,OAAO,EAAE;YACP,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,gBAAgB;SACzB;QAED,GAAG,EAAE;YACH,MAAM,EAAE,gBAAgB;SACzB;QAED,KAAK,EAAE;YACL,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,SAAS;SACjB;QAED,4EAA4E;QAC5E,uBAAuB;QACvB,4EAA4E;QAC5E,yEAAyE;QACzE,yEAAyE;QACzE,uDAAuD;QACvD,EAAE;QACF,0EAA0E;QAC1E,yEAAyE;QACzE,0EAA0E;QAC1E,OAAO,EAAE;YACP,YAAY,EAAE;gBACZ,IAAI,EAAE,qCAAqC;gBAC3C,OAAO,EAAE;oBACP,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,MAAM;oBAChB,IAAI,EAAE,GAAG;oBACT,MAAM,EAAE,IAAI;iBACb;aACF;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,oCAAoC;gBAC1C,OAAO,EAAE;oBACP,QAAQ,EAAE,MAAM;oBAChB,IAAI,EAAE,GAAG;oBACT,MAAM,EAAE,IAAI;iBACb;aACF;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,gCAAgC;gBACtC,OAAO,EAAE;oBACP,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,MAAM;oBAChB,IAAI,EAAE,GAAG;oBACT,MAAM,EAAE,IAAI;iBACb;aACF;SACF;QAED,SAAS,EAAE;YACT,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;gBACzC,MAAM,UAAU,GAAG,KAA4B,CAAA;gBAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;gBAEzC,kBAAkB;gBAClB,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,SAAS,GAAG,IAAiB,CAAA;oBACnC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;oBACvB,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAA;oBAC1C,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAA;oBACxC,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAA;oBAChC,UAAU,CAAC,cAAc,GAAG,SAAS,CAAC,cAAc,IAAI,CAAC,CAAA;oBAEzD,2DAA2D;oBAC3D,+DAA+D;oBAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;oBAChD,UAAU,CAAC,UAAU,GAAG,UAAU,CAAA;oBAClC,UAAU,CAAC,WAAW,GAAG,GAAG,CAAA;oBAE5B,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAA;oBACrE,UAAU,CAAC,GAAG,GAAG,GAAG,GAAG,eAAe,CAAA;gBACxC,CAAC;qBAAM,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;oBAClC,2DAA2D;oBAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;oBACjD,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAA;oBACrE,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,WAAW,GAAG,eAAe,CAAA;gBAC3D,CAAC;gBAED,wDAAwD;gBACxD,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAC;oBACpC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBAC/B,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;oBAChC,CAAC;gBACH,CAAC;gBAED,OAAO,KAAK,CAAA;YACd,CAAC;YAED,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC9B,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,UAAU,GAAG,KAA4B,CAAA;oBAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,IAA+B,CAAA;oBACpD,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,EAAY,CAAA;oBACjC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAe,CAAA;oBACvC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAc,CAAA;oBACrC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAiB,CAAA;oBACxC,IAAI,CAAC,cAAc,GAAI,UAAU,CAAC,cAAyB,IAAI,CAAC,CAAA;gBAClE,CAAC;gBAED,OAAO,OAAO,CAAA;YAChB,CAAC;YAED,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE;gBAC7B,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,OAAO,GAAG,OAAO,GAAG,GAAG,EAAE,CAAA;gBAC3B,CAAC;gBACD,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5B,OAAO,GAAG,CAAA;gBACZ,CAAC;gBACD,OAAO,GAAG,OAAO,GAAG,aAAa,EAAE,CAAA;YACrC,CAAC;SACF;QAED,MAAM,EAAE;YACN,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE;gBACnB,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;YAC5D,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE;gBACrB,OAAO,CAAC,GAAG,CAAC,kCAAkC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;YAC/D,CAAC;SACF;QAED,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;KAC9C,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe;IAEf,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAA;AACrC,CAAC;AA2BD,gFAAgF;AAChF,4DAA4D;AAC5D,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,EAAE,CAAA;AAEvD;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAA;QACpD,OAAO,QAAQ,CAAC,eAAe,CAAC,CAAA;IAClC,CAAC,CAAA;IACD,OAAO,aAAa,CAAA;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,GAAG,EAAE,0BAA0B,EAAE;IACjC,IAAI,EAAE,0BAA0B,EAAE;CACnC,CAAA"}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* Admin panel React hooks.
|
|
5
5
|
*/
|
|
6
6
|
export { useAdminAuth } from './useAdminAuth';
|
|
7
|
+
export { useAdminSession } from './useAdminSession';
|
|
8
|
+
export type { AdminSessionPayload, AdminSessionStatus, UseAdminSessionReturn, } from './useAdminSession';
|
|
7
9
|
export { useAdminStats } from './useAdminStats';
|
|
8
10
|
export { useAdminOrders } from './useAdminOrders';
|
|
9
11
|
export { useAdminProducts } from './useAdminProducts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/admin/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AACnE,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AACrE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/admin/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AACnE,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AACrE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Admin panel React hooks.
|
|
5
5
|
*/
|
|
6
6
|
export { useAdminAuth } from './useAdminAuth';
|
|
7
|
+
export { useAdminSession } from './useAdminSession';
|
|
7
8
|
export { useAdminStats } from './useAdminStats';
|
|
8
9
|
export { useAdminOrders } from './useAdminOrders';
|
|
9
10
|
export { useAdminProducts } from './useAdminProducts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAMnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA"}
|
|
@@ -2,25 +2,14 @@ import type { UseAdminAuthReturn } from '../types';
|
|
|
2
2
|
/**
|
|
3
3
|
* Admin authentication hook for auth state and actions.
|
|
4
4
|
*
|
|
5
|
-
* @returns Admin auth state and methods
|
|
6
|
-
*
|
|
7
5
|
* @example
|
|
8
6
|
* ```typescript
|
|
9
7
|
* function AdminDashboard() {
|
|
10
|
-
* const {
|
|
11
|
-
*
|
|
12
|
-
* isAuthenticated,
|
|
13
|
-
* isLoading,
|
|
14
|
-
* isOwner,
|
|
15
|
-
* signIn,
|
|
16
|
-
* signOut,
|
|
17
|
-
* } = useAdminAuth()
|
|
8
|
+
* const { admin, isAuthenticated, isLoading, isOwner, signIn, signOut } =
|
|
9
|
+
* useAdminAuth()
|
|
18
10
|
*
|
|
19
11
|
* if (isLoading) return <div>Loading...</div>
|
|
20
|
-
*
|
|
21
|
-
* if (!isAuthenticated) {
|
|
22
|
-
* return <AdminLoginForm />
|
|
23
|
-
* }
|
|
12
|
+
* if (!isAuthenticated) return <AdminLoginForm />
|
|
24
13
|
*
|
|
25
14
|
* return (
|
|
26
15
|
* <div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAdminAuth.d.ts","sourceRoot":"","sources":["../../../src/admin/hooks/useAdminAuth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAdminAuth.d.ts","sourceRoot":"","sources":["../../../src/admin/hooks/useAdminAuth.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAIV,kBAAkB,EACnB,MAAM,UAAU,CAAA;AAYjB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,IAAI,kBAAkB,CAoJjD"}
|