@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,113 @@
1
+ import '../augmentations.js';
2
+ import { ACCOUNT_SESSION_KEY } from '../middleware/account_auth.js';
3
+ import { translate } from '../i18n.js';
4
+ import { attemptPasswordLogin } from '../login_attempt.js';
5
+ import { notifyLoginSuccess } from '../login_notify.js';
6
+ import { markSudo } from '../sudo_mode.js';
7
+ import { accountHome } from '../account_home.js';
8
+ import { resolveRuntimeSettings } from '../runtime_settings.js';
9
+ /**
10
+ * Valida um valor de `return_to` recebido da query-string ou de um campo hidden.
11
+ *
12
+ * Regras de segurança (anti open-redirect):
13
+ * - Deve ser uma string não-vazia.
14
+ * - Deve começar com `/`.
15
+ * - NÃO pode começar com `//` (esquema-relativo, ex.: `//evil.com`).
16
+ * - NÃO pode conter `://` (URL absoluta com esquema, ex.: `https://evil.com`).
17
+ * - NÃO pode conter `\` (backslash). Browsers normalizam `\`→`/`, então
18
+ * `/\evil.com` vira `//evil.com` (esquema-relativo) → open-redirect. (L9)
19
+ *
20
+ * Retorna o valor validado ou `null` quando inválido/ausente.
21
+ */
22
+ export function validateReturnTo(value) {
23
+ if (typeof value !== 'string' || !value)
24
+ return null;
25
+ // L9: backslash é tratado como `/` por muitos browsers; `/\evil.com` →
26
+ // `//evil.com`. Rejeitamos qualquer backslash ANTES das demais checagens
27
+ // para não deixar passar variantes ofuscadas (`/\`, `\/`, `\\`).
28
+ if (value.includes('\\'))
29
+ return null;
30
+ if (!value.startsWith('/'))
31
+ return null;
32
+ if (value.startsWith('//'))
33
+ return null;
34
+ if (value.includes('://'))
35
+ return null;
36
+ return value;
37
+ }
38
+ export default class AccountSessionController {
39
+ async show(ctx) {
40
+ const service = await ctx.containerResolver.make('authkit.server');
41
+ const cfg = service.config;
42
+ const render = cfg.render;
43
+ if (ctx.session.get(ACCOUNT_SESSION_KEY)) {
44
+ return ctx.response.redirect(accountHome(cfg));
45
+ }
46
+ // Lê e valida o return_to da query-string — descarta valores inválidos (open-redirect).
47
+ const rawReturnTo = ctx.request.qs?.()?.return_to ?? ctx.request.input?.('return_to');
48
+ const returnTo = validateReturnTo(rawReturnTo);
49
+ return render(ctx, 'account/login', { csrfToken: ctx.request.csrfToken, returnTo });
50
+ }
51
+ async login(ctx) {
52
+ const service = await ctx.containerResolver.make('authkit.server');
53
+ const cfg = service.config;
54
+ const render = cfg.render;
55
+ const { email: rawEmail, password } = ctx.request.only(['email', 'password']);
56
+ // L6: normaliza o e-mail (trim + lowercase) ANTES de usar — garante que o
57
+ // lookup, o lockout (keyed por email) e a auditoria usem a forma canônica,
58
+ // independente do casing/espaços digitados.
59
+ const email = typeof rawEmail === 'string' ? rawEmail.trim().toLowerCase() : rawEmail;
60
+ const ip = ctx.request.ip?.() ?? null;
61
+ // Lê e valida o return_to do corpo do formulário (hidden input) — nunca confiar sem revalidar.
62
+ const rawReturnTo = ctx.request.input?.('return_to');
63
+ const returnTo = validateReturnTo(rawReturnTo);
64
+ // Verificação + lockout + auditoria de falha centralizados (sem clientId no console).
65
+ // M1: passa `settings` p/ o lockout (e verified-email/expiração) runtime valerem aqui também.
66
+ const settings = await resolveRuntimeSettings(ctx);
67
+ const result = await attemptPasswordLogin(cfg, {
68
+ email,
69
+ password,
70
+ ip,
71
+ logger: ctx.logger,
72
+ settings: settings ?? undefined,
73
+ });
74
+ if (!result.ok) {
75
+ return render(ctx, 'account/login', {
76
+ csrfToken: ctx.request.csrfToken,
77
+ returnTo,
78
+ error: result.locked
79
+ ? translate(cfg.messages, 'errors.account_locked', {
80
+ seconds: result.retryAfterSec ?? 0,
81
+ })
82
+ : result.disabled
83
+ ? translate(cfg.messages, 'errors.account_disabled')
84
+ : translate(cfg.messages, 'errors.invalid_credentials'),
85
+ });
86
+ }
87
+ const acc = result.account;
88
+ // M5 (session fixation): regenera a sessão IMEDIATAMENTE após autenticar e
89
+ // ANTES de gravar a chave de conta. A elevação de privilégio (anônimo →
90
+ // autenticado) DEVE trocar o session id para que um id fixado por um atacante
91
+ // pré-login deixe de valer. O AdonisJS migra os dados já presentes na sessão
92
+ // para o novo id, então qualquer estado de pré-login (ex.: MFA-pending) é
93
+ // preservado — o que muda é só o identificador do cookie.
94
+ await ctx.session.regenerate();
95
+ ctx.session.put(ACCOUNT_SESSION_KEY, acc.id);
96
+ // Login com senha = confirmação de identidade → marca sudo (graça a partir do login).
97
+ markSudo(ctx);
98
+ await notifyLoginSuccess(ctx, cfg, { accountId: acc.id, email, ip });
99
+ // Redireciona pro destino original (validado), ou cai no accountHome configurado.
100
+ return ctx.response.redirect(returnTo ?? accountHome(cfg));
101
+ }
102
+ async logout(ctx) {
103
+ // M6: não basta `forget(ACCOUNT_SESSION_KEY)` — sobravam na sessão
104
+ // `authkit_sudo_at` (sudo), `authkit_last_seen` e qualquer outro estado
105
+ // sensível, com o session id INALTERADO. Regenerar a sessão troca o id E
106
+ // descarta todos os dados antigos (sudo/last-seen inclusos), destruindo de
107
+ // fato a sessão de privilégio. Mantemos o `forget` explícito por garantia
108
+ // (belt-and-braces) caso o store de sessão não suporte regenerate.
109
+ ctx.session.forget(ACCOUNT_SESSION_KEY);
110
+ await ctx.session.regenerate();
111
+ return ctx.response.redirect('/account/login');
112
+ }
113
+ }
@@ -0,0 +1,7 @@
1
+ import '../augmentations.js';
2
+ import type { HttpContext } from '@adonisjs/core/http';
3
+ export default class AccountTokensController {
4
+ index(ctx: HttpContext): Promise<any>;
5
+ store(ctx: HttpContext): Promise<unknown>;
6
+ destroy(ctx: HttpContext): Promise<unknown>;
7
+ }
@@ -0,0 +1,67 @@
1
+ import '../augmentations.js';
2
+ import { ACCOUNT_SESSION_KEY } from '../middleware/account_auth.js';
3
+ import { resolveRuntimeSettings } from '../runtime_settings.js';
4
+ import { requireSudo } from '../sudo_mode.js';
5
+ export default class AccountTokensController {
6
+ async index(ctx) {
7
+ const service = await ctx.containerResolver.make('authkit.server');
8
+ const cfg = service.config;
9
+ const render = cfg.render;
10
+ const userId = ctx.session.get(ACCOUNT_SESSION_KEY);
11
+ const tokens = await cfg.patStore.listForAccount(userId);
12
+ const createdToken = ctx.session.flashMessages.get('createdToken');
13
+ return render(ctx, 'account/tokens', {
14
+ csrfToken: ctx.request.csrfToken,
15
+ createdToken: createdToken ?? null,
16
+ tokens: tokens.map((t) => ({
17
+ id: t.id,
18
+ name: t.name,
19
+ scopes: t.scopes,
20
+ audience: t.audience,
21
+ lastUsedAt: t.lastUsedAt,
22
+ createdAt: t.createdAt,
23
+ })),
24
+ });
25
+ }
26
+ async store(ctx) {
27
+ const service = await ctx.containerResolver.make('authkit.server');
28
+ const cfg = service.config;
29
+ const userId = ctx.session.get(ACCOUNT_SESSION_KEY);
30
+ // Sudo mode gate.
31
+ const sudoSettingsPat = await resolveRuntimeSettings(ctx);
32
+ const sudoResultPat = await requireSudo(ctx, sudoSettingsPat);
33
+ if (sudoResultPat !== true)
34
+ return sudoResultPat;
35
+ const { name } = ctx.request.only(['name']);
36
+ const { token, pat } = await cfg.patStore.issue({ accountId: userId, name: name || 'Token' });
37
+ ctx.session.flash('createdToken', token);
38
+ await cfg.audit?.record({
39
+ type: 'pat.issued',
40
+ accountId: userId,
41
+ ip: ctx.request.ip?.() ?? null,
42
+ metadata: { patId: pat.id, name: pat.name },
43
+ });
44
+ return ctx.response.redirect('/account/tokens');
45
+ }
46
+ async destroy(ctx) {
47
+ const service = await ctx.containerResolver.make('authkit.server');
48
+ const cfg = service.config;
49
+ const userId = ctx.session.get(ACCOUNT_SESSION_KEY);
50
+ // Sudo mode gate.
51
+ const sudoSettingsPatRev = await resolveRuntimeSettings(ctx);
52
+ const sudoResultPatRev = await requireSudo(ctx, sudoSettingsPatRev);
53
+ if (sudoResultPatRev !== true)
54
+ return sudoResultPatRev;
55
+ const patId = ctx.request.param('id');
56
+ const revoked = await cfg.patStore.revoke(userId, patId);
57
+ if (revoked) {
58
+ await cfg.audit?.record({
59
+ type: 'pat.revoked',
60
+ accountId: userId,
61
+ ip: ctx.request.ip?.() ?? null,
62
+ metadata: { patId },
63
+ });
64
+ }
65
+ return ctx.response.redirect('/account/tokens');
66
+ }
67
+ }
@@ -0,0 +1,125 @@
1
+ import '../augmentations.js';
2
+ import type { HttpContext } from '@adonisjs/core/http';
3
+ export default class AuthInteractionController {
4
+ show(ctx: HttpContext): Promise<any>;
5
+ /**
6
+ * POST /auth/interaction/:uid/identifier
7
+ * Step 1: receive email, store in session, redirect to step 2.
8
+ * ENUMERATION-SAFE: always advances regardless of whether the email exists.
9
+ */
10
+ identifier(ctx: HttpContext): Promise<void>;
11
+ /**
12
+ * POST /auth/interaction/:uid/login
13
+ * Step 2: password submit. Reads email from session (never from form).
14
+ */
15
+ login(ctx: HttpContext): Promise<any>;
16
+ /**
17
+ * POST /auth/interaction/:uid/mfa
18
+ * 2º fator: lê o accountId pendente da sessão e aceita um código TOTP (`code`)
19
+ * OU um recovery code (`recoveryCode`). Em caso de sucesso finaliza a interaction.
20
+ */
21
+ mfaVerify(ctx: HttpContext): Promise<any>;
22
+ /**
23
+ * true se o authorize request exige MFA via acr_values (contém o mfaAcr da
24
+ * config de step-up). `acr_values` é a string separada por espaços padrão OIDC.
25
+ */
26
+ private acrRequiresMfa;
27
+ /**
28
+ * Monta o acr/amr do step-up quando o client solicitou o mfaAcr e um 2º fator
29
+ * foi verificado. `method` é o método do segundo fator (totp/recovery/webauthn).
30
+ * Retorna `undefined` quando não há step-up — completeLogin usa o default.
31
+ */
32
+ private stepUpExtra;
33
+ /** true se o store suporta passkeys E a conta tem ao menos uma registrada. */
34
+ private hasPasskeys;
35
+ /**
36
+ * Lê o cookie de dispositivo confiável (encriptado, appKey-backed) e valida que
37
+ * pertence a `accountId`, não expirou e é posterior ao último (re)enrollment de
38
+ * MFA. Step-up NÃO chama isto (força sempre o MFA). Best-effort: qualquer erro de
39
+ * leitura → não confiável.
40
+ */
41
+ private checkTrustedDevice;
42
+ /**
43
+ * Se o checkbox "confiar neste dispositivo" foi marcado E o mecanismo está ligado,
44
+ * grava o cookie encriptado de confiança para a conta (skip MFA por N dias).
45
+ */
46
+ private maybeTrustDevice;
47
+ /**
48
+ * Emite o e-mail de desbloqueio OTP quando o fator fica travado.
49
+ * Best-effort, fail-safe: nunca lança na request.
50
+ */
51
+ private sendOtpUnlockEmailIfAble;
52
+ /**
53
+ * accountId para uma cerimônia de passkey no login. Prioriza o accountId pendente
54
+ * do MFA (passkey como 2º fator). Quando ausente e o passkey-first está ligado,
55
+ * resolve a conta pelo e-mail guardado na sessão (passkey ANTES da senha) — só se
56
+ * a conta existe E tem ao menos uma passkey.
57
+ */
58
+ private resolvePasskeyAccountId;
59
+ /**
60
+ * POST /auth/interaction/:uid/magic
61
+ * Magic link: lê o e-mail da sessão (passwordless.magicLink ligado), emite um
62
+ * token de uso único e dispara o e-mail. SEMPRE renderiza "link enviado",
63
+ * independentemente de a conta existir (anti-enumeração). Throttled como o login.
64
+ */
65
+ magicLinkRequest(ctx: HttpContext): Promise<any>;
66
+ /**
67
+ * GET /auth/interaction/:uid/magic?token=...
68
+ * Consome o magic link. Em sucesso finaliza o login (amr `['email']`). Token
69
+ * inválido/expirado volta ao início do login.
70
+ */
71
+ magicLinkConsume(ctx: HttpContext): Promise<any>;
72
+ /**
73
+ * POST /auth/interaction/:uid/passkey/options
74
+ *
75
+ * Gera as opções de autenticação por passkey. Suporta dois modos:
76
+ *
77
+ * 1. **Modo normal** (MFA gate ou passkey-first com e-mail na sessão):
78
+ * resolve o `accountId` e gera opções com `allowCredentials` restrito às
79
+ * credenciais da conta (comportamento original).
80
+ *
81
+ * 2. **Modo discoverable** (WebAuthn autofill / conditional mediation):
82
+ * chamado sem accountId resolvível (tela de identifier sem e-mail ainda).
83
+ * Neste caso, delega a `generatePasskeyAuthenticationOptions` com accountId
84
+ * especial `'__discoverable__'` — o store deve retornar opções com
85
+ * `allowCredentials: []` (deixa o browser apresentar TODAS as passkeys
86
+ * disponíveis). Quando o store não suporta este modo, devolve 400 com
87
+ * `discoverable: false` (o JS de autofill trata silenciosamente).
88
+ *
89
+ * Guarda o challenge na sessão e devolve as opções JSON.
90
+ */
91
+ passkeyOptions(ctx: HttpContext): Promise<any>;
92
+ /**
93
+ * POST /auth/interaction/:uid/passkey/verify
94
+ * Verifica a resposta de autenticação por passkey contra o challenge guardado;
95
+ * em caso de sucesso FINALIZA a interaction (303 de volta ao client — alternativa
96
+ * ao código TOTP). É um POST de página inteira (form), não fetch: o browser
97
+ * submete o JSON da assertion no campo `response` e segue o redirect normalmente.
98
+ */
99
+ passkeyVerify(ctx: HttpContext): Promise<any>;
100
+ /**
101
+ * GET /auth/interaction/:uid/switch
102
+ * Clears the stored email and redirects back to step 1.
103
+ */
104
+ switchIdentifier(ctx: HttpContext): Promise<void>;
105
+ /**
106
+ * POST /auth/interaction/:uid/password-expired
107
+ *
108
+ * Step de troca obrigatória quando a senha expirou. A senha VELHA já foi
109
+ * verificada em `login` — aqui a conta está no step `password_expired` da
110
+ * sessão. O usuário informa a nova senha (+ confirmação) e o controller:
111
+ * 1. Valida política de senha.
112
+ * 2. Atualiza a senha via `changePassword` (que toca `passwordChangedAt`).
113
+ * 3. Finaliza a interaction normalmente.
114
+ *
115
+ * Capability-probed: sem `changePassword` → redireciona para o login.
116
+ */
117
+ changeExpiredPassword(ctx: HttpContext): Promise<any>;
118
+ consent(ctx: HttpContext): Promise<void>;
119
+ /**
120
+ * GET /auth/otp-unlock/:token
121
+ * Consome o token de desbloqueio OTP enviado por e-mail. Valida (hash + TTL),
122
+ * zera o contador/lock, audita `otp.unlocked` e redireciona ao login com mensagem.
123
+ */
124
+ otpUnlock(ctx: HttpContext): Promise<any>;
125
+ }