@payez/next-mvp 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (654) hide show
  1. package/README.md +782 -0
  2. package/dist/api/auth-handler.d.ts +67 -0
  3. package/dist/api/auth-handler.js +397 -0
  4. package/dist/api/index.d.ts +10 -0
  5. package/dist/api/index.js +19 -0
  6. package/dist/api-handlers/account/change-password.d.ts +9 -0
  7. package/dist/api-handlers/account/change-password.js +112 -0
  8. package/dist/api-handlers/account/masked-info.d.ts +2 -0
  9. package/dist/api-handlers/account/masked-info.js +41 -0
  10. package/dist/api-handlers/account/profile.d.ts +3 -0
  11. package/dist/api-handlers/account/profile.js +63 -0
  12. package/dist/api-handlers/account/recovery/initiate.d.ts +2 -0
  13. package/dist/api-handlers/account/recovery/initiate.js +26 -0
  14. package/dist/api-handlers/account/recovery/send-code.d.ts +2 -0
  15. package/dist/api-handlers/account/recovery/send-code.js +28 -0
  16. package/dist/api-handlers/account/recovery/verify-code.d.ts +2 -0
  17. package/dist/api-handlers/account/recovery/verify-code.js +28 -0
  18. package/dist/api-handlers/account/reset-password.d.ts +2 -0
  19. package/dist/api-handlers/account/reset-password.js +26 -0
  20. package/dist/api-handlers/account/send-code.d.ts +24 -0
  21. package/dist/api-handlers/account/send-code.js +60 -0
  22. package/dist/api-handlers/account/update-phone.d.ts +27 -0
  23. package/dist/api-handlers/account/update-phone.js +64 -0
  24. package/dist/api-handlers/account/validate-password.d.ts +17 -0
  25. package/dist/api-handlers/account/validate-password.js +81 -0
  26. package/dist/api-handlers/account/verify-email.d.ts +26 -0
  27. package/dist/api-handlers/account/verify-email.js +106 -0
  28. package/dist/api-handlers/account/verify-sms.d.ts +26 -0
  29. package/dist/api-handlers/account/verify-sms.js +106 -0
  30. package/dist/api-handlers/admin/analytics.d.ts +20 -0
  31. package/dist/api-handlers/admin/analytics.js +379 -0
  32. package/dist/api-handlers/admin/audit.d.ts +20 -0
  33. package/dist/api-handlers/admin/audit.js +214 -0
  34. package/dist/api-handlers/admin/index.d.ts +21 -0
  35. package/dist/api-handlers/admin/index.js +41 -0
  36. package/dist/api-handlers/admin/redis-sessions.d.ts +36 -0
  37. package/dist/api-handlers/admin/redis-sessions.js +204 -0
  38. package/dist/api-handlers/admin/sessions.d.ts +21 -0
  39. package/dist/api-handlers/admin/sessions.js +284 -0
  40. package/dist/api-handlers/admin/site-logs.d.ts +46 -0
  41. package/dist/api-handlers/admin/site-logs.js +318 -0
  42. package/dist/api-handlers/admin/users.d.ts +20 -0
  43. package/dist/api-handlers/admin/users.js +222 -0
  44. package/dist/api-handlers/admin/vibe-data.d.ts +80 -0
  45. package/dist/api-handlers/admin/vibe-data.js +268 -0
  46. package/dist/api-handlers/anon/preferences.d.ts +37 -0
  47. package/dist/api-handlers/anon/preferences.js +96 -0
  48. package/dist/api-handlers/auth/jwks.d.ts +2 -0
  49. package/dist/api-handlers/auth/jwks.js +24 -0
  50. package/dist/api-handlers/auth/login.d.ts +42 -0
  51. package/dist/api-handlers/auth/login.js +178 -0
  52. package/dist/api-handlers/auth/refresh.d.ts +74 -0
  53. package/dist/api-handlers/auth/refresh.js +635 -0
  54. package/dist/api-handlers/auth/signout.d.ts +37 -0
  55. package/dist/api-handlers/auth/signout.js +187 -0
  56. package/dist/api-handlers/auth/status.d.ts +8 -0
  57. package/dist/api-handlers/auth/status.js +26 -0
  58. package/dist/api-handlers/auth/update-session.d.ts +37 -0
  59. package/dist/api-handlers/auth/update-session.js +95 -0
  60. package/dist/api-handlers/auth/validate.d.ts +6 -0
  61. package/dist/api-handlers/auth/validate.js +43 -0
  62. package/dist/api-handlers/auth/verify-code.d.ts +43 -0
  63. package/dist/api-handlers/auth/verify-code.js +94 -0
  64. package/dist/api-handlers/session/refresh-viability.d.ts +14 -0
  65. package/dist/api-handlers/session/refresh-viability.js +39 -0
  66. package/dist/api-handlers/session/viability.d.ts +13 -0
  67. package/dist/api-handlers/session/viability.js +146 -0
  68. package/dist/api-handlers/test/force-expire.d.ts +23 -0
  69. package/dist/api-handlers/test/force-expire.js +65 -0
  70. package/dist/auth/auth-decision.d.ts +39 -0
  71. package/dist/auth/auth-decision.js +182 -0
  72. package/dist/auth/auth-options.d.ts +57 -0
  73. package/dist/auth/auth-options.js +213 -0
  74. package/dist/auth/callbacks/index.d.ts +6 -0
  75. package/dist/auth/callbacks/index.js +12 -0
  76. package/dist/auth/callbacks/jwt.d.ts +45 -0
  77. package/dist/auth/callbacks/jwt.js +305 -0
  78. package/dist/auth/callbacks/session.d.ts +60 -0
  79. package/dist/auth/callbacks/session.js +170 -0
  80. package/dist/auth/callbacks/signin.d.ts +23 -0
  81. package/dist/auth/callbacks/signin.js +44 -0
  82. package/dist/auth/events/index.d.ts +4 -0
  83. package/dist/auth/events/index.js +8 -0
  84. package/dist/auth/events/signout.d.ts +17 -0
  85. package/dist/auth/events/signout.js +32 -0
  86. package/dist/auth/providers/credentials.d.ts +32 -0
  87. package/dist/auth/providers/credentials.js +223 -0
  88. package/dist/auth/providers/index.d.ts +5 -0
  89. package/dist/auth/providers/index.js +21 -0
  90. package/dist/auth/providers/oauth.d.ts +26 -0
  91. package/dist/auth/providers/oauth.js +105 -0
  92. package/dist/auth/route-config.d.ts +66 -0
  93. package/dist/auth/route-config.js +190 -0
  94. package/dist/auth/types/auth-types.d.ts +417 -0
  95. package/dist/auth/types/auth-types.js +53 -0
  96. package/dist/auth/types/index.d.ts +6 -0
  97. package/dist/auth/types/index.js +22 -0
  98. package/dist/auth/unauthenticated-routes.d.ts +1 -0
  99. package/dist/auth/unauthenticated-routes.js +19 -0
  100. package/dist/auth/utils/idp-client.d.ts +94 -0
  101. package/dist/auth/utils/idp-client.js +383 -0
  102. package/dist/auth/utils/index.d.ts +5 -0
  103. package/dist/auth/utils/index.js +21 -0
  104. package/dist/auth/utils/token-utils.d.ts +84 -0
  105. package/dist/auth/utils/token-utils.js +219 -0
  106. package/dist/client/AuthContext.d.ts +19 -0
  107. package/dist/client/AuthContext.js +112 -0
  108. package/dist/client/fetch-with-auth.d.ts +11 -0
  109. package/dist/client/fetch-with-auth.js +44 -0
  110. package/dist/client/fetchWithSession.d.ts +3 -0
  111. package/dist/client/fetchWithSession.js +24 -0
  112. package/dist/client/index.d.ts +9 -0
  113. package/dist/client/index.js +20 -0
  114. package/dist/client/useAnonSession.d.ts +36 -0
  115. package/dist/client/useAnonSession.js +99 -0
  116. package/dist/components/SessionSync.d.ts +13 -0
  117. package/dist/components/SessionSync.js +119 -0
  118. package/dist/components/SignalRHealthCheck.d.ts +10 -0
  119. package/dist/components/SignalRHealthCheck.js +97 -0
  120. package/dist/components/account/UserAvatarMenu.d.ts +20 -0
  121. package/dist/components/account/UserAvatarMenu.js +80 -0
  122. package/dist/components/account/index.d.ts +7 -0
  123. package/dist/components/account/index.js +10 -0
  124. package/dist/components/admin/AlertSettingsTab.d.ts +48 -0
  125. package/dist/components/admin/AlertSettingsTab.js +351 -0
  126. package/dist/components/admin/AnalyticsTab.d.ts +22 -0
  127. package/dist/components/admin/AnalyticsTab.js +167 -0
  128. package/dist/components/admin/DataBrowserTab.d.ts +19 -0
  129. package/dist/components/admin/DataBrowserTab.js +252 -0
  130. package/dist/components/admin/LoggingSettingsTab.d.ts +73 -0
  131. package/dist/components/admin/LoggingSettingsTab.js +339 -0
  132. package/dist/components/admin/SessionsTab.d.ts +37 -0
  133. package/dist/components/admin/SessionsTab.js +165 -0
  134. package/dist/components/admin/StatsTab.d.ts +53 -0
  135. package/dist/components/admin/StatsTab.js +161 -0
  136. package/dist/components/admin/VibeAdminContext.d.ts +32 -0
  137. package/dist/components/admin/VibeAdminContext.js +38 -0
  138. package/dist/components/admin/VibeAdminLayout.d.ts +11 -0
  139. package/dist/components/admin/VibeAdminLayout.js +69 -0
  140. package/dist/components/admin/index.d.ts +29 -0
  141. package/dist/components/admin/index.js +44 -0
  142. package/dist/components/auth/FederatedAuthSection.d.ts +8 -0
  143. package/dist/components/auth/FederatedAuthSection.js +45 -0
  144. package/dist/components/auth/ModeAwareLoginPage.d.ts +10 -0
  145. package/dist/components/auth/ModeAwareLoginPage.js +42 -0
  146. package/dist/components/auth/ModeAwareSignupPage.d.ts +9 -0
  147. package/dist/components/auth/ModeAwareSignupPage.js +78 -0
  148. package/dist/components/auth/TraditionalAuthSection.d.ts +14 -0
  149. package/dist/components/auth/TraditionalAuthSection.js +20 -0
  150. package/dist/components/recovery/CompleteStep.d.ts +5 -0
  151. package/dist/components/recovery/CompleteStep.js +8 -0
  152. package/dist/components/recovery/InitiateRecoveryStep.d.ts +8 -0
  153. package/dist/components/recovery/InitiateRecoveryStep.js +20 -0
  154. package/dist/components/recovery/SelectMethodStep.d.ts +8 -0
  155. package/dist/components/recovery/SelectMethodStep.js +8 -0
  156. package/dist/components/recovery/SetPasswordStep.d.ts +6 -0
  157. package/dist/components/recovery/SetPasswordStep.js +20 -0
  158. package/dist/components/recovery/VerifyCodeStep.d.ts +10 -0
  159. package/dist/components/recovery/VerifyCodeStep.js +24 -0
  160. package/dist/components/reserved/ReservedRecoveryWarning.d.ts +38 -0
  161. package/dist/components/reserved/ReservedRecoveryWarning.js +92 -0
  162. package/dist/components/reserved/ReservedStatusBox.d.ts +30 -0
  163. package/dist/components/reserved/ReservedStatusBox.js +71 -0
  164. package/dist/components/ui/BetaBadge.d.ts +29 -0
  165. package/dist/components/ui/BetaBadge.js +38 -0
  166. package/dist/components/ui/Footer.d.ts +37 -0
  167. package/dist/components/ui/Footer.js +41 -0
  168. package/dist/config/env.d.ts +66 -0
  169. package/dist/config/env.js +57 -0
  170. package/dist/config/logger.d.ts +57 -0
  171. package/dist/config/logger.js +73 -0
  172. package/dist/config/logging-config.d.ts +30 -0
  173. package/dist/config/logging-config.js +122 -0
  174. package/dist/config/unauthenticated-routes.d.ts +17 -0
  175. package/dist/config/unauthenticated-routes.js +24 -0
  176. package/dist/config/vibe-log-transport.d.ts +79 -0
  177. package/dist/config/vibe-log-transport.js +203 -0
  178. package/dist/edge/internal-api-url.d.ts +53 -0
  179. package/dist/edge/internal-api-url.js +63 -0
  180. package/dist/edge/middleware.d.ts +14 -0
  181. package/dist/edge/middleware.js +32 -0
  182. package/dist/hooks/useAuth.d.ts +23 -0
  183. package/dist/hooks/useAuth.js +81 -0
  184. package/dist/hooks/useAuthSettings.d.ts +59 -0
  185. package/dist/hooks/useAuthSettings.js +93 -0
  186. package/dist/hooks/useAvailableProviders.d.ts +45 -0
  187. package/dist/hooks/useAvailableProviders.js +108 -0
  188. package/dist/hooks/usePasswordValidation.d.ts +27 -0
  189. package/dist/hooks/usePasswordValidation.js +102 -0
  190. package/dist/hooks/useProfile.d.ts +15 -0
  191. package/dist/hooks/useProfile.js +59 -0
  192. package/dist/hooks/usePublicAuthSettings.d.ts +56 -0
  193. package/dist/hooks/usePublicAuthSettings.js +131 -0
  194. package/dist/hooks/useSessionExpiration.d.ts +57 -0
  195. package/dist/hooks/useSessionExpiration.js +72 -0
  196. package/dist/hooks/useViabilitySession.d.ts +75 -0
  197. package/dist/hooks/useViabilitySession.js +268 -0
  198. package/dist/index.d.ts +12 -0
  199. package/dist/index.js +54 -0
  200. package/dist/lib/anon-session.d.ts +74 -0
  201. package/dist/lib/anon-session.js +169 -0
  202. package/dist/lib/api-handler.d.ts +123 -0
  203. package/dist/lib/api-handler.js +478 -0
  204. package/dist/lib/app-slug.d.ts +95 -0
  205. package/dist/lib/app-slug.js +172 -0
  206. package/dist/lib/demo-mode.d.ts +6 -0
  207. package/dist/lib/demo-mode.js +16 -0
  208. package/dist/lib/geolocation.d.ts +64 -0
  209. package/dist/lib/geolocation.js +235 -0
  210. package/dist/lib/idp-client-config.d.ts +75 -0
  211. package/dist/lib/idp-client-config.js +351 -0
  212. package/dist/lib/idp-fetch.d.ts +14 -0
  213. package/dist/lib/idp-fetch.js +91 -0
  214. package/dist/lib/internal-api.d.ts +87 -0
  215. package/dist/lib/internal-api.js +122 -0
  216. package/dist/lib/jwt-decode-client.d.ts +10 -0
  217. package/dist/lib/jwt-decode-client.js +46 -0
  218. package/dist/lib/jwt-decode.d.ts +48 -0
  219. package/dist/lib/jwt-decode.js +57 -0
  220. package/dist/lib/nextauth-secret.d.ts +10 -0
  221. package/dist/lib/nextauth-secret.js +104 -0
  222. package/dist/lib/rate-limit-service.d.ts +23 -0
  223. package/dist/lib/rate-limit-service.js +6 -0
  224. package/dist/lib/redis.d.ts +5 -0
  225. package/dist/lib/redis.js +28 -0
  226. package/dist/lib/refresh-token-validator.d.ts +13 -0
  227. package/dist/lib/refresh-token-validator.js +117 -0
  228. package/dist/lib/roles.d.ts +145 -0
  229. package/dist/lib/roles.js +168 -0
  230. package/dist/lib/secret-validation.d.ts +4 -0
  231. package/dist/lib/secret-validation.js +14 -0
  232. package/dist/lib/session-store.d.ts +166 -0
  233. package/dist/lib/session-store.js +537 -0
  234. package/dist/lib/session.d.ts +21 -0
  235. package/dist/lib/session.js +26 -0
  236. package/dist/lib/site-logger.d.ts +214 -0
  237. package/dist/lib/site-logger.js +210 -0
  238. package/dist/lib/standardized-client-api.d.ts +161 -0
  239. package/dist/lib/standardized-client-api.js +786 -0
  240. package/dist/lib/startup-init.d.ts +40 -0
  241. package/dist/lib/startup-init.js +261 -0
  242. package/dist/lib/test-aware-get-token.d.ts +2 -0
  243. package/dist/lib/test-aware-get-token.js +81 -0
  244. package/dist/lib/token-expiry.d.ts +14 -0
  245. package/dist/lib/token-expiry.js +39 -0
  246. package/dist/lib/token-lifecycle.d.ts +52 -0
  247. package/dist/lib/token-lifecycle.js +398 -0
  248. package/dist/lib/types/api-responses.d.ts +128 -0
  249. package/dist/lib/types/api-responses.js +171 -0
  250. package/dist/lib/user-agent-parser.d.ts +50 -0
  251. package/dist/lib/user-agent-parser.js +220 -0
  252. package/dist/logging/api/admin-analytics.d.ts +3 -0
  253. package/dist/logging/api/admin-analytics.js +45 -0
  254. package/dist/logging/api/audit-log.d.ts +3 -0
  255. package/dist/logging/api/audit-log.js +52 -0
  256. package/dist/logging/components/AdminAnalyticsLayout.d.ts +10 -0
  257. package/dist/logging/components/AdminAnalyticsLayout.js +11 -0
  258. package/dist/logging/components/AuditLogViewer.d.ts +7 -0
  259. package/dist/logging/components/AuditLogViewer.js +51 -0
  260. package/dist/logging/components/ErrorMetricsCard.d.ts +7 -0
  261. package/dist/logging/components/ErrorMetricsCard.js +16 -0
  262. package/dist/logging/components/HealthMetricsCard.d.ts +7 -0
  263. package/dist/logging/components/HealthMetricsCard.js +19 -0
  264. package/dist/logging/hooks/useAdminAnalytics.d.ts +24 -0
  265. package/dist/logging/hooks/useAdminAnalytics.js +22 -0
  266. package/dist/logging/hooks/useAuditLog.d.ts +6 -0
  267. package/dist/logging/hooks/useAuditLog.js +25 -0
  268. package/dist/logging/hooks/useErrorMetrics.d.ts +6 -0
  269. package/dist/logging/hooks/useErrorMetrics.js +38 -0
  270. package/dist/logging/hooks/useHealthMetrics.d.ts +6 -0
  271. package/dist/logging/hooks/useHealthMetrics.js +41 -0
  272. package/dist/logging/index.d.ts +11 -0
  273. package/dist/logging/index.js +40 -0
  274. package/dist/logging/types/analytics.d.ts +68 -0
  275. package/dist/logging/types/analytics.js +3 -0
  276. package/dist/logging/types/audit.d.ts +29 -0
  277. package/dist/logging/types/audit.js +2 -0
  278. package/dist/logging/types/index.d.ts +2 -0
  279. package/dist/logging/types/index.js +19 -0
  280. package/dist/middleware/auth-decision.d.ts +33 -0
  281. package/dist/middleware/auth-decision.js +65 -0
  282. package/dist/middleware/create-middleware.d.ts +100 -0
  283. package/dist/middleware/create-middleware.js +445 -0
  284. package/dist/middleware/rbac-check.d.ts +44 -0
  285. package/dist/middleware/rbac-check.js +191 -0
  286. package/dist/middleware/twofa-presets.d.ts +134 -0
  287. package/dist/middleware/twofa-presets.js +175 -0
  288. package/dist/models/DecodedAccessToken.d.ts +17 -0
  289. package/dist/models/DecodedAccessToken.js +2 -0
  290. package/dist/models/SessionModel.d.ts +122 -0
  291. package/dist/models/SessionModel.js +136 -0
  292. package/dist/pages/admin-login/page.d.ts +31 -0
  293. package/dist/pages/admin-login/page.js +83 -0
  294. package/dist/pages/admin-roles/RolesAdminPage.d.ts +15 -0
  295. package/dist/pages/admin-roles/RolesAdminPage.js +78 -0
  296. package/dist/pages/admin-roles/index.d.ts +8 -0
  297. package/dist/pages/admin-roles/index.js +15 -0
  298. package/dist/pages/admin-roles/modals.d.ts +72 -0
  299. package/dist/pages/admin-roles/modals.js +154 -0
  300. package/dist/pages/client-admin/ClientSiteAdminPage.d.ts +79 -0
  301. package/dist/pages/client-admin/ClientSiteAdminPage.js +177 -0
  302. package/dist/pages/client-admin/index.d.ts +32 -0
  303. package/dist/pages/client-admin/index.js +37 -0
  304. package/dist/pages/login/page.d.ts +22 -0
  305. package/dist/pages/login/page.js +239 -0
  306. package/dist/pages/profile/EnhancedProfilePage.d.ts +13 -0
  307. package/dist/pages/profile/EnhancedProfilePage.js +150 -0
  308. package/dist/pages/profile/index.d.ts +8 -0
  309. package/dist/pages/profile/index.js +16 -0
  310. package/dist/pages/profile/page.d.ts +19 -0
  311. package/dist/pages/profile/page.js +47 -0
  312. package/dist/pages/profile/profile-patch.d.ts +1 -0
  313. package/dist/pages/profile/profile-patch.js +281 -0
  314. package/dist/pages/recovery/page.d.ts +1 -0
  315. package/dist/pages/recovery/page.js +142 -0
  316. package/dist/pages/roles/MyRolesPage.d.ts +24 -0
  317. package/dist/pages/roles/MyRolesPage.js +71 -0
  318. package/dist/pages/roles/components.d.ts +63 -0
  319. package/dist/pages/roles/components.js +108 -0
  320. package/dist/pages/roles/index.d.ts +8 -0
  321. package/dist/pages/roles/index.js +19 -0
  322. package/dist/pages/security/EnhancedSecurityPage.d.ts +14 -0
  323. package/dist/pages/security/EnhancedSecurityPage.js +248 -0
  324. package/dist/pages/security/index.d.ts +8 -0
  325. package/dist/pages/security/index.js +16 -0
  326. package/dist/pages/security/page.d.ts +21 -0
  327. package/dist/pages/security/page.js +212 -0
  328. package/dist/pages/security/security-patch.d.ts +1 -0
  329. package/dist/pages/security/security-patch.js +302 -0
  330. package/dist/pages/settings/EnhancedSettingsPage.d.ts +46 -0
  331. package/dist/pages/settings/EnhancedSettingsPage.js +231 -0
  332. package/dist/pages/settings/index.d.ts +8 -0
  333. package/dist/pages/settings/index.js +16 -0
  334. package/dist/pages/settings/page.d.ts +7 -0
  335. package/dist/pages/settings/page.js +26 -0
  336. package/dist/pages/showcase/ShowcasePage.d.ts +13 -0
  337. package/dist/pages/showcase/ShowcasePage.js +140 -0
  338. package/dist/pages/showcase/index.d.ts +12 -0
  339. package/dist/pages/showcase/index.js +17 -0
  340. package/dist/pages/test-env/EmergencyLogoutPage.d.ts +14 -0
  341. package/dist/pages/test-env/EmergencyLogoutPage.js +98 -0
  342. package/dist/pages/test-env/JwtInspectPage.d.ts +14 -0
  343. package/dist/pages/test-env/JwtInspectPage.js +114 -0
  344. package/dist/pages/test-env/RefreshTokenPage.d.ts +15 -0
  345. package/dist/pages/test-env/RefreshTokenPage.js +91 -0
  346. package/dist/pages/test-env/TestEnvPage.d.ts +13 -0
  347. package/dist/pages/test-env/TestEnvPage.js +49 -0
  348. package/dist/pages/test-env/index.d.ts +24 -0
  349. package/dist/pages/test-env/index.js +32 -0
  350. package/dist/pages/verify-code/page.d.ts +30 -0
  351. package/dist/pages/verify-code/page.js +408 -0
  352. package/dist/routes/account/index.d.ts +28 -0
  353. package/dist/routes/account/index.js +71 -0
  354. package/dist/routes/account/masked-info.d.ts +33 -0
  355. package/dist/routes/account/masked-info.js +39 -0
  356. package/dist/routes/account/send-code.d.ts +37 -0
  357. package/dist/routes/account/send-code.js +42 -0
  358. package/dist/routes/account/update-phone.d.ts +13 -0
  359. package/dist/routes/account/update-phone.js +17 -0
  360. package/dist/routes/account/verify-email.d.ts +38 -0
  361. package/dist/routes/account/verify-email.js +43 -0
  362. package/dist/routes/account/verify-sms.d.ts +38 -0
  363. package/dist/routes/account/verify-sms.js +43 -0
  364. package/dist/routes/auth/index.d.ts +19 -0
  365. package/dist/routes/auth/index.js +64 -0
  366. package/dist/routes/auth/logout.d.ts +31 -0
  367. package/dist/routes/auth/logout.js +113 -0
  368. package/dist/routes/auth/nextauth.d.ts +19 -0
  369. package/dist/routes/auth/nextauth.js +72 -0
  370. package/dist/routes/auth/refresh.d.ts +30 -0
  371. package/dist/routes/auth/refresh.js +51 -0
  372. package/dist/routes/auth/session.d.ts +72 -0
  373. package/dist/routes/auth/session.js +180 -0
  374. package/dist/routes/auth/settings.d.ts +25 -0
  375. package/dist/routes/auth/settings.js +55 -0
  376. package/dist/routes/auth/viability.d.ts +52 -0
  377. package/dist/routes/auth/viability.js +201 -0
  378. package/dist/routes/index.d.ts +12 -0
  379. package/dist/routes/index.js +54 -0
  380. package/dist/routes/session/index.d.ts +6 -0
  381. package/dist/routes/session/index.js +10 -0
  382. package/dist/routes/session/refresh-viability.d.ts +16 -0
  383. package/dist/routes/session/refresh-viability.js +20 -0
  384. package/dist/services/signalrActivityService.d.ts +44 -0
  385. package/dist/services/signalrActivityService.js +257 -0
  386. package/dist/stores/authStore.d.ts +154 -0
  387. package/dist/stores/authStore.js +1531 -0
  388. package/dist/theme/ThemeProvider.d.ts +14 -0
  389. package/dist/theme/ThemeProvider.js +28 -0
  390. package/dist/theme/default.d.ts +8 -0
  391. package/dist/theme/default.js +33 -0
  392. package/dist/theme/index.d.ts +15 -0
  393. package/dist/theme/index.js +25 -0
  394. package/dist/theme/types.d.ts +56 -0
  395. package/dist/theme/types.js +8 -0
  396. package/dist/theme/useTheme.d.ts +60 -0
  397. package/dist/theme/useTheme.js +63 -0
  398. package/dist/theme/utils.d.ts +13 -0
  399. package/dist/theme/utils.js +39 -0
  400. package/dist/types/api.d.ts +134 -0
  401. package/dist/types/api.js +44 -0
  402. package/dist/types/auth.d.ts +19 -0
  403. package/dist/types/auth.js +2 -0
  404. package/dist/types/logging.d.ts +42 -0
  405. package/dist/types/logging.js +2 -0
  406. package/dist/types/recovery.d.ts +48 -0
  407. package/dist/types/recovery.js +2 -0
  408. package/dist/types/security.d.ts +1 -0
  409. package/dist/types/security.js +2 -0
  410. package/dist/utils/api.d.ts +85 -0
  411. package/dist/utils/api.js +287 -0
  412. package/dist/utils/circuitBreaker.d.ts +43 -0
  413. package/dist/utils/circuitBreaker.js +91 -0
  414. package/dist/utils/error-message.d.ts +1 -0
  415. package/dist/utils/error-message.js +103 -0
  416. package/dist/utils/layout/reservedSpace.d.ts +59 -0
  417. package/dist/utils/layout/reservedSpace.js +102 -0
  418. package/dist/utils/logout.d.ts +14 -0
  419. package/dist/utils/logout.js +32 -0
  420. package/dist/vibe/client.d.ts +261 -0
  421. package/dist/vibe/client.js +445 -0
  422. package/dist/vibe/errors.d.ts +83 -0
  423. package/dist/vibe/errors.js +146 -0
  424. package/dist/vibe/generic.d.ts +234 -0
  425. package/dist/vibe/generic.js +369 -0
  426. package/dist/vibe/hooks/index.d.ts +169 -0
  427. package/dist/vibe/hooks/index.js +252 -0
  428. package/dist/vibe/index.d.ts +23 -0
  429. package/dist/vibe/index.js +67 -0
  430. package/dist/vibe/sessions.d.ts +161 -0
  431. package/dist/vibe/sessions.js +391 -0
  432. package/dist/vibe/types.d.ts +353 -0
  433. package/dist/vibe/types.js +315 -0
  434. package/package.json +855 -0
  435. package/scripts/check-internal-url-usage.sh +73 -0
  436. package/scripts/dev-broker.ps1 +35 -0
  437. package/scripts/dev-local.ps1 +45 -0
  438. package/src/api/auth-handler.ts +550 -0
  439. package/src/api/index.ts +18 -0
  440. package/src/api-handlers/account/change-password.ts +145 -0
  441. package/src/api-handlers/account/masked-info.ts +45 -0
  442. package/src/api-handlers/account/profile.ts +80 -0
  443. package/src/api-handlers/account/recovery/initiate.ts +23 -0
  444. package/src/api-handlers/account/recovery/send-code.ts +25 -0
  445. package/src/api-handlers/account/recovery/verify-code.ts +25 -0
  446. package/src/api-handlers/account/reset-password.ts +23 -0
  447. package/src/api-handlers/account/send-code.ts +76 -0
  448. package/src/api-handlers/account/update-phone.ts +79 -0
  449. package/src/api-handlers/account/validate-password.ts +118 -0
  450. package/src/api-handlers/account/verify-email.ts +125 -0
  451. package/src/api-handlers/account/verify-sms.ts +125 -0
  452. package/src/api-handlers/admin/analytics.ts +445 -0
  453. package/src/api-handlers/admin/audit.ts +225 -0
  454. package/src/api-handlers/admin/index.ts +59 -0
  455. package/src/api-handlers/admin/redis-sessions.ts +253 -0
  456. package/src/api-handlers/admin/sessions.ts +320 -0
  457. package/src/api-handlers/admin/site-logs.ts +367 -0
  458. package/src/api-handlers/admin/users.ts +244 -0
  459. package/src/api-handlers/admin/vibe-data.ts +326 -0
  460. package/src/api-handlers/anon/preferences.ts +123 -0
  461. package/src/api-handlers/auth/jwks.ts +20 -0
  462. package/src/api-handlers/auth/login.ts +240 -0
  463. package/src/api-handlers/auth/refresh.ts +687 -0
  464. package/src/api-handlers/auth/signout.ts +212 -0
  465. package/src/api-handlers/auth/status.ts +23 -0
  466. package/src/api-handlers/auth/update-session.ts +125 -0
  467. package/src/api-handlers/auth/validate.ts +44 -0
  468. package/src/api-handlers/auth/verify-code.ts +129 -0
  469. package/src/api-handlers/session/refresh-viability.ts +36 -0
  470. package/src/api-handlers/session/viability.ts +166 -0
  471. package/src/api-handlers/test/force-expire.ts +67 -0
  472. package/src/auth/auth-decision.ts +230 -0
  473. package/src/auth/auth-options.ts +237 -0
  474. package/src/auth/callbacks/index.ts +7 -0
  475. package/src/auth/callbacks/jwt.ts +382 -0
  476. package/src/auth/callbacks/session.ts +243 -0
  477. package/src/auth/callbacks/signin.ts +56 -0
  478. package/src/auth/events/index.ts +5 -0
  479. package/src/auth/events/signout.ts +33 -0
  480. package/src/auth/providers/credentials.ts +256 -0
  481. package/src/auth/providers/index.ts +6 -0
  482. package/src/auth/providers/oauth.ts +114 -0
  483. package/src/auth/route-config.ts +220 -0
  484. package/src/auth/types/auth-types.ts +555 -0
  485. package/src/auth/types/index.ts +7 -0
  486. package/src/auth/unauthenticated-routes.ts +3 -0
  487. package/src/auth/utils/idp-client.ts +444 -0
  488. package/src/auth/utils/index.ts +6 -0
  489. package/src/auth/utils/token-utils.ts +244 -0
  490. package/src/client/AuthContext.tsx +140 -0
  491. package/src/client/fetch-with-auth.ts +48 -0
  492. package/src/client/fetchWithSession.ts +21 -0
  493. package/src/client/index.ts +13 -0
  494. package/src/client/useAnonSession.ts +131 -0
  495. package/src/components/SessionSync.tsx +137 -0
  496. package/src/components/SignalRHealthCheck.tsx +131 -0
  497. package/src/components/account/UserAvatarMenu.tsx +217 -0
  498. package/src/components/account/index.ts +8 -0
  499. package/src/components/admin/AlertSettingsTab.tsx +728 -0
  500. package/src/components/admin/AnalyticsTab.tsx +703 -0
  501. package/src/components/admin/DataBrowserTab.tsx +505 -0
  502. package/src/components/admin/LoggingSettingsTab.tsx +665 -0
  503. package/src/components/admin/SessionsTab.tsx +414 -0
  504. package/src/components/admin/StatsTab.tsx +379 -0
  505. package/src/components/admin/VibeAdminContext.tsx +87 -0
  506. package/src/components/admin/VibeAdminLayout.tsx +185 -0
  507. package/src/components/admin/index.ts +59 -0
  508. package/src/components/auth/FederatedAuthSection.tsx +95 -0
  509. package/src/components/auth/ModeAwareLoginPage.tsx +135 -0
  510. package/src/components/auth/ModeAwareSignupPage.tsx +267 -0
  511. package/src/components/auth/TraditionalAuthSection.tsx +99 -0
  512. package/src/components/recovery/CompleteStep.tsx +36 -0
  513. package/src/components/recovery/InitiateRecoveryStep.tsx +68 -0
  514. package/src/components/recovery/SelectMethodStep.tsx +73 -0
  515. package/src/components/recovery/SetPasswordStep.tsx +97 -0
  516. package/src/components/recovery/VerifyCodeStep.tsx +90 -0
  517. package/src/components/reserved/ReservedRecoveryWarning.tsx +160 -0
  518. package/src/components/reserved/ReservedStatusBox.tsx +118 -0
  519. package/src/components/ui/BetaBadge.tsx +58 -0
  520. package/src/components/ui/Footer.tsx +93 -0
  521. package/src/config/env.ts +57 -0
  522. package/src/config/logger.ts +62 -0
  523. package/src/config/logging-config.ts +82 -0
  524. package/src/config/unauthenticated-routes.ts +19 -0
  525. package/src/config/vibe-log-transport.ts +250 -0
  526. package/src/edge/internal-api-url.ts +65 -0
  527. package/src/edge/middleware.ts +42 -0
  528. package/src/hooks/useAuth.ts +115 -0
  529. package/src/hooks/useAuthSettings.ts +97 -0
  530. package/src/hooks/useAvailableProviders.ts +118 -0
  531. package/src/hooks/usePasswordValidation.ts +127 -0
  532. package/src/hooks/useProfile.ts +75 -0
  533. package/src/hooks/usePublicAuthSettings.ts +149 -0
  534. package/src/hooks/useSessionExpiration.ts +102 -0
  535. package/src/hooks/useViabilitySession.ts +335 -0
  536. package/src/index.ts +63 -0
  537. package/src/lib/anon-session.ts +213 -0
  538. package/src/lib/api-handler.ts +625 -0
  539. package/src/lib/app-slug.ts +178 -0
  540. package/src/lib/demo-mode.ts +13 -0
  541. package/src/lib/geolocation.ts +265 -0
  542. package/src/lib/idp-client-config.ts +442 -0
  543. package/src/lib/idp-fetch.ts +101 -0
  544. package/src/lib/internal-api.ts +171 -0
  545. package/src/lib/jwt-decode-client.ts +45 -0
  546. package/src/lib/jwt-decode.ts +83 -0
  547. package/src/lib/nextauth-secret.ts +126 -0
  548. package/src/lib/rate-limit-service.ts +9 -0
  549. package/src/lib/redis.ts +27 -0
  550. package/src/lib/refresh-token-validator.ts +64 -0
  551. package/src/lib/roles.ts +177 -0
  552. package/src/lib/secret-validation.ts +8 -0
  553. package/src/lib/session-store.ts +637 -0
  554. package/src/lib/session.ts +34 -0
  555. package/src/lib/site-logger.ts +245 -0
  556. package/src/lib/standardized-client-api.ts +896 -0
  557. package/src/lib/startup-init.ts +247 -0
  558. package/src/lib/test-aware-get-token.ts +30 -0
  559. package/src/lib/token-expiry.ts +40 -0
  560. package/src/lib/token-lifecycle.ts +477 -0
  561. package/src/lib/types/api-responses.ts +336 -0
  562. package/src/lib/user-agent-parser.ts +252 -0
  563. package/src/logging/api/admin-analytics.ts +51 -0
  564. package/src/logging/api/audit-log.ts +53 -0
  565. package/src/logging/components/AdminAnalyticsLayout.tsx +49 -0
  566. package/src/logging/components/AuditLogViewer.tsx +125 -0
  567. package/src/logging/components/ErrorMetricsCard.tsx +98 -0
  568. package/src/logging/components/HealthMetricsCard.tsx +70 -0
  569. package/src/logging/hooks/useAdminAnalytics.ts +22 -0
  570. package/src/logging/hooks/useAuditLog.ts +24 -0
  571. package/src/logging/hooks/useErrorMetrics.ts +40 -0
  572. package/src/logging/hooks/useHealthMetrics.ts +44 -0
  573. package/src/logging/index.ts +18 -0
  574. package/src/logging/types/analytics.ts +81 -0
  575. package/src/logging/types/audit.ts +31 -0
  576. package/src/logging/types/index.ts +3 -0
  577. package/src/middleware/auth-decision.ts +43 -0
  578. package/src/middleware/create-middleware.ts +626 -0
  579. package/src/middleware/rbac-check.ts +244 -0
  580. package/src/middleware/twofa-presets.ts +224 -0
  581. package/src/models/DecodedAccessToken.ts +17 -0
  582. package/src/models/SessionModel.ts +258 -0
  583. package/src/pages/admin-login/page.tsx +229 -0
  584. package/src/pages/admin-roles/RolesAdminPage.tsx +357 -0
  585. package/src/pages/admin-roles/index.ts +9 -0
  586. package/src/pages/admin-roles/modals.tsx +469 -0
  587. package/src/pages/client-admin/ClientSiteAdminPage.tsx +380 -0
  588. package/src/pages/client-admin/index.ts +33 -0
  589. package/src/pages/login/page.tsx +463 -0
  590. package/src/pages/profile/EnhancedProfilePage.tsx +479 -0
  591. package/src/pages/profile/index.ts +9 -0
  592. package/src/pages/profile/page.tsx +166 -0
  593. package/src/pages/recovery/page.tsx +234 -0
  594. package/src/pages/roles/MyRolesPage.tsx +211 -0
  595. package/src/pages/roles/components.tsx +294 -0
  596. package/src/pages/roles/index.ts +17 -0
  597. package/src/pages/security/EnhancedSecurityPage.tsx +574 -0
  598. package/src/pages/security/index.ts +9 -0
  599. package/src/pages/security/page.tsx +507 -0
  600. package/src/pages/settings/EnhancedSettingsPage.tsx +642 -0
  601. package/src/pages/settings/index.ts +9 -0
  602. package/src/pages/settings/page.tsx +47 -0
  603. package/src/pages/showcase/ShowcasePage.tsx +530 -0
  604. package/src/pages/showcase/index.ts +13 -0
  605. package/src/pages/test-env/EmergencyLogoutPage.tsx +179 -0
  606. package/src/pages/test-env/JwtInspectPage.tsx +418 -0
  607. package/src/pages/test-env/RefreshTokenPage.tsx +155 -0
  608. package/src/pages/test-env/TestEnvPage.tsx +116 -0
  609. package/src/pages/test-env/index.ts +25 -0
  610. package/src/pages/verify-code/page.tsx +648 -0
  611. package/src/routes/account/index.ts +32 -0
  612. package/src/routes/account/masked-info.ts +37 -0
  613. package/src/routes/account/send-code.ts +40 -0
  614. package/src/routes/account/update-phone.ts +13 -0
  615. package/src/routes/account/verify-email.ts +41 -0
  616. package/src/routes/account/verify-sms.ts +41 -0
  617. package/src/routes/auth/index.ts +23 -0
  618. package/src/routes/auth/logout.ts +127 -0
  619. package/src/routes/auth/nextauth.ts +71 -0
  620. package/src/routes/auth/refresh.ts +54 -0
  621. package/src/routes/auth/session.ts +193 -0
  622. package/src/routes/auth/settings.ts +75 -0
  623. package/src/routes/auth/viability.ts +220 -0
  624. package/src/routes/index.ts +18 -0
  625. package/src/routes/session/index.ts +7 -0
  626. package/src/routes/session/refresh-viability.ts +17 -0
  627. package/src/services/signalrActivityService.ts +258 -0
  628. package/src/stores/authStore.ts +1904 -0
  629. package/src/templates/instrumentation.ts +41 -0
  630. package/src/theme/ThemeProvider.tsx +39 -0
  631. package/src/theme/default.ts +33 -0
  632. package/src/theme/index.ts +31 -0
  633. package/src/theme/types.ts +69 -0
  634. package/src/theme/useTheme.ts +57 -0
  635. package/src/theme/utils.ts +40 -0
  636. package/src/types/api.ts +13 -0
  637. package/src/types/auth.d.ts +15 -0
  638. package/src/types/auth.ts +22 -0
  639. package/src/types/logging.ts +11 -0
  640. package/src/types/next-auth.d.ts +15 -0
  641. package/src/types/recovery.ts +54 -0
  642. package/src/types/security.ts +1 -0
  643. package/src/utils/api.ts +353 -0
  644. package/src/utils/circuitBreaker.ts +40 -0
  645. package/src/utils/error-message.ts +108 -0
  646. package/src/utils/layout/reservedSpace.ts +124 -0
  647. package/src/utils/logout.ts +30 -0
  648. package/src/vibe/client.ts +590 -0
  649. package/src/vibe/errors.ts +185 -0
  650. package/src/vibe/generic.ts +429 -0
  651. package/src/vibe/hooks/index.ts +367 -0
  652. package/src/vibe/index.ts +121 -0
  653. package/src/vibe/sessions.ts +551 -0
  654. package/src/vibe/types.ts +577 -0
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Site Logger Utility
3
+ *
4
+ * Logs user activity events to the site_logs table via Redis buffer.
5
+ * Fire-and-forget - logging failures never break the app.
6
+ *
7
+ * Uses Redis queue (vibe:site-logs:pending) which is drained by
8
+ * DotNetPert's SiteLogDrainBackgroundService to Vibe site_logs table.
9
+ *
10
+ * @version 1.0
11
+ */
12
+ export type SiteLogLevel = 'debug' | 'info' | 'warn' | 'error';
13
+ export type SiteLogCategory = 'auth' | 'session' | 'navigation' | 'user_action' | 'page_view' | 'error' | 'api';
14
+ export interface SiteLogEntry {
15
+ level: SiteLogLevel;
16
+ category: SiteLogCategory;
17
+ message: string;
18
+ context?: Record<string, unknown>;
19
+ user_id?: string | number;
20
+ session_id?: string;
21
+ url?: string;
22
+ user_agent?: string;
23
+ ip_address?: string;
24
+ }
25
+ export interface SiteLoggerConfig {
26
+ app_slug?: string;
27
+ vibe_client_id?: string;
28
+ }
29
+ /**
30
+ * Configure the site logger with app-specific settings
31
+ */
32
+ export declare function configureSiteLogger(config: SiteLoggerConfig): void;
33
+ /**
34
+ * Log a site event to the site_logs table
35
+ * Fire-and-forget - never awaited in critical path
36
+ */
37
+ export declare function logSiteEvent(entry: SiteLogEntry): Promise<void>;
38
+ /**
39
+ * Helper to extract client IP from request headers
40
+ */
41
+ export declare function getClientIp(headers: Headers | Record<string, string | string[] | undefined>): string | null;
42
+ /**
43
+ * Pre-built event loggers for common auth events
44
+ */
45
+ export declare const siteEvents: {
46
+ loginSuccess: (opts: {
47
+ user_id: string | number;
48
+ session_id?: string;
49
+ method?: string;
50
+ provider?: string;
51
+ url?: string;
52
+ user_agent?: string;
53
+ ip_address?: string;
54
+ }) => void;
55
+ loginFailed: (opts: {
56
+ reason: string;
57
+ email?: string;
58
+ url?: string;
59
+ user_agent?: string;
60
+ ip_address?: string;
61
+ }) => void;
62
+ logout: (opts: {
63
+ user_id: string | number;
64
+ session_id?: string;
65
+ trigger?: "user" | "session_timeout" | "admin";
66
+ url?: string;
67
+ user_agent?: string;
68
+ ip_address?: string;
69
+ }) => void;
70
+ twoFactorSuccess: (opts: {
71
+ user_id: string | number;
72
+ session_id?: string;
73
+ method: "totp" | "sms" | "email";
74
+ url?: string;
75
+ user_agent?: string;
76
+ ip_address?: string;
77
+ }) => void;
78
+ twoFactorFailed: (opts: {
79
+ user_id?: string | number;
80
+ method: "totp" | "sms" | "email";
81
+ attempts?: number;
82
+ url?: string;
83
+ user_agent?: string;
84
+ ip_address?: string;
85
+ }) => void;
86
+ sessionCreated: (opts: {
87
+ user_id: string | number;
88
+ session_id: string;
89
+ device_type?: string;
90
+ user_agent?: string;
91
+ ip_address?: string;
92
+ }) => void;
93
+ adminAccess: (opts: {
94
+ user_id: string | number;
95
+ page: string;
96
+ session_id?: string;
97
+ user_agent?: string;
98
+ ip_address?: string;
99
+ }) => void;
100
+ pageView: (opts: {
101
+ url: string;
102
+ user_id?: string | number;
103
+ session_id?: string;
104
+ referrer?: string;
105
+ user_agent?: string;
106
+ ip_address?: string;
107
+ }) => void;
108
+ error: (opts: {
109
+ message: string;
110
+ error?: string;
111
+ stack?: string;
112
+ user_id?: string | number;
113
+ url?: string;
114
+ user_agent?: string;
115
+ ip_address?: string;
116
+ }) => void;
117
+ userAction: (opts: {
118
+ action: string;
119
+ target?: string;
120
+ user_id?: string | number;
121
+ session_id?: string;
122
+ url?: string;
123
+ user_agent?: string;
124
+ ip_address?: string;
125
+ }) => void;
126
+ };
127
+ declare const _default: {
128
+ logSiteEvent: typeof logSiteEvent;
129
+ getClientIp: typeof getClientIp;
130
+ siteEvents: {
131
+ loginSuccess: (opts: {
132
+ user_id: string | number;
133
+ session_id?: string;
134
+ method?: string;
135
+ provider?: string;
136
+ url?: string;
137
+ user_agent?: string;
138
+ ip_address?: string;
139
+ }) => void;
140
+ loginFailed: (opts: {
141
+ reason: string;
142
+ email?: string;
143
+ url?: string;
144
+ user_agent?: string;
145
+ ip_address?: string;
146
+ }) => void;
147
+ logout: (opts: {
148
+ user_id: string | number;
149
+ session_id?: string;
150
+ trigger?: "user" | "session_timeout" | "admin";
151
+ url?: string;
152
+ user_agent?: string;
153
+ ip_address?: string;
154
+ }) => void;
155
+ twoFactorSuccess: (opts: {
156
+ user_id: string | number;
157
+ session_id?: string;
158
+ method: "totp" | "sms" | "email";
159
+ url?: string;
160
+ user_agent?: string;
161
+ ip_address?: string;
162
+ }) => void;
163
+ twoFactorFailed: (opts: {
164
+ user_id?: string | number;
165
+ method: "totp" | "sms" | "email";
166
+ attempts?: number;
167
+ url?: string;
168
+ user_agent?: string;
169
+ ip_address?: string;
170
+ }) => void;
171
+ sessionCreated: (opts: {
172
+ user_id: string | number;
173
+ session_id: string;
174
+ device_type?: string;
175
+ user_agent?: string;
176
+ ip_address?: string;
177
+ }) => void;
178
+ adminAccess: (opts: {
179
+ user_id: string | number;
180
+ page: string;
181
+ session_id?: string;
182
+ user_agent?: string;
183
+ ip_address?: string;
184
+ }) => void;
185
+ pageView: (opts: {
186
+ url: string;
187
+ user_id?: string | number;
188
+ session_id?: string;
189
+ referrer?: string;
190
+ user_agent?: string;
191
+ ip_address?: string;
192
+ }) => void;
193
+ error: (opts: {
194
+ message: string;
195
+ error?: string;
196
+ stack?: string;
197
+ user_id?: string | number;
198
+ url?: string;
199
+ user_agent?: string;
200
+ ip_address?: string;
201
+ }) => void;
202
+ userAction: (opts: {
203
+ action: string;
204
+ target?: string;
205
+ user_id?: string | number;
206
+ session_id?: string;
207
+ url?: string;
208
+ user_agent?: string;
209
+ ip_address?: string;
210
+ }) => void;
211
+ };
212
+ configureSiteLogger: typeof configureSiteLogger;
213
+ };
214
+ export default _default;
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ /**
3
+ * Site Logger Utility
4
+ *
5
+ * Logs user activity events to the site_logs table via Redis buffer.
6
+ * Fire-and-forget - logging failures never break the app.
7
+ *
8
+ * Uses Redis queue (vibe:site-logs:pending) which is drained by
9
+ * DotNetPert's SiteLogDrainBackgroundService to Vibe site_logs table.
10
+ *
11
+ * @version 1.0
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.siteEvents = void 0;
15
+ exports.configureSiteLogger = configureSiteLogger;
16
+ exports.logSiteEvent = logSiteEvent;
17
+ exports.getClientIp = getClientIp;
18
+ const redis_1 = require("./redis");
19
+ // Redis key for site logs (separate from data_logs)
20
+ const REDIS_SITE_LOG_KEY = 'vibe:site-logs:pending';
21
+ const REDIS_LOG_TTL = 7 * 24 * 60 * 60; // 1 week
22
+ let _config = {};
23
+ /**
24
+ * Configure the site logger with app-specific settings
25
+ */
26
+ function configureSiteLogger(config) {
27
+ _config = { ..._config, ...config };
28
+ }
29
+ /**
30
+ * Log a site event to the site_logs table
31
+ * Fire-and-forget - never awaited in critical path
32
+ */
33
+ async function logSiteEvent(entry) {
34
+ try {
35
+ const redis = (0, redis_1.getRedis)();
36
+ const logRecord = JSON.stringify({
37
+ log_level: entry.level,
38
+ category: entry.category,
39
+ message: entry.message,
40
+ context: entry.context || {},
41
+ user_id: entry.user_id ? (typeof entry.user_id === 'number' ? entry.user_id : null) : null,
42
+ session_id: entry.session_id || null,
43
+ url: entry.url || null,
44
+ user_agent: entry.user_agent || null,
45
+ ip_address: entry.ip_address || null,
46
+ created_at: new Date().toISOString(),
47
+ app_slug: _config.app_slug || process.env.APP_SLUG || process.env.CLIENT_ID || 'unknown',
48
+ vibe_client_id: _config.vibe_client_id || process.env.VIBE_CLIENT_ID || '',
49
+ });
50
+ // Fire and forget - use .then().catch() to not block
51
+ console.log('[site-logger] Pushing to Redis:', REDIS_SITE_LOG_KEY, entry.category, entry.message);
52
+ redis.lpush(REDIS_SITE_LOG_KEY, logRecord).then((result) => {
53
+ console.log('[site-logger] Redis push success, queue length:', result);
54
+ redis.expire(REDIS_SITE_LOG_KEY, REDIS_LOG_TTL).catch(() => { });
55
+ }).catch(err => {
56
+ console.error('[site-logger] Redis push failed:', err.message);
57
+ });
58
+ }
59
+ catch (error) {
60
+ // Fail silently - logging should never break the app
61
+ console.error('[site-logger] Failed to log event:', error);
62
+ }
63
+ }
64
+ /**
65
+ * Helper to extract client IP from request headers
66
+ */
67
+ function getClientIp(headers) {
68
+ const getHeader = (name) => {
69
+ if (headers instanceof Headers) {
70
+ return headers.get(name);
71
+ }
72
+ const value = headers[name];
73
+ return Array.isArray(value) ? value[0] : value || null;
74
+ };
75
+ return (getHeader('x-forwarded-for')?.split(',')[0]?.trim() ||
76
+ getHeader('x-real-ip') ||
77
+ getHeader('cf-connecting-ip') ||
78
+ null);
79
+ }
80
+ /**
81
+ * Pre-built event loggers for common auth events
82
+ */
83
+ exports.siteEvents = {
84
+ loginSuccess: (opts) => {
85
+ logSiteEvent({
86
+ level: 'info',
87
+ category: 'auth',
88
+ message: 'User logged in',
89
+ context: { method: opts.method || 'password', provider: opts.provider },
90
+ user_id: opts.user_id,
91
+ session_id: opts.session_id,
92
+ url: opts.url || '/auth/login',
93
+ user_agent: opts.user_agent,
94
+ ip_address: opts.ip_address,
95
+ });
96
+ },
97
+ loginFailed: (opts) => {
98
+ logSiteEvent({
99
+ level: 'warn',
100
+ category: 'auth',
101
+ message: 'Login failed',
102
+ context: { reason: opts.reason, email: opts.email },
103
+ url: opts.url || '/auth/login',
104
+ user_agent: opts.user_agent,
105
+ ip_address: opts.ip_address,
106
+ });
107
+ },
108
+ logout: (opts) => {
109
+ logSiteEvent({
110
+ level: 'info',
111
+ category: 'auth',
112
+ message: 'User logged out',
113
+ context: { trigger: opts.trigger || 'user' },
114
+ user_id: opts.user_id,
115
+ session_id: opts.session_id,
116
+ url: opts.url || '/auth/logout',
117
+ user_agent: opts.user_agent,
118
+ ip_address: opts.ip_address,
119
+ });
120
+ },
121
+ twoFactorSuccess: (opts) => {
122
+ logSiteEvent({
123
+ level: 'info',
124
+ category: 'auth',
125
+ message: '2FA verified',
126
+ context: { method: opts.method },
127
+ user_id: opts.user_id,
128
+ session_id: opts.session_id,
129
+ url: opts.url || '/auth/2fa',
130
+ user_agent: opts.user_agent,
131
+ ip_address: opts.ip_address,
132
+ });
133
+ },
134
+ twoFactorFailed: (opts) => {
135
+ logSiteEvent({
136
+ level: 'warn',
137
+ category: 'auth',
138
+ message: '2FA verification failed',
139
+ context: { method: opts.method, attempts: opts.attempts },
140
+ user_id: opts.user_id,
141
+ url: opts.url || '/auth/2fa',
142
+ user_agent: opts.user_agent,
143
+ ip_address: opts.ip_address,
144
+ });
145
+ },
146
+ sessionCreated: (opts) => {
147
+ logSiteEvent({
148
+ level: 'info',
149
+ category: 'session',
150
+ message: 'Session created',
151
+ context: { device_type: opts.device_type },
152
+ user_id: opts.user_id,
153
+ session_id: opts.session_id,
154
+ user_agent: opts.user_agent,
155
+ ip_address: opts.ip_address,
156
+ });
157
+ },
158
+ adminAccess: (opts) => {
159
+ logSiteEvent({
160
+ level: 'info',
161
+ category: 'navigation',
162
+ message: 'Admin panel accessed',
163
+ context: { page: opts.page },
164
+ user_id: opts.user_id,
165
+ session_id: opts.session_id,
166
+ url: opts.page,
167
+ user_agent: opts.user_agent,
168
+ ip_address: opts.ip_address,
169
+ });
170
+ },
171
+ pageView: (opts) => {
172
+ logSiteEvent({
173
+ level: 'info',
174
+ category: 'page_view',
175
+ message: 'Page viewed',
176
+ context: { referrer: opts.referrer },
177
+ user_id: opts.user_id,
178
+ session_id: opts.session_id,
179
+ url: opts.url,
180
+ user_agent: opts.user_agent,
181
+ ip_address: opts.ip_address,
182
+ });
183
+ },
184
+ error: (opts) => {
185
+ logSiteEvent({
186
+ level: 'error',
187
+ category: 'error',
188
+ message: opts.message,
189
+ context: { error: opts.error, stack: opts.stack },
190
+ user_id: opts.user_id,
191
+ url: opts.url,
192
+ user_agent: opts.user_agent,
193
+ ip_address: opts.ip_address,
194
+ });
195
+ },
196
+ userAction: (opts) => {
197
+ logSiteEvent({
198
+ level: 'info',
199
+ category: 'user_action',
200
+ message: opts.action,
201
+ context: { target: opts.target },
202
+ user_id: opts.user_id,
203
+ session_id: opts.session_id,
204
+ url: opts.url,
205
+ user_agent: opts.user_agent,
206
+ ip_address: opts.ip_address,
207
+ });
208
+ },
209
+ };
210
+ exports.default = { logSiteEvent, getClientIp, siteEvents: exports.siteEvents, configureSiteLogger };
@@ -0,0 +1,161 @@
1
+ /**
2
+ * ERROR THROWN WHEN API RESPONSE FORMAT IS INVALID
3
+ * This means the API is NOT following our standardized format
4
+ */
5
+ export declare class ApiResponseFormatError extends Error {
6
+ readonly endpoint: string;
7
+ readonly rawResponse: unknown;
8
+ constructor(message: string, endpoint: string, rawResponse: unknown);
9
+ }
10
+ /**
11
+ * ERROR THROWN WHEN API RETURNS A STANDARDIZED ERROR RESPONSE
12
+ * This is a properly formatted error from the API
13
+ */
14
+ export declare class ApiBusinessLogicError extends Error {
15
+ readonly errorCode: string;
16
+ readonly operation: string;
17
+ readonly details?: unknown | undefined;
18
+ constructor(errorCode: string, message: string, operation: string, details?: unknown | undefined);
19
+ }
20
+ /**
21
+ * ERROR THROWN WHEN VALIDATION FAILS
22
+ * This is a properly formatted validation error from the API
23
+ */
24
+ export declare class ApiValidationError extends Error {
25
+ readonly operation: string;
26
+ readonly validationErrors: Record<string, string[]>;
27
+ readonly invalidValue?: unknown | undefined;
28
+ readonly primaryField?: string | undefined;
29
+ constructor(message: string, operation: string, validationErrors: Record<string, string[]>, invalidValue?: unknown | undefined, primaryField?: string | undefined);
30
+ }
31
+ /**
32
+ * ERROR THROWN WHEN NETWORK/HTTP ISSUES OCCUR
33
+ */
34
+ export declare class ApiNetworkError extends Error {
35
+ readonly status: number;
36
+ readonly endpoint: string;
37
+ constructor(message: string, status: number, endpoint: string);
38
+ }
39
+ /**
40
+ * SUCCESSFUL API CALL RESULT
41
+ * This is what gets returned to the calling code for successful operations
42
+ */
43
+ export interface ApiSuccessResult<TData> {
44
+ /** Always true for success */
45
+ success: true;
46
+ /** The actual data - NO NESTING! Direct access! */
47
+ data: TData;
48
+ /** Human-readable success message from API */
49
+ message: string;
50
+ /** Operation code for tracking/debugging */
51
+ operation_code: string;
52
+ /** Server timestamp (if provided) */
53
+ timestamp?: string;
54
+ }
55
+ /**
56
+ * SUCCESSFUL PAGED API CALL RESULT
57
+ * This is what gets returned for successful paged operations
58
+ */
59
+ export interface ApiPagedResult<TData> {
60
+ /** Always true for success */
61
+ success: true;
62
+ /** The actual data array - NO NESTING! Direct access! */
63
+ items: TData[];
64
+ /** Human-readable success message from API */
65
+ message: string;
66
+ /** Operation code for tracking/debugging */
67
+ operation_code: string;
68
+ /** Pagination information */
69
+ pagination: {
70
+ current_page: number;
71
+ total_pages: number;
72
+ page_size: number;
73
+ total_items: number;
74
+ has_next_page: boolean;
75
+ has_previous_page: boolean;
76
+ };
77
+ /** Server timestamp (if provided) */
78
+ timestamp?: string;
79
+ }
80
+ /**
81
+ * FAILED API CALL RESULT
82
+ * This is what gets returned to the calling code for failed operations
83
+ */
84
+ export interface ApiErrorResult {
85
+ /** Always false for errors */
86
+ success: false;
87
+ /** Standardized error code */
88
+ error_code: string;
89
+ /** Human-readable error message */
90
+ message: string;
91
+ /** Operation that failed */
92
+ operation: string;
93
+ /** Additional error details (if any) */
94
+ details?: unknown;
95
+ /** Validation errors (if any) */
96
+ validation_errors?: Record<string, string[]>;
97
+ /** Server-provided request identifier for tracing (only set on real errors) */
98
+ request_id?: string;
99
+ }
100
+ /** UNION TYPE FOR ALL POSSIBLE API RESULTS */
101
+ export type ApiResult<TData> = ApiSuccessResult<TData> | ApiPagedResult<TData> | ApiErrorResult;
102
+ declare class StandardizedClientApiService {
103
+ private baseUrl;
104
+ constructor();
105
+ /**
106
+ * MAKES HTTP REQUEST AND VALIDATES RESPONSE FORMAT
107
+ * This method ENFORCES standardized response format compliance
108
+ * Will throw ApiResponseFormatError if format is invalid
109
+ */
110
+ private makeRequest;
111
+ /**
112
+ * CONVERTS VALIDATED STANDARDIZED RESPONSE TO CLIENT RESULT
113
+ * This normalizes the response for client consumption
114
+ */
115
+ private convertToApiResult;
116
+ /**
117
+ * GET REQUEST - Returns typed result with direct data access
118
+ */
119
+ get<TData = unknown>(endpoint: string, sessionToken?: string): Promise<ApiResult<TData>>;
120
+ /**
121
+ * POST REQUEST - Returns typed result with direct data access
122
+ */
123
+ post<TData = unknown>(endpoint: string, data?: unknown, sessionToken?: string): Promise<ApiResult<TData>>;
124
+ /**
125
+ * PUT REQUEST - Returns typed result with direct data access
126
+ */
127
+ put<TData = unknown>(endpoint: string, data?: unknown, sessionToken?: string): Promise<ApiResult<TData>>;
128
+ /**
129
+ * DELETE REQUEST - Returns typed result with direct data access
130
+ */
131
+ delete<TData = unknown>(endpoint: string): Promise<ApiResult<TData>>;
132
+ }
133
+ export declare const standardizedApi: StandardizedClientApiService;
134
+ /**
135
+ * TYPE-SAFE SUCCESS CHECK
136
+ * Use this to check if API call was successful with proper type narrowing
137
+ */
138
+ export declare function isApiSuccess<TData>(result: ApiResult<TData>): result is ApiSuccessResult<TData>;
139
+ /**
140
+ * TYPE-SAFE PAGED SUCCESS CHECK
141
+ * Use this to check if API call was successful paged response with proper type narrowing
142
+ */
143
+ export declare function isApiPagedSuccess<TData>(result: ApiResult<TData>): result is ApiPagedResult<TData>;
144
+ /**
145
+ * TYPE-SAFE ERROR CHECK
146
+ * Use this to check if API call failed with proper type narrowing
147
+ */
148
+ export declare function isApiError<TData>(result: ApiResult<TData>): result is ApiErrorResult;
149
+ /**
150
+ * EXTRACT DATA FROM SUCCESS RESULT
151
+ * Use this to get the data from a successful API call
152
+ * Will throw if result is not successful
153
+ */
154
+ export declare function extractApiData<TData>(result: ApiResult<TData>): TData;
155
+ /**
156
+ * EXTRACT ITEMS FROM PAGED SUCCESS RESULT
157
+ * Use this to get the items array from a successful paged API call
158
+ * Will throw if result is not successful paged response
159
+ */
160
+ export declare function extractApiItems<TData>(result: ApiResult<TData>): TData[];
161
+ export {};