@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
package/README.md
ADDED
|
@@ -0,0 +1,782 @@
|
|
|
1
|
+
# @payez/next-mvp
|
|
2
|
+
|
|
3
|
+
PayEz IDP authentication package for Next.js 14/15 with pre-built UI components and complete authentication flow.
|
|
4
|
+
|
|
5
|
+
## Version History
|
|
6
|
+
|
|
7
|
+
### v2.4.2 (2025-11-14)
|
|
8
|
+
- **Fixed**: Redirect loop on token expiration - middleware now allows NextAuth JWT callback to refresh expired tokens instead of immediately redirecting to login, preventing infinite redirect loops when access tokens expire
|
|
9
|
+
|
|
10
|
+
### v2.4.1 (2025-11-14)
|
|
11
|
+
- **Fixed**: Stale cookie detection - viability API now properly detects when JWT exists but Redis session is missing, preventing access with expired sessions
|
|
12
|
+
- **Fixed**: Token refresh field names - changed to PascalCase (`RefreshToken`, `AuthenticationMethods`, `AuthenticationLevel`, `TwoFactorMethod`) to match IDP requirements, resolving 400 errors during token refresh
|
|
13
|
+
|
|
14
|
+
### v2.4.0
|
|
15
|
+
- Auth-ready v2 handlers with pre-configured routes
|
|
16
|
+
- Redis session management improvements
|
|
17
|
+
- Token refresh optimizations
|
|
18
|
+
|
|
19
|
+
## Features
|
|
20
|
+
|
|
21
|
+
- ๐ **Complete Authentication Flow** - Login, logout, session management, password recovery
|
|
22
|
+
- ๐จ **Pre-built UI Components** - Ready-to-use login, recovery, and verify-code pages
|
|
23
|
+
- ๐ **Automatic Token Refresh** - Built-in refresh token handling
|
|
24
|
+
- ๐ญ **Themeable** - Customize branding, colors, and layout via ThemeProvider
|
|
25
|
+
- ๐ฑ **Responsive Design** - Mobile-first Tailwind CSS components
|
|
26
|
+
- ๐ **Next.js 14/15 Ready** - Works with App Router and React Server Components
|
|
27
|
+
- ๐ **Secure by Default** - JWT-based authentication with PayEz IDP
|
|
28
|
+
|
|
29
|
+
## Installation
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm install @payez/next-mvp next-auth
|
|
33
|
+
# or
|
|
34
|
+
yarn add @payez/next-mvp next-auth
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Peer Dependencies
|
|
38
|
+
|
|
39
|
+
Ensure you have these installed:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm install next@^14.0.0 next-auth@^4.24.7 react@^18.2.0 react-dom@^18.2.0
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Development Scripts
|
|
48
|
+
|
|
49
|
+
PayEz MVP includes convenient development scripts for getting started quickly:
|
|
50
|
+
|
|
51
|
+
### `npm run dev:local`
|
|
52
|
+
|
|
53
|
+
**Local Development Mode** - Perfect for first-time setup and testing without an external IDP:
|
|
54
|
+
- Auto-generates `NEXTAUTH_SECRET` for you
|
|
55
|
+
- No external IDP connection required
|
|
56
|
+
- Great for UI development and testing
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npm run dev:local
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
This will:
|
|
63
|
+
1. Generate a secure random `NEXTAUTH_SECRET`
|
|
64
|
+
2. Display the secret (save it to your `.env.local`)
|
|
65
|
+
3. Start the Next.js dev server on port 3000
|
|
66
|
+
|
|
67
|
+
### `npm run dev:broker`
|
|
68
|
+
|
|
69
|
+
**Broker Mode** - Production-like authentication with PayEz IDP:
|
|
70
|
+
- Uses OAuth/OIDC flow with PayEz IDP
|
|
71
|
+
- Client assertion authentication
|
|
72
|
+
- Required for testing real authentication flows
|
|
73
|
+
- **This is a core feature for PayEz MVP users**
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npm run dev:broker
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This will:
|
|
80
|
+
1. Enable broker mode (`USE_BROKER_MODE=true`)
|
|
81
|
+
2. Set client ID for IDP authentication
|
|
82
|
+
3. Start the Next.js dev server on port 3000
|
|
83
|
+
4. Automatically kills any existing process on port 3000
|
|
84
|
+
|
|
85
|
+
**Custom Port & Client ID:**
|
|
86
|
+
```bash
|
|
87
|
+
# In your consuming project's package.json
|
|
88
|
+
"scripts": {
|
|
89
|
+
"dev:broker": "pwsh -NoProfile -ExecutionPolicy Bypass -File node_modules/@payez/next-mvp/scripts/dev-broker.ps1 -ClientId 2 -Port 3400"
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Which Script to Use?
|
|
94
|
+
|
|
95
|
+
| Scenario | Script | When to Use |
|
|
96
|
+
|----------|--------|-------------|
|
|
97
|
+
| ๐จ UI Development | `dev:local` | Building components, testing UI flows |
|
|
98
|
+
| ๐ Auth Testing | `dev:broker` | Testing real OAuth flows, token management |
|
|
99
|
+
| ๐ Production-like | `dev:broker` | Testing with actual IDP integration |
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Quick Start (App Router with UI Components)
|
|
104
|
+
|
|
105
|
+
### 1. Configure Next.js
|
|
106
|
+
|
|
107
|
+
Add to your `next.config.ts`:
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
import type { NextConfig } from "next";
|
|
111
|
+
|
|
112
|
+
const nextConfig: NextConfig = {
|
|
113
|
+
transpilePackages: ['@payez/next-mvp'],
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export default nextConfig;
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 2. Set Environment Variables
|
|
120
|
+
|
|
121
|
+
Create `.env.local` (or `.env.development`) in your project root:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# PayEz IDP Configuration (required)
|
|
125
|
+
CLIENT_ID=your_client_slug_from_payez # e.g., "payez_idp_admin_web"
|
|
126
|
+
IDP_URL=https://idp.payez.net # or http://localhost:32785 for local dev
|
|
127
|
+
|
|
128
|
+
# NextAuth trusts request headers for OAuth callback URLs
|
|
129
|
+
AUTH_TRUST_HOST=true
|
|
130
|
+
|
|
131
|
+
# NEXTAUTH_SECRET - DO NOT SET!
|
|
132
|
+
# The MVP broker fetches this securely from IDP at startup.
|
|
133
|
+
# Only set manually if you need to override the IDP-provided secret.
|
|
134
|
+
|
|
135
|
+
# Optional
|
|
136
|
+
REDIS_URL=redis://localhost:6379 # For session storage
|
|
137
|
+
NEXT_PUBLIC_IDP_BASE_URL=https://idp.payez.net # For client-side redirects
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
> **Note:** `NEXTAUTH_SECRET` is intentionally omitted. The MVP automatically fetches it from the IDP at startup using the broker pattern. See [Environment Variables Reference](#environment-variables-reference) for details.
|
|
141
|
+
|
|
142
|
+
### 3. Create NextAuth API Route
|
|
143
|
+
|
|
144
|
+
Create `app/api/auth/[...nextauth]/route.ts`:
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
/**
|
|
148
|
+
* NextAuth API Route Handler
|
|
149
|
+
* Uses pre-configured handler from @payez/next-mvp
|
|
150
|
+
*/
|
|
151
|
+
export { GET, POST } from '@payez/next-mvp/routes/auth/nextauth';
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 4. Wrap Your App with Providers
|
|
155
|
+
|
|
156
|
+
Create `app/providers.tsx`:
|
|
157
|
+
|
|
158
|
+
```typescript
|
|
159
|
+
'use client';
|
|
160
|
+
|
|
161
|
+
import { SessionProvider } from 'next-auth/react';
|
|
162
|
+
import { ThemeProvider } from '@payez/next-mvp/theme';
|
|
163
|
+
|
|
164
|
+
export function Providers({ children }: { children: React.ReactNode }) {
|
|
165
|
+
return (
|
|
166
|
+
<SessionProvider>
|
|
167
|
+
<ThemeProvider>
|
|
168
|
+
{children}
|
|
169
|
+
</ThemeProvider>
|
|
170
|
+
</SessionProvider>
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Update `app/layout.tsx`:
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
import { Providers } from './providers';
|
|
179
|
+
|
|
180
|
+
export default function RootLayout({
|
|
181
|
+
children,
|
|
182
|
+
}: {
|
|
183
|
+
children: React.ReactNode;
|
|
184
|
+
}) {
|
|
185
|
+
return (
|
|
186
|
+
<html lang="en">
|
|
187
|
+
<body>
|
|
188
|
+
<Providers>
|
|
189
|
+
{children}
|
|
190
|
+
</Providers>
|
|
191
|
+
</body>
|
|
192
|
+
</html>
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### 5. Add Authentication Pages
|
|
198
|
+
|
|
199
|
+
**Login Page** - `app/account-auth/login/page.tsx`:
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
'use client';
|
|
203
|
+
|
|
204
|
+
import LoginPage from '@payez/next-mvp/dist/pages/login';
|
|
205
|
+
|
|
206
|
+
export default function LoginPageWrapper() {
|
|
207
|
+
return <LoginPage />;
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**Password Recovery** - `app/account-auth/recovery/page.tsx`:
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
'use client';
|
|
215
|
+
|
|
216
|
+
import RecoveryPage from '@payez/next-mvp/dist/pages/recovery';
|
|
217
|
+
|
|
218
|
+
export default function RecoveryPageWrapper() {
|
|
219
|
+
return <RecoveryPage />;
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**Verify Code (2FA)** - `app/account-auth/verify-code/page.tsx`:
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
'use client';
|
|
227
|
+
|
|
228
|
+
import VerifyCodePage from '@payez/next-mvp/dist/pages/verify-code';
|
|
229
|
+
|
|
230
|
+
export default function VerifyCodePageWrapper() {
|
|
231
|
+
return <VerifyCodePage />;
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### 6. Protect Routes with Authentication
|
|
236
|
+
|
|
237
|
+
**Server-side protection:**
|
|
238
|
+
|
|
239
|
+
```typescript
|
|
240
|
+
import { getServerSession } from 'next-auth';
|
|
241
|
+
import { redirect } from 'next/navigation';
|
|
242
|
+
|
|
243
|
+
export default async function DashboardPage() {
|
|
244
|
+
const session = await getServerSession();
|
|
245
|
+
|
|
246
|
+
if (!session) {
|
|
247
|
+
redirect('/account-auth/login');
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
return (
|
|
251
|
+
<div>
|
|
252
|
+
<h1>Welcome, {session.user?.email}</h1>
|
|
253
|
+
</div>
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Client-side hook:**
|
|
259
|
+
|
|
260
|
+
```typescript
|
|
261
|
+
'use client';
|
|
262
|
+
|
|
263
|
+
import { useSession } from 'next-auth/react';
|
|
264
|
+
|
|
265
|
+
export default function ProfilePage() {
|
|
266
|
+
const { data: session, status } = useSession();
|
|
267
|
+
|
|
268
|
+
if (status === 'loading') return <div>Loading...</div>;
|
|
269
|
+
if (status === 'unauthenticated') return <div>Access Denied</div>;
|
|
270
|
+
|
|
271
|
+
return <div>Logged in as {session?.user?.email}</div>;
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## Advanced: V2 Middleware-Based Setup
|
|
278
|
+
|
|
279
|
+
For applications requiring middleware-based route protection:
|
|
280
|
+
|
|
281
|
+
### 1. Configure Public Routes
|
|
282
|
+
|
|
283
|
+
Create `src/lib/auth.ts`:
|
|
284
|
+
|
|
285
|
+
```typescript
|
|
286
|
+
import { configurePublicRoutes, createAuthOptions } from '@payez/next-mvp';
|
|
287
|
+
import CredentialsProvider from 'next-auth/providers/credentials';
|
|
288
|
+
|
|
289
|
+
// Define routes that do NOT require authentication
|
|
290
|
+
const publicRoutes = [
|
|
291
|
+
'/',
|
|
292
|
+
'/login',
|
|
293
|
+
'/api/health',
|
|
294
|
+
'/api/public/*', // Wildcard example
|
|
295
|
+
];
|
|
296
|
+
|
|
297
|
+
configurePublicRoutes(publicRoutes);
|
|
298
|
+
|
|
299
|
+
export const authOptions = createAuthOptions({
|
|
300
|
+
credentialsProvider: CredentialsProvider,
|
|
301
|
+
// Additional NextAuthOptions can be passed here
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
export { authOptions as GET, authOptions as POST } from './auth';
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### 2. Setup NextAuth API Route
|
|
308
|
+
|
|
309
|
+
**For Pages Router (`pages/api/auth/[...nextauth].ts`):**
|
|
310
|
+
|
|
311
|
+
```typescript
|
|
312
|
+
import NextAuth from 'next-auth';
|
|
313
|
+
import { authOptions } from '../../../src/lib/auth';
|
|
314
|
+
|
|
315
|
+
export default NextAuth(authOptions);
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
**For App Router (`app/api/auth/[...nextauth]/route.ts`):**
|
|
319
|
+
|
|
320
|
+
```typescript
|
|
321
|
+
export { GET, POST } from '../../../src/lib/auth';
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### 3. Implement Middleware
|
|
325
|
+
|
|
326
|
+
Create `middleware.ts` at project root:
|
|
327
|
+
|
|
328
|
+
```typescript
|
|
329
|
+
import { createMvpMiddleware } from '@payez/next-mvp';
|
|
330
|
+
|
|
331
|
+
export default createMvpMiddleware();
|
|
332
|
+
|
|
333
|
+
export const config = {
|
|
334
|
+
matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
|
|
335
|
+
};
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### 4. Use `fetchWithAuth` for Protected API Calls
|
|
339
|
+
|
|
340
|
+
```typescript
|
|
341
|
+
import { fetchWithAuth } from '@payez/next-mvp';
|
|
342
|
+
|
|
343
|
+
async function fetchData() {
|
|
344
|
+
try {
|
|
345
|
+
const response = await fetchWithAuth('/api/protected-data');
|
|
346
|
+
const data = await response.json();
|
|
347
|
+
console.log(data);
|
|
348
|
+
} catch (error) {
|
|
349
|
+
console.error('Failed to fetch protected data:', error);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### 5. Session Viability API Handler
|
|
355
|
+
|
|
356
|
+
**For Pages Router (`pages/api/session/viability.ts`):**
|
|
357
|
+
|
|
358
|
+
```typescript
|
|
359
|
+
import viabilityHandler from '@payez/next-mvp/api-handlers/session/viability';
|
|
360
|
+
|
|
361
|
+
export default viabilityHandler;
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
**For App Router (`app/api/session/viability/route.ts`):**
|
|
365
|
+
|
|
366
|
+
```typescript
|
|
367
|
+
export { default as GET } from '@payez/next-mvp/api-handlers/session/viability';
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
---
|
|
371
|
+
|
|
372
|
+
## Custom Theming
|
|
373
|
+
|
|
374
|
+
Customize branding and colors:
|
|
375
|
+
|
|
376
|
+
```typescript
|
|
377
|
+
// lib/mvp-theme-config.ts
|
|
378
|
+
import { ThemeConfig } from '@payez/next-mvp/theme';
|
|
379
|
+
|
|
380
|
+
const customTheme: ThemeConfig = {
|
|
381
|
+
branding: {
|
|
382
|
+
companyName: "Your Company",
|
|
383
|
+
logoUrl: "/logo.svg",
|
|
384
|
+
logoAlt: "Your Company Logo"
|
|
385
|
+
},
|
|
386
|
+
colors: {
|
|
387
|
+
primary: "#3b82f6", // Blue
|
|
388
|
+
primaryHover: "#2563eb",
|
|
389
|
+
secondary: "#10b981", // Green
|
|
390
|
+
danger: "#ef4444", // Red
|
|
391
|
+
text: "#1f2937",
|
|
392
|
+
textLight: "#6b7280",
|
|
393
|
+
background: "#ffffff",
|
|
394
|
+
backgroundAlt: "#f9fafb",
|
|
395
|
+
border: "#e5e7eb"
|
|
396
|
+
},
|
|
397
|
+
layout: {
|
|
398
|
+
maxWidth: "28rem", // max-w-md
|
|
399
|
+
padding: "1.5rem", // p-6
|
|
400
|
+
borderRadius: "0.5rem" // rounded-lg
|
|
401
|
+
}
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
export default customTheme;
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
Then use in your Providers:
|
|
408
|
+
|
|
409
|
+
```typescript
|
|
410
|
+
import customTheme from '@/lib/mvp-theme-config';
|
|
411
|
+
|
|
412
|
+
export function Providers({ children }: { children: React.ReactNode }) {
|
|
413
|
+
return (
|
|
414
|
+
<SessionProvider>
|
|
415
|
+
<ThemeProvider theme={customTheme}>
|
|
416
|
+
{children}
|
|
417
|
+
</ThemeProvider>
|
|
418
|
+
</SessionProvider>
|
|
419
|
+
);
|
|
420
|
+
}
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
## API Routes
|
|
426
|
+
|
|
427
|
+
Access pre-built API handlers:
|
|
428
|
+
|
|
429
|
+
```typescript
|
|
430
|
+
// Session validation
|
|
431
|
+
import { GET as validateSession } from '@payez/next-mvp/routes/auth/session';
|
|
432
|
+
|
|
433
|
+
// Token refresh
|
|
434
|
+
import { POST as refreshToken } from '@payez/next-mvp/routes/auth/refresh';
|
|
435
|
+
|
|
436
|
+
// Logout
|
|
437
|
+
import { POST as logout } from '@payez/next-mvp/routes/auth/logout';
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
## Environment Variables Reference
|
|
443
|
+
|
|
444
|
+
| Variable | Required | Description |
|
|
445
|
+
|----------|----------|-------------|
|
|
446
|
+
| `CLIENT_ID` | โ
Yes | Your PayEz IDP client ID (string slug, e.g., `payez_idp_admin_web`) |
|
|
447
|
+
| `IDP_URL` | โ
Yes | PayEz IDP base URL (e.g., `https://idp.payez.net` or `http://localhost:32785`) |
|
|
448
|
+
| `AUTH_TRUST_HOST` | โ
Yes | Must be `true` - NextAuth derives OAuth URLs from request headers |
|
|
449
|
+
| `NEXTAUTH_SECRET` | ๐ Broker | **Do NOT set** - fetched automatically from IDP at startup (see below) |
|
|
450
|
+
| `CLIENT_SECRET` | โ ๏ธ Legacy | Not needed with broker mode - IDP handles signing |
|
|
451
|
+
| `NEXT_PUBLIC_IDP_BASE_URL` | โ ๏ธ Optional | Public-facing IDP URL (for client-side redirects) |
|
|
452
|
+
| `REDIS_URL` | โ ๏ธ Optional | Redis connection string for session storage |
|
|
453
|
+
|
|
454
|
+
### NEXTAUTH_SECRET Broker Flow
|
|
455
|
+
|
|
456
|
+
**The MVP uses a "broker" pattern for NEXTAUTH_SECRET** - the IDP securely provides it at startup rather than storing it in env files.
|
|
457
|
+
|
|
458
|
+
```
|
|
459
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
460
|
+
โ App Startup (instrumentation.ts โ ensureInitialized) โ
|
|
461
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
462
|
+
โ
|
|
463
|
+
โผ
|
|
464
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
465
|
+
โ Is NEXTAUTH_SECRET set and non-empty? โ
|
|
466
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
467
|
+
โ โ
|
|
468
|
+
YES NO (recommended)
|
|
469
|
+
โ โ
|
|
470
|
+
โผ โผ
|
|
471
|
+
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
472
|
+
โ Use as-is โ โ Fetch from IDP (Broker Mode) โ
|
|
473
|
+
โ (override) โ โ 1. Sign client assertion โ
|
|
474
|
+
โ โ โ 2. POST to /next-auth/secret โ
|
|
475
|
+
โ โ โ 3. Set process.env at runtime โ
|
|
476
|
+
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
**Key points:**
|
|
480
|
+
- **Do NOT set `NEXTAUTH_SECRET` in `.env` files** - leave it undefined
|
|
481
|
+
- The IDP provides the secret securely at startup via client assertion
|
|
482
|
+
- Secret is cached for 5 minutes, then re-fetched if needed
|
|
483
|
+
- If you DO set it manually, that value takes precedence (useful for overrides)
|
|
484
|
+
- The broker needs `CLIENT_ID` and `IDP_URL` to fetch the secret
|
|
485
|
+
|
|
486
|
+
---
|
|
487
|
+
|
|
488
|
+
## Troubleshooting
|
|
489
|
+
|
|
490
|
+
### SessionProvider Error
|
|
491
|
+
|
|
492
|
+
If you see `useSession must be wrapped in a <SessionProvider />`:
|
|
493
|
+
|
|
494
|
+
1. Ensure `transpilePackages: ['@payez/next-mvp']` is in `next.config.ts`
|
|
495
|
+
2. Make sure all page components using PayEz components have `'use client'` directive
|
|
496
|
+
3. Verify your app is wrapped with `<Providers>` in `layout.tsx`
|
|
497
|
+
|
|
498
|
+
### Module Resolution Errors
|
|
499
|
+
|
|
500
|
+
If you get `Module not found` errors:
|
|
501
|
+
|
|
502
|
+
1. Clear Next.js cache: `rm -rf .next`
|
|
503
|
+
2. Reinstall dependencies: `npm install`
|
|
504
|
+
3. Restart dev server
|
|
505
|
+
|
|
506
|
+
### Authentication Not Working
|
|
507
|
+
|
|
508
|
+
1. Verify `CLIENT_ID` and `IDP_URL` are set correctly
|
|
509
|
+
2. Check `CLIENT_ID` matches your PayEz IDP configuration (use the slug, not numeric ID)
|
|
510
|
+
3. Verify IDP is running and reachable at `IDP_URL`
|
|
511
|
+
4. Check server logs for broker startup messages - look for "NEXTAUTH_SECRET Successfully Fetched from IDP"
|
|
512
|
+
5. If secret fetch fails, check IDP logs for client assertion errors
|
|
513
|
+
6. Check browser console for error messages
|
|
514
|
+
|
|
515
|
+
### NEXTAUTH_SECRET Issues
|
|
516
|
+
|
|
517
|
+
**"NEXTAUTH_SECRET not available" error:**
|
|
518
|
+
- This means the broker couldn't fetch the secret from IDP
|
|
519
|
+
- Check that `IDP_URL` is correct and IDP is running
|
|
520
|
+
- Verify `CLIENT_ID` is registered in the IDP
|
|
521
|
+
- Check network connectivity between your app and IDP
|
|
522
|
+
|
|
523
|
+
**Cookie cross-contamination (localhost development):**
|
|
524
|
+
- If running multiple apps on localhost (different ports), NextAuth cookies can conflict
|
|
525
|
+
- Clear `next-auth.*` cookies in browser, or use incognito
|
|
526
|
+
- Each app uses a unique cookie name based on CLIENT_ID to avoid conflicts
|
|
527
|
+
|
|
528
|
+
---
|
|
529
|
+
|
|
530
|
+
## Docker/CI Deployment (IMPORTANT)
|
|
531
|
+
|
|
532
|
+
When consuming `@payez/next-mvp` via a local `.tgz` file in Docker builds, you **must** use a local path reference.
|
|
533
|
+
|
|
534
|
+
### The Problem
|
|
535
|
+
|
|
536
|
+
If your `package.json` references the MVP like this:
|
|
537
|
+
```json
|
|
538
|
+
"@payez/next-mvp": "file:../PayEz-Next-MVP/packages/next-mvp/payez-next-mvp-2.6.50.tgz"
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
Docker builds will **fail** with:
|
|
542
|
+
```
|
|
543
|
+
npm error ENOENT: no such file or directory, open '/PayEz-Next-MVP/packages/next-mvp/payez-next-mvp-2.6.50.tgz'
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
The relative path `../` resolves incorrectly inside the Docker container's `/app` working directory.
|
|
547
|
+
|
|
548
|
+
### The Fix
|
|
549
|
+
|
|
550
|
+
1. **Copy the `.tgz` file into your project root:**
|
|
551
|
+
```bash
|
|
552
|
+
cp ../PayEz-Next-MVP/packages/next-mvp/payez-next-mvp-*.tgz ./
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
2. **Update `package.json` to use a local reference:**
|
|
556
|
+
```json
|
|
557
|
+
"@payez/next-mvp": "file:./payez-next-mvp-2.6.50.tgz"
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
3. **Run `npm install` to update `package-lock.json`**
|
|
561
|
+
|
|
562
|
+
4. **Ensure your Dockerfile copies the tgz:**
|
|
563
|
+
```dockerfile
|
|
564
|
+
COPY payez-next-mvp-*.tgz ./
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
### Quick Fix Script
|
|
568
|
+
|
|
569
|
+
Run this in your consuming project to fix the path:
|
|
570
|
+
```bash
|
|
571
|
+
# Copy latest tgz
|
|
572
|
+
cp ../PayEz-Next-MVP/packages/next-mvp/payez-next-mvp-*.tgz ./
|
|
573
|
+
|
|
574
|
+
# Update package.json path (adjust version as needed)
|
|
575
|
+
sed -i 's|file:../PayEz-Next-MVP/packages/next-mvp/|file:./|g' package.json
|
|
576
|
+
|
|
577
|
+
# Regenerate lockfile
|
|
578
|
+
npm install --legacy-peer-deps
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
### After MVP Version Updates
|
|
582
|
+
|
|
583
|
+
When you update the MVP package version, repeat steps 1-3 to copy the new `.tgz` and update references.
|
|
584
|
+
|
|
585
|
+
---
|
|
586
|
+
|
|
587
|
+
## Pre-Publishing Checklist (For Package Maintainers)
|
|
588
|
+
|
|
589
|
+
Before publishing this package to npm:
|
|
590
|
+
|
|
591
|
+
### โ
Code Quality
|
|
592
|
+
- [x] All `@/` path aliases converted to relative paths
|
|
593
|
+
- [x] TypeScript compiles without errors: `npm run build`
|
|
594
|
+
- [x] No hardcoded configuration values (use env variables)
|
|
595
|
+
- [ ] Unit tests pass (if implemented)
|
|
596
|
+
|
|
597
|
+
### ๐ฆ Package Configuration
|
|
598
|
+
|
|
599
|
+
**CRITICAL FIXES NEEDED:**
|
|
600
|
+
|
|
601
|
+
1. **Fix `main` field in package.json (Line 5):**
|
|
602
|
+
```json
|
|
603
|
+
"main": "dist/index.js", // NOT "src/index.ts"
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
2. **Remove unused `tsc-alias` from devDependencies (Line 542):**
|
|
607
|
+
```json
|
|
608
|
+
// DELETE this line:
|
|
609
|
+
"tsc-alias": "^1.8.16"
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
3. **Add package metadata:**
|
|
613
|
+
```json
|
|
614
|
+
{
|
|
615
|
+
"description": "PayEz IDP authentication package for Next.js with ready-to-use login, recovery, and profile pages",
|
|
616
|
+
"keywords": ["nextjs", "authentication", "next-auth", "payez", "idp", "oauth"],
|
|
617
|
+
"author": "PayEz Team",
|
|
618
|
+
"license": "MIT",
|
|
619
|
+
"repository": {
|
|
620
|
+
"type": "git",
|
|
621
|
+
"url": "https://github.com/your-org/PayEz-Next-MVP"
|
|
622
|
+
},
|
|
623
|
+
"homepage": "https://github.com/your-org/PayEz-Next-MVP#readme",
|
|
624
|
+
"bugs": {
|
|
625
|
+
"url": "https://github.com/your-org/PayEz-Next-MVP/issues"
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
```
|
|
629
|
+
|
|
630
|
+
### ๐ Documentation
|
|
631
|
+
- [x] README.md is complete and accurate
|
|
632
|
+
- [ ] CHANGELOG.md exists with version history
|
|
633
|
+
- [ ] LICENSE file exists
|
|
634
|
+
|
|
635
|
+
### ๐งช Testing
|
|
636
|
+
- [ ] Test fresh installation in new Next.js 14 project
|
|
637
|
+
- [ ] Test fresh installation in new Next.js 15 project
|
|
638
|
+
- [ ] Verify all exported modules work
|
|
639
|
+
- [ ] Test with React 18 and React 19
|
|
640
|
+
- [ ] Test package build: `npm pack --dry-run`
|
|
641
|
+
|
|
642
|
+
### ๐ Publishing Steps
|
|
643
|
+
|
|
644
|
+
```bash
|
|
645
|
+
# 1. Fix package.json issues (see above)
|
|
646
|
+
|
|
647
|
+
# 2. Login to npm
|
|
648
|
+
npm login
|
|
649
|
+
|
|
650
|
+
# 3. Build package
|
|
651
|
+
npm run build
|
|
652
|
+
|
|
653
|
+
# 4. Preview what will be published
|
|
654
|
+
npm pack --dry-run
|
|
655
|
+
|
|
656
|
+
# 5. Test the tarball locally
|
|
657
|
+
npm install ./payez-next-mvp-2.3.1.tgz
|
|
658
|
+
|
|
659
|
+
# 6. Bump version (patch/minor/major)
|
|
660
|
+
npm version patch # 2.3.1 -> 2.3.2
|
|
661
|
+
npm version minor # 2.3.1 -> 2.4.0
|
|
662
|
+
npm version major # 2.3.1 -> 3.0.0
|
|
663
|
+
|
|
664
|
+
# 7. Publish to npm
|
|
665
|
+
npm publish
|
|
666
|
+
|
|
667
|
+
# 8. Create git tag and push
|
|
668
|
+
git push origin main
|
|
669
|
+
git push origin --tags
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
### ๐ .npmignore
|
|
673
|
+
|
|
674
|
+
Create `.npmignore` to exclude unnecessary files:
|
|
675
|
+
|
|
676
|
+
```
|
|
677
|
+
src/
|
|
678
|
+
*.test.ts
|
|
679
|
+
*.test.tsx
|
|
680
|
+
tsconfig.json
|
|
681
|
+
.gitignore
|
|
682
|
+
.git
|
|
683
|
+
node_modules/
|
|
684
|
+
*.tgz
|
|
685
|
+
.env*
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
### ๐ Publish Configuration
|
|
689
|
+
|
|
690
|
+
Add to package.json:
|
|
691
|
+
|
|
692
|
+
```json
|
|
693
|
+
"publishConfig": {
|
|
694
|
+
"access": "public",
|
|
695
|
+
"registry": "https://registry.npmjs.org/"
|
|
696
|
+
}
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
---
|
|
700
|
+
|
|
701
|
+
## ๐ Complete Documentation
|
|
702
|
+
|
|
703
|
+
### Core Guides
|
|
704
|
+
|
|
705
|
+
- **[THEMING.md](./docs/THEMING.md)** - Complete guide to customizing auth components
|
|
706
|
+
- Theme structure and configuration
|
|
707
|
+
- Creating light/dark modes
|
|
708
|
+
- Component-specific customization
|
|
709
|
+
- Common theming issues and solutions
|
|
710
|
+
|
|
711
|
+
- **[CSS_VARIABLES_INTEGRATION.md](./docs/CSS_VARIABLES_INTEGRATION.md)** - CSS variable injection for MVP components
|
|
712
|
+
- Why CSS variables are needed
|
|
713
|
+
- How to inject variables in your app
|
|
714
|
+
- Color conversion utilities
|
|
715
|
+
- Debugging CSS variable issues
|
|
716
|
+
|
|
717
|
+
- **[THEME_EXAMPLES.md](./docs/THEME_EXAMPLES.md)** - Ready-to-use theme examples
|
|
718
|
+
- 7 pre-built professional themes
|
|
719
|
+
- Multi-brand theme support
|
|
720
|
+
- Dynamic light/dark mode
|
|
721
|
+
- Copy-paste theme configurations
|
|
722
|
+
|
|
723
|
+
### Topics Covered
|
|
724
|
+
|
|
725
|
+
#### Theming
|
|
726
|
+
- โ
Brand colors and logos
|
|
727
|
+
- โ
Light and dark modes
|
|
728
|
+
- โ
Font families and typography
|
|
729
|
+
- โ
Layout and spacing customization
|
|
730
|
+
- โ
Component-specific styling
|
|
731
|
+
- โ
Multi-tenant/white-label setups
|
|
732
|
+
- โ
Accessibility and contrast
|
|
733
|
+
|
|
734
|
+
#### CSS Variables
|
|
735
|
+
- โ
Understanding CSS custom properties
|
|
736
|
+
- โ
Manual variable injection
|
|
737
|
+
- โ
Color conversion (Tailwind โ hex)
|
|
738
|
+
- โ
Theme provider pattern
|
|
739
|
+
- โ
Dynamic theme switching
|
|
740
|
+
- โ
Debugging in DevTools
|
|
741
|
+
|
|
742
|
+
#### Examples
|
|
743
|
+
- โ
Corporate themes
|
|
744
|
+
- โ
SaaS themes
|
|
745
|
+
- โ
Creative/design themes
|
|
746
|
+
- โ
Accessible high-contrast themes
|
|
747
|
+
- โ
Multi-brand configurations
|
|
748
|
+
- โ
Gradient backgrounds
|
|
749
|
+
- โ
Custom branding
|
|
750
|
+
|
|
751
|
+
### Quick Links
|
|
752
|
+
|
|
753
|
+
**Getting Started with Themes:**
|
|
754
|
+
1. Start with [THEMING.md](./docs/THEMING.md) - Quick Start section
|
|
755
|
+
2. Copy a theme from [THEME_EXAMPLES.md](./docs/THEME_EXAMPLES.md)
|
|
756
|
+
3. Follow integration pattern in [CSS_VARIABLES_INTEGRATION.md](./docs/CSS_VARIABLES_INTEGRATION.md)
|
|
757
|
+
|
|
758
|
+
**For Specific Tasks:**
|
|
759
|
+
- Want to change colors? โ [THEMING.md - Creating a Theme](./docs/THEMING.md#creating-a-theme)
|
|
760
|
+
- Pages rendering white/no color? โ [CSS_VARIABLES_INTEGRATION.md - Troubleshooting](./docs/CSS_VARIABLES_INTEGRATION.md#troubleshooting)
|
|
761
|
+
- Need a complete example? โ [THEME_EXAMPLES.md](./docs/THEME_EXAMPLES.md)
|
|
762
|
+
- Debugging styling issues? โ [THEMING.md - Common Issues](./docs/THEMING.md#common-issues--solutions)
|
|
763
|
+
|
|
764
|
+
---
|
|
765
|
+
|
|
766
|
+
## License
|
|
767
|
+
|
|
768
|
+
MIT
|
|
769
|
+
|
|
770
|
+
## Support
|
|
771
|
+
|
|
772
|
+
For issues and questions:
|
|
773
|
+
- GitHub Issues: https://github.com/your-org/PayEz-Next-MVP/issues
|
|
774
|
+
- Documentation: https://docs.payez.net
|
|
775
|
+
|
|
776
|
+
## Contributing
|
|
777
|
+
|
|
778
|
+
Contributions welcome! Please read our contributing guidelines first.
|
|
779
|
+
|
|
780
|
+
---
|
|
781
|
+
|
|
782
|
+
Made with โค๏ธ by the PayEz Team
|