@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,46 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { column, beforeSave } from '@adonisjs/lucid/orm';
8
+ import { Scrypt } from '@adonisjs/core/hash/drivers/scrypt';
9
+ import { jsonColumn } from './json_column.js';
10
+ const hasher = new Scrypt({});
11
+ export function withAuthUser() {
12
+ return (superclass) => {
13
+ class AuthUserMixin extends superclass {
14
+ static async hashAuthUserPassword(user) {
15
+ if (user.$dirty.password) {
16
+ user.password = await hasher.make(user.password);
17
+ }
18
+ }
19
+ async verifyPassword(plain) {
20
+ // `verify` do driver devolve false (não lança) em hash de formato
21
+ // desconhecido — o lazy rehash + legacyVerifier no store cuidam disso.
22
+ return hasher.verify(this.password, plain);
23
+ }
24
+ passwordNeedsRehash() {
25
+ // Hash não reconhecido pelo hasher atual (formato legado) OU com
26
+ // parâmetros desatualizados → precisa re-hash.
27
+ if (!hasher.isValidHash(this.password))
28
+ return true;
29
+ return hasher.needsReHash(this.password);
30
+ }
31
+ }
32
+ __decorate([
33
+ column()
34
+ ], AuthUserMixin.prototype, "email", void 0);
35
+ __decorate([
36
+ column({ serializeAs: null })
37
+ ], AuthUserMixin.prototype, "password", void 0);
38
+ __decorate([
39
+ column(jsonColumn({ fallback: [], emptyOnWrite: 'serialize' }))
40
+ ], AuthUserMixin.prototype, "globalRoles", void 0);
41
+ __decorate([
42
+ beforeSave()
43
+ ], AuthUserMixin, "hashAuthUserPassword", null);
44
+ return AuthUserMixin;
45
+ };
46
+ }
@@ -0,0 +1,20 @@
1
+ import { BaseModel } from '@adonisjs/lucid/orm';
2
+ import type { NormalizeConstructor } from '@adonisjs/core/types/helpers';
3
+ import { DateTime } from 'luxon';
4
+ /**
5
+ * Instância composta pelo mixin {@link withCredentials}.
6
+ */
7
+ export interface CredentialsRow {
8
+ emailVerifiedAt: DateTime | null;
9
+ emailVerificationToken: string | null;
10
+ passwordResetToken: string | null;
11
+ passwordResetExpiresAt: DateTime | null;
12
+ readonly isEmailVerified: boolean;
13
+ }
14
+ /**
15
+ * Classe resultante da composição com o mixin {@link withCredentials}.
16
+ */
17
+ export type CredentialsClass<Model extends NormalizeConstructor<typeof BaseModel>> = Model & {
18
+ new (...args: any[]): CredentialsRow;
19
+ };
20
+ export declare function withCredentials(): <Model extends NormalizeConstructor<typeof BaseModel>>(superclass: Model) => CredentialsClass<Model>;
@@ -0,0 +1,29 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { column } from '@adonisjs/lucid/orm';
8
+ export function withCredentials() {
9
+ return (superclass) => {
10
+ class CredentialsMixin extends superclass {
11
+ get isEmailVerified() {
12
+ return this.emailVerifiedAt !== null;
13
+ }
14
+ }
15
+ __decorate([
16
+ column.dateTime()
17
+ ], CredentialsMixin.prototype, "emailVerifiedAt", void 0);
18
+ __decorate([
19
+ column({ serializeAs: null })
20
+ ], CredentialsMixin.prototype, "emailVerificationToken", void 0);
21
+ __decorate([
22
+ column({ serializeAs: null })
23
+ ], CredentialsMixin.prototype, "passwordResetToken", void 0);
24
+ __decorate([
25
+ column.dateTime({ serializeAs: null })
26
+ ], CredentialsMixin.prototype, "passwordResetExpiresAt", void 0);
27
+ return CredentialsMixin;
28
+ };
29
+ }
@@ -0,0 +1,35 @@
1
+ import { BaseModel } from '@adonisjs/lucid/orm';
2
+ import type { NormalizeConstructor } from '@adonisjs/core/types/helpers';
3
+ import { DateTime } from 'luxon';
4
+ /**
5
+ * @deprecated O estado de MFA deixou de viver no model do host. Estas propriedades
6
+ * NÃO existem mais na linha do model — o tipo é mantido apenas por compatibilidade
7
+ * de assinatura. Use os métodos da {@link MfaCapability} do store (que batem na
8
+ * tabela lib-owned `auth_mfa`).
9
+ */
10
+ export interface MfaRow {
11
+ totpSecret: string | null;
12
+ mfaEnabledAt: DateTime | null;
13
+ recoveryCodes: string[] | null;
14
+ lastTotpStep: number | null;
15
+ readonly isMfaEnabled: boolean;
16
+ }
17
+ /**
18
+ * @deprecated Veja {@link MfaRow}. O mixin {@link withMfa} virou um no-op de schema.
19
+ */
20
+ export type MfaClass<Model extends NormalizeConstructor<typeof BaseModel>> = Model;
21
+ /**
22
+ * Mixin de MFA/TOTP — AGORA UM NO-OP DE SCHEMA.
23
+ *
24
+ * O estado de MFA (`totp_secret`, `mfa_enabled_at`, `recovery_codes`,
25
+ * `last_totp_step`) é LIB-OWNED: vive na tabela própria auto-gerida `auth_mfa`
26
+ * (criada pelo `ensureAuthkitSchema`), keyed por `account_id`. O host NÃO precisa
27
+ * mais de migration para MFA e o model NÃO carrega mais essas colunas.
28
+ *
29
+ * O export `withMfa` é MANTIDO por compatibilidade — os apps continuam compondo
30
+ * `withMfa()` no model sem precisar mudar nada — mas ele não adiciona mais nenhuma
31
+ * coluna nem comportamento. Toda a leitura/escrita de MFA passa pelos métodos da
32
+ * {@link MfaCapability} do store (`getMfaState`, `verifyTotp`, etc.), que operam
33
+ * sobre `auth_mfa`.
34
+ */
35
+ export declare function withMfa(): <Model extends NormalizeConstructor<typeof BaseModel>>(superclass: Model) => Model;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Mixin de MFA/TOTP — AGORA UM NO-OP DE SCHEMA.
3
+ *
4
+ * O estado de MFA (`totp_secret`, `mfa_enabled_at`, `recovery_codes`,
5
+ * `last_totp_step`) é LIB-OWNED: vive na tabela própria auto-gerida `auth_mfa`
6
+ * (criada pelo `ensureAuthkitSchema`), keyed por `account_id`. O host NÃO precisa
7
+ * mais de migration para MFA e o model NÃO carrega mais essas colunas.
8
+ *
9
+ * O export `withMfa` é MANTIDO por compatibilidade — os apps continuam compondo
10
+ * `withMfa()` no model sem precisar mudar nada — mas ele não adiciona mais nenhuma
11
+ * coluna nem comportamento. Toda a leitura/escrita de MFA passa pelos métodos da
12
+ * {@link MfaCapability} do store (`getMfaState`, `verifyTotp`, etc.), que operam
13
+ * sobre `auth_mfa`.
14
+ */
15
+ export function withMfa() {
16
+ return (superclass) => {
17
+ // No-op: nenhuma coluna/decorator adicionado. Apps que compõem `withMfa()`
18
+ // continuam compilando; o estado de MFA vive em `auth_mfa` (lib-owned).
19
+ return superclass;
20
+ };
21
+ }
@@ -0,0 +1,19 @@
1
+ import { BaseModel } from '@adonisjs/lucid/orm';
2
+ import type { NormalizeConstructor } from '@adonisjs/core/types/helpers';
3
+ import { DateTime } from 'luxon';
4
+ /** Instância composta pelo mixin {@link withPersonalAccessToken}. */
5
+ export interface PersonalAccessTokenRow {
6
+ userId: string;
7
+ name: string;
8
+ tokenHash: string;
9
+ scopes: string[];
10
+ audience: string | null;
11
+ expiresAt: DateTime | null;
12
+ lastUsedAt: DateTime | null;
13
+ createdAt: DateTime;
14
+ updatedAt: DateTime;
15
+ }
16
+ export type PersonalAccessTokenClass<Model extends NormalizeConstructor<typeof BaseModel>> = Model & {
17
+ new (...args: any[]): PersonalAccessTokenRow;
18
+ };
19
+ export declare function withPersonalAccessToken(): <Model extends NormalizeConstructor<typeof BaseModel>>(superclass: Model) => PersonalAccessTokenClass<Model>;
@@ -0,0 +1,42 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { column } from '@adonisjs/lucid/orm';
8
+ import { jsonColumn } from './json_column.js';
9
+ export function withPersonalAccessToken() {
10
+ return (superclass) => {
11
+ class PatMixin extends superclass {
12
+ }
13
+ __decorate([
14
+ column()
15
+ ], PatMixin.prototype, "userId", void 0);
16
+ __decorate([
17
+ column()
18
+ ], PatMixin.prototype, "name", void 0);
19
+ __decorate([
20
+ column({ serializeAs: null })
21
+ ], PatMixin.prototype, "tokenHash", void 0);
22
+ __decorate([
23
+ column(jsonColumn({ fallback: [] }))
24
+ ], PatMixin.prototype, "scopes", void 0);
25
+ __decorate([
26
+ column()
27
+ ], PatMixin.prototype, "audience", void 0);
28
+ __decorate([
29
+ column.dateTime()
30
+ ], PatMixin.prototype, "expiresAt", void 0);
31
+ __decorate([
32
+ column.dateTime()
33
+ ], PatMixin.prototype, "lastUsedAt", void 0);
34
+ __decorate([
35
+ column.dateTime({ autoCreate: true })
36
+ ], PatMixin.prototype, "createdAt", void 0);
37
+ __decorate([
38
+ column.dateTime({ autoCreate: true, autoUpdate: true })
39
+ ], PatMixin.prototype, "updatedAt", void 0);
40
+ return PatMixin;
41
+ };
42
+ }
@@ -0,0 +1,20 @@
1
+ import { BaseModel } from '@adonisjs/lucid/orm';
2
+ import type { NormalizeConstructor } from '@adonisjs/core/types/helpers';
3
+ import { DateTime } from 'luxon';
4
+ /**
5
+ * Instância composta pelo mixin {@link withProviderIdentity}. Liga uma conta
6
+ * (`accountId`) a uma identidade externa `(provider, providerUserId)` — ex.:
7
+ * Google, GitHub. Uma conta pode ter várias identidades (account linking).
8
+ */
9
+ export interface ProviderIdentityRow {
10
+ provider: string;
11
+ providerUserId: string;
12
+ accountId: string;
13
+ email: string | null;
14
+ createdAt: DateTime;
15
+ updatedAt: DateTime;
16
+ }
17
+ export type ProviderIdentityClass<Model extends NormalizeConstructor<typeof BaseModel>> = Model & {
18
+ new (...args: any[]): ProviderIdentityRow;
19
+ };
20
+ export declare function withProviderIdentity(): <Model extends NormalizeConstructor<typeof BaseModel>>(superclass: Model) => ProviderIdentityClass<Model>;
@@ -0,0 +1,32 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { column } from '@adonisjs/lucid/orm';
8
+ export function withProviderIdentity() {
9
+ return (superclass) => {
10
+ class ProviderIdentityMixin extends superclass {
11
+ }
12
+ __decorate([
13
+ column()
14
+ ], ProviderIdentityMixin.prototype, "provider", void 0);
15
+ __decorate([
16
+ column()
17
+ ], ProviderIdentityMixin.prototype, "providerUserId", void 0);
18
+ __decorate([
19
+ column()
20
+ ], ProviderIdentityMixin.prototype, "accountId", void 0);
21
+ __decorate([
22
+ column()
23
+ ], ProviderIdentityMixin.prototype, "email", void 0);
24
+ __decorate([
25
+ column.dateTime({ autoCreate: true })
26
+ ], ProviderIdentityMixin.prototype, "createdAt", void 0);
27
+ __decorate([
28
+ column.dateTime({ autoCreate: true, autoUpdate: true })
29
+ ], ProviderIdentityMixin.prototype, "updatedAt", void 0);
30
+ return ProviderIdentityMixin;
31
+ };
32
+ }
@@ -0,0 +1,37 @@
1
+ import { BaseModel } from '@adonisjs/lucid/orm';
2
+ import type { NormalizeConstructor } from '@adonisjs/core/types/helpers';
3
+ import { DateTime } from 'luxon';
4
+ /**
5
+ * Instância composta pelo mixin {@link withWebauthnCredential}. Representa uma
6
+ * credencial WebAuthn / passkey ligada a uma conta (`accountId`). Uma conta pode
7
+ * ter várias credenciais (vários dispositivos/authenticators).
8
+ *
9
+ * O `id` é o credential id (base64url) devolvido pelo authenticator — é a chave
10
+ * primária. `publicKey` é a chave pública COSE em base64url (texto). `counter` é
11
+ * o contador do signature counter (anti-replay), atualizado a cada autenticação.
12
+ */
13
+ export interface WebauthnCredentialRow {
14
+ /** Conta dona desta credencial (→ auth.users). */
15
+ accountId: string;
16
+ /** Chave pública COSE em base64url (texto). */
17
+ publicKey: string;
18
+ /** Signature counter (anti-replay); atualizado a cada autenticação. */
19
+ counter: number;
20
+ /** Transports reportados (ex.: ['internal','hybrid']); null = desconhecido. */
21
+ transports: string[] | null;
22
+ /** Rótulo legível opcional (ex.: nome do dispositivo). */
23
+ label: string | null;
24
+ createdAt: DateTime;
25
+ updatedAt: DateTime;
26
+ }
27
+ export type WebauthnCredentialClass<Model extends NormalizeConstructor<typeof BaseModel>> = Model & {
28
+ new (...args: any[]): WebauthnCredentialRow;
29
+ };
30
+ /**
31
+ * Mixin de credenciais WebAuthn / passkey. Adiciona as colunas
32
+ * `account_id`, `public_key`, `counter`, `transports`, `label` + timestamps ao
33
+ * model. Segue o mesmo padrão de {@link withProviderIdentity}: o host compõe um
34
+ * model dedicado (`compose(BaseModel, withWebauthnCredential())`) e passa para o
35
+ * `lucidAccountStore` via a opção `webauthnCredentialModel`.
36
+ */
37
+ export declare function withWebauthnCredential(): <Model extends NormalizeConstructor<typeof BaseModel>>(superclass: Model) => WebauthnCredentialClass<Model>;
@@ -0,0 +1,46 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { column } from '@adonisjs/lucid/orm';
8
+ import { jsonColumn } from './json_column.js';
9
+ /**
10
+ * Mixin de credenciais WebAuthn / passkey. Adiciona as colunas
11
+ * `account_id`, `public_key`, `counter`, `transports`, `label` + timestamps ao
12
+ * model. Segue o mesmo padrão de {@link withProviderIdentity}: o host compõe um
13
+ * model dedicado (`compose(BaseModel, withWebauthnCredential())`) e passa para o
14
+ * `lucidAccountStore` via a opção `webauthnCredentialModel`.
15
+ */
16
+ export function withWebauthnCredential() {
17
+ return (superclass) => {
18
+ class WebauthnCredentialMixin extends superclass {
19
+ }
20
+ __decorate([
21
+ column()
22
+ ], WebauthnCredentialMixin.prototype, "accountId", void 0);
23
+ __decorate([
24
+ column()
25
+ ], WebauthnCredentialMixin.prototype, "publicKey", void 0);
26
+ __decorate([
27
+ column()
28
+ ], WebauthnCredentialMixin.prototype, "counter", void 0);
29
+ __decorate([
30
+ column(jsonColumn({
31
+ fallback: null,
32
+ treatEmptyArrayAsEmpty: true,
33
+ }))
34
+ ], WebauthnCredentialMixin.prototype, "transports", void 0);
35
+ __decorate([
36
+ column()
37
+ ], WebauthnCredentialMixin.prototype, "label", void 0);
38
+ __decorate([
39
+ column.dateTime({ autoCreate: true })
40
+ ], WebauthnCredentialMixin.prototype, "createdAt", void 0);
41
+ __decorate([
42
+ column.dateTime({ autoCreate: true, autoUpdate: true })
43
+ ], WebauthnCredentialMixin.prototype, "updatedAt", void 0);
44
+ return WebauthnCredentialMixin;
45
+ };
46
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Republica `event` no barramento de diagnostics como `agora:authkit:<event>`
3
+ * (o canal/diagnostics suffix É o nome do evento — sem tabela de mapeamento).
4
+ * Best-effort: qualquer erro é engolido para nunca quebrar a request.
5
+ */
6
+ export declare function emitDiagnostic(event: string, payload: unknown): void;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Ponte estrutural (best-effort) entre a auditoria do authkit e o barramento de
3
+ * diagnostics do Agora. Lê o slot global `@agora/diagnostics:emit` de forma
4
+ * ESTRUTURAL — nunca importa `@adonis-agora/diagnostics` — e degrada para no-op
5
+ * quando o diagnostics não está instalado. Mesmo idioma do
6
+ * `adonis-resilience`/`diagnosticsSink`.
7
+ *
8
+ * Sempre ligado: como `emit` é gratuito quando não há nada inscrito, o custo é
9
+ * desprezível por padrão; um watcher (Telescope ou qualquer
10
+ * `onDiagnostic('authkit', …)`) registra quando presente. Nada aqui pode lançar
11
+ * para dentro do caminho de auth.
12
+ */
13
+ const EMIT_SLOT = Symbol.for("@agora/diagnostics:emit");
14
+ /**
15
+ * Republica `event` no barramento de diagnostics como `agora:authkit:<event>`
16
+ * (o canal/diagnostics suffix É o nome do evento — sem tabela de mapeamento).
17
+ * Best-effort: qualquer erro é engolido para nunca quebrar a request.
18
+ */
19
+ export function emitDiagnostic(event, payload) {
20
+ try {
21
+ const emit = globalThis[EMIT_SLOT];
22
+ emit?.("authkit", event, payload);
23
+ }
24
+ catch {
25
+ // best-effort: a ponte de diagnostics nunca quebra o caminho de auth.
26
+ }
27
+ }
@@ -0,0 +1,5 @@
1
+ import type { HttpContext } from '@adonisjs/core/http';
2
+ export default class MetricsController {
3
+ json(ctx: HttpContext): Promise<any>;
4
+ dashboard(ctx: HttpContext): Promise<void>;
5
+ }
@@ -0,0 +1,24 @@
1
+ function renderDashboardHtml(snapshot) {
2
+ const counters = Object.entries(snapshot.counters)
3
+ .map(([k, v]) => `<tr><td>${k}</td><td>${v}</td></tr>`)
4
+ .join('');
5
+ const histograms = Object.entries(snapshot.histograms)
6
+ .map(([k, h]) => `<tr><td>${k}</td><td>${h.count}</td><td>${h.sum}</td><td>${h.min}</td><td>${h.max}</td></tr>`)
7
+ .join('');
8
+ return `<!doctype html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="refresh" content="5"><title>AuthKit — Metrics</title>
9
+ <style>body{font-family:system-ui,sans-serif;margin:2rem;color:#111}h1{font-size:1.2rem}table{border-collapse:collapse;margin:1rem 0;width:100%}th,td{border:1px solid #ddd;padding:.4rem .6rem;text-align:left;font-size:.9rem}th{background:#f5f5f5}</style>
10
+ </head><body><h1>AuthKit — Metrics</h1><p>Updated: ${snapshot.updatedAt ? new Date(snapshot.updatedAt).toISOString() : '—'}</p>
11
+ <h2>Counters</h2><table><thead><tr><th>Metric</th><th>Total</th></tr></thead><tbody>${counters || '<tr><td colspan="2">—</td></tr>'}</tbody></table>
12
+ <h2>Histograms</h2><table><thead><tr><th>Metric</th><th>Count</th><th>Sum</th><th>Min</th><th>Max</th></tr></thead><tbody>${histograms || '<tr><td colspan="5">—</td></tr>'}</tbody></table>
13
+ </body></html>`;
14
+ }
15
+ export default class MetricsController {
16
+ async json(ctx) {
17
+ const recorder = await ctx.containerResolver.make('authkit.metrics');
18
+ return recorder.snapshot();
19
+ }
20
+ async dashboard(ctx) {
21
+ const recorder = await ctx.containerResolver.make('authkit.metrics');
22
+ return ctx.response.type('html').send(renderDashboardHtml(recorder.snapshot()));
23
+ }
24
+ }
@@ -0,0 +1,2 @@
1
+ import { type MetricsRecorder, type ObservabilityConfig } from '@adonis-agora/authkit-core';
2
+ export declare function createMetricsRecorder(observability: ObservabilityConfig, meterName: string): Promise<MetricsRecorder>;
@@ -0,0 +1,7 @@
1
+ import { NoopRecorder } from '@adonis-agora/authkit-core';
2
+ import { OtelRecorder } from './otel_recorder.js';
3
+ export async function createMetricsRecorder(observability, meterName) {
4
+ if (!observability.metrics)
5
+ return new NoopRecorder();
6
+ return OtelRecorder.create(meterName);
7
+ }
@@ -0,0 +1,10 @@
1
+ import { type AuthkitMetricName, type MetricsRecorder, type MetricsSnapshot } from '@adonis-agora/authkit-core';
2
+ /** Recorder que (best-effort) emite via @opentelemetry/api e SEMPRE agrega em memória. */
3
+ export declare class OtelRecorder implements MetricsRecorder {
4
+ #private;
5
+ private constructor();
6
+ static create(name: string): Promise<OtelRecorder>;
7
+ increment(name: AuthkitMetricName, attributes?: Record<string, string | number>): void;
8
+ record(name: AuthkitMetricName, value: number, attributes?: Record<string, string | number>): void;
9
+ snapshot(): MetricsSnapshot;
10
+ }
@@ -0,0 +1,59 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { InMemorySnapshot, } from '@adonis-agora/authkit-core';
10
+ /** Recorder que (best-effort) emite via @opentelemetry/api e SEMPRE agrega em memória. */
11
+ export class OtelRecorder {
12
+ #snapshot = new InMemorySnapshot();
13
+ #counters = new Map();
14
+ #histograms = new Map();
15
+ #meter;
16
+ constructor(meter) {
17
+ this.#meter = meter;
18
+ }
19
+ static async create(name) {
20
+ let meter = null;
21
+ try {
22
+ // Specifier dinâmico (não-estático) para que o TS não tente resolver o
23
+ // peer opcional @opentelemetry/api em tempo de compilação. Em runtime,
24
+ // se o pacote não estiver instalado, caímos no catch e ficamos no-op.
25
+ const moduleName = '@opentelemetry/api';
26
+ const otel = await import(__rewriteRelativeImportExtension(moduleName));
27
+ meter = otel.metrics.getMeter(name);
28
+ }
29
+ catch {
30
+ meter = null;
31
+ }
32
+ return new OtelRecorder(meter);
33
+ }
34
+ increment(name, attributes) {
35
+ this.#snapshot.bump(name);
36
+ if (!this.#meter)
37
+ return;
38
+ let c = this.#counters.get(name);
39
+ if (!c) {
40
+ c = this.#meter.createCounter(name);
41
+ this.#counters.set(name, c);
42
+ }
43
+ c.add(1, attributes);
44
+ }
45
+ record(name, value, attributes) {
46
+ this.#snapshot.observe(name, value);
47
+ if (!this.#meter)
48
+ return;
49
+ let h = this.#histograms.get(name);
50
+ if (!h) {
51
+ h = this.#meter.createHistogram(name);
52
+ this.#histograms.set(name, h);
53
+ }
54
+ h.record(value, attributes);
55
+ }
56
+ snapshot() {
57
+ return this.#snapshot.read();
58
+ }
59
+ }
@@ -0,0 +1,24 @@
1
+ import type { DataProvider } from "@adonis-agora/telescope";
2
+ /**
3
+ * A stat (`{ value, delta?, spark? }`) over a window for a set of event types.
4
+ * `query.metric` chooses the grouping; `query.windowMs` the window (default 24h).
5
+ */
6
+ export declare function authkitEventCountProvider(): DataProvider;
7
+ /**
8
+ * Login success rate as a gauge (`{ value, min, max }`), over `query.windowMs`
9
+ * (default 24h). `1` when there were no logins in the window.
10
+ */
11
+ export declare function authkitLoginSuccessRateProvider(): DataProvider;
12
+ /**
13
+ * Logins over time as `timeseries` rows (`{ rows: [{ label, success, failure }] }`),
14
+ * bucketed into `query.buckets ?? 24` equal time buckets across the captured span.
15
+ */
16
+ export declare function authkitLoginsOverTimeProvider(): DataProvider;
17
+ export declare function authkitEventBreakdownProvider(): DataProvider;
18
+ /**
19
+ * Recent PAT + impersonation activity as `table` rows (newest-first), bounded by
20
+ * `query.limit` (default 50). Each row exposes the event, subject and actor.
21
+ */
22
+ export declare function authkitTokenActivityProvider(): DataProvider;
23
+ /** Every authkit data provider, in registration order. */
24
+ export declare function authkitDataProviders(): DataProvider[];