@adonis-agora/authkit-server 0.34.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 (389) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +158 -0
  3. package/build/assets/grafana/authkit-dashboard.json +118 -0
  4. package/build/commands/clients_create.d.ts +27 -0
  5. package/build/commands/clients_create.js +121 -0
  6. package/build/commands/commands.json +292 -0
  7. package/build/commands/configure.d.ts +2 -0
  8. package/build/commands/configure.js +45 -0
  9. package/build/commands/doctor.d.ts +10 -0
  10. package/build/commands/doctor.js +113 -0
  11. package/build/commands/eject.d.ts +11 -0
  12. package/build/commands/eject.js +96 -0
  13. package/build/commands/expire_scan.d.ts +28 -0
  14. package/build/commands/expire_scan.js +92 -0
  15. package/build/commands/import_users.d.ts +17 -0
  16. package/build/commands/import_users.js +80 -0
  17. package/build/commands/keys_rotate.d.ts +21 -0
  18. package/build/commands/keys_rotate.js +126 -0
  19. package/build/commands/main.d.ts +12 -0
  20. package/build/commands/main.js +38 -0
  21. package/build/commands/settings_get.d.ts +18 -0
  22. package/build/commands/settings_get.js +43 -0
  23. package/build/commands/settings_list.d.ts +17 -0
  24. package/build/commands/settings_list.js +39 -0
  25. package/build/commands/settings_set.d.ts +20 -0
  26. package/build/commands/settings_set.js +55 -0
  27. package/build/commands/settings_unset.d.ts +18 -0
  28. package/build/commands/settings_unset.js +46 -0
  29. package/build/commands/ui_preset.d.ts +4 -0
  30. package/build/commands/ui_preset.js +32 -0
  31. package/build/database/migrations/make_authkit_oidc_table.d.ts +6 -0
  32. package/build/database/migrations/make_authkit_oidc_table.js +19 -0
  33. package/build/host/ui/admin.html +29 -0
  34. package/build/host/views/account/apps.edge +59 -0
  35. package/build/host/views/account/confirm.edge +70 -0
  36. package/build/host/views/account/email-confirmed.edge +16 -0
  37. package/build/host/views/account/login.edge +33 -0
  38. package/build/host/views/account/mfa.edge +152 -0
  39. package/build/host/views/account/orgs.edge +58 -0
  40. package/build/host/views/account/security.edge +215 -0
  41. package/build/host/views/account/tokens.edge +75 -0
  42. package/build/host/views/consent.edge +20 -0
  43. package/build/host/views/forgot.edge +43 -0
  44. package/build/host/views/login.edge +251 -0
  45. package/build/host/views/maintenance.edge +32 -0
  46. package/build/host/views/mfa-challenge.edge +107 -0
  47. package/build/host/views/otp-unlock.edge +40 -0
  48. package/build/host/views/partials/styles.edge +2 -0
  49. package/build/host/views/reset.edge +30 -0
  50. package/build/host/views/signup.edge +62 -0
  51. package/build/host/views/verify-email.edge +17 -0
  52. package/build/index.d.ts +115 -0
  53. package/build/index.js +76 -0
  54. package/build/password/common_passwords.txt +10000 -0
  55. package/build/providers/authkit_server_provider.d.ts +27 -0
  56. package/build/providers/authkit_server_provider.js +242 -0
  57. package/build/src/accounts/account_store.d.ts +578 -0
  58. package/build/src/accounts/account_store.js +60 -0
  59. package/build/src/accounts/lucid_account_store.d.ts +156 -0
  60. package/build/src/accounts/lucid_account_store.js +294 -0
  61. package/build/src/accounts/lucid_store/core.d.ts +9 -0
  62. package/build/src/accounts/lucid_store/core.js +306 -0
  63. package/build/src/accounts/lucid_store/mfa.d.ts +15 -0
  64. package/build/src/accounts/lucid_store/mfa.js +108 -0
  65. package/build/src/accounts/lucid_store/organizations.d.ts +13 -0
  66. package/build/src/accounts/lucid_store/organizations.js +294 -0
  67. package/build/src/accounts/lucid_store/password_hygiene.d.ts +20 -0
  68. package/build/src/accounts/lucid_store/password_hygiene.js +130 -0
  69. package/build/src/accounts/lucid_store/provider_identity.d.ts +8 -0
  70. package/build/src/accounts/lucid_store/provider_identity.js +59 -0
  71. package/build/src/accounts/lucid_store/shared.d.ts +113 -0
  72. package/build/src/accounts/lucid_store/shared.js +130 -0
  73. package/build/src/accounts/lucid_store/status_profile.d.ts +34 -0
  74. package/build/src/accounts/lucid_store/status_profile.js +100 -0
  75. package/build/src/accounts/lucid_store/webauthn.d.ts +8 -0
  76. package/build/src/accounts/lucid_store/webauthn.js +140 -0
  77. package/build/src/accounts/lucid_stores.d.ts +45 -0
  78. package/build/src/accounts/lucid_stores.js +30 -0
  79. package/build/src/adapters/adapter_contract.d.ts +37 -0
  80. package/build/src/adapters/adapter_contract.js +1 -0
  81. package/build/src/adapters/database_adapter.d.ts +21 -0
  82. package/build/src/adapters/database_adapter.js +79 -0
  83. package/build/src/adapters/factory.d.ts +30 -0
  84. package/build/src/adapters/factory.js +43 -0
  85. package/build/src/adapters/redis_adapter.d.ts +24 -0
  86. package/build/src/adapters/redis_adapter.js +122 -0
  87. package/build/src/audit/audit_sink.d.ts +63 -0
  88. package/build/src/audit/audit_sink.js +1 -0
  89. package/build/src/audit/lucid_audit_sink.d.ts +10 -0
  90. package/build/src/audit/lucid_audit_sink.js +99 -0
  91. package/build/src/commands/expire_scan_command.d.ts +60 -0
  92. package/build/src/commands/expire_scan_command.js +229 -0
  93. package/build/src/commands/import_clients.d.ts +40 -0
  94. package/build/src/commands/import_clients.js +79 -0
  95. package/build/src/commands/import_users.d.ts +51 -0
  96. package/build/src/commands/import_users.js +94 -0
  97. package/build/src/commands/resolve_config.d.ts +13 -0
  98. package/build/src/commands/resolve_config.js +18 -0
  99. package/build/src/commands/settings_commands.d.ts +47 -0
  100. package/build/src/commands/settings_commands.js +270 -0
  101. package/build/src/controllers/oidc_callback_controller.d.ts +22 -0
  102. package/build/src/controllers/oidc_callback_controller.js +33 -0
  103. package/build/src/define_config.d.ts +772 -0
  104. package/build/src/define_config.js +351 -0
  105. package/build/src/doctor/checks.d.ts +197 -0
  106. package/build/src/doctor/checks.js +858 -0
  107. package/build/src/events/dispatcher.d.ts +45 -0
  108. package/build/src/events/dispatcher.js +117 -0
  109. package/build/src/host/account_api/account_api_controller.d.ts +245 -0
  110. package/build/src/host/account_api/account_api_controller.js +827 -0
  111. package/build/src/host/account_deletion_ops.d.ts +80 -0
  112. package/build/src/host/account_deletion_ops.js +118 -0
  113. package/build/src/host/account_deletion_service.d.ts +63 -0
  114. package/build/src/host/account_deletion_service.js +133 -0
  115. package/build/src/host/account_export_service.d.ts +76 -0
  116. package/build/src/host/account_export_service.js +140 -0
  117. package/build/src/host/account_home.d.ts +11 -0
  118. package/build/src/host/account_home.js +11 -0
  119. package/build/src/host/account_lockout.d.ts +86 -0
  120. package/build/src/host/account_lockout.js +185 -0
  121. package/build/src/host/active_org_cookie.d.ts +28 -0
  122. package/build/src/host/active_org_cookie.js +47 -0
  123. package/build/src/host/admin_api/admin_api_guard.d.ts +16 -0
  124. package/build/src/host/admin_api/admin_api_guard.js +59 -0
  125. package/build/src/host/admin_api/admin_orgs_service.d.ts +125 -0
  126. package/build/src/host/admin_api/admin_orgs_service.js +324 -0
  127. package/build/src/host/admin_api/admin_users_service.d.ts +163 -0
  128. package/build/src/host/admin_api/admin_users_service.js +308 -0
  129. package/build/src/host/admin_api/api_clients_controller.d.ts +54 -0
  130. package/build/src/host/admin_api/api_clients_controller.js +89 -0
  131. package/build/src/host/admin_api/api_keys_controller.d.ts +19 -0
  132. package/build/src/host/admin_api/api_keys_controller.js +36 -0
  133. package/build/src/host/admin_api/api_misc_controller.d.ts +19 -0
  134. package/build/src/host/admin_api/api_misc_controller.js +44 -0
  135. package/build/src/host/admin_api/api_orgs_controller.d.ts +108 -0
  136. package/build/src/host/admin_api/api_orgs_controller.js +189 -0
  137. package/build/src/host/admin_api/api_settings_controller.d.ts +55 -0
  138. package/build/src/host/admin_api/api_settings_controller.js +134 -0
  139. package/build/src/host/admin_api/api_users_controller.d.ts +108 -0
  140. package/build/src/host/admin_api/api_users_controller.js +187 -0
  141. package/build/src/host/admin_api/dto.d.ts +131 -0
  142. package/build/src/host/admin_api/dto.js +122 -0
  143. package/build/src/host/admin_api/token_verify_service.d.ts +34 -0
  144. package/build/src/host/admin_api/token_verify_service.js +74 -0
  145. package/build/src/host/admin_clients_service.d.ts +88 -0
  146. package/build/src/host/admin_clients_service.js +181 -0
  147. package/build/src/host/admin_console/admin_shell_controller.d.ts +27 -0
  148. package/build/src/host/admin_console/admin_shell_controller.js +167 -0
  149. package/build/src/host/admin_console/console_audit_controller.d.ts +17 -0
  150. package/build/src/host/admin_console/console_audit_controller.js +25 -0
  151. package/build/src/host/admin_console/console_clients_controller.d.ts +53 -0
  152. package/build/src/host/admin_console/console_clients_controller.js +102 -0
  153. package/build/src/host/admin_console/console_impersonation_controller.d.ts +23 -0
  154. package/build/src/host/admin_console/console_impersonation_controller.js +45 -0
  155. package/build/src/host/admin_console/console_keys_controller.d.ts +24 -0
  156. package/build/src/host/admin_console/console_keys_controller.js +41 -0
  157. package/build/src/host/admin_console/console_orgs_controller.d.ts +96 -0
  158. package/build/src/host/admin_console/console_orgs_controller.js +238 -0
  159. package/build/src/host/admin_console/console_overview_controller.d.ts +27 -0
  160. package/build/src/host/admin_console/console_overview_controller.js +44 -0
  161. package/build/src/host/admin_console/console_roles_controller.d.ts +31 -0
  162. package/build/src/host/admin_console/console_roles_controller.js +108 -0
  163. package/build/src/host/admin_console/console_sessions_controller.d.ts +91 -0
  164. package/build/src/host/admin_console/console_sessions_controller.js +125 -0
  165. package/build/src/host/admin_console/console_settings_controller.d.ts +47 -0
  166. package/build/src/host/admin_console/console_settings_controller.js +115 -0
  167. package/build/src/host/admin_console/console_users_controller.d.ts +110 -0
  168. package/build/src/host/admin_console/console_users_controller.js +212 -0
  169. package/build/src/host/admin_prefix.d.ts +50 -0
  170. package/build/src/host/admin_prefix.js +77 -0
  171. package/build/src/host/admin_sessions_service.d.ts +119 -0
  172. package/build/src/host/admin_sessions_service.js +284 -0
  173. package/build/src/host/admin_stats_service.d.ts +44 -0
  174. package/build/src/host/admin_stats_service.js +130 -0
  175. package/build/src/host/admin_validators.d.ts +247 -0
  176. package/build/src/host/admin_validators.js +197 -0
  177. package/build/src/host/augmentations.d.ts +12 -0
  178. package/build/src/host/augmentations.js +1 -0
  179. package/build/src/host/auth_host_config.d.ts +22 -0
  180. package/build/src/host/auth_host_config.js +13 -0
  181. package/build/src/host/avatar_storage.d.ts +68 -0
  182. package/build/src/host/avatar_storage.js +166 -0
  183. package/build/src/host/bot_protection.d.ts +187 -0
  184. package/build/src/host/bot_protection.js +132 -0
  185. package/build/src/host/branding.d.ts +19 -0
  186. package/build/src/host/branding.js +8 -0
  187. package/build/src/host/config_locks.d.ts +38 -0
  188. package/build/src/host/config_locks.js +70 -0
  189. package/build/src/host/console_session.d.ts +27 -0
  190. package/build/src/host/console_session.js +36 -0
  191. package/build/src/host/controllers/account_apps_controller.d.ts +15 -0
  192. package/build/src/host/controllers/account_apps_controller.js +61 -0
  193. package/build/src/host/controllers/account_confirm_controller.d.ts +24 -0
  194. package/build/src/host/controllers/account_confirm_controller.js +144 -0
  195. package/build/src/host/controllers/account_mfa_controller.d.ts +28 -0
  196. package/build/src/host/controllers/account_mfa_controller.js +208 -0
  197. package/build/src/host/controllers/account_orgs_controller.d.ts +80 -0
  198. package/build/src/host/controllers/account_orgs_controller.js +401 -0
  199. package/build/src/host/controllers/account_security_controller.d.ts +43 -0
  200. package/build/src/host/controllers/account_security_controller.js +546 -0
  201. package/build/src/host/controllers/account_session_controller.d.ts +21 -0
  202. package/build/src/host/controllers/account_session_controller.js +113 -0
  203. package/build/src/host/controllers/account_tokens_controller.d.ts +7 -0
  204. package/build/src/host/controllers/account_tokens_controller.js +67 -0
  205. package/build/src/host/controllers/interaction_controller.d.ts +125 -0
  206. package/build/src/host/controllers/interaction_controller.js +981 -0
  207. package/build/src/host/controllers/pat_introspection_controller.d.ts +22 -0
  208. package/build/src/host/controllers/pat_introspection_controller.js +46 -0
  209. package/build/src/host/controllers/registration_controller.d.ts +18 -0
  210. package/build/src/host/controllers/registration_controller.js +382 -0
  211. package/build/src/host/controllers/social_controller.d.ts +8 -0
  212. package/build/src/host/controllers/social_controller.js +89 -0
  213. package/build/src/host/csrf.d.ts +29 -0
  214. package/build/src/host/csrf.js +14 -0
  215. package/build/src/host/default_mailer.d.ts +112 -0
  216. package/build/src/host/default_mailer.js +417 -0
  217. package/build/src/host/durable/account_deletion_workflow.d.ts +48 -0
  218. package/build/src/host/durable/account_deletion_workflow.js +86 -0
  219. package/build/src/host/durable/account_export_workflow.d.ts +68 -0
  220. package/build/src/host/durable/account_export_workflow.js +93 -0
  221. package/build/src/host/durable/index.d.ts +68 -0
  222. package/build/src/host/durable/index.js +77 -0
  223. package/build/src/host/email_templates.d.ts +39 -0
  224. package/build/src/host/email_templates.js +69 -0
  225. package/build/src/host/geo.d.ts +22 -0
  226. package/build/src/host/geo.js +39 -0
  227. package/build/src/host/i18n.d.ts +1416 -0
  228. package/build/src/host/i18n.js +1583 -0
  229. package/build/src/host/impersonation.d.ts +25 -0
  230. package/build/src/host/impersonation.js +31 -0
  231. package/build/src/host/key_rotation.d.ts +14 -0
  232. package/build/src/host/key_rotation.js +27 -0
  233. package/build/src/host/key_rotation_actions.d.ts +42 -0
  234. package/build/src/host/key_rotation_actions.js +27 -0
  235. package/build/src/host/login_attempt.d.ts +98 -0
  236. package/build/src/host/login_attempt.js +211 -0
  237. package/build/src/host/login_notify.d.ts +27 -0
  238. package/build/src/host/login_notify.js +142 -0
  239. package/build/src/host/middleware/account_auth.d.ts +7 -0
  240. package/build/src/host/middleware/account_auth.js +11 -0
  241. package/build/src/host/otp_lockout.d.ts +103 -0
  242. package/build/src/host/otp_lockout.js +221 -0
  243. package/build/src/host/rate_limit.d.ts +39 -0
  244. package/build/src/host/rate_limit.js +94 -0
  245. package/build/src/host/register_auth_host.d.ts +97 -0
  246. package/build/src/host/register_auth_host.js +466 -0
  247. package/build/src/host/renderers/edge_renderer.d.ts +12 -0
  248. package/build/src/host/renderers/edge_renderer.js +38 -0
  249. package/build/src/host/renderers/inertia_renderer.d.ts +70 -0
  250. package/build/src/host/renderers/inertia_renderer.js +54 -0
  251. package/build/src/host/runtime_settings.d.ts +181 -0
  252. package/build/src/host/runtime_settings.js +307 -0
  253. package/build/src/host/runtime_toggles.d.ts +807 -0
  254. package/build/src/host/runtime_toggles.js +784 -0
  255. package/build/src/host/security_notice_service.d.ts +36 -0
  256. package/build/src/host/security_notice_service.js +87 -0
  257. package/build/src/host/session_context.d.ts +23 -0
  258. package/build/src/host/session_context.js +89 -0
  259. package/build/src/host/sudo_mode.d.ts +56 -0
  260. package/build/src/host/sudo_mode.js +99 -0
  261. package/build/src/host/svg_chart.d.ts +15 -0
  262. package/build/src/host/svg_chart.js +45 -0
  263. package/build/src/host/trusted_device.d.ts +61 -0
  264. package/build/src/host/trusted_device.js +65 -0
  265. package/build/src/host/ui-dist/assets/index-CRWcmsex.js +137 -0
  266. package/build/src/host/ui-dist/assets/index-DTSmD4RU.css +1 -0
  267. package/build/src/host/ui-dist/index.html +17 -0
  268. package/build/src/host/user_agent.d.ts +18 -0
  269. package/build/src/host/user_agent.js +50 -0
  270. package/build/src/host/validators.d.ts +127 -0
  271. package/build/src/host/validators.js +53 -0
  272. package/build/src/keys/jwks_manager.d.ts +6 -0
  273. package/build/src/keys/jwks_manager.js +11 -0
  274. package/build/src/keys/keystore.d.ts +52 -0
  275. package/build/src/keys/keystore.js +68 -0
  276. package/build/src/keys/keystore_codec.d.ts +20 -0
  277. package/build/src/keys/keystore_codec.js +42 -0
  278. package/build/src/keys/keystore_crypto.d.ts +9 -0
  279. package/build/src/keys/keystore_crypto.js +27 -0
  280. package/build/src/keys/keystore_manager.d.ts +43 -0
  281. package/build/src/keys/keystore_manager.js +104 -0
  282. package/build/src/keys/keystore_vault.d.ts +113 -0
  283. package/build/src/keys/keystore_vault.js +265 -0
  284. package/build/src/mixins/json_column.d.ts +33 -0
  285. package/build/src/mixins/json_column.js +38 -0
  286. package/build/src/mixins/with_audit_log.d.ts +19 -0
  287. package/build/src/mixins/with_audit_log.js +39 -0
  288. package/build/src/mixins/with_auth_user.d.ts +24 -0
  289. package/build/src/mixins/with_auth_user.js +46 -0
  290. package/build/src/mixins/with_credentials.d.ts +20 -0
  291. package/build/src/mixins/with_credentials.js +29 -0
  292. package/build/src/mixins/with_mfa.d.ts +35 -0
  293. package/build/src/mixins/with_mfa.js +21 -0
  294. package/build/src/mixins/with_personal_access_token.d.ts +19 -0
  295. package/build/src/mixins/with_personal_access_token.js +42 -0
  296. package/build/src/mixins/with_provider_identity.d.ts +20 -0
  297. package/build/src/mixins/with_provider_identity.js +32 -0
  298. package/build/src/mixins/with_webauthn_credential.d.ts +37 -0
  299. package/build/src/mixins/with_webauthn_credential.js +46 -0
  300. package/build/src/observability/diagnostics_bridge.d.ts +6 -0
  301. package/build/src/observability/diagnostics_bridge.js +27 -0
  302. package/build/src/observability/metrics_controller.d.ts +5 -0
  303. package/build/src/observability/metrics_controller.js +24 -0
  304. package/build/src/observability/metrics_service.d.ts +2 -0
  305. package/build/src/observability/metrics_service.js +7 -0
  306. package/build/src/observability/otel_recorder.d.ts +10 -0
  307. package/build/src/observability/otel_recorder.js +59 -0
  308. package/build/src/observability/telescope/data_providers.d.ts +24 -0
  309. package/build/src/observability/telescope/data_providers.js +235 -0
  310. package/build/src/observability/telescope/extension.d.ts +29 -0
  311. package/build/src/observability/telescope/extension.js +167 -0
  312. package/build/src/observability/telescope/index.d.ts +8 -0
  313. package/build/src/observability/telescope/index.js +8 -0
  314. package/build/src/observability/wire_provider_events.d.ts +12 -0
  315. package/build/src/observability/wire_provider_events.js +30 -0
  316. package/build/src/password/common_passwords.d.ts +31 -0
  317. package/build/src/password/common_passwords.js +73 -0
  318. package/build/src/password/password_manager.d.ts +163 -0
  319. package/build/src/password/password_manager.js +191 -0
  320. package/build/src/password/policy.d.ts +71 -0
  321. package/build/src/password/policy.js +55 -0
  322. package/build/src/password/pwned.d.ts +36 -0
  323. package/build/src/password/pwned.js +52 -0
  324. package/build/src/pat/lucid_pat_store.d.ts +6 -0
  325. package/build/src/pat/lucid_pat_store.js +62 -0
  326. package/build/src/pat/pat_store.d.ts +31 -0
  327. package/build/src/pat/pat_store.js +1 -0
  328. package/build/src/pat/pat_tokens.d.ts +4 -0
  329. package/build/src/pat/pat_tokens.js +9 -0
  330. package/build/src/provider/build_provider.d.ts +45 -0
  331. package/build/src/provider/build_provider.js +219 -0
  332. package/build/src/provider/device_sources.d.ts +6 -0
  333. package/build/src/provider/device_sources.js +65 -0
  334. package/build/src/provider/interaction_actions.d.ts +36 -0
  335. package/build/src/provider/interaction_actions.js +55 -0
  336. package/build/src/provider/key_rotation_scheduler.d.ts +28 -0
  337. package/build/src/provider/key_rotation_scheduler.js +40 -0
  338. package/build/src/provider/keystore_reload.d.ts +21 -0
  339. package/build/src/provider/keystore_reload.js +39 -0
  340. package/build/src/provider/logout_sources.d.ts +13 -0
  341. package/build/src/provider/logout_sources.js +64 -0
  342. package/build/src/provider/oidc_service.d.ts +81 -0
  343. package/build/src/provider/oidc_service.js +254 -0
  344. package/build/src/provider/single_flight_lock.d.ts +18 -0
  345. package/build/src/provider/single_flight_lock.js +31 -0
  346. package/build/src/provider/token_exchange.d.ts +21 -0
  347. package/build/src/provider/token_exchange.js +124 -0
  348. package/build/src/register_routes.d.ts +16 -0
  349. package/build/src/register_routes.js +21 -0
  350. package/build/src/schema/ensure.d.ts +41 -0
  351. package/build/src/schema/ensure.js +262 -0
  352. package/build/stubs/config/authkit.stub +20 -0
  353. package/build/stubs/config/authkit_react.stub +52 -0
  354. package/build/stubs/main.d.ts +1 -0
  355. package/build/stubs/main.js +2 -0
  356. package/build/stubs/models/auth_user.stub +22 -0
  357. package/build/stubs/ui/edge/views/consent.edge +13 -0
  358. package/build/stubs/ui/edge/views/login.edge +19 -0
  359. package/build/stubs/ui/react/components/auth_shell.tsx +67 -0
  360. package/build/stubs/ui/react/pages/account/login.tsx +56 -0
  361. package/build/stubs/ui/react/pages/account/mfa.tsx +132 -0
  362. package/build/stubs/ui/react/pages/account/tokens.tsx +88 -0
  363. package/build/stubs/ui/react/pages/consent.tsx +39 -0
  364. package/build/stubs/ui/react/pages/forgot.tsx +44 -0
  365. package/build/stubs/ui/react/pages/login.tsx +171 -0
  366. package/build/stubs/ui/react/pages/mfa-challenge.tsx +72 -0
  367. package/build/stubs/ui/react/pages/reset.tsx +58 -0
  368. package/build/stubs/ui/react/pages/signup.tsx +78 -0
  369. package/build/stubs/ui/react/pages/verify-email.tsx +24 -0
  370. package/build/types.d.ts +7 -0
  371. package/build/types.js +1 -0
  372. package/package.json +147 -0
  373. package/stubs/config/authkit.stub +20 -0
  374. package/stubs/config/authkit_react.stub +52 -0
  375. package/stubs/main.ts +2 -0
  376. package/stubs/models/auth_user.stub +22 -0
  377. package/stubs/ui/edge/views/consent.edge +13 -0
  378. package/stubs/ui/edge/views/login.edge +19 -0
  379. package/stubs/ui/react/components/auth_shell.tsx +67 -0
  380. package/stubs/ui/react/pages/account/login.tsx +56 -0
  381. package/stubs/ui/react/pages/account/mfa.tsx +132 -0
  382. package/stubs/ui/react/pages/account/tokens.tsx +88 -0
  383. package/stubs/ui/react/pages/consent.tsx +39 -0
  384. package/stubs/ui/react/pages/forgot.tsx +44 -0
  385. package/stubs/ui/react/pages/login.tsx +171 -0
  386. package/stubs/ui/react/pages/mfa-challenge.tsx +72 -0
  387. package/stubs/ui/react/pages/reset.tsx +58 -0
  388. package/stubs/ui/react/pages/signup.tsx +78 -0
  389. package/stubs/ui/react/pages/verify-email.tsx +24 -0
