@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.
- package/LICENSE +21 -0
- package/README.md +158 -0
- package/build/assets/grafana/authkit-dashboard.json +118 -0
- package/build/commands/clients_create.d.ts +27 -0
- package/build/commands/clients_create.js +121 -0
- package/build/commands/commands.json +292 -0
- package/build/commands/configure.d.ts +2 -0
- package/build/commands/configure.js +45 -0
- package/build/commands/doctor.d.ts +10 -0
- package/build/commands/doctor.js +113 -0
- package/build/commands/eject.d.ts +11 -0
- package/build/commands/eject.js +96 -0
- package/build/commands/expire_scan.d.ts +28 -0
- package/build/commands/expire_scan.js +92 -0
- package/build/commands/import_users.d.ts +17 -0
- package/build/commands/import_users.js +80 -0
- package/build/commands/keys_rotate.d.ts +21 -0
- package/build/commands/keys_rotate.js +126 -0
- package/build/commands/main.d.ts +12 -0
- package/build/commands/main.js +38 -0
- package/build/commands/settings_get.d.ts +18 -0
- package/build/commands/settings_get.js +43 -0
- package/build/commands/settings_list.d.ts +17 -0
- package/build/commands/settings_list.js +39 -0
- package/build/commands/settings_set.d.ts +20 -0
- package/build/commands/settings_set.js +55 -0
- package/build/commands/settings_unset.d.ts +18 -0
- package/build/commands/settings_unset.js +46 -0
- package/build/commands/ui_preset.d.ts +4 -0
- package/build/commands/ui_preset.js +32 -0
- package/build/database/migrations/make_authkit_oidc_table.d.ts +6 -0
- package/build/database/migrations/make_authkit_oidc_table.js +19 -0
- package/build/host/ui/admin.html +29 -0
- package/build/host/views/account/apps.edge +59 -0
- package/build/host/views/account/confirm.edge +70 -0
- package/build/host/views/account/email-confirmed.edge +16 -0
- package/build/host/views/account/login.edge +33 -0
- package/build/host/views/account/mfa.edge +152 -0
- package/build/host/views/account/orgs.edge +58 -0
- package/build/host/views/account/security.edge +215 -0
- package/build/host/views/account/tokens.edge +75 -0
- package/build/host/views/consent.edge +20 -0
- package/build/host/views/forgot.edge +43 -0
- package/build/host/views/login.edge +251 -0
- package/build/host/views/maintenance.edge +32 -0
- package/build/host/views/mfa-challenge.edge +107 -0
- package/build/host/views/otp-unlock.edge +40 -0
- package/build/host/views/partials/styles.edge +2 -0
- package/build/host/views/reset.edge +30 -0
- package/build/host/views/signup.edge +62 -0
- package/build/host/views/verify-email.edge +17 -0
- package/build/index.d.ts +115 -0
- package/build/index.js +76 -0
- package/build/password/common_passwords.txt +10000 -0
- package/build/providers/authkit_server_provider.d.ts +27 -0
- package/build/providers/authkit_server_provider.js +242 -0
- package/build/src/accounts/account_store.d.ts +578 -0
- package/build/src/accounts/account_store.js +60 -0
- package/build/src/accounts/lucid_account_store.d.ts +156 -0
- package/build/src/accounts/lucid_account_store.js +294 -0
- package/build/src/accounts/lucid_store/core.d.ts +9 -0
- package/build/src/accounts/lucid_store/core.js +306 -0
- package/build/src/accounts/lucid_store/mfa.d.ts +15 -0
- package/build/src/accounts/lucid_store/mfa.js +108 -0
- package/build/src/accounts/lucid_store/organizations.d.ts +13 -0
- package/build/src/accounts/lucid_store/organizations.js +294 -0
- package/build/src/accounts/lucid_store/password_hygiene.d.ts +20 -0
- package/build/src/accounts/lucid_store/password_hygiene.js +130 -0
- package/build/src/accounts/lucid_store/provider_identity.d.ts +8 -0
- package/build/src/accounts/lucid_store/provider_identity.js +59 -0
- package/build/src/accounts/lucid_store/shared.d.ts +113 -0
- package/build/src/accounts/lucid_store/shared.js +130 -0
- package/build/src/accounts/lucid_store/status_profile.d.ts +34 -0
- package/build/src/accounts/lucid_store/status_profile.js +100 -0
- package/build/src/accounts/lucid_store/webauthn.d.ts +8 -0
- package/build/src/accounts/lucid_store/webauthn.js +140 -0
- package/build/src/accounts/lucid_stores.d.ts +45 -0
- package/build/src/accounts/lucid_stores.js +30 -0
- package/build/src/adapters/adapter_contract.d.ts +37 -0
- package/build/src/adapters/adapter_contract.js +1 -0
- package/build/src/adapters/database_adapter.d.ts +21 -0
- package/build/src/adapters/database_adapter.js +79 -0
- package/build/src/adapters/factory.d.ts +30 -0
- package/build/src/adapters/factory.js +43 -0
- package/build/src/adapters/redis_adapter.d.ts +24 -0
- package/build/src/adapters/redis_adapter.js +122 -0
- package/build/src/audit/audit_sink.d.ts +63 -0
- package/build/src/audit/audit_sink.js +1 -0
- package/build/src/audit/lucid_audit_sink.d.ts +10 -0
- package/build/src/audit/lucid_audit_sink.js +99 -0
- package/build/src/commands/expire_scan_command.d.ts +60 -0
- package/build/src/commands/expire_scan_command.js +229 -0
- package/build/src/commands/import_clients.d.ts +40 -0
- package/build/src/commands/import_clients.js +79 -0
- package/build/src/commands/import_users.d.ts +51 -0
- package/build/src/commands/import_users.js +94 -0
- package/build/src/commands/resolve_config.d.ts +13 -0
- package/build/src/commands/resolve_config.js +18 -0
- package/build/src/commands/settings_commands.d.ts +47 -0
- package/build/src/commands/settings_commands.js +270 -0
- package/build/src/controllers/oidc_callback_controller.d.ts +22 -0
- package/build/src/controllers/oidc_callback_controller.js +33 -0
- package/build/src/define_config.d.ts +772 -0
- package/build/src/define_config.js +351 -0
- package/build/src/doctor/checks.d.ts +197 -0
- package/build/src/doctor/checks.js +858 -0
- package/build/src/events/dispatcher.d.ts +45 -0
- package/build/src/events/dispatcher.js +117 -0
- package/build/src/host/account_api/account_api_controller.d.ts +245 -0
- package/build/src/host/account_api/account_api_controller.js +827 -0
- package/build/src/host/account_deletion_ops.d.ts +80 -0
- package/build/src/host/account_deletion_ops.js +118 -0
- package/build/src/host/account_deletion_service.d.ts +63 -0
- package/build/src/host/account_deletion_service.js +133 -0
- package/build/src/host/account_export_service.d.ts +76 -0
- package/build/src/host/account_export_service.js +140 -0
- package/build/src/host/account_home.d.ts +11 -0
- package/build/src/host/account_home.js +11 -0
- package/build/src/host/account_lockout.d.ts +86 -0
- package/build/src/host/account_lockout.js +185 -0
- package/build/src/host/active_org_cookie.d.ts +28 -0
- package/build/src/host/active_org_cookie.js +47 -0
- package/build/src/host/admin_api/admin_api_guard.d.ts +16 -0
- package/build/src/host/admin_api/admin_api_guard.js +59 -0
- package/build/src/host/admin_api/admin_orgs_service.d.ts +125 -0
- package/build/src/host/admin_api/admin_orgs_service.js +324 -0
- package/build/src/host/admin_api/admin_users_service.d.ts +163 -0
- package/build/src/host/admin_api/admin_users_service.js +308 -0
- package/build/src/host/admin_api/api_clients_controller.d.ts +54 -0
- package/build/src/host/admin_api/api_clients_controller.js +89 -0
- package/build/src/host/admin_api/api_keys_controller.d.ts +19 -0
- package/build/src/host/admin_api/api_keys_controller.js +36 -0
- package/build/src/host/admin_api/api_misc_controller.d.ts +19 -0
- package/build/src/host/admin_api/api_misc_controller.js +44 -0
- package/build/src/host/admin_api/api_orgs_controller.d.ts +108 -0
- package/build/src/host/admin_api/api_orgs_controller.js +189 -0
- package/build/src/host/admin_api/api_settings_controller.d.ts +55 -0
- package/build/src/host/admin_api/api_settings_controller.js +134 -0
- package/build/src/host/admin_api/api_users_controller.d.ts +108 -0
- package/build/src/host/admin_api/api_users_controller.js +187 -0
- package/build/src/host/admin_api/dto.d.ts +131 -0
- package/build/src/host/admin_api/dto.js +122 -0
- package/build/src/host/admin_api/token_verify_service.d.ts +34 -0
- package/build/src/host/admin_api/token_verify_service.js +74 -0
- package/build/src/host/admin_clients_service.d.ts +88 -0
- package/build/src/host/admin_clients_service.js +181 -0
- package/build/src/host/admin_console/admin_shell_controller.d.ts +27 -0
- package/build/src/host/admin_console/admin_shell_controller.js +167 -0
- package/build/src/host/admin_console/console_audit_controller.d.ts +17 -0
- package/build/src/host/admin_console/console_audit_controller.js +25 -0
- package/build/src/host/admin_console/console_clients_controller.d.ts +53 -0
- package/build/src/host/admin_console/console_clients_controller.js +102 -0
- package/build/src/host/admin_console/console_impersonation_controller.d.ts +23 -0
- package/build/src/host/admin_console/console_impersonation_controller.js +45 -0
- package/build/src/host/admin_console/console_keys_controller.d.ts +24 -0
- package/build/src/host/admin_console/console_keys_controller.js +41 -0
- package/build/src/host/admin_console/console_orgs_controller.d.ts +96 -0
- package/build/src/host/admin_console/console_orgs_controller.js +238 -0
- package/build/src/host/admin_console/console_overview_controller.d.ts +27 -0
- package/build/src/host/admin_console/console_overview_controller.js +44 -0
- package/build/src/host/admin_console/console_roles_controller.d.ts +31 -0
- package/build/src/host/admin_console/console_roles_controller.js +108 -0
- package/build/src/host/admin_console/console_sessions_controller.d.ts +91 -0
- package/build/src/host/admin_console/console_sessions_controller.js +125 -0
- package/build/src/host/admin_console/console_settings_controller.d.ts +47 -0
- package/build/src/host/admin_console/console_settings_controller.js +115 -0
- package/build/src/host/admin_console/console_users_controller.d.ts +110 -0
- package/build/src/host/admin_console/console_users_controller.js +212 -0
- package/build/src/host/admin_prefix.d.ts +50 -0
- package/build/src/host/admin_prefix.js +77 -0
- package/build/src/host/admin_sessions_service.d.ts +119 -0
- package/build/src/host/admin_sessions_service.js +284 -0
- package/build/src/host/admin_stats_service.d.ts +44 -0
- package/build/src/host/admin_stats_service.js +130 -0
- package/build/src/host/admin_validators.d.ts +247 -0
- package/build/src/host/admin_validators.js +197 -0
- package/build/src/host/augmentations.d.ts +12 -0
- package/build/src/host/augmentations.js +1 -0
- package/build/src/host/auth_host_config.d.ts +22 -0
- package/build/src/host/auth_host_config.js +13 -0
- package/build/src/host/avatar_storage.d.ts +68 -0
- package/build/src/host/avatar_storage.js +166 -0
- package/build/src/host/bot_protection.d.ts +187 -0
- package/build/src/host/bot_protection.js +132 -0
- package/build/src/host/branding.d.ts +19 -0
- package/build/src/host/branding.js +8 -0
- package/build/src/host/config_locks.d.ts +38 -0
- package/build/src/host/config_locks.js +70 -0
- package/build/src/host/console_session.d.ts +27 -0
- package/build/src/host/console_session.js +36 -0
- package/build/src/host/controllers/account_apps_controller.d.ts +15 -0
- package/build/src/host/controllers/account_apps_controller.js +61 -0
- package/build/src/host/controllers/account_confirm_controller.d.ts +24 -0
- package/build/src/host/controllers/account_confirm_controller.js +144 -0
- package/build/src/host/controllers/account_mfa_controller.d.ts +28 -0
- package/build/src/host/controllers/account_mfa_controller.js +208 -0
- package/build/src/host/controllers/account_orgs_controller.d.ts +80 -0
- package/build/src/host/controllers/account_orgs_controller.js +401 -0
- package/build/src/host/controllers/account_security_controller.d.ts +43 -0
- package/build/src/host/controllers/account_security_controller.js +546 -0
- package/build/src/host/controllers/account_session_controller.d.ts +21 -0
- package/build/src/host/controllers/account_session_controller.js +113 -0
- package/build/src/host/controllers/account_tokens_controller.d.ts +7 -0
- package/build/src/host/controllers/account_tokens_controller.js +67 -0
- package/build/src/host/controllers/interaction_controller.d.ts +125 -0
- package/build/src/host/controllers/interaction_controller.js +981 -0
- package/build/src/host/controllers/pat_introspection_controller.d.ts +22 -0
- package/build/src/host/controllers/pat_introspection_controller.js +46 -0
- package/build/src/host/controllers/registration_controller.d.ts +18 -0
- package/build/src/host/controllers/registration_controller.js +382 -0
- package/build/src/host/controllers/social_controller.d.ts +8 -0
- package/build/src/host/controllers/social_controller.js +89 -0
- package/build/src/host/csrf.d.ts +29 -0
- package/build/src/host/csrf.js +14 -0
- package/build/src/host/default_mailer.d.ts +112 -0
- package/build/src/host/default_mailer.js +417 -0
- package/build/src/host/durable/account_deletion_workflow.d.ts +48 -0
- package/build/src/host/durable/account_deletion_workflow.js +86 -0
- package/build/src/host/durable/account_export_workflow.d.ts +68 -0
- package/build/src/host/durable/account_export_workflow.js +93 -0
- package/build/src/host/durable/index.d.ts +68 -0
- package/build/src/host/durable/index.js +77 -0
- package/build/src/host/email_templates.d.ts +39 -0
- package/build/src/host/email_templates.js +69 -0
- package/build/src/host/geo.d.ts +22 -0
- package/build/src/host/geo.js +39 -0
- package/build/src/host/i18n.d.ts +1416 -0
- package/build/src/host/i18n.js +1583 -0
- package/build/src/host/impersonation.d.ts +25 -0
- package/build/src/host/impersonation.js +31 -0
- package/build/src/host/key_rotation.d.ts +14 -0
- package/build/src/host/key_rotation.js +27 -0
- package/build/src/host/key_rotation_actions.d.ts +42 -0
- package/build/src/host/key_rotation_actions.js +27 -0
- package/build/src/host/login_attempt.d.ts +98 -0
- package/build/src/host/login_attempt.js +211 -0
- package/build/src/host/login_notify.d.ts +27 -0
- package/build/src/host/login_notify.js +142 -0
- package/build/src/host/middleware/account_auth.d.ts +7 -0
- package/build/src/host/middleware/account_auth.js +11 -0
- package/build/src/host/otp_lockout.d.ts +103 -0
- package/build/src/host/otp_lockout.js +221 -0
- package/build/src/host/rate_limit.d.ts +39 -0
- package/build/src/host/rate_limit.js +94 -0
- package/build/src/host/register_auth_host.d.ts +97 -0
- package/build/src/host/register_auth_host.js +466 -0
- package/build/src/host/renderers/edge_renderer.d.ts +12 -0
- package/build/src/host/renderers/edge_renderer.js +38 -0
- package/build/src/host/renderers/inertia_renderer.d.ts +70 -0
- package/build/src/host/renderers/inertia_renderer.js +54 -0
- package/build/src/host/runtime_settings.d.ts +181 -0
- package/build/src/host/runtime_settings.js +307 -0
- package/build/src/host/runtime_toggles.d.ts +807 -0
- package/build/src/host/runtime_toggles.js +784 -0
- package/build/src/host/security_notice_service.d.ts +36 -0
- package/build/src/host/security_notice_service.js +87 -0
- package/build/src/host/session_context.d.ts +23 -0
- package/build/src/host/session_context.js +89 -0
- package/build/src/host/sudo_mode.d.ts +56 -0
- package/build/src/host/sudo_mode.js +99 -0
- package/build/src/host/svg_chart.d.ts +15 -0
- package/build/src/host/svg_chart.js +45 -0
- package/build/src/host/trusted_device.d.ts +61 -0
- package/build/src/host/trusted_device.js +65 -0
- package/build/src/host/ui-dist/assets/index-CRWcmsex.js +137 -0
- package/build/src/host/ui-dist/assets/index-DTSmD4RU.css +1 -0
- package/build/src/host/ui-dist/index.html +17 -0
- package/build/src/host/user_agent.d.ts +18 -0
- package/build/src/host/user_agent.js +50 -0
- package/build/src/host/validators.d.ts +127 -0
- package/build/src/host/validators.js +53 -0
- package/build/src/keys/jwks_manager.d.ts +6 -0
- package/build/src/keys/jwks_manager.js +11 -0
- package/build/src/keys/keystore.d.ts +52 -0
- package/build/src/keys/keystore.js +68 -0
- package/build/src/keys/keystore_codec.d.ts +20 -0
- package/build/src/keys/keystore_codec.js +42 -0
- package/build/src/keys/keystore_crypto.d.ts +9 -0
- package/build/src/keys/keystore_crypto.js +27 -0
- package/build/src/keys/keystore_manager.d.ts +43 -0
- package/build/src/keys/keystore_manager.js +104 -0
- package/build/src/keys/keystore_vault.d.ts +113 -0
- package/build/src/keys/keystore_vault.js +265 -0
- package/build/src/mixins/json_column.d.ts +33 -0
- package/build/src/mixins/json_column.js +38 -0
- package/build/src/mixins/with_audit_log.d.ts +19 -0
- package/build/src/mixins/with_audit_log.js +39 -0
- package/build/src/mixins/with_auth_user.d.ts +24 -0
- package/build/src/mixins/with_auth_user.js +46 -0
- package/build/src/mixins/with_credentials.d.ts +20 -0
- package/build/src/mixins/with_credentials.js +29 -0
- package/build/src/mixins/with_mfa.d.ts +35 -0
- package/build/src/mixins/with_mfa.js +21 -0
- package/build/src/mixins/with_personal_access_token.d.ts +19 -0
- package/build/src/mixins/with_personal_access_token.js +42 -0
- package/build/src/mixins/with_provider_identity.d.ts +20 -0
- package/build/src/mixins/with_provider_identity.js +32 -0
- package/build/src/mixins/with_webauthn_credential.d.ts +37 -0
- package/build/src/mixins/with_webauthn_credential.js +46 -0
- package/build/src/observability/diagnostics_bridge.d.ts +6 -0
- package/build/src/observability/diagnostics_bridge.js +27 -0
- package/build/src/observability/metrics_controller.d.ts +5 -0
- package/build/src/observability/metrics_controller.js +24 -0
- package/build/src/observability/metrics_service.d.ts +2 -0
- package/build/src/observability/metrics_service.js +7 -0
- package/build/src/observability/otel_recorder.d.ts +10 -0
- package/build/src/observability/otel_recorder.js +59 -0
- package/build/src/observability/telescope/data_providers.d.ts +24 -0
- package/build/src/observability/telescope/data_providers.js +235 -0
- package/build/src/observability/telescope/extension.d.ts +29 -0
- package/build/src/observability/telescope/extension.js +167 -0
- package/build/src/observability/telescope/index.d.ts +8 -0
- package/build/src/observability/telescope/index.js +8 -0
- package/build/src/observability/wire_provider_events.d.ts +12 -0
- package/build/src/observability/wire_provider_events.js +30 -0
- package/build/src/password/common_passwords.d.ts +31 -0
- package/build/src/password/common_passwords.js +73 -0
- package/build/src/password/password_manager.d.ts +163 -0
- package/build/src/password/password_manager.js +191 -0
- package/build/src/password/policy.d.ts +71 -0
- package/build/src/password/policy.js +55 -0
- package/build/src/password/pwned.d.ts +36 -0
- package/build/src/password/pwned.js +52 -0
- package/build/src/pat/lucid_pat_store.d.ts +6 -0
- package/build/src/pat/lucid_pat_store.js +62 -0
- package/build/src/pat/pat_store.d.ts +31 -0
- package/build/src/pat/pat_store.js +1 -0
- package/build/src/pat/pat_tokens.d.ts +4 -0
- package/build/src/pat/pat_tokens.js +9 -0
- package/build/src/provider/build_provider.d.ts +45 -0
- package/build/src/provider/build_provider.js +219 -0
- package/build/src/provider/device_sources.d.ts +6 -0
- package/build/src/provider/device_sources.js +65 -0
- package/build/src/provider/interaction_actions.d.ts +36 -0
- package/build/src/provider/interaction_actions.js +55 -0
- package/build/src/provider/key_rotation_scheduler.d.ts +28 -0
- package/build/src/provider/key_rotation_scheduler.js +40 -0
- package/build/src/provider/keystore_reload.d.ts +21 -0
- package/build/src/provider/keystore_reload.js +39 -0
- package/build/src/provider/logout_sources.d.ts +13 -0
- package/build/src/provider/logout_sources.js +64 -0
- package/build/src/provider/oidc_service.d.ts +81 -0
- package/build/src/provider/oidc_service.js +254 -0
- package/build/src/provider/single_flight_lock.d.ts +18 -0
- package/build/src/provider/single_flight_lock.js +31 -0
- package/build/src/provider/token_exchange.d.ts +21 -0
- package/build/src/provider/token_exchange.js +124 -0
- package/build/src/register_routes.d.ts +16 -0
- package/build/src/register_routes.js +21 -0
- package/build/src/schema/ensure.d.ts +41 -0
- package/build/src/schema/ensure.js +262 -0
- package/build/stubs/config/authkit.stub +20 -0
- package/build/stubs/config/authkit_react.stub +52 -0
- package/build/stubs/main.d.ts +1 -0
- package/build/stubs/main.js +2 -0
- package/build/stubs/models/auth_user.stub +22 -0
- package/build/stubs/ui/edge/views/consent.edge +13 -0
- package/build/stubs/ui/edge/views/login.edge +19 -0
- package/build/stubs/ui/react/components/auth_shell.tsx +67 -0
- package/build/stubs/ui/react/pages/account/login.tsx +56 -0
- package/build/stubs/ui/react/pages/account/mfa.tsx +132 -0
- package/build/stubs/ui/react/pages/account/tokens.tsx +88 -0
- package/build/stubs/ui/react/pages/consent.tsx +39 -0
- package/build/stubs/ui/react/pages/forgot.tsx +44 -0
- package/build/stubs/ui/react/pages/login.tsx +171 -0
- package/build/stubs/ui/react/pages/mfa-challenge.tsx +72 -0
- package/build/stubs/ui/react/pages/reset.tsx +58 -0
- package/build/stubs/ui/react/pages/signup.tsx +78 -0
- package/build/stubs/ui/react/pages/verify-email.tsx +24 -0
- package/build/types.d.ts +7 -0
- package/build/types.js +1 -0
- package/package.json +147 -0
- package/stubs/config/authkit.stub +20 -0
- package/stubs/config/authkit_react.stub +52 -0
- package/stubs/main.ts +2 -0
- package/stubs/models/auth_user.stub +22 -0
- package/stubs/ui/edge/views/consent.edge +13 -0
- package/stubs/ui/edge/views/login.edge +19 -0
- package/stubs/ui/react/components/auth_shell.tsx +67 -0
- package/stubs/ui/react/pages/account/login.tsx +56 -0
- package/stubs/ui/react/pages/account/mfa.tsx +132 -0
- package/stubs/ui/react/pages/account/tokens.tsx +88 -0
- package/stubs/ui/react/pages/consent.tsx +39 -0
- package/stubs/ui/react/pages/forgot.tsx +44 -0
- package/stubs/ui/react/pages/login.tsx +171 -0
- package/stubs/ui/react/pages/mfa-challenge.tsx +72 -0
- package/stubs/ui/react/pages/reset.tsx +58 -0
- package/stubs/ui/react/pages/signup.tsx +78 -0
- package/stubs/ui/react/pages/verify-email.tsx +24 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { AuditEvent, AuditSink } from "../audit/audit_sink.js";
|
|
2
|
+
/**
|
|
3
|
+
* Configuração de eventos/webhooks para o host observar tudo que o IdP audita.
|
|
4
|
+
*
|
|
5
|
+
* - `onEvent`: callback in-process disparado para CADA evento de auditoria
|
|
6
|
+
* (best-effort, fire-and-forget). Útil para encaminhar a um bus interno.
|
|
7
|
+
* - `webhook`: POST JSON do evento para uma URL externa. Quando `secret` é dado,
|
|
8
|
+
* assina o corpo com HMAC-SHA256 no header `x-authkit-signature`.
|
|
9
|
+
*
|
|
10
|
+
* Nada aqui pode lançar para dentro do caminho da request: todo erro é engolido.
|
|
11
|
+
*/
|
|
12
|
+
export interface EventsConfigInput {
|
|
13
|
+
/** Callback in-process para cada evento auditado (best-effort). */
|
|
14
|
+
onEvent?: (event: AuditEvent) => void | Promise<void>;
|
|
15
|
+
/** Webhook HTTP: POST do evento em JSON. */
|
|
16
|
+
webhook?: {
|
|
17
|
+
/** URL de destino do POST. */
|
|
18
|
+
url: string;
|
|
19
|
+
/** Segredo opcional para assinar o corpo (HMAC-SHA256). */
|
|
20
|
+
secret?: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export interface ResolvedEventsConfig {
|
|
24
|
+
onEvent?: (event: AuditEvent) => void | Promise<void>;
|
|
25
|
+
webhook?: {
|
|
26
|
+
url: string;
|
|
27
|
+
secret?: string;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export declare function resolveEvents(input?: EventsConfigInput): ResolvedEventsConfig | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Constrói o corpo JSON canônico do webhook a partir de um evento de auditoria.
|
|
33
|
+
* O `ts` é o instante do dispatch (ISO 8601).
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildWebhookBody(event: AuditEvent): string;
|
|
36
|
+
/** Calcula o header de assinatura `sha256=<hmac>` para um corpo + segredo. */
|
|
37
|
+
export declare function signWebhookBody(body: string, secret: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Decora um AuditSink (ou cria um do zero) num sink fan-out: cada `record`
|
|
40
|
+
* persiste no sink original (se houver) E dispara onEvent + webhook. Falhas em
|
|
41
|
+
* qualquer ramo são isoladas — uma não impede as outras nem a request.
|
|
42
|
+
*
|
|
43
|
+
* `list` é delegado ao sink original quando existir (preserva a consulta admin).
|
|
44
|
+
*/
|
|
45
|
+
export declare function composeAuditSink(original: AuditSink | undefined, events?: ResolvedEventsConfig): AuditSink;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { createHmac } from "node:crypto";
|
|
2
|
+
import { emitDiagnostic } from "../observability/diagnostics_bridge.js";
|
|
3
|
+
export function resolveEvents(input) {
|
|
4
|
+
if (!input || (!input.onEvent && !input.webhook))
|
|
5
|
+
return undefined;
|
|
6
|
+
return {
|
|
7
|
+
onEvent: input.onEvent,
|
|
8
|
+
webhook: input.webhook,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/** Timeout (ms) do POST do webhook antes de abortar. */
|
|
12
|
+
const WEBHOOK_TIMEOUT_MS = 5000;
|
|
13
|
+
/**
|
|
14
|
+
* Constrói o corpo JSON canônico do webhook a partir de um evento de auditoria.
|
|
15
|
+
* O `ts` é o instante do dispatch (ISO 8601).
|
|
16
|
+
*/
|
|
17
|
+
export function buildWebhookBody(event) {
|
|
18
|
+
return JSON.stringify({
|
|
19
|
+
type: event.type,
|
|
20
|
+
accountId: event.accountId ?? null,
|
|
21
|
+
email: event.email ?? null,
|
|
22
|
+
clientId: event.clientId ?? null,
|
|
23
|
+
ip: event.ip ?? null,
|
|
24
|
+
metadata: event.metadata ?? {},
|
|
25
|
+
ts: new Date().toISOString(),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/** Calcula o header de assinatura `sha256=<hmac>` para um corpo + segredo. */
|
|
29
|
+
export function signWebhookBody(body, secret) {
|
|
30
|
+
return "sha256=" + createHmac("sha256", secret).update(body).digest("hex");
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Dispara o webhook de forma fire-and-forget: timeout de 5s via AbortSignal,
|
|
34
|
+
* captura QUALQUER erro (rede, abort, HMAC) sem propagar. Nunca lança.
|
|
35
|
+
*/
|
|
36
|
+
async function dispatchWebhook(webhook, event) {
|
|
37
|
+
try {
|
|
38
|
+
const body = buildWebhookBody(event);
|
|
39
|
+
const headers = {
|
|
40
|
+
"content-type": "application/json",
|
|
41
|
+
};
|
|
42
|
+
if (webhook.secret) {
|
|
43
|
+
headers["x-authkit-signature"] = signWebhookBody(body, webhook.secret);
|
|
44
|
+
}
|
|
45
|
+
await fetch(webhook.url, {
|
|
46
|
+
method: "POST",
|
|
47
|
+
headers,
|
|
48
|
+
body,
|
|
49
|
+
signal: AbortSignal.timeout(WEBHOOK_TIMEOUT_MS),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// best-effort: erro de webhook nunca quebra o caminho da request.
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Decora um AuditSink (ou cria um do zero) num sink fan-out: cada `record`
|
|
58
|
+
* persiste no sink original (se houver) E dispara onEvent + webhook. Falhas em
|
|
59
|
+
* qualquer ramo são isoladas — uma não impede as outras nem a request.
|
|
60
|
+
*
|
|
61
|
+
* `list` é delegado ao sink original quando existir (preserva a consulta admin).
|
|
62
|
+
*/
|
|
63
|
+
export function composeAuditSink(original, events = {}) {
|
|
64
|
+
const composed = {
|
|
65
|
+
async record(event) {
|
|
66
|
+
// Persistência original (best-effort, isolada).
|
|
67
|
+
if (original) {
|
|
68
|
+
try {
|
|
69
|
+
await original.record(event);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// sink original com defeito não impede os demais ramos.
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Callback in-process (best-effort, isolado).
|
|
76
|
+
if (events.onEvent) {
|
|
77
|
+
try {
|
|
78
|
+
await events.onEvent(event);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// onEvent com defeito não quebra a request.
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Webhook fire-and-forget (não aguardamos a entrega).
|
|
85
|
+
if (events.webhook) {
|
|
86
|
+
void dispatchWebhook(events.webhook, event);
|
|
87
|
+
}
|
|
88
|
+
// Diagnostics Agora (best-effort, sempre ligado, no-op sem o slot).
|
|
89
|
+
// Canal: `agora:authkit:<AuditEventType>` (o `type` É o sufixo).
|
|
90
|
+
emitDiagnostic(event.type, event);
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
// Preserva a capacidade de consulta do sink original (console admin).
|
|
94
|
+
if (original && typeof original.list === "function") {
|
|
95
|
+
composed.list = original.list.bind(original);
|
|
96
|
+
}
|
|
97
|
+
// Preserva a anonimização (LGPD) do sink original (deleção de conta).
|
|
98
|
+
if (original && typeof original.anonymizeAccount === "function") {
|
|
99
|
+
composed.anonymizeAccount = original.anonymizeAccount.bind(original);
|
|
100
|
+
}
|
|
101
|
+
// Preserva quaisquer propriedades extras do sink original (ex.: campos de
|
|
102
|
+
// introspecção/diagnóstico que sinks customizados expõem) — o fan-out é um
|
|
103
|
+
// decorador transparente sobre a superfície do sink original. Funções são
|
|
104
|
+
// re-ligadas ao original para manter o `this`; métodos já tratados acima e o
|
|
105
|
+
// `record` (sobrescrito) não são copiados.
|
|
106
|
+
if (original) {
|
|
107
|
+
const src = original;
|
|
108
|
+
const dst = composed;
|
|
109
|
+
for (const key of Object.keys(src)) {
|
|
110
|
+
if (key === "record" || key === "list" || key === "anonymizeAccount")
|
|
111
|
+
continue;
|
|
112
|
+
const value = src[key];
|
|
113
|
+
dst[key] = typeof value === "function" ? value.bind(original) : value;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return composed;
|
|
117
|
+
}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account Self-Service JSON API
|
|
3
|
+
*
|
|
4
|
+
* Endpoints JSON sob `/account/api/*` (session-authed via accountGuard, mutating
|
|
5
|
+
* com CSRF). Reusa a lógica dos controllers de conta existentes sem duplicar regras.
|
|
6
|
+
*
|
|
7
|
+
* Mapa de rotas:
|
|
8
|
+
* GET /account/api/me → perfil + flags
|
|
9
|
+
* GET /account/api/security → overview de segurança (sessões, MFA, etc.)
|
|
10
|
+
* PATCH /account/api/profile → atualizar nome/avatar
|
|
11
|
+
* POST /account/api/password → trocar senha (sudo + senha atual)
|
|
12
|
+
* POST /account/api/email-change → solicitar troca de e-mail (sudo)
|
|
13
|
+
* POST /account/api/email-change/cancel → cancelar troca pendente
|
|
14
|
+
* GET /account/api/sessions → sessões ativas
|
|
15
|
+
* DELETE /account/api/sessions/:id → revogar uma sessão
|
|
16
|
+
* POST /account/api/sessions/revoke-others → revogar todas exceto a atual
|
|
17
|
+
* POST /account/api/sessions/revoke-all → revogar TODAS + logout global (signedOut: true)
|
|
18
|
+
* GET /account/api/apps → grants (apps autorizados)
|
|
19
|
+
* DELETE /account/api/apps/:clientId → revogar consentimento de um app
|
|
20
|
+
* GET /account/api/mfa → status MFA (totp + passkeys + recovery)
|
|
21
|
+
* GET /account/api/passkeys → lista passkeys
|
|
22
|
+
* DELETE /account/api/passkeys/:id → remover passkey
|
|
23
|
+
* GET /account/api/tokens → lista PATs
|
|
24
|
+
* POST /account/api/tokens → criar PAT (sudo)
|
|
25
|
+
* DELETE /account/api/tokens/:id → revogar PAT (sudo)
|
|
26
|
+
* GET /account/api/orgs → lista orgs do usuário
|
|
27
|
+
* GET /account/api/orgs/:id → detalhe de org (requer membership)
|
|
28
|
+
* GET /account/api/orgs/invitations → convites pendentes
|
|
29
|
+
*/
|
|
30
|
+
import '../augmentations.js';
|
|
31
|
+
import type { HttpContext } from '@adonisjs/core/http';
|
|
32
|
+
export default class AccountApiController {
|
|
33
|
+
/** Perfil + flags do usuário logado. */
|
|
34
|
+
me(ctx: HttpContext): Promise<void | {
|
|
35
|
+
id: any;
|
|
36
|
+
email: any;
|
|
37
|
+
emailVerified: any;
|
|
38
|
+
name: any;
|
|
39
|
+
avatarUrl: any;
|
|
40
|
+
globalRoles: any;
|
|
41
|
+
hasPassword: boolean;
|
|
42
|
+
mfaEnabled: boolean;
|
|
43
|
+
passkeyCount: number;
|
|
44
|
+
sudoActive: boolean;
|
|
45
|
+
capabilities: {
|
|
46
|
+
securitySupported: boolean;
|
|
47
|
+
profileSupported: boolean;
|
|
48
|
+
passkeysSupported: boolean;
|
|
49
|
+
orgsSupported: boolean;
|
|
50
|
+
tokensSupported: boolean;
|
|
51
|
+
avatarUploadSupported: boolean;
|
|
52
|
+
sessionsSupported: boolean;
|
|
53
|
+
};
|
|
54
|
+
}>;
|
|
55
|
+
/** Overview de segurança: sessões ativas, status MFA, passkeys, last pw change. */
|
|
56
|
+
securityOverview(ctx: HttpContext): Promise<void | {
|
|
57
|
+
email: any;
|
|
58
|
+
pendingEmail: any;
|
|
59
|
+
securitySupported: boolean;
|
|
60
|
+
profileSupported: boolean;
|
|
61
|
+
sessionsSupported: boolean;
|
|
62
|
+
activeSessions: {
|
|
63
|
+
id: string;
|
|
64
|
+
loginTs: string | null;
|
|
65
|
+
browser: string | null;
|
|
66
|
+
os: string | null;
|
|
67
|
+
ip: string | null;
|
|
68
|
+
location: string | null;
|
|
69
|
+
amr: string[];
|
|
70
|
+
}[];
|
|
71
|
+
mfa: {
|
|
72
|
+
enabled: boolean;
|
|
73
|
+
totpEnrolled: boolean;
|
|
74
|
+
passkeyCount: number;
|
|
75
|
+
passkeysSupported: boolean;
|
|
76
|
+
};
|
|
77
|
+
}>;
|
|
78
|
+
/** Atualizar nome + avatar do perfil. */
|
|
79
|
+
updateProfile(ctx: HttpContext): Promise<void | {
|
|
80
|
+
id: string;
|
|
81
|
+
name: string | null;
|
|
82
|
+
avatarUrl: string | null;
|
|
83
|
+
}>;
|
|
84
|
+
/** Trocar senha. Exige sudo + senha atual (mesmo comportamento da tela). */
|
|
85
|
+
changePassword(ctx: HttpContext): Promise<void | {
|
|
86
|
+
ok: boolean;
|
|
87
|
+
}>;
|
|
88
|
+
/** Solicitar troca de e-mail. Exige sudo. */
|
|
89
|
+
requestEmailChange(ctx: HttpContext): Promise<void | {
|
|
90
|
+
ok: boolean;
|
|
91
|
+
email: string;
|
|
92
|
+
}>;
|
|
93
|
+
/** Cancelar troca de e-mail pendente. */
|
|
94
|
+
cancelEmailChange(ctx: HttpContext): Promise<void | {
|
|
95
|
+
ok: boolean;
|
|
96
|
+
}>;
|
|
97
|
+
/** Sessões ativas do usuário logado. */
|
|
98
|
+
listSessions(ctx: HttpContext): Promise<{
|
|
99
|
+
supported: boolean;
|
|
100
|
+
sessions: {
|
|
101
|
+
id: string;
|
|
102
|
+
loginTs: string | null;
|
|
103
|
+
browser: string | null;
|
|
104
|
+
os: string | null;
|
|
105
|
+
ip: string | null;
|
|
106
|
+
location: string | null;
|
|
107
|
+
amr: string[];
|
|
108
|
+
}[];
|
|
109
|
+
}>;
|
|
110
|
+
/** Revogar uma sessão específica (verifica que pertence ao usuário logado). */
|
|
111
|
+
revokeSession(ctx: HttpContext): Promise<void | {
|
|
112
|
+
ok: boolean;
|
|
113
|
+
revoked: string;
|
|
114
|
+
}>;
|
|
115
|
+
/** Revogar todas as sessões exceto a atual (identificada pelo cookie de sessão). */
|
|
116
|
+
revokeOtherSessions(ctx: HttpContext): Promise<void | {
|
|
117
|
+
sessions: number;
|
|
118
|
+
grants: number;
|
|
119
|
+
accessTokens: number;
|
|
120
|
+
refreshTokens: number;
|
|
121
|
+
ok: boolean;
|
|
122
|
+
}>;
|
|
123
|
+
/**
|
|
124
|
+
* Revogar TODAS as sessões OIDC + grants/tokens da conta e encerrar a sessão
|
|
125
|
+
* Adonis do console (logout global). Retorna `{ ok, signedOut: true }` para que
|
|
126
|
+
* a UI redirecione para o login.
|
|
127
|
+
*
|
|
128
|
+
* i18n keys: account.sessions.revoke_all_success (unused server-side — JSON API)
|
|
129
|
+
*/
|
|
130
|
+
revokeAllSessions(ctx: HttpContext): Promise<void | {
|
|
131
|
+
sessions: number;
|
|
132
|
+
grants: number;
|
|
133
|
+
accessTokens: number;
|
|
134
|
+
refreshTokens: number;
|
|
135
|
+
ok: boolean;
|
|
136
|
+
signedOut: boolean;
|
|
137
|
+
}>;
|
|
138
|
+
/** Apps com acesso (grants) do usuário logado. */
|
|
139
|
+
listApps(ctx: HttpContext): Promise<{
|
|
140
|
+
supported: boolean;
|
|
141
|
+
apps: {
|
|
142
|
+
clientId: string;
|
|
143
|
+
accessTokens: number;
|
|
144
|
+
refreshTokens: number;
|
|
145
|
+
}[];
|
|
146
|
+
}>;
|
|
147
|
+
/** Revogar consentimento de um app (clientId). */
|
|
148
|
+
revokeApp(ctx: HttpContext): Promise<void | {
|
|
149
|
+
sessions: number;
|
|
150
|
+
grants: number;
|
|
151
|
+
accessTokens: number;
|
|
152
|
+
refreshTokens: number;
|
|
153
|
+
ok: boolean;
|
|
154
|
+
}>;
|
|
155
|
+
/** Status completo do MFA: TOTP + passkeys + recovery. */
|
|
156
|
+
mfaStatus(ctx: HttpContext): Promise<{
|
|
157
|
+
enabled: any;
|
|
158
|
+
totp: {
|
|
159
|
+
enrolled: any;
|
|
160
|
+
};
|
|
161
|
+
passkeys: {
|
|
162
|
+
supported: boolean;
|
|
163
|
+
count: number;
|
|
164
|
+
items: {
|
|
165
|
+
id: string;
|
|
166
|
+
label: string | null;
|
|
167
|
+
createdAt: string;
|
|
168
|
+
}[];
|
|
169
|
+
};
|
|
170
|
+
recovery: {
|
|
171
|
+
available: any;
|
|
172
|
+
};
|
|
173
|
+
}>;
|
|
174
|
+
/** Lista passkeys do usuário logado. */
|
|
175
|
+
listPasskeys(ctx: HttpContext): Promise<{
|
|
176
|
+
supported: boolean;
|
|
177
|
+
passkeys: any;
|
|
178
|
+
}>;
|
|
179
|
+
/** Remover uma passkey. Exige sudo. */
|
|
180
|
+
removePasskey(ctx: HttpContext): Promise<void | {
|
|
181
|
+
ok: boolean;
|
|
182
|
+
removed: string;
|
|
183
|
+
}>;
|
|
184
|
+
/** Lista PATs (Personal Access Tokens) do usuário logado. */
|
|
185
|
+
listTokens(ctx: HttpContext): Promise<{
|
|
186
|
+
supported: boolean;
|
|
187
|
+
tokens: any;
|
|
188
|
+
}>;
|
|
189
|
+
/** Criar um PAT. Exige sudo. O secret é retornado UMA vez. */
|
|
190
|
+
createToken(ctx: HttpContext): Promise<void | {
|
|
191
|
+
id: any;
|
|
192
|
+
name: any;
|
|
193
|
+
scopes: any;
|
|
194
|
+
audience: any;
|
|
195
|
+
createdAt: any;
|
|
196
|
+
secret: any;
|
|
197
|
+
}>;
|
|
198
|
+
/** Revogar um PAT. Exige sudo. */
|
|
199
|
+
revokeToken(ctx: HttpContext): Promise<void | {
|
|
200
|
+
ok: boolean;
|
|
201
|
+
revoked: string;
|
|
202
|
+
}>;
|
|
203
|
+
/** Lista orgs do usuário logado. Alias consolidado dos /account/orgs/json existentes. */
|
|
204
|
+
listOrgs(ctx: HttpContext): Promise<{
|
|
205
|
+
supported: boolean;
|
|
206
|
+
activeOrgId: any;
|
|
207
|
+
orgs: {
|
|
208
|
+
id: string;
|
|
209
|
+
name: string;
|
|
210
|
+
slug: string;
|
|
211
|
+
logoUrl: string | null;
|
|
212
|
+
role: string;
|
|
213
|
+
isActive: boolean;
|
|
214
|
+
}[];
|
|
215
|
+
}>;
|
|
216
|
+
/** Detalhe de uma org (requer membership). */
|
|
217
|
+
showOrg(ctx: HttpContext): Promise<void | {
|
|
218
|
+
id: string;
|
|
219
|
+
name: string;
|
|
220
|
+
slug: string;
|
|
221
|
+
logoUrl: string | null;
|
|
222
|
+
role: string;
|
|
223
|
+
canManage: boolean;
|
|
224
|
+
members: {
|
|
225
|
+
accountId: string;
|
|
226
|
+
email: string | null;
|
|
227
|
+
role: string;
|
|
228
|
+
joinedAt: string;
|
|
229
|
+
}[];
|
|
230
|
+
}>;
|
|
231
|
+
/** Convites pendentes para o e-mail do usuário logado. */
|
|
232
|
+
listOrgInvitations(ctx: HttpContext): Promise<void | {
|
|
233
|
+
supported: boolean;
|
|
234
|
+
invitations: {
|
|
235
|
+
id: string;
|
|
236
|
+
organizationId: string;
|
|
237
|
+
orgName: string;
|
|
238
|
+
orgSlug: string;
|
|
239
|
+
email: string;
|
|
240
|
+
role: string;
|
|
241
|
+
expiresAt: string;
|
|
242
|
+
createdAt: string;
|
|
243
|
+
}[];
|
|
244
|
+
}>;
|
|
245
|
+
}
|