@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,219 +0,0 @@
1
- "use strict";
2
- /**
3
- * Page RBAC Check Module
4
- *
5
- * Checks page-level permissions via Vibe API through the IDP Proxy.
6
- * Uses in-memory cache to reduce API calls.
7
- * Fails closed (DENY) on errors or timeout.
8
- *
9
- * All requests route through the IDP Vibe Proxy ({IDP_URL}/api/vibe/proxy)
10
- * which injects proper HMAC credentials for the Vibe API.
11
- *
12
- * @version 2.0.0
13
- * @since page-rbac-2026-01
14
- */
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.clearRBACCache = clearRBACCache;
17
- exports.checkPagePermission = checkPagePermission;
18
- exports.isRBACEnabled = isRBACEnabled;
19
- // ============================================================================
20
- // WEB CRYPTO HELPERS (Edge Runtime compatible)
21
- // ============================================================================
22
- const encoder = new TextEncoder();
23
- async function sha256Hex(input) {
24
- const data = encoder.encode(input);
25
- const hash = await crypto.subtle.digest('SHA-256', data);
26
- return Array.from(new Uint8Array(hash))
27
- .map(b => b.toString(16).padStart(2, '0'))
28
- .join('');
29
- }
30
- async function hmacSha256Base64(key, message) {
31
- const cryptoKey = await crypto.subtle.importKey('raw', key, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
32
- const signature = await crypto.subtle.sign('HMAC', cryptoKey, encoder.encode(message));
33
- return btoa(String.fromCharCode(...new Uint8Array(signature)));
34
- }
35
- function base64ToUint8Array(base64) {
36
- const binary = atob(base64);
37
- const bytes = new Uint8Array(binary.length);
38
- for (let i = 0; i < binary.length; i++) {
39
- bytes[i] = binary.charCodeAt(i);
40
- }
41
- return bytes;
42
- }
43
- // ============================================================================
44
- // CACHE
45
- // ============================================================================
46
- const rbacCache = new Map();
47
- const DEFAULT_CACHE_TTL = 60; // 60 seconds
48
- const MAX_CACHE_TTL = 300; // 5 minutes max - prevents cache poisoning
49
- const MAX_CACHE_SIZE = 1000;
50
- /**
51
- * Generate cache key for RBAC result.
52
- * Uses SHA-256 hash to avoid key collisions and limit key size.
53
- */
54
- async function getCacheKey(clientId, path, roles) {
55
- const sortedRoles = [...roles].sort().join(',');
56
- const input = JSON.stringify({ clientId, path, roles: sortedRoles });
57
- const hash = await sha256Hex(input);
58
- return hash.substring(0, 32);
59
- }
60
- /**
61
- * Get cached RBAC result if valid.
62
- */
63
- function getCachedResult(key) {
64
- const cached = rbacCache.get(key);
65
- if (cached && cached.expires > Date.now()) {
66
- return cached.result;
67
- }
68
- // Clean up expired entry
69
- if (cached) {
70
- rbacCache.delete(key);
71
- }
72
- return null;
73
- }
74
- /**
75
- * Cache an RBAC result.
76
- */
77
- function setCachedResult(key, result) {
78
- // Prevent unbounded cache growth
79
- if (rbacCache.size >= MAX_CACHE_SIZE) {
80
- // Remove oldest entries (first 100)
81
- const keysToDelete = Array.from(rbacCache.keys()).slice(0, 100);
82
- keysToDelete.forEach(k => rbacCache.delete(k));
83
- }
84
- // SECURITY: Clamp TTL to prevent cache poisoning attacks
85
- const ttl = Math.min(result.cache_ttl ?? DEFAULT_CACHE_TTL, MAX_CACHE_TTL);
86
- rbacCache.set(key, {
87
- result,
88
- expires: Date.now() + (ttl * 1000),
89
- });
90
- }
91
- /**
92
- * Clear cache (for testing or config changes).
93
- */
94
- function clearRBACCache() {
95
- rbacCache.clear();
96
- }
97
- // ============================================================================
98
- // RBAC CHECK (via IDP Proxy)
99
- // ============================================================================
100
- /**
101
- * Check if user has permission to access a page.
102
- *
103
- * Routes through IDP Vibe Proxy ({IDP_URL}/api/vibe/proxy) which injects
104
- * proper HMAC credentials. The Vibe RBAC endpoint requires client context
105
- * that only the proxy can provide.
106
- *
107
- * FAIL CLOSED: If proxy is unreachable or times out, access is DENIED.
108
- *
109
- * @param path - The route path to check
110
- * @param userRoles - User's roles from session
111
- * @param clientId - Client slug for multi-tenancy
112
- * @param userClaims - Optional claims for claim-based authorization
113
- * @returns RBAC result with allowed/denied status
114
- */
115
- async function checkPagePermission(path, userRoles, clientId, userClaims) {
116
- // Check cache first
117
- const cacheKey = await getCacheKey(clientId, path, userRoles);
118
- const cached = getCachedResult(cacheKey);
119
- if (cached) {
120
- return cached;
121
- }
122
- const idpUrl = process.env.NEXT_PUBLIC_IDP_URL || process.env.IDP_URL;
123
- const vibeClientId = process.env.VIBE_CLIENT_ID;
124
- const hmacKey = process.env.VIBE_HMAC_KEY || process.env.IDP_SIGNING_KEY;
125
- if (!idpUrl) {
126
- console.error('[RBAC] IDP_URL not configured');
127
- return {
128
- allowed: false,
129
- reason: 'rbac_not_configured',
130
- redirect: '/error?code=rbac_not_configured',
131
- };
132
- }
133
- // Build RBAC endpoint with query params
134
- // Vibe route is /v1/rbac/check (no /api/ prefix)
135
- const params = new URLSearchParams();
136
- params.set('path', path);
137
- params.set('roles', userRoles.join(','));
138
- if (userClaims && Object.keys(userClaims).length > 0) {
139
- const claimsParam = Object.entries(userClaims)
140
- .map(([type, value]) => `${type}:${value}`)
141
- .join(',');
142
- params.set('claims', claimsParam);
143
- }
144
- const rbacEndpoint = `/v1/rbac/check?${params.toString()}`;
145
- // Build proxy request
146
- const proxyUrl = `${idpUrl}/api/vibe/proxy`;
147
- const timestamp = Math.floor(Date.now() / 1000);
148
- const headers = {
149
- 'Content-Type': 'application/json',
150
- 'Accept': 'application/json',
151
- };
152
- if (vibeClientId) {
153
- headers['X-Vibe-Client-Id'] = vibeClientId;
154
- }
155
- // Sign with HMAC (same format as vibe-client: timestamp|method|endpoint)
156
- if (hmacKey && vibeClientId) {
157
- const stringToSign = `${timestamp}|GET|${rbacEndpoint}`;
158
- const keyBuffer = base64ToUint8Array(hmacKey);
159
- const signature = await hmacSha256Base64(keyBuffer, stringToSign);
160
- headers['X-Vibe-Timestamp'] = String(timestamp);
161
- headers['X-Vibe-Signature'] = signature;
162
- }
163
- // Proxy body format: { endpoint, method, data }
164
- const proxyBody = {
165
- endpoint: rbacEndpoint,
166
- method: 'GET',
167
- data: null,
168
- };
169
- try {
170
- // 2 second timeout - fail closed
171
- const controller = new AbortController();
172
- const timeoutId = setTimeout(() => controller.abort(), 2000);
173
- const response = await fetch(proxyUrl, {
174
- method: 'POST',
175
- headers,
176
- body: JSON.stringify(proxyBody),
177
- signal: controller.signal,
178
- });
179
- clearTimeout(timeoutId);
180
- if (!response.ok) {
181
- console.error('[RBAC] Proxy error:', response.status, response.statusText);
182
- return {
183
- allowed: false,
184
- reason: 'rbac_api_error',
185
- redirect: '/error?code=rbac_error',
186
- };
187
- }
188
- const body = await response.json();
189
- // Vibe API wraps responses: { success: true, data: { allowed, reason, ... } }
190
- // Unwrap the .data property if present, otherwise use body directly
191
- const result = body?.data ?? body;
192
- // Cache the result
193
- setCachedResult(cacheKey, result);
194
- return result;
195
- }
196
- catch (error) {
197
- // Fail closed on any error
198
- if (error.name === 'AbortError') {
199
- console.error('[RBAC] Proxy timeout (2s exceeded)');
200
- return {
201
- allowed: false,
202
- reason: 'rbac_timeout',
203
- redirect: '/error?code=rbac_timeout',
204
- };
205
- }
206
- console.error('[RBAC] Proxy error:', error);
207
- return {
208
- allowed: false,
209
- reason: 'rbac_service_unavailable',
210
- redirect: '/error?code=rbac_unavailable',
211
- };
212
- }
213
- }
214
- /**
215
- * Check if RBAC is enabled for this deployment.
216
- */
217
- function isRBACEnabled() {
218
- return process.env.VIBE_RBAC_ENABLED === 'true';
219
- }
@@ -1,134 +0,0 @@
1
- /**
2
- * Two-Factor Authentication Presets for MVP Middleware
3
- *
4
- * Provides granular control over 2FA requirements per route.
5
- * Allows routes to require authentication but NOT require 2FA completion,
6
- * which is essential for 2FA onboarding flows.
7
- *
8
- * Ported from website-membership's TwoFactorPresets pattern.
9
- *
10
- * @version 2.6.29
11
- * @since auth-ready-v2
12
- */
13
- /**
14
- * Two-Factor Authentication Requirements
15
- */
16
- export interface TwoFactorRequirements {
17
- /** Whether 2FA is required for this route */
18
- requires2FA: boolean;
19
- /** Minimum Authentication Context Class Reference level (optional) */
20
- minACR?: string;
21
- /** Required Authentication Method References - ALL must be present (optional) */
22
- requiredAMR?: string[];
23
- /** Allowed Authentication Method References - at least ONE must be present (optional) */
24
- allowedAMR?: string[];
25
- }
26
- /**
27
- * Route configuration with 2FA requirements
28
- */
29
- export interface RouteConfig {
30
- /** Whether authentication is required */
31
- requiresAuth: boolean;
32
- /** 2FA requirements for this route */
33
- twoFactorRequirements?: TwoFactorRequirements;
34
- }
35
- /**
36
- * Common 2FA requirement presets
37
- *
38
- * @example
39
- * ```typescript
40
- * // Configure routes with different 2FA requirements
41
- * configureRoutes({
42
- * '/api/account/send-code': { requiresAuth: true, twoFactorRequirements: TwoFactorPresets.NONE },
43
- * '/api/admin/users': { requiresAuth: true, twoFactorRequirements: TwoFactorPresets.HIGH_SECURITY },
44
- * });
45
- * ```
46
- */
47
- export declare const TwoFactorPresets: {
48
- /**
49
- * No 2FA required - route is accessible with just authentication
50
- * Use for: 2FA onboarding routes, profile viewing, non-sensitive operations
51
- */
52
- readonly NONE: TwoFactorRequirements;
53
- /**
54
- * Basic 2FA - any authentication method acceptable
55
- * Use for: Standard protected routes
56
- */
57
- readonly BASIC: TwoFactorRequirements;
58
- /**
59
- * Standard 2FA - password + additional factor
60
- * Use for: Most application features
61
- */
62
- readonly STANDARD: TwoFactorRequirements;
63
- /**
64
- * High security - password + MFA required
65
- * Use for: Admin operations, settings changes
66
- */
67
- readonly HIGH_SECURITY: TwoFactorRequirements;
68
- /**
69
- * Admin operations - strict requirements
70
- * Use for: User management, system configuration
71
- */
72
- readonly ADMIN: TwoFactorRequirements;
73
- /**
74
- * Financial operations - maximum security
75
- * Use for: Payment processing, fund transfers
76
- */
77
- readonly FINANCIAL: TwoFactorRequirements;
78
- };
79
- /**
80
- * AMR (Authentication Methods Reference) values
81
- */
82
- export declare const AMRValues: {
83
- /** Password authentication */
84
- readonly PASSWORD: "pwd";
85
- /** Multi-factor authentication completed */
86
- readonly MFA: "mfa";
87
- /** SMS verification */
88
- readonly SMS: "sms";
89
- /** Time-based one-time password (authenticator app) */
90
- readonly TOTP: "totp";
91
- /** One-time password (generic) */
92
- readonly OTP: "otp";
93
- /** Email verification */
94
- readonly EMAIL: "email";
95
- /** Hardware key */
96
- readonly HARDWARE_KEY: "hwk";
97
- /** Biometric */
98
- readonly BIOMETRIC: "bio";
99
- };
100
- /**
101
- * ACR (Authentication Context Class Reference) levels
102
- */
103
- export declare const ACRLevels: {
104
- /** No authentication */
105
- readonly NONE: "0";
106
- /** Single factor (password only) */
107
- readonly SINGLE_FACTOR: "1";
108
- /** Multi-factor authentication */
109
- readonly MULTI_FACTOR: "2";
110
- /** Hardware-backed MFA */
111
- readonly HARDWARE_MFA: "3";
112
- /** Maximum assurance (hardware + biometric) */
113
- readonly MAXIMUM: "4";
114
- };
115
- /**
116
- * Validate AMR claims against requirements
117
- */
118
- export declare function validateAMR(actualAMR: string[], requirements: TwoFactorRequirements): boolean;
119
- /**
120
- * Validate ACR level against requirements
121
- */
122
- export declare function validateACR(actualACR: string, minACR?: string): boolean;
123
- /**
124
- * Check if 2FA requirements are met
125
- */
126
- export declare function checkTwoFactorRequirements(requirements: TwoFactorRequirements, sessionStatus: {
127
- twoFactorComplete?: boolean;
128
- authenticationMethods?: string[];
129
- authenticationLevel?: string;
130
- }): {
131
- satisfied: boolean;
132
- reason?: string;
133
- };
134
- export default TwoFactorPresets;
@@ -1,175 +0,0 @@
1
- "use strict";
2
- /**
3
- * Two-Factor Authentication Presets for MVP Middleware
4
- *
5
- * Provides granular control over 2FA requirements per route.
6
- * Allows routes to require authentication but NOT require 2FA completion,
7
- * which is essential for 2FA onboarding flows.
8
- *
9
- * Ported from website-membership's TwoFactorPresets pattern.
10
- *
11
- * @version 2.6.29
12
- * @since auth-ready-v2
13
- */
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.ACRLevels = exports.AMRValues = exports.TwoFactorPresets = void 0;
16
- exports.validateAMR = validateAMR;
17
- exports.validateACR = validateACR;
18
- exports.checkTwoFactorRequirements = checkTwoFactorRequirements;
19
- /**
20
- * Common 2FA requirement presets
21
- *
22
- * @example
23
- * ```typescript
24
- * // Configure routes with different 2FA requirements
25
- * configureRoutes({
26
- * '/api/account/send-code': { requiresAuth: true, twoFactorRequirements: TwoFactorPresets.NONE },
27
- * '/api/admin/users': { requiresAuth: true, twoFactorRequirements: TwoFactorPresets.HIGH_SECURITY },
28
- * });
29
- * ```
30
- */
31
- exports.TwoFactorPresets = {
32
- /**
33
- * No 2FA required - route is accessible with just authentication
34
- * Use for: 2FA onboarding routes, profile viewing, non-sensitive operations
35
- */
36
- NONE: {
37
- requires2FA: false
38
- },
39
- /**
40
- * Basic 2FA - any authentication method acceptable
41
- * Use for: Standard protected routes
42
- */
43
- BASIC: {
44
- requires2FA: true,
45
- minACR: '1',
46
- allowedAMR: ['pwd', 'mfa', 'sms', 'totp', 'otp']
47
- },
48
- /**
49
- * Standard 2FA - password + additional factor
50
- * Use for: Most application features
51
- */
52
- STANDARD: {
53
- requires2FA: true,
54
- minACR: '2',
55
- requiredAMR: ['pwd'],
56
- allowedAMR: ['pwd', 'mfa', 'sms', 'totp', 'otp']
57
- },
58
- /**
59
- * High security - password + MFA required
60
- * Use for: Admin operations, settings changes
61
- */
62
- HIGH_SECURITY: {
63
- requires2FA: true,
64
- minACR: '2',
65
- requiredAMR: ['pwd', 'mfa']
66
- },
67
- /**
68
- * Admin operations - strict requirements
69
- * Use for: User management, system configuration
70
- */
71
- ADMIN: {
72
- requires2FA: true,
73
- minACR: '3',
74
- requiredAMR: ['pwd', 'mfa']
75
- },
76
- /**
77
- * Financial operations - maximum security
78
- * Use for: Payment processing, fund transfers
79
- */
80
- FINANCIAL: {
81
- requires2FA: true,
82
- minACR: '4',
83
- requiredAMR: ['pwd', 'mfa', 'totp']
84
- }
85
- };
86
- /**
87
- * AMR (Authentication Methods Reference) values
88
- */
89
- exports.AMRValues = {
90
- /** Password authentication */
91
- PASSWORD: 'pwd',
92
- /** Multi-factor authentication completed */
93
- MFA: 'mfa',
94
- /** SMS verification */
95
- SMS: 'sms',
96
- /** Time-based one-time password (authenticator app) */
97
- TOTP: 'totp',
98
- /** One-time password (generic) */
99
- OTP: 'otp',
100
- /** Email verification */
101
- EMAIL: 'email',
102
- /** Hardware key */
103
- HARDWARE_KEY: 'hwk',
104
- /** Biometric */
105
- BIOMETRIC: 'bio'
106
- };
107
- /**
108
- * ACR (Authentication Context Class Reference) levels
109
- */
110
- exports.ACRLevels = {
111
- /** No authentication */
112
- NONE: '0',
113
- /** Single factor (password only) */
114
- SINGLE_FACTOR: '1',
115
- /** Multi-factor authentication */
116
- MULTI_FACTOR: '2',
117
- /** Hardware-backed MFA */
118
- HARDWARE_MFA: '3',
119
- /** Maximum assurance (hardware + biometric) */
120
- MAXIMUM: '4'
121
- };
122
- /**
123
- * Validate AMR claims against requirements
124
- */
125
- function validateAMR(actualAMR, requirements) {
126
- // If no AMR requirements, valid
127
- if (!requirements.requiredAMR?.length && !requirements.allowedAMR?.length) {
128
- return true;
129
- }
130
- // If required methods specified, all must be present
131
- if (requirements.requiredAMR && requirements.requiredAMR.length > 0) {
132
- return requirements.requiredAMR.every(method => actualAMR.includes(method));
133
- }
134
- // If allowed methods specified, at least one must be present
135
- if (requirements.allowedAMR && requirements.allowedAMR.length > 0) {
136
- return actualAMR.some(method => requirements.allowedAMR.includes(method));
137
- }
138
- return true;
139
- }
140
- /**
141
- * Validate ACR level against requirements
142
- */
143
- function validateACR(actualACR, minACR) {
144
- if (!minACR) {
145
- return true;
146
- }
147
- const actualLevel = parseInt(actualACR, 10) || 0;
148
- const minLevel = parseInt(minACR, 10) || 1;
149
- return actualLevel >= minLevel;
150
- }
151
- /**
152
- * Check if 2FA requirements are met
153
- */
154
- function checkTwoFactorRequirements(requirements, sessionStatus) {
155
- // If 2FA not required, always satisfied
156
- if (!requirements.requires2FA) {
157
- return { satisfied: true };
158
- }
159
- // Check if 2FA is complete
160
- if (!sessionStatus.twoFactorComplete) {
161
- return { satisfied: false, reason: '2FA not completed' };
162
- }
163
- // Check AMR if specified
164
- const amr = sessionStatus.authenticationMethods || [];
165
- if (!validateAMR(amr, requirements)) {
166
- return { satisfied: false, reason: 'AMR requirements not met' };
167
- }
168
- // Check ACR if specified
169
- const acr = sessionStatus.authenticationLevel || '0';
170
- if (!validateACR(acr, requirements.minACR)) {
171
- return { satisfied: false, reason: 'ACR level insufficient' };
172
- }
173
- return { satisfied: true };
174
- }
175
- exports.default = exports.TwoFactorPresets;
@@ -1,17 +0,0 @@
1
- export interface DecodedAccessToken {
2
- iss: string;
3
- aud: string;
4
- sub: string;
5
- jti: string;
6
- iat: number;
7
- nbf: number;
8
- exp: number;
9
- user_id: string;
10
- client_id: string;
11
- token_type: string;
12
- scope: string;
13
- roles: string[];
14
- amr: string[];
15
- acr: string;
16
- [key: string]: any;
17
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,122 +0,0 @@
1
- /**
2
- * Session Model - Redis Session Data Structure
3
- *
4
- * This is the single source of truth for session data stored in Redis.
5
- * The session contains all authentication state - the JWT cookie only
6
- * stores the session ID (redisSessionId).
7
- *
8
- * FIELD NAMING CONVENTIONS:
9
- * - idp* prefix: Tokens from PayEz IDP (identity provider)
10
- * - oauth* prefix: Tokens from external OAuth providers (Google, etc.)
11
- * - mfa* prefix: Multi-factor authentication related fields
12
- *
13
- * @version 2.0.0 - Normalized field names
14
- * @since auth-refactor-2026-01
15
- */
16
- /**
17
- * Session data stored in Redis.
18
- *
19
- * This interface uses normalized field names for clarity.
20
- * All tokens and user data live here - the browser only gets the session ID.
21
- */
22
- export interface SessionData {
23
- /** User ID from IDP (sub claim) */
24
- userId: string;
25
- /** User's email address */
26
- email: string;
27
- /** Display name (from OAuth profile or IDP) */
28
- name?: string;
29
- /** User's roles/permissions */
30
- roles: string[];
31
- /** IDP access token (JWT) - used for API calls to PayEz services */
32
- idpAccessToken?: string;
33
- /** IDP refresh token - used to get new access tokens */
34
- idpRefreshToken?: string;
35
- /** When the IDP access token expires (Unix timestamp ms) */
36
- idpAccessTokenExpires: number;
37
- /** When the IDP refresh token expires (Unix timestamp ms) */
38
- idpRefreshTokenExpires?: number;
39
- /** Decoded IDP access token claims (for quick access without re-decoding) */
40
- decodedAccessToken?: any;
41
- /**
42
- * Bearer Key ID (kid from JWT header).
43
- * Identifies which IDP signing key was used for this token.
44
- * CRITICAL: This is from the JWT HEADER, not client_id from payload.
45
- */
46
- bearerKeyId?: string;
47
- /** Whether MFA has been verified for this session */
48
- mfaVerified: boolean;
49
- /** The MFA method used (email, sms, totp) */
50
- mfaMethod?: 'email' | 'sms' | 'totp';
51
- /** When MFA was completed (Unix timestamp ms) */
52
- mfaCompletedAt?: number;
53
- /** When MFA verification expires (Unix timestamp ms) */
54
- mfaExpiresAt?: number;
55
- /** How long MFA is valid in hours */
56
- mfaValidityHours?: number;
57
- /** Authentication methods from token (amr claim) */
58
- authenticationMethods?: string[];
59
- /** Authentication level from token (acr claim) */
60
- authenticationLevel?: string;
61
- /** Which OAuth provider was used (google, apple, microsoft, etc.) */
62
- oauthProvider?: string;
63
- /** Access token from OAuth provider */
64
- oauthProviderToken?: string;
65
- /** Refresh token from OAuth provider */
66
- oauthProviderRefreshToken?: string;
67
- /** IDP client ID this user belongs to */
68
- idpClientId?: string;
69
- /** Merchant ID (typically same as client ID) */
70
- merchantId?: string;
71
- /**
72
- * Allow any additional fields for backward compatibility.
73
- * During migration, old sessions may have legacy field names.
74
- */
75
- [key: string]: any;
76
- }
77
- /**
78
- * Session model class for working with session data.
79
- *
80
- * Provides typed access to session fields with normalized names.
81
- */
82
- export declare class SessionModel {
83
- userId: string;
84
- email: string;
85
- name?: string;
86
- roles: string[];
87
- idpAccessToken?: string;
88
- idpRefreshToken?: string;
89
- idpAccessTokenExpires: number;
90
- idpRefreshTokenExpires?: number;
91
- decodedAccessToken?: any;
92
- bearerKeyId?: string;
93
- mfaVerified: boolean;
94
- mfaMethod?: 'email' | 'sms' | 'totp';
95
- mfaCompletedAt?: number;
96
- mfaExpiresAt?: number;
97
- mfaValidityHours?: number;
98
- authenticationMethods?: string[];
99
- authenticationLevel?: string;
100
- oauthProvider?: string;
101
- oauthProviderToken?: string;
102
- oauthProviderRefreshToken?: string;
103
- idpClientId?: string;
104
- merchantId?: string;
105
- constructor(data: SessionData);
106
- /**
107
- * Check if the IDP access token has expired.
108
- */
109
- isAccessTokenExpired(): boolean;
110
- /**
111
- * Check if the IDP refresh token has expired.
112
- */
113
- isRefreshTokenExpired(): boolean;
114
- /**
115
- * Check if MFA has expired.
116
- */
117
- isMfaExpired(): boolean;
118
- /**
119
- * Convert to plain object for storage.
120
- */
121
- toJSON(): SessionData;
122
- }