@mavenmm/teamwork-auth 2.0.2 → 2.0.4

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/CLAUDE.md ADDED
@@ -0,0 +1,491 @@
1
+ # @mavenmm/teamwork-auth - AI Assistant Guide
2
+
3
+ This file provides guidance for AI assistants (like Claude Code) when helping developers use this package.
4
+
5
+ ## Package Overview
6
+
7
+ **@mavenmm/teamwork-auth** is a React authentication package for Maven Marketing's centralized SSO system. It provides zero-configuration authentication with automatic environment detection.
8
+
9
+ ## Quick Start
10
+
11
+ ```tsx
12
+ import { useTeamworkAuth, Login } from '@mavenmm/teamwork-auth';
13
+
14
+ function App() {
15
+ const { user, isAuthenticated, loading, logout } = useTeamworkAuth();
16
+
17
+ if (loading) return <div>Loading...</div>;
18
+
19
+ if (!isAuthenticated) {
20
+ return <Login
21
+ clientID={import.meta.env.VITE_CLIENT_ID}
22
+ redirectURI={window.location.origin}
23
+ />;
24
+ }
25
+
26
+ return (
27
+ <div>
28
+ <h1>Welcome {user?.firstName}!</h1>
29
+ <button onClick={logout}>Logout</button>
30
+ </div>
31
+ );
32
+ }
33
+ ```
34
+
35
+ ## Environment Detection (Zero Config!)
36
+
37
+ The package automatically detects the environment:
38
+ - `localhost` → uses `http://localhost:9100` (local auth service)
39
+ - `*.mavenmm.com` → uses `https://auth.mavenmm.com` (production)
40
+ - `*.netlify.app` → uses `https://auth.mavenmm.com` (staging)
41
+
42
+ **No manual configuration needed!**
43
+
44
+ ## Required Environment Variables
45
+
46
+ ### For Development (Local Auth Service)
47
+ ```bash
48
+ # In your app's .env file:
49
+ VITE_CLIENT_ID=<teamwork_oauth_client_id>
50
+ VITE_REDIRECT_URI=http://localhost:3000
51
+ VITE_DOMAIN_KEY=dev_localhost_3000 # Must match auth service's DEV_KEY
52
+ ```
53
+
54
+ ### For Production
55
+ ```bash
56
+ # In your deployed app's environment:
57
+ VITE_CLIENT_ID=<teamwork_oauth_client_id>
58
+ VITE_REDIRECT_URI=https://your-app.mavenmm.com
59
+ VITE_DOMAIN_KEY=<unique_key_for_your_app> # Provided by auth.mavenmm.com admin
60
+ ```
61
+
62
+ ## Core API
63
+
64
+ ### `useTeamworkAuth(config?): AuthState`
65
+
66
+ Main authentication hook.
67
+
68
+ **Parameters:**
69
+ - `config` (optional): `TeamworkAuthConfig`
70
+ - `authServiceUrl`: Override auto-detected auth service URL (rarely needed)
71
+ - `domainKey`: Domain authentication key (auto-loaded from env)
72
+
73
+ **Returns:** `AuthState`
74
+ - `user`: User object or null
75
+ - `isAuthenticated`: boolean
76
+ - `loading`: boolean
77
+ - `error`: string or null
78
+ - `authServiceUrl`: Current auth service URL
79
+ - `login(code: string)`: Function to complete OAuth login
80
+ - `logout()`: Function to logout
81
+ - `getAccessToken()`: Function to get current access token
82
+
83
+ **Example:**
84
+ ```tsx
85
+ const { user, isAuthenticated, getAccessToken } = useTeamworkAuth();
86
+
87
+ // Optional: override config
88
+ const { user } = useTeamworkAuth({
89
+ domainKey: import.meta.env.VITE_DOMAIN_KEY,
90
+ });
91
+ ```
92
+
93
+ ### `<Login />` Component
94
+
95
+ Pre-built Teamwork login button.
96
+
97
+ **Props:**
98
+ - `clientID` (required): Teamwork OAuth client ID
99
+ - `redirectURI` (required): OAuth redirect URI (usually `window.location.origin`)
100
+ - `clientSecret` (optional): Not needed in production (handled by auth service)
101
+
102
+ **Example:**
103
+ ```tsx
104
+ <Login
105
+ clientID={import.meta.env.VITE_CLIENT_ID}
106
+ redirectURI={import.meta.env.VITE_REDIRECT_URI}
107
+ />
108
+ ```
109
+
110
+ ### `<AuthProvider />` Component
111
+
112
+ Context provider for auth state. **Usually not needed** - `useTeamworkAuth` hook handles this internally.
113
+
114
+ **Important:** Must be placed inside React Router's Router context if used directly.
115
+
116
+ ```tsx
117
+ import { BrowserRouter, Routes, Route } from 'react-router-dom';
118
+ import { AuthProvider } from '@mavenmm/teamwork-auth';
119
+
120
+ function App() {
121
+ return (
122
+ <BrowserRouter>
123
+ <AuthProvider>
124
+ <Routes>
125
+ <Route path="/" element={<Home />} />
126
+ </Routes>
127
+ </AuthProvider>
128
+ </BrowserRouter>
129
+ );
130
+ }
131
+ ```
132
+
133
+ ## TypeScript Types
134
+
135
+ ```tsx
136
+ import type {
137
+ User,
138
+ TeamworkAuthConfig,
139
+ AuthState
140
+ } from '@mavenmm/teamwork-auth';
141
+ ```
142
+
143
+ ### User Type
144
+ ```typescript
145
+ interface User {
146
+ id: string;
147
+ firstName: string;
148
+ lastName: string;
149
+ email: string;
150
+ avatar?: string;
151
+ company?: {
152
+ id: string;
153
+ name: string;
154
+ };
155
+ }
156
+ ```
157
+
158
+ ### TeamworkAuthConfig Type
159
+ ```typescript
160
+ interface TeamworkAuthConfig {
161
+ authServiceUrl?: string; // Override auto-detection (rarely needed)
162
+ domainKey?: string; // Domain authentication key (auto-loaded from env)
163
+ }
164
+ ```
165
+
166
+ ## Development Workflow
167
+
168
+ ### Setup for Developers
169
+
170
+ 1. **Install the package:**
171
+ ```bash
172
+ npm install @mavenmm/teamwork-auth
173
+ ```
174
+
175
+ 2. **Set up environment variables:**
176
+ Create `.env` file:
177
+ ```bash
178
+ VITE_CLIENT_ID=<your_teamwork_client_id>
179
+ VITE_REDIRECT_URI=http://localhost:3000
180
+ VITE_DOMAIN_KEY=dev_localhost_3000
181
+ ```
182
+
183
+ 3. **Start local auth service:**
184
+ Clone the auth service repo and run:
185
+ ```bash
186
+ git clone <auth-service-repo>
187
+ cd <auth-service-repo>
188
+ netlify dev --port 9100
189
+ ```
190
+
191
+ 4. **Use in your app:**
192
+ ```tsx
193
+ import { useTeamworkAuth, Login } from '@mavenmm/teamwork-auth';
194
+ // Zero config - auto-detects localhost:9100!
195
+ ```
196
+
197
+ ### Common Issues & Solutions
198
+
199
+ **Issue: "Auth service unreachable"**
200
+ - Make sure local auth service is running on port 9100
201
+ - Run: `netlify dev --port 9100` in the auth service directory
202
+ - Check if port 9100 is available (not used by another process)
203
+
204
+ **Issue: "Invalid domain key"**
205
+ - Verify `VITE_DOMAIN_KEY` in your app matches `DEV_KEY` in auth service
206
+ - Both should be: `dev_localhost_3000` for localhost development
207
+
208
+ **Issue: "CORS errors"**
209
+ - Ensure your app's origin is registered in auth service's domain registry
210
+ - Check auth service logs for CORS-related errors
211
+ - For localhost, origin should be `http://localhost:3000` (or your port)
212
+
213
+ **Issue: "401 Unauthorized on refresh"**
214
+ - Normal on first load (no refresh token yet)
215
+ - If persists after login, check browser cookies for `maven_refresh_token`
216
+ - Ensure cookies are enabled in your browser
217
+
218
+ **Issue: "Cookies not working"**
219
+ - Development: Both app and auth service must be on localhost
220
+ - Production: Both must be on HTTPS
221
+ - Cannot test auth.mavenmm.com from localhost (browser security)
222
+
223
+ ## Architecture Notes
224
+
225
+ ### Token Strategy (v2.0)
226
+ - **Access tokens**: 15 minutes, stored in memory (not localStorage)
227
+ - **Refresh tokens**: 7 days, stored in httpOnly cookies
228
+ - **Auto-refresh**: Tokens refresh 1 minute before expiry
229
+ - **Token rotation**: Refresh tokens are single-use and blacklisted after use
230
+
231
+ ### Security Features
232
+ - HttpOnly cookies prevent XSS attacks
233
+ - Domain authentication keys prevent domain spoofing
234
+ - Rate limiting on all endpoints
235
+ - Automatic token rotation and blacklisting
236
+ - Content Security Policy headers
237
+ - Timing-safe key comparison to prevent timing attacks
238
+
239
+ ### Cookie Behavior
240
+ - **localhost**: Cookies work (same domain)
241
+ - **Production (*.mavenmm.com)**: Cookies work (shared domain `.mavenmm.com`)
242
+ - **Staging (*.netlify.app)**: Cookies work (HTTPS cross-site with CORS)
243
+ - **localhost ↔ auth.mavenmm.com**: Won't work (use local auth service instead)
244
+
245
+ ## Advanced Usage
246
+
247
+ ### Getting Access Token for API Calls
248
+ ```tsx
249
+ const { getAccessToken } = useTeamworkAuth();
250
+
251
+ async function callAPI() {
252
+ const token = getAccessToken();
253
+ if (!token) {
254
+ console.error('No access token available');
255
+ return;
256
+ }
257
+
258
+ const response = await fetch('https://api.example.com/data', {
259
+ headers: {
260
+ 'Authorization': `Bearer ${token}`,
261
+ },
262
+ });
263
+ return response.json();
264
+ }
265
+ ```
266
+
267
+ ### Manual Auth Service Override (Rare)
268
+ ```tsx
269
+ // Only needed for custom deployments
270
+ const { user } = useTeamworkAuth({
271
+ authServiceUrl: 'https://custom-auth.example.com',
272
+ domainKey: 'custom_domain_key',
273
+ });
274
+ ```
275
+
276
+ ### Handling OAuth Callback
277
+ The hook automatically handles OAuth callbacks. No manual intervention needed.
278
+
279
+ The OAuth flow:
280
+ 1. User clicks Login button → redirected to Teamwork
281
+ 2. User authenticates with Teamwork
282
+ 3. Teamwork redirects back to your app with `?code=xxx`
283
+ 4. useTeamworkAuth automatically detects the code and logs in
284
+ 5. URL is cleaned up (code parameter removed)
285
+
286
+ ## Environment-Specific Behavior
287
+
288
+ ### Development (localhost)
289
+ ```
290
+ Your App (localhost:3000)
291
+
292
+ Local Auth Service (localhost:9100)
293
+
294
+ Teamwork API
295
+ ```
296
+ - Cookies: Same domain, work perfectly
297
+ - No CORS issues (same origin)
298
+ - Fast development iteration
299
+
300
+ ### Production (*.mavenmm.com)
301
+ ```
302
+ Your App (home.mavenmm.com)
303
+
304
+ Auth Service (auth.mavenmm.com)
305
+
306
+ Teamwork API
307
+ ```
308
+ - Cookies: Shared domain `.mavenmm.com`, work perfectly
309
+ - CORS: Configured in auth service
310
+ - Single auth service for all Maven apps
311
+
312
+ ### Staging (*.netlify.app)
313
+ ```
314
+ Your App (preview.netlify.app)
315
+
316
+ Auth Service (auth.mavenmm.com)
317
+
318
+ Teamwork API
319
+ ```
320
+ - Cookies: Cross-site HTTPS, work with CORS
321
+ - Each preview needs to be registered in auth service
322
+ - Useful for testing before production deploy
323
+
324
+ ## Package Exports
325
+
326
+ ```typescript
327
+ // Main exports
328
+ export { useTeamworkAuth } from './hooks/useTeamworkAuth';
329
+ export { Login } from './components/Login';
330
+ export { AuthProvider } from './components/AuthProvider';
331
+
332
+ // Type exports
333
+ export type { User, TeamworkAuthConfig } from './types';
334
+ ```
335
+
336
+ ## Dependencies
337
+
338
+ ### Peer Dependencies (Required)
339
+ ```json
340
+ {
341
+ "react": ">=16.8.0",
342
+ "react-dom": ">=16.8.0",
343
+ "react-router-dom": ">=6.0.0"
344
+ }
345
+ ```
346
+
347
+ Your app must have these installed.
348
+
349
+ ### Package Dependencies
350
+ - `@teamwork/login-button`: Official Teamwork login component
351
+ - `buffer`: Browser polyfill
352
+ - `process`: Browser polyfill
353
+
354
+ ## Version Compatibility
355
+
356
+ - **v2.0.x**: Latest, with dual-token architecture and domain authentication
357
+ - **v1.x**: Legacy, deprecated
358
+
359
+ Always use the latest v2.x version for new projects.
360
+
361
+ ## When NOT to Use This Package
362
+
363
+ This package is specifically for Maven Marketing apps that:
364
+ 1. Use Teamwork for authentication
365
+ 2. Are part of the Maven ecosystem (*.mavenmm.com)
366
+ 3. Need centralized SSO across multiple apps
367
+
368
+ **Don't use this if:**
369
+ - You need a different OAuth provider
370
+ - You want standalone authentication (not centralized)
371
+ - Your app isn't part of Maven Marketing
372
+
373
+ ## Support & Troubleshooting
374
+
375
+ ### Debugging Steps
376
+
377
+ 1. **Check auth service logs:**
378
+ ```bash
379
+ # Local development
380
+ # Logs appear in terminal where you ran: netlify dev --port 9100
381
+ ```
382
+
383
+ 2. **Check browser console:**
384
+ - Look for error messages
385
+ - Check Network tab for failed requests
386
+ - Verify cookies in Application → Cookies
387
+
388
+ 3. **Verify environment variables:**
389
+ ```bash
390
+ console.log(import.meta.env.VITE_CLIENT_ID);
391
+ console.log(import.meta.env.VITE_DOMAIN_KEY);
392
+ ```
393
+
394
+ 4. **Check auth service URL:**
395
+ ```tsx
396
+ const { authServiceUrl } = useTeamworkAuth();
397
+ console.log('Using auth service:', authServiceUrl);
398
+ ```
399
+
400
+ ### Getting Help
401
+
402
+ For issues with the package:
403
+ 1. Check this CLAUDE.md file
404
+ 2. Check README.md for general usage
405
+ 3. Check auth service logs for backend errors
406
+ 4. Verify environment variables are correct
407
+ 5. Contact Maven DevOps team for domain key issues
408
+
409
+ ## Example Implementation
410
+
411
+ ```tsx
412
+ import React from 'react';
413
+ import { BrowserRouter, Routes, Route } from 'react-router-dom';
414
+ import { useTeamworkAuth, Login } from '@mavenmm/teamwork-auth';
415
+
416
+ function ProtectedApp() {
417
+ const { user, isAuthenticated, loading, logout } = useTeamworkAuth();
418
+
419
+ if (loading) {
420
+ return (
421
+ <div style={{ padding: '20px', textAlign: 'center' }}>
422
+ <h2>Loading...</h2>
423
+ <p>Checking authentication status...</p>
424
+ </div>
425
+ );
426
+ }
427
+
428
+ if (!isAuthenticated) {
429
+ return (
430
+ <div style={{ padding: '20px', textAlign: 'center' }}>
431
+ <h1>Welcome to Maven App</h1>
432
+ <p>Please sign in with your Teamwork account:</p>
433
+ <Login
434
+ clientID={import.meta.env.VITE_CLIENT_ID}
435
+ redirectURI={import.meta.env.VITE_REDIRECT_URI}
436
+ />
437
+ </div>
438
+ );
439
+ }
440
+
441
+ return (
442
+ <div>
443
+ <header>
444
+ <h1>Welcome, {user?.firstName}!</h1>
445
+ <button onClick={logout}>Logout</button>
446
+ </header>
447
+ <main>
448
+ {/* Your app content here */}
449
+ </main>
450
+ </div>
451
+ );
452
+ }
453
+
454
+ function App() {
455
+ return (
456
+ <BrowserRouter>
457
+ <Routes>
458
+ <Route path="/*" element={<ProtectedApp />} />
459
+ </Routes>
460
+ </BrowserRouter>
461
+ );
462
+ }
463
+
464
+ export default App;
465
+ ```
466
+
467
+ ## Migration from v1.x
468
+
469
+ If migrating from v1.x:
470
+
471
+ 1. **Update package:**
472
+ ```bash
473
+ npm install @mavenmm/teamwork-auth@latest
474
+ ```
475
+
476
+ 2. **Update environment variables:**
477
+ - Add `VITE_DOMAIN_KEY` (required in v2.0)
478
+
479
+ 3. **Remove manual authServiceUrl config:**
480
+ - v2.0 auto-detects environment
481
+
482
+ 4. **Update auth service:**
483
+ - Must use v2.0 auth service with domain authentication
484
+
485
+ See MIGRATION_V2.md in the auth service repo for detailed migration guide.
486
+
487
+ ---
488
+
489
+ **Last Updated:** v2.0.3
490
+ **Package:** @mavenmm/teamwork-auth
491
+ **Auth Service:** auth.mavenmm.com (v2.0)
@@ -1,7 +1,7 @@
1
1
  import { User } from "../types";
