@tgtone/auth-sdk 1.2.2 → 1.3.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.
- package/README.md +136 -10
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/interceptor.d.ts +26 -0
- package/dist/interceptor.d.ts.map +1 -0
- package/dist/interceptor.js +114 -0
- package/dist/interceptor.js.map +1 -0
- package/dist/react-hook.d.ts +11 -2
- package/dist/react-hook.d.ts.map +1 -1
- package/dist/react-hook.js +44 -5
- package/dist/react-hook.js.map +1 -1
- package/dist/tgtone-auth-client.d.ts +23 -1
- package/dist/tgtone-auth-client.d.ts.map +1 -1
- package/dist/tgtone-auth-client.js +165 -7
- package/dist/tgtone-auth-client.js.map +1 -1
- package/docs/LOVABLE_QUICK_START.md +116 -26
- package/docs/README.md +2 -2
- package/package.json +9 -2
package/README.md
CHANGED
|
@@ -181,6 +181,9 @@ Obtiene sesión completa en memoria (sin hacer request).
|
|
|
181
181
|
#### `getTenantId(): string | null`
|
|
182
182
|
Obtiene ID del tenant actual.
|
|
183
183
|
|
|
184
|
+
#### `getToken(): string | null` 🆕
|
|
185
|
+
Obtiene el token JWT actual (Bearer token). Útil para inyectar en headers de API calls.
|
|
186
|
+
|
|
184
187
|
#### `redirectToLogin(redirectUrl?: string): void` 🆕
|
|
185
188
|
Redirige al login del Identity Provider.
|
|
186
189
|
|
|
@@ -226,6 +229,75 @@ Verifica si el usuario tiene acceso a una app.
|
|
|
226
229
|
|
|
227
230
|
---
|
|
228
231
|
|
|
232
|
+
## 🚫 Session Revocation (v1.3.0)
|
|
233
|
+
|
|
234
|
+
El SDK detecta automáticamente cuando un usuario o tenant es eliminado/desactivado y cierra la sesión.
|
|
235
|
+
|
|
236
|
+
### Cómo funciona
|
|
237
|
+
|
|
238
|
+
1. **Heartbeat**: Cada 5 minutos (configurable), el SDK valida la sesión con el backend
|
|
239
|
+
2. **Interceptor HTTP**: Captura errores 401 en cada request
|
|
240
|
+
3. **Acción automática**: Limpia token y redirige a `/blocked` o ejecuta callback personalizado
|
|
241
|
+
|
|
242
|
+
### Habilitar en React
|
|
243
|
+
|
|
244
|
+
```tsx
|
|
245
|
+
import { useTGTAuth } from '@tgtone/auth-sdk/react';
|
|
246
|
+
|
|
247
|
+
function App() {
|
|
248
|
+
const { session, loading, revokedError } = useTGTAuth({
|
|
249
|
+
identityUrl: 'https://identity.tgtone.cl',
|
|
250
|
+
appDomain: 'zenith.tgtone.cl',
|
|
251
|
+
enableHeartbeat: true, // Default: true
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
if (revokedError) {
|
|
255
|
+
// Sesión fue revocada - redirigiendo a /blocked
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// ...
|
|
260
|
+
}
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### Con Interceptor Axios
|
|
264
|
+
|
|
265
|
+
```typescript
|
|
266
|
+
import { createAxiosInterceptor } from '@tgtone/auth-sdk/interceptor';
|
|
267
|
+
|
|
268
|
+
const api = axios.create({ baseURL: '/api' });
|
|
269
|
+
createAxiosInterceptor(api, authClient, {
|
|
270
|
+
handleRevoked: true,
|
|
271
|
+
excludeUrls: ['/public/health'],
|
|
272
|
+
});
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Nuevos métodos
|
|
276
|
+
|
|
277
|
+
```typescript
|
|
278
|
+
// Control manual del heartbeat
|
|
279
|
+
authClient.startHeartbeat();
|
|
280
|
+
authClient.stopHeartbeat();
|
|
281
|
+
authClient.isHeartbeatActive();
|
|
282
|
+
|
|
283
|
+
// URL de redirección para sesión revocada
|
|
284
|
+
authClient.getBlockedRedirectUrl(error);
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Códigos de error
|
|
288
|
+
|
|
289
|
+
| Código | Descripción | Redirect |
|
|
290
|
+
|--------|-------------|----------|
|
|
291
|
+
| `USER_INACTIVE` | Usuario desactivado | `/blocked?type=user` |
|
|
292
|
+
| `USER_NOT_FOUND` | Usuario eliminado | `/blocked?type=user` |
|
|
293
|
+
| `TENANT_INACTIVE` | Empresa suspendida | `/blocked?type=tenant` |
|
|
294
|
+
| `APP_SUBSCRIPTION_LOCKED` | Suscripción bloqueada | `/blocked?type=subscription` |
|
|
295
|
+
| `TRIAL_EXPIRED` | Trial expirado | `/blocked?type=trial` |
|
|
296
|
+
|
|
297
|
+
Ver **[MIGRATION_GUIDE.md](./MIGRATION_GUIDE.md)** para instrucciones detalladas.
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
229
301
|
## 🔄 Cómo Funciona
|
|
230
302
|
|
|
231
303
|
### Flujo estándar (con `checkSession()`)
|
|
@@ -279,13 +351,18 @@ const user = await auth.checkSession();
|
|
|
279
351
|
|
|
280
352
|
```typescript
|
|
281
353
|
interface TGTUser {
|
|
282
|
-
sub: string; // ID
|
|
354
|
+
sub: string; // ID único del usuario
|
|
283
355
|
email: string;
|
|
356
|
+
email_verified: boolean;
|
|
284
357
|
name: string;
|
|
285
358
|
tenant_id: string;
|
|
286
359
|
tenant_name: string;
|
|
287
360
|
roles: Record<string, string[]>; // { console: ['owner'], zenith: ['admin'] }
|
|
288
361
|
}
|
|
362
|
+
|
|
363
|
+
// ⚠️ IMPORTANTE: Los roles están en USER, no en session directamente
|
|
364
|
+
// ✅ Correcto: session.user.roles
|
|
365
|
+
// ❌ Incorrecto: session.roles (no existe)
|
|
289
366
|
```
|
|
290
367
|
|
|
291
368
|
---
|
|
@@ -296,9 +373,11 @@ interface TGTUser {
|
|
|
296
373
|
interface TGTAuthConfig {
|
|
297
374
|
identityUrl: string; // URL del backend Identity
|
|
298
375
|
appDomain: string; // Dominio de tu app
|
|
299
|
-
allowedRedirectHosts?: string[]; //
|
|
376
|
+
allowedRedirectHosts?: string[]; // Hosts permitidos para redirecciones (opcional)
|
|
300
377
|
onAuthSuccess?: (session: TGTSession) => void;
|
|
301
|
-
onAuthFailure?: () => void;
|
|
378
|
+
onAuthFailure?: (error?: AuthError) => void;
|
|
379
|
+
onSessionRevoked?: (error: AuthError) => void; // 🆕 Callback para sesión revocada
|
|
380
|
+
heartbeatIntervalMs?: number; // 🆕 Intervalo de validación de sesión (default: 5 min)
|
|
302
381
|
debug?: boolean;
|
|
303
382
|
}
|
|
304
383
|
```
|
|
@@ -310,7 +389,7 @@ const auth = new TGTAuthClient({
|
|
|
310
389
|
identityUrl: 'https://identity.tgtone.cl',
|
|
311
390
|
appDomain: 'tgtone.cl',
|
|
312
391
|
|
|
313
|
-
//
|
|
392
|
+
// Permitir redirecciones a estos dominios
|
|
314
393
|
allowedRedirectHosts: [
|
|
315
394
|
'tgtone.cl',
|
|
316
395
|
'www.tgtone.cl',
|
|
@@ -321,21 +400,55 @@ const auth = new TGTAuthClient({
|
|
|
321
400
|
// Callbacks opcionales
|
|
322
401
|
onAuthSuccess: (session) => {
|
|
323
402
|
console.log('Usuario autenticado:', session.user.email);
|
|
324
|
-
//
|
|
403
|
+
// Iniciar heartbeat para detectar sesión revocada
|
|
404
|
+
auth.startHeartbeat();
|
|
325
405
|
},
|
|
326
406
|
|
|
327
|
-
onAuthFailure: () => {
|
|
328
|
-
console.log('Sin sesión');
|
|
407
|
+
onAuthFailure: (error) => {
|
|
408
|
+
console.log('Sin sesión:', error?.message);
|
|
329
409
|
// Mostrar landing page pública
|
|
330
410
|
},
|
|
331
411
|
|
|
412
|
+
// 🆕 Manejar sesión revocada (usuario/tenant eliminado)
|
|
413
|
+
onSessionRevoked: (error) => {
|
|
414
|
+
console.log('Sesión revocada:', error.code, error.message);
|
|
415
|
+
// Opcional: analytics, logging, etc.
|
|
416
|
+
// Si no se define, redirige automáticamente a /blocked
|
|
417
|
+
},
|
|
418
|
+
|
|
419
|
+
// 🆕 Validar sesión cada 5 minutos (default)
|
|
420
|
+
heartbeatIntervalMs: 5 * 60 * 1000, // 5 minutos
|
|
421
|
+
// Para deshabilitar: heartbeatIntervalMs: 0
|
|
422
|
+
|
|
332
423
|
debug: true // Logs en consola para desarrollo
|
|
333
424
|
});
|
|
334
425
|
```
|
|
335
426
|
|
|
336
427
|
---
|
|
337
428
|
|
|
338
|
-
##
|
|
429
|
+
## � Flujo SSO y Redirecciones
|
|
430
|
+
|
|
431
|
+
El SDK está diseñado para manejar el flujo de Single Sign-On (SSO) de forma automática.
|
|
432
|
+
|
|
433
|
+
1. **Redirección al Identity**: Usa `auth.redirectToLogin()` para enviar al usuario al portal central de Identity.
|
|
434
|
+
2. **Retorno con Token**: Tras el login exitoso, Identity redirige de vuelta a tu app con un parámetro `?token=...` en la URL.
|
|
435
|
+
3. **Captura Automática**: Al llamar a `auth.checkSession()`, el SDK detecta el token en la URL, lo guarda en `localStorage` y limpia la URL.
|
|
436
|
+
|
|
437
|
+
### ⚠️ Nota Crítica para SPAs (React/Vue/etc)
|
|
438
|
+
|
|
439
|
+
En aplicaciones con enrutamiento en el cliente (como React Router), es vital **bloquear el renderizado de las rutas** mientras el SDK está verificando la sesión inicial.
|
|
440
|
+
|
|
441
|
+
Si el Router se monta y detecta una ruta protegida antes de que `checkSession()` termine, podría redirigir al usuario a `/login`, limpiando los parámetros de la URL y causando que el SDK pierda el token que venía desde Identity.
|
|
442
|
+
|
|
443
|
+
**Solución recomendada:**
|
|
444
|
+
```tsx
|
|
445
|
+
if (loading) return <LoadingSpinner />;
|
|
446
|
+
return <AppRouter />;
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
---
|
|
450
|
+
|
|
451
|
+
## �🔐 Seguridad
|
|
339
452
|
|
|
340
453
|
- **Token storage**: localStorage (`tgtone_auth_token`)
|
|
341
454
|
- **Transport**: Authorization header con Bearer token
|
|
@@ -344,11 +457,24 @@ const auth = new TGTAuthClient({
|
|
|
344
457
|
|
|
345
458
|
---
|
|
346
459
|
|
|
347
|
-
**Versión:** 1.
|
|
348
|
-
**Última actualización:**
|
|
460
|
+
**Versión:** 1.3.0
|
|
461
|
+
**Última actualización:** 2026-03-26
|
|
349
462
|
|
|
350
463
|
## 🆕 Changelog
|
|
351
464
|
|
|
465
|
+
### v1.3.0 (2026-03-26)
|
|
466
|
+
- ✅ **Session Revocation**: Detección automática de usuario/tenant eliminado
|
|
467
|
+
- ✅ `startHeartbeat()` / `stopHeartbeat()` - Validación periódica de sesión
|
|
468
|
+
- ✅ `onSessionRevoked` - Callback para sesión revocada
|
|
469
|
+
- ✅ `getBlockedRedirectUrl()` - URL de redirección para sesión revocada
|
|
470
|
+
- ✅ Nuevo módulo `interceptor.ts` para Axios/Fetch
|
|
471
|
+
- ✅ Hook `useTGTAuth` mejorado con `enableHeartbeat` y `showRevokedState`
|
|
472
|
+
- ✅ Página `/blocked` mejorada en Identity con soporte para tipos de error
|
|
473
|
+
|
|
474
|
+
### v1.2.3 (2025-12-27)
|
|
475
|
+
- ✅ Mejora en el flujo de captura de token desde URL para evitar race conditions en SPAs.
|
|
476
|
+
- ✅ Documentación actualizada sobre mejores prácticas de integración con React/Lovable.
|
|
477
|
+
|
|
352
478
|
### v1.2.0 (2025-10-30)
|
|
353
479
|
- ✅ `checkSessionSilent()` - Verificar sesión sin redirigir automáticamente
|
|
354
480
|
- ✅ `allowedRedirectHosts` - Configurar hosts permitidos para redirecciones
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export { TGTAuthClient } from './tgtone-auth-client';
|
|
1
|
+
export { TGTAuthClient, isRevocationError, REVOCATION_ERROR_CODES } from './tgtone-auth-client';
|
|
2
2
|
export { useTGTAuth } from './react-hook';
|
|
3
|
-
export
|
|
4
|
-
export type {
|
|
3
|
+
export { createAxiosInterceptor, createAuthFetch, handleAuthError } from './interceptor';
|
|
4
|
+
export type { InterceptorConfig } from './interceptor';
|
|
5
|
+
export type { TGTUser, TGTAuthConfig, SessionResponse, AuthErrorCode, AuthError, } from './tgtone-auth-client';
|
|
6
|
+
export type { UseTGTAuthResult, UseTGTAuthConfig } from './react-hook';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGhG,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACzF,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,YAAY,EACV,OAAO,EACP,aAAa,EACb,eAAe,EACf,aAAa,EACb,SAAS,GACV,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { TGTAuthClient } from './tgtone-auth-client';
|
|
1
|
+
export { TGTAuthClient, isRevocationError, REVOCATION_ERROR_CODES } from './tgtone-auth-client';
|
|
2
2
|
export { useTGTAuth } from './react-hook';
|
|
3
|
+
export { createAxiosInterceptor, createAuthFetch, handleAuthError } from './interceptor';
|
|
3
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGhG,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { TGTAuthClient, AuthError } from './tgtone-auth-client';
|
|
2
|
+
export interface InterceptorConfig {
|
|
3
|
+
handleRevoked?: boolean;
|
|
4
|
+
onAuthError?: (error: AuthError) => void;
|
|
5
|
+
excludeUrls?: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function createAxiosInterceptor(axios: any, authClient: TGTAuthClient, config?: InterceptorConfig): () => void;
|
|
8
|
+
export declare function createAuthFetch(authClient: TGTAuthClient, config?: InterceptorConfig): (url: string | URL, init?: RequestInit) => Promise<Response>;
|
|
9
|
+
export declare function handleAuthError(error: {
|
|
10
|
+
response?: {
|
|
11
|
+
status?: number;
|
|
12
|
+
data?: {
|
|
13
|
+
code?: string;
|
|
14
|
+
message?: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
}, authClient: TGTAuthClient, options?: {
|
|
18
|
+
onRevoked?: (error: AuthError) => void;
|
|
19
|
+
}): boolean;
|
|
20
|
+
declare const _default: {
|
|
21
|
+
createAxiosInterceptor: typeof createAxiosInterceptor;
|
|
22
|
+
createAuthFetch: typeof createAuthFetch;
|
|
23
|
+
handleAuthError: typeof handleAuthError;
|
|
24
|
+
};
|
|
25
|
+
export default _default;
|
|
26
|
+
//# sourceMappingURL=interceptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../interceptor.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAiB,MAAM,sBAAsB,CAAC;AAM/E,MAAM,WAAW,iBAAiB;IAKhC,aAAa,CAAC,EAAE,OAAO,CAAC;IAMxB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAMzC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AA6BD,wBAAgB,sBAAsB,CAEpC,KAAK,EAAE,GAAG,EACV,UAAU,EAAE,aAAa,EACzB,MAAM,GAAE,iBAAsB,GAC7B,MAAM,IAAI,CAqDZ;AAyBD,wBAAgB,eAAe,CAC7B,UAAU,EAAE,aAAa,EACzB,MAAM,GAAE,iBAAsB,GAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CA4D9D;AAgCD,wBAAgB,eAAe,CAC7B,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,EACrF,UAAU,EAAE,aAAa,EACzB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;CAAO,GACvD,OAAO,CA6BT;;;;;;AAED,wBAIE"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
export function createAxiosInterceptor(axios, authClient, config = {}) {
|
|
2
|
+
const { handleRevoked = true, onAuthError, excludeUrls = [] } = config;
|
|
3
|
+
const interceptorId = axios.interceptors.response.use((response) => response, (error) => {
|
|
4
|
+
if (!error.response) {
|
|
5
|
+
return Promise.reject(error);
|
|
6
|
+
}
|
|
7
|
+
const { status, data } = error.response;
|
|
8
|
+
const requestUrl = error.config?.url || '';
|
|
9
|
+
const isExcluded = excludeUrls.some(url => requestUrl.includes(url));
|
|
10
|
+
if (isExcluded) {
|
|
11
|
+
return Promise.reject(error);
|
|
12
|
+
}
|
|
13
|
+
if (status === 401) {
|
|
14
|
+
const authError = data?.code && data?.message
|
|
15
|
+
? {
|
|
16
|
+
code: data.code,
|
|
17
|
+
message: data.message,
|
|
18
|
+
}
|
|
19
|
+
: undefined;
|
|
20
|
+
if (authError && isRevocationError(authError.code) && handleRevoked) {
|
|
21
|
+
authClient.stopHeartbeat();
|
|
22
|
+
if (onAuthError) {
|
|
23
|
+
onAuthError(authError);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
const blockedUrl = authClient.getBlockedRedirectUrl(authError);
|
|
27
|
+
window.location.href = blockedUrl;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return Promise.reject(error);
|
|
32
|
+
});
|
|
33
|
+
return () => {
|
|
34
|
+
axios.interceptors.response.eject(interceptorId);
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function createAuthFetch(authClient, config = {}) {
|
|
38
|
+
const { handleRevoked = true, onAuthError, excludeUrls = [] } = config;
|
|
39
|
+
return async (url, init) => {
|
|
40
|
+
const urlString = url.toString();
|
|
41
|
+
const token = authClient.getToken();
|
|
42
|
+
const headers = new Headers(init?.headers);
|
|
43
|
+
if (token && !headers.has('Authorization')) {
|
|
44
|
+
headers.set('Authorization', `Bearer ${token}`);
|
|
45
|
+
}
|
|
46
|
+
const response = await fetch(url, {
|
|
47
|
+
...init,
|
|
48
|
+
headers,
|
|
49
|
+
});
|
|
50
|
+
const isExcluded = excludeUrls.some(excludedUrl => urlString.includes(excludedUrl));
|
|
51
|
+
if (isExcluded) {
|
|
52
|
+
return response;
|
|
53
|
+
}
|
|
54
|
+
if (response.status === 401 && handleRevoked) {
|
|
55
|
+
try {
|
|
56
|
+
const clonedResponse = response.clone();
|
|
57
|
+
const errorData = await clonedResponse.json();
|
|
58
|
+
if (errorData?.code && errorData?.message) {
|
|
59
|
+
const authError = {
|
|
60
|
+
code: errorData.code,
|
|
61
|
+
message: errorData.message,
|
|
62
|
+
};
|
|
63
|
+
if (isRevocationError(authError.code)) {
|
|
64
|
+
authClient.stopHeartbeat();
|
|
65
|
+
if (onAuthError) {
|
|
66
|
+
onAuthError(authError);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const blockedUrl = authClient.getBlockedRedirectUrl(authError);
|
|
70
|
+
window.location.href = blockedUrl;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return response;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function isRevocationError(code) {
|
|
82
|
+
return ['TENANT_INACTIVE', 'USER_INACTIVE', 'USER_NOT_FOUND'].includes(code);
|
|
83
|
+
}
|
|
84
|
+
export function handleAuthError(error, authClient, options = {}) {
|
|
85
|
+
if (!error.response || error.response.status !== 401) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
const { data } = error.response;
|
|
89
|
+
if (!data?.code || !data?.message) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
const authError = {
|
|
93
|
+
code: data.code,
|
|
94
|
+
message: data.message,
|
|
95
|
+
};
|
|
96
|
+
if (isRevocationError(authError.code)) {
|
|
97
|
+
authClient.stopHeartbeat();
|
|
98
|
+
if (options.onRevoked) {
|
|
99
|
+
options.onRevoked(authError);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const blockedUrl = authClient.getBlockedRedirectUrl(authError);
|
|
103
|
+
window.location.href = blockedUrl;
|
|
104
|
+
}
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
export default {
|
|
110
|
+
createAxiosInterceptor,
|
|
111
|
+
createAuthFetch,
|
|
112
|
+
handleAuthError,
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=interceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../interceptor.ts"],"names":[],"mappings":"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"}
|
package/dist/react-hook.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import { TGTAuthClient, TGTSession, TGTAuthConfig } from './tgtone-auth-client';
|
|
1
|
+
import { TGTAuthClient, TGTSession, TGTAuthConfig, AuthError } from './tgtone-auth-client';
|
|
2
|
+
export interface UseTGTAuthConfig extends TGTAuthConfig {
|
|
3
|
+
enableHeartbeat?: boolean;
|
|
4
|
+
showRevokedState?: boolean;
|
|
5
|
+
}
|
|
2
6
|
export interface UseTGTAuthResult {
|
|
3
7
|
session: TGTSession | null;
|
|
4
8
|
loading: boolean;
|
|
@@ -8,6 +12,11 @@ export interface UseTGTAuthResult {
|
|
|
8
12
|
hasAccessToApp: (appName: string) => boolean;
|
|
9
13
|
tenantId: string | null;
|
|
10
14
|
authClient: TGTAuthClient;
|
|
15
|
+
revokedError: AuthError | null;
|
|
16
|
+
isHeartbeatActive: boolean;
|
|
17
|
+
startHeartbeat: () => void;
|
|
18
|
+
stopHeartbeat: () => void;
|
|
11
19
|
}
|
|
12
|
-
export declare function useTGTAuth(config:
|
|
20
|
+
export declare function useTGTAuth(config: UseTGTAuthConfig): UseTGTAuthResult;
|
|
21
|
+
export default useTGTAuth;
|
|
13
22
|
//# sourceMappingURL=react-hook.d.ts.map
|
package/dist/react-hook.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-hook.d.ts","sourceRoot":"","sources":["../react-hook.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"react-hook.d.ts","sourceRoot":"","sources":["../react-hook.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE3F,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IAKrD,eAAe,CAAC,EAAE,OAAO,CAAC;IAO1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAE/B,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IAG3B,OAAO,EAAE,OAAO,CAAC;IAGjB,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5B,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAGxD,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAGxC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAG7C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAGxB,UAAU,EAAE,aAAa,CAAC;IAG1B,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IAG/B,iBAAiB,EAAE,OAAO,CAAC;IAG3B,cAAc,EAAE,MAAM,IAAI,CAAC;IAG3B,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAgED,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAwFrE;AAED,eAAe,UAAU,CAAC"}
|
package/dist/react-hook.js
CHANGED
|
@@ -1,14 +1,34 @@
|
|
|
1
|
-
import { useState, useEffect } from 'react';
|
|
1
|
+
import { useState, useEffect, useCallback, useRef } from 'react';
|
|
2
2
|
import { TGTAuthClient } from './tgtone-auth-client';
|
|
3
3
|
export function useTGTAuth(config) {
|
|
4
4
|
const [session, setSession] = useState(null);
|
|
5
5
|
const [loading, setLoading] = useState(true);
|
|
6
|
-
const [
|
|
6
|
+
const [revokedError, setRevokedError] = useState(null);
|
|
7
|
+
const [isHeartbeatActive, setIsHeartbeatActive] = useState(false);
|
|
8
|
+
const clientRef = useRef(null);
|
|
9
|
+
if (!clientRef.current) {
|
|
10
|
+
const { enableHeartbeat = true, showRevokedState = false, ...authConfig } = config;
|
|
11
|
+
const finalConfig = {
|
|
12
|
+
...authConfig,
|
|
13
|
+
onSessionRevoked: showRevokedState
|
|
14
|
+
? (error) => {
|
|
15
|
+
setRevokedError(error);
|
|
16
|
+
setSession(null);
|
|
17
|
+
}
|
|
18
|
+
: authConfig.onSessionRevoked,
|
|
19
|
+
};
|
|
20
|
+
clientRef.current = new TGTAuthClient(finalConfig);
|
|
21
|
+
}
|
|
22
|
+
const authClient = clientRef.current;
|
|
7
23
|
useEffect(() => {
|
|
8
24
|
async function validateSession() {
|
|
9
25
|
try {
|
|
10
26
|
const authenticatedSession = await authClient.checkSession();
|
|
11
27
|
setSession(authenticatedSession);
|
|
28
|
+
if (authenticatedSession && config.enableHeartbeat !== false) {
|
|
29
|
+
authClient.startHeartbeat();
|
|
30
|
+
setIsHeartbeatActive(true);
|
|
31
|
+
}
|
|
12
32
|
}
|
|
13
33
|
catch (error) {
|
|
14
34
|
console.error('[useTGTAuth] Error validando sesión:', error);
|
|
@@ -19,11 +39,25 @@ export function useTGTAuth(config) {
|
|
|
19
39
|
}
|
|
20
40
|
}
|
|
21
41
|
validateSession();
|
|
22
|
-
|
|
23
|
-
|
|
42
|
+
return () => {
|
|
43
|
+
authClient.stopHeartbeat();
|
|
44
|
+
};
|
|
45
|
+
}, [authClient, config.enableHeartbeat]);
|
|
46
|
+
const logout = useCallback(async () => {
|
|
47
|
+
authClient.stopHeartbeat();
|
|
48
|
+
setIsHeartbeatActive(false);
|
|
24
49
|
await authClient.logout();
|
|
25
50
|
setSession(null);
|
|
26
|
-
|
|
51
|
+
setRevokedError(null);
|
|
52
|
+
}, [authClient]);
|
|
53
|
+
const startHeartbeat = useCallback(() => {
|
|
54
|
+
authClient.startHeartbeat();
|
|
55
|
+
setIsHeartbeatActive(authClient.isHeartbeatActive());
|
|
56
|
+
}, [authClient]);
|
|
57
|
+
const stopHeartbeat = useCallback(() => {
|
|
58
|
+
authClient.stopHeartbeat();
|
|
59
|
+
setIsHeartbeatActive(false);
|
|
60
|
+
}, [authClient]);
|
|
27
61
|
return {
|
|
28
62
|
session,
|
|
29
63
|
loading,
|
|
@@ -33,6 +67,11 @@ export function useTGTAuth(config) {
|
|
|
33
67
|
hasAccessToApp: authClient.hasAccessToApp.bind(authClient),
|
|
34
68
|
tenantId: authClient.getTenantId(),
|
|
35
69
|
authClient,
|
|
70
|
+
revokedError,
|
|
71
|
+
isHeartbeatActive,
|
|
72
|
+
startHeartbeat,
|
|
73
|
+
stopHeartbeat,
|
|
36
74
|
};
|
|
37
75
|
}
|
|
76
|
+
export default useTGTAuth;
|
|
38
77
|
//# sourceMappingURL=react-hook.js.map
|
package/dist/react-hook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-hook.js","sourceRoot":"","sources":["../react-hook.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"react-hook.js","sourceRoot":"","sources":["../react-hook.tsx"],"names":[],"mappings":"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"}
|
|
@@ -31,13 +31,20 @@ export interface TGTAuthConfig {
|
|
|
31
31
|
identityUrl: string;
|
|
32
32
|
appDomain: string;
|
|
33
33
|
onAuthSuccess?: (session: TGTSession) => void;
|
|
34
|
-
onAuthFailure?: () => void;
|
|
34
|
+
onAuthFailure?: (error?: AuthError) => void;
|
|
35
|
+
onSessionRevoked?: (error: AuthError) => void;
|
|
35
36
|
debug?: boolean;
|
|
36
37
|
allowedRedirectHosts?: string[];
|
|
38
|
+
heartbeatIntervalMs?: number;
|
|
37
39
|
}
|
|
38
40
|
export interface SessionResponse {
|
|
39
41
|
user: TGTUser;
|
|
40
42
|
}
|
|
43
|
+
export type AuthErrorCode = 'TENANT_INACTIVE' | 'USER_INACTIVE' | 'USER_NOT_FOUND' | 'APP_SUBSCRIPTION_LOCKED' | 'TRIAL_EXPIRED';
|
|
44
|
+
export interface AuthError {
|
|
45
|
+
code: AuthErrorCode;
|
|
46
|
+
message: string;
|
|
47
|
+
}
|
|
41
48
|
export interface SignupData {
|
|
42
49
|
email: string;
|
|
43
50
|
password?: string;
|
|
@@ -48,6 +55,7 @@ export interface SignupData {
|
|
|
48
55
|
export interface LoginData {
|
|
49
56
|
email: string;
|
|
50
57
|
password: string;
|
|
58
|
+
targetApp?: string;
|
|
51
59
|
}
|
|
52
60
|
export interface AuthResponse {
|
|
53
61
|
token: string;
|
|
@@ -67,10 +75,13 @@ export interface AuthResponse {
|
|
|
67
75
|
export declare class TGTAuthClient {
|
|
68
76
|
private static readonly TOKEN_KEY;
|
|
69
77
|
private static readonly TEMP_TOKEN_KEY;
|
|
78
|
+
private static readonly DEFAULT_HEARTBEAT_INTERVAL_MS;
|
|
70
79
|
private config;
|
|
71
80
|
private currentUser;
|
|
72
81
|
private currentSession;
|
|
73
82
|
private allowedRedirectHosts;
|
|
83
|
+
private heartbeatTimer;
|
|
84
|
+
private isHeartbeatRunning;
|
|
74
85
|
constructor(config: TGTAuthConfig);
|
|
75
86
|
signup(data: SignupData): Promise<AuthResponse>;
|
|
76
87
|
login(data: LoginData): Promise<AuthResponse>;
|
|
@@ -78,6 +89,7 @@ export declare class TGTAuthClient {
|
|
|
78
89
|
getSession(): TGTSession | null;
|
|
79
90
|
getUser(): TGTUser | null;
|
|
80
91
|
getTenantId(): string | null;
|
|
92
|
+
getToken(): string | null;
|
|
81
93
|
redirectToLogin(redirectUrl?: string): void;
|
|
82
94
|
checkSessionSilent(validateWithServer?: boolean): Promise<TGTSession | null>;
|
|
83
95
|
isRedirectAllowed(redirectUrl: string): boolean;
|
|
@@ -86,8 +98,16 @@ export declare class TGTAuthClient {
|
|
|
86
98
|
hasRole(appName: string, roleName: string): boolean;
|
|
87
99
|
getRoles(appName: string): string[];
|
|
88
100
|
hasAccessToApp(appName: string): boolean;
|
|
101
|
+
startHeartbeat(): void;
|
|
102
|
+
stopHeartbeat(): void;
|
|
103
|
+
isHeartbeatActive(): boolean;
|
|
104
|
+
getBlockedRedirectUrl(error: AuthError): string;
|
|
105
|
+
private handleSessionRevoked;
|
|
106
|
+
private isRevocationError;
|
|
107
|
+
private mapErrorCodeToBlockedType;
|
|
89
108
|
private getTokenFromUrl;
|
|
90
109
|
private removeTokenFromUrl;
|
|
110
|
+
private getCurrentAppKey;
|
|
91
111
|
private storeToken;
|
|
92
112
|
private getStoredToken;
|
|
93
113
|
private clearStoredToken;
|
|
@@ -98,5 +118,7 @@ export declare class TGTAuthClient {
|
|
|
98
118
|
private log;
|
|
99
119
|
}
|
|
100
120
|
export declare function useTGTAuth(config: TGTAuthConfig): void;
|
|
121
|
+
export declare const REVOCATION_ERROR_CODES: AuthErrorCode[];
|
|
122
|
+
export declare function isRevocationError(code: AuthErrorCode): boolean;
|
|
101
123
|
export default TGTAuthClient;
|
|
102
124
|
//# sourceMappingURL=tgtone-auth-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tgtone-auth-client.d.ts","sourceRoot":"","sources":["../tgtone-auth-client.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAK5B,WAAW,EAAE,MAAM,CAAC;IAMpB,SAAS,EAAE,MAAM,CAAC;IAMlB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;IAM9C,aAAa,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"tgtone-auth-client.d.ts","sourceRoot":"","sources":["../tgtone-auth-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,15 +4,23 @@ export class TGTAuthClient {
|
|
|
4
4
|
this.currentUser = null;
|
|
5
5
|
this.currentSession = null;
|
|
6
6
|
this.allowedRedirectHosts = [];
|
|
7
|
+
this.heartbeatTimer = null;
|
|
8
|
+
this.isHeartbeatRunning = false;
|
|
7
9
|
this.config = {
|
|
8
10
|
onAuthSuccess: () => { },
|
|
9
11
|
onAuthFailure: () => { },
|
|
12
|
+
onSessionRevoked: undefined,
|
|
10
13
|
debug: false,
|
|
14
|
+
heartbeatIntervalMs: TGTAuthClient.DEFAULT_HEARTBEAT_INTERVAL_MS,
|
|
11
15
|
...config,
|
|
12
16
|
allowedRedirectHosts: config.allowedRedirectHosts ?? [config.appDomain],
|
|
13
17
|
};
|
|
14
18
|
this.allowedRedirectHosts = this.config.allowedRedirectHosts || [this.config.appDomain];
|
|
15
|
-
this.log('🔹 TGT Auth Client inicializado',
|
|
19
|
+
this.log('🔹 TGT Auth Client inicializado', {
|
|
20
|
+
identityUrl: this.config.identityUrl,
|
|
21
|
+
appDomain: this.config.appDomain,
|
|
22
|
+
heartbeatIntervalMs: this.config.heartbeatIntervalMs,
|
|
23
|
+
});
|
|
16
24
|
}
|
|
17
25
|
async signup(data) {
|
|
18
26
|
try {
|
|
@@ -62,12 +70,16 @@ export class TGTAuthClient {
|
|
|
62
70
|
async login(data) {
|
|
63
71
|
try {
|
|
64
72
|
this.log('🔹 Iniciando sesión...');
|
|
73
|
+
const targetApp = data.targetApp || this.getCurrentAppKey();
|
|
65
74
|
const response = await fetch(`${this.config.identityUrl}/api/v1/auth/login`, {
|
|
66
75
|
method: 'POST',
|
|
67
76
|
headers: {
|
|
68
77
|
'Content-Type': 'application/json',
|
|
69
78
|
},
|
|
70
|
-
body: JSON.stringify(
|
|
79
|
+
body: JSON.stringify({
|
|
80
|
+
...data,
|
|
81
|
+
...(targetApp ? { targetApp } : {}),
|
|
82
|
+
}),
|
|
71
83
|
});
|
|
72
84
|
if (!response.ok) {
|
|
73
85
|
const error = await response.json().catch(() => ({ message: 'Credenciales inválidas' }));
|
|
@@ -158,7 +170,11 @@ export class TGTAuthClient {
|
|
|
158
170
|
this.log('🔹 Expira:', expiresAt);
|
|
159
171
|
this.log('🔹 Roles:', decoded.roles);
|
|
160
172
|
this.log('🔹 Verificando sesión con backend...');
|
|
161
|
-
const
|
|
173
|
+
const appKey = this.getCurrentAppKey();
|
|
174
|
+
const meUrl = appKey
|
|
175
|
+
? `${this.config.identityUrl}/api/v1/auth/me?app=${encodeURIComponent(appKey)}`
|
|
176
|
+
: `${this.config.identityUrl}/api/v1/auth/me`;
|
|
177
|
+
const response = await fetch(meUrl, {
|
|
162
178
|
method: 'GET',
|
|
163
179
|
headers: {
|
|
164
180
|
'Content-Type': 'application/json',
|
|
@@ -167,8 +183,21 @@ export class TGTAuthClient {
|
|
|
167
183
|
});
|
|
168
184
|
if (!response.ok) {
|
|
169
185
|
this.log('❌ Backend rechazó el token (HTTP', response.status, ')');
|
|
186
|
+
let authError;
|
|
187
|
+
try {
|
|
188
|
+
const errorData = await response.json();
|
|
189
|
+
if (errorData.code && errorData.message) {
|
|
190
|
+
authError = {
|
|
191
|
+
code: errorData.code,
|
|
192
|
+
message: errorData.message,
|
|
193
|
+
};
|
|
194
|
+
this.log('❌ Error de autenticación:', authError.code, '-', authError.message);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
}
|
|
170
199
|
this.clearStoredToken();
|
|
171
|
-
this.handleNoSession();
|
|
200
|
+
this.handleNoSession(authError);
|
|
172
201
|
return null;
|
|
173
202
|
}
|
|
174
203
|
const data = await response.json();
|
|
@@ -214,6 +243,9 @@ Posibles causas:
|
|
|
214
243
|
getTenantId() {
|
|
215
244
|
return this.currentSession?.tenantId || null;
|
|
216
245
|
}
|
|
246
|
+
getToken() {
|
|
247
|
+
return this.getStoredToken();
|
|
248
|
+
}
|
|
217
249
|
redirectToLogin(redirectUrl) {
|
|
218
250
|
let redirectParam = this.config.appDomain;
|
|
219
251
|
if (redirectUrl && this.isRedirectAllowed(redirectUrl)) {
|
|
@@ -263,7 +295,11 @@ Posibles causas:
|
|
|
263
295
|
}
|
|
264
296
|
if (validateWithServer) {
|
|
265
297
|
try {
|
|
266
|
-
const
|
|
298
|
+
const appKey = this.getCurrentAppKey();
|
|
299
|
+
const meUrl = appKey
|
|
300
|
+
? `${this.config.identityUrl}/api/v1/auth/me?app=${encodeURIComponent(appKey)}`
|
|
301
|
+
: `${this.config.identityUrl}/api/v1/auth/me`;
|
|
302
|
+
const response = await fetch(meUrl, {
|
|
267
303
|
method: 'GET',
|
|
268
304
|
headers: {
|
|
269
305
|
'Content-Type': 'application/json',
|
|
@@ -413,6 +449,108 @@ Posibles causas:
|
|
|
413
449
|
hasAccessToApp(appName) {
|
|
414
450
|
return this.getRoles(appName).length > 0;
|
|
415
451
|
}
|
|
452
|
+
startHeartbeat() {
|
|
453
|
+
if (this.config.heartbeatIntervalMs === 0) {
|
|
454
|
+
this.log('🔹 Heartbeat deshabilitado (interval = 0)');
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
if (this.isHeartbeatRunning) {
|
|
458
|
+
this.log('⚠️ Heartbeat ya está corriendo');
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
this.log(`🔹 Iniciando heartbeat cada ${this.config.heartbeatIntervalMs / 1000}s`);
|
|
462
|
+
this.isHeartbeatRunning = true;
|
|
463
|
+
this.heartbeatTimer = setInterval(async () => {
|
|
464
|
+
try {
|
|
465
|
+
this.log('💓 Heartbeat: verificando sesión...');
|
|
466
|
+
const token = this.getStoredToken();
|
|
467
|
+
if (!token) {
|
|
468
|
+
this.log('💓 Heartbeat: no hay token, deteniendo');
|
|
469
|
+
this.stopHeartbeat();
|
|
470
|
+
return;
|
|
471
|
+
}
|
|
472
|
+
const appKey = this.getCurrentAppKey();
|
|
473
|
+
const meUrl = appKey
|
|
474
|
+
? `${this.config.identityUrl}/api/v1/auth/me?app=${encodeURIComponent(appKey)}`
|
|
475
|
+
: `${this.config.identityUrl}/api/v1/auth/me`;
|
|
476
|
+
const response = await fetch(meUrl, {
|
|
477
|
+
method: 'GET',
|
|
478
|
+
headers: {
|
|
479
|
+
'Content-Type': 'application/json',
|
|
480
|
+
'Authorization': `Bearer ${token}`,
|
|
481
|
+
},
|
|
482
|
+
});
|
|
483
|
+
if (!response.ok) {
|
|
484
|
+
this.log('💓 Heartbeat: sesión rechazada (HTTP', response.status, ')');
|
|
485
|
+
let authError;
|
|
486
|
+
try {
|
|
487
|
+
const errorData = await response.json();
|
|
488
|
+
if (errorData.code && errorData.message) {
|
|
489
|
+
authError = {
|
|
490
|
+
code: errorData.code,
|
|
491
|
+
message: errorData.message,
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
catch {
|
|
496
|
+
}
|
|
497
|
+
if (authError && this.isRevocationError(authError.code)) {
|
|
498
|
+
this.log('💓 Heartbeat: sesión revocada:', authError.code);
|
|
499
|
+
this.stopHeartbeat();
|
|
500
|
+
this.handleSessionRevoked(authError);
|
|
501
|
+
}
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
this.log('💓 Heartbeat: sesión OK');
|
|
505
|
+
}
|
|
506
|
+
catch (error) {
|
|
507
|
+
this.log('💓 Heartbeat: error de red (ignorando):', error);
|
|
508
|
+
}
|
|
509
|
+
}, this.config.heartbeatIntervalMs);
|
|
510
|
+
}
|
|
511
|
+
stopHeartbeat() {
|
|
512
|
+
if (this.heartbeatTimer) {
|
|
513
|
+
clearInterval(this.heartbeatTimer);
|
|
514
|
+
this.heartbeatTimer = null;
|
|
515
|
+
this.isHeartbeatRunning = false;
|
|
516
|
+
this.log('🔹 Heartbeat detenido');
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
isHeartbeatActive() {
|
|
520
|
+
return this.isHeartbeatRunning;
|
|
521
|
+
}
|
|
522
|
+
getBlockedRedirectUrl(error) {
|
|
523
|
+
const type = this.mapErrorCodeToBlockedType(error.code);
|
|
524
|
+
return `${this.config.identityUrl}/blocked?type=${type}&message=${encodeURIComponent(error.message)}`;
|
|
525
|
+
}
|
|
526
|
+
handleSessionRevoked(error) {
|
|
527
|
+
this.log('🚫 Sesión revocada:', error.code, '-', error.message);
|
|
528
|
+
this.currentUser = null;
|
|
529
|
+
this.currentSession = null;
|
|
530
|
+
this.clearStoredToken();
|
|
531
|
+
this.clearTempToken();
|
|
532
|
+
if (this.config.onSessionRevoked) {
|
|
533
|
+
this.config.onSessionRevoked(error);
|
|
534
|
+
}
|
|
535
|
+
else {
|
|
536
|
+
const blockedUrl = this.getBlockedRedirectUrl(error);
|
|
537
|
+
this.log('🔄 Redirigiendo a blocked:', blockedUrl);
|
|
538
|
+
window.location.href = blockedUrl;
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
isRevocationError(code) {
|
|
542
|
+
return ['TENANT_INACTIVE', 'USER_INACTIVE', 'USER_NOT_FOUND'].includes(code);
|
|
543
|
+
}
|
|
544
|
+
mapErrorCodeToBlockedType(code) {
|
|
545
|
+
const mapping = {
|
|
546
|
+
'TENANT_INACTIVE': 'tenant',
|
|
547
|
+
'USER_INACTIVE': 'user',
|
|
548
|
+
'USER_NOT_FOUND': 'user',
|
|
549
|
+
'APP_SUBSCRIPTION_LOCKED': 'subscription',
|
|
550
|
+
'TRIAL_EXPIRED': 'trial',
|
|
551
|
+
};
|
|
552
|
+
return mapping[code] || 'unknown';
|
|
553
|
+
}
|
|
416
554
|
getTokenFromUrl() {
|
|
417
555
|
if (typeof window === 'undefined')
|
|
418
556
|
return null;
|
|
@@ -426,6 +564,17 @@ Posibles causas:
|
|
|
426
564
|
url.searchParams.delete('token');
|
|
427
565
|
window.history.replaceState({}, '', url.toString());
|
|
428
566
|
}
|
|
567
|
+
getCurrentAppKey() {
|
|
568
|
+
const host = this.config.appDomain?.split(':')[0]?.toLowerCase();
|
|
569
|
+
if (!host || host === 'localhost' || host === '127.0.0.1') {
|
|
570
|
+
return undefined;
|
|
571
|
+
}
|
|
572
|
+
const parts = host.split('.').filter(Boolean);
|
|
573
|
+
if (parts.length < 3) {
|
|
574
|
+
return undefined;
|
|
575
|
+
}
|
|
576
|
+
return parts[0];
|
|
577
|
+
}
|
|
429
578
|
storeToken(token) {
|
|
430
579
|
if (typeof window === 'undefined')
|
|
431
580
|
return;
|
|
@@ -492,8 +641,8 @@ Posibles causas:
|
|
|
492
641
|
this.log('❌ Error eliminando token temporal:', error);
|
|
493
642
|
}
|
|
494
643
|
}
|
|
495
|
-
handleNoSession() {
|
|
496
|
-
this.config.onAuthFailure();
|
|
644
|
+
handleNoSession(error) {
|
|
645
|
+
this.config.onAuthFailure(error);
|
|
497
646
|
this.redirectToLogin();
|
|
498
647
|
}
|
|
499
648
|
log(...args) {
|
|
@@ -504,8 +653,17 @@ Posibles causas:
|
|
|
504
653
|
}
|
|
505
654
|
TGTAuthClient.TOKEN_KEY = 'tgtone_auth_token';
|
|
506
655
|
TGTAuthClient.TEMP_TOKEN_KEY = 'tgtone_temp_token';
|
|
656
|
+
TGTAuthClient.DEFAULT_HEARTBEAT_INTERVAL_MS = 5 * 60 * 1000;
|
|
507
657
|
export function useTGTAuth(config) {
|
|
508
658
|
throw new Error('useTGTAuth requiere React. Importa desde tgtone-auth-client/react');
|
|
509
659
|
}
|
|
660
|
+
export const REVOCATION_ERROR_CODES = [
|
|
661
|
+
'TENANT_INACTIVE',
|
|
662
|
+
'USER_INACTIVE',
|
|
663
|
+
'USER_NOT_FOUND',
|
|
664
|
+
];
|
|
665
|
+
export function isRevocationError(code) {
|
|
666
|
+
return REVOCATION_ERROR_CODES.includes(code);
|
|
667
|
+
}
|
|
510
668
|
export default TGTAuthClient;
|
|
511
669
|
//# sourceMappingURL=tgtone-auth-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tgtone-auth-client.js","sourceRoot":"","sources":["../tgtone-auth-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tgtone-auth-client.js","sourceRoot":"","sources":["../tgtone-auth-client.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAkKvC,MAAM,OAAO,aAAa;IAexB,YAAY,MAAqB;QANzB,gBAAW,GAAmB,IAAI,CAAC;QACnC,mBAAc,GAAsB,IAAI,CAAC;QACzC,yBAAoB,GAAa,EAAE,CAAC;QACpC,mBAAc,GAA0C,IAAI,CAAC;QAC7D,uBAAkB,GAAG,KAAK,CAAC;QAGjC,IAAI,CAAC,MAAM,GAAG;YACZ,aAAa,EAAE,GAAG,EAAE,GAAE,CAAC;YACvB,aAAa,EAAE,GAAG,EAAE,GAAE,CAAC;YACvB,gBAAgB,EAAE,SAAS;YAC3B,KAAK,EAAE,KAAK;YACZ,mBAAmB,EAAE,aAAa,CAAC,6BAA6B;YAChE,GAAG,MAAM;YAET,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;SAC7C,CAAC;QAG7B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAExF,IAAI,CAAC,GAAG,CAAC,iCAAiC,EAAE;YAC1C,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YACpC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAChC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB;SACrD,CAAC,CAAC;IACL,CAAC;IA2BD,KAAK,CAAC,MAAM,CAAC,IAAgB;QAC3B,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAEvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,qBAAqB,EAAE;gBAC5E,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC;gBACvF,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,SAAS,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACvF,CAAC;YAED,MAAM,MAAM,GAAiB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnD,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,CAAC;YAGD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC;YACjD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAGvB,MAAM,OAAO,GAAG,SAAS,CAAa,KAAK,CAAC,CAAC;YAE7C,IAAI,CAAC,WAAW,GAAG;gBACjB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC;YAEF,IAAI,CAAC,cAAc,GAAG;gBACpB,IAAI,EAAE,IAAI,CAAC,WAAW;gBACtB,QAAQ,EAAE,OAAO,CAAC,SAAS;gBAC3B,UAAU,EAAE,OAAO,CAAC,WAAW;gBAC/B,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;aACxC,CAAC;YAEF,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE/C,OAAO,MAAM,CAAC;QAEhB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAwBD,KAAK,CAAC,KAAK,CAAC,IAAe;QACzB,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE5D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,oBAAoB,EAAE;gBAC3E,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,GAAG,IAAI;oBACP,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpC,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC;gBACzF,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,wBAAwB,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,MAAM,GAAiB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAGnD,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC3C,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAC7B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACtC,OAAO,MAAM,CAAC;YAChB,CAAC;YAGD,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,CAAC;YAGD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC;YACjD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAGvB,MAAM,OAAO,GAAG,SAAS,CAAa,KAAK,CAAC,CAAC;YAE7C,IAAI,CAAC,WAAW,GAAG;gBACjB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC;YAEF,IAAI,CAAC,cAAc,GAAG;gBACpB,IAAI,EAAE,IAAI,CAAC,WAAW;gBACtB,QAAQ,EAAE,OAAO,CAAC,SAAS;gBAC3B,UAAU,EAAE,OAAO,CAAC,WAAW;gBAC/B,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;aACxC,CAAC;YAEF,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE/C,OAAO,MAAM,CAAC;QAEhB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;YACrC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IA0BD,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;gBAC3D,OAAO,IAAI,CAAC;YACd,CAAC;YAGD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;gBAClE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAE1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,CAAC;YAGD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;gBAC3C,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAG/C,IAAI,OAAmB,CAAC;YACxB,IAAI,CAAC;gBACH,OAAO,GAAG,SAAS,CAAa,KAAK,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;gBAC9C,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC;YACd,CAAC;YAGD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;gBAC9C,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC;YACd,CAAC;YAGD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;YAE/C,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;gBAC7B,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;gBACzC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;YACpE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAGrC,IAAI,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM;gBAClB,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,uBAAuB,kBAAkB,CAAC,MAAM,CAAC,EAAE;gBAC/E,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,iBAAiB,CAAC;YAEhD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE;gBAClC,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,eAAe,EAAE,UAAU,KAAK,EAAE;iBACnC;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAGnE,IAAI,SAAgC,CAAC;gBACrC,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACxC,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;wBACxC,SAAS,GAAG;4BACV,IAAI,EAAE,SAAS,CAAC,IAAqB;4BACrC,OAAO,EAAE,SAAS,CAAC,OAAO;yBAC3B,CAAC;wBACF,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;oBAChF,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;gBAET,CAAC;gBAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;gBAChC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,IAAI,GAAoB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAGpD,MAAM,OAAO,GAAe;gBAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,OAAO,CAAC,SAAS;gBAC3B,UAAU,EAAE,OAAO,CAAC,WAAW;gBAC/B,SAAS,EAAE,SAAS;aACrB,CAAC;YAEF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;YAC7B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;YAE9B,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAEnC,OAAO,OAAO,CAAC;QAEjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YAE/C,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC5E,OAAO,CAAC,KAAK,CAAC;;;WAGX,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;WAClE,IAAI,CAAC,MAAM,CAAC,WAAW;;;;;;;SAOzB,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAQD,UAAU;QACR,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAQD,OAAO;QACL,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAOD,WAAW;QACT,OAAO,IAAI,CAAC,cAAc,EAAE,QAAQ,IAAI,IAAI,CAAC;IAC/C,CAAC;IAOD,QAAQ;QACN,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAMD,eAAe,CAAC,WAAoB;QAClC,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QAE1C,IAAI,WAAW,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;YACvD,aAAa,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,mBAAmB,aAAa,EAAE,CAAC;QAC9E,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjG,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC;IAClC,CAAC;IAQD,KAAK,CAAC,kBAAkB,CAAC,kBAAkB,GAAG,IAAI;QAChD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;gBACpE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;gBACpD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,OAAmB,CAAC;YACxB,IAAI,CAAC;gBACH,OAAO,GAAG,SAAS,CAAa,KAAK,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;gBACvD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;gBACvD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;gBAC7B,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;gBACtC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,kBAAkB,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACvC,MAAM,KAAK,GAAG,MAAM;wBAClB,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,uBAAuB,kBAAkB,CAAC,MAAM,CAAC,EAAE;wBAC/E,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,iBAAiB,CAAC;oBAEhD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE;wBAClC,MAAM,EAAE,KAAK;wBACb,OAAO,EAAE;4BACP,cAAc,EAAE,kBAAkB;4BAClC,eAAe,EAAE,UAAU,KAAK,EAAE;yBACnC;qBACF,CAAC,CAAC;oBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;wBACjB,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;wBAC5E,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,OAAO,IAAI,CAAC;oBACd,CAAC;oBAED,MAAM,IAAI,GAAoB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACpD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;oBAC/C,MAAM,OAAO,GAAe;wBAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,QAAQ,EAAE,OAAO,CAAC,SAAS;wBAC3B,UAAU,EAAE,OAAO,CAAC,WAAW;wBAC/B,SAAS;qBACV,CAAC;oBAGF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;oBAC7B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;oBAC9B,OAAO,OAAO,CAAC;gBACjB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,GAAG,CAAC,kDAAkD,EAAE,GAAG,CAAC,CAAC;oBAClE,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAGD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAe;gBAC1B,IAAI,EAAE;oBACJ,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,cAAc,EAAE,OAAO,CAAC,cAAc;oBACtC,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB;gBACD,QAAQ,EAAE,OAAO,CAAC,SAAS;gBAC3B,UAAU,EAAE,OAAO,CAAC,WAAW;gBAC/B,SAAS;aACV,CAAC;YAEF,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAChC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;YAC9B,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAMD,iBAAiB,CAAC,WAAmB;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC7B,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAMD,KAAK,CAAC,MAAM;QACV,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAE3F,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAEpC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,qBAAqB,EAAE;gBAC3D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,GAAG,CAAC,KAAK,IAAI,EAAE,eAAe,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;iBACrD;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAG7B,IAAI,CAAC,eAAe,EAAE,CAAC;QAEzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAE1F,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAmBD,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,IAAY;QAC7C,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAEzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,yBAAyB,EAAE;gBAChF,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;aAC1C,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,qBAAqB,CAAC,CAAC;YAC1D,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAGnC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC;YAE7C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,CAAC;YAGD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,CAAC,cAAc,EAAE,CAAC;YAGtB,MAAM,OAAO,GAAG,SAAS,CAAa,KAAK,CAAC,CAAC;YAE7C,IAAI,CAAC,WAAW,GAAG;gBACjB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC;YAEF,IAAI,CAAC,cAAc,GAAG;gBACpB,IAAI,EAAE,IAAI,CAAC,WAAW;gBACtB,QAAQ,EAAE,OAAO,CAAC,SAAS;gBAC3B,UAAU,EAAE,OAAO,CAAC,WAAW;gBAC/B,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;aACxC,CAAC;YAEF,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;YAC/D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE/C,OAAO,IAAI,CAAC,cAAc,CAAC;QAE7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAgBD,OAAO,CAAC,OAAe,EAAE,QAAgB;QACvC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACvD,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAQD,QAAQ,CAAC,OAAe;QACtB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;IAQD,cAAc,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,CAAC;IAsBD,cAAc;QACZ,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,KAAK,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,+BAA+B,IAAI,CAAC,MAAM,CAAC,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC;QACnF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAE/B,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YAC3C,IAAI,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;gBAEhD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,IAAI,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;oBACnD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,OAAO;gBACT,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACvC,MAAM,KAAK,GAAG,MAAM;oBAClB,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,uBAAuB,kBAAkB,CAAC,MAAM,CAAC,EAAE;oBAC/E,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,iBAAiB,CAAC;gBAEhD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE;oBAClC,MAAM,EAAE,KAAK;oBACb,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,eAAe,EAAE,UAAU,KAAK,EAAE;qBACnC;iBACF,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,IAAI,CAAC,GAAG,CAAC,sCAAsC,EAAE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBAGvE,IAAI,SAAgC,CAAC;oBACrC,IAAI,CAAC;wBACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBACxC,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;4BACxC,SAAS,GAAG;gCACV,IAAI,EAAE,SAAS,CAAC,IAAqB;gCACrC,OAAO,EAAE,SAAS,CAAC,OAAO;6BAC3B,CAAC;wBACJ,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;oBAET,CAAC;oBAGD,IAAI,SAAS,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;wBACxD,IAAI,CAAC,GAAG,CAAC,gCAAgC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;wBAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;oBACvC,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;YAE7D,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;IAKD,aAAa;QACX,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAKD,iBAAiB;QACf,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAQD,qBAAqB,CAAC,KAAgB;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,iBAAiB,IAAI,YAAY,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;IACxG,CAAC;IAQO,oBAAoB,CAAC,KAAgB;QAC3C,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAGhE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,EAAE,CAAC;QAGtB,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YAEN,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,UAAU,CAAC,CAAC;YACnD,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC;QACpC,CAAC;IACH,CAAC;IAKO,iBAAiB,CAAC,IAAmB;QAC3C,OAAO,CAAC,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/E,CAAC;IAKO,yBAAyB,CAAC,IAAmB;QACnD,MAAM,OAAO,GAAkC;YAC7C,iBAAiB,EAAE,QAAQ;YAC3B,eAAe,EAAE,MAAM;YACvB,gBAAgB,EAAE,MAAM;YACxB,yBAAyB,EAAE,cAAc;YACzC,eAAe,EAAE,OAAO;SACzB,CAAC;QACF,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;IACpC,CAAC;IAUO,eAAe;QACrB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QAE/C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAKO,kBAAkB;QACxB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAGjC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IASO,gBAAgB;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACjE,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAC1D,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAKO,UAAU,CAAC,KAAa;QAC9B,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,IAAI,CAAC;YACH,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAKO,cAAc;QACpB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QAE/C,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAKO,gBAAgB;QACtB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,IAAI,CAAC;YACH,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAKO,cAAc,CAAC,SAAiB;QACtC,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,IAAI,CAAC;YACH,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAKO,YAAY;QAClB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QAE/C,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAKO,cAAc;QACpB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,IAAI,CAAC;YACH,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,KAAiB;QACvC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAGO,GAAG,CAAC,GAAG,IAAW;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;;AAxgCuB,uBAAS,GAAG,mBAAmB,AAAtB,CAAuB;AAChC,4BAAc,GAAG,mBAAmB,AAAtB,CAAuB;AAGrC,2CAA6B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,AAAhB,CAAiB;AA6hCxE,MAAM,UAAU,UAAU,CAAC,MAAqB;IAM9C,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;AACJ,CAAC;AASD,MAAM,CAAC,MAAM,sBAAsB,GAAoB;IACrD,iBAAiB;IACjB,eAAe;IACf,gBAAgB;CACjB,CAAC;AAkBF,MAAM,UAAU,iBAAiB,CAAC,IAAmB;IACnD,OAAO,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAMD,eAAe,aAAa,CAAC"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
npm install @tgtone/auth-sdk
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
**Versión actual:** 1.2.
|
|
13
|
+
**Versión actual:** 1.2.3
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
@@ -20,47 +20,110 @@ npm install @tgtone/auth-sdk
|
|
|
20
20
|
|
|
21
21
|
```typescript
|
|
22
22
|
// src/contexts/AuthContext.tsx
|
|
23
|
-
import { createContext, useContext, useEffect, useState } from 'react';
|
|
24
|
-
import { TGTAuthClient,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
import { createContext, useContext, useEffect, useState, ReactNode } from 'react';
|
|
24
|
+
import { TGTAuthClient, TGTUser } from '@tgtone/auth-sdk';
|
|
25
|
+
|
|
26
|
+
// Extender TGTSession para incluir roles (están en user.roles)
|
|
27
|
+
interface TGTSession {
|
|
28
|
+
user: TGTUser;
|
|
29
|
+
tenantId: string;
|
|
30
|
+
tenantName: string;
|
|
31
|
+
expiresAt: Date;
|
|
32
|
+
}
|
|
31
33
|
|
|
32
34
|
interface AuthContextType {
|
|
33
35
|
session: TGTSession | null;
|
|
36
|
+
user: TGTUser | null; // Acceso directo al usuario
|
|
37
|
+
tenantId: string | null; // Acceso directo
|
|
34
38
|
loading: boolean;
|
|
35
39
|
logout: () => Promise<void>;
|
|
36
40
|
hasRole: (app: string, role: string) => boolean;
|
|
41
|
+
hasAccessToApp: (appName: string) => boolean;
|
|
42
|
+
getRoles: (appName: string) => string[];
|
|
43
|
+
getToken: () => string | null; // Para API calls
|
|
44
|
+
isAuthenticated: boolean; // Shorthand
|
|
37
45
|
}
|
|
38
46
|
|
|
39
47
|
const AuthContext = createContext<AuthContextType | null>(null);
|
|
40
48
|
|
|
41
|
-
|
|
49
|
+
// ✅ Singleton FUERA del componente (evita re-crear en cada render)
|
|
50
|
+
let authClient: TGTAuthClient | null = null;
|
|
51
|
+
|
|
52
|
+
const getAuthClient = (): TGTAuthClient => {
|
|
53
|
+
if (!authClient) {
|
|
54
|
+
authClient = new TGTAuthClient({
|
|
55
|
+
identityUrl: import.meta.env.VITE_IDENTITY_URL || 'https://identity.tgtone.cl',
|
|
56
|
+
appDomain: window.location.host, // Usa .host (incluye puerto) para dev
|
|
57
|
+
debug: import.meta.env.DEV
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return authClient;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export function AuthProvider({ children }: { children: ReactNode }) {
|
|
42
64
|
const [session, setSession] = useState<TGTSession | null>(null);
|
|
43
65
|
const [loading, setLoading] = useState(true);
|
|
44
66
|
|
|
45
67
|
useEffect(() => {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
68
|
+
const initAuth = async () => {
|
|
69
|
+
try {
|
|
70
|
+
const auth = getAuthClient();
|
|
71
|
+
const currentSession = await auth.checkSession();
|
|
72
|
+
setSession(currentSession as TGTSession);
|
|
73
|
+
} catch (error) {
|
|
74
|
+
console.error('Error checking session:', error);
|
|
75
|
+
setSession(null);
|
|
76
|
+
} finally {
|
|
77
|
+
setLoading(false);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
initAuth();
|
|
50
81
|
}, []);
|
|
51
82
|
|
|
52
83
|
const logout = async () => {
|
|
53
|
-
|
|
84
|
+
const auth = getAuthClient();
|
|
85
|
+
await auth.logout();
|
|
54
86
|
setSession(null);
|
|
55
87
|
};
|
|
56
88
|
|
|
57
89
|
const hasRole = (app: string, role: string) => {
|
|
58
|
-
return
|
|
90
|
+
return getAuthClient().hasRole(app, role);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const hasAccessToApp = (appName: string) => {
|
|
94
|
+
return getAuthClient().hasAccessToApp(appName);
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const getRoles = (appName: string) => {
|
|
98
|
+
return getAuthClient().getRoles(appName);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const getToken = () => {
|
|
102
|
+
return getAuthClient().getToken();
|
|
59
103
|
};
|
|
60
104
|
|
|
61
105
|
return (
|
|
62
|
-
<AuthContext.Provider value={{
|
|
63
|
-
|
|
106
|
+
<AuthContext.Provider value={{
|
|
107
|
+
session,
|
|
108
|
+
user: session?.user || null,
|
|
109
|
+
tenantId: session?.tenantId || null,
|
|
110
|
+
loading,
|
|
111
|
+
logout,
|
|
112
|
+
hasRole,
|
|
113
|
+
hasAccessToApp,
|
|
114
|
+
getRoles,
|
|
115
|
+
getToken,
|
|
116
|
+
isAuthenticated: !!session
|
|
117
|
+
}}>
|
|
118
|
+
{/* ⚠️ CRÍTICO: No renderizar hijos mientras carga para evitar que el Router
|
|
119
|
+
limpie los parámetros de la URL (?token=...) antes de que el SDK los procese */}
|
|
120
|
+
{loading ? (
|
|
121
|
+
<div className="flex items-center justify-center min-h-screen">
|
|
122
|
+
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-primary"></div>
|
|
123
|
+
</div>
|
|
124
|
+
) : (
|
|
125
|
+
children
|
|
126
|
+
)}
|
|
64
127
|
</AuthContext.Provider>
|
|
65
128
|
);
|
|
66
129
|
}
|
|
@@ -93,16 +156,16 @@ function App() {
|
|
|
93
156
|
import { useAuth } from './contexts/AuthContext';
|
|
94
157
|
|
|
95
158
|
function Dashboard() {
|
|
96
|
-
const {
|
|
159
|
+
const { user, tenantId, loading, logout, hasRole, isAuthenticated } = useAuth();
|
|
97
160
|
|
|
98
161
|
if (loading) return <div>Cargando...</div>;
|
|
99
162
|
|
|
100
|
-
if (!
|
|
163
|
+
if (!isAuthenticated) return null; // Ya está redirigiendo a login
|
|
101
164
|
|
|
102
165
|
return (
|
|
103
166
|
<div>
|
|
104
|
-
<h1>Bienvenido {
|
|
105
|
-
<p>Tenant: {
|
|
167
|
+
<h1>Bienvenido {user?.name}</h1>
|
|
168
|
+
<p>Tenant: {tenantId}</p>
|
|
106
169
|
|
|
107
170
|
{hasRole('console', 'admin') && (
|
|
108
171
|
<button>Panel Admin</button>
|
|
@@ -119,31 +182,47 @@ function Dashboard() {
|
|
|
119
182
|
## 🎯 Propiedades de Sesión
|
|
120
183
|
|
|
121
184
|
```typescript
|
|
185
|
+
// Datos del usuario
|
|
122
186
|
session.user.email // "user@empresa.cl"
|
|
123
187
|
session.user.name // "Juan Pérez"
|
|
188
|
+
session.user.sub // "uuid-user-123" (ID del usuario)
|
|
189
|
+
|
|
190
|
+
// Datos del tenant
|
|
124
191
|
session.tenantId // "uuid-tenant-123"
|
|
125
192
|
session.tenantName // "Mi Empresa"
|
|
193
|
+
|
|
194
|
+
// ⚠️ IMPORTANTE: Los roles están en USER, no en session
|
|
126
195
|
session.user.roles // { console: ['owner'], crm: ['admin'] }
|
|
196
|
+
|
|
197
|
+
// Expiración
|
|
127
198
|
session.expiresAt // Date object
|
|
128
199
|
```
|
|
129
200
|
|
|
201
|
+
> **Nota:** Los roles se acceden via `session.user.roles`, NO `session.roles`
|
|
202
|
+
|
|
130
203
|
---
|
|
131
204
|
|
|
132
205
|
## 🔐 Verificar Roles
|
|
133
206
|
|
|
134
207
|
```typescript
|
|
208
|
+
// Usando el hook useAuth (recomendado)
|
|
209
|
+
const { hasRole, hasAccessToApp, getRoles } = useAuth();
|
|
210
|
+
|
|
135
211
|
// ¿Es admin de Console?
|
|
136
212
|
if (hasRole('console', 'admin')) {
|
|
137
213
|
// Mostrar funciones de admin
|
|
138
214
|
}
|
|
139
215
|
|
|
140
216
|
// ¿Tiene acceso a CRM?
|
|
141
|
-
if (
|
|
217
|
+
if (hasAccessToApp('crm')) {
|
|
142
218
|
// Mostrar enlace a CRM
|
|
143
219
|
}
|
|
144
220
|
|
|
145
|
-
// Obtener todos los roles
|
|
146
|
-
const roles =
|
|
221
|
+
// Obtener todos los roles en una app
|
|
222
|
+
const roles = getRoles('console'); // ['owner', 'admin']
|
|
223
|
+
|
|
224
|
+
// Verificar múltiples roles
|
|
225
|
+
const isAdmin = hasRole('myapp', 'admin') || hasRole('myapp', 'owner');
|
|
147
226
|
```
|
|
148
227
|
|
|
149
228
|
---
|
|
@@ -223,4 +302,15 @@ Métodos disponibles:
|
|
|
223
302
|
|
|
224
303
|
---
|
|
225
304
|
|
|
226
|
-
|
|
305
|
+
## 🔧 Variables de Entorno
|
|
306
|
+
|
|
307
|
+
```env
|
|
308
|
+
# .env.local
|
|
309
|
+
VITE_IDENTITY_URL=https://identity.tgtone.cl
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
> En desarrollo local, si no defines `VITE_IDENTITY_URL`, usará `https://identity.tgtone.cl` por defecto.
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
**Última actualización:** 2025-12-19
|
package/docs/README.md
CHANGED
|
@@ -44,7 +44,7 @@ Guía para publicar actualizaciones del SDK a npm
|
|
|
44
44
|
|
|
45
45
|
## 🔐 Información Clave
|
|
46
46
|
|
|
47
|
-
**Versión Actual:** 1.2.
|
|
47
|
+
**Versión Actual:** 1.2.2
|
|
48
48
|
**Autenticación:** JWT + Bearer Token (Authorization header)
|
|
49
49
|
**Storage:** localStorage (`tgtone_auth_token`)
|
|
50
50
|
**Backend:** https://tgtone-console-backend.run.app/api
|
|
@@ -52,4 +52,4 @@ Guía para publicar actualizaciones del SDK a npm
|
|
|
52
52
|
|
|
53
53
|
---
|
|
54
54
|
|
|
55
|
-
**Última actualización:** 2025-
|
|
55
|
+
**Última actualización:** 2025-12-19
|
package/package.json
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tgtone/auth-sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "SDK de autenticación JWT + Bearer Token para el ecosistema TGT One",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build": "tsc",
|
|
9
9
|
"prepublishOnly": "npm run build",
|
|
10
|
-
"clean": "rm -rf dist"
|
|
10
|
+
"clean": "rm -rf dist",
|
|
11
|
+
"test": "jest",
|
|
12
|
+
"test:watch": "jest --watch",
|
|
13
|
+
"test:coverage": "jest --coverage"
|
|
11
14
|
},
|
|
12
15
|
"keywords": [
|
|
13
16
|
"sso",
|
|
@@ -37,7 +40,11 @@
|
|
|
37
40
|
"jwt-decode": "^4.0.0"
|
|
38
41
|
},
|
|
39
42
|
"devDependencies": {
|
|
43
|
+
"@types/jest": "^29.5.14",
|
|
40
44
|
"@types/react": "^18.2.0 || ^19.0.0",
|
|
45
|
+
"jest": "^29.7.0",
|
|
46
|
+
"jest-environment-jsdom": "^29.7.0",
|
|
47
|
+
"ts-jest": "^29.4.6",
|
|
41
48
|
"typescript": "^5.3.0"
|
|
42
49
|
},
|
|
43
50
|
"peerDependencies": {
|