@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,155 +1,157 @@
1
- "use client";
2
- import React, { useState, useEffect } from "react";
3
- import { useSession } from "next-auth/react";
4
-
5
- /**
6
- * Refresh Token Test Page
7
- *
8
- * Debug page for testing OAuth refresh token flow.
9
- * Shows current session state, allows manual refresh trigger,
10
- * and can force-expire tokens for testing.
11
- *
12
- * Usage:
13
- * ```typescript
14
- * // app/test-env/refresh-token/page.tsx
15
- * export { RefreshTokenPage as default } from '@payez/next-mvp/pages/test-env';
16
- * ```
17
- */
18
- export function RefreshTokenPage() {
19
- const { data: session, update } = useSession();
20
- const [result, setResult] = useState<any>(null);
21
- const [loading, setLoading] = useState(false);
22
- const [sessionDetails, setSessionDetails] = useState<any>(null);
23
-
24
- // Fetch detailed session info on mount
25
- useEffect(() => {
26
- async function fetchSessionDetails() {
27
- try {
28
- const res = await fetch("/api/auth/session", { credentials: "include" });
29
- const data = await res.json();
30
- setSessionDetails(data);
31
- } catch (e) {
32
- console.error("Failed to fetch session details", e);
33
- }
34
- }
35
- fetchSessionDetails();
36
- }, [result]); // Refetch after refresh
37
-
38
- async function handleRefresh() {
39
- setLoading(true);
40
- setResult(null);
41
- try {
42
- const res = await fetch("/api/auth/refresh", {
43
- method: "POST",
44
- headers: { "Content-Type": "application/json" },
45
- credentials: "include",
46
- });
47
- const data = await res.json();
48
- setResult({ status: res.status, ...data });
49
- // Update NextAuth session
50
- await update();
51
- } catch (e: any) {
52
- setResult({ error: e.message });
53
- } finally {
54
- setLoading(false);
55
- }
56
- }
57
-
58
- async function handleForceExpire() {
59
- setLoading(true);
60
- setResult(null);
61
- try {
62
- const res = await fetch("/api/test/force-expire", {
63
- method: "POST",
64
- credentials: "include",
65
- });
66
- const data = await res.json();
67
- setResult({ action: "force_expire", status: res.status, ...data });
68
- } catch (e: any) {
69
- setResult({ error: e.message });
70
- } finally {
71
- setLoading(false);
72
- }
73
- }
74
-
75
- const formatExpiry = (exp: number | string | undefined) => {
76
- if (!exp) return "N/A";
77
- const date = new Date(typeof exp === "string" ? exp : exp);
78
- const now = new Date();
79
- const diffMs = date.getTime() - now.getTime();
80
- const diffMins = Math.floor(diffMs / 60000);
81
- const diffSecs = Math.floor((diffMs % 60000) / 1000);
82
- return `${date.toLocaleTimeString()} (${diffMins}m ${diffSecs}s remaining)`;
83
- };
84
-
85
- return (
86
- <div className="p-8 max-w-2xl mx-auto bg-gray-900 min-h-screen text-white">
87
- <h1 className="text-2xl font-bold mb-4">Refresh Token Test</h1>
88
-
89
- {/* Session Info */}
90
- <div className="mb-6 rounded border border-blue-500 bg-blue-900/30 p-4">
91
- <h2 className="font-semibold mb-2 text-blue-300">Current Session</h2>
92
- <div className="text-sm space-y-1 font-mono">
93
- <div><span className="text-gray-400">User:</span> {session?.user?.email || "Not logged in"}</div>
94
- <div><span className="text-gray-400">2FA Complete:</span> {String((session?.user as any)?.twoFactorSessionVerified ?? "unknown")}</div>
95
- <div>
96
- <span className="text-gray-400">Access Token:</span>{" "}
97
- {sessionDetails?.accessToken ? `${sessionDetails.accessToken.substring(0, 40)}...` : "N/A"}
98
- </div>
99
- <div>
100
- <span className="text-gray-400">Refresh Token:</span>{" "}
101
- {sessionDetails?.refreshToken ? `${sessionDetails.refreshToken.substring(0, 40)}...` : "N/A"}
102
- </div>
103
- <div>
104
- <span className="text-gray-400">Access Expires:</span>{" "}
105
- {formatExpiry(sessionDetails?.accessTokenExpires)}
106
- </div>
107
- </div>
108
- </div>
109
-
110
- {/* Actions */}
111
- <div className="flex gap-2 mb-4">
112
- <button
113
- className="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded disabled:opacity-50"
114
- onClick={handleRefresh}
115
- disabled={loading}
116
- >
117
- {loading ? "Refreshing..." : "Test Refresh Token"}
118
- </button>
119
- <button
120
- className="bg-red-600 hover:bg-red-700 text-white px-4 py-2 rounded disabled:opacity-50"
121
- onClick={handleForceExpire}
122
- disabled={loading}
123
- >
124
- Force Expire Token
125
- </button>
126
- <button
127
- className="bg-gray-600 hover:bg-gray-700 text-white px-4 py-2 rounded"
128
- onClick={() => window.location.reload()}
129
- >
130
- Reload Page
131
- </button>
132
- </div>
133
-
134
- {/* Result */}
135
- {result && (
136
- <div className="rounded border border-gray-600 bg-gray-800 p-4">
137
- <h3 className="font-semibold mb-2 text-gray-300">Result:</h3>
138
- <pre className="text-xs overflow-x-auto whitespace-pre-wrap text-green-400">
139
- {JSON.stringify(result, null, 2)}
140
- </pre>
141
- </div>
142
- )}
143
-
144
- {/* Raw Session Details */}
145
- <details className="mt-4">
146
- <summary className="cursor-pointer text-gray-400 hover:text-white">Raw Session Details</summary>
147
- <pre className="mt-2 text-xs bg-gray-800 p-2 rounded overflow-x-auto text-gray-300">
148
- {JSON.stringify(sessionDetails, null, 2)}
149
- </pre>
150
- </details>
151
- </div>
152
- );
153
- }
154
-
155
- export default RefreshTokenPage;
1
+ "use client";
2
+ import React, { useState, useEffect } from "react";
3
+ import { authClient } from '../../client/better-auth-client';
4
+
5
+ /**
6
+ * Refresh Token Test Page
7
+ *
8
+ * Debug page for testing OAuth refresh token flow.
9
+ * Shows current session state, allows manual refresh trigger,
10
+ * and can force-expire tokens for testing.
11
+ *
12
+ * Usage:
13
+ * ```typescript
14
+ * // app/test-env/refresh-token/page.tsx
15
+ * export { RefreshTokenPage as default } from '@payez/next-mvp/pages/test-env';
16
+ * ```
17
+ */
18
+ export function RefreshTokenPage() {
19
+ const { data: session } = authClient.useSession();
20
+ // TODO: Better Auth session refresh
21
+ const update = async () => { /* no-op: Better Auth handles session refresh internally */ };
22
+ const [result, setResult] = useState<any>(null);
23
+ const [loading, setLoading] = useState(false);
24
+ const [sessionDetails, setSessionDetails] = useState<any>(null);
25
+
26
+ // Fetch detailed session info on mount
27
+ useEffect(() => {
28
+ async function fetchSessionDetails() {
29
+ try {
30
+ const res = await fetch("/api/auth/session", { credentials: "include" });
31
+ const data = await res.json();
32
+ setSessionDetails(data);
33
+ } catch (e) {
34
+ console.error("Failed to fetch session details", e);
35
+ }
36
+ }
37
+ fetchSessionDetails();
38
+ }, [result]); // Refetch after refresh
39
+
40
+ async function handleRefresh() {
41
+ setLoading(true);
42
+ setResult(null);
43
+ try {
44
+ const res = await fetch("/api/auth/refresh", {
45
+ method: "POST",
46
+ headers: { "Content-Type": "application/json" },
47
+ credentials: "include",
48
+ });
49
+ const data = await res.json();
50
+ setResult({ status: res.status, ...data });
51
+ // Update NextAuth session
52
+ await update();
53
+ } catch (e: any) {
54
+ setResult({ error: e.message });
55
+ } finally {
56
+ setLoading(false);
57
+ }
58
+ }
59
+
60
+ async function handleForceExpire() {
61
+ setLoading(true);
62
+ setResult(null);
63
+ try {
64
+ const res = await fetch("/api/test/force-expire", {
65
+ method: "POST",
66
+ credentials: "include",
67
+ });
68
+ const data = await res.json();
69
+ setResult({ action: "force_expire", status: res.status, ...data });
70
+ } catch (e: any) {
71
+ setResult({ error: e.message });
72
+ } finally {
73
+ setLoading(false);
74
+ }
75
+ }
76
+
77
+ const formatExpiry = (exp: number | string | undefined) => {
78
+ if (!exp) return "N/A";
79
+ const date = new Date(typeof exp === "string" ? exp : exp);
80
+ const now = new Date();
81
+ const diffMs = date.getTime() - now.getTime();
82
+ const diffMins = Math.floor(diffMs / 60000);
83
+ const diffSecs = Math.floor((diffMs % 60000) / 1000);
84
+ return `${date.toLocaleTimeString()} (${diffMins}m ${diffSecs}s remaining)`;
85
+ };
86
+
87
+ return (
88
+ <div className="p-8 max-w-2xl mx-auto bg-gray-900 min-h-screen text-white">
89
+ <h1 className="text-2xl font-bold mb-4">Refresh Token Test</h1>
90
+
91
+ {/* Session Info */}
92
+ <div className="mb-6 rounded border border-blue-500 bg-blue-900/30 p-4">
93
+ <h2 className="font-semibold mb-2 text-blue-300">Current Session</h2>
94
+ <div className="text-sm space-y-1 font-mono">
95
+ <div><span className="text-gray-400">User:</span> {session?.user?.email || "Not logged in"}</div>
96
+ <div><span className="text-gray-400">2FA Complete:</span> {String((session?.user as any)?.twoFactorSessionVerified ?? "unknown")}</div>
97
+ <div>
98
+ <span className="text-gray-400">Access Token:</span>{" "}
99
+ {sessionDetails?.accessToken ? `${sessionDetails.accessToken.substring(0, 40)}...` : "N/A"}
100
+ </div>
101
+ <div>
102
+ <span className="text-gray-400">Refresh Token:</span>{" "}
103
+ {sessionDetails?.refreshToken ? `${sessionDetails.refreshToken.substring(0, 40)}...` : "N/A"}
104
+ </div>
105
+ <div>
106
+ <span className="text-gray-400">Access Expires:</span>{" "}
107
+ {formatExpiry(sessionDetails?.accessTokenExpires)}
108
+ </div>
109
+ </div>
110
+ </div>
111
+
112
+ {/* Actions */}
113
+ <div className="flex gap-2 mb-4">
114
+ <button
115
+ className="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded disabled:opacity-50"
116
+ onClick={handleRefresh}
117
+ disabled={loading}
118
+ >
119
+ {loading ? "Refreshing..." : "Test Refresh Token"}
120
+ </button>
121
+ <button
122
+ className="bg-red-600 hover:bg-red-700 text-white px-4 py-2 rounded disabled:opacity-50"
123
+ onClick={handleForceExpire}
124
+ disabled={loading}
125
+ >
126
+ Force Expire Token
127
+ </button>
128
+ <button
129
+ className="bg-gray-600 hover:bg-gray-700 text-white px-4 py-2 rounded"
130
+ onClick={() => window.location.reload()}
131
+ >
132
+ Reload Page
133
+ </button>
134
+ </div>
135
+
136
+ {/* Result */}
137
+ {result && (
138
+ <div className="rounded border border-gray-600 bg-gray-800 p-4">
139
+ <h3 className="font-semibold mb-2 text-gray-300">Result:</h3>
140
+ <pre className="text-xs overflow-x-auto whitespace-pre-wrap text-green-400">
141
+ {JSON.stringify(result, null, 2)}
142
+ </pre>
143
+ </div>
144
+ )}
145
+
146
+ {/* Raw Session Details */}
147
+ <details className="mt-4">
148
+ <summary className="cursor-pointer text-gray-400 hover:text-white">Raw Session Details</summary>
149
+ <pre className="mt-2 text-xs bg-gray-800 p-2 rounded overflow-x-auto text-gray-300">
150
+ {JSON.stringify(sessionDetails, null, 2)}
151
+ </pre>
152
+ </details>
153
+ </div>
154
+ );
155
+ }
156
+
157
+ export default RefreshTokenPage;
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { useSession } from 'next-auth/react';
3
+ import { authClient } from '../../client/better-auth-client';
4
4
  import { useState, useEffect } from 'react';
