@payez/next-mvp 3.0.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 +782 -0
- package/dist/api/auth-handler.d.ts +67 -0
- package/dist/api/auth-handler.js +397 -0
- package/dist/api/index.d.ts +10 -0
- package/dist/api/index.js +19 -0
- package/dist/api-handlers/account/change-password.d.ts +9 -0
- package/dist/api-handlers/account/change-password.js +112 -0
- package/dist/api-handlers/account/masked-info.d.ts +2 -0
- package/dist/api-handlers/account/masked-info.js +41 -0
- package/dist/api-handlers/account/profile.d.ts +3 -0
- package/dist/api-handlers/account/profile.js +63 -0
- package/dist/api-handlers/account/recovery/initiate.d.ts +2 -0
- package/dist/api-handlers/account/recovery/initiate.js +26 -0
- package/dist/api-handlers/account/recovery/send-code.d.ts +2 -0
- package/dist/api-handlers/account/recovery/send-code.js +28 -0
- package/dist/api-handlers/account/recovery/verify-code.d.ts +2 -0
- package/dist/api-handlers/account/recovery/verify-code.js +28 -0
- package/dist/api-handlers/account/reset-password.d.ts +2 -0
- package/dist/api-handlers/account/reset-password.js +26 -0
- package/dist/api-handlers/account/send-code.d.ts +24 -0
- package/dist/api-handlers/account/send-code.js +60 -0
- package/dist/api-handlers/account/update-phone.d.ts +27 -0
- package/dist/api-handlers/account/update-phone.js +64 -0
- package/dist/api-handlers/account/validate-password.d.ts +17 -0
- package/dist/api-handlers/account/validate-password.js +81 -0
- package/dist/api-handlers/account/verify-email.d.ts +26 -0
- package/dist/api-handlers/account/verify-email.js +106 -0
- package/dist/api-handlers/account/verify-sms.d.ts +26 -0
- package/dist/api-handlers/account/verify-sms.js +106 -0
- package/dist/api-handlers/admin/analytics.d.ts +20 -0
- package/dist/api-handlers/admin/analytics.js +379 -0
- package/dist/api-handlers/admin/audit.d.ts +20 -0
- package/dist/api-handlers/admin/audit.js +214 -0
- package/dist/api-handlers/admin/index.d.ts +21 -0
- package/dist/api-handlers/admin/index.js +41 -0
- package/dist/api-handlers/admin/redis-sessions.d.ts +36 -0
- package/dist/api-handlers/admin/redis-sessions.js +204 -0
- package/dist/api-handlers/admin/sessions.d.ts +21 -0
- package/dist/api-handlers/admin/sessions.js +284 -0
- package/dist/api-handlers/admin/site-logs.d.ts +46 -0
- package/dist/api-handlers/admin/site-logs.js +318 -0
- package/dist/api-handlers/admin/users.d.ts +20 -0
- package/dist/api-handlers/admin/users.js +222 -0
- package/dist/api-handlers/admin/vibe-data.d.ts +80 -0
- package/dist/api-handlers/admin/vibe-data.js +268 -0
- package/dist/api-handlers/anon/preferences.d.ts +37 -0
- package/dist/api-handlers/anon/preferences.js +96 -0
- package/dist/api-handlers/auth/jwks.d.ts +2 -0
- package/dist/api-handlers/auth/jwks.js +24 -0
- package/dist/api-handlers/auth/login.d.ts +42 -0
- package/dist/api-handlers/auth/login.js +178 -0
- package/dist/api-handlers/auth/refresh.d.ts +74 -0
- package/dist/api-handlers/auth/refresh.js +635 -0
- package/dist/api-handlers/auth/signout.d.ts +37 -0
- package/dist/api-handlers/auth/signout.js +187 -0
- package/dist/api-handlers/auth/status.d.ts +8 -0
- package/dist/api-handlers/auth/status.js +26 -0
- package/dist/api-handlers/auth/update-session.d.ts +37 -0
- package/dist/api-handlers/auth/update-session.js +95 -0
- package/dist/api-handlers/auth/validate.d.ts +6 -0
- package/dist/api-handlers/auth/validate.js +43 -0
- package/dist/api-handlers/auth/verify-code.d.ts +43 -0
- package/dist/api-handlers/auth/verify-code.js +94 -0
- package/dist/api-handlers/session/refresh-viability.d.ts +14 -0
- package/dist/api-handlers/session/refresh-viability.js +39 -0
- package/dist/api-handlers/session/viability.d.ts +13 -0
- package/dist/api-handlers/session/viability.js +146 -0
- package/dist/api-handlers/test/force-expire.d.ts +23 -0
- package/dist/api-handlers/test/force-expire.js +65 -0
- package/dist/auth/auth-decision.d.ts +39 -0
- package/dist/auth/auth-decision.js +182 -0
- package/dist/auth/auth-options.d.ts +57 -0
- package/dist/auth/auth-options.js +213 -0
- package/dist/auth/callbacks/index.d.ts +6 -0
- package/dist/auth/callbacks/index.js +12 -0
- package/dist/auth/callbacks/jwt.d.ts +45 -0
- package/dist/auth/callbacks/jwt.js +305 -0
- package/dist/auth/callbacks/session.d.ts +60 -0
- package/dist/auth/callbacks/session.js +170 -0
- package/dist/auth/callbacks/signin.d.ts +23 -0
- package/dist/auth/callbacks/signin.js +44 -0
- package/dist/auth/events/index.d.ts +4 -0
- package/dist/auth/events/index.js +8 -0
- package/dist/auth/events/signout.d.ts +17 -0
- package/dist/auth/events/signout.js +32 -0
- package/dist/auth/providers/credentials.d.ts +32 -0
- package/dist/auth/providers/credentials.js +223 -0
- package/dist/auth/providers/index.d.ts +5 -0
- package/dist/auth/providers/index.js +21 -0
- package/dist/auth/providers/oauth.d.ts +26 -0
- package/dist/auth/providers/oauth.js +105 -0
- package/dist/auth/route-config.d.ts +66 -0
- package/dist/auth/route-config.js +190 -0
- package/dist/auth/types/auth-types.d.ts +417 -0
- package/dist/auth/types/auth-types.js +53 -0
- package/dist/auth/types/index.d.ts +6 -0
- package/dist/auth/types/index.js +22 -0
- package/dist/auth/unauthenticated-routes.d.ts +1 -0
- package/dist/auth/unauthenticated-routes.js +19 -0
- package/dist/auth/utils/idp-client.d.ts +94 -0
- package/dist/auth/utils/idp-client.js +383 -0
- package/dist/auth/utils/index.d.ts +5 -0
- package/dist/auth/utils/index.js +21 -0
- package/dist/auth/utils/token-utils.d.ts +84 -0
- package/dist/auth/utils/token-utils.js +219 -0
- package/dist/client/AuthContext.d.ts +19 -0
- package/dist/client/AuthContext.js +112 -0
- package/dist/client/fetch-with-auth.d.ts +11 -0
- package/dist/client/fetch-with-auth.js +44 -0
- package/dist/client/fetchWithSession.d.ts +3 -0
- package/dist/client/fetchWithSession.js +24 -0
- package/dist/client/index.d.ts +9 -0
- package/dist/client/index.js +20 -0
- package/dist/client/useAnonSession.d.ts +36 -0
- package/dist/client/useAnonSession.js +99 -0
- package/dist/components/SessionSync.d.ts +13 -0
- package/dist/components/SessionSync.js +119 -0
- package/dist/components/SignalRHealthCheck.d.ts +10 -0
- package/dist/components/SignalRHealthCheck.js +97 -0
- package/dist/components/account/UserAvatarMenu.d.ts +20 -0
- package/dist/components/account/UserAvatarMenu.js +80 -0
- package/dist/components/account/index.d.ts +7 -0
- package/dist/components/account/index.js +10 -0
- package/dist/components/admin/AlertSettingsTab.d.ts +48 -0
- package/dist/components/admin/AlertSettingsTab.js +351 -0
- package/dist/components/admin/AnalyticsTab.d.ts +22 -0
- package/dist/components/admin/AnalyticsTab.js +167 -0
- package/dist/components/admin/DataBrowserTab.d.ts +19 -0
- package/dist/components/admin/DataBrowserTab.js +252 -0
- package/dist/components/admin/LoggingSettingsTab.d.ts +73 -0
- package/dist/components/admin/LoggingSettingsTab.js +339 -0
- package/dist/components/admin/SessionsTab.d.ts +37 -0
- package/dist/components/admin/SessionsTab.js +165 -0
- package/dist/components/admin/StatsTab.d.ts +53 -0
- package/dist/components/admin/StatsTab.js +161 -0
- package/dist/components/admin/VibeAdminContext.d.ts +32 -0
- package/dist/components/admin/VibeAdminContext.js +38 -0
- package/dist/components/admin/VibeAdminLayout.d.ts +11 -0
- package/dist/components/admin/VibeAdminLayout.js +69 -0
- package/dist/components/admin/index.d.ts +29 -0
- package/dist/components/admin/index.js +44 -0
- package/dist/components/auth/FederatedAuthSection.d.ts +8 -0
- package/dist/components/auth/FederatedAuthSection.js +45 -0
- package/dist/components/auth/ModeAwareLoginPage.d.ts +10 -0
- package/dist/components/auth/ModeAwareLoginPage.js +42 -0
- package/dist/components/auth/ModeAwareSignupPage.d.ts +9 -0
- package/dist/components/auth/ModeAwareSignupPage.js +78 -0
- package/dist/components/auth/TraditionalAuthSection.d.ts +14 -0
- package/dist/components/auth/TraditionalAuthSection.js +20 -0
- package/dist/components/recovery/CompleteStep.d.ts +5 -0
- package/dist/components/recovery/CompleteStep.js +8 -0
- package/dist/components/recovery/InitiateRecoveryStep.d.ts +8 -0
- package/dist/components/recovery/InitiateRecoveryStep.js +20 -0
- package/dist/components/recovery/SelectMethodStep.d.ts +8 -0
- package/dist/components/recovery/SelectMethodStep.js +8 -0
- package/dist/components/recovery/SetPasswordStep.d.ts +6 -0
- package/dist/components/recovery/SetPasswordStep.js +20 -0
- package/dist/components/recovery/VerifyCodeStep.d.ts +10 -0
- package/dist/components/recovery/VerifyCodeStep.js +24 -0
- package/dist/components/reserved/ReservedRecoveryWarning.d.ts +38 -0
- package/dist/components/reserved/ReservedRecoveryWarning.js +92 -0
- package/dist/components/reserved/ReservedStatusBox.d.ts +30 -0
- package/dist/components/reserved/ReservedStatusBox.js +71 -0
- package/dist/components/ui/BetaBadge.d.ts +29 -0
- package/dist/components/ui/BetaBadge.js +38 -0
- package/dist/components/ui/Footer.d.ts +37 -0
- package/dist/components/ui/Footer.js +41 -0
- package/dist/config/env.d.ts +66 -0
- package/dist/config/env.js +57 -0
- package/dist/config/logger.d.ts +57 -0
- package/dist/config/logger.js +73 -0
- package/dist/config/logging-config.d.ts +30 -0
- package/dist/config/logging-config.js +122 -0
- package/dist/config/unauthenticated-routes.d.ts +17 -0
- package/dist/config/unauthenticated-routes.js +24 -0
- package/dist/config/vibe-log-transport.d.ts +79 -0
- package/dist/config/vibe-log-transport.js +203 -0
- package/dist/edge/internal-api-url.d.ts +53 -0
- package/dist/edge/internal-api-url.js +63 -0
- package/dist/edge/middleware.d.ts +14 -0
- package/dist/edge/middleware.js +32 -0
- package/dist/hooks/useAuth.d.ts +23 -0
- package/dist/hooks/useAuth.js +81 -0
- package/dist/hooks/useAuthSettings.d.ts +59 -0
- package/dist/hooks/useAuthSettings.js +93 -0
- package/dist/hooks/useAvailableProviders.d.ts +45 -0
- package/dist/hooks/useAvailableProviders.js +108 -0
- package/dist/hooks/usePasswordValidation.d.ts +27 -0
- package/dist/hooks/usePasswordValidation.js +102 -0
- package/dist/hooks/useProfile.d.ts +15 -0
- package/dist/hooks/useProfile.js +59 -0
- package/dist/hooks/usePublicAuthSettings.d.ts +56 -0
- package/dist/hooks/usePublicAuthSettings.js +131 -0
- package/dist/hooks/useSessionExpiration.d.ts +57 -0
- package/dist/hooks/useSessionExpiration.js +72 -0
- package/dist/hooks/useViabilitySession.d.ts +75 -0
- package/dist/hooks/useViabilitySession.js +268 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +54 -0
- package/dist/lib/anon-session.d.ts +74 -0
- package/dist/lib/anon-session.js +169 -0
- package/dist/lib/api-handler.d.ts +123 -0
- package/dist/lib/api-handler.js +478 -0
- package/dist/lib/app-slug.d.ts +95 -0
- package/dist/lib/app-slug.js +172 -0
- package/dist/lib/demo-mode.d.ts +6 -0
- package/dist/lib/demo-mode.js +16 -0
- package/dist/lib/geolocation.d.ts +64 -0
- package/dist/lib/geolocation.js +235 -0
- package/dist/lib/idp-client-config.d.ts +75 -0
- package/dist/lib/idp-client-config.js +351 -0
- package/dist/lib/idp-fetch.d.ts +14 -0
- package/dist/lib/idp-fetch.js +91 -0
- package/dist/lib/internal-api.d.ts +87 -0
- package/dist/lib/internal-api.js +122 -0
- package/dist/lib/jwt-decode-client.d.ts +10 -0
- package/dist/lib/jwt-decode-client.js +46 -0
- package/dist/lib/jwt-decode.d.ts +48 -0
- package/dist/lib/jwt-decode.js +57 -0
- package/dist/lib/nextauth-secret.d.ts +10 -0
- package/dist/lib/nextauth-secret.js +104 -0
- package/dist/lib/rate-limit-service.d.ts +23 -0
- package/dist/lib/rate-limit-service.js +6 -0
- package/dist/lib/redis.d.ts +5 -0
- package/dist/lib/redis.js +28 -0
- package/dist/lib/refresh-token-validator.d.ts +13 -0
- package/dist/lib/refresh-token-validator.js +117 -0
- package/dist/lib/roles.d.ts +145 -0
- package/dist/lib/roles.js +168 -0
- package/dist/lib/secret-validation.d.ts +4 -0
- package/dist/lib/secret-validation.js +14 -0
- package/dist/lib/session-store.d.ts +166 -0
- package/dist/lib/session-store.js +537 -0
- package/dist/lib/session.d.ts +21 -0
- package/dist/lib/session.js +26 -0
- package/dist/lib/site-logger.d.ts +214 -0
- package/dist/lib/site-logger.js +210 -0
- package/dist/lib/standardized-client-api.d.ts +161 -0
- package/dist/lib/standardized-client-api.js +786 -0
- package/dist/lib/startup-init.d.ts +40 -0
- package/dist/lib/startup-init.js +261 -0
- package/dist/lib/test-aware-get-token.d.ts +2 -0
- package/dist/lib/test-aware-get-token.js +81 -0
- package/dist/lib/token-expiry.d.ts +14 -0
- package/dist/lib/token-expiry.js +39 -0
- package/dist/lib/token-lifecycle.d.ts +52 -0
- package/dist/lib/token-lifecycle.js +398 -0
- package/dist/lib/types/api-responses.d.ts +128 -0
- package/dist/lib/types/api-responses.js +171 -0
- package/dist/lib/user-agent-parser.d.ts +50 -0
- package/dist/lib/user-agent-parser.js +220 -0
- package/dist/logging/api/admin-analytics.d.ts +3 -0
- package/dist/logging/api/admin-analytics.js +45 -0
- package/dist/logging/api/audit-log.d.ts +3 -0
- package/dist/logging/api/audit-log.js +52 -0
- package/dist/logging/components/AdminAnalyticsLayout.d.ts +10 -0
- package/dist/logging/components/AdminAnalyticsLayout.js +11 -0
- package/dist/logging/components/AuditLogViewer.d.ts +7 -0
- package/dist/logging/components/AuditLogViewer.js +51 -0
- package/dist/logging/components/ErrorMetricsCard.d.ts +7 -0
- package/dist/logging/components/ErrorMetricsCard.js +16 -0
- package/dist/logging/components/HealthMetricsCard.d.ts +7 -0
- package/dist/logging/components/HealthMetricsCard.js +19 -0
- package/dist/logging/hooks/useAdminAnalytics.d.ts +24 -0
- package/dist/logging/hooks/useAdminAnalytics.js +22 -0
- package/dist/logging/hooks/useAuditLog.d.ts +6 -0
- package/dist/logging/hooks/useAuditLog.js +25 -0
- package/dist/logging/hooks/useErrorMetrics.d.ts +6 -0
- package/dist/logging/hooks/useErrorMetrics.js +38 -0
- package/dist/logging/hooks/useHealthMetrics.d.ts +6 -0
- package/dist/logging/hooks/useHealthMetrics.js +41 -0
- package/dist/logging/index.d.ts +11 -0
- package/dist/logging/index.js +40 -0
- package/dist/logging/types/analytics.d.ts +68 -0
- package/dist/logging/types/analytics.js +3 -0
- package/dist/logging/types/audit.d.ts +29 -0
- package/dist/logging/types/audit.js +2 -0
- package/dist/logging/types/index.d.ts +2 -0
- package/dist/logging/types/index.js +19 -0
- package/dist/middleware/auth-decision.d.ts +33 -0
- package/dist/middleware/auth-decision.js +65 -0
- package/dist/middleware/create-middleware.d.ts +100 -0
- package/dist/middleware/create-middleware.js +445 -0
- package/dist/middleware/rbac-check.d.ts +44 -0
- package/dist/middleware/rbac-check.js +191 -0
- package/dist/middleware/twofa-presets.d.ts +134 -0
- package/dist/middleware/twofa-presets.js +175 -0
- package/dist/models/DecodedAccessToken.d.ts +17 -0
- package/dist/models/DecodedAccessToken.js +2 -0
- package/dist/models/SessionModel.d.ts +122 -0
- package/dist/models/SessionModel.js +136 -0
- package/dist/pages/admin-login/page.d.ts +31 -0
- package/dist/pages/admin-login/page.js +83 -0
- package/dist/pages/admin-roles/RolesAdminPage.d.ts +15 -0
- package/dist/pages/admin-roles/RolesAdminPage.js +78 -0
- package/dist/pages/admin-roles/index.d.ts +8 -0
- package/dist/pages/admin-roles/index.js +15 -0
- package/dist/pages/admin-roles/modals.d.ts +72 -0
- package/dist/pages/admin-roles/modals.js +154 -0
- package/dist/pages/client-admin/ClientSiteAdminPage.d.ts +79 -0
- package/dist/pages/client-admin/ClientSiteAdminPage.js +177 -0
- package/dist/pages/client-admin/index.d.ts +32 -0
- package/dist/pages/client-admin/index.js +37 -0
- package/dist/pages/login/page.d.ts +22 -0
- package/dist/pages/login/page.js +239 -0
- package/dist/pages/profile/EnhancedProfilePage.d.ts +13 -0
- package/dist/pages/profile/EnhancedProfilePage.js +150 -0
- package/dist/pages/profile/index.d.ts +8 -0
- package/dist/pages/profile/index.js +16 -0
- package/dist/pages/profile/page.d.ts +19 -0
- package/dist/pages/profile/page.js +47 -0
- package/dist/pages/profile/profile-patch.d.ts +1 -0
- package/dist/pages/profile/profile-patch.js +281 -0
- package/dist/pages/recovery/page.d.ts +1 -0
- package/dist/pages/recovery/page.js +142 -0
- package/dist/pages/roles/MyRolesPage.d.ts +24 -0
- package/dist/pages/roles/MyRolesPage.js +71 -0
- package/dist/pages/roles/components.d.ts +63 -0
- package/dist/pages/roles/components.js +108 -0
- package/dist/pages/roles/index.d.ts +8 -0
- package/dist/pages/roles/index.js +19 -0
- package/dist/pages/security/EnhancedSecurityPage.d.ts +14 -0
- package/dist/pages/security/EnhancedSecurityPage.js +248 -0
- package/dist/pages/security/index.d.ts +8 -0
- package/dist/pages/security/index.js +16 -0
- package/dist/pages/security/page.d.ts +21 -0
- package/dist/pages/security/page.js +212 -0
- package/dist/pages/security/security-patch.d.ts +1 -0
- package/dist/pages/security/security-patch.js +302 -0
- package/dist/pages/settings/EnhancedSettingsPage.d.ts +46 -0
- package/dist/pages/settings/EnhancedSettingsPage.js +231 -0
- package/dist/pages/settings/index.d.ts +8 -0
- package/dist/pages/settings/index.js +16 -0
- package/dist/pages/settings/page.d.ts +7 -0
- package/dist/pages/settings/page.js +26 -0
- package/dist/pages/showcase/ShowcasePage.d.ts +13 -0
- package/dist/pages/showcase/ShowcasePage.js +140 -0
- package/dist/pages/showcase/index.d.ts +12 -0
- package/dist/pages/showcase/index.js +17 -0
- package/dist/pages/test-env/EmergencyLogoutPage.d.ts +14 -0
- package/dist/pages/test-env/EmergencyLogoutPage.js +98 -0
- package/dist/pages/test-env/JwtInspectPage.d.ts +14 -0
- package/dist/pages/test-env/JwtInspectPage.js +114 -0
- package/dist/pages/test-env/RefreshTokenPage.d.ts +15 -0
- package/dist/pages/test-env/RefreshTokenPage.js +91 -0
- package/dist/pages/test-env/TestEnvPage.d.ts +13 -0
- package/dist/pages/test-env/TestEnvPage.js +49 -0
- package/dist/pages/test-env/index.d.ts +24 -0
- package/dist/pages/test-env/index.js +32 -0
- package/dist/pages/verify-code/page.d.ts +30 -0
- package/dist/pages/verify-code/page.js +408 -0
- package/dist/routes/account/index.d.ts +28 -0
- package/dist/routes/account/index.js +71 -0
- package/dist/routes/account/masked-info.d.ts +33 -0
- package/dist/routes/account/masked-info.js +39 -0
- package/dist/routes/account/send-code.d.ts +37 -0
- package/dist/routes/account/send-code.js +42 -0
- package/dist/routes/account/update-phone.d.ts +13 -0
- package/dist/routes/account/update-phone.js +17 -0
- package/dist/routes/account/verify-email.d.ts +38 -0
- package/dist/routes/account/verify-email.js +43 -0
- package/dist/routes/account/verify-sms.d.ts +38 -0
- package/dist/routes/account/verify-sms.js +43 -0
- package/dist/routes/auth/index.d.ts +19 -0
- package/dist/routes/auth/index.js +64 -0
- package/dist/routes/auth/logout.d.ts +31 -0
- package/dist/routes/auth/logout.js +113 -0
- package/dist/routes/auth/nextauth.d.ts +19 -0
- package/dist/routes/auth/nextauth.js +72 -0
- package/dist/routes/auth/refresh.d.ts +30 -0
- package/dist/routes/auth/refresh.js +51 -0
- package/dist/routes/auth/session.d.ts +72 -0
- package/dist/routes/auth/session.js +180 -0
- package/dist/routes/auth/settings.d.ts +25 -0
- package/dist/routes/auth/settings.js +55 -0
- package/dist/routes/auth/viability.d.ts +52 -0
- package/dist/routes/auth/viability.js +201 -0
- package/dist/routes/index.d.ts +12 -0
- package/dist/routes/index.js +54 -0
- package/dist/routes/session/index.d.ts +6 -0
- package/dist/routes/session/index.js +10 -0
- package/dist/routes/session/refresh-viability.d.ts +16 -0
- package/dist/routes/session/refresh-viability.js +20 -0
- package/dist/services/signalrActivityService.d.ts +44 -0
- package/dist/services/signalrActivityService.js +257 -0
- package/dist/stores/authStore.d.ts +154 -0
- package/dist/stores/authStore.js +1531 -0
- package/dist/theme/ThemeProvider.d.ts +14 -0
- package/dist/theme/ThemeProvider.js +28 -0
- package/dist/theme/default.d.ts +8 -0
- package/dist/theme/default.js +33 -0
- package/dist/theme/index.d.ts +15 -0
- package/dist/theme/index.js +25 -0
- package/dist/theme/types.d.ts +56 -0
- package/dist/theme/types.js +8 -0
- package/dist/theme/useTheme.d.ts +60 -0
- package/dist/theme/useTheme.js +63 -0
- package/dist/theme/utils.d.ts +13 -0
- package/dist/theme/utils.js +39 -0
- package/dist/types/api.d.ts +134 -0
- package/dist/types/api.js +44 -0
- package/dist/types/auth.d.ts +19 -0
- package/dist/types/auth.js +2 -0
- package/dist/types/logging.d.ts +42 -0
- package/dist/types/logging.js +2 -0
- package/dist/types/recovery.d.ts +48 -0
- package/dist/types/recovery.js +2 -0
- package/dist/types/security.d.ts +1 -0
- package/dist/types/security.js +2 -0
- package/dist/utils/api.d.ts +85 -0
- package/dist/utils/api.js +287 -0
- package/dist/utils/circuitBreaker.d.ts +43 -0
- package/dist/utils/circuitBreaker.js +91 -0
- package/dist/utils/error-message.d.ts +1 -0
- package/dist/utils/error-message.js +103 -0
- package/dist/utils/layout/reservedSpace.d.ts +59 -0
- package/dist/utils/layout/reservedSpace.js +102 -0
- package/dist/utils/logout.d.ts +14 -0
- package/dist/utils/logout.js +32 -0
- package/dist/vibe/client.d.ts +261 -0
- package/dist/vibe/client.js +445 -0
- package/dist/vibe/errors.d.ts +83 -0
- package/dist/vibe/errors.js +146 -0
- package/dist/vibe/generic.d.ts +234 -0
- package/dist/vibe/generic.js +369 -0
- package/dist/vibe/hooks/index.d.ts +169 -0
- package/dist/vibe/hooks/index.js +252 -0
- package/dist/vibe/index.d.ts +23 -0
- package/dist/vibe/index.js +67 -0
- package/dist/vibe/sessions.d.ts +161 -0
- package/dist/vibe/sessions.js +391 -0
- package/dist/vibe/types.d.ts +353 -0
- package/dist/vibe/types.js +315 -0
- package/package.json +855 -0
- package/scripts/check-internal-url-usage.sh +73 -0
- package/scripts/dev-broker.ps1 +35 -0
- package/scripts/dev-local.ps1 +45 -0
- package/src/api/auth-handler.ts +550 -0
- package/src/api/index.ts +18 -0
- package/src/api-handlers/account/change-password.ts +145 -0
- package/src/api-handlers/account/masked-info.ts +45 -0
- package/src/api-handlers/account/profile.ts +80 -0
- package/src/api-handlers/account/recovery/initiate.ts +23 -0
- package/src/api-handlers/account/recovery/send-code.ts +25 -0
- package/src/api-handlers/account/recovery/verify-code.ts +25 -0
- package/src/api-handlers/account/reset-password.ts +23 -0
- package/src/api-handlers/account/send-code.ts +76 -0
- package/src/api-handlers/account/update-phone.ts +79 -0
- package/src/api-handlers/account/validate-password.ts +118 -0
- package/src/api-handlers/account/verify-email.ts +125 -0
- package/src/api-handlers/account/verify-sms.ts +125 -0
- package/src/api-handlers/admin/analytics.ts +445 -0
- package/src/api-handlers/admin/audit.ts +225 -0
- package/src/api-handlers/admin/index.ts +59 -0
- package/src/api-handlers/admin/redis-sessions.ts +253 -0
- package/src/api-handlers/admin/sessions.ts +320 -0
- package/src/api-handlers/admin/site-logs.ts +367 -0
- package/src/api-handlers/admin/users.ts +244 -0
- package/src/api-handlers/admin/vibe-data.ts +326 -0
- package/src/api-handlers/anon/preferences.ts +123 -0
- package/src/api-handlers/auth/jwks.ts +20 -0
- package/src/api-handlers/auth/login.ts +240 -0
- package/src/api-handlers/auth/refresh.ts +687 -0
- package/src/api-handlers/auth/signout.ts +212 -0
- package/src/api-handlers/auth/status.ts +23 -0
- package/src/api-handlers/auth/update-session.ts +125 -0
- package/src/api-handlers/auth/validate.ts +44 -0
- package/src/api-handlers/auth/verify-code.ts +129 -0
- package/src/api-handlers/session/refresh-viability.ts +36 -0
- package/src/api-handlers/session/viability.ts +166 -0
- package/src/api-handlers/test/force-expire.ts +67 -0
- package/src/auth/auth-decision.ts +230 -0
- package/src/auth/auth-options.ts +237 -0
- package/src/auth/callbacks/index.ts +7 -0
- package/src/auth/callbacks/jwt.ts +382 -0
- package/src/auth/callbacks/session.ts +243 -0
- package/src/auth/callbacks/signin.ts +56 -0
- package/src/auth/events/index.ts +5 -0
- package/src/auth/events/signout.ts +33 -0
- package/src/auth/providers/credentials.ts +256 -0
- package/src/auth/providers/index.ts +6 -0
- package/src/auth/providers/oauth.ts +114 -0
- package/src/auth/route-config.ts +220 -0
- package/src/auth/types/auth-types.ts +555 -0
- package/src/auth/types/index.ts +7 -0
- package/src/auth/unauthenticated-routes.ts +3 -0
- package/src/auth/utils/idp-client.ts +444 -0
- package/src/auth/utils/index.ts +6 -0
- package/src/auth/utils/token-utils.ts +244 -0
- package/src/client/AuthContext.tsx +140 -0
- package/src/client/fetch-with-auth.ts +48 -0
- package/src/client/fetchWithSession.ts +21 -0
- package/src/client/index.ts +13 -0
- package/src/client/useAnonSession.ts +131 -0
- package/src/components/SessionSync.tsx +137 -0
- package/src/components/SignalRHealthCheck.tsx +131 -0
- package/src/components/account/UserAvatarMenu.tsx +217 -0
- package/src/components/account/index.ts +8 -0
- package/src/components/admin/AlertSettingsTab.tsx +728 -0
- package/src/components/admin/AnalyticsTab.tsx +703 -0
- package/src/components/admin/DataBrowserTab.tsx +505 -0
- package/src/components/admin/LoggingSettingsTab.tsx +665 -0
- package/src/components/admin/SessionsTab.tsx +414 -0
- package/src/components/admin/StatsTab.tsx +379 -0
- package/src/components/admin/VibeAdminContext.tsx +87 -0
- package/src/components/admin/VibeAdminLayout.tsx +185 -0
- package/src/components/admin/index.ts +59 -0
- package/src/components/auth/FederatedAuthSection.tsx +95 -0
- package/src/components/auth/ModeAwareLoginPage.tsx +135 -0
- package/src/components/auth/ModeAwareSignupPage.tsx +267 -0
- package/src/components/auth/TraditionalAuthSection.tsx +99 -0
- package/src/components/recovery/CompleteStep.tsx +36 -0
- package/src/components/recovery/InitiateRecoveryStep.tsx +68 -0
- package/src/components/recovery/SelectMethodStep.tsx +73 -0
- package/src/components/recovery/SetPasswordStep.tsx +97 -0
- package/src/components/recovery/VerifyCodeStep.tsx +90 -0
- package/src/components/reserved/ReservedRecoveryWarning.tsx +160 -0
- package/src/components/reserved/ReservedStatusBox.tsx +118 -0
- package/src/components/ui/BetaBadge.tsx +58 -0
- package/src/components/ui/Footer.tsx +93 -0
- package/src/config/env.ts +57 -0
- package/src/config/logger.ts +62 -0
- package/src/config/logging-config.ts +82 -0
- package/src/config/unauthenticated-routes.ts +19 -0
- package/src/config/vibe-log-transport.ts +250 -0
- package/src/edge/internal-api-url.ts +65 -0
- package/src/edge/middleware.ts +42 -0
- package/src/hooks/useAuth.ts +115 -0
- package/src/hooks/useAuthSettings.ts +97 -0
- package/src/hooks/useAvailableProviders.ts +118 -0
- package/src/hooks/usePasswordValidation.ts +127 -0
- package/src/hooks/useProfile.ts +75 -0
- package/src/hooks/usePublicAuthSettings.ts +149 -0
- package/src/hooks/useSessionExpiration.ts +102 -0
- package/src/hooks/useViabilitySession.ts +335 -0
- package/src/index.ts +63 -0
- package/src/lib/anon-session.ts +213 -0
- package/src/lib/api-handler.ts +625 -0
- package/src/lib/app-slug.ts +178 -0
- package/src/lib/demo-mode.ts +13 -0
- package/src/lib/geolocation.ts +265 -0
- package/src/lib/idp-client-config.ts +442 -0
- package/src/lib/idp-fetch.ts +101 -0
- package/src/lib/internal-api.ts +171 -0
- package/src/lib/jwt-decode-client.ts +45 -0
- package/src/lib/jwt-decode.ts +83 -0
- package/src/lib/nextauth-secret.ts +126 -0
- package/src/lib/rate-limit-service.ts +9 -0
- package/src/lib/redis.ts +27 -0
- package/src/lib/refresh-token-validator.ts +64 -0
- package/src/lib/roles.ts +177 -0
- package/src/lib/secret-validation.ts +8 -0
- package/src/lib/session-store.ts +637 -0
- package/src/lib/session.ts +34 -0
- package/src/lib/site-logger.ts +245 -0
- package/src/lib/standardized-client-api.ts +896 -0
- package/src/lib/startup-init.ts +247 -0
- package/src/lib/test-aware-get-token.ts +30 -0
- package/src/lib/token-expiry.ts +40 -0
- package/src/lib/token-lifecycle.ts +477 -0
- package/src/lib/types/api-responses.ts +336 -0
- package/src/lib/user-agent-parser.ts +252 -0
- package/src/logging/api/admin-analytics.ts +51 -0
- package/src/logging/api/audit-log.ts +53 -0
- package/src/logging/components/AdminAnalyticsLayout.tsx +49 -0
- package/src/logging/components/AuditLogViewer.tsx +125 -0
- package/src/logging/components/ErrorMetricsCard.tsx +98 -0
- package/src/logging/components/HealthMetricsCard.tsx +70 -0
- package/src/logging/hooks/useAdminAnalytics.ts +22 -0
- package/src/logging/hooks/useAuditLog.ts +24 -0
- package/src/logging/hooks/useErrorMetrics.ts +40 -0
- package/src/logging/hooks/useHealthMetrics.ts +44 -0
- package/src/logging/index.ts +18 -0
- package/src/logging/types/analytics.ts +81 -0
- package/src/logging/types/audit.ts +31 -0
- package/src/logging/types/index.ts +3 -0
- package/src/middleware/auth-decision.ts +43 -0
- package/src/middleware/create-middleware.ts +626 -0
- package/src/middleware/rbac-check.ts +244 -0
- package/src/middleware/twofa-presets.ts +224 -0
- package/src/models/DecodedAccessToken.ts +17 -0
- package/src/models/SessionModel.ts +258 -0
- package/src/pages/admin-login/page.tsx +229 -0
- package/src/pages/admin-roles/RolesAdminPage.tsx +357 -0
- package/src/pages/admin-roles/index.ts +9 -0
- package/src/pages/admin-roles/modals.tsx +469 -0
- package/src/pages/client-admin/ClientSiteAdminPage.tsx +380 -0
- package/src/pages/client-admin/index.ts +33 -0
- package/src/pages/login/page.tsx +463 -0
- package/src/pages/profile/EnhancedProfilePage.tsx +479 -0
- package/src/pages/profile/index.ts +9 -0
- package/src/pages/profile/page.tsx +166 -0
- package/src/pages/recovery/page.tsx +234 -0
- package/src/pages/roles/MyRolesPage.tsx +211 -0
- package/src/pages/roles/components.tsx +294 -0
- package/src/pages/roles/index.ts +17 -0
- package/src/pages/security/EnhancedSecurityPage.tsx +574 -0
- package/src/pages/security/index.ts +9 -0
- package/src/pages/security/page.tsx +507 -0
- package/src/pages/settings/EnhancedSettingsPage.tsx +642 -0
- package/src/pages/settings/index.ts +9 -0
- package/src/pages/settings/page.tsx +47 -0
- package/src/pages/showcase/ShowcasePage.tsx +530 -0
- package/src/pages/showcase/index.ts +13 -0
- package/src/pages/test-env/EmergencyLogoutPage.tsx +179 -0
- package/src/pages/test-env/JwtInspectPage.tsx +418 -0
- package/src/pages/test-env/RefreshTokenPage.tsx +155 -0
- package/src/pages/test-env/TestEnvPage.tsx +116 -0
- package/src/pages/test-env/index.ts +25 -0
- package/src/pages/verify-code/page.tsx +648 -0
- package/src/routes/account/index.ts +32 -0
- package/src/routes/account/masked-info.ts +37 -0
- package/src/routes/account/send-code.ts +40 -0
- package/src/routes/account/update-phone.ts +13 -0
- package/src/routes/account/verify-email.ts +41 -0
- package/src/routes/account/verify-sms.ts +41 -0
- package/src/routes/auth/index.ts +23 -0
- package/src/routes/auth/logout.ts +127 -0
- package/src/routes/auth/nextauth.ts +71 -0
- package/src/routes/auth/refresh.ts +54 -0
- package/src/routes/auth/session.ts +193 -0
- package/src/routes/auth/settings.ts +75 -0
- package/src/routes/auth/viability.ts +220 -0
- package/src/routes/index.ts +18 -0
- package/src/routes/session/index.ts +7 -0
- package/src/routes/session/refresh-viability.ts +17 -0
- package/src/services/signalrActivityService.ts +258 -0
- package/src/stores/authStore.ts +1904 -0
- package/src/templates/instrumentation.ts +41 -0
- package/src/theme/ThemeProvider.tsx +39 -0
- package/src/theme/default.ts +33 -0
- package/src/theme/index.ts +31 -0
- package/src/theme/types.ts +69 -0
- package/src/theme/useTheme.ts +57 -0
- package/src/theme/utils.ts +40 -0
- package/src/types/api.ts +13 -0
- package/src/types/auth.d.ts +15 -0
- package/src/types/auth.ts +22 -0
- package/src/types/logging.ts +11 -0
- package/src/types/next-auth.d.ts +15 -0
- package/src/types/recovery.ts +54 -0
- package/src/types/security.ts +1 -0
- package/src/utils/api.ts +353 -0
- package/src/utils/circuitBreaker.ts +40 -0
- package/src/utils/error-message.ts +108 -0
- package/src/utils/layout/reservedSpace.ts +124 -0
- package/src/utils/logout.ts +30 -0
- package/src/vibe/client.ts +590 -0
- package/src/vibe/errors.ts +185 -0
- package/src/vibe/generic.ts +429 -0
- package/src/vibe/hooks/index.ts +367 -0
- package/src/vibe/index.ts +121 -0
- package/src/vibe/sessions.ts +551 -0
- package/src/vibe/types.ts +577 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-Factor Authentication Presets for MVP Middleware
|
|
3
|
+
*
|
|
4
|
+
* Provides granular control over 2FA requirements per route.
|
|
5
|
+
* Allows routes to require authentication but NOT require 2FA completion,
|
|
6
|
+
* which is essential for 2FA onboarding flows.
|
|
7
|
+
*
|
|
8
|
+
* Ported from website-membership's TwoFactorPresets pattern.
|
|
9
|
+
*
|
|
10
|
+
* @version 2.6.29
|
|
11
|
+
* @since auth-ready-v2
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Two-Factor Authentication Requirements
|
|
15
|
+
*/
|
|
16
|
+
export interface TwoFactorRequirements {
|
|
17
|
+
/** Whether 2FA is required for this route */
|
|
18
|
+
requires2FA: boolean;
|
|
19
|
+
/** Minimum Authentication Context Class Reference level (optional) */
|
|
20
|
+
minACR?: string;
|
|
21
|
+
/** Required Authentication Method References - ALL must be present (optional) */
|
|
22
|
+
requiredAMR?: string[];
|
|
23
|
+
/** Allowed Authentication Method References - at least ONE must be present (optional) */
|
|
24
|
+
allowedAMR?: string[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Route configuration with 2FA requirements
|
|
28
|
+
*/
|
|
29
|
+
export interface RouteConfig {
|
|
30
|
+
/** Whether authentication is required */
|
|
31
|
+
requiresAuth: boolean;
|
|
32
|
+
/** 2FA requirements for this route */
|
|
33
|
+
twoFactorRequirements?: TwoFactorRequirements;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Common 2FA requirement presets
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* // Configure routes with different 2FA requirements
|
|
41
|
+
* configureRoutes({
|
|
42
|
+
* '/api/account/send-code': { requiresAuth: true, twoFactorRequirements: TwoFactorPresets.NONE },
|
|
43
|
+
* '/api/admin/users': { requiresAuth: true, twoFactorRequirements: TwoFactorPresets.HIGH_SECURITY },
|
|
44
|
+
* });
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare const TwoFactorPresets: {
|
|
48
|
+
/**
|
|
49
|
+
* No 2FA required - route is accessible with just authentication
|
|
50
|
+
* Use for: 2FA onboarding routes, profile viewing, non-sensitive operations
|
|
51
|
+
*/
|
|
52
|
+
readonly NONE: TwoFactorRequirements;
|
|
53
|
+
/**
|
|
54
|
+
* Basic 2FA - any authentication method acceptable
|
|
55
|
+
* Use for: Standard protected routes
|
|
56
|
+
*/
|
|
57
|
+
readonly BASIC: TwoFactorRequirements;
|
|
58
|
+
/**
|
|
59
|
+
* Standard 2FA - password + additional factor
|
|
60
|
+
* Use for: Most application features
|
|
61
|
+
*/
|
|
62
|
+
readonly STANDARD: TwoFactorRequirements;
|
|
63
|
+
/**
|
|
64
|
+
* High security - password + MFA required
|
|
65
|
+
* Use for: Admin operations, settings changes
|
|
66
|
+
*/
|
|
67
|
+
readonly HIGH_SECURITY: TwoFactorRequirements;
|
|
68
|
+
/**
|
|
69
|
+
* Admin operations - strict requirements
|
|
70
|
+
* Use for: User management, system configuration
|
|
71
|
+
*/
|
|
72
|
+
readonly ADMIN: TwoFactorRequirements;
|
|
73
|
+
/**
|
|
74
|
+
* Financial operations - maximum security
|
|
75
|
+
* Use for: Payment processing, fund transfers
|
|
76
|
+
*/
|
|
77
|
+
readonly FINANCIAL: TwoFactorRequirements;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* AMR (Authentication Methods Reference) values
|
|
81
|
+
*/
|
|
82
|
+
export declare const AMRValues: {
|
|
83
|
+
/** Password authentication */
|
|
84
|
+
readonly PASSWORD: "pwd";
|
|
85
|
+
/** Multi-factor authentication completed */
|
|
86
|
+
readonly MFA: "mfa";
|
|
87
|
+
/** SMS verification */
|
|
88
|
+
readonly SMS: "sms";
|
|
89
|
+
/** Time-based one-time password (authenticator app) */
|
|
90
|
+
readonly TOTP: "totp";
|
|
91
|
+
/** One-time password (generic) */
|
|
92
|
+
readonly OTP: "otp";
|
|
93
|
+
/** Email verification */
|
|
94
|
+
readonly EMAIL: "email";
|
|
95
|
+
/** Hardware key */
|
|
96
|
+
readonly HARDWARE_KEY: "hwk";
|
|
97
|
+
/** Biometric */
|
|
98
|
+
readonly BIOMETRIC: "bio";
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* ACR (Authentication Context Class Reference) levels
|
|
102
|
+
*/
|
|
103
|
+
export declare const ACRLevels: {
|
|
104
|
+
/** No authentication */
|
|
105
|
+
readonly NONE: "0";
|
|
106
|
+
/** Single factor (password only) */
|
|
107
|
+
readonly SINGLE_FACTOR: "1";
|
|
108
|
+
/** Multi-factor authentication */
|
|
109
|
+
readonly MULTI_FACTOR: "2";
|
|
110
|
+
/** Hardware-backed MFA */
|
|
111
|
+
readonly HARDWARE_MFA: "3";
|
|
112
|
+
/** Maximum assurance (hardware + biometric) */
|
|
113
|
+
readonly MAXIMUM: "4";
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Validate AMR claims against requirements
|
|
117
|
+
*/
|
|
118
|
+
export declare function validateAMR(actualAMR: string[], requirements: TwoFactorRequirements): boolean;
|
|
119
|
+
/**
|
|
120
|
+
* Validate ACR level against requirements
|
|
121
|
+
*/
|
|
122
|
+
export declare function validateACR(actualACR: string, minACR?: string): boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Check if 2FA requirements are met
|
|
125
|
+
*/
|
|
126
|
+
export declare function checkTwoFactorRequirements(requirements: TwoFactorRequirements, sessionStatus: {
|
|
127
|
+
twoFactorComplete?: boolean;
|
|
128
|
+
authenticationMethods?: string[];
|
|
129
|
+
authenticationLevel?: string;
|
|
130
|
+
}): {
|
|
131
|
+
satisfied: boolean;
|
|
132
|
+
reason?: string;
|
|
133
|
+
};
|
|
134
|
+
export default TwoFactorPresets;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Two-Factor Authentication Presets for MVP Middleware
|
|
4
|
+
*
|
|
5
|
+
* Provides granular control over 2FA requirements per route.
|
|
6
|
+
* Allows routes to require authentication but NOT require 2FA completion,
|
|
7
|
+
* which is essential for 2FA onboarding flows.
|
|
8
|
+
*
|
|
9
|
+
* Ported from website-membership's TwoFactorPresets pattern.
|
|
10
|
+
*
|
|
11
|
+
* @version 2.6.29
|
|
12
|
+
* @since auth-ready-v2
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ACRLevels = exports.AMRValues = exports.TwoFactorPresets = void 0;
|
|
16
|
+
exports.validateAMR = validateAMR;
|
|
17
|
+
exports.validateACR = validateACR;
|
|
18
|
+
exports.checkTwoFactorRequirements = checkTwoFactorRequirements;
|
|
19
|
+
/**
|
|
20
|
+
* Common 2FA requirement presets
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // Configure routes with different 2FA requirements
|
|
25
|
+
* configureRoutes({
|
|
26
|
+
* '/api/account/send-code': { requiresAuth: true, twoFactorRequirements: TwoFactorPresets.NONE },
|
|
27
|
+
* '/api/admin/users': { requiresAuth: true, twoFactorRequirements: TwoFactorPresets.HIGH_SECURITY },
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
exports.TwoFactorPresets = {
|
|
32
|
+
/**
|
|
33
|
+
* No 2FA required - route is accessible with just authentication
|
|
34
|
+
* Use for: 2FA onboarding routes, profile viewing, non-sensitive operations
|
|
35
|
+
*/
|
|
36
|
+
NONE: {
|
|
37
|
+
requires2FA: false
|
|
38
|
+
},
|
|
39
|
+
/**
|
|
40
|
+
* Basic 2FA - any authentication method acceptable
|
|
41
|
+
* Use for: Standard protected routes
|
|
42
|
+
*/
|
|
43
|
+
BASIC: {
|
|
44
|
+
requires2FA: true,
|
|
45
|
+
minACR: '1',
|
|
46
|
+
allowedAMR: ['pwd', 'mfa', 'sms', 'totp', 'otp']
|
|
47
|
+
},
|
|
48
|
+
/**
|
|
49
|
+
* Standard 2FA - password + additional factor
|
|
50
|
+
* Use for: Most application features
|
|
51
|
+
*/
|
|
52
|
+
STANDARD: {
|
|
53
|
+
requires2FA: true,
|
|
54
|
+
minACR: '2',
|
|
55
|
+
requiredAMR: ['pwd'],
|
|
56
|
+
allowedAMR: ['pwd', 'mfa', 'sms', 'totp', 'otp']
|
|
57
|
+
},
|
|
58
|
+
/**
|
|
59
|
+
* High security - password + MFA required
|
|
60
|
+
* Use for: Admin operations, settings changes
|
|
61
|
+
*/
|
|
62
|
+
HIGH_SECURITY: {
|
|
63
|
+
requires2FA: true,
|
|
64
|
+
minACR: '2',
|
|
65
|
+
requiredAMR: ['pwd', 'mfa']
|
|
66
|
+
},
|
|
67
|
+
/**
|
|
68
|
+
* Admin operations - strict requirements
|
|
69
|
+
* Use for: User management, system configuration
|
|
70
|
+
*/
|
|
71
|
+
ADMIN: {
|
|
72
|
+
requires2FA: true,
|
|
73
|
+
minACR: '3',
|
|
74
|
+
requiredAMR: ['pwd', 'mfa']
|
|
75
|
+
},
|
|
76
|
+
/**
|
|
77
|
+
* Financial operations - maximum security
|
|
78
|
+
* Use for: Payment processing, fund transfers
|
|
79
|
+
*/
|
|
80
|
+
FINANCIAL: {
|
|
81
|
+
requires2FA: true,
|
|
82
|
+
minACR: '4',
|
|
83
|
+
requiredAMR: ['pwd', 'mfa', 'totp']
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* AMR (Authentication Methods Reference) values
|
|
88
|
+
*/
|
|
89
|
+
exports.AMRValues = {
|
|
90
|
+
/** Password authentication */
|
|
91
|
+
PASSWORD: 'pwd',
|
|
92
|
+
/** Multi-factor authentication completed */
|
|
93
|
+
MFA: 'mfa',
|
|
94
|
+
/** SMS verification */
|
|
95
|
+
SMS: 'sms',
|
|
96
|
+
/** Time-based one-time password (authenticator app) */
|
|
97
|
+
TOTP: 'totp',
|
|
98
|
+
/** One-time password (generic) */
|
|
99
|
+
OTP: 'otp',
|
|
100
|
+
/** Email verification */
|
|
101
|
+
EMAIL: 'email',
|
|
102
|
+
/** Hardware key */
|
|
103
|
+
HARDWARE_KEY: 'hwk',
|
|
104
|
+
/** Biometric */
|
|
105
|
+
BIOMETRIC: 'bio'
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* ACR (Authentication Context Class Reference) levels
|
|
109
|
+
*/
|
|
110
|
+
exports.ACRLevels = {
|
|
111
|
+
/** No authentication */
|
|
112
|
+
NONE: '0',
|
|
113
|
+
/** Single factor (password only) */
|
|
114
|
+
SINGLE_FACTOR: '1',
|
|
115
|
+
/** Multi-factor authentication */
|
|
116
|
+
MULTI_FACTOR: '2',
|
|
117
|
+
/** Hardware-backed MFA */
|
|
118
|
+
HARDWARE_MFA: '3',
|
|
119
|
+
/** Maximum assurance (hardware + biometric) */
|
|
120
|
+
MAXIMUM: '4'
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* Validate AMR claims against requirements
|
|
124
|
+
*/
|
|
125
|
+
function validateAMR(actualAMR, requirements) {
|
|
126
|
+
// If no AMR requirements, valid
|
|
127
|
+
if (!requirements.requiredAMR?.length && !requirements.allowedAMR?.length) {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
// If required methods specified, all must be present
|
|
131
|
+
if (requirements.requiredAMR && requirements.requiredAMR.length > 0) {
|
|
132
|
+
return requirements.requiredAMR.every(method => actualAMR.includes(method));
|
|
133
|
+
}
|
|
134
|
+
// If allowed methods specified, at least one must be present
|
|
135
|
+
if (requirements.allowedAMR && requirements.allowedAMR.length > 0) {
|
|
136
|
+
return actualAMR.some(method => requirements.allowedAMR.includes(method));
|
|
137
|
+
}
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Validate ACR level against requirements
|
|
142
|
+
*/
|
|
143
|
+
function validateACR(actualACR, minACR) {
|
|
144
|
+
if (!minACR) {
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
const actualLevel = parseInt(actualACR, 10) || 0;
|
|
148
|
+
const minLevel = parseInt(minACR, 10) || 1;
|
|
149
|
+
return actualLevel >= minLevel;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Check if 2FA requirements are met
|
|
153
|
+
*/
|
|
154
|
+
function checkTwoFactorRequirements(requirements, sessionStatus) {
|
|
155
|
+
// If 2FA not required, always satisfied
|
|
156
|
+
if (!requirements.requires2FA) {
|
|
157
|
+
return { satisfied: true };
|
|
158
|
+
}
|
|
159
|
+
// Check if 2FA is complete
|
|
160
|
+
if (!sessionStatus.twoFactorComplete) {
|
|
161
|
+
return { satisfied: false, reason: '2FA not completed' };
|
|
162
|
+
}
|
|
163
|
+
// Check AMR if specified
|
|
164
|
+
const amr = sessionStatus.authenticationMethods || [];
|
|
165
|
+
if (!validateAMR(amr, requirements)) {
|
|
166
|
+
return { satisfied: false, reason: 'AMR requirements not met' };
|
|
167
|
+
}
|
|
168
|
+
// Check ACR if specified
|
|
169
|
+
const acr = sessionStatus.authenticationLevel || '0';
|
|
170
|
+
if (!validateACR(acr, requirements.minACR)) {
|
|
171
|
+
return { satisfied: false, reason: 'ACR level insufficient' };
|
|
172
|
+
}
|
|
173
|
+
return { satisfied: true };
|
|
174
|
+
}
|
|
175
|
+
exports.default = exports.TwoFactorPresets;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface DecodedAccessToken {
|
|
2
|
+
iss: string;
|
|
3
|
+
aud: string;
|
|
4
|
+
sub: string;
|
|
5
|
+
jti: string;
|
|
6
|
+
iat: number;
|
|
7
|
+
nbf: number;
|
|
8
|
+
exp: number;
|
|
9
|
+
user_id: string;
|
|
10
|
+
client_id: string;
|
|
11
|
+
token_type: string;
|
|
12
|
+
scope: string;
|
|
13
|
+
roles: string[];
|
|
14
|
+
amr: string[];
|
|
15
|
+
acr: string;
|
|
16
|
+
[key: string]: any;
|
|
17
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Model - Redis Session Data Structure
|
|
3
|
+
*
|
|
4
|
+
* This is the single source of truth for session data stored in Redis.
|
|
5
|
+
* The session contains all authentication state - the JWT cookie only
|
|
6
|
+
* stores the session ID (redisSessionId).
|
|
7
|
+
*
|
|
8
|
+
* FIELD NAMING CONVENTIONS:
|
|
9
|
+
* - idp* prefix: Tokens from PayEz IDP (identity provider)
|
|
10
|
+
* - oauth* prefix: Tokens from external OAuth providers (Google, etc.)
|
|
11
|
+
* - mfa* prefix: Multi-factor authentication related fields
|
|
12
|
+
*
|
|
13
|
+
* @version 2.0.0 - Normalized field names
|
|
14
|
+
* @since auth-refactor-2026-01
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Session data stored in Redis.
|
|
18
|
+
*
|
|
19
|
+
* This interface uses normalized field names for clarity.
|
|
20
|
+
* All tokens and user data live here - the browser only gets the session ID.
|
|
21
|
+
*/
|
|
22
|
+
export interface SessionData {
|
|
23
|
+
/** User ID from IDP (sub claim) */
|
|
24
|
+
userId: string;
|
|
25
|
+
/** User's email address */
|
|
26
|
+
email: string;
|
|
27
|
+
/** Display name (from OAuth profile or IDP) */
|
|
28
|
+
name?: string;
|
|
29
|
+
/** User's roles/permissions */
|
|
30
|
+
roles: string[];
|
|
31
|
+
/** IDP access token (JWT) - used for API calls to PayEz services */
|
|
32
|
+
idpAccessToken?: string;
|
|
33
|
+
/** IDP refresh token - used to get new access tokens */
|
|
34
|
+
idpRefreshToken?: string;
|
|
35
|
+
/** When the IDP access token expires (Unix timestamp ms) */
|
|
36
|
+
idpAccessTokenExpires: number;
|
|
37
|
+
/** When the IDP refresh token expires (Unix timestamp ms) */
|
|
38
|
+
idpRefreshTokenExpires?: number;
|
|
39
|
+
/** Decoded IDP access token claims (for quick access without re-decoding) */
|
|
40
|
+
decodedAccessToken?: any;
|
|
41
|
+
/**
|
|
42
|
+
* Bearer Key ID (kid from JWT header).
|
|
43
|
+
* Identifies which IDP signing key was used for this token.
|
|
44
|
+
* CRITICAL: This is from the JWT HEADER, not client_id from payload.
|
|
45
|
+
*/
|
|
46
|
+
bearerKeyId?: string;
|
|
47
|
+
/** Whether MFA has been verified for this session */
|
|
48
|
+
mfaVerified: boolean;
|
|
49
|
+
/** The MFA method used (email, sms, totp) */
|
|
50
|
+
mfaMethod?: 'email' | 'sms' | 'totp';
|
|
51
|
+
/** When MFA was completed (Unix timestamp ms) */
|
|
52
|
+
mfaCompletedAt?: number;
|
|
53
|
+
/** When MFA verification expires (Unix timestamp ms) */
|
|
54
|
+
mfaExpiresAt?: number;
|
|
55
|
+
/** How long MFA is valid in hours */
|
|
56
|
+
mfaValidityHours?: number;
|
|
57
|
+
/** Authentication methods from token (amr claim) */
|
|
58
|
+
authenticationMethods?: string[];
|
|
59
|
+
/** Authentication level from token (acr claim) */
|
|
60
|
+
authenticationLevel?: string;
|
|
61
|
+
/** Which OAuth provider was used (google, apple, microsoft, etc.) */
|
|
62
|
+
oauthProvider?: string;
|
|
63
|
+
/** Access token from OAuth provider */
|
|
64
|
+
oauthProviderToken?: string;
|
|
65
|
+
/** Refresh token from OAuth provider */
|
|
66
|
+
oauthProviderRefreshToken?: string;
|
|
67
|
+
/** IDP client ID this user belongs to */
|
|
68
|
+
idpClientId?: string;
|
|
69
|
+
/** Merchant ID (typically same as client ID) */
|
|
70
|
+
merchantId?: string;
|
|
71
|
+
/**
|
|
72
|
+
* Allow any additional fields for backward compatibility.
|
|
73
|
+
* During migration, old sessions may have legacy field names.
|
|
74
|
+
*/
|
|
75
|
+
[key: string]: any;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Session model class for working with session data.
|
|
79
|
+
*
|
|
80
|
+
* Provides typed access to session fields with normalized names.
|
|
81
|
+
*/
|
|
82
|
+
export declare class SessionModel {
|
|
83
|
+
userId: string;
|
|
84
|
+
email: string;
|
|
85
|
+
name?: string;
|
|
86
|
+
roles: string[];
|
|
87
|
+
idpAccessToken?: string;
|
|
88
|
+
idpRefreshToken?: string;
|
|
89
|
+
idpAccessTokenExpires: number;
|
|
90
|
+
idpRefreshTokenExpires?: number;
|
|
91
|
+
decodedAccessToken?: any;
|
|
92
|
+
bearerKeyId?: string;
|
|
93
|
+
mfaVerified: boolean;
|
|
94
|
+
mfaMethod?: 'email' | 'sms' | 'totp';
|
|
95
|
+
mfaCompletedAt?: number;
|
|
96
|
+
mfaExpiresAt?: number;
|
|
97
|
+
mfaValidityHours?: number;
|
|
98
|
+
authenticationMethods?: string[];
|
|
99
|
+
authenticationLevel?: string;
|
|
100
|
+
oauthProvider?: string;
|
|
101
|
+
oauthProviderToken?: string;
|
|
102
|
+
oauthProviderRefreshToken?: string;
|
|
103
|
+
idpClientId?: string;
|
|
104
|
+
merchantId?: string;
|
|
105
|
+
constructor(data: SessionData);
|
|
106
|
+
/**
|
|
107
|
+
* Check if the IDP access token has expired.
|
|
108
|
+
*/
|
|
109
|
+
isAccessTokenExpired(): boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Check if the IDP refresh token has expired.
|
|
112
|
+
*/
|
|
113
|
+
isRefreshTokenExpired(): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Check if MFA has expired.
|
|
116
|
+
*/
|
|
117
|
+
isMfaExpired(): boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Convert to plain object for storage.
|
|
120
|
+
*/
|
|
121
|
+
toJSON(): SessionData;
|
|
122
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Session Model - Redis Session Data Structure
|
|
4
|
+
*
|
|
5
|
+
* This is the single source of truth for session data stored in Redis.
|
|
6
|
+
* The session contains all authentication state - the JWT cookie only
|
|
7
|
+
* stores the session ID (redisSessionId).
|
|
8
|
+
*
|
|
9
|
+
* FIELD NAMING CONVENTIONS:
|
|
10
|
+
* - idp* prefix: Tokens from PayEz IDP (identity provider)
|
|
11
|
+
* - oauth* prefix: Tokens from external OAuth providers (Google, etc.)
|
|
12
|
+
* - mfa* prefix: Multi-factor authentication related fields
|
|
13
|
+
*
|
|
14
|
+
* @version 2.0.0 - Normalized field names
|
|
15
|
+
* @since auth-refactor-2026-01
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.SessionModel = void 0;
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// SESSION MODEL CLASS
|
|
21
|
+
// ============================================================================
|
|
22
|
+
/**
|
|
23
|
+
* Session model class for working with session data.
|
|
24
|
+
*
|
|
25
|
+
* Provides typed access to session fields with normalized names.
|
|
26
|
+
*/
|
|
27
|
+
class SessionModel {
|
|
28
|
+
// Core Identity
|
|
29
|
+
userId;
|
|
30
|
+
email;
|
|
31
|
+
name;
|
|
32
|
+
roles;
|
|
33
|
+
// IDP Tokens
|
|
34
|
+
idpAccessToken;
|
|
35
|
+
idpRefreshToken;
|
|
36
|
+
idpAccessTokenExpires;
|
|
37
|
+
idpRefreshTokenExpires;
|
|
38
|
+
decodedAccessToken;
|
|
39
|
+
bearerKeyId;
|
|
40
|
+
// MFA State
|
|
41
|
+
mfaVerified;
|
|
42
|
+
mfaMethod;
|
|
43
|
+
mfaCompletedAt;
|
|
44
|
+
mfaExpiresAt;
|
|
45
|
+
mfaValidityHours;
|
|
46
|
+
authenticationMethods;
|
|
47
|
+
authenticationLevel;
|
|
48
|
+
// OAuth Provider
|
|
49
|
+
oauthProvider;
|
|
50
|
+
oauthProviderToken;
|
|
51
|
+
oauthProviderRefreshToken;
|
|
52
|
+
// Multi-Tenant
|
|
53
|
+
idpClientId;
|
|
54
|
+
merchantId;
|
|
55
|
+
constructor(data) {
|
|
56
|
+
// Core Identity
|
|
57
|
+
this.userId = data.userId;
|
|
58
|
+
this.email = data.email;
|
|
59
|
+
this.name = data.name;
|
|
60
|
+
this.roles = data.roles || [];
|
|
61
|
+
// IDP Tokens
|
|
62
|
+
this.idpAccessToken = data.idpAccessToken;
|
|
63
|
+
this.idpRefreshToken = data.idpRefreshToken;
|
|
64
|
+
this.idpAccessTokenExpires = data.idpAccessTokenExpires;
|
|
65
|
+
this.idpRefreshTokenExpires = data.idpRefreshTokenExpires;
|
|
66
|
+
this.decodedAccessToken = data.decodedAccessToken;
|
|
67
|
+
this.bearerKeyId = data.bearerKeyId;
|
|
68
|
+
// MFA State
|
|
69
|
+
this.mfaVerified = data.mfaVerified ?? false;
|
|
70
|
+
this.mfaMethod = data.mfaMethod;
|
|
71
|
+
this.mfaCompletedAt = data.mfaCompletedAt;
|
|
72
|
+
this.mfaExpiresAt = data.mfaExpiresAt;
|
|
73
|
+
this.mfaValidityHours = data.mfaValidityHours;
|
|
74
|
+
this.authenticationMethods = data.authenticationMethods;
|
|
75
|
+
this.authenticationLevel = data.authenticationLevel;
|
|
76
|
+
// OAuth Provider
|
|
77
|
+
this.oauthProvider = data.oauthProvider;
|
|
78
|
+
this.oauthProviderToken = data.oauthProviderToken;
|
|
79
|
+
this.oauthProviderRefreshToken = data.oauthProviderRefreshToken;
|
|
80
|
+
// Multi-Tenant
|
|
81
|
+
this.idpClientId = data.idpClientId;
|
|
82
|
+
this.merchantId = data.merchantId;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Check if the IDP access token has expired.
|
|
86
|
+
*/
|
|
87
|
+
isAccessTokenExpired() {
|
|
88
|
+
return Date.now() >= this.idpAccessTokenExpires;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Check if the IDP refresh token has expired.
|
|
92
|
+
*/
|
|
93
|
+
isRefreshTokenExpired() {
|
|
94
|
+
if (!this.idpRefreshTokenExpires)
|
|
95
|
+
return false;
|
|
96
|
+
return Date.now() >= this.idpRefreshTokenExpires;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if MFA has expired.
|
|
100
|
+
*/
|
|
101
|
+
isMfaExpired() {
|
|
102
|
+
if (!this.mfaExpiresAt)
|
|
103
|
+
return false;
|
|
104
|
+
return Date.now() > this.mfaExpiresAt;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Convert to plain object for storage.
|
|
108
|
+
*/
|
|
109
|
+
toJSON() {
|
|
110
|
+
return {
|
|
111
|
+
userId: this.userId,
|
|
112
|
+
email: this.email,
|
|
113
|
+
name: this.name,
|
|
114
|
+
roles: this.roles,
|
|
115
|
+
idpAccessToken: this.idpAccessToken,
|
|
116
|
+
idpRefreshToken: this.idpRefreshToken,
|
|
117
|
+
idpAccessTokenExpires: this.idpAccessTokenExpires,
|
|
118
|
+
idpRefreshTokenExpires: this.idpRefreshTokenExpires,
|
|
119
|
+
decodedAccessToken: this.decodedAccessToken,
|
|
120
|
+
bearerKeyId: this.bearerKeyId,
|
|
121
|
+
mfaVerified: this.mfaVerified,
|
|
122
|
+
mfaMethod: this.mfaMethod,
|
|
123
|
+
mfaCompletedAt: this.mfaCompletedAt,
|
|
124
|
+
mfaExpiresAt: this.mfaExpiresAt,
|
|
125
|
+
mfaValidityHours: this.mfaValidityHours,
|
|
126
|
+
authenticationMethods: this.authenticationMethods,
|
|
127
|
+
authenticationLevel: this.authenticationLevel,
|
|
128
|
+
oauthProvider: this.oauthProvider,
|
|
129
|
+
oauthProviderToken: this.oauthProviderToken,
|
|
130
|
+
oauthProviderRefreshToken: this.oauthProviderRefreshToken,
|
|
131
|
+
idpClientId: this.idpClientId,
|
|
132
|
+
merchantId: this.merchantId,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.SessionModel = SessionModel;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Login Page for @payez/next-mvp
|
|
3
|
+
*
|
|
4
|
+
* A standalone username/password login page for admin access.
|
|
5
|
+
* NOT linked from any navigation - only accessible via direct URL.
|
|
6
|
+
*
|
|
7
|
+
* USAGE:
|
|
8
|
+
* 1. Create app/account-auth/admin-login/page.tsx in your Next.js app
|
|
9
|
+
* 2. Re-export this component:
|
|
10
|
+
* export { default } from '@payez/next-mvp/pages/admin-login';
|
|
11
|
+
*
|
|
12
|
+
* CUSTOMIZATION:
|
|
13
|
+
* - Override styles via CSS variables or wrap with your own component
|
|
14
|
+
* - Provide custom branding via ThemeProvider
|
|
15
|
+
*/
|
|
16
|
+
import React from 'react';
|
|
17
|
+
interface AdminLoginFormProps {
|
|
18
|
+
/** Optional custom title (default: "Admin Login") */
|
|
19
|
+
title?: string;
|
|
20
|
+
/** Optional custom subtitle (default: "Authorized personnel only") */
|
|
21
|
+
subtitle?: string;
|
|
22
|
+
/** Optional callback URL override */
|
|
23
|
+
callbackUrl?: string;
|
|
24
|
+
/** Optional logo component to render */
|
|
25
|
+
logo?: React.ReactNode;
|
|
26
|
+
}
|
|
27
|
+
declare function AdminLoginForm({ title, subtitle, callbackUrl: propCallbackUrl, logo, }: AdminLoginFormProps): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
declare function AdminLoginFallback(): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
export default function AdminLoginPage(props: AdminLoginFormProps): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
export { AdminLoginForm, AdminLoginFallback };
|
|
31
|
+
export type { AdminLoginFormProps };
|