@hed-hog/core 0.0.387 → 0.0.393
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/README.md +51 -11
- package/dist/access-log/access-log.controller.d.ts.map +1 -1
- package/dist/access-log/access-log.controller.js +1 -1
- package/dist/access-log/access-log.controller.js.map +1 -1
- package/dist/access-log/access-log.interceptor.d.ts.map +1 -1
- package/dist/access-log/access-log.interceptor.js +11 -6
- package/dist/access-log/access-log.interceptor.js.map +1 -1
- package/dist/access-log/access-log.service.d.ts +4 -0
- package/dist/access-log/access-log.service.d.ts.map +1 -1
- package/dist/access-log/access-log.service.js +31 -4
- package/dist/access-log/access-log.service.js.map +1 -1
- package/dist/access-log/dto/query-access-log.dto.d.ts +2 -0
- package/dist/access-log/dto/query-access-log.dto.d.ts.map +1 -1
- package/dist/access-log/dto/query-access-log.dto.js +5 -0
- package/dist/access-log/dto/query-access-log.dto.js.map +1 -1
- package/dist/ai/ai-attachment.fragments.d.ts +23 -0
- package/dist/ai/ai-attachment.fragments.d.ts.map +1 -0
- package/dist/ai/ai-attachment.fragments.js +34 -0
- package/dist/ai/ai-attachment.fragments.js.map +1 -0
- package/dist/ai/ai.controller.d.ts +12 -17
- package/dist/ai/ai.controller.d.ts.map +1 -1
- package/dist/ai/ai.controller.js +17 -2
- package/dist/ai/ai.controller.js.map +1 -1
- package/dist/ai/ai.module.d.ts.map +1 -1
- package/dist/ai/ai.module.js +3 -2
- package/dist/ai/ai.module.js.map +1 -1
- package/dist/ai/ai.prompts.d.ts +16 -0
- package/dist/ai/ai.prompts.d.ts.map +1 -0
- package/dist/ai/ai.prompts.js +37 -0
- package/dist/ai/ai.prompts.js.map +1 -0
- package/dist/ai/ai.service.d.ts +92 -12
- package/dist/ai/ai.service.d.ts.map +1 -1
- package/dist/ai/ai.service.js +309 -88
- package/dist/ai/ai.service.js.map +1 -1
- package/dist/ai/dto/chat.dto.d.ts +4 -1
- package/dist/ai/dto/chat.dto.d.ts.map +1 -1
- package/dist/ai/dto/chat.dto.js +23 -1
- package/dist/ai/dto/chat.dto.js.map +1 -1
- package/dist/ai/dto/create-agent.dto.d.ts +1 -1
- package/dist/ai/dto/create-agent.dto.d.ts.map +1 -1
- package/dist/ai/dto/create-agent.dto.js +1 -1
- package/dist/ai/dto/create-agent.dto.js.map +1 -1
- package/dist/ai/dto/richtext-edit-html.dto.d.ts +5 -0
- package/dist/ai/dto/richtext-edit-html.dto.d.ts.map +1 -0
- package/dist/ai/dto/richtext-edit-html.dto.js +27 -0
- package/dist/ai/dto/richtext-edit-html.dto.js.map +1 -0
- package/dist/ai/dto/update-agent.dto.d.ts +1 -1
- package/dist/ai/dto/update-agent.dto.d.ts.map +1 -1
- package/dist/ai/dto/update-agent.dto.js +1 -1
- package/dist/ai/dto/update-agent.dto.js.map +1 -1
- package/dist/ai/richtext-ai.prompts.d.ts +5 -0
- package/dist/ai/richtext-ai.prompts.d.ts.map +1 -0
- package/dist/ai/richtext-ai.prompts.js +57 -0
- package/dist/ai/richtext-ai.prompts.js.map +1 -0
- package/dist/ai/richtext-ai.service.d.ts +34 -0
- package/dist/ai/richtext-ai.service.d.ts.map +1 -0
- package/dist/ai/richtext-ai.service.js +95 -0
- package/dist/ai/richtext-ai.service.js.map +1 -0
- package/dist/ai-instruction/ai-instruction.controller.d.ts +59 -5
- package/dist/ai-instruction/ai-instruction.controller.d.ts.map +1 -1
- package/dist/ai-instruction/ai-instruction.controller.js +63 -20
- package/dist/ai-instruction/ai-instruction.controller.js.map +1 -1
- package/dist/ai-instruction/ai-instruction.module.d.ts.map +1 -1
- package/dist/ai-instruction/ai-instruction.module.js +13 -2
- package/dist/ai-instruction/ai-instruction.module.js.map +1 -1
- package/dist/ai-instruction/ai-instruction.service.d.ts +131 -6
- package/dist/ai-instruction/ai-instruction.service.d.ts.map +1 -1
- package/dist/ai-instruction/ai-instruction.service.js +533 -60
- package/dist/ai-instruction/ai-instruction.service.js.map +1 -1
- package/dist/ai-instruction/ai-prompt-builder.service.d.ts +8 -0
- package/dist/ai-instruction/ai-prompt-builder.service.d.ts.map +1 -1
- package/dist/ai-instruction/ai-prompt-builder.service.js +10 -1
- package/dist/ai-instruction/ai-prompt-builder.service.js.map +1 -1
- package/dist/ai-instruction/ai-prompt-registry.d.ts +45 -0
- package/dist/ai-instruction/ai-prompt-registry.d.ts.map +1 -0
- package/dist/ai-instruction/ai-prompt-registry.js +49 -0
- package/dist/ai-instruction/ai-prompt-registry.js.map +1 -0
- package/dist/ai-instruction/ai-prompt-resolver.service.d.ts +89 -0
- package/dist/ai-instruction/ai-prompt-resolver.service.d.ts.map +1 -0
- package/dist/ai-instruction/ai-prompt-resolver.service.js +222 -0
- package/dist/ai-instruction/ai-prompt-resolver.service.js.map +1 -0
- package/dist/ai-instruction/ai-prompt-template.util.d.ts +70 -0
- package/dist/ai-instruction/ai-prompt-template.util.d.ts.map +1 -0
- package/dist/ai-instruction/ai-prompt-template.util.js +154 -0
- package/dist/ai-instruction/ai-prompt-template.util.js.map +1 -0
- package/dist/ai-instruction/dto/create-ai-instruction.dto.d.ts +5 -0
- package/dist/ai-instruction/dto/create-ai-instruction.dto.d.ts.map +1 -1
- package/dist/ai-instruction/dto/create-ai-instruction.dto.js +27 -1
- package/dist/ai-instruction/dto/create-ai-instruction.dto.js.map +1 -1
- package/dist/ai-instruction/dto/preview-ai-instruction.dto.d.ts +14 -0
- package/dist/ai-instruction/dto/preview-ai-instruction.dto.d.ts.map +1 -0
- package/dist/ai-instruction/dto/preview-ai-instruction.dto.js +42 -0
- package/dist/ai-instruction/dto/preview-ai-instruction.dto.js.map +1 -0
- package/dist/ai-instruction/dto/update-ai-instruction.dto.d.ts +11 -0
- package/dist/ai-instruction/dto/update-ai-instruction.dto.d.ts.map +1 -1
- package/dist/ai-instruction/dto/update-ai-instruction.dto.js +34 -0
- package/dist/ai-instruction/dto/update-ai-instruction.dto.js.map +1 -1
- package/dist/ai-instruction/types/ai-instruction.types.d.ts +13 -1
- package/dist/ai-instruction/types/ai-instruction.types.d.ts.map +1 -1
- package/dist/ai-instruction/types/ai-instruction.types.js +10 -0
- package/dist/ai-instruction/types/ai-instruction.types.js.map +1 -1
- package/dist/auth/auth.controller.d.ts +89 -15
- package/dist/auth/auth.controller.d.ts.map +1 -1
- package/dist/auth/auth.controller.js +116 -44
- package/dist/auth/auth.controller.js.map +1 -1
- package/dist/auth/auth.module.d.ts.map +1 -1
- package/dist/auth/auth.module.js +2 -0
- package/dist/auth/auth.module.js.map +1 -1
- package/dist/auth/auth.service.d.ts +169 -12
- package/dist/auth/auth.service.d.ts.map +1 -1
- package/dist/auth/auth.service.js +314 -67
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/auth/dto/confirm-email.dto.d.ts +4 -0
- package/dist/auth/dto/confirm-email.dto.d.ts.map +1 -0
- package/dist/auth/dto/confirm-email.dto.js +22 -0
- package/dist/auth/dto/confirm-email.dto.js.map +1 -0
- package/dist/auth/dto/resend-confirmation.dto.d.ts +8 -0
- package/dist/auth/dto/resend-confirmation.dto.d.ts.map +1 -0
- package/dist/auth/dto/resend-confirmation.dto.js +36 -0
- package/dist/auth/dto/resend-confirmation.dto.js.map +1 -0
- package/dist/authorize/authorize.controller.d.ts +1 -1
- package/dist/authorize/authorize.controller.d.ts.map +1 -1
- package/dist/authorize/authorize.controller.js +4 -2
- package/dist/authorize/authorize.controller.js.map +1 -1
- package/dist/authorize/authorize.service.d.ts +7 -0
- package/dist/authorize/authorize.service.d.ts.map +1 -1
- package/dist/authorize/authorize.service.js +1 -1
- package/dist/authorize/authorize.service.js.map +1 -1
- package/dist/captcha/captcha.module.d.ts +3 -0
- package/dist/captcha/captcha.module.d.ts.map +1 -0
- package/dist/captcha/captcha.module.js +23 -0
- package/dist/captcha/captcha.module.js.map +1 -0
- package/dist/captcha/captcha.service.d.ts +38 -0
- package/dist/captcha/captcha.service.d.ts.map +1 -0
- package/dist/captcha/captcha.service.js +144 -0
- package/dist/captcha/captcha.service.js.map +1 -0
- package/dist/challenge/challenge.service.d.ts +31 -9
- package/dist/challenge/challenge.service.d.ts.map +1 -1
- package/dist/challenge/challenge.service.js +111 -16
- package/dist/challenge/challenge.service.js.map +1 -1
- package/dist/core.module.d.ts +3 -1
- package/dist/core.module.d.ts.map +1 -1
- package/dist/core.module.js +46 -2
- package/dist/core.module.js.map +1 -1
- package/dist/dashboard/dashboard/dashboard.controller.d.ts +21 -21
- package/dist/dashboard/dashboard/dashboard.service.d.ts +21 -21
- package/dist/dashboard/dashboard-component/dashboard-component.controller.d.ts +10 -10
- package/dist/dashboard/dashboard-component/dashboard-component.service.d.ts +10 -10
- package/dist/dashboard/dashboard-component-role/dashboard-component-role.controller.d.ts +20 -20
- package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts +20 -20
- package/dist/dashboard/dashboard-core/dashboard-core.controller.d.ts +3 -3
- package/dist/dashboard/dashboard-core/dashboard-core.service.d.ts +3 -3
- package/dist/dashboard/dashboard-item/dashboard-item.controller.d.ts +2 -2
- package/dist/dashboard/dashboard-item/dashboard-item.service.d.ts +2 -2
- package/dist/dashboard/dashboard-role/dashboard-role.controller.d.ts +13 -13
- package/dist/dashboard/dashboard-role/dashboard-role.service.d.ts +13 -13
- package/dist/file/file.controller.d.ts +8 -1
- package/dist/file/file.controller.d.ts.map +1 -1
- package/dist/file/file.controller.js +45 -7
- package/dist/file/file.controller.js.map +1 -1
- package/dist/file/file.service.d.ts +134 -1
- package/dist/file/file.service.d.ts.map +1 -1
- package/dist/file/file.service.js +363 -12
- package/dist/file/file.service.js.map +1 -1
- package/dist/file/image-optimization.service.d.ts +43 -0
- package/dist/file/image-optimization.service.d.ts.map +1 -1
- package/dist/file/image-optimization.service.js +154 -0
- package/dist/file/image-optimization.service.js.map +1 -1
- package/dist/file/provider/abstract.provider.d.ts +16 -0
- package/dist/file/provider/abstract.provider.d.ts.map +1 -1
- package/dist/file/provider/abstract.provider.js +4 -0
- package/dist/file/provider/abstract.provider.js.map +1 -1
- package/dist/file/provider/gcs.provider.d.ts +2 -0
- package/dist/file/provider/gcs.provider.d.ts.map +1 -1
- package/dist/file/provider/gcs.provider.js +10 -0
- package/dist/file/provider/gcs.provider.js.map +1 -1
- package/dist/file/provider/local.provider.d.ts +1 -0
- package/dist/file/provider/local.provider.d.ts.map +1 -1
- package/dist/file/provider/local.provider.js +13 -0
- package/dist/file/provider/local.provider.js.map +1 -1
- package/dist/file/provider/s3.provider.d.ts +5 -0
- package/dist/file/provider/s3.provider.d.ts.map +1 -1
- package/dist/file/provider/s3.provider.js +15 -0
- package/dist/file/provider/s3.provider.js.map +1 -1
- package/dist/file/provider/spaces.provider.d.ts +5 -0
- package/dist/file/provider/spaces.provider.d.ts.map +1 -1
- package/dist/file/provider/spaces.provider.js +16 -0
- package/dist/file/provider/spaces.provider.js.map +1 -1
- package/dist/impersonation/dto/redeem-impersonation.dto.d.ts +4 -0
- package/dist/impersonation/dto/redeem-impersonation.dto.d.ts.map +1 -0
- package/dist/impersonation/dto/redeem-impersonation.dto.js +23 -0
- package/dist/impersonation/dto/redeem-impersonation.dto.js.map +1 -0
- package/dist/impersonation/dto/start-impersonation.dto.d.ts +7 -0
- package/dist/impersonation/dto/start-impersonation.dto.d.ts.map +1 -0
- package/dist/impersonation/dto/start-impersonation.dto.js +27 -0
- package/dist/impersonation/dto/start-impersonation.dto.js.map +1 -0
- package/dist/impersonation/impersonation-restrictions.d.ts +26 -0
- package/dist/impersonation/impersonation-restrictions.d.ts.map +1 -0
- package/dist/impersonation/impersonation-restrictions.js +76 -0
- package/dist/impersonation/impersonation-restrictions.js.map +1 -0
- package/dist/impersonation/impersonation.controller.d.ts +90 -0
- package/dist/impersonation/impersonation.controller.d.ts.map +1 -0
- package/dist/impersonation/impersonation.controller.js +135 -0
- package/dist/impersonation/impersonation.controller.js.map +1 -0
- package/dist/impersonation/impersonation.module.d.ts +8 -0
- package/dist/impersonation/impersonation.module.d.ts.map +1 -0
- package/dist/impersonation/impersonation.module.js +44 -0
- package/dist/impersonation/impersonation.module.js.map +1 -0
- package/dist/impersonation/impersonation.service.d.ts +164 -0
- package/dist/impersonation/impersonation.service.d.ts.map +1 -0
- package/dist/impersonation/impersonation.service.js +408 -0
- package/dist/impersonation/impersonation.service.js.map +1 -0
- package/dist/incident/incident-notifier.service.d.ts +36 -0
- package/dist/incident/incident-notifier.service.d.ts.map +1 -0
- package/dist/incident/incident-notifier.service.js +208 -0
- package/dist/incident/incident-notifier.service.js.map +1 -0
- package/dist/incident/incident.controller.d.ts +23 -0
- package/dist/incident/incident.controller.d.ts.map +1 -0
- package/dist/incident/incident.controller.js +75 -0
- package/dist/incident/incident.controller.js.map +1 -0
- package/dist/incident/incident.module.d.ts +7 -0
- package/dist/incident/incident.module.d.ts.map +1 -0
- package/dist/incident/incident.module.js +32 -0
- package/dist/incident/incident.module.js.map +1 -0
- package/dist/incident/incident.service.d.ts +72 -0
- package/dist/incident/incident.service.d.ts.map +1 -0
- package/dist/incident/incident.service.js +184 -0
- package/dist/incident/incident.service.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -1
- package/dist/integration/services/outbox-polling.coordinator.d.ts +2 -0
- package/dist/integration/services/outbox-polling.coordinator.d.ts.map +1 -1
- package/dist/integration/services/outbox-polling.coordinator.js +50 -30
- package/dist/integration/services/outbox-polling.coordinator.js.map +1 -1
- package/dist/integration/services/outbox.service.d.ts.map +1 -1
- package/dist/integration/services/outbox.service.js +5 -1
- package/dist/integration/services/outbox.service.js.map +1 -1
- package/dist/integration-profile/dto/test.dto.d.ts +13 -0
- package/dist/integration-profile/dto/test.dto.d.ts.map +1 -0
- package/dist/integration-profile/dto/test.dto.js +26 -0
- package/dist/integration-profile/dto/test.dto.js.map +1 -0
- package/dist/integration-profile/integration-profile.controller.d.ts +12 -1
- package/dist/integration-profile/integration-profile.controller.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.controller.js +9 -1
- package/dist/integration-profile/integration-profile.controller.js.map +1 -1
- package/dist/integration-profile/integration-profile.module.d.ts +6 -1
- package/dist/integration-profile/integration-profile.module.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.module.js +26 -3
- package/dist/integration-profile/integration-profile.module.js.map +1 -1
- package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.secrets.js +12 -1
- package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
- package/dist/integration-profile/integration-profile.service.d.ts +26 -7
- package/dist/integration-profile/integration-profile.service.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.service.js +94 -91
- package/dist/integration-profile/integration-profile.service.js.map +1 -1
- package/dist/integration-profile/integration-profile.utils.d.ts +27 -1
- package/dist/integration-profile/integration-profile.utils.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.utils.js +46 -5
- package/dist/integration-profile/integration-profile.utils.js.map +1 -1
- package/dist/integration-profile/testers/ai.testers.d.ts +3 -0
- package/dist/integration-profile/testers/ai.testers.d.ts.map +1 -0
- package/dist/integration-profile/testers/ai.testers.js +125 -0
- package/dist/integration-profile/testers/ai.testers.js.map +1 -0
- package/dist/integration-profile/testers/captcha.testers.d.ts +3 -0
- package/dist/integration-profile/testers/captcha.testers.d.ts.map +1 -0
- package/dist/integration-profile/testers/captcha.testers.js +121 -0
- package/dist/integration-profile/testers/captcha.testers.js.map +1 -0
- package/dist/integration-profile/testers/email.testers.d.ts +3 -0
- package/dist/integration-profile/testers/email.testers.d.ts.map +1 -0
- package/dist/integration-profile/testers/email.testers.js +156 -0
- package/dist/integration-profile/testers/email.testers.js.map +1 -0
- package/dist/integration-profile/testers/http-probe.d.ts +57 -0
- package/dist/integration-profile/testers/http-probe.d.ts.map +1 -0
- package/dist/integration-profile/testers/http-probe.js +140 -0
- package/dist/integration-profile/testers/http-probe.js.map +1 -0
- package/dist/integration-profile/testers/index.d.ts +12 -0
- package/dist/integration-profile/testers/index.d.ts.map +1 -0
- package/dist/integration-profile/testers/index.js +45 -0
- package/dist/integration-profile/testers/index.js.map +1 -0
- package/dist/integration-profile/testers/infrastructure.testers.d.ts +3 -0
- package/dist/integration-profile/testers/infrastructure.testers.d.ts.map +1 -0
- package/dist/integration-profile/testers/infrastructure.testers.js +105 -0
- package/dist/integration-profile/testers/infrastructure.testers.js.map +1 -0
- package/dist/integration-profile/testers/integration-tester.registry.d.ts +17 -0
- package/dist/integration-profile/testers/integration-tester.registry.d.ts.map +1 -0
- package/dist/integration-profile/testers/integration-tester.registry.js +52 -0
- package/dist/integration-profile/testers/integration-tester.registry.js.map +1 -0
- package/dist/integration-profile/testers/integration-tester.types.d.ts +55 -0
- package/dist/integration-profile/testers/integration-tester.types.d.ts.map +1 -0
- package/dist/integration-profile/testers/integration-tester.types.js +16 -0
- package/dist/integration-profile/testers/integration-tester.types.js.map +1 -0
- package/dist/integration-profile/testers/messaging.testers.d.ts +3 -0
- package/dist/integration-profile/testers/messaging.testers.d.ts.map +1 -0
- package/dist/integration-profile/testers/messaging.testers.js +70 -0
- package/dist/integration-profile/testers/messaging.testers.js.map +1 -0
- package/dist/integration-profile/testers/oauth.testers.d.ts +3 -0
- package/dist/integration-profile/testers/oauth.testers.d.ts.map +1 -0
- package/dist/integration-profile/testers/oauth.testers.js +285 -0
- package/dist/integration-profile/testers/oauth.testers.js.map +1 -0
- package/dist/integration-profile/testers/payment.testers.d.ts +3 -0
- package/dist/integration-profile/testers/payment.testers.d.ts.map +1 -0
- package/dist/integration-profile/testers/payment.testers.js +169 -0
- package/dist/integration-profile/testers/payment.testers.js.map +1 -0
- package/dist/integration-profile/testers/storage.testers.d.ts +3 -0
- package/dist/integration-profile/testers/storage.testers.d.ts.map +1 -0
- package/dist/integration-profile/testers/storage.testers.js +208 -0
- package/dist/integration-profile/testers/storage.testers.js.map +1 -0
- package/dist/language/en.json +15 -2
- package/dist/language/pt.json +15 -2
- package/dist/leaked-password/leaked-password.controller.d.ts +24 -0
- package/dist/leaked-password/leaked-password.controller.d.ts.map +1 -0
- package/dist/leaked-password/leaked-password.controller.js +78 -0
- package/dist/leaked-password/leaked-password.controller.js.map +1 -0
- package/dist/leaked-password/leaked-password.module.d.ts +8 -0
- package/dist/leaked-password/leaked-password.module.d.ts.map +1 -0
- package/dist/leaked-password/leaked-password.module.js +31 -0
- package/dist/leaked-password/leaked-password.module.js.map +1 -0
- package/dist/leaked-password/leaked-password.service.d.ts +64 -0
- package/dist/leaked-password/leaked-password.service.d.ts.map +1 -0
- package/dist/leaked-password/leaked-password.service.js +218 -0
- package/dist/leaked-password/leaked-password.service.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/preview.dto.d.ts +18 -0
- package/dist/mail/dto/preview.dto.d.ts.map +1 -0
- package/dist/mail/dto/preview.dto.js +66 -0
- package/dist/mail/dto/preview.dto.js.map +1 -0
- package/dist/mail/dto/send.dto.d.ts +44 -0
- package/dist/mail/dto/send.dto.d.ts.map +1 -1
- package/dist/mail/dto/send.dto.js +20 -0
- package/dist/mail/dto/send.dto.js.map +1 -1
- package/dist/mail/mail.controller.d.ts +5 -0
- package/dist/mail/mail.controller.d.ts.map +1 -1
- package/dist/mail/mail.controller.js +16 -2
- package/dist/mail/mail.controller.js.map +1 -1
- package/dist/mail/mail.module.d.ts.map +1 -1
- package/dist/mail/mail.module.js +2 -0
- package/dist/mail/mail.module.js.map +1 -1
- package/dist/mail/mail.service.d.ts +69 -4
- package/dist/mail/mail.service.d.ts.map +1 -1
- package/dist/mail/mail.service.js +278 -37
- package/dist/mail/mail.service.js.map +1 -1
- package/dist/mail-delivery/mail-delivery-provision.service.d.ts +21 -0
- package/dist/mail-delivery/mail-delivery-provision.service.d.ts.map +1 -0
- package/dist/mail-delivery/mail-delivery-provision.service.js +64 -0
- package/dist/mail-delivery/mail-delivery-provision.service.js.map +1 -0
- package/dist/mail-delivery/mail-delivery.constants.d.ts +17 -0
- package/dist/mail-delivery/mail-delivery.constants.d.ts.map +1 -0
- package/dist/mail-delivery/mail-delivery.constants.js +31 -0
- package/dist/mail-delivery/mail-delivery.constants.js.map +1 -0
- package/dist/mail-delivery/mail-delivery.controller.d.ts +19 -0
- package/dist/mail-delivery/mail-delivery.controller.d.ts.map +1 -0
- package/dist/mail-delivery/mail-delivery.controller.js +53 -0
- package/dist/mail-delivery/mail-delivery.controller.js.map +1 -0
- package/dist/mail-delivery/mail-delivery.module.d.ts +7 -0
- package/dist/mail-delivery/mail-delivery.module.d.ts.map +1 -0
- package/dist/mail-delivery/mail-delivery.module.js +36 -0
- package/dist/mail-delivery/mail-delivery.module.js.map +1 -0
- package/dist/mail-delivery/mail-delivery.service.d.ts +38 -0
- package/dist/mail-delivery/mail-delivery.service.d.ts.map +1 -0
- package/dist/mail-delivery/mail-delivery.service.js +140 -0
- package/dist/mail-delivery/mail-delivery.service.js.map +1 -0
- package/dist/mail-delivery/ses-event.parser.d.ts +27 -0
- package/dist/mail-delivery/ses-event.parser.d.ts.map +1 -0
- package/dist/mail-delivery/ses-event.parser.js +131 -0
- package/dist/mail-delivery/ses-event.parser.js.map +1 -0
- package/dist/mail-delivery/ses-webhook.service.d.ts +58 -0
- package/dist/mail-delivery/ses-webhook.service.d.ts.map +1 -0
- package/dist/mail-delivery/ses-webhook.service.js +214 -0
- package/dist/mail-delivery/ses-webhook.service.js.map +1 -0
- package/dist/mail-delivery/sns-message.util.d.ts +38 -0
- package/dist/mail-delivery/sns-message.util.d.ts.map +1 -0
- package/dist/mail-delivery/sns-message.util.js +109 -0
- package/dist/mail-delivery/sns-message.util.js.map +1 -0
- package/dist/mail-layout/dto/update.dto.d.ts +17 -0
- package/dist/mail-layout/dto/update.dto.d.ts.map +1 -0
- package/dist/mail-layout/dto/update.dto.js +27 -0
- package/dist/mail-layout/dto/update.dto.js.map +1 -0
- package/dist/mail-layout/mail-layout.controller.d.ts +15 -0
- package/dist/mail-layout/mail-layout.controller.d.ts.map +1 -0
- package/dist/mail-layout/mail-layout.controller.js +71 -0
- package/dist/mail-layout/mail-layout.controller.js.map +1 -0
- package/dist/mail-layout/mail-layout.module.d.ts +3 -0
- package/dist/mail-layout/mail-layout.module.d.ts.map +1 -0
- package/dist/mail-layout/mail-layout.module.js +35 -0
- package/dist/mail-layout/mail-layout.module.js.map +1 -0
- package/dist/mail-layout/mail-layout.service.d.ts +27 -0
- package/dist/mail-layout/mail-layout.service.d.ts.map +1 -0
- package/dist/mail-layout/mail-layout.service.js +80 -0
- package/dist/mail-layout/mail-layout.service.js.map +1 -0
- package/dist/mail-sent/dto/query-mail-sent-list.dto.d.ts +5 -0
- package/dist/mail-sent/dto/query-mail-sent-list.dto.d.ts.map +1 -1
- package/dist/mail-sent/dto/query-mail-sent-list.dto.js +6 -0
- package/dist/mail-sent/dto/query-mail-sent-list.dto.js.map +1 -1
- package/dist/mail-sent/mail-sent.controller.d.ts +39 -0
- package/dist/mail-sent/mail-sent.controller.d.ts.map +1 -1
- package/dist/mail-sent/mail-sent.service.d.ts +39 -0
- package/dist/mail-sent/mail-sent.service.d.ts.map +1 -1
- package/dist/mail-sent/mail-sent.service.js +45 -4
- package/dist/mail-sent/mail-sent.service.js.map +1 -1
- package/dist/mailbox/mailbox-fetcher.registry.d.ts +100 -0
- package/dist/mailbox/mailbox-fetcher.registry.d.ts.map +1 -0
- package/dist/mailbox/mailbox-fetcher.registry.js +59 -0
- package/dist/mailbox/mailbox-fetcher.registry.js.map +1 -0
- package/dist/mailbox/mailbox.module.d.ts +8 -0
- package/dist/mailbox/mailbox.module.d.ts.map +1 -0
- package/dist/mailbox/mailbox.module.js +27 -0
- package/dist/mailbox/mailbox.module.js.map +1 -0
- package/dist/mcp-chat/mcp-chat.controller.d.ts +2 -2
- package/dist/mcp-chat/mcp-chat.service.d.ts +24 -2
- package/dist/mcp-chat/mcp-chat.service.d.ts.map +1 -1
- package/dist/mcp-chat/mcp-chat.service.js +80 -24
- package/dist/mcp-chat/mcp-chat.service.js.map +1 -1
- package/dist/meeting/meeting-provider.registry.d.ts +155 -0
- package/dist/meeting/meeting-provider.registry.d.ts.map +1 -0
- package/dist/meeting/meeting-provider.registry.js +53 -0
- package/dist/meeting/meeting-provider.registry.js.map +1 -0
- package/dist/meeting/meeting.constants.d.ts +47 -0
- package/dist/meeting/meeting.constants.d.ts.map +1 -0
- package/dist/meeting/meeting.constants.js +21 -0
- package/dist/meeting/meeting.constants.js.map +1 -0
- package/dist/meeting/meeting.module.d.ts +7 -0
- package/dist/meeting/meeting.module.d.ts.map +1 -0
- package/dist/meeting/meeting.module.js +26 -0
- package/dist/meeting/meeting.module.js.map +1 -0
- package/dist/menu/menu.controller.d.ts +3 -3
- package/dist/menu/menu.service.d.ts +3 -3
- package/dist/middlewares/locale-injection.middleware.d.ts +12 -0
- package/dist/middlewares/locale-injection.middleware.d.ts.map +1 -1
- package/dist/middlewares/locale-injection.middleware.js +20 -4
- package/dist/middlewares/locale-injection.middleware.js.map +1 -1
- package/dist/notification/notification.controller.d.ts +12 -12
- package/dist/notification/notification.service.d.ts +12 -12
- package/dist/oauth/oauth-token-broker.service.d.ts +72 -0
- package/dist/oauth/oauth-token-broker.service.d.ts.map +1 -0
- package/dist/oauth/oauth-token-broker.service.js +258 -0
- package/dist/oauth/oauth-token-broker.service.js.map +1 -0
- package/dist/oauth/oauth.module.d.ts.map +1 -1
- package/dist/oauth/oauth.module.js +3 -1
- package/dist/oauth/oauth.module.js.map +1 -1
- package/dist/oauth/oauth.service.d.ts +2 -0
- package/dist/oauth/oauth.service.d.ts.map +1 -1
- package/dist/oauth/oauth.service.js +6 -3
- package/dist/oauth/oauth.service.js.map +1 -1
- package/dist/oauth/providers/google.provider.d.ts +7 -0
- package/dist/oauth/providers/google.provider.d.ts.map +1 -1
- package/dist/oauth/providers/google.provider.js +43 -13
- package/dist/oauth/providers/google.provider.js.map +1 -1
- package/dist/observability/monitored-cron.d.ts +34 -0
- package/dist/observability/monitored-cron.d.ts.map +1 -0
- package/dist/observability/monitored-cron.js +118 -0
- package/dist/observability/monitored-cron.js.map +1 -0
- package/dist/pairing/dto/approve-reverse-pairing.dto.d.ts +12 -0
- package/dist/pairing/dto/approve-reverse-pairing.dto.d.ts.map +1 -0
- package/dist/pairing/dto/approve-reverse-pairing.dto.js +30 -0
- package/dist/pairing/dto/approve-reverse-pairing.dto.js.map +1 -0
- package/dist/pairing/dto/claim-pairing.dto.d.ts +11 -0
- package/dist/pairing/dto/claim-pairing.dto.d.ts.map +1 -0
- package/dist/pairing/dto/claim-pairing.dto.js +35 -0
- package/dist/pairing/dto/claim-pairing.dto.js.map +1 -0
- package/dist/pairing/dto/confirm-pairing.dto.d.ts +10 -0
- package/dist/pairing/dto/confirm-pairing.dto.d.ts.map +1 -0
- package/dist/pairing/dto/confirm-pairing.dto.js +24 -0
- package/dist/pairing/dto/confirm-pairing.dto.js.map +1 -0
- package/dist/pairing/dto/poll-reverse-pairing.dto.d.ts +5 -0
- package/dist/pairing/dto/poll-reverse-pairing.dto.d.ts.map +1 -0
- package/dist/pairing/dto/poll-reverse-pairing.dto.js +24 -0
- package/dist/pairing/dto/poll-reverse-pairing.dto.js.map +1 -0
- package/dist/pairing/dto/start-pairing.dto.d.ts +11 -0
- package/dist/pairing/dto/start-pairing.dto.d.ts.map +1 -0
- package/dist/pairing/dto/start-pairing.dto.js +30 -0
- package/dist/pairing/dto/start-pairing.dto.js.map +1 -0
- package/dist/pairing/dto/start-reverse-pairing.dto.d.ts +24 -0
- package/dist/pairing/dto/start-reverse-pairing.dto.d.ts.map +1 -0
- package/dist/pairing/dto/start-reverse-pairing.dto.js +47 -0
- package/dist/pairing/dto/start-reverse-pairing.dto.js.map +1 -0
- package/dist/pairing/pairing.controller.d.ts +118 -0
- package/dist/pairing/pairing.controller.d.ts.map +1 -0
- package/dist/pairing/pairing.controller.js +296 -0
- package/dist/pairing/pairing.controller.js.map +1 -0
- package/dist/pairing/pairing.module.d.ts +10 -0
- package/dist/pairing/pairing.module.d.ts.map +1 -0
- package/dist/pairing/pairing.module.js +40 -0
- package/dist/pairing/pairing.module.js.map +1 -0
- package/dist/pairing/pairing.service.d.ts +238 -0
- package/dist/pairing/pairing.service.d.ts.map +1 -0
- package/dist/pairing/pairing.service.js +495 -0
- package/dist/pairing/pairing.service.js.map +1 -0
- package/dist/pdf/pdf.service.d.ts +11 -6
- package/dist/pdf/pdf.service.d.ts.map +1 -1
- package/dist/pdf/pdf.service.js +60 -20
- package/dist/pdf/pdf.service.js.map +1 -1
- package/dist/presence/presence.controller.d.ts +16 -0
- package/dist/presence/presence.controller.d.ts.map +1 -0
- package/dist/presence/presence.controller.js +60 -0
- package/dist/presence/presence.controller.js.map +1 -0
- package/dist/presence/presence.listener.d.ts +29 -0
- package/dist/presence/presence.listener.d.ts.map +1 -0
- package/dist/presence/presence.listener.js +82 -0
- package/dist/presence/presence.listener.js.map +1 -0
- package/dist/presence/presence.module.d.ts +3 -0
- package/dist/presence/presence.module.d.ts.map +1 -0
- package/dist/presence/presence.module.js +32 -0
- package/dist/presence/presence.module.js.map +1 -0
- package/dist/presence/presence.service.d.ts +42 -0
- package/dist/presence/presence.service.d.ts.map +1 -0
- package/dist/presence/presence.service.js +147 -0
- package/dist/presence/presence.service.js.map +1 -0
- package/dist/profile/dto/delete-account.dto.d.ts +8 -0
- package/dist/profile/dto/delete-account.dto.d.ts.map +1 -0
- package/dist/profile/dto/delete-account.dto.js +22 -0
- package/dist/profile/dto/delete-account.dto.js.map +1 -0
- package/dist/profile/events/profile-account-deleted.event.d.ts +12 -0
- package/dist/profile/events/profile-account-deleted.event.d.ts.map +1 -0
- package/dist/profile/events/profile-account-deleted.event.js +17 -0
- package/dist/profile/events/profile-account-deleted.event.js.map +1 -0
- package/dist/profile/profile.controller.d.ts +32 -15
- package/dist/profile/profile.controller.d.ts.map +1 -1
- package/dist/profile/profile.controller.js +75 -46
- package/dist/profile/profile.controller.js.map +1 -1
- package/dist/profile/profile.service.d.ts +41 -18
- package/dist/profile/profile.service.d.ts.map +1 -1
- package/dist/profile/profile.service.js +133 -48
- package/dist/profile/profile.service.js.map +1 -1
- package/dist/realtime/realtime.gateway.d.ts +48 -0
- package/dist/realtime/realtime.gateway.d.ts.map +1 -0
- package/dist/realtime/realtime.gateway.js +156 -0
- package/dist/realtime/realtime.gateway.js.map +1 -0
- package/dist/realtime/realtime.module.d.ts +8 -0
- package/dist/realtime/realtime.module.d.ts.map +1 -0
- package/dist/realtime/realtime.module.js +29 -0
- package/dist/realtime/realtime.module.js.map +1 -0
- package/dist/realtime/realtime.service.d.ts +51 -0
- package/dist/realtime/realtime.service.d.ts.map +1 -0
- package/dist/realtime/realtime.service.js +177 -0
- package/dist/realtime/realtime.service.js.map +1 -0
- package/dist/redis/redis-pubsub.d.ts +27 -0
- package/dist/redis/redis-pubsub.d.ts.map +1 -0
- package/dist/redis/redis-pubsub.js +184 -0
- package/dist/redis/redis-pubsub.js.map +1 -0
- package/dist/role/guards/role.guard.d.ts +5 -0
- package/dist/role/guards/role.guard.d.ts.map +1 -1
- package/dist/role/guards/role.guard.js +41 -39
- package/dist/role/guards/role.guard.js.map +1 -1
- package/dist/role/role.controller.d.ts +3 -3
- package/dist/role/role.service.d.ts +3 -3
- package/dist/session/session.controller.d.ts +2 -0
- package/dist/session/session.controller.d.ts.map +1 -1
- package/dist/session/session.service.d.ts +39 -0
- package/dist/session/session.service.d.ts.map +1 -1
- package/dist/session/session.service.js +91 -8
- package/dist/session/session.service.js.map +1 -1
- package/dist/setting/brand-asset.service.d.ts +48 -0
- package/dist/setting/brand-asset.service.d.ts.map +1 -0
- package/dist/setting/brand-asset.service.js +130 -0
- package/dist/setting/brand-asset.service.js.map +1 -0
- package/dist/setting/dto/create.dto.d.ts.map +1 -1
- package/dist/setting/dto/create.dto.js +9 -2
- package/dist/setting/dto/create.dto.js.map +1 -1
- package/dist/setting/setting.controller.d.ts +5 -5
- package/dist/setting/setting.module.d.ts.map +1 -1
- package/dist/setting/setting.module.js +3 -2
- package/dist/setting/setting.module.js.map +1 -1
- package/dist/setting/setting.service.d.ts +41 -5
- package/dist/setting/setting.service.d.ts.map +1 -1
- package/dist/setting/setting.service.js +113 -1
- package/dist/setting/setting.service.js.map +1 -1
- package/dist/token/token.service.d.ts +23 -2
- package/dist/token/token.service.d.ts.map +1 -1
- package/dist/token/token.service.js +39 -4
- package/dist/token/token.service.js.map +1 -1
- package/dist/user/dto/create-with-email-and-password.dto.d.ts +2 -0
- package/dist/user/dto/create-with-email-and-password.dto.d.ts.map +1 -1
- package/dist/user/dto/create-with-email-and-password.dto.js +5 -0
- package/dist/user/dto/create-with-email-and-password.dto.js.map +1 -1
- package/dist/user/dto/query-user-mail-list.dto.d.ts +5 -0
- package/dist/user/dto/query-user-mail-list.dto.d.ts.map +1 -0
- package/dist/user/dto/query-user-mail-list.dto.js +25 -0
- package/dist/user/dto/query-user-mail-list.dto.js.map +1 -0
- package/dist/user/user-credential.util.d.ts +19 -0
- package/dist/user/user-credential.util.d.ts.map +1 -0
- package/dist/user/user-credential.util.js +32 -0
- package/dist/user/user-credential.util.js.map +1 -0
- package/dist/user/user.controller.d.ts +24 -26
- package/dist/user/user.controller.d.ts.map +1 -1
- package/dist/user/user.controller.js +18 -3
- package/dist/user/user.controller.js.map +1 -1
- package/dist/user/user.service.d.ts +71 -29
- package/dist/user/user.service.d.ts.map +1 -1
- package/dist/user/user.service.js +291 -17
- package/dist/user/user.service.js.map +1 -1
- package/dist/user-device/user-device.controller.d.ts +54 -0
- package/dist/user-device/user-device.controller.d.ts.map +1 -0
- package/dist/user-device/user-device.controller.js +103 -0
- package/dist/user-device/user-device.controller.js.map +1 -0
- package/dist/user-device/user-device.module.d.ts +3 -0
- package/dist/user-device/user-device.module.d.ts.map +1 -0
- package/dist/user-device/user-device.module.js +26 -0
- package/dist/user-device/user-device.module.js.map +1 -0
- package/dist/user-device/user-device.service.d.ts +71 -0
- package/dist/user-device/user-device.service.d.ts.map +1 -0
- package/dist/user-device/user-device.service.js +158 -0
- package/dist/user-device/user-device.service.js.map +1 -0
- package/dist/utils/device-key.d.ts +23 -0
- package/dist/utils/device-key.d.ts.map +1 -0
- package/dist/utils/device-key.js +31 -0
- package/dist/utils/device-key.js.map +1 -0
- package/dist/utils/geo-ip.d.ts +38 -0
- package/dist/utils/geo-ip.d.ts.map +1 -0
- package/dist/utils/geo-ip.js +122 -0
- package/dist/utils/geo-ip.js.map +1 -0
- package/dist/utils/locale-context.d.ts +10 -7
- package/dist/utils/locale-context.d.ts.map +1 -1
- package/dist/utils/locale-context.js +14 -8
- package/dist/utils/locale-context.js.map +1 -1
- package/dist/utils/security-event-vars.d.ts +56 -0
- package/dist/utils/security-event-vars.d.ts.map +1 -0
- package/dist/utils/security-event-vars.js +109 -0
- package/dist/utils/security-event-vars.js.map +1 -0
- package/dist/utils/user-agent.d.ts +19 -0
- package/dist/utils/user-agent.d.ts.map +1 -0
- package/dist/utils/user-agent.js +36 -0
- package/dist/utils/user-agent.js.map +1 -0
- package/dist/validators/is-strong-password-with-settings.validator.d.ts.map +1 -1
- package/dist/validators/is-strong-password-with-settings.validator.js +11 -0
- package/dist/validators/is-strong-password-with-settings.validator.js.map +1 -1
- package/dist/validators/service-locator.d.ts +9 -0
- package/dist/validators/service-locator.d.ts.map +1 -1
- package/dist/validators/service-locator.js +12 -0
- package/dist/validators/service-locator.js.map +1 -1
- package/dist/webhook-integration/webhook-integration.service.d.ts +5 -0
- package/dist/webhook-integration/webhook-integration.service.d.ts.map +1 -1
- package/dist/webhook-integration/webhook-integration.service.js +50 -4
- package/dist/webhook-integration/webhook-integration.service.js.map +1 -1
- package/dist/webhook-integration/webhook-protocol.registry.d.ts +6 -0
- package/dist/webhook-integration/webhook-protocol.registry.d.ts.map +1 -1
- package/dist/webhook-integration/webhook-protocol.registry.js.map +1 -1
- package/dist/whatsapp-sender/whatsapp-sender.module.d.ts +3 -0
- package/dist/whatsapp-sender/whatsapp-sender.module.d.ts.map +1 -0
- package/dist/whatsapp-sender/whatsapp-sender.module.js +23 -0
- package/dist/whatsapp-sender/whatsapp-sender.module.js.map +1 -0
- package/dist/whatsapp-sender/whatsapp-sender.service.d.ts +50 -0
- package/dist/whatsapp-sender/whatsapp-sender.service.d.ts.map +1 -0
- package/dist/whatsapp-sender/whatsapp-sender.service.js +224 -0
- package/dist/whatsapp-sender/whatsapp-sender.service.js.map +1 -0
- package/hedhog/data/integration_provider.yaml +25 -0
- package/hedhog/data/mail.yaml +275 -112
- package/hedhog/data/mail_layout.yaml +198 -0
- package/hedhog/data/menu.yaml +69 -3
- package/hedhog/data/role.yaml +16 -0
- package/hedhog/data/route.yaml +307 -3
- package/hedhog/data/setting_group.yaml +315 -1
- package/hedhog/data/setting_subgroup.yaml +8 -0
- package/hedhog/frontend/app/_lib/hooks/use-core-access.test.tsx.ejs +125 -0
- package/hedhog/frontend/app/_lib/hooks/use-core-access.ts.ejs +29 -0
- package/hedhog/frontend/app/_lib/hooks/use-impersonation-access.test.ts.ejs +71 -0
- package/hedhog/frontend/app/_lib/hooks/use-impersonation-access.ts.ejs +32 -0
- package/hedhog/frontend/app/access-log/page.tsx.ejs +96 -22
- package/hedhog/frontend/app/account/components/active-sessions.tsx.ejs +17 -1
- package/hedhog/frontend/app/account/components/known-devices.tsx.ejs +89 -0
- package/hedhog/frontend/app/account/components/mfa-setup-dialog.tsx.ejs +36 -0
- package/hedhog/frontend/app/account/components/profile-form.tsx.ejs +2 -1
- package/hedhog/frontend/app/account/components/two-factor-auth.tsx.ejs +2 -0
- package/hedhog/frontend/app/account/components/user-devices-list.tsx.ejs +186 -0
- package/hedhog/frontend/app/account/devices/page.tsx.ejs +5 -0
- package/hedhog/frontend/app/account/hooks/use-mfa-setup.ts.ejs +10 -7
- package/hedhog/frontend/app/account/layout.tsx.ejs +2 -0
- package/hedhog/frontend/app/ai_agent/page.tsx.ejs +7 -4
- package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-form.tsx.ejs +580 -0
- package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-preview.tsx.ejs +150 -0
- package/hedhog/frontend/app/ai_instruction/_components/ai-instruction-versions.tsx.ejs +199 -0
- package/hedhog/frontend/app/ai_instruction/_components/prompt-diff.tsx.ejs +63 -0
- package/hedhog/frontend/app/ai_instruction/_lib/line-diff.spec.ts.ejs +59 -0
- package/hedhog/frontend/app/ai_instruction/_lib/line-diff.ts.ejs +72 -0
- package/hedhog/frontend/app/ai_instruction/_lib/prompt-template.spec.ts.ejs +170 -0
- package/hedhog/frontend/app/ai_instruction/_lib/prompt-template.ts.ejs +167 -0
- package/hedhog/frontend/app/ai_instruction/_lib/types.ts.ejs +99 -0
- package/hedhog/frontend/app/ai_instruction/page.tsx.ejs +422 -0
- package/hedhog/frontend/app/configurations/[slug]/components/setting-field.test.tsx.ejs +298 -0
- package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +410 -1223
- package/hedhog/frontend/app/incidents/page.tsx.ejs +400 -0
- package/hedhog/frontend/app/integration/profiles/page.tsx.ejs +153 -84
- package/hedhog/frontend/app/mail/layout/page.tsx.ejs +344 -0
- package/hedhog/frontend/app/mail/log/page.tsx.ejs +210 -3
- package/hedhog/frontend/app/mail/template/page.tsx.ejs +292 -200
- package/hedhog/frontend/app/mcp_chat/page.tsx.ejs +129 -17
- package/hedhog/frontend/app/pages/_components/page-delete-dialog.tsx.ejs +343 -0
- package/hedhog/frontend/app/pages/_components/page-detail-sheet.tsx.ejs +438 -0
- package/hedhog/frontend/app/pages/_components/page-wizard-sheet.tsx.ejs +1009 -0
- package/hedhog/frontend/app/pages/_components/system-page-types.ts.ejs +56 -0
- package/hedhog/frontend/app/pages/_components/use-system-pages.ts.ejs +171 -0
- package/hedhog/frontend/app/pages/page.tsx.ejs +514 -0
- package/hedhog/frontend/app/users/active-session.tsx.ejs +58 -11
- package/hedhog/frontend/app/users/page.tsx.ejs +186 -21
- package/hedhog/frontend/app/users/simulate-access-dialog.test.tsx.ejs +202 -0
- package/hedhog/frontend/app/users/simulate-access-dialog.tsx.ejs +170 -0
- package/hedhog/frontend/app/users/user-activity-timeline.tsx.ejs +250 -0
- package/hedhog/frontend/app/users/user-devices.tsx.ejs +89 -0
- package/hedhog/frontend/app/users/user-logs.tsx.ejs +13 -1
- package/hedhog/frontend/app/users/user-mails.tsx.ejs +399 -0
- package/hedhog/frontend/app/users/user-sheet.tsx.ejs +106 -99
- package/hedhog/frontend/messages/en.json +643 -49
- package/hedhog/frontend/messages/pt.json +643 -49
- package/hedhog/table/access_log.yaml +7 -0
- package/hedhog/table/ai_agent.yaml +1 -0
- package/hedhog/table/ai_instruction.yaml +15 -0
- package/hedhog/table/file.yaml +8 -0
- package/hedhog/table/leaked_password.yaml +18 -0
- package/hedhog/table/mail_delivery_event.yaml +76 -0
- package/hedhog/table/mail_layout.yaml +35 -0
- package/hedhog/table/mail_sent.yaml +23 -0
- package/hedhog/table/mail_var.yaml +4 -0
- package/hedhog/table/setting.yaml +1 -0
- package/hedhog/table/system_incident.yaml +59 -0
- package/hedhog/table/user_activity.yaml +9 -0
- package/hedhog/table/user_device.yaml +52 -0
- package/hedhog/table/user_presence.yaml +36 -0
- package/hedhog/table/user_session.yaml +20 -1
- package/package.json +7 -2
- package/src/access-log/access-log.controller.ts +1 -0
- package/src/access-log/access-log.interceptor.ts +9 -3
- package/src/access-log/access-log.service.spec.ts +33 -2
- package/src/access-log/access-log.service.ts +38 -0
- package/src/access-log/dto/query-access-log.dto.ts +5 -0
- package/src/ai/ai-attachment.fragments.spec.ts +319 -0
- package/src/ai/ai-attachment.fragments.ts +35 -0
- package/src/ai/ai.controller.ts +9 -0
- package/src/ai/ai.module.ts +3 -2
- package/src/ai/ai.prompts.ts +38 -0
- package/src/ai/ai.service.spec.ts +280 -0
- package/src/ai/ai.service.ts +475 -82
- package/src/ai/dto/chat.dto.ts +33 -3
- package/src/ai/dto/create-agent.dto.ts +2 -2
- package/src/ai/dto/richtext-edit-html.dto.ts +11 -0
- package/src/ai/dto/update-agent.dto.ts +2 -2
- package/src/ai/richtext-ai.prompts.ts +57 -0
- package/src/ai/richtext-ai.service.ts +109 -0
- package/src/ai-instruction/ai-instruction.controller.ts +40 -9
- package/src/ai-instruction/ai-instruction.module.ts +13 -2
- package/src/ai-instruction/ai-instruction.service.spec.ts +658 -0
- package/src/ai-instruction/ai-instruction.service.ts +661 -62
- package/src/ai-instruction/ai-prompt-builder.service.ts +10 -1
- package/src/ai-instruction/ai-prompt-registry.ts +87 -0
- package/src/ai-instruction/ai-prompt-resolver.service.spec.ts +375 -0
- package/src/ai-instruction/ai-prompt-resolver.service.ts +295 -0
- package/src/ai-instruction/ai-prompt-template.util.spec.ts +162 -0
- package/src/ai-instruction/ai-prompt-template.util.ts +199 -0
- package/src/ai-instruction/dto/create-ai-instruction.dto.ts +39 -3
- package/src/ai-instruction/dto/preview-ai-instruction.dto.ts +26 -0
- package/src/ai-instruction/dto/update-ai-instruction.dto.ts +42 -1
- package/src/ai-instruction/types/ai-instruction.types.ts +24 -1
- package/src/auth/auth.controller.ts +78 -13
- package/src/auth/auth.module.ts +2 -0
- package/src/auth/auth.service.spec.ts +386 -7
- package/src/auth/auth.service.ts +435 -81
- package/src/auth/dto/confirm-email.dto.ts +7 -0
- package/src/auth/dto/resend-confirmation.dto.ts +20 -0
- package/src/authorize/authorize.controller.ts +2 -0
- package/src/authorize/authorize.service.spec.ts +23 -0
- package/src/authorize/authorize.service.ts +8 -0
- package/src/captcha/captcha.module.ts +10 -0
- package/src/captcha/captcha.service.spec.ts +210 -0
- package/src/captcha/captcha.service.ts +191 -0
- package/src/challenge/challenge.service.spec.ts +112 -4
- package/src/challenge/challenge.service.ts +131 -17
- package/src/core.module.ts +46 -1
- package/src/file/file.controller.ts +54 -4
- package/src/file/file.service.spec.ts +275 -0
- package/src/file/file.service.ts +468 -16
- package/src/file/image-optimization.service.spec.ts +92 -0
- package/src/file/image-optimization.service.ts +202 -0
- package/src/file/provider/abstract.provider.ts +23 -0
- package/src/file/provider/gcs.provider.ts +17 -0
- package/src/file/provider/local.provider.ts +21 -0
- package/src/file/provider/s3.provider.ts +25 -0
- package/src/file/provider/spaces.provider.ts +26 -0
- package/src/impersonation/dto/redeem-impersonation.dto.ts +8 -0
- package/src/impersonation/dto/start-impersonation.dto.ts +13 -0
- package/src/impersonation/impersonation-restrictions.ts +84 -0
- package/src/impersonation/impersonation.controller.ts +109 -0
- package/src/impersonation/impersonation.module.ts +31 -0
- package/src/impersonation/impersonation.service.spec.ts +427 -0
- package/src/impersonation/impersonation.service.ts +577 -0
- package/src/incident/incident-notifier.service.spec.ts +205 -0
- package/src/incident/incident-notifier.service.ts +241 -0
- package/src/incident/incident.controller.ts +38 -0
- package/src/incident/incident.module.ts +19 -0
- package/src/incident/incident.service.spec.ts +150 -0
- package/src/incident/incident.service.ts +209 -0
- package/src/index.ts +58 -0
- package/src/integration/services/outbox-polling.coordinator.spec.ts +90 -0
- package/src/integration/services/outbox-polling.coordinator.ts +62 -40
- package/src/integration/services/outbox.service.spec.ts +8 -0
- package/src/integration/services/outbox.service.ts +19 -13
- package/src/integration-profile/dto/test.dto.ts +19 -0
- package/src/integration-profile/integration-profile.controller.ts +10 -1
- package/src/integration-profile/integration-profile.module.spec.ts +51 -0
- package/src/integration-profile/integration-profile.module.ts +23 -4
- package/src/integration-profile/integration-profile.secrets.ts +12 -1
- package/src/integration-profile/integration-profile.service.spec.ts +279 -0
- package/src/integration-profile/integration-profile.service.ts +120 -124
- package/src/integration-profile/integration-profile.utils.spec.ts +22 -0
- package/src/integration-profile/integration-profile.utils.ts +78 -3
- package/src/integration-profile/testers/ai.testers.ts +165 -0
- package/src/integration-profile/testers/captcha.testers.spec.ts +92 -0
- package/src/integration-profile/testers/captcha.testers.ts +139 -0
- package/src/integration-profile/testers/email.testers.ts +194 -0
- package/src/integration-profile/testers/http-probe.spec.ts +153 -0
- package/src/integration-profile/testers/http-probe.ts +171 -0
- package/src/integration-profile/testers/index.ts +30 -0
- package/src/integration-profile/testers/infrastructure.testers.ts +122 -0
- package/src/integration-profile/testers/integration-tester.registry.spec.ts +75 -0
- package/src/integration-profile/testers/integration-tester.registry.ts +43 -0
- package/src/integration-profile/testers/integration-tester.types.ts +61 -0
- package/src/integration-profile/testers/messaging.testers.ts +102 -0
- package/src/integration-profile/testers/oauth.testers.spec.ts +220 -0
- package/src/integration-profile/testers/oauth.testers.ts +305 -0
- package/src/integration-profile/testers/payment.testers.ts +185 -0
- package/src/integration-profile/testers/remaining.testers.spec.ts +401 -0
- package/src/integration-profile/testers/storage.testers.spec.ts +185 -0
- package/src/integration-profile/testers/storage.testers.ts +226 -0
- package/src/integration-profile/testers/tester-coverage.spec.ts +58 -0
- package/src/language/en.json +15 -2
- package/src/language/pt.json +15 -2
- package/src/leaked-password/README.md +83 -0
- package/src/leaked-password/leaked-password.controller.ts +52 -0
- package/src/leaked-password/leaked-password.module.ts +18 -0
- package/src/leaked-password/leaked-password.service.ts +242 -0
- package/src/leaked-password/seed/build-seed-sql.mjs +180 -0
- package/src/leaked-password/seed/common-passwords.txt +335 -0
- package/src/mail/dto/preview.dto.ts +50 -0
- package/src/mail/dto/send.dto.ts +58 -1
- package/src/mail/mail-template.spec.ts +274 -0
- package/src/mail/mail.controller.ts +9 -2
- package/src/mail/mail.module.ts +2 -0
- package/src/mail/mail.service.spec.ts +422 -6
- package/src/mail/mail.service.ts +337 -34
- package/src/mail-delivery/mail-delivery-provision.service.ts +66 -0
- package/src/mail-delivery/mail-delivery.constants.ts +31 -0
- package/src/mail-delivery/mail-delivery.controller.ts +38 -0
- package/src/mail-delivery/mail-delivery.module.ts +23 -0
- package/src/mail-delivery/mail-delivery.service.spec.ts +136 -0
- package/src/mail-delivery/mail-delivery.service.ts +152 -0
- package/src/mail-delivery/ses-event.parser.spec.ts +140 -0
- package/src/mail-delivery/ses-event.parser.ts +191 -0
- package/src/mail-delivery/ses-webhook.service.spec.ts +170 -0
- package/src/mail-delivery/ses-webhook.service.ts +240 -0
- package/src/mail-delivery/sns-message.util.spec.ts +163 -0
- package/src/mail-delivery/sns-message.util.ts +125 -0
- package/src/mail-layout/dto/update.dto.ts +19 -0
- package/src/mail-layout/mail-layout.controller.ts +47 -0
- package/src/mail-layout/mail-layout.module.ts +22 -0
- package/src/mail-layout/mail-layout.service.ts +94 -0
- package/src/mail-sent/dto/query-mail-sent-list.dto.ts +15 -0
- package/src/mail-sent/mail-sent.service.ts +46 -2
- package/src/mailbox/mailbox-fetcher.registry.ts +132 -0
- package/src/mailbox/mailbox.module.ts +14 -0
- package/src/mcp-chat/mcp-chat.service.spec.ts +236 -0
- package/src/mcp-chat/mcp-chat.service.ts +122 -26
- package/src/meeting/meeting-provider.registry.ts +193 -0
- package/src/meeting/meeting.constants.ts +53 -0
- package/src/meeting/meeting.module.ts +13 -0
- package/src/middlewares/locale-injection.middleware.ts +25 -6
- package/src/oauth/oauth-token-broker.service.spec.ts +172 -0
- package/src/oauth/oauth-token-broker.service.ts +363 -0
- package/src/oauth/oauth.module.ts +3 -1
- package/src/oauth/oauth.service.ts +8 -2
- package/src/oauth/providers/google.provider.ts +49 -15
- package/src/observability/monitored-cron.spec.ts +102 -0
- package/src/observability/monitored-cron.ts +110 -0
- package/src/pairing/dto/approve-reverse-pairing.dto.ts +20 -0
- package/src/pairing/dto/claim-pairing.dto.ts +19 -0
- package/src/pairing/dto/confirm-pairing.dto.ts +14 -0
- package/src/pairing/dto/poll-reverse-pairing.dto.ts +9 -0
- package/src/pairing/dto/start-pairing.dto.ts +19 -0
- package/src/pairing/dto/start-reverse-pairing.dto.ts +45 -0
- package/src/pairing/pairing.controller.ts +246 -0
- package/src/pairing/pairing.module.ts +27 -0
- package/src/pairing/pairing.service.spec.ts +462 -0
- package/src/pairing/pairing.service.ts +614 -0
- package/src/pdf/pdf.service.ts +81 -24
- package/src/presence/presence.controller.ts +29 -0
- package/src/presence/presence.listener.ts +53 -0
- package/src/presence/presence.module.ts +19 -0
- package/src/presence/presence.service.spec.ts +97 -0
- package/src/presence/presence.service.ts +160 -0
- package/src/profile/dto/delete-account.dto.ts +11 -0
- package/src/profile/events/profile-account-deleted.event.ts +13 -0
- package/src/profile/profile.controller.ts +46 -34
- package/src/profile/profile.service.ts +164 -46
- package/src/realtime/realtime.gateway.ts +138 -0
- package/src/realtime/realtime.module.ts +16 -0
- package/src/realtime/realtime.service.spec.ts +50 -0
- package/src/realtime/realtime.service.ts +187 -0
- package/src/redis/redis-pubsub.ts +190 -0
- package/src/role/guards/role.guard.spec.ts +75 -0
- package/src/role/guards/role.guard.ts +64 -46
- package/src/session/session.service.spec.ts +81 -0
- package/src/session/session.service.ts +93 -6
- package/src/setting/brand-asset.service.ts +137 -0
- package/src/setting/dto/create.dto.ts +13 -2
- package/src/setting/setting.module.ts +3 -2
- package/src/setting/setting.service.spec.ts +135 -1
- package/src/setting/setting.service.ts +138 -2
- package/src/token/token.service.spec.ts +62 -0
- package/src/token/token.service.ts +57 -3
- package/src/user/dto/create-with-email-and-password.dto.ts +6 -1
- package/src/user/dto/query-user-mail-list.dto.ts +10 -0
- package/src/user/user-credential.util.ts +35 -0
- package/src/user/user.controller.ts +17 -2
- package/src/user/user.service.spec.ts +186 -2
- package/src/user/user.service.ts +361 -16
- package/src/user-device/user-device.controller.ts +77 -0
- package/src/user-device/user-device.module.ts +13 -0
- package/src/user-device/user-device.service.spec.ts +234 -0
- package/src/user-device/user-device.service.ts +168 -0
- package/src/utils/device-key.spec.ts +57 -0
- package/src/utils/device-key.ts +32 -0
- package/src/utils/geo-ip.spec.ts +134 -0
- package/src/utils/geo-ip.ts +93 -0
- package/src/utils/locale-context.spec.ts +27 -1
- package/src/utils/locale-context.ts +15 -12
- package/src/utils/security-event-vars.spec.ts +161 -0
- package/src/utils/security-event-vars.ts +153 -0
- package/src/utils/user-agent.spec.ts +37 -0
- package/src/utils/user-agent.ts +46 -0
- package/src/validators/is-strong-password-with-settings.validator.ts +12 -0
- package/src/validators/service-locator.ts +15 -0
- package/src/webhook-integration/webhook-integration.service.ts +57 -3
- package/src/webhook-integration/webhook-protocol.registry.ts +6 -0
- package/src/whatsapp-sender/whatsapp-sender.module.ts +10 -0
- package/src/whatsapp-sender/whatsapp-sender.service.ts +313 -0
|
@@ -71,7 +71,35 @@
|
|
|
71
71
|
description:
|
|
72
72
|
en: 'Base URLs for specific apps, formatted as "app=https://example.com" (one per tag). Used in transactional email links (e.g. password reset) when the request comes from that app, falling back to System URL otherwise.'
|
|
73
73
|
pt: 'URLs base de apps específicos, no formato "app=https://exemplo.com" (uma por tag). Usadas em links de e-mails transacionais (ex.: redefinição de senha) quando a solicitação vem desse app, usando a URL do Sistema como alternativa.'
|
|
74
|
-
value: '["training=http://localhost:3001","class=https://localhost:3002","partners=http://localhost:3003"]'
|
|
74
|
+
value: '["training=http://localhost:3001","class=https://localhost:3002","partners=http://localhost:3003","admin=http://localhost:3200"]'
|
|
75
|
+
user_override: false
|
|
76
|
+
subgroup_id:
|
|
77
|
+
where:
|
|
78
|
+
slug: general-system
|
|
79
|
+
- slug: cors-allowed-origins
|
|
80
|
+
type: array
|
|
81
|
+
component: input-tags
|
|
82
|
+
name:
|
|
83
|
+
en: Extra CORS Origins
|
|
84
|
+
pt: Origens CORS Adicionais
|
|
85
|
+
description:
|
|
86
|
+
en: 'Extra origins allowed to call the API from a browser, added to CORS_ALLOWED_ORIGINS/CORS_ALLOWED_DOMAINS and applied without a restart. Already includes the published browser extension; add your own only if you build the extension yourself.'
|
|
87
|
+
pt: 'Origens adicionais autorizadas a chamar a API pelo navegador, somadas a CORS_ALLOWED_ORIGINS/CORS_ALLOWED_DOMAINS e aplicadas sem reiniciar. Já inclui a extensão de navegador publicada; acrescente as suas apenas se você mesmo compilar a extensão.'
|
|
88
|
+
value: '["chrome-extension://ojimnolpmeegaaindaaceiodhmlbaljn"]'
|
|
89
|
+
user_override: false
|
|
90
|
+
subgroup_id:
|
|
91
|
+
where:
|
|
92
|
+
slug: general-system
|
|
93
|
+
- slug: app-names
|
|
94
|
+
type: array
|
|
95
|
+
component: input-tags
|
|
96
|
+
name:
|
|
97
|
+
en: App Names
|
|
98
|
+
pt: Nomes dos Aplicativos
|
|
99
|
+
description:
|
|
100
|
+
en: 'Deprecated: no longer used. Transactional emails always show the System Name. Kept for backward compatibility.'
|
|
101
|
+
pt: 'Descontinuada: não é mais usada. E-mails transacionais sempre exibem o Nome do Sistema. Mantida por compatibilidade.'
|
|
102
|
+
value: '["training=Training","class=Class","partners=Partners","admin=Admin"]'
|
|
75
103
|
user_override: false
|
|
76
104
|
subgroup_id:
|
|
77
105
|
where:
|
|
@@ -256,6 +284,42 @@
|
|
|
256
284
|
subgroup_id:
|
|
257
285
|
where:
|
|
258
286
|
slug: mail-configuration
|
|
287
|
+
- slug: ai-default-provider
|
|
288
|
+
type: string
|
|
289
|
+
component: combobox
|
|
290
|
+
name:
|
|
291
|
+
en: Default AI Provider
|
|
292
|
+
pt: Provedor de IA Padrão
|
|
293
|
+
description:
|
|
294
|
+
en: Default AI provider used when a caller does not explicitly specify one
|
|
295
|
+
pt: Provedor de IA padrão usado quando quem chama não especifica um explicitamente
|
|
296
|
+
value: openai
|
|
297
|
+
user_override: false
|
|
298
|
+
relations:
|
|
299
|
+
setting_list:
|
|
300
|
+
- value: openai
|
|
301
|
+
order: 0
|
|
302
|
+
- value: gemini
|
|
303
|
+
order: 1
|
|
304
|
+
- value: deepseek
|
|
305
|
+
order: 2
|
|
306
|
+
subgroup_id:
|
|
307
|
+
where:
|
|
308
|
+
slug: ai-configuration
|
|
309
|
+
- slug: core-ai-prompts-link
|
|
310
|
+
type: string
|
|
311
|
+
component: link
|
|
312
|
+
name:
|
|
313
|
+
en: AI Prompts
|
|
314
|
+
pt: Prompts de IA
|
|
315
|
+
description:
|
|
316
|
+
en: View and edit the AI prompts used by the core module.
|
|
317
|
+
pt: Veja e edite os prompts de IA usados pelo modulo core.
|
|
318
|
+
value: /core/ai_instruction?module=core
|
|
319
|
+
user_override: false
|
|
320
|
+
subgroup_id:
|
|
321
|
+
where:
|
|
322
|
+
slug: ai-configuration
|
|
259
323
|
- slug: ai-openai-profile-id
|
|
260
324
|
type: string
|
|
261
325
|
component: entity-picker
|
|
@@ -284,6 +348,20 @@
|
|
|
284
348
|
subgroup_id:
|
|
285
349
|
where:
|
|
286
350
|
slug: ai-configuration
|
|
351
|
+
- slug: ai-deepseek-profile-id
|
|
352
|
+
type: string
|
|
353
|
+
component: entity-picker
|
|
354
|
+
name:
|
|
355
|
+
en: DeepSeek Profile
|
|
356
|
+
pt: Perfil DeepSeek
|
|
357
|
+
description:
|
|
358
|
+
en: Integration profile (type AI / DeepSeek) to use for DeepSeek features
|
|
359
|
+
pt: Perfil de integração (tipo IA / DeepSeek) a usar para recursos de DeepSeek
|
|
360
|
+
value: ''
|
|
361
|
+
user_override: false
|
|
362
|
+
subgroup_id:
|
|
363
|
+
where:
|
|
364
|
+
slug: ai-configuration
|
|
287
365
|
- slug: mcp-enabled
|
|
288
366
|
type: boolean
|
|
289
367
|
component: switch
|
|
@@ -312,6 +390,34 @@
|
|
|
312
390
|
subgroup_id:
|
|
313
391
|
where:
|
|
314
392
|
slug: mcp-configuration
|
|
393
|
+
- slug: richtext-ai-enabled
|
|
394
|
+
type: boolean
|
|
395
|
+
component: switch
|
|
396
|
+
name:
|
|
397
|
+
en: Enable AI in Rich Text Editor
|
|
398
|
+
pt: Habilitar IA no Editor de Texto
|
|
399
|
+
description:
|
|
400
|
+
en: Shows an AI button in the rich text editor toolbar (used across the admin), letting users rewrite the current content from a prompt.
|
|
401
|
+
pt: Exibe um botão de IA na barra de ferramentas do editor de texto rico (usado em todo o admin), permitindo reescrever o conteúdo atual a partir de um prompt.
|
|
402
|
+
value: false
|
|
403
|
+
user_override: false
|
|
404
|
+
subgroup_id:
|
|
405
|
+
where:
|
|
406
|
+
slug: richtext-ai-configuration
|
|
407
|
+
- slug: richtext-ai-profile-id
|
|
408
|
+
type: string
|
|
409
|
+
component: entity-picker
|
|
410
|
+
name:
|
|
411
|
+
en: AI Profile
|
|
412
|
+
pt: Perfil de IA
|
|
413
|
+
description:
|
|
414
|
+
en: Integration profile (type AI) used to rewrite rich text editor content from a prompt.
|
|
415
|
+
pt: Perfil de integração (tipo IA) usado para reescrever o conteúdo do editor de texto rico a partir de um prompt.
|
|
416
|
+
value: ''
|
|
417
|
+
user_override: false
|
|
418
|
+
subgroup_id:
|
|
419
|
+
where:
|
|
420
|
+
slug: richtext-ai-configuration
|
|
315
421
|
- slug: authentication
|
|
316
422
|
icon: lock-password
|
|
317
423
|
name:
|
|
@@ -406,6 +512,34 @@
|
|
|
406
512
|
subgroup_id:
|
|
407
513
|
where:
|
|
408
514
|
slug: password-policy
|
|
515
|
+
- slug: password-block-leaked
|
|
516
|
+
type: boolean
|
|
517
|
+
component: switch
|
|
518
|
+
name:
|
|
519
|
+
en: Block Leaked Passwords
|
|
520
|
+
pt: Bloquear Senhas Vazadas
|
|
521
|
+
description:
|
|
522
|
+
en: Reject passwords found in the known-breach corpus, and warn about vault secrets that use one
|
|
523
|
+
pt: Recusar senhas encontradas no corpus de vazamentos conhecidos e avisar sobre segredos do cofre que usam alguma
|
|
524
|
+
value: true
|
|
525
|
+
user_override: false
|
|
526
|
+
subgroup_id:
|
|
527
|
+
where:
|
|
528
|
+
slug: password-policy
|
|
529
|
+
- slug: password-max-age-days
|
|
530
|
+
type: number
|
|
531
|
+
component: input-number
|
|
532
|
+
name:
|
|
533
|
+
en: Password Maximum Age (days)
|
|
534
|
+
pt: Idade Máxima da Senha (dias)
|
|
535
|
+
description:
|
|
536
|
+
en: Days after which a stored password is flagged as outdated in the vaults. Use 0 to disable the check.
|
|
537
|
+
pt: Dias após os quais uma senha guardada é sinalizada como desatualizada nos cofres. Use 0 para desativar a verificação.
|
|
538
|
+
value: 180
|
|
539
|
+
user_override: false
|
|
540
|
+
subgroup_id:
|
|
541
|
+
where:
|
|
542
|
+
slug: password-policy
|
|
409
543
|
- slug: email-host-whitelist
|
|
410
544
|
type: array
|
|
411
545
|
name:
|
|
@@ -573,6 +707,20 @@
|
|
|
573
707
|
subgroup_id:
|
|
574
708
|
where:
|
|
575
709
|
slug: session-management
|
|
710
|
+
- slug: impersonation-session-minutes
|
|
711
|
+
type: number
|
|
712
|
+
component: input-number
|
|
713
|
+
name:
|
|
714
|
+
en: Simulated Session Lifetime
|
|
715
|
+
pt: Duração da Sessão Simulada
|
|
716
|
+
description:
|
|
717
|
+
en: Minutes an access simulation session stays valid. It is never refreshed, so this is the hard limit.
|
|
718
|
+
pt: Minutos que uma sessão de simulação de acesso continua válida. Ela nunca é renovada, então este é o limite absoluto.
|
|
719
|
+
value: 30
|
|
720
|
+
user_override: false
|
|
721
|
+
subgroup_id:
|
|
722
|
+
where:
|
|
723
|
+
slug: session-management
|
|
576
724
|
- slug: localization
|
|
577
725
|
icon: world
|
|
578
726
|
name:
|
|
@@ -992,6 +1140,158 @@
|
|
|
992
1140
|
order: 1
|
|
993
1141
|
- value: email
|
|
994
1142
|
order: 2
|
|
1143
|
+
- value: User.Read
|
|
1144
|
+
order: 3
|
|
1145
|
+
- value: offline_access
|
|
1146
|
+
order: 4
|
|
1147
|
+
- value: Calendars.Read
|
|
1148
|
+
order: 5
|
|
1149
|
+
- value: OnlineMeetings.Read
|
|
1150
|
+
order: 6
|
|
1151
|
+
- value: Chat.Read
|
|
1152
|
+
order: 7
|
|
1153
|
+
- value: ChannelMessage.Read
|
|
1154
|
+
order: 8
|
|
1155
|
+
- value: Team.ReadBasic.All
|
|
1156
|
+
order: 9
|
|
1157
|
+
- value: Presence.Read
|
|
1158
|
+
order: 10
|
|
1159
|
+
- value: User.ReadBasic.All
|
|
1160
|
+
order: 11
|
|
1161
|
+
- value: Calendars.ReadWrite
|
|
1162
|
+
order: 12
|
|
1163
|
+
- value: OnlineMeetings.ReadWrite
|
|
1164
|
+
order: 13
|
|
1165
|
+
- value: OnlineMeetingRecording.Read.All
|
|
1166
|
+
order: 14
|
|
1167
|
+
subgroup_id:
|
|
1168
|
+
where:
|
|
1169
|
+
slug: microsoft-entra-id
|
|
1170
|
+
- slug: microsoft-graph-app-only-enabled
|
|
1171
|
+
type: boolean
|
|
1172
|
+
component: switch
|
|
1173
|
+
name:
|
|
1174
|
+
en: Enable tenant-wide (app-only) Microsoft Graph access
|
|
1175
|
+
pt: Acesso Microsoft Graph da organização (app-only)
|
|
1176
|
+
description:
|
|
1177
|
+
en: Allow the Microsoft integration to read data across the whole tenant using application permissions (client credentials), in addition to per-user delegated access. Requires admin consent in Entra.
|
|
1178
|
+
pt: Permite que a integração Microsoft leia dados de toda a organização usando permissões de aplicativo (client credentials), além do acesso delegado por usuário. Exige consentimento do administrador no Entra.
|
|
1179
|
+
value: 'false'
|
|
1180
|
+
user_override: false
|
|
1181
|
+
subgroup_id:
|
|
1182
|
+
where:
|
|
1183
|
+
slug: microsoft-entra-id
|
|
1184
|
+
- slug: microsoft-graph-chat-subscriptions-enabled
|
|
1185
|
+
type: boolean
|
|
1186
|
+
component: switch
|
|
1187
|
+
name:
|
|
1188
|
+
en: Subscribe to Teams chat/channel messages (protected API)
|
|
1189
|
+
pt: Assinar mensagens de chat/canal do Teams (API protegida)
|
|
1190
|
+
description:
|
|
1191
|
+
en: Create org-wide change-notification subscriptions for Teams chat and channel messages. These are protected APIs that require an approved request to Microsoft and appropriate licensing; leave off until approved.
|
|
1192
|
+
pt: Cria assinaturas de change notification para mensagens de chat e canal do Teams em toda a organização. São APIs protegidas que exigem pedido aprovado pela Microsoft e licenciamento adequado; deixe desligado até aprovar.
|
|
1193
|
+
value: 'false'
|
|
1194
|
+
user_override: false
|
|
1195
|
+
subgroup_id:
|
|
1196
|
+
where:
|
|
1197
|
+
slug: microsoft-entra-id
|
|
1198
|
+
- slug: microsoft-meeting-organizer-mode
|
|
1199
|
+
type: string
|
|
1200
|
+
component: radio
|
|
1201
|
+
name:
|
|
1202
|
+
en: Teams meeting organizer
|
|
1203
|
+
pt: Organizador das reuniões Teams
|
|
1204
|
+
description:
|
|
1205
|
+
en: 'Who organizes the meetings this system schedules: "app" uses a fixed service account via application permissions (the instructor does not need a connected account); "delegated" uses the connected Microsoft account of whoever requested the meeting.'
|
|
1206
|
+
pt: 'Quem organiza as reuniões agendadas pelo sistema: "app" usa uma conta de serviço fixa com permissões de aplicativo (o instrutor não precisa ter conta conectada); "delegated" usa a conta Microsoft conectada de quem pediu a reunião.'
|
|
1207
|
+
value: app
|
|
1208
|
+
user_override: false
|
|
1209
|
+
relations:
|
|
1210
|
+
setting_list:
|
|
1211
|
+
- value: app
|
|
1212
|
+
order: 0
|
|
1213
|
+
- value: delegated
|
|
1214
|
+
order: 1
|
|
1215
|
+
subgroup_id:
|
|
1216
|
+
where:
|
|
1217
|
+
slug: microsoft-entra-id
|
|
1218
|
+
- slug: microsoft-meeting-service-account
|
|
1219
|
+
type: string
|
|
1220
|
+
component: input-text
|
|
1221
|
+
name:
|
|
1222
|
+
en: Teams meeting service account (UPN)
|
|
1223
|
+
pt: Conta de serviço das reuniões (UPN)
|
|
1224
|
+
description:
|
|
1225
|
+
en: UPN of the mailbox that organizes and records the meetings when the organizer is "app". Needs a Teams license, a policy allowing cloud recording, and an Application Access Policy granting this app access to it.
|
|
1226
|
+
pt: UPN da caixa que organiza e grava as reuniões quando o organizador é "app". Precisa de licença do Teams, política que permita gravação na nuvem e uma Application Access Policy dando acesso a este aplicativo.
|
|
1227
|
+
value: ""
|
|
1228
|
+
user_override: false
|
|
1229
|
+
subgroup_id:
|
|
1230
|
+
where:
|
|
1231
|
+
slug: microsoft-entra-id
|
|
1232
|
+
- slug: microsoft-meeting-recording-poll-hours
|
|
1233
|
+
type: number
|
|
1234
|
+
component: input-number
|
|
1235
|
+
name:
|
|
1236
|
+
en: Recording lookup window (hours)
|
|
1237
|
+
pt: Janela de busca da gravação (horas)
|
|
1238
|
+
description:
|
|
1239
|
+
en: How long after a meeting ends the system keeps looking for its recording before giving up and marking it unavailable.
|
|
1240
|
+
pt: Por quanto tempo, após o fim da reunião, o sistema continua procurando a gravação antes de desistir e marcá-la como indisponível.
|
|
1241
|
+
value: '48'
|
|
1242
|
+
user_override: false
|
|
1243
|
+
subgroup_id:
|
|
1244
|
+
where:
|
|
1245
|
+
slug: microsoft-entra-id
|
|
1246
|
+
- slug: microsoft-meeting-recording-purge-mode
|
|
1247
|
+
type: string
|
|
1248
|
+
component: radio
|
|
1249
|
+
name:
|
|
1250
|
+
en: OneDrive recording cleanup
|
|
1251
|
+
pt: Limpeza da gravação no OneDrive
|
|
1252
|
+
description:
|
|
1253
|
+
en: 'What to do with the recording in the organizer''s OneDrive once it is safely imported: nothing, log only, recycle bin, or permanent delete. The recycle bin still uses the account quota for up to 93 days.'
|
|
1254
|
+
pt: 'O que fazer com a gravação no OneDrive do organizador depois de importada com segurança: nada, só registrar no log, mandar para a lixeira ou excluir em definitivo. A lixeira ainda consome a cota por até 93 dias.'
|
|
1255
|
+
value: disabled
|
|
1256
|
+
user_override: false
|
|
1257
|
+
relations:
|
|
1258
|
+
setting_list:
|
|
1259
|
+
- value: disabled
|
|
1260
|
+
order: 0
|
|
1261
|
+
- value: dry_run
|
|
1262
|
+
order: 1
|
|
1263
|
+
- value: recycle_bin
|
|
1264
|
+
order: 2
|
|
1265
|
+
- value: permanent
|
|
1266
|
+
order: 3
|
|
1267
|
+
subgroup_id:
|
|
1268
|
+
where:
|
|
1269
|
+
slug: microsoft-entra-id
|
|
1270
|
+
- slug: microsoft-meeting-recording-purge-grace-days
|
|
1271
|
+
type: number
|
|
1272
|
+
component: input-number
|
|
1273
|
+
name:
|
|
1274
|
+
en: Cleanup grace period (days)
|
|
1275
|
+
pt: Carência antes da limpeza (dias)
|
|
1276
|
+
description:
|
|
1277
|
+
en: How long to wait after a successful import before deleting the recording from OneDrive. The window exists so a failed transcoding or a wrong import can still be redone from the original.
|
|
1278
|
+
pt: Quanto tempo esperar após uma importação bem-sucedida antes de apagar a gravação do OneDrive. A janela existe para que uma transcodificação falha ou um import errado ainda possam ser refeitos a partir do original.
|
|
1279
|
+
value: '7'
|
|
1280
|
+
user_override: false
|
|
1281
|
+
subgroup_id:
|
|
1282
|
+
where:
|
|
1283
|
+
slug: microsoft-entra-id
|
|
1284
|
+
- slug: microsoft-meeting-recording-folder
|
|
1285
|
+
type: string
|
|
1286
|
+
component: input-text
|
|
1287
|
+
name:
|
|
1288
|
+
en: OneDrive recordings folder
|
|
1289
|
+
pt: Pasta das gravações no OneDrive
|
|
1290
|
+
description:
|
|
1291
|
+
en: Name of the folder where Teams drops recordings in the organizer's OneDrive. The name follows the tenant language, and nothing outside this folder is ever deleted.
|
|
1292
|
+
pt: Nome da pasta onde o Teams deposita as gravações no OneDrive do organizador. O nome acompanha o idioma da organização, e nada fora dessa pasta é apagado.
|
|
1293
|
+
value: Recordings
|
|
1294
|
+
user_override: false
|
|
995
1295
|
subgroup_id:
|
|
996
1296
|
where:
|
|
997
1297
|
slug: microsoft-entra-id
|
|
@@ -1957,6 +2257,20 @@
|
|
|
1957
2257
|
subgroup_id:
|
|
1958
2258
|
where:
|
|
1959
2259
|
slug: image-optimization
|
|
2260
|
+
- slug: image-resize-allowed-widths
|
|
2261
|
+
type: string
|
|
2262
|
+
component: input-text
|
|
2263
|
+
name:
|
|
2264
|
+
en: Allowed Resize Widths (px)
|
|
2265
|
+
pt: Larguras Permitidas de Redimensionamento (px)
|
|
2266
|
+
description:
|
|
2267
|
+
en: 'JSON list of widths the public image endpoint may render via ?w=. Any other width serves the original file. An allowlist is required because the endpoint is public: an arbitrary width means arbitrary CPU per request.'
|
|
2268
|
+
pt: 'Lista JSON de larguras que o endpoint público de imagens pode gerar via ?w=. Qualquer outra largura serve o arquivo original. A lista é obrigatória porque o endpoint é público: uma largura arbitrária significa CPU arbitrária por requisição.'
|
|
2269
|
+
value: '[64,128,320,400,480,640,896,1200]'
|
|
2270
|
+
user_override: false
|
|
2271
|
+
subgroup_id:
|
|
2272
|
+
where:
|
|
2273
|
+
slug: image-optimization
|
|
1960
2274
|
- slug: image-cache-ttl-seconds
|
|
1961
2275
|
type: number
|
|
1962
2276
|
component: input-number
|
|
@@ -373,3 +373,11 @@
|
|
|
373
373
|
description:
|
|
374
374
|
en: Model Context Protocol configuration
|
|
375
375
|
pt: Configuração do servidor MCP
|
|
376
|
+
|
|
377
|
+
- slug: richtext-ai-configuration
|
|
378
|
+
name:
|
|
379
|
+
en: Rich Text AI
|
|
380
|
+
pt: IA no Editor de Texto
|
|
381
|
+
description:
|
|
382
|
+
en: AI-assisted rewriting for the shared rich text editor used across the admin
|
|
383
|
+
pt: Reescrita assistida por IA para o editor de texto rico compartilhado usado no admin
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { renderHook, waitFor } from '@testing-library/react';
|
|
3
|
+
import { type ReactNode } from 'react';
|
|
4
|
+
|
|
5
|
+
// useCoreAccess combina useApp().request/accessToken com useQuery real, igual ao
|
|
6
|
+
// padrão de use-finance-access.test.tsx. A lógica determinística real está na
|
|
7
|
+
// derivação de roleSlugs/canManageUserPermissions a partir da resposta.
|
|
8
|
+
const { mockRequest, appState } = vi.hoisted(() => ({
|
|
9
|
+
mockRequest: vi.fn(),
|
|
10
|
+
appState: { accessToken: undefined as string | undefined },
|
|
11
|
+
}));
|
|
12
|
+
vi.mock('@hed-hog/next-app-provider', async () => {
|
|
13
|
+
const rq = await vi.importActual<typeof import('@tanstack/react-query')>(
|
|
14
|
+
'@tanstack/react-query',
|
|
15
|
+
);
|
|
16
|
+
return {
|
|
17
|
+
useApp: () => ({ request: mockRequest, accessToken: appState.accessToken }),
|
|
18
|
+
useQuery: rq.useQuery,
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
23
|
+
import { useCoreAccess } from './use-core-access';
|
|
24
|
+
|
|
25
|
+
function makeWrapper() {
|
|
26
|
+
const client = new QueryClient({
|
|
27
|
+
defaultOptions: { queries: { retry: false } },
|
|
28
|
+
});
|
|
29
|
+
return function Wrapper({ children }: { children: ReactNode }) {
|
|
30
|
+
return <QueryClientProvider client={client}>{children}</QueryClientProvider>;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
describe('useCoreAccess', () => {
|
|
35
|
+
beforeEach(() => {
|
|
36
|
+
mockRequest.mockReset();
|
|
37
|
+
appState.accessToken = 'tok';
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('não dispara a query sem accessToken (enabled=false)', () => {
|
|
41
|
+
appState.accessToken = undefined;
|
|
42
|
+
const { result } = renderHook(() => useCoreAccess(), {
|
|
43
|
+
wrapper: makeWrapper(),
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
expect(mockRequest).not.toHaveBeenCalled();
|
|
47
|
+
expect(result.current.isLoading).toBe(false);
|
|
48
|
+
expect(result.current.roleSlugs).toEqual([]);
|
|
49
|
+
expect(result.current.canManageUserPermissions).toBe(false);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('canManageUserPermissions é true para admin', async () => {
|
|
53
|
+
mockRequest.mockResolvedValue({ data: { roles: [{ slug: 'admin' }] } });
|
|
54
|
+
const { result } = renderHook(() => useCoreAccess(), {
|
|
55
|
+
wrapper: makeWrapper(),
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
await waitFor(() => expect(result.current.roleSlugs).toEqual(['admin']));
|
|
59
|
+
expect(result.current.canManageUserPermissions).toBe(true);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('canManageUserPermissions é true para admin-user-permission', async () => {
|
|
63
|
+
mockRequest.mockResolvedValue({
|
|
64
|
+
data: { roles: [{ slug: 'admin-user-permission' }] },
|
|
65
|
+
});
|
|
66
|
+
const { result } = renderHook(() => useCoreAccess(), {
|
|
67
|
+
wrapper: makeWrapper(),
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
await waitFor(() =>
|
|
71
|
+
expect(result.current.roleSlugs).toEqual(['admin-user-permission']),
|
|
72
|
+
);
|
|
73
|
+
expect(result.current.canManageUserPermissions).toBe(true);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('canManageUserPermissions é false para admin-user (deliberadamente excluído)', async () => {
|
|
77
|
+
mockRequest.mockResolvedValue({ data: { roles: [{ slug: 'admin-user' }] } });
|
|
78
|
+
const { result } = renderHook(() => useCoreAccess(), {
|
|
79
|
+
wrapper: makeWrapper(),
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
await waitFor(() =>
|
|
83
|
+
expect(result.current.roleSlugs).toEqual(['admin-user']),
|
|
84
|
+
);
|
|
85
|
+
expect(result.current.canManageUserPermissions).toBe(false);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it('canManageUserPermissions é false para outros papéis admin-*', async () => {
|
|
89
|
+
mockRequest.mockResolvedValue({
|
|
90
|
+
data: { roles: [{ slug: 'admin-mail' }, { slug: 'admin-access' }] },
|
|
91
|
+
});
|
|
92
|
+
const { result } = renderHook(() => useCoreAccess(), {
|
|
93
|
+
wrapper: makeWrapper(),
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
await waitFor(() =>
|
|
97
|
+
expect(result.current.roleSlugs).toEqual(['admin-mail', 'admin-access']),
|
|
98
|
+
);
|
|
99
|
+
expect(result.current.canManageUserPermissions).toBe(false);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it('filtra roles sem slug (vazio/undefined) da lista final', async () => {
|
|
103
|
+
mockRequest.mockResolvedValue({
|
|
104
|
+
data: { roles: [{ slug: '' }, { slug: undefined }, { slug: 'user' }] },
|
|
105
|
+
});
|
|
106
|
+
const { result } = renderHook(() => useCoreAccess(), {
|
|
107
|
+
wrapper: makeWrapper(),
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
await waitFor(() => expect(result.current.roleSlugs).toEqual(['user']));
|
|
111
|
+
expect(result.current.canManageUserPermissions).toBe(false);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it('sem roles na resposta devolve lista vazia', async () => {
|
|
115
|
+
mockRequest.mockResolvedValue({ data: { roles: [] } });
|
|
116
|
+
const { result } = renderHook(() => useCoreAccess(), {
|
|
117
|
+
wrapper: makeWrapper(),
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
await waitFor(() => expect(mockRequest).toHaveBeenCalled());
|
|
121
|
+
await waitFor(() => expect(result.current.isLoading).toBe(false));
|
|
122
|
+
expect(result.current.roleSlugs).toEqual([]);
|
|
123
|
+
expect(result.current.canManageUserPermissions).toBe(false);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useApp, useQuery } from '@hed-hog/next-app-provider';
|
|
2
|
+
|
|
3
|
+
type Role = { slug?: string };
|
|
4
|
+
|
|
5
|
+
export function useCoreAccess() {
|
|
6
|
+
const { request, accessToken } = useApp();
|
|
7
|
+
|
|
8
|
+
const { data, isLoading } = useQuery<{ roles: Role[] }>({
|
|
9
|
+
queryKey: ['core-roles', accessToken],
|
|
10
|
+
enabled: !!accessToken,
|
|
11
|
+
queryFn: async () => {
|
|
12
|
+
const response = await request<{ roles: Role[] }>({ url: '/auth/roles' });
|
|
13
|
+
return response.data;
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const roleSlugs = (data?.roles ?? []).map((r) => r.slug || '').filter(Boolean);
|
|
18
|
+
|
|
19
|
+
return {
|
|
20
|
+
isLoading,
|
|
21
|
+
roleSlugs,
|
|
22
|
+
// Conceder/revogar papeis de outra conta e escalonamento de privilegio, entao
|
|
23
|
+
// exige o papel dedicado admin-user-permission. admin-user administra apenas
|
|
24
|
+
// o cadastro do usuario e é deliberadamente excluido daqui.
|
|
25
|
+
canManageUserPermissions:
|
|
26
|
+
roleSlugs.includes('admin') ||
|
|
27
|
+
roleSlugs.includes('admin-user-permission'),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
3
|
+
import { renderHook, waitFor } from '@testing-library/react';
|
|
4
|
+
import { createElement, type ReactNode } from 'react';
|
|
5
|
+
|
|
6
|
+
const { appState } = vi.hoisted(() => ({
|
|
7
|
+
appState: {
|
|
8
|
+
request: vi.fn(),
|
|
9
|
+
accessToken: 'token-123',
|
|
10
|
+
impersonation: null as unknown,
|
|
11
|
+
},
|
|
12
|
+
}));
|
|
13
|
+
|
|
14
|
+
vi.mock('@hed-hog/next-app-provider', async () => {
|
|
15
|
+
const actual =
|
|
16
|
+
await vi.importActual<typeof import('@tanstack/react-query')>(
|
|
17
|
+
'@tanstack/react-query'
|
|
18
|
+
);
|
|
19
|
+
return {
|
|
20
|
+
useApp: () => appState,
|
|
21
|
+
useQuery: actual.useQuery,
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
import { useImpersonationAccess } from './use-impersonation-access';
|
|
26
|
+
|
|
27
|
+
const renderWithRoles = async (slugs: string[]) => {
|
|
28
|
+
appState.request = vi.fn().mockResolvedValue({
|
|
29
|
+
data: { roles: slugs.map((slug) => ({ slug })) },
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// Um client por render: cache compartilhado vazaria papéis de um teste para
|
|
33
|
+
// o outro.
|
|
34
|
+
const queryClient = new QueryClient({
|
|
35
|
+
defaultOptions: { queries: { retry: false } },
|
|
36
|
+
});
|
|
37
|
+
const wrapper = ({ children }: { children: ReactNode }) =>
|
|
38
|
+
createElement(QueryClientProvider, { client: queryClient }, children);
|
|
39
|
+
|
|
40
|
+
const { result } = renderHook(() => useImpersonationAccess(), { wrapper });
|
|
41
|
+
await waitFor(() => expect(result.current.isLoading).toBe(false));
|
|
42
|
+
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
describe('useImpersonationAccess', () => {
|
|
47
|
+
beforeEach(() => {
|
|
48
|
+
appState.impersonation = null;
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('libera para admin', async () => {
|
|
52
|
+
const result = await renderWithRoles(['admin']);
|
|
53
|
+
expect(result.current.canSimulateAccess).toBe(true);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('libera para admin-impersonation', async () => {
|
|
57
|
+
const result = await renderWithRoles(['admin-impersonation']);
|
|
58
|
+
expect(result.current.canSimulateAccess).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('nega para admin-user, que administra o cadastro mas não simula acesso', async () => {
|
|
62
|
+
const result = await renderWithRoles(['admin-user']);
|
|
63
|
+
expect(result.current.canSimulateAccess).toBe(false);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('nega dentro de uma simulação — não existe simulação aninhada', async () => {
|
|
67
|
+
appState.impersonation = { target: { id: 1, name: 'Aluna' } };
|
|
68
|
+
const result = await renderWithRoles(['admin']);
|
|
69
|
+
expect(result.current.canSimulateAccess).toBe(false);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { useApp, useQuery } from '@hed-hog/next-app-provider';
|
|
2
|
+
|
|
3
|
+
type Role = { slug?: string };
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Quem pode abrir uma simulação de acesso. Só decide a VISIBILIDADE do botão —
|
|
7
|
+
* a autorização de verdade é o RoleGuard sobre `POST /impersonation/start`.
|
|
8
|
+
*/
|
|
9
|
+
export function useImpersonationAccess() {
|
|
10
|
+
const { request, accessToken, impersonation } = useApp();
|
|
11
|
+
|
|
12
|
+
const { data, isLoading } = useQuery<{ roles: Role[] }>({
|
|
13
|
+
queryKey: ['impersonation-roles', accessToken],
|
|
14
|
+
enabled: !!accessToken,
|
|
15
|
+
queryFn: async () => {
|
|
16
|
+
const response = await request<{ roles: Role[] }>({ url: '/auth/roles' });
|
|
17
|
+
return response.data;
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const roleSlugs = (data?.roles ?? []).map((r) => r.slug || '').filter(Boolean);
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
isLoading,
|
|
25
|
+
roleSlugs,
|
|
26
|
+
canSimulateAccess:
|
|
27
|
+
// Dentro de uma simulação não se abre outra: o backend recusa e o botão
|
|
28
|
+
// só criaria uma expectativa falsa.
|
|
29
|
+
!impersonation &&
|
|
30
|
+
(roleSlugs.includes('admin') || roleSlugs.includes('admin-impersonation')),
|
|
31
|
+
};
|
|
32
|
+
}
|