5
5
  import Link from 'next/link';
6
6
 
@@ -16,7 +16,9 @@ import Link from 'next/link';
16
16
  * ```
17
17
  */
18
18
  export function TestEnvPage() {
19
- const { data: session, status } = useSession();
19
+ const { data: sessionData, isPending } = authClient.useSession();
20
+ const session = sessionData;
21
+ const status = isPending ? 'loading' : session ? 'authenticated' : 'unauthenticated';
20
22
  const [isDarkMode, setIsDarkMode] = useState(false);
21
23
 
22
24
  useEffect(() => {
@@ -32,7 +32,7 @@
32
32
 
33
33
  import React, { useState, useEffect, useRef } from 'react';
34
34
  import { useRouter, useSearchParams } from 'next/navigation';
35
- import { useSession, signOut, getSession } from 'next-auth/react';
35
+ import { authClient } from '../../client/better-auth-client';
36
36
  import { Suspense } from 'react';
37
37
  import { useColors } from '../../theme/useTheme';
38
38
 
@@ -54,7 +54,11 @@ function VerifyCodeForm() {
54
54
  const searchParams = useSearchParams();
55
55
  const callbackUrl = searchParams?.get('callbackUrl') || '/dashboard';
56
56
 
57
- const { data: session, status, update: updateSession } = useSession();
57
+ const { data: sessionData, isPending } = authClient.useSession();
58
+ const session = sessionData;
59
+ const status = isPending ? 'loading' : session ? 'authenticated' : 'unauthenticated';
60
+ // TODO: Better Auth session refresh
61
+ const updateSession = async () => { return session; };
58
62
  const colors = useColors();
59
63
 
60
64
  // Method selection
@@ -146,7 +150,7 @@ function VerifyCodeForm() {
146
150
  // Session expired - redirect to login
147
151
  setError('Your session has expired. Redirecting to login...');
148
152
  setTimeout(async () => {
149
- await signOut({ redirect: false });
153
+ await authClient.signOut();
150
154
  const safeCallback = callbackUrl.startsWith('/account-auth/') ? '/dashboard' : callbackUrl;
151
155
  router.push(`/account-auth/login?callbackUrl=${encodeURIComponent(safeCallback)}`);
152
156
  }, 1200);
@@ -197,7 +201,7 @@ function VerifyCodeForm() {
197
201
  if (data.valid === false || data.mfaExpired === true) {
198
202
  setError('Your session has expired. Redirecting to login...');
199
203
  setTimeout(async () => {
200
- await signOut({ redirect: false });
204
+ await authClient.signOut();
201
205
  if (typeof window !== 'undefined') {
202
206
  sessionStorage.removeItem(VERIFY_IN_PROGRESS_KEY);
203
207
  }
@@ -243,7 +247,7 @@ function VerifyCodeForm() {
243
247
  );
244
248
 
245
249
  setTimeout(async () => {
246
- await signOut({ redirect: false });
250
+ await authClient.signOut();
247
251
  if (typeof window !== 'undefined') {
248
252
  sessionStorage.removeItem(VERIFY_IN_PROGRESS_KEY);
249
253
  }
@@ -318,7 +322,7 @@ function VerifyCodeForm() {
318
322
  );
319
323
 
320
324
  setTimeout(async () => {
321
- await signOut({ redirect: false });
325
+ await authClient.signOut();
322
326
  if (typeof window !== 'undefined') {
323
327
  sessionStorage.removeItem(VERIFY_IN_PROGRESS_KEY);
324
328
  }
@@ -15,7 +15,7 @@
15
15
  */
16
16
 
17
17
  import { NextRequest, NextResponse } from 'next/server';
18
- import { getToken } from 'next-auth/jwt';
18
+ import { getSession } from '../../server/auth';
19
19
  import { deleteSession } from '../../lib/session-store';
20
20
  import {
21
21
  getSessionCookieName,
@@ -23,39 +23,22 @@ import {
23
23
  getCsrfCookieName,
24
24
  getSecureCsrfCookieName,
25
25
  getCallbackUrlCookieName,
26
- getJwtCookieName
27
26
  } from '../../lib/app-slug';
28
- import { getIDPClientConfig } from '../../lib/idp-client-config';
29
27
  import { siteEvents, getClientIp } from '../../lib/site-logger';
30
28
 
31
- async function getConfig() {
32
- const idpConfig = await getIDPClientConfig();
33
- const idpBaseUrl = process.env.IDP_URL;
34
- if (!idpBaseUrl) {
35
- throw new Error('[IDP_URL] FATAL: IDP_URL environment variable is REQUIRED.');
36
- }
37
- return {
38
- nextAuthSecret: idpConfig.nextAuthSecret || '',
39
- idpBaseUrl,
40
- clientId: process.env.CLIENT_ID || process.env.NEXT_PUBLIC_IDP_CLIENT_ID || '',
41
- };
42
- }
43
-
44
29
  /**
45
30
  * POST /api/auth/logout - Sign out and clean up session
46
31
  *
47
32
  * Performs complete logout:
48
33
  * 1. Revokes tokens at IDP (if refresh token available)
49
34
  * 2. Deletes session from store
50
- * 3. Clears NextAuth session cookie
35
+ * 3. Clears session cookies
51
36
  */
52
37
  export async function POST(req: NextRequest) {
53
- const { nextAuthSecret, idpBaseUrl, clientId } = await getConfig();
54
-
55
38
  try {
56
- const token = await getToken({ req, secret: nextAuthSecret, cookieName: getJwtCookieName() });
39
+ const session = await getSession(req);
57
40
 
58
- if (!token) {
41
+ if (!session) {
59
42
  // Already logged out
60
43
  return NextResponse.json({
61
44
  success: true,
@@ -63,8 +46,7 @@ export async function POST(req: NextRequest) {
63
46
  });
64
47
  }
65
48
 
66
- // Support both field names: sessionToken (auth.ts JWT) and redisSessionId (legacy)
67
- const sessionId = (token as any).sessionToken || (token as any).redisSessionId;
49
+ const sessionId = session.session?.token;
68
50
 
69
51
  // Delete session from store (this also removes the refresh token)
70
52
  if (sessionId) {
@@ -77,7 +59,7 @@ export async function POST(req: NextRequest) {
77
59
  }
78
60
 
79
61
  // Log logout event (fire-and-forget)
80
- const userId = (token as any).sub || (token as any).idpUserId;
62
+ const userId = session.user?.id;
81
63
  if (userId) {
82
64
  siteEvents.logout({
83
65
  user_id: userId,
@@ -89,7 +71,7 @@ export async function POST(req: NextRequest) {
89
71
  });
90
72
  }
91
73
 
92
- // Build response that clears NextAuth cookies
74
+ // Build response that clears session cookies
93
75
  const response = NextResponse.json({
94
76
  success: true,
95
77
  message: 'Logged out successfully'
@@ -1,71 +1,45 @@
1
- /**
2
- * Ready-to-Use NextAuth Route Handler
3
- *
4
- * Provides a pre-configured NextAuth handler that uses dynamic OAuth providers
5
- * loaded from IDP at startup via getAuthOptions().
6
- *
7
- * @version 2.2.0 - Dynamic provider loading from IDP
8
- * @since auth-ready-v2-hotfix
9
- */
10
-
11
- import NextAuth from 'next-auth';
12
- import { authOptions, getAuthOptions } from '../../auth/auth-options';
13
-
14
- // Cached handler - built once with dynamic providers
15
- let cachedHandler: ReturnType<typeof NextAuth> | null = null;
16
- let handlerPromise: Promise<ReturnType<typeof NextAuth>> | null = null;
17
-
18
- /**
19
- * Get or build the NextAuth handler with dynamic providers.
20
- * Uses caching to avoid rebuilding on every request.
21
- */
22
- async function getHandler(): Promise<ReturnType<typeof NextAuth>> {
23
- // Return cached if available
24
- if (cachedHandler) {
25
- return cachedHandler;
26
- }
27
-
28
- // Prevent concurrent builds
29
- if (handlerPromise) {
30
- return handlerPromise;
31
- }
32
-
33
- handlerPromise = (async () => {
34
- try {
35
- // Try to get dynamic auth options from IDP
36
- const options = await getAuthOptions();
37
- console.log('[NEXTAUTH_ROUTE] Built handler with dynamic providers');
38
- cachedHandler = NextAuth(options);
39
- return cachedHandler;
40
- } catch (error) {
41
- // Fallback to static options if IDP unavailable
42
- console.warn('[NEXTAUTH_ROUTE] Failed to get dynamic options, using static fallback:', {
43
- error: error instanceof Error ? error.message : String(error)
44
- });
45
- cachedHandler = NextAuth(authOptions);
46
- return cachedHandler;
47
- } finally {
48
- handlerPromise = null;
49
- }
50
- })();
51
-
52
- return handlerPromise;
53
- }
54
-
55
- /**
56
- * GET handler for NextAuth
57
- * Uses async factory to get dynamic providers from IDP
58
- */
59
- export async function GET(request: Request, context: any) {
60
- const handler = await getHandler();
61
- return handler(request, context);
62
- }
63
-
64
- /**
65
- * POST handler for NextAuth
66
- * Uses async factory to get dynamic providers from IDP
67
- */
68
- export async function POST(request: Request, context: any) {
69
- const handler = await getHandler();
70
- return handler(request, context);
71
- }
1
+ /**
2
+ * Ready-to-Use Auth Route Handler (Better Auth)
3
+ *
4
+ * Provides a pre-configured Better Auth handler that uses dynamic OAuth providers
5
+ * loaded from IDP at startup.
6
+ *
7
+ * Replaces the former NextAuth handler. The file name is kept as nextauth.ts
8
+ * to avoid breaking re-exports in routes/auth/index.ts.
9
+ *
10
+ * @version 4.0.0 - Better Auth migration
11
+ * @since better-auth-4.0
12
+ */
13
+
14
+ import { getBetterAuthHandler } from '../../auth/better-auth';
15
+ import { NextResponse } from 'next/server';
16
+
17
+ /**
18
+ * GET handler for auth routes
19
+ * Delegates to Better Auth instance.
20
+ */
21
+ export async function GET(request: Request) {
22
+ const handler = await getBetterAuthHandler();
23
+ if (!handler) {
24
+ return NextResponse.json(
25
+ { error: 'Auth handler not available' },
26
+ { status: 503 }
27
+ );
28
+ }
29
+ return handler.GET(request);
30
+ }
31
+
32
+ /**
33
+ * POST handler for auth routes
34
+ * Delegates to Better Auth instance.
35
+ */
36
+ export async function POST(request: Request) {
37
+ const handler = await getBetterAuthHandler();
38
+ if (!handler) {
39
+ return NextResponse.json(
40
+ { error: 'Auth handler not available' },
41
+ { status: 503 }
42
+ );
43
+ }
44
+ return handler.POST(request);
45
+ }