@@ -0,0 +1,156 @@
1
+ import type { AccountStore } from './account_store.js';
2
+ import { type AccountSecretEncrypter, type WebauthnCeremonies } from './lucid_store/shared.js';
3
+ import { type PasswordConfigInput } from '../password/password_manager.js';
4
+ import type { AuditSink } from '../audit/audit_sink.js';
5
+ import type { PwnedLogger, FetchLike } from '../password/pwned.js';
6
+ export type { AccountSecretEncrypter, WebauthnCeremonies };
7
+ /**
8
+ * Serviço de encryption do app (APP_KEY), carregado LAZY via import dinâmico.
9
+ *
10
+ * Não importamos `@adonisjs/core/services/encryption` no topo do módulo de
11
+ * propósito: esse módulo faz `await app.booted()` na carga, o que quebra em
12
+ * contextos sem app (harness de teste). O import dinâmico é disparado na
13
+ * construção do encrypter (boot) e resolve antes da primeira request; até lá (e
14
+ * em testes sem app, onde o import rejeita) o encrypter degrada p/ plaintext.
15
+ */
16
+ interface EncryptionService {
17
+ encrypt(value: string): string;
18
+ decrypt<T = string>(value: string): T | null;
19
+ }
20
+ /** Reset do cache de encryption — uso em testes. */
21
+ export declare function __resetAppKeyEncryption(): void;
22
+ /**
23
+ * Injeta um serviço de encryption fake — uso EXCLUSIVO em testes. Permite exercitar
24
+ * o caminho fail-closed do {@link appKeyEncrypter} (decrypt que lança → null) sem
25
+ * precisar de um app AdonisJS booted. Marca `encLoading` como resolvido para que o
26
+ * encrypter use o serviço imediatamente.
27
+ */
28
+ export declare function __setAppKeyEncryptionForTesting(svc: EncryptionService | undefined): void;
29
+ /**
30
+ * Encrypter default do AuthKit, baseado no `APP_KEY` (`@adonisjs/core/services/encryption`).
31
+ * É o default do {@link lucidAccountStore} — o segredo TOTP é encriptado em repouso
32
+ * sem nenhum wiring no app. Passe `encrypter: false` p/ desligar (plaintext).
33
+ *
34
+ * Resiliente: enquanto o serviço de encryption não está disponível (boot inicial /
35
+ * testes sem app), opera em plaintext; uma vez carregado, encripta de verdade.
36
+ */
37
+ export declare function appKeyEncrypter(): AccountSecretEncrypter;
38
+ /** Opções do {@link lucidAccountStore}. */
39
+ export interface LucidAccountStoreOptions {
40
+ /** Label de issuer mostrado no app autenticador (keyuri). Default: 'AuthKit'. */
41
+ mfaIssuer?: string;
42
+ /** Quantidade de recovery codes gerados no enrollment. Default: 8. */
43
+ recoveryCodeCount?: number;
44
+ /**
45
+ * Encripta o segredo TOTP em repouso. **Default: {@link appKeyEncrypter} (APP_KEY)** —
46
+ * seguro por padrão, sem wiring. Passe um encrypter custom para usar outro KMS, ou
47
+ * `false` para desligar (segredo em claro; ex.: testes / migração).
48
+ *
49
+ * ⚠️ Breaking (0.x): segredos TOTP gravados em CLARO por versões anteriores deixam de
50
+ * decriptar sob o default. Migre (re-encriptar) ou passe `encrypter: false`.
51
+ */
52
+ encrypter?: AccountSecretEncrypter | false;
53
+ /**
54
+ * Model Lucid das identidades de provider (composto de `withProviderIdentity()`),
55
+ * usado por `findByProviderIdentity`/`linkProviderIdentity` (account linking
56
+ * social). Ausente → a capacidade de account linking fica AUSENTE do store (os
57
+ * métodos não existem; hosts email-only continuam funcionando).
58
+ */
59
+ providerIdentityModel?: any;
60
+ /**
61
+ * Model Lucid das credenciais WebAuthn / passkeys (composto de
62
+ * `withWebauthnCredential()`), usado pelos métodos `*Passkey*`. Ausente → a
63
+ * capacidade de passkeys fica AUSENTE do store (os métodos não existem; a UI
64
+ * esconde a seção de passkeys).
65
+ */
66
+ webauthnCredentialModel?: any;
67
+ /**
68
+ * Parâmetros do Relying Party (RP) usados nas cerimônias WebAuthn. Resolvidos a
69
+ * partir do `issuer` no `define_config` quando omitidos. Necessários sempre que
70
+ * `webauthnCredentialModel` é fornecido.
71
+ */
72
+ webauthn?: {
73
+ /** Nome do RP mostrado pelo authenticator. Default: `mfaIssuer`. */
74
+ rpName: string;
75
+ /** RP ID — normalmente o hostname (sem porta) do issuer. */
76
+ rpId: string;
77
+ /** Origin(s) esperada(s) na verificação (scheme://host[:port]). */
78
+ origin: string | string[];
79
+ };
80
+ /**
81
+ * Seam de injeção das cerimônias WebAuthn (generate/verify). Default: as funções
82
+ * reais do `@simplewebauthn/server`. Existe para testes (mockar a verificação SEM
83
+ * um authenticator real) — produção não precisa fornecer.
84
+ */
85
+ webauthnCeremonies?: Partial<WebauthnCeremonies>;
86
+ /**
87
+ * Gerência de senha: verificador de hashes legados (import de outros sistemas),
88
+ * política de complexidade e checagem contra vazamentos (HIBP). Tudo opcional —
89
+ * sem config, a política cai no default (min 8) e o lazy rehash usa só o hasher
90
+ * nativo do model. Veja {@link PasswordConfigInput}.
91
+ */
92
+ password?: PasswordConfigInput;
93
+ /**
94
+ * Sink de auditoria (best-effort), usado para emitir `password.rehashed` quando
95
+ * o lazy rehash acontece. Ausente → o evento não é emitido. Normalmente o
96
+ * `define_config` injeta o `audit` resolvido aqui.
97
+ */
98
+ audit?: AuditSink;
99
+ /**
100
+ * Logger do app (subconjunto `warn`), usado pela checagem de vazamento para
101
+ * registrar falhas fail-safe (timeout/rede). Ausente → silencioso.
102
+ */
103
+ logger?: PwnedLogger;
104
+ /**
105
+ * Seam de injeção do cliente HTTP da checagem de vazamento (HIBP). Default: o
106
+ * `fetch` nativo. Existe para testes — produção não precisa fornecer.
107
+ */
108
+ pwnedFetch?: FetchLike;
109
+ /**
110
+ * Models Lucid para organizations (multi-tenancy). Quando os três forem fornecidos,
111
+ * a capacidade `OrganizationsCapability` fica disponível no store. Os models devem
112
+ * ser tabelas `auth_organizations`, `auth_organization_members` e
113
+ * `auth_organization_invitations`. Ausente → capability AUSENTE (sem tabelas = desligado).
114
+ */
115
+ organizationModels?: {
116
+ OrgModel: any;
117
+ MemberModel: any;
118
+ InvitationModel: any;
119
+ };
120
+ }
121
+ /**
122
+ * Implementação default do {@link AccountStore} sobre um model Lucid composto
123
+ * de `withAuthUser()` + `withCredentials()` (+ opcionalmente `withMfa()`). O
124
+ * model carrega `connection`/`table` (app-específico) e, por convenção, uma
125
+ * coluna `fullName` (mapeada de `name`).
126
+ *
127
+ * Composição por CAPACIDADE: o núcleo + MFA são sempre montados; passkeys
128
+ * (WebAuthn) e account linking por provider só são montados quando o model
129
+ * correspondente é fornecido — caso contrário a capacidade fica ABSENTE (os
130
+ * métodos não existem no objeto retornado, em vez de presentes-mas-lançando).
131
+ *
132
+ * @remarks Para capabilities que dependem de tabelas opcionais (ex.:
133
+ * `auth_password_history`), use {@link lucidAccountStoreAsync} que probe o DB
134
+ * e monta o store já com as capabilities detectadas, sem a necessidade de
135
+ * fornecer um model separado. A versão síncrona (`lucidAccountStore`) é mantida
136
+ * por back-compat — capabilities de tabela ficam AUSENTES nela.
137
+ */
138
+ export declare function lucidAccountStore(Model: any, options?: LucidAccountStoreOptions): AccountStore;
139
+ /**
140
+ * Options estendidas para uso em testes ou quando o DB é injetado diretamente
141
+ * para o probe de histórico de senhas. Uso interno/avançado.
142
+ */
143
+ export interface LucidAccountStoreAsyncOptions extends LucidAccountStoreOptions {
144
+ /**
145
+ * Instância de DB Lucid. Quando fornecida, o factory faz o probe da tabela
146
+ * `auth_password_history` e monta a capability automaticamente.
147
+ */
148
+ db?: any;
149
+ }
150
+ /**
151
+ * Versão assíncrona do {@link lucidAccountStore} que faz o probe de DB para
152
+ * detectar tabelas opcionais (`auth_password_history`) e monta as capabilities
153
+ * correspondentes. Use esta versão quando o `db` está disponível no momento do
154
+ * boot (ex.: no `register_auth_host.ts` ou no `app/providers/auth_provider.ts`).
155
+ */
156
+ export declare function lucidAccountStoreAsync(Model: any, options?: LucidAccountStoreAsyncOptions): Promise<AccountStore>;
@@ -0,0 +1,294 @@
1
+ import { generateAuthenticationOptions, generateRegistrationOptions, verifyAuthenticationResponse, verifyRegistrationResponse, } from '@simplewebauthn/server';
2
+ import { hasTable, } from './lucid_store/shared.js';
3
+ import { buildCore } from './lucid_store/core.js';
4
+ import { buildMfa } from './lucid_store/mfa.js';
5
+ import { buildProviderIdentity } from './lucid_store/provider_identity.js';
6
+ import { buildWebauthn } from './lucid_store/webauthn.js';
7
+ import { buildStatus, buildProfile, buildEmailVerificationStatus, buildDeletion, hasColumn, } from './lucid_store/status_profile.js';
8
+ import { buildOrganizations } from './lucid_store/organizations.js';
9
+ import { buildPasswordHistory, buildPasswordExpiration } from './lucid_store/password_hygiene.js';
10
+ import { PasswordManager } from '../password/password_manager.js';
11
+ let encSvc;
12
+ let encLoading;
13
+ /** Resolve quando o `loadEncryption()` corrente terminar (sucesso OU falha). */
14
+ function loadEncryption() {
15
+ if (encSvc)
16
+ return Promise.resolve();
17
+ if (encLoading)
18
+ return encLoading;
19
+ encLoading = import('@adonisjs/core/services/encryption')
20
+ .then((m) => {
21
+ encSvc = m.default;
22
+ })
23
+ .catch(() => {
24
+ /* sem app booted (ex.: testes) → encSvc fica undefined → plaintext */
25
+ });
26
+ return encLoading;
27
+ }
28
+ /** Reset do cache de encryption — uso em testes. */
29
+ export function __resetAppKeyEncryption() {
30
+ encSvc = undefined;
31
+ encLoading = undefined;
32
+ appKeyEncrypterPlaintextWarned = false;
33
+ }
34
+ /**
35
+ * Injeta um serviço de encryption fake — uso EXCLUSIVO em testes. Permite exercitar
36
+ * o caminho fail-closed do {@link appKeyEncrypter} (decrypt que lança → null) sem
37
+ * precisar de um app AdonisJS booted. Marca `encLoading` como resolvido para que o
38
+ * encrypter use o serviço imediatamente.
39
+ */
40
+ export function __setAppKeyEncryptionForTesting(svc) {
41
+ encSvc = svc;
42
+ encLoading = Promise.resolve();
43
+ }
44
+ /** Garante que só logamos UMA vez o aviso de degradação para plaintext (evita flood). */
45
+ let appKeyEncrypterPlaintextWarned = false;
46
+ /**
47
+ * Encrypter default do AuthKit, baseado no `APP_KEY` (`@adonisjs/core/services/encryption`).
48
+ * É o default do {@link lucidAccountStore} — o segredo TOTP é encriptado em repouso
49
+ * sem nenhum wiring no app. Passe `encrypter: false` p/ desligar (plaintext).
50
+ *
51
+ * Resiliente: enquanto o serviço de encryption não está disponível (boot inicial /
52
+ * testes sem app), opera em plaintext; uma vez carregado, encripta de verdade.
53
+ */
54
+ export function appKeyEncrypter() {
55
+ // Dispara o carregamento do serviço de encryption no boot. A primeira request
56
+ // já o encontra pronto; o `await` interno de `loadEncryption()` é exposto para
57
+ // call-sites que precisem garantir o serviço antes de aceitar escrita.
58
+ loadEncryption();
59
+ return {
60
+ encrypt: (value) => {
61
+ try {
62
+ if (encSvc)
63
+ return encSvc.encrypt(value);
64
+ // M4: degradação para plaintext NÃO é silenciosa. Em vez de gravar o
65
+ // segredo em claro sem rastro, logamos um aviso CLARO (uma vez) para que
66
+ // o operador detecte a anomalia. O valor ainda é retornado as-is para não
67
+ // quebrar contextos de boot/teste sem app, mas o sinal fica visível.
68
+ if (!appKeyEncrypterPlaintextWarned) {
69
+ appKeyEncrypterPlaintextWarned = true;
70
+ console.warn('[authkit] appKeyEncrypter: serviço de encryption indisponível — ' +
71
+ 'segredo TOTP sendo gravado em PLAINTEXT. Garanta que o app esteja ' +
72
+ 'booted antes da primeira escrita, ou passe `encrypter: false` para ' +
73
+ 'opt-out explícito.');
74
+ }
75
+ return value;
76
+ }
77
+ catch {
78
+ return value;
79
+ }
80
+ },
81
+ decrypt: (value) => {
82
+ try {
83
+ // Com serviço: decrypt real; falha de integridade/formato → null (negar).
84
+ if (encSvc)
85
+ return encSvc.decrypt(value) ?? null;
86
+ // Sem serviço (boot/teste sem app): o valor foi gravado em plaintext (ver
87
+ // encrypt acima), então devolvê-lo as-is é o round-trip correto.
88
+ return value;
89
+ }
90
+ catch {
91
+ // M4 (fail-closed): adulteração / ciphertext inválido NÃO degrada para o
92
+ // valor cru (que mascararia a adulteração e poderia devolver o ciphertext
93
+ // como se fosse o segredo). Negamos o fator retornando null.
94
+ return null;
95
+ }
96
+ },
97
+ };
98
+ }
99
+ /**
100
+ * Implementação default do {@link AccountStore} sobre um model Lucid composto
101
+ * de `withAuthUser()` + `withCredentials()` (+ opcionalmente `withMfa()`). O
102
+ * model carrega `connection`/`table` (app-específico) e, por convenção, uma
103
+ * coluna `fullName` (mapeada de `name`).
104
+ *
105
+ * Composição por CAPACIDADE: o núcleo + MFA são sempre montados; passkeys
106
+ * (WebAuthn) e account linking por provider só são montados quando o model
107
+ * correspondente é fornecido — caso contrário a capacidade fica ABSENTE (os
108
+ * métodos não existem no objeto retornado, em vez de presentes-mas-lançando).
109
+ *
110
+ * @remarks Para capabilities que dependem de tabelas opcionais (ex.:
111
+ * `auth_password_history`), use {@link lucidAccountStoreAsync} que probe o DB
112
+ * e monta o store já com as capabilities detectadas, sem a necessidade de
113
+ * fornecer um model separado. A versão síncrona (`lucidAccountStore`) é mantida
114
+ * por back-compat — capabilities de tabela ficam AUSENTES nela.
115
+ */
116
+ export function lucidAccountStore(Model, options = {}) {
117
+ const mfaIssuer = options.mfaIssuer ?? 'AuthKit';
118
+ const recoveryCodeCount = options.recoveryCodeCount ?? 8;
119
+ // Default seguro: encripta o TOTP com APP_KEY. `false` desliga (plaintext).
120
+ const encrypter = options.encrypter === false ? undefined : (options.encrypter ?? appKeyEncrypter());
121
+ const ProviderIdentityModel = options.providerIdentityModel;
122
+ const WebauthnCredentialModel = options.webauthnCredentialModel;
123
+ const OrgModels = options.organizationModels;
124
+ // RP do WebAuthn: usado nas cerimônias. Default do rpName cai no mfaIssuer.
125
+ const webauthn = options.webauthn ?? {
126
+ rpName: mfaIssuer,
127
+ rpId: 'localhost',
128
+ origin: 'http://localhost',
129
+ };
130
+ // Cerimônias WebAuthn: reais por default, injetáveis para testes.
131
+ const ceremonies = {
132
+ generateRegistrationOptions,
133
+ verifyRegistrationResponse,
134
+ generateAuthenticationOptions,
135
+ verifyAuthenticationResponse,
136
+ ...options.webauthnCeremonies,
137
+ };
138
+ const passwords = new PasswordManager(options.password, {
139
+ logger: options.logger,
140
+ fetchImpl: options.pwnedFetch,
141
+ });
142
+ const ctx = {
143
+ Model,
144
+ mfaIssuer,
145
+ recoveryCodeCount,
146
+ passwords,
147
+ audit: options.audit,
148
+ // Encripta o segredo antes de persistir (no-op sem encrypter).
149
+ sealSecret: (secret) => (encrypter ? encrypter.encrypt(secret) : secret),
150
+ // Decripta o segredo armazenado; retorna null em falha/adulteração (no-op sem encrypter).
151
+ openSecret: (stored) => {
152
+ if (!stored)
153
+ return null;
154
+ if (!encrypter)
155
+ return stored;
156
+ return encrypter.decrypt(stored);
157
+ },
158
+ toAccount: (row) => ({
159
+ id: row.id,
160
+ email: row.email,
161
+ globalRoles: row.globalRoles ?? [],
162
+ name: row.fullName ?? undefined,
163
+ avatarUrl: row.avatarUrl ?? undefined,
164
+ }),
165
+ // nativeVerifyHash: usa o verifyPassword do model para verificar hashes históricos.
166
+ nativeVerifyHash: async (hash, plain) => {
167
+ // Cria uma instância temporária do model só para usar o método de hash.
168
+ try {
169
+ const tempRow = new Model();
170
+ tempRow.password = hash;
171
+ // verifyPassword é injetado pelo mixin withAuthUser.
172
+ if (typeof tempRow.verifyPassword === 'function') {
173
+ return tempRow.verifyPassword(plain);
174
+ }
175
+ return false;
176
+ }
177
+ catch {
178
+ return false;
179
+ }
180
+ },
181
+ };
182
+ // Núcleo + MFA são sempre presentes. Passkeys e provider-identity só entram
183
+ // quando o model correspondente foi fornecido (capacidade genuinamente ausente
184
+ // quando não configurada).
185
+ const store = {
186
+ ...buildCore(ctx),
187
+ ...buildMfa(ctx),
188
+ ...(ProviderIdentityModel ? buildProviderIdentity(ctx, ProviderIdentityModel) : {}),
189
+ ...(WebauthnCredentialModel
190
+ ? buildWebauthn(ctx, WebauthnCredentialModel, webauthn, ceremonies)
191
+ : {}),
192
+ // Status (disable/enable) só quando o model tem a coluna `disabled_at`.
193
+ ...(hasColumn(Model, 'disabledAt') ? buildStatus(ctx) : {}),
194
+ // Perfil (nome/avatar) só quando o model tem ao menos uma das colunas.
195
+ ...(hasColumn(Model, 'fullName') || hasColumn(Model, 'avatarUrl')
196
+ ? buildProfile(ctx)
197
+ : {}),
198
+ // Estado de verificação de e-mail (leitura) só quando o model tem a coluna.
199
+ ...(hasColumn(Model, 'emailVerifiedAt') ? buildEmailVerificationStatus(ctx) : {}),
200
+ // Deleção da conta: sempre disponível (qualquer model Lucid pode deletar).
201
+ ...buildDeletion(ctx),
202
+ // Expiração de senha: só quando o model tem a coluna `password_changed_at`.
203
+ ...(hasColumn(Model, 'passwordChangedAt') ? buildPasswordExpiration(ctx) : {}),
204
+ // Organizations (multi-tenancy): só quando os três models foram fornecidos.
205
+ ...(OrgModels
206
+ ? buildOrganizations({
207
+ OrgModel: OrgModels.OrgModel,
208
+ MemberModel: OrgModels.MemberModel,
209
+ InvitationModel: OrgModels.InvitationModel,
210
+ findAccountEmail: async (accountId) => {
211
+ const row = await Model.find(accountId);
212
+ return row?.email ?? null;
213
+ },
214
+ })
215
+ : {}),
216
+ // Config de senha resolvida — exposta (não-enumerável) para o authkit:doctor
217
+ // inspecionar policy/checkPwned. NÃO faz parte do contrato AccountStore.
218
+ __passwordConfig: passwords.config,
219
+ // Pepper configurado — exposto para o doctor verificar.
220
+ __pepper: passwords.pepper,
221
+ // PasswordManager exposto para controllers poderem aplicar pepper e verificar.
222
+ __passwordManager: passwords,
223
+ // Helper para o controller buscar o hash atual antes de gravar no histórico.
224
+ __getRawRow: async (accountId) => {
225
+ try {
226
+ return await Model.find(accountId);
227
+ }
228
+ catch {
229
+ return null;
230
+ }
231
+ },
232
+ /**
233
+ * Nome da conexão Lucid usada por este store (deriva de `Model.connection`).
234
+ * Exposto para que os call-sites de RuntimeSettings possam passar
235
+ * `{ connection: store.connectionName }` e usar a conexão correta.
236
+ * Undefined quando o model usa a conexão default (back-compat total).
237
+ * NÃO faz parte do contrato AccountStore.
238
+ */
239
+ connectionName: Model.connection ?? undefined,
240
+ /**
241
+ * mfaIssuer/webauthn deste store — expostos para o `defineConfig` REUSAR e o
242
+ * consumidor declarar UMA vez (evita repetir mfaIssuer/webauthn no top-level do
243
+ * defineConfig E aqui). NÃO fazem parte do contrato AccountStore.
244
+ */
245
+ __mfaIssuer: mfaIssuer,
246
+ __webauthn: options.webauthn,
247
+ };
248
+ // Histórico de senhas: capability-probed via tabela `auth_password_history`.
249
+ // A versão síncrona não pode fazer o probe de DB, então a capability fica
250
+ // AUSENTE aqui. Use `lucidAccountStoreAsync` para probe automático, OU injete
251
+ // o `passwordHistoryDb` nas options para montagem síncrona com DB explícito.
252
+ const passwordHistoryDb = options.passwordHistoryDb;
253
+ if (passwordHistoryDb) {
254
+ Object.assign(store, buildPasswordHistory(ctx, passwordHistoryDb));
255
+ }
256
+ return store;
257
+ }
258
+ /**
259
+ * Versão assíncrona do {@link lucidAccountStore} que faz o probe de DB para
260
+ * detectar tabelas opcionais (`auth_password_history`) e monta as capabilities
261
+ * correspondentes. Use esta versão quando o `db` está disponível no momento do
262
+ * boot (ex.: no `register_auth_host.ts` ou no `app/providers/auth_provider.ts`).
263
+ */
264
+ export async function lucidAccountStoreAsync(Model, options = {}) {
265
+ const { db, ...rest } = options;
266
+ const base = lucidAccountStore(Model, rest);
267
+ if (db) {
268
+ // Probe da tabela auth_password_history.
269
+ const historyPresent = await hasTable(db, 'auth_password_history');
270
+ if (historyPresent) {
271
+ const ctx = {
272
+ Model,
273
+ mfaIssuer: options.mfaIssuer ?? 'AuthKit',
274
+ recoveryCodeCount: options.recoveryCodeCount ?? 8,
275
+ passwords: new PasswordManager(options.password, {
276
+ logger: options.logger,
277
+ fetchImpl: options.pwnedFetch,
278
+ }),
279
+ audit: options.audit,
280
+ sealSecret: (s) => s,
281
+ openSecret: (s) => s ?? null,
282
+ toAccount: (row) => ({
283
+ id: row.id,
284
+ email: row.email,
285
+ globalRoles: row.globalRoles ?? [],
286
+ name: row.fullName ?? undefined,
287
+ avatarUrl: row.avatarUrl ?? undefined,
288
+ }),
289
+ };
290
+ Object.assign(base, buildPasswordHistory(ctx, db));
291
+ }
292
+ }
293
+ return base;
294
+ }
@@ -0,0 +1,9 @@
1
+ import type { AccountImportCapability, AccountSecurityCapability, CoreAccountStore, MagicLinkCapability } from '../account_store.js';
2
+ import type { LucidStoreContext } from './shared.js';
3
+ /**
4
+ * Núcleo SEMPRE presente do {@link CoreAccountStore} sobre um model Lucid:
5
+ * identidade, cadastro, reset de senha, verificação de e-mail, administração
6
+ * (listagem paginada + roles globais) e o self-service de segurança
7
+ * ({@link AccountSecurityCapability}: trocar senha/e-mail).
8
+ */
9
+ export declare function buildCore(ctx: LucidStoreContext): CoreAccountStore & AccountSecurityCapability & MagicLinkCapability & AccountImportCapability;