@payez/next-mvp 3.9.1 → 4.0.1

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.
Files changed (526) hide show
  1. package/package.json +6 -18
  2. package/src/api/auth-handler.ts +550 -549
  3. package/src/api-handlers/account/change-password.ts +5 -8
  4. package/src/api-handlers/admin/analytics.ts +4 -6
  5. package/src/api-handlers/admin/audit.ts +5 -7
  6. package/src/api-handlers/admin/index.ts +1 -2
  7. package/src/api-handlers/admin/redis-sessions.ts +6 -8
  8. package/src/api-handlers/admin/sessions.ts +5 -7
  9. package/src/api-handlers/admin/site-logs.ts +8 -10
  10. package/src/api-handlers/admin/stats.ts +4 -6
  11. package/src/api-handlers/admin/users.ts +5 -7
  12. package/src/api-handlers/admin/vibe-data.ts +10 -12
  13. package/src/api-handlers/auth/refresh.ts +5 -7
  14. package/src/api-handlers/auth/signout.ts +5 -6
  15. package/src/api-handlers/auth/status.ts +4 -7
  16. package/src/api-handlers/auth/update-session.ts +123 -125
  17. package/src/api-handlers/auth/verify-code.ts +9 -13
  18. package/src/api-handlers/session/viability.ts +10 -47
  19. package/src/api-handlers/test/force-expire.ts +4 -11
  20. package/src/auth/auth-decision.ts +1 -1
  21. package/src/auth/better-auth.ts +138 -141
  22. package/src/auth/route-config.ts +219 -219
  23. package/src/auth/utils/token-utils.ts +0 -1
  24. package/src/client/AuthContext.tsx +6 -2
  25. package/src/client/fetch-with-auth.ts +47 -47
  26. package/src/components/SessionSync.tsx +6 -5
  27. package/src/components/account/MobileNavDrawer.tsx +3 -3
  28. package/src/components/account/UserAvatarMenu.tsx +6 -3
  29. package/src/components/admin/VibeAdminLayout.tsx +4 -2
  30. package/src/config/logger.ts +1 -1
  31. package/src/hooks/useAuth.ts +117 -115
  32. package/src/hooks/useAuthSettings.ts +2 -2
  33. package/src/hooks/useAvailableProviders.ts +9 -5
  34. package/src/hooks/useSessionExpiration.ts +101 -102
  35. package/src/hooks/useViabilitySession.ts +336 -335
  36. package/src/index.ts +60 -63
  37. package/src/lib/api-handler.ts +0 -1
  38. package/src/lib/app-slug.ts +6 -6
  39. package/src/lib/standardized-client-api.ts +901 -895
  40. package/src/lib/startup-init.ts +243 -247
  41. package/src/lib/test-aware-get-token.ts +22 -12
  42. package/src/lib/token-lifecycle.ts +12 -53
  43. package/src/pages/admin-login/page.tsx +9 -17
  44. package/src/pages/client-admin/ClientSiteAdminPage.tsx +4 -2
  45. package/src/pages/login/page.tsx +21 -28
  46. package/src/pages/showcase/ShowcasePage.tsx +4 -2
  47. package/src/pages/test-env/EmergencyLogoutPage.tsx +7 -6
  48. package/src/pages/test-env/JwtInspectPage.tsx +5 -3
  49. package/src/pages/test-env/RefreshTokenPage.tsx +157 -155
  50. package/src/pages/test-env/TestEnvPage.tsx +4 -2
  51. package/src/pages/verify-code/page.tsx +10 -6
  52. package/src/routes/auth/logout.ts +7 -25
  53. package/src/routes/auth/nextauth.ts +45 -71
  54. package/src/routes/auth/session.ts +25 -50
  55. package/src/routes/auth/viability.ts +7 -19
  56. package/src/server/auth.ts +60 -0
  57. package/src/stores/authStore.ts +1899 -1904
  58. package/src/utils/logout.ts +30 -30
  59. package/dist/api/auth-handler.d.ts +0 -67
  60. package/dist/api/auth-handler.js +0 -397
  61. package/dist/api/index.d.ts +0 -10
  62. package/dist/api/index.js +0 -19
  63. package/dist/api-handlers/account/change-password.d.ts +0 -9
  64. package/dist/api-handlers/account/change-password.js +0 -112
  65. package/dist/api-handlers/account/masked-info.d.ts +0 -2
  66. package/dist/api-handlers/account/masked-info.js +0 -41
  67. package/dist/api-handlers/account/profile.d.ts +0 -3
  68. package/dist/api-handlers/account/profile.js +0 -63
  69. package/dist/api-handlers/account/recovery/initiate.d.ts +0 -2
  70. package/dist/api-handlers/account/recovery/initiate.js +0 -26
  71. package/dist/api-handlers/account/recovery/send-code.d.ts +0 -2
  72. package/dist/api-handlers/account/recovery/send-code.js +0 -28
  73. package/dist/api-handlers/account/recovery/verify-code.d.ts +0 -2
  74. package/dist/api-handlers/account/recovery/verify-code.js +0 -28
  75. package/dist/api-handlers/account/reset-password.d.ts +0 -2
  76. package/dist/api-handlers/account/reset-password.js +0 -26
  77. package/dist/api-handlers/account/send-code.d.ts +0 -24
  78. package/dist/api-handlers/account/send-code.js +0 -60
  79. package/dist/api-handlers/account/update-phone.d.ts +0 -27
  80. package/dist/api-handlers/account/update-phone.js +0 -64
  81. package/dist/api-handlers/account/validate-password.d.ts +0 -17
  82. package/dist/api-handlers/account/validate-password.js +0 -81
  83. package/dist/api-handlers/account/verify-email.d.ts +0 -26
  84. package/dist/api-handlers/account/verify-email.js +0 -106
  85. package/dist/api-handlers/account/verify-sms.d.ts +0 -26
  86. package/dist/api-handlers/account/verify-sms.js +0 -106
  87. package/dist/api-handlers/admin/analytics.d.ts +0 -20
  88. package/dist/api-handlers/admin/analytics.js +0 -379
  89. package/dist/api-handlers/admin/audit.d.ts +0 -20
  90. package/dist/api-handlers/admin/audit.js +0 -214
  91. package/dist/api-handlers/admin/index.d.ts +0 -22
  92. package/dist/api-handlers/admin/index.js +0 -43
  93. package/dist/api-handlers/admin/redis-sessions.d.ts +0 -36
  94. package/dist/api-handlers/admin/redis-sessions.js +0 -204
  95. package/dist/api-handlers/admin/sessions.d.ts +0 -21
  96. package/dist/api-handlers/admin/sessions.js +0 -284
  97. package/dist/api-handlers/admin/site-logs.d.ts +0 -46
  98. package/dist/api-handlers/admin/site-logs.js +0 -318
  99. package/dist/api-handlers/admin/stats.d.ts +0 -21
  100. package/dist/api-handlers/admin/stats.js +0 -240
  101. package/dist/api-handlers/admin/users.d.ts +0 -20
  102. package/dist/api-handlers/admin/users.js +0 -222
  103. package/dist/api-handlers/admin/vibe-data.d.ts +0 -80
  104. package/dist/api-handlers/admin/vibe-data.js +0 -268
  105. package/dist/api-handlers/anon/preferences.d.ts +0 -37
  106. package/dist/api-handlers/anon/preferences.js +0 -96
  107. package/dist/api-handlers/auth/jwks.d.ts +0 -2
  108. package/dist/api-handlers/auth/jwks.js +0 -24
  109. package/dist/api-handlers/auth/login.d.ts +0 -42
  110. package/dist/api-handlers/auth/login.js +0 -178
  111. package/dist/api-handlers/auth/refresh.d.ts +0 -74
  112. package/dist/api-handlers/auth/refresh.js +0 -635
  113. package/dist/api-handlers/auth/signout.d.ts +0 -37
  114. package/dist/api-handlers/auth/signout.js +0 -187
  115. package/dist/api-handlers/auth/status.d.ts +0 -8
  116. package/dist/api-handlers/auth/status.js +0 -26
  117. package/dist/api-handlers/auth/update-session.d.ts +0 -37
  118. package/dist/api-handlers/auth/update-session.js +0 -95
  119. package/dist/api-handlers/auth/validate.d.ts +0 -6
  120. package/dist/api-handlers/auth/validate.js +0 -43
  121. package/dist/api-handlers/auth/verify-code.d.ts +0 -43
  122. package/dist/api-handlers/auth/verify-code.js +0 -94
  123. package/dist/api-handlers/session/refresh-viability.d.ts +0 -14
  124. package/dist/api-handlers/session/refresh-viability.js +0 -39
  125. package/dist/api-handlers/session/viability.d.ts +0 -13
  126. package/dist/api-handlers/session/viability.js +0 -146
  127. package/dist/api-handlers/test/force-expire.d.ts +0 -23
  128. package/dist/api-handlers/test/force-expire.js +0 -65
  129. package/dist/auth/auth-decision.d.ts +0 -39
  130. package/dist/auth/auth-decision.js +0 -182
  131. package/dist/auth/auth-options.d.ts +0 -57
  132. package/dist/auth/auth-options.js +0 -213
  133. package/dist/auth/better-auth.d.ts +0 -82
  134. package/dist/auth/better-auth.js +0 -122
  135. package/dist/auth/callbacks/index.d.ts +0 -6
  136. package/dist/auth/callbacks/index.js +0 -12
  137. package/dist/auth/callbacks/jwt.d.ts +0 -45
  138. package/dist/auth/callbacks/jwt.js +0 -305
  139. package/dist/auth/callbacks/session.d.ts +0 -60
  140. package/dist/auth/callbacks/session.js +0 -170
  141. package/dist/auth/callbacks/signin.d.ts +0 -23
  142. package/dist/auth/callbacks/signin.js +0 -44
  143. package/dist/auth/events/index.d.ts +0 -4
  144. package/dist/auth/events/index.js +0 -8
  145. package/dist/auth/events/signout.d.ts +0 -17
  146. package/dist/auth/events/signout.js +0 -32
  147. package/dist/auth/providers/credentials.d.ts +0 -32
  148. package/dist/auth/providers/credentials.js +0 -223
  149. package/dist/auth/providers/index.d.ts +0 -5
  150. package/dist/auth/providers/index.js +0 -21
  151. package/dist/auth/providers/oauth.d.ts +0 -26
  152. package/dist/auth/providers/oauth.js +0 -105
  153. package/dist/auth/route-config.d.ts +0 -66
  154. package/dist/auth/route-config.js +0 -190
  155. package/dist/auth/types/auth-types.d.ts +0 -417
  156. package/dist/auth/types/auth-types.js +0 -53
  157. package/dist/auth/types/index.d.ts +0 -6
  158. package/dist/auth/types/index.js +0 -22
  159. package/dist/auth/unauthenticated-routes.d.ts +0 -1
  160. package/dist/auth/unauthenticated-routes.js +0 -19
  161. package/dist/auth/utils/idp-client.d.ts +0 -94
  162. package/dist/auth/utils/idp-client.js +0 -384
  163. package/dist/auth/utils/index.d.ts +0 -5
  164. package/dist/auth/utils/index.js +0 -21
  165. package/dist/auth/utils/token-utils.d.ts +0 -84
  166. package/dist/auth/utils/token-utils.js +0 -219
  167. package/dist/client/AuthContext.d.ts +0 -19
  168. package/dist/client/AuthContext.js +0 -112
  169. package/dist/client/better-auth-client.d.ts +0 -1020
  170. package/dist/client/better-auth-client.js +0 -68
  171. package/dist/client/fetch-with-auth.d.ts +0 -11
  172. package/dist/client/fetch-with-auth.js +0 -44
  173. package/dist/client/fetchWithSession.d.ts +0 -3
  174. package/dist/client/fetchWithSession.js +0 -24
  175. package/dist/client/index.d.ts +0 -9
  176. package/dist/client/index.js +0 -20
  177. package/dist/client/useAnonSession.d.ts +0 -36
  178. package/dist/client/useAnonSession.js +0 -99
  179. package/dist/components/SessionSync.d.ts +0 -13
  180. package/dist/components/SessionSync.js +0 -119
  181. package/dist/components/SignalRHealthCheck.d.ts +0 -10
  182. package/dist/components/SignalRHealthCheck.js +0 -97
  183. package/dist/components/account/MobileNavDrawer.d.ts +0 -32
  184. package/dist/components/account/MobileNavDrawer.js +0 -81
  185. package/dist/components/account/UserAvatarMenu.d.ts +0 -20
  186. package/dist/components/account/UserAvatarMenu.js +0 -88
  187. package/dist/components/account/index.d.ts +0 -9
  188. package/dist/components/account/index.js +0 -13
  189. package/dist/components/admin/AlertSettingsTab.d.ts +0 -48
  190. package/dist/components/admin/AlertSettingsTab.js +0 -351
  191. package/dist/components/admin/AnalyticsTab.d.ts +0 -22
  192. package/dist/components/admin/AnalyticsTab.js +0 -167
  193. package/dist/components/admin/DataBrowserTab.d.ts +0 -19
  194. package/dist/components/admin/DataBrowserTab.js +0 -252
  195. package/dist/components/admin/LoggingSettingsTab.d.ts +0 -73
  196. package/dist/components/admin/LoggingSettingsTab.js +0 -339
  197. package/dist/components/admin/SessionsTab.d.ts +0 -37
  198. package/dist/components/admin/SessionsTab.js +0 -165
  199. package/dist/components/admin/StatsTab.d.ts +0 -53
  200. package/dist/components/admin/StatsTab.js +0 -161
  201. package/dist/components/admin/VibeAdminContext.d.ts +0 -32
  202. package/dist/components/admin/VibeAdminContext.js +0 -38
  203. package/dist/components/admin/VibeAdminLayout.d.ts +0 -11
  204. package/dist/components/admin/VibeAdminLayout.js +0 -69
  205. package/dist/components/admin/index.d.ts +0 -29
  206. package/dist/components/admin/index.js +0 -44
  207. package/dist/components/auth/FederatedAuthSection.d.ts +0 -8
  208. package/dist/components/auth/FederatedAuthSection.js +0 -45
  209. package/dist/components/auth/ModeAwareLoginPage.d.ts +0 -10
  210. package/dist/components/auth/ModeAwareLoginPage.js +0 -42
  211. package/dist/components/auth/ModeAwareSignupPage.d.ts +0 -9
  212. package/dist/components/auth/ModeAwareSignupPage.js +0 -78
  213. package/dist/components/auth/TraditionalAuthSection.d.ts +0 -14
  214. package/dist/components/auth/TraditionalAuthSection.js +0 -20
  215. package/dist/components/recovery/CompleteStep.d.ts +0 -5
  216. package/dist/components/recovery/CompleteStep.js +0 -8
  217. package/dist/components/recovery/InitiateRecoveryStep.d.ts +0 -8
  218. package/dist/components/recovery/InitiateRecoveryStep.js +0 -20
  219. package/dist/components/recovery/SelectMethodStep.d.ts +0 -8
  220. package/dist/components/recovery/SelectMethodStep.js +0 -8
  221. package/dist/components/recovery/SetPasswordStep.d.ts +0 -6
  222. package/dist/components/recovery/SetPasswordStep.js +0 -20
  223. package/dist/components/recovery/VerifyCodeStep.d.ts +0 -10
  224. package/dist/components/recovery/VerifyCodeStep.js +0 -24
  225. package/dist/components/reserved/ReservedRecoveryWarning.d.ts +0 -38
  226. package/dist/components/reserved/ReservedRecoveryWarning.js +0 -92
  227. package/dist/components/reserved/ReservedStatusBox.d.ts +0 -30
  228. package/dist/components/reserved/ReservedStatusBox.js +0 -71
  229. package/dist/components/ui/BetaBadge.d.ts +0 -29
  230. package/dist/components/ui/BetaBadge.js +0 -38
  231. package/dist/components/ui/Footer.d.ts +0 -37
  232. package/dist/components/ui/Footer.js +0 -41
  233. package/dist/config/env.d.ts +0 -66
  234. package/dist/config/env.js +0 -57
  235. package/dist/config/logger.d.ts +0 -57
  236. package/dist/config/logger.js +0 -73
  237. package/dist/config/logging-config.d.ts +0 -30
  238. package/dist/config/logging-config.js +0 -122
  239. package/dist/config/unauthenticated-routes.d.ts +0 -17
  240. package/dist/config/unauthenticated-routes.js +0 -24
  241. package/dist/config/vibe-log-transport.d.ts +0 -81
  242. package/dist/config/vibe-log-transport.js +0 -212
  243. package/dist/edge/internal-api-url.d.ts +0 -53
  244. package/dist/edge/internal-api-url.js +0 -63
  245. package/dist/edge/middleware.d.ts +0 -14
  246. package/dist/edge/middleware.js +0 -32
  247. package/dist/hooks/useAuth.d.ts +0 -23
  248. package/dist/hooks/useAuth.js +0 -81
  249. package/dist/hooks/useAuthSettings.d.ts +0 -59
  250. package/dist/hooks/useAuthSettings.js +0 -93
  251. package/dist/hooks/useAvailableProviders.d.ts +0 -45
  252. package/dist/hooks/useAvailableProviders.js +0 -108
  253. package/dist/hooks/usePasswordValidation.d.ts +0 -27
  254. package/dist/hooks/usePasswordValidation.js +0 -102
  255. package/dist/hooks/useProfile.d.ts +0 -15
  256. package/dist/hooks/useProfile.js +0 -59
  257. package/dist/hooks/usePublicAuthSettings.d.ts +0 -56
  258. package/dist/hooks/usePublicAuthSettings.js +0 -131
  259. package/dist/hooks/useSessionExpiration.d.ts +0 -57
  260. package/dist/hooks/useSessionExpiration.js +0 -72
  261. package/dist/hooks/useViabilitySession.d.ts +0 -75
  262. package/dist/hooks/useViabilitySession.js +0 -268
  263. package/dist/index.d.ts +0 -12
  264. package/dist/index.js +0 -55
  265. package/dist/lib/anon-session.d.ts +0 -74
  266. package/dist/lib/anon-session.js +0 -169
  267. package/dist/lib/api-handler.d.ts +0 -123
  268. package/dist/lib/api-handler.js +0 -478
  269. package/dist/lib/app-slug.d.ts +0 -95
  270. package/dist/lib/app-slug.js +0 -172
  271. package/dist/lib/demo-mode.d.ts +0 -6
  272. package/dist/lib/demo-mode.js +0 -16
  273. package/dist/lib/geolocation.d.ts +0 -64
  274. package/dist/lib/geolocation.js +0 -235
  275. package/dist/lib/idp-client-config.d.ts +0 -75
  276. package/dist/lib/idp-client-config.js +0 -425
  277. package/dist/lib/idp-fetch.d.ts +0 -14
  278. package/dist/lib/idp-fetch.js +0 -91
  279. package/dist/lib/internal-api.d.ts +0 -87
  280. package/dist/lib/internal-api.js +0 -122
  281. package/dist/lib/jwt-decode-client.d.ts +0 -10
  282. package/dist/lib/jwt-decode-client.js +0 -46
  283. package/dist/lib/jwt-decode.d.ts +0 -48
  284. package/dist/lib/jwt-decode.js +0 -57
  285. package/dist/lib/nextauth-secret.d.ts +0 -10
  286. package/dist/lib/nextauth-secret.js +0 -100
  287. package/dist/lib/rate-limit-service.d.ts +0 -23
  288. package/dist/lib/rate-limit-service.js +0 -6
  289. package/dist/lib/redis.d.ts +0 -5
  290. package/dist/lib/redis.js +0 -28
  291. package/dist/lib/refresh-token-validator.d.ts +0 -13
  292. package/dist/lib/refresh-token-validator.js +0 -117
  293. package/dist/lib/roles.d.ts +0 -145
  294. package/dist/lib/roles.js +0 -168
  295. package/dist/lib/secret-validation.d.ts +0 -4
  296. package/dist/lib/secret-validation.js +0 -14
  297. package/dist/lib/session-store.d.ts +0 -170
  298. package/dist/lib/session-store.js +0 -545
  299. package/dist/lib/session.d.ts +0 -21
  300. package/dist/lib/session.js +0 -26
  301. package/dist/lib/site-logger.d.ts +0 -214
  302. package/dist/lib/site-logger.js +0 -210
  303. package/dist/lib/standardized-client-api.d.ts +0 -161
  304. package/dist/lib/standardized-client-api.js +0 -786
  305. package/dist/lib/startup-init.d.ts +0 -40
  306. package/dist/lib/startup-init.js +0 -261
  307. package/dist/lib/test-aware-get-token.d.ts +0 -2
  308. package/dist/lib/test-aware-get-token.js +0 -81
  309. package/dist/lib/token-expiry.d.ts +0 -14
  310. package/dist/lib/token-expiry.js +0 -39
  311. package/dist/lib/token-lifecycle.d.ts +0 -52
  312. package/dist/lib/token-lifecycle.js +0 -398
  313. package/dist/lib/types/api-responses.d.ts +0 -128
  314. package/dist/lib/types/api-responses.js +0 -171
  315. package/dist/lib/user-agent-parser.d.ts +0 -50
  316. package/dist/lib/user-agent-parser.js +0 -220
  317. package/dist/logging/api/admin-analytics.d.ts +0 -3
  318. package/dist/logging/api/admin-analytics.js +0 -45
  319. package/dist/logging/api/audit-log.d.ts +0 -3
  320. package/dist/logging/api/audit-log.js +0 -52
  321. package/dist/logging/components/AdminAnalyticsLayout.d.ts +0 -10
  322. package/dist/logging/components/AdminAnalyticsLayout.js +0 -11
  323. package/dist/logging/components/AuditLogViewer.d.ts +0 -7
  324. package/dist/logging/components/AuditLogViewer.js +0 -51
  325. package/dist/logging/components/ErrorMetricsCard.d.ts +0 -7
  326. package/dist/logging/components/ErrorMetricsCard.js +0 -16
  327. package/dist/logging/components/HealthMetricsCard.d.ts +0 -7
  328. package/dist/logging/components/HealthMetricsCard.js +0 -19
  329. package/dist/logging/hooks/useAdminAnalytics.d.ts +0 -24
  330. package/dist/logging/hooks/useAdminAnalytics.js +0 -22
  331. package/dist/logging/hooks/useAuditLog.d.ts +0 -6
  332. package/dist/logging/hooks/useAuditLog.js +0 -25
  333. package/dist/logging/hooks/useErrorMetrics.d.ts +0 -6
  334. package/dist/logging/hooks/useErrorMetrics.js +0 -38
  335. package/dist/logging/hooks/useHealthMetrics.d.ts +0 -6
  336. package/dist/logging/hooks/useHealthMetrics.js +0 -41
  337. package/dist/logging/index.d.ts +0 -11
  338. package/dist/logging/index.js +0 -40
  339. package/dist/logging/types/analytics.d.ts +0 -68
  340. package/dist/logging/types/analytics.js +0 -3
  341. package/dist/logging/types/audit.d.ts +0 -29
  342. package/dist/logging/types/audit.js +0 -2
  343. package/dist/logging/types/index.d.ts +0 -2
  344. package/dist/logging/types/index.js +0 -19
  345. package/dist/middleware/auth-decision.d.ts +0 -33
  346. package/dist/middleware/auth-decision.js +0 -65
  347. package/dist/middleware/create-middleware.d.ts +0 -102
  348. package/dist/middleware/create-middleware.js +0 -469
  349. package/dist/middleware/rbac-check.d.ts +0 -51
  350. package/dist/middleware/rbac-check.js +0 -219
  351. package/dist/middleware/twofa-presets.d.ts +0 -134
  352. package/dist/middleware/twofa-presets.js +0 -175
  353. package/dist/models/DecodedAccessToken.d.ts +0 -17
  354. package/dist/models/DecodedAccessToken.js +0 -2
  355. package/dist/models/SessionModel.d.ts +0 -122
  356. package/dist/models/SessionModel.js +0 -136
  357. package/dist/pages/admin-login/page.d.ts +0 -31
  358. package/dist/pages/admin-login/page.js +0 -83
  359. package/dist/pages/admin-page-permissions/PagePermissionsAdminPage.d.ts +0 -18
  360. package/dist/pages/admin-page-permissions/PagePermissionsAdminPage.js +0 -276
  361. package/dist/pages/admin-page-permissions/index.d.ts +0 -6
  362. package/dist/pages/admin-page-permissions/index.js +0 -13
  363. package/dist/pages/admin-roles/RolesAdminPage.d.ts +0 -16
  364. package/dist/pages/admin-roles/RolesAdminPage.js +0 -261
  365. package/dist/pages/admin-roles/index.d.ts +0 -8
  366. package/dist/pages/admin-roles/index.js +0 -15
  367. package/dist/pages/admin-roles/modals.d.ts +0 -72
  368. package/dist/pages/admin-roles/modals.js +0 -154
  369. package/dist/pages/client-admin/ClientSiteAdminPage.d.ts +0 -79
  370. package/dist/pages/client-admin/ClientSiteAdminPage.js +0 -177
  371. package/dist/pages/client-admin/index.d.ts +0 -32
  372. package/dist/pages/client-admin/index.js +0 -37
  373. package/dist/pages/coming-soon/page.d.ts +0 -8
  374. package/dist/pages/coming-soon/page.js +0 -28
  375. package/dist/pages/login/page.d.ts +0 -22
  376. package/dist/pages/login/page.js +0 -239
  377. package/dist/pages/profile/EnhancedProfilePage.d.ts +0 -13
  378. package/dist/pages/profile/EnhancedProfilePage.js +0 -150
  379. package/dist/pages/profile/index.d.ts +0 -8
  380. package/dist/pages/profile/index.js +0 -16
  381. package/dist/pages/profile/page.d.ts +0 -19
  382. package/dist/pages/profile/page.js +0 -47
  383. package/dist/pages/profile/profile-patch.d.ts +0 -1
  384. package/dist/pages/profile/profile-patch.js +0 -281
  385. package/dist/pages/recovery/page.d.ts +0 -1
  386. package/dist/pages/recovery/page.js +0 -142
  387. package/dist/pages/roles/MyRolesPage.d.ts +0 -24
  388. package/dist/pages/roles/MyRolesPage.js +0 -71
  389. package/dist/pages/roles/components.d.ts +0 -63
  390. package/dist/pages/roles/components.js +0 -108
  391. package/dist/pages/roles/index.d.ts +0 -8
  392. package/dist/pages/roles/index.js +0 -19
  393. package/dist/pages/security/EnhancedSecurityPage.d.ts +0 -14
  394. package/dist/pages/security/EnhancedSecurityPage.js +0 -248
  395. package/dist/pages/security/index.d.ts +0 -8
  396. package/dist/pages/security/index.js +0 -16
  397. package/dist/pages/security/page.d.ts +0 -21
  398. package/dist/pages/security/page.js +0 -212
  399. package/dist/pages/security/security-patch.d.ts +0 -1
  400. package/dist/pages/security/security-patch.js +0 -302
  401. package/dist/pages/settings/EnhancedSettingsPage.d.ts +0 -46
  402. package/dist/pages/settings/EnhancedSettingsPage.js +0 -231
  403. package/dist/pages/settings/index.d.ts +0 -8
  404. package/dist/pages/settings/index.js +0 -16
  405. package/dist/pages/settings/page.d.ts +0 -7
  406. package/dist/pages/settings/page.js +0 -26
  407. package/dist/pages/showcase/ShowcasePage.d.ts +0 -13
  408. package/dist/pages/showcase/ShowcasePage.js +0 -140
  409. package/dist/pages/showcase/index.d.ts +0 -12
  410. package/dist/pages/showcase/index.js +0 -17
  411. package/dist/pages/test-env/EmergencyLogoutPage.d.ts +0 -14
  412. package/dist/pages/test-env/EmergencyLogoutPage.js +0 -98
  413. package/dist/pages/test-env/JwtInspectPage.d.ts +0 -14
  414. package/dist/pages/test-env/JwtInspectPage.js +0 -114
  415. package/dist/pages/test-env/RefreshTokenPage.d.ts +0 -15
  416. package/dist/pages/test-env/RefreshTokenPage.js +0 -91
  417. package/dist/pages/test-env/TestEnvPage.d.ts +0 -13
  418. package/dist/pages/test-env/TestEnvPage.js +0 -49
  419. package/dist/pages/test-env/index.d.ts +0 -24
  420. package/dist/pages/test-env/index.js +0 -32
  421. package/dist/pages/verify-code/page.d.ts +0 -30
  422. package/dist/pages/verify-code/page.js +0 -408
  423. package/dist/routes/account/index.d.ts +0 -28
  424. package/dist/routes/account/index.js +0 -71
  425. package/dist/routes/account/masked-info.d.ts +0 -33
  426. package/dist/routes/account/masked-info.js +0 -39
  427. package/dist/routes/account/send-code.d.ts +0 -37
  428. package/dist/routes/account/send-code.js +0 -42
  429. package/dist/routes/account/update-phone.d.ts +0 -13
  430. package/dist/routes/account/update-phone.js +0 -17
  431. package/dist/routes/account/verify-email.d.ts +0 -38
  432. package/dist/routes/account/verify-email.js +0 -43
  433. package/dist/routes/account/verify-sms.d.ts +0 -38
  434. package/dist/routes/account/verify-sms.js +0 -43
  435. package/dist/routes/auth/index.d.ts +0 -19
  436. package/dist/routes/auth/index.js +0 -64
  437. package/dist/routes/auth/logout.d.ts +0 -31
  438. package/dist/routes/auth/logout.js +0 -113
  439. package/dist/routes/auth/nextauth.d.ts +0 -19
  440. package/dist/routes/auth/nextauth.js +0 -72
  441. package/dist/routes/auth/refresh.d.ts +0 -30
  442. package/dist/routes/auth/refresh.js +0 -51
  443. package/dist/routes/auth/session.d.ts +0 -43
  444. package/dist/routes/auth/session.js +0 -179
  445. package/dist/routes/auth/settings.d.ts +0 -25
  446. package/dist/routes/auth/settings.js +0 -55
  447. package/dist/routes/auth/viability.d.ts +0 -52
  448. package/dist/routes/auth/viability.js +0 -201
  449. package/dist/routes/index.d.ts +0 -12
  450. package/dist/routes/index.js +0 -54
  451. package/dist/routes/session/index.d.ts +0 -6
  452. package/dist/routes/session/index.js +0 -10
  453. package/dist/routes/session/refresh-viability.d.ts +0 -16
  454. package/dist/routes/session/refresh-viability.js +0 -20
  455. package/dist/server/auth-guard.d.ts +0 -46
  456. package/dist/server/auth-guard.js +0 -128
  457. package/dist/server/decode-session.d.ts +0 -30
  458. package/dist/server/decode-session.js +0 -78
  459. package/dist/server/slim-middleware.d.ts +0 -23
  460. package/dist/server/slim-middleware.js +0 -89
  461. package/dist/server/with-auth.d.ts +0 -33
  462. package/dist/server/with-auth.js +0 -59
  463. package/dist/services/signalrActivityService.d.ts +0 -44
  464. package/dist/services/signalrActivityService.js +0 -257
  465. package/dist/stores/authStore.d.ts +0 -154
  466. package/dist/stores/authStore.js +0 -1531
  467. package/dist/theme/ThemeProvider.d.ts +0 -14
  468. package/dist/theme/ThemeProvider.js +0 -28
  469. package/dist/theme/default.d.ts +0 -8
  470. package/dist/theme/default.js +0 -33
  471. package/dist/theme/index.d.ts +0 -15
  472. package/dist/theme/index.js +0 -25
  473. package/dist/theme/types.d.ts +0 -56
  474. package/dist/theme/types.js +0 -8
  475. package/dist/theme/useTheme.d.ts +0 -60
  476. package/dist/theme/useTheme.js +0 -63
  477. package/dist/theme/utils.d.ts +0 -13
  478. package/dist/theme/utils.js +0 -39
  479. package/dist/types/api.d.ts +0 -134
  480. package/dist/types/api.js +0 -44
  481. package/dist/types/auth.d.ts +0 -19
  482. package/dist/types/auth.js +0 -2
  483. package/dist/types/logging.d.ts +0 -42
  484. package/dist/types/logging.js +0 -2
  485. package/dist/types/recovery.d.ts +0 -48
  486. package/dist/types/recovery.js +0 -2
  487. package/dist/types/security.d.ts +0 -1
  488. package/dist/types/security.js +0 -2
  489. package/dist/utils/api.d.ts +0 -85
  490. package/dist/utils/api.js +0 -287
  491. package/dist/utils/circuitBreaker.d.ts +0 -43
  492. package/dist/utils/circuitBreaker.js +0 -91
  493. package/dist/utils/error-message.d.ts +0 -1
  494. package/dist/utils/error-message.js +0 -103
  495. package/dist/utils/layout/reservedSpace.d.ts +0 -59
  496. package/dist/utils/layout/reservedSpace.js +0 -102
  497. package/dist/utils/logout.d.ts +0 -14
  498. package/dist/utils/logout.js +0 -32
  499. package/dist/vibe/client.d.ts +0 -261
  500. package/dist/vibe/client.js +0 -445
  501. package/dist/vibe/enterprise-auth.d.ts +0 -106
  502. package/dist/vibe/enterprise-auth.js +0 -173
  503. package/dist/vibe/errors.d.ts +0 -83
  504. package/dist/vibe/errors.js +0 -146
  505. package/dist/vibe/generic.d.ts +0 -234
  506. package/dist/vibe/generic.js +0 -369
  507. package/dist/vibe/hooks/index.d.ts +0 -169
  508. package/dist/vibe/hooks/index.js +0 -252
  509. package/dist/vibe/index.d.ts +0 -25
  510. package/dist/vibe/index.js +0 -72
  511. package/dist/vibe/sessions.d.ts +0 -161
  512. package/dist/vibe/sessions.js +0 -391
  513. package/dist/vibe/types.d.ts +0 -353
  514. package/dist/vibe/types.js +0 -315
  515. package/src/auth/auth-options.ts +0 -237
  516. package/src/auth/callbacks/index.ts +0 -7
  517. package/src/auth/callbacks/jwt.ts +0 -382
  518. package/src/auth/callbacks/session.ts +0 -243
  519. package/src/auth/callbacks/signin.ts +0 -56
  520. package/src/auth/events/index.ts +0 -5
  521. package/src/auth/events/signout.ts +0 -33
  522. package/src/auth/providers/credentials.ts +0 -256
  523. package/src/auth/providers/index.ts +0 -6
  524. package/src/auth/providers/oauth.ts +0 -114
  525. package/src/lib/nextauth-secret.ts +0 -121
  526. package/src/types/next-auth.d.ts +0 -15
