@hed-hog/core 0.0.399 → 0.0.400
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/dist/ai/ai-agent.sort.d.ts +6 -0
- package/dist/ai/ai-agent.sort.d.ts.map +1 -0
- package/dist/ai/ai-agent.sort.js +21 -0
- package/dist/ai/ai-agent.sort.js.map +1 -0
- package/dist/ai/ai.controller.d.ts +4 -4
- package/dist/ai/ai.service.d.ts +35 -4
- package/dist/ai/ai.service.d.ts.map +1 -1
- package/dist/ai/ai.service.js +51 -137
- package/dist/ai/ai.service.js.map +1 -1
- package/dist/ai-instruction/ai-instruction.service.d.ts.map +1 -1
- package/dist/ai-instruction/ai-instruction.service.js +26 -23
- package/dist/ai-instruction/ai-instruction.service.js.map +1 -1
- package/dist/ai-instruction/ai-instruction.sort.d.ts +16 -0
- package/dist/ai-instruction/ai-instruction.sort.d.ts.map +1 -0
- package/dist/ai-instruction/ai-instruction.sort.js +32 -0
- package/dist/ai-instruction/ai-instruction.sort.js.map +1 -0
- package/dist/auth/auth.controller.d.ts +24 -8
- package/dist/auth/auth.controller.d.ts.map +1 -1
- package/dist/auth/auth.module.d.ts.map +1 -1
- package/dist/auth/auth.module.js +8 -1
- package/dist/auth/auth.module.js.map +1 -1
- package/dist/auth/auth.service.d.ts +72 -25
- package/dist/auth/auth.service.d.ts.map +1 -1
- package/dist/auth/auth.service.js +41 -4
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/auth/guards/auth.guard.d.ts +3 -1
- package/dist/auth/guards/auth.guard.d.ts.map +1 -1
- package/dist/auth/guards/auth.guard.js +12 -3
- package/dist/auth/guards/auth.guard.js.map +1 -1
- package/dist/authorize/authorize.controller.d.ts +29 -5
- package/dist/authorize/authorize.controller.d.ts.map +1 -1
- package/dist/authorize/authorize.controller.js +120 -13
- package/dist/authorize/authorize.controller.js.map +1 -1
- package/dist/authorize/authorize.errors.d.ts +34 -0
- package/dist/authorize/authorize.errors.d.ts.map +1 -0
- package/dist/authorize/authorize.errors.js +37 -0
- package/dist/authorize/authorize.errors.js.map +1 -0
- package/dist/authorize/authorize.module.d.ts.map +1 -1
- package/dist/authorize/authorize.module.js +6 -1
- package/dist/authorize/authorize.module.js.map +1 -1
- package/dist/authorize/authorize.service.d.ts +77 -3
- package/dist/authorize/authorize.service.d.ts.map +1 -1
- package/dist/authorize/authorize.service.js +212 -21
- package/dist/authorize/authorize.service.js.map +1 -1
- package/dist/authorize/dto/authorize-info.dto.d.ts +10 -1
- package/dist/authorize/dto/authorize-info.dto.d.ts.map +1 -1
- package/dist/authorize/dto/authorize-info.dto.js +16 -1
- package/dist/authorize/dto/authorize-info.dto.js.map +1 -1
- package/dist/authorize/dto/consent.dto.d.ts +10 -1
- package/dist/authorize/dto/consent.dto.d.ts.map +1 -1
- package/dist/authorize/dto/consent.dto.js +16 -1
- package/dist/authorize/dto/consent.dto.js.map +1 -1
- package/dist/authorize/dto/token.dto.d.ts +12 -0
- package/dist/authorize/dto/token.dto.d.ts.map +1 -1
- package/dist/authorize/dto/token.dto.js +21 -1
- package/dist/authorize/dto/token.dto.js.map +1 -1
- package/dist/authorize/oauth-exception.filter.d.ts +17 -0
- package/dist/authorize/oauth-exception.filter.d.ts.map +1 -0
- package/dist/authorize/oauth-exception.filter.js +54 -0
- package/dist/authorize/oauth-exception.filter.js.map +1 -0
- package/dist/authorize/oauth-metadata.service.d.ts +39 -0
- package/dist/authorize/oauth-metadata.service.d.ts.map +1 -0
- package/dist/authorize/oauth-metadata.service.js +81 -0
- package/dist/authorize/oauth-metadata.service.js.map +1 -0
- package/dist/authorize/well-known.controller.d.ts +67 -0
- package/dist/authorize/well-known.controller.d.ts.map +1 -0
- package/dist/authorize/well-known.controller.js +126 -0
- package/dist/authorize/well-known.controller.js.map +1 -0
- package/dist/captcha/captcha.service.d.ts +32 -2
- package/dist/captcha/captcha.service.d.ts.map +1 -1
- package/dist/captcha/captcha.service.js +85 -12
- package/dist/captcha/captcha.service.js.map +1 -1
- package/dist/challenge/challenge.service.d.ts +2 -2
- package/dist/core.module.d.ts.map +1 -1
- package/dist/core.module.js +6 -0
- package/dist/core.module.js.map +1 -1
- package/dist/dashboard/dashboard/dashboard.controller.d.ts +9 -9
- package/dist/dashboard/dashboard/dashboard.service.d.ts +9 -9
- package/dist/dashboard/dashboard-component/dashboard-component.controller.d.ts +3 -3
- package/dist/dashboard/dashboard-component/dashboard-component.service.d.ts +3 -3
- package/dist/dashboard/dashboard-component-role/dashboard-component-role.controller.d.ts +3 -3
- package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts +3 -3
- package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts.map +1 -1
- package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.js +2 -4
- package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.js.map +1 -1
- package/dist/dashboard/dashboard-component-role/dashboard-component-role.sort.d.ts +8 -0
- package/dist/dashboard/dashboard-component-role/dashboard-component-role.sort.d.ts.map +1 -0
- package/dist/dashboard/dashboard-component-role/dashboard-component-role.sort.js +18 -0
- package/dist/dashboard/dashboard-component-role/dashboard-component-role.sort.js.map +1 -0
- package/dist/dashboard/dashboard-item/dashboard-item.service.d.ts.map +1 -1
- package/dist/dashboard/dashboard-item/dashboard-item.service.js +2 -4
- package/dist/dashboard/dashboard-item/dashboard-item.service.js.map +1 -1
- package/dist/dashboard/dashboard-item/dashboard-item.sort.d.ts +9 -0
- package/dist/dashboard/dashboard-item/dashboard-item.sort.d.ts.map +1 -0
- package/dist/dashboard/dashboard-item/dashboard-item.sort.js +19 -0
- package/dist/dashboard/dashboard-item/dashboard-item.sort.js.map +1 -0
- package/dist/dashboard/dashboard-role/dashboard-role.controller.d.ts +3 -3
- package/dist/dashboard/dashboard-role/dashboard-role.service.d.ts +3 -3
- package/dist/dashboard/dashboard-role/dashboard-role.service.d.ts.map +1 -1
- package/dist/dashboard/dashboard-role/dashboard-role.service.js +2 -4
- package/dist/dashboard/dashboard-role/dashboard-role.service.js.map +1 -1
- package/dist/dashboard/dashboard-role/dashboard-role.sort.d.ts +8 -0
- package/dist/dashboard/dashboard-role/dashboard-role.sort.d.ts.map +1 -0
- package/dist/dashboard/dashboard-role/dashboard-role.sort.js +16 -0
- package/dist/dashboard/dashboard-role/dashboard-role.sort.js.map +1 -0
- package/dist/file/file-upload-ticket.service.d.ts +160 -0
- package/dist/file/file-upload-ticket.service.d.ts.map +1 -0
- package/dist/file/file-upload-ticket.service.js +382 -0
- package/dist/file/file-upload-ticket.service.js.map +1 -0
- package/dist/file/file.controller.d.ts +24 -1
- package/dist/file/file.controller.d.ts.map +1 -1
- package/dist/file/file.controller.js +63 -2
- package/dist/file/file.controller.js.map +1 -1
- package/dist/file/file.module.d.ts.map +1 -1
- package/dist/file/file.module.js +14 -2
- package/dist/file/file.module.js.map +1 -1
- package/dist/file/file.service.d.ts +182 -6
- package/dist/file/file.service.d.ts.map +1 -1
- package/dist/file/file.service.js +386 -54
- package/dist/file/file.service.js.map +1 -1
- package/dist/file/filename-encoding.util.d.ts +24 -0
- package/dist/file/filename-encoding.util.d.ts.map +1 -0
- package/dist/file/filename-encoding.util.js +63 -0
- package/dist/file/filename-encoding.util.js.map +1 -0
- package/dist/file/image-optimization.service.d.ts +27 -0
- package/dist/file/image-optimization.service.d.ts.map +1 -1
- package/dist/file/image-optimization.service.js +63 -14
- package/dist/file/image-optimization.service.js.map +1 -1
- package/dist/file/mcp-file-source.schema.d.ts +33 -0
- package/dist/file/mcp-file-source.schema.d.ts.map +1 -0
- package/dist/file/mcp-file-source.schema.js +75 -0
- package/dist/file/mcp-file-source.schema.js.map +1 -0
- package/dist/file/mcp-file-source.service.d.ts +124 -0
- package/dist/file/mcp-file-source.service.d.ts.map +1 -0
- package/dist/file/mcp-file-source.service.js +262 -0
- package/dist/file/mcp-file-source.service.js.map +1 -0
- package/dist/file/mimetype-sniff.util.d.ts +62 -0
- package/dist/file/mimetype-sniff.util.d.ts.map +1 -0
- package/dist/file/mimetype-sniff.util.js +226 -0
- package/dist/file/mimetype-sniff.util.js.map +1 -0
- package/dist/file/remote-fetch.util.d.ts +35 -0
- package/dist/file/remote-fetch.util.d.ts.map +1 -0
- package/dist/file/remote-fetch.util.js +236 -0
- package/dist/file/remote-fetch.util.js.map +1 -0
- package/dist/impersonation/dto/start-impersonation.dto.d.ts +4 -1
- package/dist/impersonation/dto/start-impersonation.dto.d.ts.map +1 -1
- package/dist/impersonation/dto/start-impersonation.dto.js +1 -1
- package/dist/impersonation/dto/start-impersonation.dto.js.map +1 -1
- package/dist/impersonation/impersonation.service.d.ts +8 -3
- package/dist/impersonation/impersonation.service.d.ts.map +1 -1
- package/dist/impersonation/impersonation.service.js +14 -4
- package/dist/impersonation/impersonation.service.js.map +1 -1
- package/dist/incident/incident.controller.d.ts +2 -1
- package/dist/incident/incident.controller.d.ts.map +1 -1
- package/dist/incident/incident.controller.js +10 -6
- package/dist/incident/incident.controller.js.map +1 -1
- package/dist/incident/incident.service.d.ts +2 -0
- package/dist/incident/incident.service.d.ts.map +1 -1
- package/dist/incident/incident.service.js +4 -0
- package/dist/incident/incident.service.js.map +1 -1
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.secrets.js +7 -0
- package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
- package/dist/integration-profile/integration-profile.service.d.ts +0 -13
- package/dist/integration-profile/integration-profile.service.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.service.js +5 -40
- package/dist/integration-profile/integration-profile.service.js.map +1 -1
- package/dist/integration-profile/integration-profile.utils.js +5 -5
- package/dist/integration-profile/integration-profile.utils.js.map +1 -1
- package/dist/integration-profile/testers/index.d.ts.map +1 -1
- package/dist/integration-profile/testers/index.js +2 -0
- package/dist/integration-profile/testers/index.js.map +1 -1
- package/dist/integration-profile/testers/shipping.testers.d.ts +3 -0
- package/dist/integration-profile/testers/shipping.testers.d.ts.map +1 -0
- package/dist/integration-profile/testers/shipping.testers.js +71 -0
- package/dist/integration-profile/testers/shipping.testers.js.map +1 -0
- package/dist/locale/locale.controller.d.ts +1 -1
- package/dist/locale/locale.service.d.ts +1 -1
- package/dist/mail/dto/send.dto.d.ts +6 -1
- package/dist/mail/dto/send.dto.d.ts.map +1 -1
- package/dist/mail/dto/send.dto.js.map +1 -1
- package/dist/mail/mail.service.d.ts +9 -0
- package/dist/mail/mail.service.d.ts.map +1 -1
- package/dist/mail/mail.service.js +34 -14
- package/dist/mail/mail.service.js.map +1 -1
- package/dist/mail-sent/mail-sent.controller.d.ts +1 -1
- package/dist/mail-sent/mail-sent.service.d.ts +1 -1
- package/dist/mail-sent/mail-sent.service.d.ts.map +1 -1
- package/dist/mail-sent/mail-sent.service.js +2 -1
- package/dist/mail-sent/mail-sent.service.js.map +1 -1
- package/dist/mail-sent/mail-sent.sort.d.ts +9 -0
- package/dist/mail-sent/mail-sent.sort.d.ts.map +1 -0
- package/dist/mail-sent/mail-sent.sort.js +19 -0
- package/dist/mail-sent/mail-sent.sort.js.map +1 -0
- package/dist/mcp/filters/mcp-challenge.filter.d.ts +20 -0
- package/dist/mcp/filters/mcp-challenge.filter.d.ts.map +1 -0
- package/dist/mcp/filters/mcp-challenge.filter.js +69 -0
- package/dist/mcp/filters/mcp-challenge.filter.js.map +1 -0
- package/dist/mcp/guards/mcp-auth.guard.d.ts +4 -1
- package/dist/mcp/guards/mcp-auth.guard.d.ts.map +1 -1
- package/dist/mcp/guards/mcp-auth.guard.js +19 -5
- package/dist/mcp/guards/mcp-auth.guard.js.map +1 -1
- package/dist/mcp/guards/mcp-permission.guard.d.ts +25 -3
- package/dist/mcp/guards/mcp-permission.guard.d.ts.map +1 -1
- package/dist/mcp/guards/mcp-permission.guard.js +46 -26
- package/dist/mcp/guards/mcp-permission.guard.js.map +1 -1
- package/dist/mcp/mcp-audit.service.d.ts +17 -0
- package/dist/mcp/mcp-audit.service.d.ts.map +1 -1
- package/dist/mcp/mcp-audit.service.js +32 -3
- package/dist/mcp/mcp-audit.service.js.map +1 -1
- package/dist/mcp/mcp-permission.service.d.ts +64 -0
- package/dist/mcp/mcp-permission.service.d.ts.map +1 -0
- package/dist/mcp/mcp-permission.service.js +178 -0
- package/dist/mcp/mcp-permission.service.js.map +1 -0
- package/dist/mcp/mcp-server.service.d.ts +3 -1
- package/dist/mcp/mcp-server.service.d.ts.map +1 -1
- package/dist/mcp/mcp-server.service.js +36 -15
- package/dist/mcp/mcp-server.service.js.map +1 -1
- package/dist/mcp/mcp.controller.d.ts.map +1 -1
- package/dist/mcp/mcp.controller.js +10 -2
- package/dist/mcp/mcp.controller.js.map +1 -1
- package/dist/mcp/mcp.module.d.ts.map +1 -1
- package/dist/mcp/mcp.module.js +5 -1
- package/dist/mcp/mcp.module.js.map +1 -1
- package/dist/mcp/tools/core-ai.mcp-tools.js +2 -9
- package/dist/mcp/tools/core-ai.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-dashboard-items.mcp-tools.js +1 -1
- package/dist/mcp/tools/core-dashboard-items.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-dashboard.mcp-tools.js +2 -9
- package/dist/mcp/tools/core-dashboard.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-event-webhooks.mcp-tools.d.ts.map +1 -1
- package/dist/mcp/tools/core-event-webhooks.mcp-tools.js +2 -10
- package/dist/mcp/tools/core-event-webhooks.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-files.mcp-tools.d.ts +17 -5
- package/dist/mcp/tools/core-files.mcp-tools.d.ts.map +1 -1
- package/dist/mcp/tools/core-files.mcp-tools.js +186 -24
- package/dist/mcp/tools/core-files.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-integration-events.mcp-tools.js +2 -9
- package/dist/mcp/tools/core-integration-events.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-mail-sent.mcp-tools.js +2 -14
- package/dist/mcp/tools/core-mail-sent.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-mail.mcp-tools.js +2 -9
- package/dist/mcp/tools/core-mail.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-menus.mcp-tools.d.ts.map +1 -1
- package/dist/mcp/tools/core-menus.mcp-tools.js +2 -10
- package/dist/mcp/tools/core-menus.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-notifications.mcp-tools.d.ts.map +1 -1
- package/dist/mcp/tools/core-notifications.mcp-tools.js +0 -1
- package/dist/mcp/tools/core-notifications.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-roles.mcp-tools.d.ts.map +1 -1
- package/dist/mcp/tools/core-roles.mcp-tools.js +2 -13
- package/dist/mcp/tools/core-roles.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-routes.mcp-tools.d.ts.map +1 -1
- package/dist/mcp/tools/core-routes.mcp-tools.js +2 -11
- package/dist/mcp/tools/core-routes.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-screens.mcp-tools.d.ts.map +1 -1
- package/dist/mcp/tools/core-screens.mcp-tools.js +2 -11
- package/dist/mcp/tools/core-screens.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-sessions.mcp-tools.d.ts.map +1 -1
- package/dist/mcp/tools/core-sessions.mcp-tools.js +0 -2
- package/dist/mcp/tools/core-sessions.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-settings.mcp-tools.d.ts.map +1 -1
- package/dist/mcp/tools/core-settings.mcp-tools.js +2 -10
- package/dist/mcp/tools/core-settings.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-users.mcp-tools.js +2 -9
- package/dist/mcp/tools/core-users.mcp-tools.js.map +1 -1
- package/dist/mcp/tools/core-webhooks.mcp-tools.d.ts.map +1 -1
- package/dist/mcp/tools/core-webhooks.mcp-tools.js +2 -10
- package/dist/mcp/tools/core-webhooks.mcp-tools.js.map +1 -1
- package/dist/mcp/types/mcp-context.type.d.ts +9 -0
- package/dist/mcp/types/mcp-context.type.d.ts.map +1 -1
- package/dist/mcp-chat/mcp-chat.service.d.ts.map +1 -1
- package/dist/mcp-chat/mcp-chat.service.js +8 -0
- package/dist/mcp-chat/mcp-chat.service.js.map +1 -1
- package/dist/meeting/meeting-provider.registry.d.ts +115 -0
- package/dist/meeting/meeting-provider.registry.d.ts.map +1 -1
- package/dist/meeting/meeting-provider.registry.js.map +1 -1
- package/dist/meeting/meeting.constants.d.ts +70 -0
- package/dist/meeting/meeting.constants.d.ts.map +1 -1
- package/dist/meeting/meeting.constants.js +9 -1
- package/dist/meeting/meeting.constants.js.map +1 -1
- package/dist/menu/menu.service.d.ts.map +1 -1
- package/dist/menu/menu.service.js +29 -9
- package/dist/menu/menu.service.js.map +1 -1
- package/dist/message-template/dto/update-message-template.dto.d.ts +18 -0
- package/dist/message-template/dto/update-message-template.dto.d.ts.map +1 -0
- package/dist/message-template/dto/update-message-template.dto.js +38 -0
- package/dist/message-template/dto/update-message-template.dto.js.map +1 -0
- package/dist/message-template/message-template-admin.service.d.ts +70 -0
- package/dist/message-template/message-template-admin.service.d.ts.map +1 -0
- package/dist/message-template/message-template-admin.service.js +226 -0
- package/dist/message-template/message-template-admin.service.js.map +1 -0
- package/dist/message-template/message-template.controller.d.ts +29 -0
- package/dist/message-template/message-template.controller.d.ts.map +1 -0
- package/dist/message-template/message-template.controller.js +101 -0
- package/dist/message-template/message-template.controller.js.map +1 -0
- package/dist/message-template/message-template.module.d.ts +10 -0
- package/dist/message-template/message-template.module.d.ts.map +1 -0
- package/dist/message-template/message-template.module.js +33 -0
- package/dist/message-template/message-template.module.js.map +1 -0
- package/dist/message-template/message-template.registry.d.ts +55 -0
- package/dist/message-template/message-template.registry.d.ts.map +1 -0
- package/dist/message-template/message-template.registry.js +64 -0
- package/dist/message-template/message-template.registry.js.map +1 -0
- package/dist/message-template/message-template.service.d.ts +59 -0
- package/dist/message-template/message-template.service.d.ts.map +1 -0
- package/dist/message-template/message-template.service.js +166 -0
- package/dist/message-template/message-template.service.js.map +1 -0
- package/dist/notification/notification.constants.d.ts +11 -0
- package/dist/notification/notification.constants.d.ts.map +1 -0
- package/dist/notification/notification.constants.js +14 -0
- package/dist/notification/notification.constants.js.map +1 -0
- package/dist/notification/notification.controller.d.ts +20 -20
- package/dist/notification/notification.module.d.ts.map +1 -1
- package/dist/notification/notification.module.js +3 -0
- package/dist/notification/notification.module.js.map +1 -1
- package/dist/notification/notification.service.d.ts +33 -21
- package/dist/notification/notification.service.d.ts.map +1 -1
- package/dist/notification/notification.service.js +36 -2
- package/dist/notification/notification.service.js.map +1 -1
- package/dist/oauth/oauth.controller.d.ts +4 -6
- package/dist/oauth/oauth.controller.d.ts.map +1 -1
- package/dist/oauth/oauth.controller.js +0 -1
- package/dist/oauth/oauth.controller.js.map +1 -1
- package/dist/oauth/oauth.errors.d.ts +15 -1
- package/dist/oauth/oauth.errors.d.ts.map +1 -1
- package/dist/oauth/oauth.errors.js +9 -1
- package/dist/oauth/oauth.errors.js.map +1 -1
- package/dist/oauth/oauth.module.d.ts.map +1 -1
- package/dist/oauth/oauth.module.js +6 -1
- package/dist/oauth/oauth.module.js.map +1 -1
- package/dist/oauth/oauth.service.d.ts +25 -5
- package/dist/oauth/oauth.service.d.ts.map +1 -1
- package/dist/oauth/oauth.service.js +63 -27
- package/dist/oauth/oauth.service.js.map +1 -1
- package/dist/oauth/providers/abstract.provider.d.ts +10 -0
- package/dist/oauth/providers/abstract.provider.d.ts.map +1 -1
- package/dist/oauth/providers/abstract.provider.js +39 -12
- package/dist/oauth/providers/abstract.provider.js.map +1 -1
- package/dist/oauth/providers/github.provider.d.ts +1 -1
- package/dist/oauth/providers/github.provider.d.ts.map +1 -1
- package/dist/oauth/providers/github.provider.js +48 -22
- package/dist/oauth/providers/github.provider.js.map +1 -1
- package/dist/oauth/providers/microsoft-entra-id.provider.d.ts.map +1 -1
- package/dist/oauth/providers/microsoft-entra-id.provider.js +6 -0
- package/dist/oauth/providers/microsoft-entra-id.provider.js.map +1 -1
- package/dist/observability/monitored-cron.d.ts +29 -12
- package/dist/observability/monitored-cron.d.ts.map +1 -1
- package/dist/observability/monitored-cron.js +131 -46
- package/dist/observability/monitored-cron.js.map +1 -1
- package/dist/pairing/pairing.service.d.ts +6 -2
- package/dist/pairing/pairing.service.d.ts.map +1 -1
- package/dist/profile/dto/change-password.dto.d.ts.map +1 -1
- package/dist/profile/dto/change-password.dto.js +4 -6
- package/dist/profile/dto/change-password.dto.js.map +1 -1
- package/dist/profile/profile.controller.d.ts +1 -1
- package/dist/profile/profile.service.d.ts +1 -1
- package/dist/profile/profile.service.d.ts.map +1 -1
- package/dist/profile/profile.service.js +9 -3
- package/dist/profile/profile.service.js.map +1 -1
- package/dist/realtime/realtime-tick.coalescer.d.ts +34 -0
- package/dist/realtime/realtime-tick.coalescer.d.ts.map +1 -0
- package/dist/realtime/realtime-tick.coalescer.js +60 -0
- package/dist/realtime/realtime-tick.coalescer.js.map +1 -0
- package/dist/realtime/realtime.service.d.ts +2 -0
- package/dist/realtime/realtime.service.d.ts.map +1 -1
- package/dist/realtime/realtime.service.js +22 -2
- package/dist/realtime/realtime.service.js.map +1 -1
- package/dist/redis/redis-kv.service.d.ts +90 -0
- package/dist/redis/redis-kv.service.d.ts.map +1 -0
- package/dist/redis/redis-kv.service.js +247 -0
- package/dist/redis/redis-kv.service.js.map +1 -0
- package/dist/redis/redis-master.d.ts +29 -0
- package/dist/redis/redis-master.d.ts.map +1 -0
- package/dist/redis/redis-master.js +81 -0
- package/dist/redis/redis-master.js.map +1 -0
- package/dist/redis/redis-pubsub.d.ts +12 -0
- package/dist/redis/redis-pubsub.d.ts.map +1 -1
- package/dist/redis/redis-pubsub.js +25 -2
- package/dist/redis/redis-pubsub.js.map +1 -1
- package/dist/redis/redis.module.d.ts +11 -0
- package/dist/redis/redis.module.d.ts.map +1 -0
- package/dist/redis/redis.module.js +30 -0
- package/dist/redis/redis.module.js.map +1 -0
- package/dist/session/session.controller.d.ts +6 -2
- package/dist/session/session.controller.d.ts.map +1 -1
- package/dist/session/session.service.d.ts +118 -15
- package/dist/session/session.service.d.ts.map +1 -1
- package/dist/session/session.service.js +251 -77
- package/dist/session/session.service.js.map +1 -1
- package/dist/setting/setting.controller.d.ts +5 -0
- package/dist/setting/setting.controller.d.ts.map +1 -1
- package/dist/setting/setting.service.d.ts +7 -0
- package/dist/setting/setting.service.d.ts.map +1 -1
- package/dist/setting/setting.service.js +38 -3
- package/dist/setting/setting.service.js.map +1 -1
- package/dist/task/task.service.d.ts +17 -0
- package/dist/task/task.service.d.ts.map +1 -1
- package/dist/task/task.service.js +48 -13
- package/dist/task/task.service.js.map +1 -1
- package/dist/token/token.service.d.ts +19 -1
- package/dist/token/token.service.d.ts.map +1 -1
- package/dist/token/token.service.js +39 -2
- package/dist/token/token.service.js.map +1 -1
- package/dist/user/user-credential.util.d.ts +10 -0
- package/dist/user/user-credential.util.d.ts.map +1 -1
- package/dist/user/user-credential.util.js +14 -1
- package/dist/user/user-credential.util.js.map +1 -1
- package/dist/user/user.service.d.ts +12 -4
- package/dist/user/user.service.d.ts.map +1 -1
- package/dist/user/user.service.js +2 -11
- package/dist/user/user.service.js.map +1 -1
- package/dist/user/user.sort.d.ts +16 -0
- package/dist/user/user.sort.d.ts.map +1 -0
- package/dist/user/user.sort.js +25 -0
- package/dist/user/user.sort.js.map +1 -0
- package/dist/utils/abbreviate-name.d.ts +13 -0
- package/dist/utils/abbreviate-name.d.ts.map +1 -0
- package/dist/utils/abbreviate-name.js +42 -0
- package/dist/utils/abbreviate-name.js.map +1 -0
- package/dist/utils/date-range-query.dto.d.ts +11 -0
- package/dist/utils/date-range-query.dto.d.ts.map +1 -0
- package/dist/utils/date-range-query.dto.js +63 -0
- package/dist/utils/date-range-query.dto.js.map +1 -0
- package/dist/utils/date-range.d.ts +96 -0
- package/dist/utils/date-range.d.ts.map +1 -0
- package/dist/utils/date-range.js +172 -0
- package/dist/utils/date-range.js.map +1 -0
- package/dist/webhook-integration/webhook-utils.d.ts.map +1 -1
- package/dist/webhook-integration/webhook-utils.js +24 -0
- package/dist/webhook-integration/webhook-utils.js.map +1 -1
- package/dist/whatsapp-sender/whatsapp-recipients.d.ts +49 -0
- package/dist/whatsapp-sender/whatsapp-recipients.d.ts.map +1 -0
- package/dist/whatsapp-sender/whatsapp-recipients.js +66 -0
- package/dist/whatsapp-sender/whatsapp-recipients.js.map +1 -0
- package/dist/whatsapp-sender/whatsapp-sender.service.d.ts +25 -0
- package/dist/whatsapp-sender/whatsapp-sender.service.d.ts.map +1 -1
- package/dist/whatsapp-sender/whatsapp-sender.service.js +46 -5
- package/dist/whatsapp-sender/whatsapp-sender.service.js.map +1 -1
- package/hedhog/data/integration_provider.yaml +9 -0
- package/hedhog/data/integration_type.yaml +6 -0
- package/hedhog/data/locale.yaml +0 -1
- package/hedhog/data/mail.yaml +2 -2
- package/hedhog/data/mail_layout.yaml +6 -3
- package/hedhog/data/menu.yaml +25 -5
- package/hedhog/data/route.yaml +140 -0
- package/hedhog/data/setting_group.yaml +137 -3
- package/hedhog/frontend/app/access-log/page.tsx.ejs +47 -53
- package/hedhog/frontend/app/account/components/active-sessions.tsx.ejs +33 -8
- package/hedhog/frontend/app/account/components/mcp-tokens.tsx.ejs +54 -13
- package/hedhog/frontend/app/account/components/mfa-method-card.tsx.ejs +7 -1
- package/hedhog/frontend/app/account/components/recovery-codes-dialog.tsx.ejs +1 -0
- package/hedhog/frontend/app/account/components/tokens.tsx.ejs +47 -17
- package/hedhog/frontend/app/ai_agent/page.tsx.ejs +46 -5
- package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-form.tsx.ejs +101 -30
- package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-versions.tsx.ejs +24 -8
- package/hedhog/frontend/app/ai_instruction/page.tsx.ejs +80 -15
- package/hedhog/frontend/app/configurations/[slug]/components/image-optimization-action.tsx.ejs +166 -0
- package/hedhog/frontend/app/configurations/[slug]/components/setting-field.test.tsx.ejs +145 -45
- package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +99 -219
- package/hedhog/frontend/app/configurations/[slug]/page.tsx.ejs +19 -1
- package/hedhog/frontend/app/configurations/layout.tsx.ejs +19 -5
- package/hedhog/frontend/app/dashboard/[slug]/widget-renderer.tsx.ejs +2 -8
- package/hedhog/frontend/app/dashboard/components/dynamic-widget.tsx.ejs +3 -0
- package/hedhog/frontend/app/dashboard/components/widget-wrapper.tsx.ejs +4 -0
- package/hedhog/frontend/app/dashboard/dashboard-home-tabs.tsx.ejs +43 -44
- package/hedhog/frontend/app/dashboard/management/tabs/component-roles-tab.tsx.ejs +41 -3
- package/hedhog/frontend/app/dashboard/management/tabs/components-tab.tsx.ejs +42 -2
- package/hedhog/frontend/app/dashboard/management/tabs/dashboard-roles-tab.tsx.ejs +41 -3
- package/hedhog/frontend/app/dashboard/management/tabs/dashboards-tab.tsx.ejs +39 -4
- package/hedhog/frontend/app/dashboard/management/tabs/items-tab.tsx.ejs +42 -3
- package/hedhog/frontend/app/incidents/page.tsx.ejs +60 -31
- package/hedhog/frontend/app/integration/profiles/page.tsx.ejs +45 -5
- package/hedhog/frontend/app/integrations-webhooks/page.tsx.ejs +92 -15
- package/hedhog/frontend/app/mail/log/page.tsx.ejs +109 -61
- package/hedhog/frontend/app/mail/template/page.tsx.ejs +125 -23
- package/hedhog/frontend/app/mcp_chat/chat-components.tsx.ejs +13 -15
- package/hedhog/frontend/app/mcp_chat/page.tsx.ejs +116 -110
- package/hedhog/frontend/app/message-templates/_components/message-template-sheet.tsx.ejs +245 -0
- package/hedhog/frontend/app/message-templates/_lib/types.ts.ejs +24 -0
- package/hedhog/frontend/app/message-templates/page.tsx.ejs +182 -0
- package/hedhog/frontend/app/pages/_components/page-wizard-sheet.tsx.ejs +1 -0
- package/hedhog/frontend/app/pages/page.tsx.ejs +94 -9
- package/hedhog/frontend/app/roles/menus.tsx.ejs +4 -4
- package/hedhog/frontend/app/roles/routes.tsx.ejs +4 -4
- package/hedhog/frontend/app/roles/users.tsx.ejs +4 -4
- package/hedhog/frontend/app/setting-list/page.tsx.ejs +71 -9
- package/hedhog/frontend/app/users/page.tsx.ejs +77 -67
- package/hedhog/frontend/messages/en.json +183 -36
- package/hedhog/frontend/messages/pt.json +183 -36
- package/hedhog/table/cron_lock.yaml +17 -0
- package/hedhog/table/file.yaml +13 -1
- package/hedhog/table/file_upload_chunk.yaml +23 -0
- package/hedhog/table/file_upload_ticket.yaml +67 -0
- package/hedhog/table/mcp_tool_call_log.yaml +30 -22
- package/hedhog/table/message_template.yaml +33 -0
- package/hedhog/table/setting.yaml +8 -0
- package/hedhog/table/user_session.yaml +36 -1
- package/package.json +7 -5
- package/src/ai/ai-agent.sort.ts +21 -0
- package/src/ai/ai.service.spec.ts +173 -1
- package/src/ai/ai.service.ts +64 -193
- package/src/ai-instruction/ai-instruction.service.ts +32 -28
- package/src/ai-instruction/ai-instruction.sort.ts +32 -0
- package/src/auth/auth.module.ts +8 -1
- package/src/auth/auth.service.spec.ts +108 -1
- package/src/auth/auth.service.ts +59 -5
- package/src/auth/guards/auth.guard.ts +9 -1
- package/src/authorize/authorize.controller.ts +126 -11
- package/src/authorize/authorize.errors.ts +55 -0
- package/src/authorize/authorize.module.ts +6 -1
- package/src/authorize/authorize.service.spec.ts +379 -7
- package/src/authorize/authorize.service.ts +309 -23
- package/src/authorize/dto/authorize-info.dto.ts +21 -3
- package/src/authorize/dto/consent.dto.ts +21 -3
- package/src/authorize/dto/token.dto.ts +24 -2
- package/src/authorize/oauth-exception.filter.ts +58 -0
- package/src/authorize/oauth-metadata.service.ts +67 -0
- package/src/authorize/well-known.controller.spec.ts +84 -0
- package/src/authorize/well-known.controller.ts +96 -0
- package/src/captcha/captcha.service.spec.ts +211 -4
- package/src/captcha/captcha.service.ts +127 -10
- package/src/core.module.ts +6 -0
- package/src/dashboard/dashboard-component-role/dashboard-component-role.service.ts +2 -3
- package/src/dashboard/dashboard-component-role/dashboard-component-role.sort.ts +18 -0
- package/src/dashboard/dashboard-item/dashboard-item.service.ts +2 -3
- package/src/dashboard/dashboard-item/dashboard-item.sort.ts +19 -0
- package/src/dashboard/dashboard-role/dashboard-role.service.ts +2 -3
- package/src/dashboard/dashboard-role/dashboard-role.sort.ts +16 -0
- package/src/file/file-upload-ticket.service.spec.ts +422 -0
- package/src/file/file-upload-ticket.service.ts +513 -0
- package/src/file/file.controller.ts +65 -0
- package/src/file/file.module.ts +14 -2
- package/src/file/file.service.spec.ts +94 -0
- package/src/file/file.service.ts +433 -53
- package/src/file/filename-encoding.util.spec.ts +54 -0
- package/src/file/filename-encoding.util.ts +67 -0
- package/src/file/image-optimization.service.spec.ts +156 -19
- package/src/file/image-optimization.service.ts +106 -21
- package/src/file/mcp-file-source.schema.ts +83 -0
- package/src/file/mcp-file-source.service.spec.ts +473 -0
- package/src/file/mcp-file-source.service.ts +445 -0
- package/src/file/mimetype-sniff.util.spec.ts +126 -0
- package/src/file/mimetype-sniff.util.ts +265 -0
- package/src/file/remote-fetch.util.spec.ts +117 -0
- package/src/file/remote-fetch.util.ts +330 -0
- package/src/impersonation/dto/start-impersonation.dto.ts +5 -2
- package/src/impersonation/impersonation.service.spec.ts +24 -1
- package/src/impersonation/impersonation.service.ts +14 -4
- package/src/incident/incident.controller.ts +9 -1
- package/src/incident/incident.service.ts +7 -0
- package/src/index.ts +17 -0
- package/src/integration-profile/integration-profile.secrets.ts +7 -0
- package/src/integration-profile/integration-profile.service.ts +7 -64
- package/src/integration-profile/integration-profile.utils.spec.ts +9 -0
- package/src/integration-profile/integration-profile.utils.ts +5 -5
- package/src/integration-profile/testers/index.ts +2 -0
- package/src/integration-profile/testers/remaining.testers.spec.ts +79 -0
- package/src/integration-profile/testers/shipping.testers.ts +94 -0
- package/src/mail/dto/send.dto.ts +6 -1
- package/src/mail/mail-template.spec.ts +58 -1
- package/src/mail/mail.service.spec.ts +112 -0
- package/src/mail/mail.service.ts +42 -4
- package/src/mail-sent/mail-sent.service.ts +3 -0
- package/src/mail-sent/mail-sent.sort.ts +19 -0
- package/src/mcp/filters/mcp-challenge.filter.spec.ts +76 -0
- package/src/mcp/filters/mcp-challenge.filter.ts +70 -0
- package/src/mcp/guards/mcp-auth.guard.spec.ts +51 -2
- package/src/mcp/guards/mcp-auth.guard.ts +24 -1
- package/src/mcp/guards/mcp-permission.guard.spec.ts +109 -15
- package/src/mcp/guards/mcp-permission.guard.ts +76 -51
- package/src/mcp/mcp-audit.service.spec.ts +107 -0
- package/src/mcp/mcp-audit.service.ts +37 -1
- package/src/mcp/mcp-permission.service.spec.ts +197 -0
- package/src/mcp/mcp-permission.service.ts +184 -0
- package/src/mcp/mcp-server.service.spec.ts +84 -2
- package/src/mcp/mcp-server.service.ts +111 -87
- package/src/mcp/mcp.controller.ts +8 -1
- package/src/mcp/mcp.module.ts +5 -1
- package/src/mcp/tools/core-ai.mcp-tools.ts +1 -1
- package/src/mcp/tools/core-dashboard-items.mcp-tools.ts +1 -1
- package/src/mcp/tools/core-dashboard.mcp-tools.ts +1 -1
- package/src/mcp/tools/core-event-webhooks.mcp-tools.ts +1 -2
- package/src/mcp/tools/core-files.mcp-tools.ts +202 -22
- package/src/mcp/tools/core-integration-events.mcp-tools.ts +1 -1
- package/src/mcp/tools/core-mail-sent.mcp-tools.ts +1 -1
- package/src/mcp/tools/core-mail.mcp-tools.ts +1 -1
- package/src/mcp/tools/core-menus.mcp-tools.ts +1 -2
- package/src/mcp/tools/core-notifications.mcp-tools.ts +0 -1
- package/src/mcp/tools/core-roles.mcp-tools.ts +1 -5
- package/src/mcp/tools/core-routes.mcp-tools.ts +1 -3
- package/src/mcp/tools/core-screens.mcp-tools.ts +1 -3
- package/src/mcp/tools/core-sessions.mcp-tools.ts +0 -2
- package/src/mcp/tools/core-settings.mcp-tools.ts +1 -2
- package/src/mcp/tools/core-users.mcp-tools.ts +1 -1
- package/src/mcp/tools/core-webhooks.mcp-tools.ts +1 -2
- package/src/mcp/types/mcp-context.type.ts +15 -6
- package/src/mcp-chat/mcp-chat.service.ts +8 -0
- package/src/meeting/meeting-provider.registry.ts +121 -0
- package/src/meeting/meeting.constants.ts +74 -0
- package/src/menu/menu.service.spec.ts +89 -0
- package/src/menu/menu.service.ts +29 -11
- package/src/message-template/dto/update-message-template.dto.ts +22 -0
- package/src/message-template/message-template-admin.service.spec.ts +163 -0
- package/src/message-template/message-template-admin.service.ts +239 -0
- package/src/message-template/message-template.controller.ts +52 -0
- package/src/message-template/message-template.module.ts +21 -0
- package/src/message-template/message-template.registry.spec.ts +62 -0
- package/src/message-template/message-template.registry.ts +125 -0
- package/src/message-template/message-template.service.spec.ts +149 -0
- package/src/message-template/message-template.service.ts +149 -0
- package/src/notification/notification.constants.ts +10 -0
- package/src/notification/notification.module.ts +3 -0
- package/src/notification/notification.service.spec.ts +75 -1
- package/src/notification/notification.service.ts +39 -1
- package/src/oauth/oauth.controller.ts +0 -1
- package/src/oauth/oauth.errors.ts +7 -0
- package/src/oauth/oauth.module.ts +6 -1
- package/src/oauth/oauth.service.spec.ts +58 -7
- package/src/oauth/oauth.service.ts +71 -32
- package/src/oauth/providers/abstract.provider.spec.ts +192 -0
- package/src/oauth/providers/abstract.provider.ts +46 -14
- package/src/oauth/providers/github.provider.ts +57 -34
- package/src/oauth/providers/microsoft-entra-id.provider.ts +8 -1
- package/src/observability/monitored-cron.spec.ts +164 -31
- package/src/observability/monitored-cron.ts +154 -62
- package/src/profile/dto/change-password.dto.ts +25 -7
- package/src/profile/profile.service.spec.ts +97 -0
- package/src/profile/profile.service.ts +9 -3
- package/src/realtime/realtime-tick.coalescer.spec.ts +92 -0
- package/src/realtime/realtime-tick.coalescer.ts +60 -0
- package/src/realtime/realtime.service.spec.ts +33 -0
- package/src/realtime/realtime.service.ts +28 -2
- package/src/redis/redis-kv.service.ts +261 -0
- package/src/redis/redis-master.spec.ts +111 -0
- package/src/redis/redis-master.ts +86 -0
- package/src/redis/redis-pubsub.ts +27 -3
- package/src/redis/redis.module.ts +17 -0
- package/src/session/session.service.spec.ts +121 -42
- package/src/session/session.service.ts +279 -82
- package/src/setting/setting.service.ts +44 -3
- package/src/task/task.service.spec.ts +41 -0
- package/src/task/task.service.ts +53 -13
- package/src/token/token.service.spec.ts +90 -0
- package/src/token/token.service.ts +48 -2
- package/src/user/user-credential.util.ts +14 -5
- package/src/user/user.service.ts +2 -12
- package/src/user/user.sort.ts +25 -0
- package/src/utils/abbreviate-name.spec.ts +50 -0
- package/src/utils/abbreviate-name.ts +44 -0
- package/src/utils/date-range-query.dto.ts +56 -0
- package/src/utils/date-range.spec.ts +175 -0
- package/src/utils/date-range.ts +246 -0
- package/src/webhook-integration/webhook-utils.spec.ts +67 -0
- package/src/webhook-integration/webhook-utils.ts +26 -0
- package/src/whatsapp-sender/whatsapp-recipients.spec.ts +89 -0
- package/src/whatsapp-sender/whatsapp-recipients.ts +83 -0
- package/src/whatsapp-sender/whatsapp-sender.service.spec.ts +112 -0
- package/src/whatsapp-sender/whatsapp-sender.service.ts +58 -5
- package/hedhog/query/device_pairing_request.sql +0 -46
- package/hedhog/query/impersonation_grant.sql +0 -71
- package/hedhog/query/oauth_authorize_pkce.sql +0 -58
- package/hedhog/query/oauth_mobile_state_token.sql +0 -30
- package/hedhog/query/oauth_web_ref_token.sql +0 -25
|
@@ -165,8 +165,8 @@
|
|
|
165
165
|
en: Batch Limit
|
|
166
166
|
pt: Limite de Lote
|
|
167
167
|
description:
|
|
168
|
-
en: Maximum number of records to delete per
|
|
169
|
-
pt: Número máximo de registros a deletar por
|
|
168
|
+
en: Maximum number of records to delete per batch. Cleanup repeats batches until the backlog is drained, so smaller values prevent long table locks but increase cleanup duration
|
|
169
|
+
pt: Número máximo de registros a deletar por lote. A limpeza repete os lotes até drenar o acúmulo, então valores menores evitam locks prolongados mas aumentam a duração da limpeza
|
|
170
170
|
value: 20000
|
|
171
171
|
user_override: false
|
|
172
172
|
subgroup_id:
|
|
@@ -273,6 +273,10 @@
|
|
|
273
273
|
- slug: mail-integration-profile-id
|
|
274
274
|
type: string
|
|
275
275
|
component: entity-picker
|
|
276
|
+
entity_filter:
|
|
277
|
+
typeSlug: email
|
|
278
|
+
excludeProviders:
|
|
279
|
+
- imap
|
|
276
280
|
name:
|
|
277
281
|
en: Mail Profile
|
|
278
282
|
pt: Perfil de Email
|
|
@@ -323,6 +327,8 @@
|
|
|
323
327
|
- slug: ai-openai-profile-id
|
|
324
328
|
type: string
|
|
325
329
|
component: entity-picker
|
|
330
|
+
entity_filter:
|
|
331
|
+
typeSlug: ai
|
|
326
332
|
name:
|
|
327
333
|
en: OpenAI Profile
|
|
328
334
|
pt: Perfil OpenAI
|
|
@@ -337,6 +343,8 @@
|
|
|
337
343
|
- slug: ai-gemini-profile-id
|
|
338
344
|
type: string
|
|
339
345
|
component: entity-picker
|
|
346
|
+
entity_filter:
|
|
347
|
+
typeSlug: ai
|
|
340
348
|
name:
|
|
341
349
|
en: Gemini Profile
|
|
342
350
|
pt: Perfil Gemini
|
|
@@ -351,6 +359,8 @@
|
|
|
351
359
|
- slug: ai-deepseek-profile-id
|
|
352
360
|
type: string
|
|
353
361
|
component: entity-picker
|
|
362
|
+
entity_filter:
|
|
363
|
+
typeSlug: ai
|
|
354
364
|
name:
|
|
355
365
|
en: DeepSeek Profile
|
|
356
366
|
pt: Perfil DeepSeek
|
|
@@ -362,6 +372,20 @@
|
|
|
362
372
|
subgroup_id:
|
|
363
373
|
where:
|
|
364
374
|
slug: ai-configuration
|
|
375
|
+
- slug: mcp-connector-denied-tools
|
|
376
|
+
type: array
|
|
377
|
+
component: input-tags
|
|
378
|
+
name:
|
|
379
|
+
en: Tools denied to connectors
|
|
380
|
+
pt: Ferramentas negadas ao conector
|
|
381
|
+
description:
|
|
382
|
+
en: Tools an external OAuth client (such as Claude) can never call, even when the person's role allows it. One per tag, by tool name.
|
|
383
|
+
pt: Ferramentas que um cliente OAuth externo (como o Claude) nunca pode chamar, mesmo que o papel da pessoa permita. Uma por tag, pelo nome da tool.
|
|
384
|
+
value: '["core.roles.create", "core.roles.delete", "core.roles.menus.update", "core.roles.routes.update", "core.roles.screens.update", "core.roles.update", "core.roles.users.update", "core.routes.create", "core.routes.delete", "core.routes.roles.update", "core.routes.screens.update", "core.routes.update", "core.screens.create", "core.screens.delete", "core.screens.roles.update", "core.screens.routes.update", "core.screens.update", "core.sessions.revoke", "core.sessions.revoke-all", "core.sessions.revoke-all-other", "core.settings.delete", "core.settings.set", "core.settings.set-many", "core.settings.update-from-slug", "core.users.assign-role", "core.users.create", "core.users.delete", "core.users.remove-role", "core.users.reset-password", "core.users.update", "core.users.verify-identifier"]'
|
|
385
|
+
user_override: false
|
|
386
|
+
subgroup_id:
|
|
387
|
+
where:
|
|
388
|
+
slug: ai-configuration
|
|
365
389
|
- slug: mcp-enabled
|
|
366
390
|
type: boolean
|
|
367
391
|
component: switch
|
|
@@ -379,6 +403,8 @@
|
|
|
379
403
|
- slug: mcp-ai-profile-id
|
|
380
404
|
type: string
|
|
381
405
|
component: entity-picker
|
|
406
|
+
entity_filter:
|
|
407
|
+
typeSlug: ai
|
|
382
408
|
name:
|
|
383
409
|
en: AI Profile
|
|
384
410
|
pt: Perfil de IA
|
|
@@ -407,6 +433,8 @@
|
|
|
407
433
|
- slug: richtext-ai-profile-id
|
|
408
434
|
type: string
|
|
409
435
|
component: entity-picker
|
|
436
|
+
entity_filter:
|
|
437
|
+
typeSlug: ai
|
|
410
438
|
name:
|
|
411
439
|
en: AI Profile
|
|
412
440
|
pt: Perfil de IA
|
|
@@ -890,6 +918,9 @@
|
|
|
890
918
|
- slug: oauth-google-profile-id
|
|
891
919
|
type: string
|
|
892
920
|
component: entity-picker
|
|
921
|
+
entity_filter:
|
|
922
|
+
typeSlug: oauth
|
|
923
|
+
providerSlug: google-oauth
|
|
893
924
|
name:
|
|
894
925
|
en: Google OAuth Profile
|
|
895
926
|
pt: Perfil OAuth Google
|
|
@@ -940,6 +971,9 @@
|
|
|
940
971
|
- slug: oauth-facebook-profile-id
|
|
941
972
|
type: string
|
|
942
973
|
component: entity-picker
|
|
974
|
+
entity_filter:
|
|
975
|
+
typeSlug: oauth
|
|
976
|
+
providerSlug: facebook-oauth
|
|
943
977
|
name:
|
|
944
978
|
en: Facebook OAuth Profile
|
|
945
979
|
pt: Perfil OAuth Facebook
|
|
@@ -994,6 +1028,9 @@
|
|
|
994
1028
|
- slug: oauth-github-profile-id
|
|
995
1029
|
type: string
|
|
996
1030
|
component: entity-picker
|
|
1031
|
+
entity_filter:
|
|
1032
|
+
typeSlug: oauth
|
|
1033
|
+
providerSlug: github-oauth
|
|
997
1034
|
name:
|
|
998
1035
|
en: GitHub OAuth Profile
|
|
999
1036
|
pt: Perfil OAuth GitHub
|
|
@@ -1042,6 +1079,9 @@
|
|
|
1042
1079
|
- slug: oauth-microsoft-profile-id
|
|
1043
1080
|
type: string
|
|
1044
1081
|
component: entity-picker
|
|
1082
|
+
entity_filter:
|
|
1083
|
+
typeSlug: oauth
|
|
1084
|
+
providerSlug: microsoft-oauth
|
|
1045
1085
|
name:
|
|
1046
1086
|
en: Microsoft OAuth Profile
|
|
1047
1087
|
pt: Perfil OAuth Microsoft
|
|
@@ -1096,6 +1136,9 @@
|
|
|
1096
1136
|
- slug: oauth-microsoft-entra-id-profile-id
|
|
1097
1137
|
type: string
|
|
1098
1138
|
component: entity-picker
|
|
1139
|
+
entity_filter:
|
|
1140
|
+
typeSlug: oauth
|
|
1141
|
+
providerSlug: microsoft-entra-id-oauth
|
|
1099
1142
|
name:
|
|
1100
1143
|
en: Microsoft Entra ID OAuth Profile
|
|
1101
1144
|
pt: Perfil OAuth Microsoft Entra ID
|
|
@@ -1164,6 +1207,12 @@
|
|
|
1164
1207
|
order: 13
|
|
1165
1208
|
- value: OnlineMeetingRecording.Read.All
|
|
1166
1209
|
order: 14
|
|
1210
|
+
# Necessario para IMPORTAR o anexo do chat da reuniao: o download usa
|
|
1211
|
+
# o token delegado da conta que le o chat, e sem escopo de arquivo o
|
|
1212
|
+
# /shares/{id}/driveItem/content responde 403 — o material vira link
|
|
1213
|
+
# para o arquivo original em vez do arquivo em si.
|
|
1214
|
+
- value: Files.Read.All
|
|
1215
|
+
order: 15
|
|
1167
1216
|
subgroup_id:
|
|
1168
1217
|
where:
|
|
1169
1218
|
slug: microsoft-entra-id
|
|
@@ -1295,9 +1344,40 @@
|
|
|
1295
1344
|
subgroup_id:
|
|
1296
1345
|
where:
|
|
1297
1346
|
slug: microsoft-entra-id
|
|
1347
|
+
- slug: microsoft-meeting-chat-capture-enabled
|
|
1348
|
+
type: boolean
|
|
1349
|
+
component: switch
|
|
1350
|
+
name:
|
|
1351
|
+
en: Capture meeting chat
|
|
1352
|
+
pt: Capturar o chat da reunião
|
|
1353
|
+
description:
|
|
1354
|
+
en: 'After a managed meeting ends, read its Teams chat so the source module can turn what the host shared into materials. Off by default: it reads what people wrote and needs a delegated account with Chat.Read.'
|
|
1355
|
+
pt: 'Quando uma reunião gerenciada termina, ler o chat dela no Teams para o módulo de origem transformar o que o instrutor compartilhou em materiais. Desligado por padrão: lê o que as pessoas escreveram e exige conta delegada com Chat.Read.'
|
|
1356
|
+
value: 'false'
|
|
1357
|
+
user_override: false
|
|
1358
|
+
subgroup_id:
|
|
1359
|
+
where:
|
|
1360
|
+
slug: microsoft-entra-id
|
|
1361
|
+
- slug: microsoft-meeting-chat-delegated-upn
|
|
1362
|
+
type: string
|
|
1363
|
+
component: input-text
|
|
1364
|
+
name:
|
|
1365
|
+
en: Account that reads the chat
|
|
1366
|
+
pt: Conta que lê o chat
|
|
1367
|
+
description:
|
|
1368
|
+
en: UPN of the account whose delegated token reads meeting chats. Empty uses the meeting service account, which organizes every meeting and is therefore in every meeting chat. It must be connected under My account, with Chat.Read granted.
|
|
1369
|
+
pt: UPN da conta cujo token delegado lê os chats das reuniões. Vazio usa a conta de serviço das reuniões, que organiza todas e por isso participa de todos os chats. Ela precisa estar conectada em Minha conta, com Chat.Read concedido.
|
|
1370
|
+
value: ''
|
|
1371
|
+
user_override: false
|
|
1372
|
+
subgroup_id:
|
|
1373
|
+
where:
|
|
1374
|
+
slug: microsoft-entra-id
|
|
1298
1375
|
- slug: oauth-apple-profile-id
|
|
1299
1376
|
type: string
|
|
1300
1377
|
component: entity-picker
|
|
1378
|
+
entity_filter:
|
|
1379
|
+
typeSlug: oauth
|
|
1380
|
+
providerSlug: apple-oauth
|
|
1301
1381
|
name:
|
|
1302
1382
|
en: Apple OAuth Profile
|
|
1303
1383
|
pt: Perfil OAuth Apple
|
|
@@ -1346,6 +1426,9 @@
|
|
|
1346
1426
|
- slug: oauth-linkedin-profile-id
|
|
1347
1427
|
type: string
|
|
1348
1428
|
component: entity-picker
|
|
1429
|
+
entity_filter:
|
|
1430
|
+
typeSlug: oauth
|
|
1431
|
+
providerSlug: linkedin-oauth
|
|
1349
1432
|
name:
|
|
1350
1433
|
en: LinkedIn OAuth Profile
|
|
1351
1434
|
pt: Perfil OAuth LinkedIn
|
|
@@ -2070,6 +2153,8 @@
|
|
|
2070
2153
|
- slug: file-storage-profile-id
|
|
2071
2154
|
type: string
|
|
2072
2155
|
component: entity-picker
|
|
2156
|
+
entity_filter:
|
|
2157
|
+
typeSlug: storage
|
|
2073
2158
|
name:
|
|
2074
2159
|
en: Storage Profile
|
|
2075
2160
|
pt: Perfil de Armazenamento
|
|
@@ -2088,7 +2173,7 @@
|
|
|
2088
2173
|
description:
|
|
2089
2174
|
en: MIME types accepted for file uploads (e.g., images, documents, videos)
|
|
2090
2175
|
pt: Tipos MIME aceitos para upload de arquivos (por exemplo, imagens, documentos, vídeos)
|
|
2091
|
-
value: '["application/pdf","image/jpeg","image/png","image/gif"]'
|
|
2176
|
+
value: '["application/pdf","image/jpeg","image/png","image/gif","text/html"]'
|
|
2092
2177
|
component: checkbox
|
|
2093
2178
|
relations:
|
|
2094
2179
|
setting_list:
|
|
@@ -2134,6 +2219,8 @@
|
|
|
2134
2219
|
order: 16
|
|
2135
2220
|
- value: audio/flac
|
|
2136
2221
|
order: 17
|
|
2222
|
+
- value: text/html
|
|
2223
|
+
order: 18
|
|
2137
2224
|
subgroup_id:
|
|
2138
2225
|
where:
|
|
2139
2226
|
slug: storage-general
|
|
@@ -2149,6 +2236,53 @@
|
|
|
2149
2236
|
subgroup_id:
|
|
2150
2237
|
where:
|
|
2151
2238
|
slug: storage-general
|
|
2239
|
+
# Validade da URL assinada de upload (PUT /file/upload/:token). Curta de
|
|
2240
|
+
# proposito: o token e a unica credencial do endpoint publico, e o cliente
|
|
2241
|
+
# sobe o arquivo logo depois de pedir a URL.
|
|
2242
|
+
- slug: storage-upload-url-ttl
|
|
2243
|
+
type: number
|
|
2244
|
+
name:
|
|
2245
|
+
en: Upload URL Lifetime (seconds)
|
|
2246
|
+
pt: Validade da URL de Upload (segundos)
|
|
2247
|
+
description:
|
|
2248
|
+
en: How long a signed upload URL stays valid. The token is single use and scoped to one upload ticket.
|
|
2249
|
+
pt: Por quanto tempo uma URL assinada de upload continua valida. O token e de uso unico e vale para um unico ticket de upload.
|
|
2250
|
+
value: 900
|
|
2251
|
+
component: input-number
|
|
2252
|
+
subgroup_id:
|
|
2253
|
+
where:
|
|
2254
|
+
slug: storage-general
|
|
2255
|
+
# Tamanho de cada parte no upload em partes pelo MCP. O teto real e o limite
|
|
2256
|
+
# de saida do modelo: base64 infla ~33%, entao 64 KiB viram ~87 mil
|
|
2257
|
+
# caracteres por chamada.
|
|
2258
|
+
- slug: mcp-upload-chunk-bytes
|
|
2259
|
+
type: number
|
|
2260
|
+
name:
|
|
2261
|
+
en: MCP Upload Chunk Size (bytes)
|
|
2262
|
+
pt: Tamanho da Parte no Upload MCP (bytes)
|
|
2263
|
+
description:
|
|
2264
|
+
en: Chunk size for core.files.upload.append. Larger chunks mean fewer calls but risk overflowing the model output limit once base64-encoded.
|
|
2265
|
+
pt: Tamanho de cada parte em core.files.upload.append. Partes maiores significam menos chamadas, mas arriscam estourar o limite de saida do modelo depois de codificadas em base64.
|
|
2266
|
+
value: 65536
|
|
2267
|
+
component: input-number
|
|
2268
|
+
subgroup_id:
|
|
2269
|
+
where:
|
|
2270
|
+
slug: storage-general
|
|
2271
|
+
# Allowlist opcional para a modalidade fileUrl. Vazia = qualquer host
|
|
2272
|
+
# publico (enderecos privados sao recusados de qualquer forma).
|
|
2273
|
+
- slug: mcp-file-url-allowed-hosts
|
|
2274
|
+
type: string
|
|
2275
|
+
name:
|
|
2276
|
+
en: Allowed Hosts for File URLs
|
|
2277
|
+
pt: Hosts Permitidos para URL de Arquivo
|
|
2278
|
+
description:
|
|
2279
|
+
en: Comma-separated hostnames the server may download from when a tool receives fileUrl. Leave empty to allow any public host. Private, loopback, link-local and metadata addresses are always rejected.
|
|
2280
|
+
pt: Nomes de host separados por virgula dos quais o servidor pode baixar quando uma tool recebe fileUrl. Deixe vazio para permitir qualquer host publico. Enderecos privados, loopback, link-local e de metadados sao sempre recusados.
|
|
2281
|
+
value: ''
|
|
2282
|
+
component: input-text
|
|
2283
|
+
subgroup_id:
|
|
2284
|
+
where:
|
|
2285
|
+
slug: storage-general
|
|
2152
2286
|
- slug: image-compression-enabled
|
|
2153
2287
|
type: boolean
|
|
2154
2288
|
component: switch
|
|
@@ -31,7 +31,8 @@ import {
|
|
|
31
31
|
TableRow,
|
|
32
32
|
} from '@/components/ui/table';
|
|
33
33
|
import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group';
|
|
34
|
-
import {
|
|
34
|
+
import { DateRangePicker } from '@/components/ui/date-range-picker';
|
|
35
|
+
import { useListUrlState } from '@/hooks/use-list-url-state';
|
|
35
36
|
import { usePersistedPageSize } from '@/hooks/use-persisted-page-size';
|
|
36
37
|
import { formatDateTime } from '@/lib/format-date';
|
|
37
38
|
import { getPhotoUrl } from '@/lib/get-photo-url';
|
|
@@ -124,15 +125,33 @@ export default function AccessLogPage() {
|
|
|
124
125
|
const [selectedUserId, setSelectedUserId] = useState<number | null>(null);
|
|
125
126
|
const [isUserSheetOpen, setIsUserSheetOpen] = useState(false);
|
|
126
127
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
128
|
+
// Busca, filtros e página vivem na URL: voltar do detalhe de um log
|
|
129
|
+
// recupera a mesma consulta, e o link pode ser passado adiante.
|
|
130
|
+
const urlState = useListUrlState({
|
|
131
|
+
filters: {
|
|
132
|
+
userId: { param: 'userId', defaultValue: '' },
|
|
133
|
+
type: { param: 'type', defaultValue: 'all' },
|
|
134
|
+
simulated: { param: 'simulated', defaultValue: 'all' },
|
|
135
|
+
createdAtFrom: { param: 'createdAtFrom', defaultValue: '' },
|
|
136
|
+
createdAtTo: { param: 'createdAtTo', defaultValue: '' },
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
const {
|
|
140
|
+
search: searchTerm,
|
|
141
|
+
setSearch: setSearchTerm,
|
|
142
|
+
debouncedSearch,
|
|
143
|
+
page,
|
|
144
|
+
setPage,
|
|
145
|
+
} = urlState;
|
|
146
|
+
const filterUserId = urlState.filters.userId
|
|
147
|
+
? Number(urlState.filters.userId)
|
|
148
|
+
: null;
|
|
149
|
+
const typeFilter = urlState.filters.type as TypeFilter;
|
|
150
|
+
const simulatedFilter = urlState.filters.simulated as SimulatedFilter;
|
|
151
|
+
const createdAtFrom = urlState.filters.createdAtFrom;
|
|
152
|
+
const createdAtTo = urlState.filters.createdAtTo;
|
|
133
153
|
const [viewMode, setViewMode] = useState<ViewMode>('table');
|
|
134
154
|
const [isLive, setIsLive] = useState(true);
|
|
135
|
-
const [page, setPage] = useState(1);
|
|
136
155
|
const { data: generalSettings } = useQuery<{
|
|
137
156
|
data: Array<{ slug: string; value: string }>;
|
|
138
157
|
}>({
|
|
@@ -169,8 +188,6 @@ export default function AccessLogPage() {
|
|
|
169
188
|
allowedValues: pageSizeOptions,
|
|
170
189
|
});
|
|
171
190
|
|
|
172
|
-
const debouncedSearch = useDebounce(searchTerm);
|
|
173
|
-
|
|
174
191
|
const {
|
|
175
192
|
data: logsResult,
|
|
176
193
|
isLoading,
|
|
@@ -218,12 +235,11 @@ export default function AccessLogPage() {
|
|
|
218
235
|
|
|
219
236
|
const clearFilters = () => {
|
|
220
237
|
setSearchTerm('');
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
setPage(1);
|
|
238
|
+
urlState.setFilter('userId', '');
|
|
239
|
+
urlState.setFilter('type', 'all');
|
|
240
|
+
urlState.setFilter('simulated', 'all');
|
|
241
|
+
urlState.setFilter('createdAtFrom', '');
|
|
242
|
+
urlState.setFilter('createdAtTo', '');
|
|
227
243
|
};
|
|
228
244
|
|
|
229
245
|
const searchControls = useMemo<SearchBarControl[]>(
|
|
@@ -232,10 +248,7 @@ export default function AccessLogPage() {
|
|
|
232
248
|
id: 'type',
|
|
233
249
|
type: 'select',
|
|
234
250
|
value: typeFilter,
|
|
235
|
-
onChange: (value) =>
|
|
236
|
-
setTypeFilter(value as TypeFilter);
|
|
237
|
-
setPage(1);
|
|
238
|
-
},
|
|
251
|
+
onChange: (value) => urlState.setFilter('type', value),
|
|
239
252
|
placeholder: t('filterByType'),
|
|
240
253
|
options: [
|
|
241
254
|
{ value: 'all', label: t('typeAll') },
|
|
@@ -247,10 +260,7 @@ export default function AccessLogPage() {
|
|
|
247
260
|
id: 'simulated',
|
|
248
261
|
type: 'select',
|
|
249
262
|
value: simulatedFilter,
|
|
250
|
-
onChange: (value) =>
|
|
251
|
-
setSimulatedFilter(value as SimulatedFilter);
|
|
252
|
-
setPage(1);
|
|
253
|
-
},
|
|
263
|
+
onChange: (value) => urlState.setFilter('simulated', value),
|
|
254
264
|
placeholder: t('filterBySimulated'),
|
|
255
265
|
options: [
|
|
256
266
|
{ value: 'all', label: t('simulatedAll') },
|
|
@@ -258,28 +268,9 @@ export default function AccessLogPage() {
|
|
|
258
268
|
{ value: 'exclude', label: t('simulatedExclude') },
|
|
259
269
|
],
|
|
260
270
|
},
|
|
261
|
-
{
|
|
262
|
-
id: 'created-at-from',
|
|
263
|
-
type: 'date',
|
|
264
|
-
value: createdAtFrom,
|
|
265
|
-
onChange: (value) => {
|
|
266
|
-
setCreatedAtFrom(value);
|
|
267
|
-
setPage(1);
|
|
268
|
-
},
|
|
269
|
-
max: createdAtTo || undefined,
|
|
270
|
-
},
|
|
271
|
-
{
|
|
272
|
-
id: 'created-at-to',
|
|
273
|
-
type: 'date',
|
|
274
|
-
value: createdAtTo,
|
|
275
|
-
onChange: (value) => {
|
|
276
|
-
setCreatedAtTo(value);
|
|
277
|
-
setPage(1);
|
|
278
|
-
},
|
|
279
|
-
min: createdAtFrom || undefined,
|
|
280
|
-
},
|
|
281
271
|
],
|
|
282
|
-
|
|
272
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
273
|
+
[typeFilter, simulatedFilter, t]
|
|
283
274
|
);
|
|
284
275
|
|
|
285
276
|
const kpiCards = useMemo<KpiCardItem[]>(() => {
|
|
@@ -441,10 +432,7 @@ export default function AccessLogPage() {
|
|
|
441
432
|
<div className="flex-1">
|
|
442
433
|
<SearchBar
|
|
443
434
|
searchQuery={searchTerm}
|
|
444
|
-
onSearchChange={
|
|
445
|
-
setSearchTerm(v);
|
|
446
|
-
setPage(1);
|
|
447
|
-
}}
|
|
435
|
+
onSearchChange={setSearchTerm}
|
|
448
436
|
onSearch={() => setPage(1)}
|
|
449
437
|
placeholder={t('searchPlaceholder')}
|
|
450
438
|
controls={searchControls}
|
|
@@ -452,6 +440,15 @@ export default function AccessLogPage() {
|
|
|
452
440
|
</div>
|
|
453
441
|
|
|
454
442
|
<div className="flex flex-col gap-2 sm:flex-row sm:flex-wrap xl:justify-end">
|
|
443
|
+
<DateRangePicker
|
|
444
|
+
fromDate={createdAtFrom}
|
|
445
|
+
toDate={createdAtTo}
|
|
446
|
+
onFromDateChange={(value) =>
|
|
447
|
+
urlState.setFilter('createdAtFrom', value)
|
|
448
|
+
}
|
|
449
|
+
onToDateChange={(value) => urlState.setFilter('createdAtTo', value)}
|
|
450
|
+
/>
|
|
451
|
+
|
|
455
452
|
<EntityPicker<UserPickerOption>
|
|
456
453
|
placeholder={t('userPickerPlaceholder')}
|
|
457
454
|
emptySelectionLabel={t('userPickerPlaceholder')}
|
|
@@ -459,10 +456,7 @@ export default function AccessLogPage() {
|
|
|
459
456
|
clearable
|
|
460
457
|
allowEmptySelection
|
|
461
458
|
value={filterUserId !== null ? String(filterUserId) : ''}
|
|
462
|
-
onChange={(val) =>
|
|
463
|
-
setFilterUserId(val ? Number(val) : null);
|
|
464
|
-
setPage(1);
|
|
465
|
-
}}
|
|
459
|
+
onChange={(val) => urlState.setFilter('userId', val ? String(val) : '')}
|
|
466
460
|
getOptionValue={(o) => o.id}
|
|
467
461
|
getOptionLabel={(o) => o.name}
|
|
468
462
|
loadOptions={async ({ page, pageSize, search }) => {
|
|
@@ -33,7 +33,7 @@ import { formatDate, formatDateTime } from '@/lib/format-date';
|
|
|
33
33
|
import { parseBrowser, parseDeviceType, parseOS } from '@/lib/session';
|
|
34
34
|
import { UserSession } from '@hed-hog/api-types';
|
|
35
35
|
import { useApp, useQuery } from '@hed-hog/next-app-provider';
|
|
36
|
-
import { Calendar, Clock, LogOut, MapPin, VenetianMask } from 'lucide-react';
|
|
36
|
+
import { Calendar, Clock, LogOut, MapPin, Plug, VenetianMask } from 'lucide-react';
|
|
37
37
|
import { useTranslations } from 'next-intl';
|
|
38
38
|
import { useMemo, useState } from 'react';
|
|
39
39
|
import { toast } from 'sonner';
|
|
@@ -288,12 +288,33 @@ function SessionRow({
|
|
|
288
288
|
<TableCell>
|
|
289
289
|
<div className="flex items-center gap-3">
|
|
290
290
|
<div>
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
291
|
+
{/* Sessão de app conectado (OAuth) não tem dispositivo para mostrar:
|
|
292
|
+
ela nasce na nuvem do fornecedor, com um user agent que o parser
|
|
293
|
+
não reconhece e geolocalizada no país dele. Repetir isso aqui faz
|
|
294
|
+
a linha parecer invasão de conta — o nome do app é a informação
|
|
295
|
+
que o usuário precisa para reconhecer o que autorizou. */}
|
|
296
|
+
{session.oauth_client ? (
|
|
297
|
+
<p className="font-medium">{session.oauth_client.name}</p>
|
|
298
|
+
) : (
|
|
299
|
+
<>
|
|
300
|
+
<p className="font-medium capitalize">
|
|
301
|
+
{parseDeviceType(session.user_agent)}
|
|
302
|
+
</p>
|
|
303
|
+
<p className="text-xs text-muted-foreground">
|
|
304
|
+
{parseOS(session.user_agent)}
|
|
305
|
+
</p>
|
|
306
|
+
</>
|
|
307
|
+
)}
|
|
308
|
+
|
|
309
|
+
{session.oauth_client && (
|
|
310
|
+
<Badge
|
|
311
|
+
variant="outline"
|
|
312
|
+
className="mt-1 border-sky-500/30 bg-sky-500/10 text-xs text-sky-700"
|
|
313
|
+
>
|
|
314
|
+
<Plug className="mr-1 size-3" />
|
|
315
|
+
{t('connectedApp')}
|
|
316
|
+
</Badge>
|
|
317
|
+
)}
|
|
297
318
|
{/* Esta é a tela de segurança do próprio usuário: é aqui que ele
|
|
298
319
|
precisa enxergar que alguém entrou na conta dele por simulação
|
|
299
320
|
de acesso, e quem foi. */}
|
|
@@ -314,7 +335,11 @@ function SessionRow({
|
|
|
314
335
|
</div>
|
|
315
336
|
</TableCell>
|
|
316
337
|
<TableCell>
|
|
317
|
-
<div>
|
|
338
|
+
<div>
|
|
339
|
+
{session.oauth_client
|
|
340
|
+
? t('viaConnector')
|
|
341
|
+
: parseBrowser(session.user_agent)}
|
|
342
|
+
</div>
|
|
318
343
|
|
|
319
344
|
{session.revoked_at === null && (
|
|
320
345
|
<Badge variant="default" className="mt-1 text-xs">
|
|
@@ -165,7 +165,9 @@ export function McpTokens() {
|
|
|
165
165
|
<CardHeader className="flex flex-row items-start justify-between">
|
|
166
166
|
<div>
|
|
167
167
|
<CardTitle>{t('title')}</CardTitle>
|
|
168
|
-
<CardDescription className="mt-1">
|
|
168
|
+
<CardDescription className="mt-1">
|
|
169
|
+
{t('description')}
|
|
170
|
+
</CardDescription>
|
|
169
171
|
</div>
|
|
170
172
|
<Button size="sm" onClick={() => setIsCreateDialogOpen(true)}>
|
|
171
173
|
<Plus className="size-4 mr-2" />
|
|
@@ -174,10 +176,22 @@ export function McpTokens() {
|
|
|
174
176
|
</CardHeader>
|
|
175
177
|
<CardContent className="space-y-4">
|
|
176
178
|
<div className="flex items-center gap-2 rounded-md border bg-muted/40 px-3 py-2">
|
|
177
|
-
<span className="text-sm text-muted-foreground shrink-0">
|
|
179
|
+
<span className="text-sm text-muted-foreground shrink-0">
|
|
180
|
+
{t('mcpUrlLabel')}:
|
|
181
|
+
</span>
|
|
178
182
|
<code className="flex-1 text-sm break-all">{mcpUrl}</code>
|
|
179
|
-
<Button
|
|
180
|
-
|
|
183
|
+
<Button
|
|
184
|
+
variant="ghost"
|
|
185
|
+
size="icon"
|
|
186
|
+
className="size-7 shrink-0"
|
|
187
|
+
onClick={handleCopyUrl}
|
|
188
|
+
tooltip={t('copyUrl')}
|
|
189
|
+
>
|
|
190
|
+
{isCopiedUrl ? (
|
|
191
|
+
<Check className="size-3.5 text-green-500" />
|
|
192
|
+
) : (
|
|
193
|
+
<Copy className="size-3.5" />
|
|
194
|
+
)}
|
|
181
195
|
</Button>
|
|
182
196
|
</div>
|
|
183
197
|
|
|
@@ -207,7 +221,9 @@ export function McpTokens() {
|
|
|
207
221
|
</code>
|
|
208
222
|
</TableCell>
|
|
209
223
|
<TableCell className="text-muted-foreground text-sm">
|
|
210
|
-
{key.last_used_at
|
|
224
|
+
{key.last_used_at
|
|
225
|
+
? formatDateTime(key.last_used_at, getSettingValue)
|
|
226
|
+
: t('never')}
|
|
211
227
|
</TableCell>
|
|
212
228
|
<TableCell className="text-muted-foreground text-sm">
|
|
213
229
|
{formatDateTime(key.created_at, getSettingValue)}
|
|
@@ -218,6 +234,7 @@ export function McpTokens() {
|
|
|
218
234
|
size="icon"
|
|
219
235
|
className="size-8 text-destructive hover:text-destructive"
|
|
220
236
|
onClick={() => setKeyToRevoke(key.id)}
|
|
237
|
+
tooltip={t('revoke')}
|
|
221
238
|
>
|
|
222
239
|
<Trash2 className="size-4" />
|
|
223
240
|
</Button>
|
|
@@ -243,11 +260,16 @@ export function McpTokens() {
|
|
|
243
260
|
</Card>
|
|
244
261
|
|
|
245
262
|
{/* Revoke confirmation */}
|
|
246
|
-
<AlertDialog
|
|
263
|
+
<AlertDialog
|
|
264
|
+
open={keyToRevoke !== null}
|
|
265
|
+
onOpenChange={(open) => !open && setKeyToRevoke(null)}
|
|
266
|
+
>
|
|
247
267
|
<AlertDialogContent>
|
|
248
268
|
<AlertDialogHeader>
|
|
249
269
|
<AlertDialogTitle>{t('revokeTokenTitle')}</AlertDialogTitle>
|
|
250
|
-
<AlertDialogDescription>
|
|
270
|
+
<AlertDialogDescription>
|
|
271
|
+
{t('revokeTokenDescription')}
|
|
272
|
+
</AlertDialogDescription>
|
|
251
273
|
</AlertDialogHeader>
|
|
252
274
|
<AlertDialogFooter>
|
|
253
275
|
<AlertDialogCancel>{t('cancel')}</AlertDialogCancel>
|
|
@@ -262,13 +284,18 @@ export function McpTokens() {
|
|
|
262
284
|
</AlertDialog>
|
|
263
285
|
|
|
264
286
|
{/* Create token dialog */}
|
|
265
|
-
<Dialog
|
|
287
|
+
<Dialog
|
|
288
|
+
open={isCreateDialogOpen}
|
|
289
|
+
onOpenChange={(open) => !open && handleCloseCreateDialog()}
|
|
290
|
+
>
|
|
266
291
|
<DialogContent className="sm:max-w-md">
|
|
267
292
|
{createdToken === null ? (
|
|
268
293
|
<>
|
|
269
294
|
<DialogHeader>
|
|
270
295
|
<DialogTitle>{t('createTokenTitle')}</DialogTitle>
|
|
271
|
-
<DialogDescription>
|
|
296
|
+
<DialogDescription>
|
|
297
|
+
{t('createTokenDescription')}
|
|
298
|
+
</DialogDescription>
|
|
272
299
|
</DialogHeader>
|
|
273
300
|
<div className="space-y-2 py-2">
|
|
274
301
|
<Label htmlFor="token-name">{t('tokenNameLabel')}</Label>
|
|
@@ -281,7 +308,9 @@ export function McpTokens() {
|
|
|
281
308
|
/>
|
|
282
309
|
</div>
|
|
283
310
|
<DialogFooter>
|
|
284
|
-
<Button variant="outline" onClick={handleCloseCreateDialog}>
|
|
311
|
+
<Button variant="outline" onClick={handleCloseCreateDialog}>
|
|
312
|
+
{t('cancel')}
|
|
313
|
+
</Button>
|
|
285
314
|
<Button onClick={handleCreate} disabled={!newKeyName.trim()}>
|
|
286
315
|
{t('createToken')}
|
|
287
316
|
</Button>
|
|
@@ -302,14 +331,26 @@ export function McpTokens() {
|
|
|
302
331
|
<code className="flex-1 rounded border bg-muted px-3 py-2 text-xs break-all">
|
|
303
332
|
{createdToken}
|
|
304
333
|
</code>
|
|
305
|
-
<Button
|
|
306
|
-
|
|
334
|
+
<Button
|
|
335
|
+
variant="outline"
|
|
336
|
+
size="icon"
|
|
337
|
+
onClick={handleCopyToken}
|
|
338
|
+
className="shrink-0"
|
|
339
|
+
tooltip={t('copyToken')}
|
|
340
|
+
>
|
|
341
|
+
{isCopied ? (
|
|
342
|
+
<Check className="size-4 text-green-500" />
|
|
343
|
+
) : (
|
|
344
|
+
<Copy className="size-4" />
|
|
345
|
+
)}
|
|
307
346
|
</Button>
|
|
308
347
|
</div>
|
|
309
348
|
</div>
|
|
310
349
|
</div>
|
|
311
350
|
<DialogFooter>
|
|
312
|
-
<Button onClick={handleCloseCreateDialog}>
|
|
351
|
+
<Button onClick={handleCloseCreateDialog}>
|
|
352
|
+
{t('closeDialog')}
|
|
353
|
+
</Button>
|
|
313
354
|
</DialogFooter>
|
|
314
355
|
</>
|
|
315
356
|
)}
|
|
@@ -75,6 +75,7 @@ export function MfaMethodCard({
|
|
|
75
75
|
setEditName(method.name);
|
|
76
76
|
setIsEditOpen(true);
|
|
77
77
|
}}
|
|
78
|
+
tooltip={t('editMfaName')}
|
|
78
79
|
>
|
|
79
80
|
<Edit2 className="w-4 h-4" />
|
|
80
81
|
</Button>
|
|
@@ -106,7 +107,12 @@ export function MfaMethodCard({
|
|
|
106
107
|
</form>
|
|
107
108
|
</DialogContent>
|
|
108
109
|
</Dialog>
|
|
109
|
-
<Button
|
|
110
|
+
<Button
|
|
111
|
+
variant="ghost"
|
|
112
|
+
size="icon"
|
|
113
|
+
onClick={() => onRemove(method)}
|
|
114
|
+
tooltip={t('removeMfa')}
|
|
115
|
+
>
|
|
110
116
|
<Trash2 className="size-4 text-destructive" />
|
|
111
117
|
</Button>
|
|
112
118
|
</div>
|