@artatol-acp/auth-nextjs 0.3.7 → 0.4.0

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.
@@ -1,31 +1,63 @@
1
1
  import { cookies } from 'next/headers';
2
2
  import { ACPAuthClient } from '@artatol-acp/auth-js';
3
3
  import { jwtVerify, importSPKI } from 'jose';
4
- let authClient = null;
5
4
  let publicKey = null;
6
5
  let config = null;
7
6
  export function initACPAuth(options) {
8
7
  config = options;
9
- authClient = new ACPAuthClient({
10
- baseUrl: options.baseUrl,
11
- apiKey: options.apiKey,
12
- });
13
- return authClient;
14
8
  }
15
- async function getPublicKey() {
9
+ function getConfig() {
16
10
  if (!config) {
17
11
  throw new Error('ACP Auth not initialized. Call initACPAuth() first.');
18
12
  }
13
+ return config;
14
+ }
15
+ function getCookieOptions() {
16
+ const cfg = getConfig();
17
+ return {
18
+ path: cfg.cookies?.path ?? '/',
19
+ secure: cfg.cookies?.secure ?? process.env.NODE_ENV === 'production',
20
+ sameSite: cfg.cookies?.sameSite ?? 'lax',
21
+ };
22
+ }
23
+ async function getPublicKey() {
24
+ const cfg = getConfig();
19
25
  if (!publicKey) {
20
- publicKey = await importSPKI(config.jwtPublicKey, 'EdDSA');
26
+ publicKey = await importSPKI(cfg.jwtPublicKey, 'EdDSA');
21
27
  }
22
28
  return publicKey;
23
29
  }
24
- function getClient() {
25
- if (!authClient) {
26
- throw new Error('ACP Auth not initialized. Call initACPAuth() first.');
27
- }
28
- return authClient;
30
+ /**
31
+ * Create a client that forwards the refresh_token cookie to the auth server
32
+ */
33
+ async function createServerClient() {
34
+ const cfg = getConfig();
35
+ const cookieStore = await cookies();
36
+ const refreshToken = cookieStore.get('refresh_token')?.value;
37
+ return new ACPAuthClient({
38
+ baseUrl: cfg.baseUrl,
39
+ apiKey: cfg.apiKey ?? '',
40
+ autoRefresh: false,
41
+ // Custom fetch that forwards the refresh_token cookie
42
+ fetch: async (url, init) => {
43
+ const headers = new Headers(init?.headers);
44
+ if (refreshToken) {
45
+ headers.set('Cookie', `refresh_token=${refreshToken}`);
46
+ }
47
+ return fetch(url, { ...init, headers });
48
+ },
49
+ });
50
+ }
51
+ /**
52
+ * Create a simple client without cookie forwarding (for public endpoints)
53
+ */
54
+ function createSimpleClient() {
55
+ const cfg = getConfig();
56
+ return new ACPAuthClient({
57
+ baseUrl: cfg.baseUrl,
58
+ apiKey: cfg.apiKey ?? '',
59
+ autoRefresh: false,
60
+ });
29
61
  }
30
62
  export async function verifyAccessToken(token) {
31
63
  const key = await getPublicKey();
@@ -38,7 +70,7 @@ export async function verifyAccessToken(token) {
38
70
  email: payload.email,
39
71
  };
40
72
  }
41
- catch (error) {
73
+ catch {
42
74
  throw new Error('Invalid access token');
43
75
  }
44
76
  }
@@ -56,17 +88,18 @@ export async function getUser() {
56
88
  }
57
89
  }
58
90
  export async function refreshAccessToken() {
59
- const client = getClient();
91
+ const cookieOpts = getCookieOptions();
60
92
  try {
93
+ const client = await createServerClient();
61
94
  const { accessToken } = await client.refresh();
62
95
  // Set new access token cookie
63
96
  const cookieStore = await cookies();
64
97
  cookieStore.set('access_token', accessToken, {
65
98
  httpOnly: true,
66
- secure: process.env.NODE_ENV === 'production',
67
- sameSite: 'lax',
99
+ secure: cookieOpts.secure,
100
+ sameSite: cookieOpts.sameSite,
68
101
  maxAge: 60 * 5, // 5 minutes
69
- path: '/',
102
+ path: cookieOpts.path,
70
103
  });
71
104
  return accessToken;
72
105
  }
@@ -75,24 +108,54 @@ export async function refreshAccessToken() {
75
108
  }
76
109
  }
77
110
  export async function login(email, password) {
78
- const client = getClient();
111
+ const client = createSimpleClient();
79
112
  const result = await client.login({ email, password });
113
+ const cookieOpts = getCookieOptions();
80
114
  if ('accessToken' in result) {
81
- // Set access token cookie
115
+ // Set both access token and refresh token cookies
82
116
  const cookieStore = await cookies();
83
117
  cookieStore.set('access_token', result.accessToken, {
84
118
  httpOnly: true,
85
- secure: process.env.NODE_ENV === 'production',
86
- sameSite: 'lax',
119
+ secure: cookieOpts.secure,
120
+ sameSite: cookieOpts.sameSite,
87
121
  maxAge: 60 * 5, // 5 minutes
88
- path: '/',
122
+ path: cookieOpts.path,
123
+ });
124
+ cookieStore.set('refresh_token', result.refreshToken, {
125
+ httpOnly: true,
126
+ secure: cookieOpts.secure,
127
+ sameSite: cookieOpts.sameSite,
128
+ maxAge: 60 * 60 * 24 * 30, // 30 days
129
+ path: cookieOpts.path,
89
130
  });
90
131
  }
91
132
  return result;
92
133
  }
134
+ export async function verify2FALogin(tempToken, code) {
135
+ const client = createSimpleClient();
136
+ const result = await client.verify2FALogin({ tempToken, code });
137
+ const cookieOpts = getCookieOptions();
138
+ // Set both access token and refresh token cookies
139
+ const cookieStore = await cookies();
140
+ cookieStore.set('access_token', result.accessToken, {
141
+ httpOnly: true,
142
+ secure: cookieOpts.secure,
143
+ sameSite: cookieOpts.sameSite,
144
+ maxAge: 60 * 5, // 5 minutes
145
+ path: cookieOpts.path,
146
+ });
147
+ cookieStore.set('refresh_token', result.refreshToken, {
148
+ httpOnly: true,
149
+ secure: cookieOpts.secure,
150
+ sameSite: cookieOpts.sameSite,
151
+ maxAge: 60 * 60 * 24 * 30, // 30 days
152
+ path: cookieOpts.path,
153
+ });
154
+ return { user: result.user };
155
+ }
93
156
  export async function logout() {
94
- const client = getClient();
95
157
  try {
158
+ const client = await createServerClient();
96
159
  await client.logout();
97
160
  }
98
161
  finally {
@@ -103,15 +166,15 @@ export async function logout() {
103
166
  }
104
167
  }
105
168
  export async function register(email, password) {
106
- const client = getClient();
169
+ const client = createSimpleClient();
107
170
  return await client.register({ email, password });
108
171
  }
109
172
  export async function verifyEmail(token) {
110
- const client = getClient();
173
+ const client = createSimpleClient();
111
174
  return await client.verifyEmail({ token });
112
175
  }
113
176
  export async function resendVerificationEmail(email) {
114
- const client = getClient();
177
+ const client = createSimpleClient();
115
178
  return await client.resendVerificationEmail({ email });
116
179
  }
117
180
  export async function me() {
@@ -120,7 +183,7 @@ export async function me() {
120
183
  if (!accessToken) {
121
184
  return null;
122
185
  }
123
- const client = getClient();
186
+ const client = createSimpleClient();
124
187
  try {
125
188
  return await client.me(accessToken);
126
189
  }
@@ -129,11 +192,11 @@ export async function me() {
129
192
  }
130
193
  }
131
194
  export async function forgotPassword(email) {
132
- const client = getClient();
195
+ const client = createSimpleClient();
133
196
  return await client.forgotPassword({ email });
134
197
  }
135
198
  export async function resetPassword(token, newPassword) {
136
- const client = getClient();
199
+ const client = createSimpleClient();
137
200
  return await client.resetPassword({ token, newPassword });
138
201
  }
139
202
  export async function deleteAccount(password, confirmation) {
@@ -142,7 +205,7 @@ export async function deleteAccount(password, confirmation) {
142
205
  if (!accessToken) {
143
206
  throw new Error('Not authenticated');
144
207
  }
145
- const client = getClient();
208
+ const client = createSimpleClient();
146
209
  const result = await client.deleteAccount({ password, confirmation }, accessToken);
147
210
  // Clear cookies after account deletion
148
211
  cookieStore.delete('access_token');
@@ -150,5 +213,5 @@ export async function deleteAccount(password, confirmation) {
150
213
  return result;
151
214
  }
152
215
  // Re-export client for direct use if needed
153
- export { ACPAuthClient } from '@artatol-acp/auth-js';
216
+ export { ACPAuthClient, ACPAuthError } from '@artatol-acp/auth-js';
154
217
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@artatol-acp/auth-nextjs",
3
- "version": "0.3.7",
3
+ "version": "0.4.0",
4
4
  "description": "Next.js SDK for Artatol Cloud Platform Authentication with support for App Router, Server Actions, and Middleware",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -15,9 +15,13 @@
15
15
  "types": "./dist/server/index.d.ts"
16
16
  },
17
17
  "./client": {
18
- "import": "./dist/client/index.jsx",
18
+ "import": "./dist/client/index.js",
19
19
  "types": "./dist/client/index.d.ts"
20
20
  },
21
+ "./handlers": {
22
+ "import": "./dist/handlers/index.js",
23
+ "types": "./dist/handlers/index.d.ts"
24
+ },
21
25
  "./middleware": {
22
26
  "import": "./dist/middleware.js",
23
27
  "types": "./dist/middleware.d.ts"
@@ -37,11 +41,11 @@
37
41
  "author": "Artatol",
38
42
  "license": "MIT",
39
43
  "peerDependencies": {
40
- "next": "^14.0.0 || ^15.0.0",
44
+ "next": "^14.0.0 || ^15.0.0 || ^16.0.0",
41
45
  "react": "^18.0.0 || ^19.0.0"
42
46
  },
43
47
  "dependencies": {
44
- "@artatol-acp/auth-js": "^0.3.6",
48
+ "@artatol-acp/auth-js": "^0.4.0",
45
49
  "jose": "^5.9.6"
46
50
  },
47
51
  "devDependencies": {
@@ -1,91 +0,0 @@
1
- /** @jsxImportSource react */
2
- 'use client';
3
- import { ACPAuthClient } from '@artatol-acp/auth-js';
4
- import { createContext, useContext, useState, useEffect, useRef, useCallback } from 'react';
5
- const ACPAuthContext = createContext(null);
6
- export function ACPAuthProvider({ children, baseUrl }) {
7
- const [user, setUser] = useState(null);
8
- const [isLoading, setIsLoading] = useState(true);
9
- const clientRef = useRef(new ACPAuthClient({
10
- baseUrl,
11
- apiKey: '',
12
- autoRefresh: true,
13
- refreshThresholdSeconds: 60
14
- }));
15
- const intervalRef = useRef(null);
16
- const clearRefreshInterval = useCallback(() => {
17
- if (intervalRef.current) {
18
- clearInterval(intervalRef.current);
19
- intervalRef.current = null;
20
- }
21
- }, []);
22
- const refresh = useCallback(async () => {
23
- try {
24
- await clientRef.current.refresh();
25
- const userData = await clientRef.current.me();
26
- setUser(userData);
27
- return true;
28
- }
29
- catch {
30
- return false;
31
- }
32
- }, []);
33
- const login = useCallback(async (email, password) => {
34
- const result = await clientRef.current.login({ email, password });
35
- if ('requiresTwoFactor' in result) {
36
- throw new Error('2FA_REQUIRED');
37
- }
38
- // User logged in successfully, token is automatically set in client
39
- setUser(result.user);
40
- }, []);
41
- const logout = useCallback(async () => {
42
- // First clear the interval to prevent race conditions
43
- clearRefreshInterval();
44
- // Then clear user state
45
- setUser(null);
46
- // Finally call logout API
47
- try {
48
- await clientRef.current.logout();
49
- }
50
- catch {
51
- // Ignore logout errors, user is already logged out locally
52
- }
53
- }, [clearRefreshInterval]);
54
- const resendVerification = useCallback(async (email) => {
55
- await clientRef.current.resendVerificationEmail({ email });
56
- }, []);
57
- // Initial session restore
58
- useEffect(() => {
59
- refresh().finally(() => setIsLoading(false));
60
- }, [refresh]);
61
- // Auto-refresh interval
62
- useEffect(() => {
63
- if (!user) {
64
- clearRefreshInterval();
65
- return;
66
- }
67
- const REFRESH_INTERVAL = 4 * 60 * 1000; // 4 minutes
68
- intervalRef.current = setInterval(() => {
69
- refresh().then(success => {
70
- if (!success) {
71
- clearRefreshInterval();
72
- setUser(null);
73
- }
74
- });
75
- }, REFRESH_INTERVAL);
76
- return clearRefreshInterval;
77
- }, [user, refresh, clearRefreshInterval]);
78
- return (<ACPAuthContext.Provider value={{ user, isLoading, login, logout, refresh, resendVerification }}>
79
- {children}
80
- </ACPAuthContext.Provider>);
81
- }
82
- export function useAuth() {
83
- const context = useContext(ACPAuthContext);
84
- if (!context) {
85
- throw new Error('useAuth must be used within ACPAuthProvider');
86
- }
87
- return context;
88
- }
89
- // Re-export client for direct use
90
- export { ACPAuthClient } from '@artatol-acp/auth-js';
91
- //# sourceMappingURL=index.jsx.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/client/index.tsx"],"names":[],"mappings":"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"}