@@ -1,146 +0,0 @@
1
- "use strict";
2
- /**
3
- * Session Viability Check API Handler for `@payez/next-mvp`
4
- *
5
- * This API route is called by the middleware to securely check if a session is valid.
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.GET = GET;
9
- const server_1 = require("next/server");
10
- const session_store_1 = require("../../lib/session-store");
11
- const jwt_1 = require("next-auth/jwt");
12
- const startup_init_1 = require("../../lib/startup-init");
13
- const app_slug_1 = require("../../lib/app-slug");
14
- const idp_client_config_1 = require("../../lib/idp-client-config");
15
- /**
16
- * Get NextAuth secret from IDP config (cached).
17
- * NEVER use process.env.NEXTAUTH_SECRET directly - it may not be set.
18
- */
19
- async function getNextAuthSecret() {
20
- const config = await (0, idp_client_config_1.getIDPClientConfig)();
21
- return config.nextAuthSecret || '';
22
- }
23
- async function GET(req) {
24
- try {
25
- // Ensure initialization is complete
26
- if (!process.env.NEXTAUTH_SECRET) {
27
- try {
28
- await (0, startup_init_1.ensureInitialized)();
29
- }
30
- catch (error) {
31
- // Initialization failed - return 503
32
- console.error('[API Viability] Initialization failed - returning 503');
33
- return server_1.NextResponse.json({
34
- error: 'Service Unavailable',
35
- message: 'Authentication service is not properly configured',
36
- code: 'AUTH_NOT_INITIALIZED'
37
- }, { status: 503 });
38
- }
39
- }
40
- // Double-check after initialization attempt
41
- if ((0, startup_init_1.isInitializationFailed)()) {
42
- console.error('[API Viability] Initialization failed - returning 503');
43
- return server_1.NextResponse.json({
44
- error: 'Service Unavailable',
45
- message: 'Authentication service is not properly configured',
46
- code: 'AUTH_NOT_INITIALIZED'
47
- }, { status: 503 });
48
- }
49
- // Get secret from IDP config (same source as session.ts and token-lifecycle.ts)
50
- const secret = await getNextAuthSecret();
51
- if (!secret) {
52
- console.error('[API Viability] NEXTAUTH_SECRET not available from IDP config');
53
- return server_1.NextResponse.json({
54
- error: 'Service Unavailable',
55
- message: 'Authentication service is not properly configured',
56
- code: 'AUTH_NOT_INITIALIZED'
57
- }, { status: 503 });
58
- }
59
- // getToken is the recommended way to get the JWT from a request
60
- const cookieName = (0, app_slug_1.getJwtCookieName)();
61
- const token = await (0, jwt_1.getToken)({ req, secret, cookieName });
62
- // Debug logging to diagnose AKS-specific issues
63
- if (!token) {
64
- const cookieHeader = req.headers.get('cookie') || '';
65
- const hasCookie = cookieHeader.includes(cookieName);
66
- const cookieMatch = cookieHeader.match(new RegExp(`${cookieName}=([^;]*)`));
67
- const cookieValue = cookieMatch ? cookieMatch[1] : null;
68
- console.warn('[VIABILITY] getToken returned null:', {
69
- cookieName,
70
- hasCookie,
71
- cookieValueLength: cookieValue?.length || 0,
72
- cookieValuePreview: cookieValue ? cookieValue.substring(0, 30) + '...' : 'EMPTY',
73
- secretLength: secret.length,
74
- secretPreview: secret ? secret.substring(0, 10) + '...' : 'EMPTY',
75
- });
76
- }
77
- // Support both field names: sessionToken (auth.ts JWT) and redisSessionId (legacy)
78
- const sessionToken = (token?.sessionToken || token?.redisSessionId);
79
- if (token && sessionToken) {
80
- const sessionData = await (0, session_store_1.getSession)(sessionToken);
81
- if (sessionData) {
82
- // The session exists in Redis
83
- // Check if access token is expired (for middleware decision-making)
84
- const accessTokenExpires = sessionData.idpAccessTokenExpires || 0;
85
- const accessTokenExpired = accessTokenExpires < Date.now();
86
- // Get requires2FA from cached client config (not session)
87
- // This is a client-wide setting from the broker handshake
88
- let requires2FA = true; // Default to true for security
89
- try {
90
- const cachedConfig = await (0, idp_client_config_1.getIDPClientConfig)();
91
- requires2FA = cachedConfig.authSettings?.require2FA ?? true;
92
- }
93
- catch (e) {
94
- console.warn('[API Viability] Could not get client config, defaulting requires2FA to true');
95
- }
96
- // CRITICAL: Check if MFA has expired (2FA TTL enforcement)
97
- // The session may have mfaVerified=true from days ago, but if mfaExpiresAt
98
- // has passed, we must treat 2FA as incomplete to force re-verification.
99
- const mfaExpiresAt = sessionData.mfaExpiresAt || 0;
100
- const mfaExpired = mfaExpiresAt > 0 && mfaExpiresAt < Date.now();
101
- // Check both field names for compatibility (mfaVerified is the normalized name)
102
- const sessionMfaComplete = sessionData.mfaVerified ?? sessionData.twoFactorComplete ?? false;
103
- const effectiveTwoFactorComplete = sessionMfaComplete && !mfaExpired;
104
- console.log('[VIABILITY] Session 2FA check:', {
105
- sessionToken: sessionToken.substring(0, 8) + '...',
106
- mfaVerified: sessionData.mfaVerified,
107
- twoFactorComplete: sessionData.twoFactorComplete,
108
- sessionMfaComplete,
109
- mfaExpired,
110
- effectiveTwoFactorComplete,
111
- });
112
- if (mfaExpired && sessionMfaComplete) {
113
- console.warn('[API Viability] MFA expired - forcing 2FA re-verification', {
114
- mfaExpiresAt: new Date(mfaExpiresAt).toISOString(),
115
- now: new Date().toISOString(),
116
- hoursExpiredAgo: ((Date.now() - mfaExpiresAt) / (1000 * 60 * 60)).toFixed(1)
117
- });
118
- }
119
- const response = {
120
- authenticated: true,
121
- sessionToken, // Include token for middleware tracking
122
- // 2FA fields - critical for middleware redirect logic
123
- requires2FA, // From cached client config (client-wide setting)
124
- twoFactorComplete: effectiveTwoFactorComplete, // From session, BUT respects MFA TTL
125
- // Token status for refresh decisions
126
- accessTokenExpired,
127
- hasRefreshToken: !!sessionData.idpRefreshToken
128
- };
129
- return server_1.NextResponse.json(response);
130
- }
131
- // CRITICAL: Cookie exists but Redis session is missing (stale cookie state)
132
- // Return sessionToken so middleware can detect this and clear the stale cookie
133
- console.warn('[VIABILITY] Stale cookie detected - session not in Redis');
134
- return server_1.NextResponse.json({
135
- authenticated: false,
136
- sessionToken // Include token to enable stale cookie detection
137
- });
138
- }
139
- // If there's no token at all, it's not authenticated
140
- return server_1.NextResponse.json({ authenticated: false });
141
- }
142
- catch (error) {
143
- console.error('[API Viability] Error checking session viability:', error);
144
- return server_1.NextResponse.json({ authenticated: false }, { status: 500 });
145
- }
146
- }
@@ -1,23 +0,0 @@
1
- import { NextRequest, NextResponse } from 'next/server';
2
- /**
3
- * Force-expire access token for testing refresh flow.
4
- *
5
- * Sets the access token expiry to 2 minutes in the past,
6
- * which will trigger a refresh on the next API call.
7
- *
8
- * Usage in consuming app:
9
- * ```typescript
10
- * // app/api/test/force-expire/route.ts
11
- * export { POST } from '@payez/next-mvp/api-handlers/test/force-expire';
12
- * ```
13
- */
14
- export declare const POST: (req: NextRequest) => Promise<NextResponse<{
15
- success: boolean;
16
- error: string;
17
- }> | NextResponse<{
18
- success: boolean;
19
- previous: number | null;
20
- previousIso: string | null;
21
- newExpiry: number;
22
- newExpiryIso: string;
23
- }>>;
@@ -1,65 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.POST = void 0;
4
- const server_1 = require("next/server");
5
- const jwt_1 = require("next-auth/jwt");
6
- const session_store_1 = require("../../lib/session-store");
7
- const app_slug_1 = require("../../lib/app-slug");
8
- /**
9
- * Force-expire access token for testing refresh flow.
10
- *
11
- * Sets the access token expiry to 2 minutes in the past,
12
- * which will trigger a refresh on the next API call.
13
- *
14
- * Usage in consuming app:
15
- * ```typescript
16
- * // app/api/test/force-expire/route.ts
17
- * export { POST } from '@payez/next-mvp/api-handlers/test/force-expire';
18
- * ```
19
- */
20
- const POST = async (req) => {
21
- try {
22
- const secret = process.env.NEXTAUTH_SECRET;
23
- if (!secret) {
24
- return server_1.NextResponse.json({ success: false, error: 'NEXTAUTH_SECRET not configured' }, { status: 500 });
25
- }
26
- const cookieName = (0, app_slug_1.getJwtCookieName)();
27
- const token = await (0, jwt_1.getToken)({ req, secret, cookieName });
28
- let sessionToken = token?.redisSessionId;
29
- if (!sessionToken) {
30
- const headerSessionToken = req.headers.get('x-session-token') || req.headers.get('X-Session-Token');
31
- if (headerSessionToken) {
32
- sessionToken = headerSessionToken;
33
- }
34
- else {
35
- console.warn('[TEST_EXPIRE] No session token in JWT cookie or X-Session-Token header');
36
- return server_1.NextResponse.json({ success: false, error: 'No session token' }, { status: 401 });
37
- }
38
- }
39
- const session = await (0, session_store_1.getSession)(sessionToken);
40
- if (!session) {
41
- return server_1.NextResponse.json({ success: false, error: 'Session not found' }, { status: 404 });
42
- }
43
- const now = Date.now();
44
- const forced = now - (2 * 60 * 1000); // two minutes ago
45
- const prev = session.idpAccessTokenExpires || null;
46
- await (0, session_store_1.updateSession)(sessionToken, { idpAccessTokenExpires: forced });
47
- console.log('[TEST_EXPIRE] Forced access token expiry for session', {
48
- sessionToken: sessionToken.substring(0, 8) + '...',
49
- previous: prev ? new Date(prev).toISOString() : null,
50
- newExpiry: new Date(forced).toISOString()
51
- });
52
- return server_1.NextResponse.json({
53
- success: true,
54
- previous: prev,
55
- previousIso: prev ? new Date(prev).toISOString() : null,
56
- newExpiry: forced,
57
- newExpiryIso: new Date(forced).toISOString()
58
- });
59
- }
60
- catch (e) {
61
- console.error('[TEST_EXPIRE] Error:', e);
62
- return server_1.NextResponse.json({ success: false, error: e instanceof Error ? e.message : String(e) }, { status: 500 });
63
- }
64
- };
65
- exports.POST = POST;
@@ -1,39 +0,0 @@
1
- /**
2
- * Auth Decision Engine - Pure function for middleware auth flow
3
- *
4
- * This module provides a deterministic decision tree for authentication middleware.
5
- * All auth flow logic is centralized here for testability and maintainability.
6
- */
7
- export interface AuthContext {
8
- pathname: string;
9
- isPublicRoute: boolean;
10
- isLoginPage: boolean;
11
- searchParams: URLSearchParams;
12
- sessionPointer: {
13
- exists: boolean;
14
- sessionToken?: string;
15
- expired?: boolean;
16
- };
17
- sessionStatus: {
18
- exists: boolean | null;
19
- forceInvalid: boolean | null;
20
- requires2FA: boolean;
21
- twoFactorComplete: boolean;
22
- };
23
- circuitBreakerOpen: boolean;
24
- }
25
- export type AuthAction = {
26
- type: 'allow';
27
- } | {
28
- type: 'redirect';
29
- location: string;
30
- reason: string;
31
- clearCookies?: boolean;
32
- } | {
33
- type: 'service_error';
34
- reason: string;
35
- };
36
- /**
37
- * Main decision function - pure, testable, deterministic
38
- */
39
- export declare function makeAuthDecision(context: AuthContext): AuthAction;
@@ -1,182 +0,0 @@
1
- "use strict";
2
- /**
3
- * Auth Decision Engine - Pure function for middleware auth flow
4
- *
5
- * This module provides a deterministic decision tree for authentication middleware.
6
- * All auth flow logic is centralized here for testability and maintainability.
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.makeAuthDecision = makeAuthDecision;
10
- /**
11
- * Main decision function - pure, testable, deterministic
12
- */
13
- function makeAuthDecision(context) {
14
- const { pathname, isPublicRoute, isLoginPage, searchParams, sessionPointer, sessionStatus, circuitBreakerOpen } = context;
15
- // SAFEGUARD: Never use auth pages as callback URLs to prevent redirect loops
16
- const safeCallbackUrl = pathname.startsWith('/account-auth/') ? '/' : pathname;
17
- // Public routes are allowed, but we need to check login page separately
18
- if (isPublicRoute && !isLoginPage) {
19
- // For non-login public routes, check if authenticated user needs 2FA
20
- if (sessionPointer.exists && sessionStatus.exists && sessionStatus.requires2FA && !sessionStatus.twoFactorComplete) {
21
- // Skip redirect for verify-code page
22
- if (pathname === '/account-auth/verify-code') {
23
- return { type: 'allow' };
24
- }
25
- }
26
- return { type: 'allow' };
27
- }
28
- // Circuit breaker open - redirect to login with service unavailable
29
- if (circuitBreakerOpen) {
30
- if (isLoginPage) {
31
- return { type: 'allow' }; // Let them see login page
32
- }
33
- return {
34
- type: 'redirect',
35
- location: '/account-auth/login?error=ServiceUnavailable&reason=CircuitBreakerOpen',
36
- reason: 'CircuitBreakerOpen',
37
- clearCookies: true
38
- };
39
- }
40
- // No session pointer (JWT cookie) - need to login
41
- if (!sessionPointer.exists) {
42
- if (isLoginPage) {
43
- return { type: 'allow' };
44
- }
45
- // Redirect root to configured URL for unauthenticated users
46
- if (pathname === '/') {
47
- const unauthUrl = process.env.UNAUTHENTICATED_REDIRECT_URL || '/account-auth/login';
48
- return {
49
- type: 'redirect',
50
- location: unauthUrl,
51
- reason: 'unauthenticated_root_redirect'
52
- };
53
- }
54
- return {
55
- type: 'redirect',
56
- location: `/account-auth/login?callbackUrl=${encodeURIComponent(safeCallbackUrl)}`,
57
- reason: 'no_session_pointer'
58
- };
59
- }
60
- // Redis/service errors - can't verify session
61
- if (sessionStatus.exists === null || sessionStatus.forceInvalid === null) {
62
- return {
63
- type: 'service_error',
64
- reason: 'redis_unavailable'
65
- };
66
- }
67
- // Session force invalidated - need fresh login
68
- if (sessionStatus.forceInvalid) {
69
- if (isLoginPage) {
70
- return { type: 'allow' };
71
- }
72
- return {
73
- type: 'redirect',
74
- location: `/account-auth/login?callbackUrl=${encodeURIComponent(safeCallbackUrl)}&reason=force_invalidated`,
75
- reason: 'force_invalidated',
76
- clearCookies: true
77
- };
78
- }
79
- // Stale session (cookie exists but not in Redis) - need fresh login
80
- if (!sessionStatus.exists) {
81
- if (isLoginPage) {
82
- return { type: 'allow' };
83
- }
84
- return {
85
- type: 'redirect',
86
- location: `/account-auth/login?callbackUrl=${encodeURIComponent(safeCallbackUrl)}&reason=stale_session`,
87
- reason: 'stale_session',
88
- clearCookies: true
89
- };
90
- }
91
- // PRIORITIZE 2FA: If session exists and 2FA is required but not complete, handle this before token-expired logic
92
- if (sessionStatus.requires2FA && !sessionStatus.twoFactorComplete) {
93
- console.log('[MIDDLEWARE-DECISION] 2FA required but not complete', {
94
- pathname,
95
- isLoginPage,
96
- sessionExists: sessionStatus.exists,
97
- sessionToken: sessionPointer.sessionToken?.substring(0, 8) + '...'
98
- });
99
- // Already on the 2FA page
100
- if (pathname === '/account-auth/verify-code') {
101
- console.log('[MIDDLEWARE-DECISION] Already on verify-code page, allowing');
102
- return { type: 'allow' };
103
- }
104
- // If user is on the login page, send them to verify-code with the original callback
105
- if (isLoginPage) {
106
- const callbackUrl = searchParams.get('callbackUrl') || '/';
107
- // CRITICAL FIX: Never use auth pages as callback URLs
108
- const safeCallbackUrl = callbackUrl.startsWith('/account-auth/') ? '/' : callbackUrl;
109
- console.log('[MIDDLEWARE-DECISION] On login page with 2FA incomplete, redirecting to verify-code', {
110
- originalCallback: callbackUrl,
111
- safeCallback: safeCallbackUrl,
112
- originalUrl: pathname
113
- });
114
- return {
115
- type: 'redirect',
116
- location: `/account-auth/verify-code?callbackUrl=${encodeURIComponent(safeCallbackUrl)}`,
117
- reason: '2fa_required_login_redirect'
118
- };
119
- }
120
- // For protected routes, allow middleware to proceed (it may refresh tokens); pages will enforce 2FA
121
- console.log('[MIDDLEWARE-DECISION] Protected route with incomplete 2FA, allowing middleware to handle');
122
- return { type: 'allow' };
123
- }
124
- // Token expired - redirect to login (let NextAuth handle refresh)
125
- if (sessionPointer.expired) {
126
- if (isLoginPage) {
127
- return { type: 'allow' };
128
- }
129
- return {
130
- type: 'redirect',
131
- location: `/account-auth/login?callbackUrl=${encodeURIComponent(safeCallbackUrl)}&error=SessionExpired`,
132
- reason: 'token_expired'
133
- };
134
- }
135
- // Authenticated root path should land on dashboards
136
- if (pathname === '/') {
137
- return {
138
- type: 'redirect',
139
- location: '/',
140
- reason: 'authenticated_root_redirect'
141
- };
142
- }
143
- // Valid session but 2FA required and not complete - more intelligent handling
144
- if (sessionStatus.requires2FA && !sessionStatus.twoFactorComplete) {
145
- if (pathname === '/account-auth/verify-code') {
146
- return { type: 'allow' }; // Already on 2FA page
147
- }
148
- // For login page, redirect to 2FA with original callback
149
- if (isLoginPage) {
150
- const callbackUrl = searchParams.get('callbackUrl') || '/';
151
- // CRITICAL FIX: Never use auth pages as callback URLs
152
- const safeCallbackUrl = callbackUrl.startsWith('/account-auth/') ? '/' : callbackUrl;
153
- return {
154
- type: 'redirect',
155
- location: `/account-auth/verify-code?callbackUrl=${encodeURIComponent(safeCallbackUrl)}`,
156
- reason: '2fa_required'
157
- };
158
- }
159
- // For protected routes:
160
- // - If access token is expired and we have a valid refresh token, let middleware handle refresh first
161
- // - Only redirect to verify-code if access token is still valid or refresh failed
162
- // - Allow middleware to pass - it will either refresh successfully or handle redirect appropriately
163
- return { type: 'allow' };
164
- }
165
- // Authenticated user on login page - redirect to dashboard or callback
166
- if (isLoginPage) {
167
- const callbackUrl = searchParams.get('callbackUrl') || '/';
168
- // CRITICAL FIX: Never redirect back to login page (prevents infinite loop)
169
- const safeCallbackUrl = callbackUrl.startsWith('/account-auth/') ? '/' : callbackUrl;
170
- console.log('[MIDDLEWARE-DECISION] Authenticated user on login page, redirecting', {
171
- originalCallback: callbackUrl,
172
- safeCallback: safeCallbackUrl
173
- });
174
- return {
175
- type: 'redirect',
176
- location: safeCallbackUrl,
177
- reason: 'already_authenticated'
178
- };
179
- }
180
- // All checks passed - allow access
181
- return { type: 'allow' };
182
- }
@@ -1,57 +0,0 @@
1
- /**
2
- * NextAuth Configuration (Refactored)
3
- *
4
- * This is the composition layer that wires together all auth modules.
5
- * Individual logic lives in dedicated modules:
6
- * - providers/ - Credentials and OAuth provider builders
7
- * - callbacks/ - JWT, session, signIn callbacks
8
- * - events/ - SignOut event handler
9
- * - utils/ - Token utilities, IDP client
10
- * - types/ - Type definitions
11
- *
12
- * CARGO CULT PATTERNS REMOVED:
13
- * ============================
14
- * The original auth-options.ts (1186 lines) had several anti-patterns that
15
- * added complexity without benefit:
16
- *
17
- * 1. CALLBACK CONCURRENCY PROTECTION (removed)
18
- * - shouldExecuteCallback() / markCallbackComplete()
19
- * - A debouncing mechanism that tried to prevent callbacks from running
20
- * too frequently. NextAuth already handles this properly.
21
- * - Added complexity, caused race condition bugs, and leaked memory
22
- * (Map entries never cleaned up).
23
- *
24
- * 2. SESSION RESTORATION (removed)
25
- * - attemptSessionRestoration()
26
- * - Tried to restore sessions by calling refresh endpoint from JWT callback.
27
- * - Created circular dependencies and made debugging impossible.
28
- * - Clean approach: Session missing = user re-authenticates. Simple.
29
- *
30
- * 3. VARIABLE NAME SOUP (normalized in Phase 3)
31
- * - accessToken vs idpAccessToken vs oauthAccessToken
32
- * - twoFactorComplete vs mfaVerified vs requiresTwoFactor
33
- * - sessionToken vs redisSessionId
34
- * - Now: Clear prefixes (idp*, oauth*, mfa*) with documented meanings.
35
- *
36
- * 4. INLINE EVERYTHING (modularized in Phase 2)
37
- * - All logic was in one giant file with no separation of concerns.
38
- * - Now: Each module has one job and can be tested independently.
39
- *
40
- * @version 2.0.0
41
- * @since auth-refactor-2026-01
42
- */
43
- import type { NextAuthOptions } from 'next-auth';
44
- /**
45
- * Base NextAuth configuration.
46
- * Use getAuthOptions() for dynamic provider loading from IDP.
47
- */
48
- export declare const authOptions: NextAuthOptions;
49
- /**
50
- * Get auth options with dynamically loaded OAuth providers from IDP.
51
- * Uses caching to avoid rebuilding on every request.
52
- */
53
- export declare function getAuthOptions(): Promise<NextAuthOptions>;
54
- /**
55
- * Clear cached auth options (when IDP config changes).
56
- */
57
- export declare function clearAuthOptionsCache(): void;