2
2
  export interface TeamworkAuthConfig {
3
3
  authServiceUrl?: string;
4
- cookieDomain?: string;
4
+ domainKey?: string;
5
5
  }
6
6
  export declare function useTeamworkAuth(config?: TeamworkAuthConfig): {
7
7
  user: User | null;
@@ -9,10 +9,11 @@ export declare function useTeamworkAuth(config?: TeamworkAuthConfig): {
9
9
  loading: boolean;
10
10
  isAuthenticated: boolean;
11
11
  login: (code: string) => Promise<{
12
- twUser: any;
12
+ user: any;
13
13
  }>;
14
14
  logout: () => Promise<void>;
15
15
  error: string | null;
16
16
  authServiceUrl: string;
17
+ getAccessToken: () => string | null;
17
18
  };
18
19
  //# sourceMappingURL=useTeamworkAuth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTeamworkAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useTeamworkAuth.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,IAAI,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAyCD,wBAAgB,eAAe,CAAC,MAAM,GAAE,kBAAuB;;;;;kBAUlC,MAAM;;;;;;EA4NlC"}
1
+ {"version":3,"file":"useTeamworkAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useTeamworkAuth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkED,wBAAgB,eAAe,CAAC,MAAM,GAAE,kBAAuB;;;;;kBAsGlC,MAAM;;;;;;;EAoQlC"}
@@ -0,0 +1,18 @@
1
+ import { User } from "../types";
2
+ export interface TeamworkAuthConfig {
3
+ authServiceUrl?: string;
4
+ domainKey?: string;
5
+ }
6
+ export declare function useTeamworkAuth(config?: TeamworkAuthConfig): {
7
+ user: User | null;
8
+ setUser: import("react").Dispatch<import("react").SetStateAction<User | null>>;
9
+ loading: boolean;
10
+ isAuthenticated: boolean;
11
+ login: (code: string) => Promise<{
12
+ twUser: any;
13
+ }>;
14
+ logout: () => Promise<void>;
15
+ error: string | null;
16
+ authServiceUrl: string;
17
+ };
18
+ //# sourceMappingURL=useTeamworkAuth.old.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTeamworkAuth.old.d.ts","sourceRoot":"","sources":["../../src/hooks/useTeamworkAuth.old.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,IAAI,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8CD,wBAAgB,eAAe,CAAC,MAAM,GAAE,kBAAuB;;;;;kBAelC,MAAM;;;;;;EA4NlC"}
package/dist/index.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- import { useState, useEffect, createContext, useRef, useContext } from 'react';
1
+ import { useState, useRef, useCallback, useEffect, createContext, useContext } from 'react';
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import '@teamwork/login-button';
4
4
  import { useLocation } from 'react-router-dom';
@@ -40,6 +40,10 @@ function detectAuthServiceUrl() {
40
40
  if (hostname.endsWith('.mavenmm.com') || hostname === 'mavenmm.com') {
41
41
  return 'https://auth.mavenmm.com';
42
42
  }
43
+ // Staging: *.netlify.app domains also use production auth service
44
+ if (hostname.endsWith('.netlify.app')) {
45
+ return 'https://auth.mavenmm.com';
46
+ }
43
47
  // Development: localhost uses local auth service on port 9100
44
48
  if (hostname === 'localhost' || hostname === '127.0.0.1') {
45
49
  return 'http://localhost:9100';
@@ -50,37 +54,139 @@ function detectAuthServiceUrl() {
50
54
  return 'http://localhost:9100';
51
55
  }
52
56
  /**
53
- * Auto-detect cookie domain based on hostname
57
+ * Get domain key from environment or config
54
58
  */
55
- function detectCookieDomain() {
56
- const hostname = window.location.hostname;
57
- // Production: use .mavenmm.com for cross-subdomain cookies
58
- if (hostname.endsWith('.mavenmm.com') || hostname === 'mavenmm.com') {
59
- return '.mavenmm.com';
59
+ function getDomainKey(config) {
60
+ // Priority: explicit config > environment variable
61
+ if (config)
62
+ return config;
63
+ // Check for environment variable (Vite uses VITE_ prefix)
64
+ if (typeof import.meta !== 'undefined' && import.meta.env) {
65
+ return import.meta.env.VITE_DOMAIN_KEY || import.meta.env.DOMAIN_KEY;
66
+ }
67
+ // Check for process.env (other build tools)
68
+ if (typeof process !== 'undefined' && process.env) {
69
+ return process.env.VITE_DOMAIN_KEY || process.env.DOMAIN_KEY;
60
70
  }
61
- // Development: localhost doesn't need explicit cookie domain
62
71
  return undefined;
63
72
  }
73
+ /**
74
+ * Get common headers for auth requests
75
+ */
76
+ function getAuthHeaders(domainKey) {
77
+ const headers = {
78
+ "Content-Type": "application/json",
79
+ };
80
+ if (domainKey) {
81
+ headers["X-Domain-Key"] = domainKey;
82
+ }
83
+ return headers;
84
+ }
64
85
  function useTeamworkAuth(config = {}) {
65
86
  // Auto-detect auth service URL if not provided
66
87
  const authServiceUrl = config.authServiceUrl || detectAuthServiceUrl();
67
- const cookieDomain = config.cookieDomain ?? detectCookieDomain();
88
+ const domainKey = getDomainKey(config.domainKey);
68
89
  const [user, setUser] = useState(null);
69
90
  const [loading, setLoading] = useState(true);
70
91
  const [isAuthenticated, setIsAuthenticated] = useState(false);
71
92
  const [error, setError] = useState(null);
93
+ // Access token management (stored in memory, NOT localStorage for security)
94
+ const accessTokenRef = useRef(null);
95
+ const tokenExpiryRef = useRef(0);
96
+ const refreshTimerRef = useRef(null);
97
+ const refreshInProgressRef = useRef(null);
98
+ /**
99
+ * Store access token and schedule refresh
100
+ */
101
+ const storeAccessToken = useCallback((token, expiresIn) => {
102
+ accessTokenRef.current = token;
103
+ const expiryTime = Date.now() + (expiresIn * 1000);
104
+ tokenExpiryRef.current = expiryTime;
105
+ // Clear existing refresh timer
106
+ if (refreshTimerRef.current) {
107
+ clearTimeout(refreshTimerRef.current);
108
+ }
109
+ // Schedule token refresh 1 minute before expiry
110
+ const refreshTime = Math.max((expiresIn - 60) * 1000, 0);
111
+ refreshTimerRef.current = setTimeout(() => {
112
+ refreshToken();
113
+ }, refreshTime);
114
+ console.log(`Access token stored, expires in ${expiresIn}s, refresh scheduled in ${refreshTime / 1000}s`);
115
+ }, []);
116
+ /**
117
+ * Clear access token and cancel refresh timer
118
+ */
119
+ const clearAccessToken = useCallback(() => {
120
+ accessTokenRef.current = null;
121
+ tokenExpiryRef.current = 0;
122
+ if (refreshTimerRef.current) {
123
+ clearTimeout(refreshTimerRef.current);
124
+ refreshTimerRef.current = null;
125
+ }
126
+ }, []);
127
+ /**
128
+ * Refresh access token using refresh token (httpOnly cookie)
129
+ */
130
+ const refreshToken = useCallback(async () => {
131
+ // If a refresh is already in progress, wait for it
132
+ if (refreshInProgressRef.current) {
133
+ console.log('Refresh already in progress, waiting...');
134
+ return refreshInProgressRef.current;
135
+ }
136
+ // Start new refresh
137
+ const refreshPromise = (async () => {
138
+ try {
139
+ console.log('Refreshing access token...');
140
+ const response = await fetch(`${authServiceUrl}/.netlify/functions/refresh`, {
141
+ method: "POST",
142
+ headers: getAuthHeaders(domainKey),
143
+ credentials: "include", // Send httpOnly cookie
144
+ });
145
+ if (!response.ok) {
146
+ throw new Error(`Token refresh failed: ${response.status}`);
147
+ }
148
+ const data = await response.json();
149
+ // Store new access token
150
+ storeAccessToken(data.accessToken, data.expiresIn);
151
+ console.log('Access token refreshed successfully');
152
+ }
153
+ catch (err) {
154
+ console.error('Token refresh failed:', err);
155
+ // Clear auth state on refresh failure
156
+ clearAccessToken();
157
+ setIsAuthenticated(false);
158
+ setUser(null);
159
+ localStorage.removeItem("maven_sso_user");
160
+ }
161
+ finally {
162
+ // Clear the in-progress flag
163
+ refreshInProgressRef.current = null;
164
+ }
165
+ })();
166
+ refreshInProgressRef.current = refreshPromise;
167
+ return refreshPromise;
168
+ }, [authServiceUrl, domainKey, storeAccessToken, clearAccessToken]);
169
+ /**
170
+ * Login with OAuth code
171
+ */
72
172
  const login = async (code) => {
173
+ // Prevent code reuse (OAuth codes are single-use)
174
+ const previousCode = localStorage.getItem("maven_sso_code");
175
+ if (previousCode === JSON.stringify(code)) {
176
+ console.log('OAuth code already used, skipping duplicate login attempt');
177
+ return { user: null };
178
+ }
73
179
  try {
180
+ // Record the code BEFORE making the request to prevent race conditions
181
+ localStorage.setItem("maven_sso_code", JSON.stringify(code));
74
182
  const options = {
75
183
  method: "POST",
76
184
  headers: {
77
- "Content-Type": "application/json",
185
+ ...getAuthHeaders(domainKey),
78
186
  "code": code,
79
187
  },
80
188
  credentials: "include",
81
189
  };
82
- // Record the code to prevent reuse
83
- localStorage.setItem("maven_sso_code", JSON.stringify(code));
84
190
  const res = await fetch(`${authServiceUrl}/.netlify/functions/login`, options);
85
191
  if (!res.ok) {
86
192
  let errorDetails;
@@ -93,37 +199,152 @@ function useTeamworkAuth(config = {}) {
93
199
  throw new Error(`Login failed with status: ${res.status}`);
94
200
  }
95
201
  const data = await res.json();
96
- const { twUser } = data;
97
- setUser(twUser);
202
+ // Store access token
203
+ storeAccessToken(data.accessToken, data.expiresIn);
204
+ // Store user data
205
+ setUser(data.user);
98
206
  setIsAuthenticated(true);
99
- // Save user data to localStorage
100
- localStorage.setItem("maven_sso_user", JSON.stringify(twUser));
101
- // Clean up URL by removing OAuth code parameter
207
+ localStorage.setItem("maven_sso_user", JSON.stringify(data.user));
208
+ // Clean up URL
102
209
  cleanUpUrl();
103
- return { twUser };
210
+ return { user: data.user };
104
211
  }
105
212
  catch (err) {
213
+ // Clear the code on error so it can be retried
214
+ localStorage.removeItem("maven_sso_code");
106
215
  throw new Error("Failed to log in");
107
216
  }
108
217
  };
218
+ /**
219
+ * Check authentication status
220
+ */
221
+ const checkAuth = useCallback(async () => {
222
+ try {
223
+ // If we have a valid access token, use it
224
+ if (accessTokenRef.current && tokenExpiryRef.current > Date.now()) {
225
+ const response = await fetch(`${authServiceUrl}/.netlify/functions/checkAuth`, {
226
+ method: "GET",
227
+ headers: {
228
+ ...getAuthHeaders(domainKey),
229
+ "Authorization": `Bearer ${accessTokenRef.current}`,
230
+ },
231
+ credentials: "include",
232
+ });
233
+ if (response.ok) {
234
+ const data = await response.json();
235
+ if (data.authenticated === true) {
236
+ setIsAuthenticated(true);
237
+ cleanUpUrl();
238
+ // Use user data from checkAuth response (fresh from Teamwork API)
239
+ if (data.user) {
240
+ setUser(data.user);
241
+ localStorage.setItem("maven_sso_user", JSON.stringify(data.user));
242
+ }
243
+ else {
244
+ // Fallback: restore user data from localStorage
245
+ const prevUser = localStorage.getItem("maven_sso_user");
246
+ if (prevUser) {
247
+ try {
248
+ const userData = JSON.parse(prevUser);
249
+ setUser(userData);
250
+ }
251
+ catch (error) {
252
+ console.error('Failed to parse user data:', error);
253
+ }
254
+ }
255
+ }
256
+ return;
257
+ }
258
+ }
259
+ }
260
+ // No valid access token - try to refresh
261
+ await refreshToken();
262
+ // After refresh, check again
263
+ if (accessTokenRef.current) {
264
+ const response = await fetch(`${authServiceUrl}/.netlify/functions/checkAuth`, {
265
+ method: "GET",
266
+ headers: {
267
+ ...getAuthHeaders(domainKey),
268
+ "Authorization": `Bearer ${accessTokenRef.current}`,
269
+ },
270
+ credentials: "include",
271
+ });
272
+ if (response.ok) {
273
+ const data = await response.json();
274
+ if (data.authenticated === true) {
275
+ setIsAuthenticated(true);
276
+ cleanUpUrl();
277
+ // Use user data from checkAuth response (fresh from Teamwork API)
278
+ if (data.user) {
279
+ setUser(data.user);
280
+ localStorage.setItem("maven_sso_user", JSON.stringify(data.user));
281
+ }
282
+ else {
283
+ // Fallback: restore user data from localStorage
284
+ const prevUser = localStorage.getItem("maven_sso_user");
285
+ if (prevUser) {
286
+ try {
287
+ const userData = JSON.parse(prevUser);
288
+ setUser(userData);
289
+ }
290
+ catch (error) {
291
+ console.error('Failed to parse user data:', error);
292
+ }
293
+ }
294
+ }
295
+ return;
296
+ }
297
+ }
298
+ }
299
+ // Not authenticated
300
+ setIsAuthenticated(false);
301
+ setUser(null);
302
+ clearAccessToken();
303
+ localStorage.removeItem("maven_sso_user");
304
+ }
305
+ catch (err) {
306
+ setIsAuthenticated(false);
307
+ setUser(null);
308
+ clearAccessToken();
309
+ localStorage.removeItem("maven_sso_user");
310
+ // Check if this is a connection error
311
+ const isConnectionError = err instanceof TypeError && err.message.includes('fetch');
312
+ if (isConnectionError && authServiceUrl.includes('localhost:9100')) {
313
+ const errorMessage = '⚠️ Auth service not running on localhost:9100\n\n' +
314
+ 'To start the auth service:\n' +
315
+ ' cd auth-service/\n' +
316
+ ' npm run dev\n\n' +
317
+ 'Or provide a custom authServiceUrl in the config.';
318
+ setError(errorMessage);
319
+ console.error(errorMessage);
320
+ }
321
+ else if (isConnectionError) {
322
+ const errorMessage = `⚠️ Cannot connect to auth service at ${authServiceUrl}`;
323
+ setError(errorMessage);
324
+ console.error(errorMessage);
325
+ }
326
+ }
327
+ finally {
328
+ setLoading(false);
329
+ }
330
+ }, [authServiceUrl, domainKey, refreshToken, clearAccessToken, storeAccessToken]);
331
+ /**
332
+ * Clean up URL parameters after OAuth
333
+ */
109
334
  const cleanUpUrl = () => {
110
335
  try {
111
336
  const url = new URL(window.location.href);
112
- // OAuth parameters that should be cleaned up after successful auth
113
337
  const oauthParams = ['code', 'state', 'client_id', 'redirect_uri', 'scope', 'response_type'];
114
338
  let hasOAuthParams = false;
115
- // Check if any OAuth params exist
116
339
  oauthParams.forEach(param => {
117
340
  if (url.searchParams.has(param)) {
118
341
  hasOAuthParams = true;
119
342
  }
120
343
  });
121
344
  if (hasOAuthParams) {
122
- // Remove all OAuth parameters
123
345
  oauthParams.forEach(param => {
124
346
  url.searchParams.delete(param);
125
347
  });
126
- // Update URL without page reload
127
348
  window.history.replaceState({}, document.title, url.toString());
128
349
  }
129
350
  }
@@ -131,141 +352,59 @@ function useTeamworkAuth(config = {}) {
131
352
  // Silently fail - URL cleanup is not critical
132
353
  }
133
354
  };
355
+ /**
356
+ * Logout
357
+ */
134
358
  const logout = async () => {
135
359
  try {
136
- // Call external auth service logout endpoint
360
+ const headers = getAuthHeaders(domainKey);
361
+ // Include access token in logout request if available
362
+ if (accessTokenRef.current) {
363
+ headers["Authorization"] = `Bearer ${accessTokenRef.current}`;
364
+ }
137
365
  await fetch(`${authServiceUrl}/.netlify/functions/logout`, {
138
366
  method: "GET",
367
+ headers,
139
368
  credentials: "include",
140
369
  });
141
- // Clear all user data
370
+ // Clear all state
142
371
  setUser(null);
143
372
  setIsAuthenticated(false);
144
- // Clear localStorage
373
+ clearAccessToken();
145
374
  localStorage.removeItem("maven_sso_user");
146
375
  localStorage.removeItem("maven_sso_code");
147
- // Clear cookies - the auth service handles domain cookies
148
- document.cookie =
149
- "maven_auth_token=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT";
150
- // For non-localhost environments, also clear with configured domain
151
- if (window.location.hostname !== "localhost" && cookieDomain) {
152
- document.cookie = `maven_auth_token=; path=/; domain=${cookieDomain}; expires=Thu, 01 Jan 1970 00:00:00 GMT`;
153
- }
154
376
  }
155
377
  catch (error) {
156
378
  console.error("Logout error:", error);
157
379
  // Still clear local state even if API call fails
158
380
  setUser(null);
159
381
  setIsAuthenticated(false);
382
+ clearAccessToken();
160
383
  localStorage.removeItem("maven_sso_user");
161
384
  }
162
385
  };
386
+ // Check authentication on mount
163
387
  useEffect(() => {
164
- const checkAuth = async () => {
165
- try {
166
- // Make API call to validate auth state with external auth service
167
- const response = await fetch(`${authServiceUrl}/.netlify/functions/checkAuth`, {
168
- method: "GET",
169
- credentials: "include",
170
- });
171
- if (response.ok) {
172
- const contentType = response.headers.get("content-type");
173
- if (!contentType || !contentType.includes("application/json")) {
174
- setIsAuthenticated(false);
175
- setUser(null);
176
- localStorage.removeItem("maven_sso_user");
177
- return;
178
- }
179
- const data = await response.json();
180
- if (data.authenticated === true) {
181
- setIsAuthenticated(true);
182
- // Clean up URL since we're authenticated via cookie
183
- cleanUpUrl();
184
- // Check if we already have user data in localStorage
185
- const prevUser = localStorage.getItem("maven_sso_user");
186
- if (prevUser) {
187
- try {
188
- const userData = JSON.parse(prevUser);
189
- setUser(userData);
190
- }
191
- catch (error) {
192
- localStorage.removeItem("maven_sso_user");
193
- // Create basic user as fallback
194
- const basicUser = {
195
- id: data.userId || data._id || "temp-user",
196
- firstName: "Teamwork",
197
- lastName: "User",
198
- email: "user@teamwork.example",
199
- avatar: "",
200
- company: {
201
- id: 1,
202
- name: "Teamwork",
203
- logo: "",
204
- },
205
- };
206
- localStorage.setItem("maven_sso_user", JSON.stringify(basicUser));
207
- setUser(basicUser);
208
- }
209
- }
210
- else {
211
- // Create a basic user object since we don't have one
212
- const basicUser = {
213
- id: data.userId || data._id || "temp-user",
214
- firstName: "Teamwork",
215
- lastName: "User",
216
- email: "user@teamwork.example",
217
- avatar: "",
218
- company: {
219
- id: 1,
220
- name: "Teamwork",
221
- logo: "",
222
- },
223
- };
224
- localStorage.setItem("maven_sso_user", JSON.stringify(basicUser));
225
- setUser(basicUser);
226
- }
227
- }
228
- else {
229
- setIsAuthenticated(false);
230
- setUser(null);
231
- localStorage.removeItem("maven_sso_user");
232
- }
233
- }
234
- else {
235
- setIsAuthenticated(false);
236
- setUser(null);
237
- localStorage.removeItem("maven_sso_user");
238
- }
239
- }
240
- catch (err) {
241
- setIsAuthenticated(false);
242
- setUser(null);
243
- localStorage.removeItem("maven_sso_user");
244
- // Check if this is a connection error (auth service not reachable)
245
- const isConnectionError = err instanceof TypeError && err.message.includes('fetch');
246
- if (isConnectionError && authServiceUrl.includes('localhost:9100')) {
247
- const errorMessage = '⚠️ Auth service not running on localhost:9100\n\n' +
248
- 'To start the auth service:\n' +
249
- ' cd auth-service/\n' +
250
- ' npm run dev\n\n' +
251
- 'Or provide a custom authServiceUrl in the config.';
252
- setError(errorMessage);
253
- console.error(errorMessage);
254
- }
255
- else if (isConnectionError) {
256
- const errorMessage = `⚠️ Cannot connect to auth service at ${authServiceUrl}`;
257
- setError(errorMessage);
258
- console.error(errorMessage);
259
- }
260
- }
261
- finally {
262
- setLoading(false);
388
+ checkAuth();
389
+ // Cleanup on unmount
390
+ return () => {
391
+ if (refreshTimerRef.current) {
392
+ clearTimeout(refreshTimerRef.current);
263
393
  }
264
394
  };
265
- // Always validate with server - httpOnly cookies are handled automatically by browser
266
- checkAuth();
267
- }, [authServiceUrl]); // Add authServiceUrl as dependency
268
- return { user, setUser, loading, isAuthenticated, login, logout, error, authServiceUrl };
395
+ }, [checkAuth]);
396
+ return {
397
+ user,
398
+ setUser,
399
+ loading,
400
+ isAuthenticated,
401
+ login,
402
+ logout,
403
+ error,
404
+ authServiceUrl,
405
+ // Expose method to get current access token for API calls
406
+ getAccessToken: () => accessTokenRef.current,
407
+ };
269
408
  }
270
409
 
271
410
  function Login({ clientID, redirectURI, clientSecret } = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/utils/polyfills.ts","../src/hooks/useTeamworkAuth.ts","../src/components/Login.tsx","../src/providers/AuthProvider.tsx"],"sourcesContent":[null,null,null,null],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/utils/polyfills.ts","../src/hooks/useTeamworkAuth.ts","../src/components/Login.tsx","../src/providers/AuthProvider.tsx"],"sourcesContent":[null,null,null,null],"names":["_jsxs","_jsx"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mavenmm/teamwork-auth",
3
- "version": "2.0.2",
3
+ "version": "2.0.4",
4
4
  "description": "Centralized Teamwork SSO authentication system for React applications with zero backend code required",
5
5
  "type": "module",
6
6
  "main": "dist/index.esm.js",
@@ -16,7 +16,8 @@
16
16
  "files": [
17
17
  "dist",
18
18
  "README.md",
19
- "CHANGELOG.md"
19
+ "CHANGELOG.md",
20
+ "CLAUDE.md"
20
21
  ],
21
22
  "scripts": {
22
23
  "build": "rollup -c",