@payez/next-mvp 4.1.11 → 4.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-handlers/auth/refresh.js +15 -38
- package/dist/auth/better-auth.js +12 -33
- package/dist/client/better-auth-client.d.ts +14 -2
- package/dist/lib/ensure-fresh-access-token.js +8 -42
- package/dist/lib/session-store.d.ts +0 -1
- package/dist/lib/session-store.js +29 -33
- package/dist/lib/startup-init.js +19 -19
- package/dist/lib/token-lifecycle.d.ts +0 -2
- package/dist/lib/token-lifecycle.js +3 -21
- package/package.json +4 -3
- package/scripts/check-internal-url-usage.sh +73 -73
- package/src/api/index.ts +17 -17
- package/src/api-handlers/account/masked-info.ts +45 -45
- package/src/api-handlers/account/profile.ts +80 -80
- package/src/api-handlers/account/recovery/initiate.ts +23 -23
- package/src/api-handlers/account/recovery/send-code.ts +25 -25
- package/src/api-handlers/account/recovery/verify-code.ts +25 -25
- package/src/api-handlers/account/reset-password.ts +23 -23
- package/src/api-handlers/account/send-code.ts +76 -76
- package/src/api-handlers/account/validate-password.ts +118 -118
- package/src/api-handlers/admin/stats.ts +249 -249
- package/src/api-handlers/anon/preferences.ts +123 -123
- package/src/api-handlers/auth/jwks.ts +20 -20
- package/src/api-handlers/auth/login.ts +240 -240
- package/src/api-handlers/auth/refresh.ts +15 -38
- package/src/api-handlers/auth/validate.ts +43 -43
- package/src/api-handlers/session/viability.ts +142 -142
- package/src/auth/better-auth.ts +450 -467
- package/src/auth/unauthenticated-routes.ts +2 -2
- package/src/client/better-auth-client.ts +70 -70
- package/src/client/fetchWithSession.ts +21 -21
- package/src/client/index.ts +13 -13
- package/src/client/useAnonSession.ts +131 -131
- package/src/components/admin/VibeAdminContext.tsx +87 -87
- package/src/config/logging-config.ts +82 -82
- package/src/config/unauthenticated-routes.ts +19 -19
- package/src/edge/internal-api-url.ts +65 -65
- package/src/edge/middleware.ts +42 -42
- package/src/hooks/useProfile.ts +75 -75
- package/src/lib/anon-session.ts +213 -213
- package/src/lib/auth-secret.ts +137 -137
- package/src/lib/demo-mode.ts +17 -17
- package/src/lib/ensure-fresh-access-token.ts +8 -42
- package/src/lib/idp-client-config.ts +559 -559
- package/src/lib/idp-fetch.ts +126 -126
- package/src/lib/internal-api.ts +171 -171
- package/src/lib/jwt-decode-client.ts +45 -45
- package/src/lib/rate-limit-service.ts +9 -9
- package/src/lib/redis.ts +26 -26
- package/src/lib/refresh-token-validator.ts +64 -64
- package/src/lib/secret-validation.ts +8 -8
- package/src/lib/session-store.ts +692 -695
- package/src/lib/session.ts +34 -34
- package/src/lib/startup-init.ts +251 -251
- package/src/lib/token-expiry.ts +40 -40
- package/src/lib/token-lifecycle.ts +470 -497
- package/src/lib/types/api-responses.ts +336 -336
- package/src/middleware/auth-decision.ts +43 -43
- package/src/models/DecodedAccessToken.ts +16 -16
- package/src/models/SessionModel.ts +264 -264
- package/src/pages/admin-roles/index.ts +9 -9
- package/src/pages/security/EnhancedSecurityPage.tsx +9 -9
- package/src/routes/account/index.ts +31 -31
- package/src/routes/account/masked-info.ts +36 -36
- package/src/routes/account/send-code.ts +39 -39
- package/src/routes/account/verify-email.ts +40 -40
- package/src/routes/account/verify-sms.ts +40 -40
- package/src/routes/auth/index.ts +22 -22
- package/src/routes/auth/refresh.ts +48 -48
- package/src/routes/auth/session.ts +166 -166
- package/src/routes/index.ts +17 -17
- package/src/routes/session/index.ts +7 -7
- package/src/routes/session/refresh-viability.ts +17 -17
- package/src/server/auth.ts +373 -373
- package/src/server/decode-session.ts +202 -202
- package/src/services/signalrActivityService.ts +258 -258
- package/src/theme/ThemeProvider.tsx +39 -39
- package/src/theme/default.ts +33 -33
- package/src/theme/index.ts +31 -31
- package/src/theme/types.ts +69 -69
- package/src/theme/useTheme.ts +57 -57
- package/src/theme/utils.ts +40 -40
- package/src/types/api.ts +12 -12
- package/src/types/auth.d.ts +23 -23
- package/src/types/auth.ts +22 -22
- package/src/types/logging.ts +11 -11
- package/src/types/recovery.ts +54 -54
- package/src/utils/api.ts +353 -353
- package/src/utils/circuitBreaker.ts +40 -40
- package/src/utils/error-message.ts +108 -108
- package/src/utils/layout/reservedSpace.ts +124 -124
package/src/lib/token-expiry.ts
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
import { jwtDecode } from './jwt-decode';
|
|
2
|
-
import { logger } from '../config/logger';
|
|
3
|
-
|
|
4
|
-
export interface TokenExpiryOptions {
|
|
5
|
-
accessToken?: string;
|
|
6
|
-
refreshToken?: string;
|
|
7
|
-
preferJwt?: boolean;
|
|
8
|
-
fallbackAccessMs?: number;
|
|
9
|
-
fallbackRefreshMs?: number;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export interface TokenExpiryResult {
|
|
13
|
-
accessTokenExpires: number;
|
|
14
|
-
refreshTokenExpires?: number;
|
|
15
|
-
decodedAccessToken?: any;
|
|
16
|
-
decodedRefreshToken?: any;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function computeTokenExpiries(opts: TokenExpiryOptions): TokenExpiryResult {
|
|
20
|
-
const { accessToken, refreshToken, preferJwt = true, fallbackAccessMs, fallbackRefreshMs } = opts;
|
|
21
|
-
let decodedAccessToken: any | undefined;
|
|
22
|
-
let decodedRefreshToken: any | undefined;
|
|
23
|
-
let accessMs: number | undefined;
|
|
24
|
-
let refreshMs: number | undefined;
|
|
25
|
-
|
|
26
|
-
if (preferJwt && accessToken) {
|
|
27
|
-
try { decodedAccessToken = jwtDecode(accessToken); if (decodedAccessToken?.exp) accessMs = decodedAccessToken.exp * 1000; }
|
|
28
|
-
catch (e) { logger.warn('[TOKEN_EXPIRY] Failed to decode access token', { error: e instanceof Error ? e.message : String(e) }); }
|
|
29
|
-
}
|
|
30
|
-
if (accessMs === undefined && typeof fallbackAccessMs === 'number') accessMs = fallbackAccessMs;
|
|
31
|
-
|
|
32
|
-
if (preferJwt && refreshToken) {
|
|
33
|
-
try { decodedRefreshToken = jwtDecode(refreshToken); if (decodedRefreshToken?.exp) refreshMs = decodedRefreshToken.exp * 1000; }
|
|
34
|
-
catch (e) { logger.warn('[TOKEN_EXPIRY] Failed to decode refresh token', { error: e instanceof Error ? e.message : String(e) }); }
|
|
35
|
-
}
|
|
36
|
-
if (refreshMs === undefined && typeof fallbackRefreshMs === 'number') refreshMs = fallbackRefreshMs;
|
|
37
|
-
|
|
38
|
-
if (typeof accessMs !== 'number') accessMs = Date.now();
|
|
39
|
-
return { accessTokenExpires: accessMs, refreshTokenExpires: refreshMs, decodedAccessToken, decodedRefreshToken };
|
|
40
|
-
}
|
|
1
|
+
import { jwtDecode } from './jwt-decode';
|
|
2
|
+
import { logger } from '../config/logger';
|
|
3
|
+
|
|
4
|
+
export interface TokenExpiryOptions {
|
|
5
|
+
accessToken?: string;
|
|
6
|
+
refreshToken?: string;
|
|
7
|
+
preferJwt?: boolean;
|
|
8
|
+
fallbackAccessMs?: number;
|
|
9
|
+
fallbackRefreshMs?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface TokenExpiryResult {
|
|
13
|
+
accessTokenExpires: number;
|
|
14
|
+
refreshTokenExpires?: number;
|
|
15
|
+
decodedAccessToken?: any;
|
|
16
|
+
decodedRefreshToken?: any;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function computeTokenExpiries(opts: TokenExpiryOptions): TokenExpiryResult {
|
|
20
|
+
const { accessToken, refreshToken, preferJwt = true, fallbackAccessMs, fallbackRefreshMs } = opts;
|
|
21
|
+
let decodedAccessToken: any | undefined;
|
|
22
|
+
let decodedRefreshToken: any | undefined;
|
|
23
|
+
let accessMs: number | undefined;
|
|
24
|
+
let refreshMs: number | undefined;
|
|
25
|
+
|
|
26
|
+
if (preferJwt && accessToken) {
|
|
27
|
+
try { decodedAccessToken = jwtDecode(accessToken); if (decodedAccessToken?.exp) accessMs = decodedAccessToken.exp * 1000; }
|
|
28
|
+
catch (e) { logger.warn('[TOKEN_EXPIRY] Failed to decode access token', { error: e instanceof Error ? e.message : String(e) }); }
|
|
29
|
+
}
|
|
30
|
+
if (accessMs === undefined && typeof fallbackAccessMs === 'number') accessMs = fallbackAccessMs;
|
|
31
|
+
|
|
32
|
+
if (preferJwt && refreshToken) {
|
|
33
|
+
try { decodedRefreshToken = jwtDecode(refreshToken); if (decodedRefreshToken?.exp) refreshMs = decodedRefreshToken.exp * 1000; }
|
|
34
|
+
catch (e) { logger.warn('[TOKEN_EXPIRY] Failed to decode refresh token', { error: e instanceof Error ? e.message : String(e) }); }
|
|
35
|
+
}
|
|
36
|
+
if (refreshMs === undefined && typeof fallbackRefreshMs === 'number') refreshMs = fallbackRefreshMs;
|
|
37
|
+
|
|
38
|
+
if (typeof accessMs !== 'number') accessMs = Date.now();
|
|
39
|
+
return { accessTokenExpires: accessMs, refreshTokenExpires: refreshMs, decodedAccessToken, decodedRefreshToken };
|
|
40
|
+
}
|