@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
|
@@ -12,13 +12,27 @@ import {
|
|
|
12
12
|
} from '@nestjs/common';
|
|
13
13
|
import axios from 'axios';
|
|
14
14
|
import { AiExecutionService } from '../ai-instruction/ai-execution.service';
|
|
15
|
+
import { FALLBACK_SYSTEM_PROMPT } from '../ai-instruction/ai-instruction.service';
|
|
15
16
|
import { AiPromptBuilderService } from '../ai-instruction/ai-prompt-builder.service';
|
|
16
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
buildAiConfigFromIntegration,
|
|
19
|
+
DEEPSEEK_API_BASE_URL,
|
|
20
|
+
DEEPSEEK_DEFAULT_MODEL,
|
|
21
|
+
} from '../integration-profile/integration-profile.utils';
|
|
17
22
|
import { McpRegistryService, McpToolEntry } from '../mcp/mcp-registry.service';
|
|
18
23
|
import { McpContext } from '../mcp/types/mcp-context.type';
|
|
19
24
|
import { SettingService } from '../setting/setting.service';
|
|
20
25
|
import { CreateConversationDTO } from './dto/create-conversation.dto';
|
|
21
26
|
|
|
27
|
+
const OPENAI_API_BASE_URL = 'https://api.openai.com/v1';
|
|
28
|
+
/**
|
|
29
|
+
* Modelos usados quando o perfil de integração não declara `config.model`.
|
|
30
|
+
* São o comportamento histórico do chat MCP, de quando o modelo era literal:
|
|
31
|
+
* mudar aqui muda o padrão de toda instalação que ainda não preencheu o campo.
|
|
32
|
+
*/
|
|
33
|
+
const OPENAI_CHAT_MODEL = 'gpt-4o-mini';
|
|
34
|
+
const GEMINI_CHAT_MODEL = 'gemini-2.0-flash';
|
|
35
|
+
|
|
22
36
|
type OpenAiMessage =
|
|
23
37
|
| { role: 'system'; content: string }
|
|
24
38
|
| { role: 'user'; content: string }
|
|
@@ -90,13 +104,6 @@ const FORCE_FINISH_THRESHOLD = 2;
|
|
|
90
104
|
const MIN_DOMAIN_CONFIDENCE = 2;
|
|
91
105
|
const AMBIGUOUS_DOMAIN_DELTA = 1;
|
|
92
106
|
|
|
93
|
-
// SYSTEM_PROMPT is now managed via AiInstructionService (slug: system.global).
|
|
94
|
-
// This fallback is used only if the DB is unreachable during startup.
|
|
95
|
-
const SYSTEM_PROMPT_FALLBACK =
|
|
96
|
-
'You are a helpful assistant with access to tools from the HedHog system. ' +
|
|
97
|
-
"Use the available tools to answer the user's questions accurately. " +
|
|
98
|
-
'Always respond in the same language the user writes in.';
|
|
99
|
-
|
|
100
107
|
const sanitize = (n: string) => n.replace(/\./g, '__');
|
|
101
108
|
const restore = (n: string) => n.replace(/__/g, '.');
|
|
102
109
|
|
|
@@ -300,7 +307,7 @@ export class McpChatService {
|
|
|
300
307
|
|
|
301
308
|
await this.assertOwnership(conversationId, userId);
|
|
302
309
|
|
|
303
|
-
const { provider, apiKey } = await this.getProviderKey();
|
|
310
|
+
const { provider, apiKey, baseUrl, model } = await this.getProviderKey();
|
|
304
311
|
|
|
305
312
|
// Save user message
|
|
306
313
|
await this.prisma.mcp_conversation_message.create({
|
|
@@ -331,28 +338,65 @@ export class McpChatService {
|
|
|
331
338
|
|
|
332
339
|
try {
|
|
333
340
|
if (provider === 'gemini') {
|
|
334
|
-
return await this.runGeminiLoop(
|
|
341
|
+
return await this.runGeminiLoop(
|
|
342
|
+
conversationId,
|
|
343
|
+
userId,
|
|
344
|
+
locale,
|
|
345
|
+
message,
|
|
346
|
+
apiKey,
|
|
347
|
+
executionId,
|
|
348
|
+
model,
|
|
349
|
+
);
|
|
335
350
|
}
|
|
336
|
-
return await this.runOpenAiLoop(
|
|
351
|
+
return await this.runOpenAiLoop(
|
|
352
|
+
conversationId,
|
|
353
|
+
userId,
|
|
354
|
+
locale,
|
|
355
|
+
message,
|
|
356
|
+
apiKey,
|
|
357
|
+
executionId,
|
|
358
|
+
provider,
|
|
359
|
+
baseUrl,
|
|
360
|
+
model,
|
|
361
|
+
);
|
|
337
362
|
} catch (err) {
|
|
338
363
|
await this.aiExecution.finish(executionId, 'failed', String(err));
|
|
339
364
|
throw err;
|
|
340
365
|
}
|
|
341
366
|
}
|
|
342
367
|
|
|
343
|
-
|
|
368
|
+
/**
|
|
369
|
+
* Composes the system prompt from the stored layers.
|
|
370
|
+
*
|
|
371
|
+
* `moduleSlug`/`agentSlug` activate the L3/L4 layers; without them the seeded
|
|
372
|
+
* `module.*` and `agent.*` instructions are never read. `SYSTEM_PROMPT_FALLBACK`
|
|
373
|
+
* used to be duplicated here — it now comes from `AiInstructionService`, which
|
|
374
|
+
* already falls back internally, so this only guards against the whole build
|
|
375
|
+
* throwing.
|
|
376
|
+
*/
|
|
377
|
+
private async getSystemPrompt(
|
|
378
|
+
locale?: string,
|
|
379
|
+
context?: { moduleSlug?: string; agentSlug?: string },
|
|
380
|
+
): Promise<string> {
|
|
344
381
|
try {
|
|
345
382
|
const built = await this.promptBuilder.build({
|
|
346
383
|
locale,
|
|
384
|
+
moduleSlug: context?.moduleSlug,
|
|
385
|
+
agentSlug: context?.agentSlug,
|
|
347
386
|
});
|
|
348
|
-
return built.systemPrompt ||
|
|
387
|
+
return built.systemPrompt || FALLBACK_SYSTEM_PROMPT;
|
|
349
388
|
} catch {
|
|
350
|
-
return
|
|
389
|
+
return FALLBACK_SYSTEM_PROMPT;
|
|
351
390
|
}
|
|
352
391
|
}
|
|
353
392
|
|
|
354
393
|
// ── OpenAI loop ──────────────────────────────────────────────────────────
|
|
355
394
|
|
|
395
|
+
/**
|
|
396
|
+
* Loop de tool calling no formato OpenAI. Serve tanto para a OpenAI quanto
|
|
397
|
+
* para o DeepSeek, que expõe a mesma API de `/chat/completions` (inclusive
|
|
398
|
+
* `tools`/`tool_calls`) — muda só a base URL, o modelo e a chave.
|
|
399
|
+
*/
|
|
356
400
|
private async runOpenAiLoop(
|
|
357
401
|
conversationId: number,
|
|
358
402
|
userId: number,
|
|
@@ -360,6 +404,9 @@ export class McpChatService {
|
|
|
360
404
|
message: string,
|
|
361
405
|
apiKey: string,
|
|
362
406
|
executionId: number,
|
|
407
|
+
provider: 'openai' | 'deepseek' = 'openai',
|
|
408
|
+
baseUrl = OPENAI_API_BASE_URL,
|
|
409
|
+
model = OPENAI_CHAT_MODEL,
|
|
363
410
|
) {
|
|
364
411
|
const systemPrompt = await this.getSystemPrompt(locale);
|
|
365
412
|
|
|
@@ -385,6 +432,9 @@ export class McpChatService {
|
|
|
385
432
|
history,
|
|
386
433
|
);
|
|
387
434
|
if (toolSelection.clarification) {
|
|
435
|
+
// Sem o finish a execução fica presa em `running` para sempre — o caminho
|
|
436
|
+
// Gemini já fechava aqui.
|
|
437
|
+
await this.aiExecution.finish(executionId, 'completed');
|
|
388
438
|
return this.recordAssistantAndReturnHistory(
|
|
389
439
|
conversationId,
|
|
390
440
|
toolSelection.clarification,
|
|
@@ -401,9 +451,9 @@ export class McpChatService {
|
|
|
401
451
|
const stepStart = Date.now();
|
|
402
452
|
try {
|
|
403
453
|
response = await axios.post(
|
|
404
|
-
|
|
454
|
+
`${baseUrl}/chat/completions`,
|
|
405
455
|
{
|
|
406
|
-
model
|
|
456
|
+
model,
|
|
407
457
|
messages: openAiMessages,
|
|
408
458
|
tools: !forceFinish && tools.length > 0 ? tools : undefined,
|
|
409
459
|
tool_choice: !forceFinish && tools.length > 0 ? 'auto' : undefined,
|
|
@@ -418,17 +468,19 @@ export class McpChatService {
|
|
|
418
468
|
} catch (err: any) {
|
|
419
469
|
const status = err?.response?.status;
|
|
420
470
|
const errBody = err?.response?.data?.error;
|
|
471
|
+
const providerName = provider === 'deepseek' ? 'DeepSeek' : 'OpenAI';
|
|
421
472
|
if (status === 429) {
|
|
422
473
|
throw new HttpException(
|
|
423
|
-
errBody?.message ??
|
|
474
|
+
errBody?.message ??
|
|
475
|
+
`${providerName} rate limit exceeded. Please try again later.`,
|
|
424
476
|
HttpStatus.TOO_MANY_REQUESTS,
|
|
425
477
|
);
|
|
426
478
|
}
|
|
427
479
|
if (status === 401) {
|
|
428
|
-
throw new BadRequestException(
|
|
480
|
+
throw new BadRequestException(`Invalid ${providerName} API key.`);
|
|
429
481
|
}
|
|
430
482
|
throw new HttpException(
|
|
431
|
-
errBody?.message ??
|
|
483
|
+
errBody?.message ?? `${providerName} API error.`,
|
|
432
484
|
status ?? HttpStatus.BAD_GATEWAY,
|
|
433
485
|
);
|
|
434
486
|
}
|
|
@@ -438,8 +490,8 @@ export class McpChatService {
|
|
|
438
490
|
executionId,
|
|
439
491
|
stepOrder: stepOrder++,
|
|
440
492
|
type: 'prompt',
|
|
441
|
-
provider
|
|
442
|
-
model
|
|
493
|
+
provider,
|
|
494
|
+
model,
|
|
443
495
|
durationMs: Date.now() - stepStart,
|
|
444
496
|
usage: usage
|
|
445
497
|
? { input: usage.prompt_tokens ?? 0, output: usage.completion_tokens ?? 0, total: usage.total_tokens ?? 0 }
|
|
@@ -571,7 +623,11 @@ export class McpChatService {
|
|
|
571
623
|
message: string,
|
|
572
624
|
apiKey: string,
|
|
573
625
|
executionId: number,
|
|
626
|
+
model = GEMINI_CHAT_MODEL,
|
|
574
627
|
) {
|
|
628
|
+
// O perfil pode trazer o nome no formato da API ("models/gemini-2.0-flash");
|
|
629
|
+
// a URL abaixo já inclui o segmento `/models/`.
|
|
630
|
+
const modelId = model.replace(/^models\//, '');
|
|
575
631
|
const systemPrompt = await this.getSystemPrompt(locale);
|
|
576
632
|
|
|
577
633
|
const allHistory = await this.prisma.mcp_conversation_message.findMany({
|
|
@@ -608,7 +664,7 @@ export class McpChatService {
|
|
|
608
664
|
const stepStart = Date.now();
|
|
609
665
|
try {
|
|
610
666
|
response = await axios.post(
|
|
611
|
-
`https://generativelanguage.googleapis.com/v1beta/models
|
|
667
|
+
`https://generativelanguage.googleapis.com/v1beta/models/${encodeURIComponent(modelId)}:generateContent?key=${apiKey}`,
|
|
612
668
|
{
|
|
613
669
|
systemInstruction: { parts: [{ text: systemPrompt }] },
|
|
614
670
|
contents: geminiContents,
|
|
@@ -648,7 +704,7 @@ export class McpChatService {
|
|
|
648
704
|
stepOrder: stepOrder++,
|
|
649
705
|
type: 'prompt',
|
|
650
706
|
provider: 'gemini',
|
|
651
|
-
model:
|
|
707
|
+
model: modelId,
|
|
652
708
|
durationMs: Date.now() - stepStart,
|
|
653
709
|
usage: geminiUsage
|
|
654
710
|
? { input: geminiUsage.promptTokenCount ?? 0, output: geminiUsage.candidatesTokenCount ?? 0, total: geminiUsage.totalTokenCount ?? 0 }
|
|
@@ -858,7 +914,21 @@ export class McpChatService {
|
|
|
858
914
|
}
|
|
859
915
|
}
|
|
860
916
|
|
|
861
|
-
|
|
917
|
+
/**
|
|
918
|
+
* Resolve credenciais e modelo do chat MCP a partir do perfil de integração
|
|
919
|
+
* apontado pela setting `mcp-ai-profile-id`.
|
|
920
|
+
*
|
|
921
|
+
* O `model` segue a mesma precedência do resto do codebase — aqui sem o degrau
|
|
922
|
+
* de `ai_instruction`, porque este fluxo não tem prompt de task próprio:
|
|
923
|
+
* `integration_profile.config.model` > constante de default do provider.
|
|
924
|
+
*/
|
|
925
|
+
private async getProviderKey(): Promise<{
|
|
926
|
+
provider: 'openai' | 'gemini' | 'deepseek';
|
|
927
|
+
apiKey: string;
|
|
928
|
+
/** Base URL só se aplica aos providers no formato OpenAI; o Gemini leva o modelo na URL. */
|
|
929
|
+
baseUrl: string;
|
|
930
|
+
model: string;
|
|
931
|
+
}> {
|
|
862
932
|
const settings = await this.setting.getSettingValues(['mcp-ai-profile-id']);
|
|
863
933
|
const profileSlug = String(settings['mcp-ai-profile-id'] ?? '').trim();
|
|
864
934
|
|
|
@@ -878,13 +948,39 @@ export class McpChatService {
|
|
|
878
948
|
}
|
|
879
949
|
|
|
880
950
|
const providerSlug = profile.integration_provider.slug;
|
|
881
|
-
const { apiKey } = buildAiConfigFromIntegration(
|
|
951
|
+
const { apiKey, model, baseUrl } = buildAiConfigFromIntegration(
|
|
952
|
+
providerSlug,
|
|
953
|
+
profile.config,
|
|
954
|
+
);
|
|
882
955
|
|
|
883
956
|
if (!apiKey) {
|
|
884
957
|
throw new BadRequestException(`MCP AI profile "${profileSlug}" has no API key configured.`);
|
|
885
958
|
}
|
|
886
959
|
|
|
887
|
-
|
|
960
|
+
if (providerSlug === 'gemini') {
|
|
961
|
+
return {
|
|
962
|
+
provider: 'gemini',
|
|
963
|
+
apiKey,
|
|
964
|
+
baseUrl: '',
|
|
965
|
+
model: model || GEMINI_CHAT_MODEL,
|
|
966
|
+
};
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
if (providerSlug === 'deepseek') {
|
|
970
|
+
return {
|
|
971
|
+
provider: 'deepseek',
|
|
972
|
+
apiKey,
|
|
973
|
+
baseUrl: baseUrl || DEEPSEEK_API_BASE_URL,
|
|
974
|
+
model: model || DEEPSEEK_DEFAULT_MODEL,
|
|
975
|
+
};
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
return {
|
|
979
|
+
provider: 'openai',
|
|
980
|
+
apiKey,
|
|
981
|
+
baseUrl: OPENAI_API_BASE_URL,
|
|
982
|
+
model: model || OPENAI_CHAT_MODEL,
|
|
983
|
+
};
|
|
888
984
|
}
|
|
889
985
|
|
|
890
986
|
private async buildOpenAiTools(
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { Injectable, Logger } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Pedido de criação de uma reunião online para uma entidade de negócio qualquer.
|
|
5
|
+
*
|
|
6
|
+
* A tripla `sourceModule`/`sourceEntity`/`sourceEntityId` é o que amarra a reunião
|
|
7
|
+
* à origem sem que o provedor precise conhecer o domínio: o LMS envia
|
|
8
|
+
* `('lms', 'course_class_session', '42')` e recebe de volta, no evento de gravação,
|
|
9
|
+
* exatamente a mesma tripla.
|
|
10
|
+
*/
|
|
11
|
+
export interface CreateMeetingInput {
|
|
12
|
+
sourceModule: string;
|
|
13
|
+
sourceEntity: string;
|
|
14
|
+
sourceEntityId: string;
|
|
15
|
+
subject: string;
|
|
16
|
+
startAt: Date;
|
|
17
|
+
endAt: Date;
|
|
18
|
+
/** Liga a gravação automática, quando o provedor suportar. */
|
|
19
|
+
autoRecord?: boolean;
|
|
20
|
+
/** Usuário que pediu a criação (usado no modo delegado). */
|
|
21
|
+
requestedByUserId?: number;
|
|
22
|
+
/**
|
|
23
|
+
* Usuários que devem poder controlar a reunião (iniciar/parar gravação, admitir
|
|
24
|
+
* participantes). Sem isso, num organizador de serviço, o professor entra como
|
|
25
|
+
* participante comum.
|
|
26
|
+
*/
|
|
27
|
+
coOrganizerUserIds?: number[];
|
|
28
|
+
/** Convidados do evento de calendário. */
|
|
29
|
+
attendeeEmails?: string[];
|
|
30
|
+
/** Local do evento (aula presencial/híbrida com reunião gerenciada). */
|
|
31
|
+
location?: string | null;
|
|
32
|
+
/** Texto da origem que acompanha o link no corpo do evento. */
|
|
33
|
+
description?: string | null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface CreatedMeeting {
|
|
37
|
+
/** Link que o aluno abre. É o que vai para `meeting_url` da aula. */
|
|
38
|
+
joinUrl: string;
|
|
39
|
+
/** Id da reunião no provedor — necessário para buscar a gravação depois. */
|
|
40
|
+
providerMeetingId: string;
|
|
41
|
+
/** Id do evento de calendário, quando o provedor cria um. */
|
|
42
|
+
providerEventId?: string | null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface MeetingSourceRef {
|
|
46
|
+
sourceModule: string;
|
|
47
|
+
sourceEntity: string;
|
|
48
|
+
sourceEntityIds: string[];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export type CreateMeetingResult =
|
|
52
|
+
| ({ ok: true } & CreatedMeeting)
|
|
53
|
+
| { ok: false; sourceEntityId: string; error: string };
|
|
54
|
+
|
|
55
|
+
/** Pedido de troca de convidados de uma reunião já existente. */
|
|
56
|
+
export interface UpdateMeetingAttendeesInput {
|
|
57
|
+
sourceModule: string;
|
|
58
|
+
sourceEntity: string;
|
|
59
|
+
sourceEntityId: string;
|
|
60
|
+
attendeeEmails: string[];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Pedido de atualização de assunto/horário/local de uma reunião já existente.
|
|
65
|
+
*
|
|
66
|
+
* Separado de `createMeeting` pelo mesmo motivo de `updateAttendees`: recriar
|
|
67
|
+
* geraria link novo e derrubaria quem já tem o evento antigo na agenda.
|
|
68
|
+
*/
|
|
69
|
+
export interface UpdateMeetingDetailsInput {
|
|
70
|
+
sourceModule: string;
|
|
71
|
+
sourceEntity: string;
|
|
72
|
+
sourceEntityId: string;
|
|
73
|
+
subject: string;
|
|
74
|
+
startAt: Date;
|
|
75
|
+
endAt: Date;
|
|
76
|
+
location?: string | null;
|
|
77
|
+
description?: string | null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Estado de uma reunião, na forma em que o módulo de origem precisa ver.
|
|
82
|
+
*
|
|
83
|
+
* Existe para que o dono da origem consulte o provedor em vez de ler a tabela
|
|
84
|
+
* dele: o LMS não deve saber que existe uma `microsoft_meeting`.
|
|
85
|
+
*/
|
|
86
|
+
export interface MeetingSummary {
|
|
87
|
+
sourceEntityId: string;
|
|
88
|
+
joinUrl: string | null;
|
|
89
|
+
status: 'scheduled' | 'cancelled' | 'failed';
|
|
90
|
+
autoRecord: boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Assunto e janela gravados no provedor, para a origem comparar com o que é
|
|
93
|
+
* desejado antes de mandar `updateDetails` — evita um PATCH a cada sync
|
|
94
|
+
* quando nada mudou. `null` em reuniões criadas antes deste campo existir.
|
|
95
|
+
*/
|
|
96
|
+
subject: string | null;
|
|
97
|
+
startAt: Date | null;
|
|
98
|
+
endAt: Date | null;
|
|
99
|
+
location: string | null;
|
|
100
|
+
description: string | null;
|
|
101
|
+
/**
|
|
102
|
+
* Convidados atualmente no evento de calendário.
|
|
103
|
+
*
|
|
104
|
+
* Existe para o módulo de origem comparar antes de mandar atualizar: alterar
|
|
105
|
+
* a lista faz o provedor reenviar convite/atualização para todos, então um
|
|
106
|
+
* PATCH incondicional a cada sincronização viraria spam na caixa de quem
|
|
107
|
+
* acompanha a turma.
|
|
108
|
+
*/
|
|
109
|
+
attendeeEmails: string[];
|
|
110
|
+
/** Estado da importação da gravação, quando `autoRecord` está ligado. */
|
|
111
|
+
recordingStatus:
|
|
112
|
+
| 'not_requested'
|
|
113
|
+
| 'pending'
|
|
114
|
+
| 'imported'
|
|
115
|
+
| 'unavailable'
|
|
116
|
+
| 'failed';
|
|
117
|
+
recordingFileId: number | null;
|
|
118
|
+
lastError: string | null;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Provedor de reuniões online (Teams hoje; Meet/Zoom cabem no mesmo contrato).
|
|
123
|
+
*
|
|
124
|
+
* Existe para que os módulos de negócio não dependam do pacote de um provedor
|
|
125
|
+
* específico: eles pedem ao registro e, se ninguém tiver se registrado, a
|
|
126
|
+
* funcionalidade simplesmente não aparece.
|
|
127
|
+
*/
|
|
128
|
+
export interface IMeetingProvider {
|
|
129
|
+
/** Se a integração está configurada a ponto de aceitar chamadas. */
|
|
130
|
+
isAvailable(): Promise<boolean>;
|
|
131
|
+
createMeeting(input: CreateMeetingInput): Promise<CreatedMeeting>;
|
|
132
|
+
/** Criação em lote; nunca rejeita — devolve o erro por item. */
|
|
133
|
+
createMeetings(inputs: CreateMeetingInput[]): Promise<CreateMeetingResult[]>;
|
|
134
|
+
/** Cancela no provedor as reuniões das origens informadas. Tolerante a ausências. */
|
|
135
|
+
cancelBySource(ref: MeetingSourceRef): Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* Troca a lista de convidados do evento de uma reunião já criada.
|
|
138
|
+
*
|
|
139
|
+
* Separado de `createMeeting` porque o custo é diferente: recriar a reunião
|
|
140
|
+
* geraria um link novo e derrubaria quem já tinha o antigo na agenda, enquanto
|
|
141
|
+
* ajustar convidados preserva a reunião. Tolerante a reunião inexistente.
|
|
142
|
+
*/
|
|
143
|
+
updateAttendees(input: UpdateMeetingAttendeesInput): Promise<void>;
|
|
144
|
+
/**
|
|
145
|
+
* Atualiza assunto, horário e local do evento/reunião já criados, sem gerar
|
|
146
|
+
* link novo. Tolerante a reunião inexistente (mesmo padrão de updateAttendees).
|
|
147
|
+
*/
|
|
148
|
+
updateDetails(input: UpdateMeetingDetailsInput): Promise<void>;
|
|
149
|
+
/** Estado das reuniões das origens informadas, para a UI do módulo de origem. */
|
|
150
|
+
findBySource(ref: MeetingSourceRef): Promise<MeetingSummary[]>;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Registro dos provedores de reunião, no mesmo padrão do WebhookProtocolRegistry:
|
|
155
|
+
* o módulo dono do provedor se registra no boot.
|
|
156
|
+
*/
|
|
157
|
+
@Injectable()
|
|
158
|
+
export class MeetingProviderRegistry {
|
|
159
|
+
private readonly logger = new Logger(MeetingProviderRegistry.name);
|
|
160
|
+
private readonly providers = new Map<string, IMeetingProvider>();
|
|
161
|
+
|
|
162
|
+
register(provider: string, implementation: IMeetingProvider): void {
|
|
163
|
+
const key = normalizeProvider(provider);
|
|
164
|
+
if (!key) throw new Error('Meeting provider key is required.');
|
|
165
|
+
|
|
166
|
+
if (this.providers.has(key)) {
|
|
167
|
+
this.logger.warn(`Meeting provider "${key}" was overwritten.`);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
this.providers.set(key, implementation);
|
|
171
|
+
this.logger.log(`Registered meeting provider "${key}"`);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
get(provider: string | null | undefined): IMeetingProvider | null {
|
|
175
|
+
const key = normalizeProvider(provider);
|
|
176
|
+
return key ? (this.providers.get(key) ?? null) : null;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
has(provider: string | null | undefined): boolean {
|
|
180
|
+
return this.get(provider) !== null;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/** Provedores registrados (para a UI listar o que existe). */
|
|
184
|
+
list(): string[] {
|
|
185
|
+
return [...this.providers.keys()].sort();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function normalizeProvider(provider: string | null | undefined): string {
|
|
190
|
+
return String(provider ?? '')
|
|
191
|
+
.trim()
|
|
192
|
+
.toLowerCase();
|
|
193
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/** Chave do provedor Microsoft Teams no {@link MeetingProviderRegistry}. */
|
|
2
|
+
export const TEAMS_MEETING_PROVIDER = 'teams';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Evento de domínio publicado quando a gravação de uma reunião foi baixada e já
|
|
6
|
+
* existe como registro em `file`. Fica no core porque é o contrato entre quem
|
|
7
|
+
* publica (provedor da reunião) e quem consome (módulo dono da origem) — assim
|
|
8
|
+
* nenhum dos dois precisa importar o pacote do outro.
|
|
9
|
+
*/
|
|
10
|
+
export const MEETING_RECORDING_AVAILABLE_EVENT =
|
|
11
|
+
'microsoft.meeting.recording.available';
|
|
12
|
+
|
|
13
|
+
export interface MeetingRecordingAvailablePayload {
|
|
14
|
+
/** `file.id` do vídeo já enviado ao storage. */
|
|
15
|
+
fileId: number;
|
|
16
|
+
sourceModule: string;
|
|
17
|
+
sourceEntity: string;
|
|
18
|
+
sourceEntityId: string;
|
|
19
|
+
providerMeetingId?: string | null;
|
|
20
|
+
providerRecordingId?: string | null;
|
|
21
|
+
durationSeconds?: number | null;
|
|
22
|
+
joinUrl?: string | null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Evento publicado quando o relatório de presença de uma reunião foi importado.
|
|
27
|
+
*
|
|
28
|
+
* Mesma razão de existir do evento de gravação: o provedor sabe quem entrou na
|
|
29
|
+
* reunião, mas não sabe o que é um aluno; o módulo de origem sabe quem está
|
|
30
|
+
* matriculado, mas não conhece o Graph. O encontro é aqui.
|
|
31
|
+
*/
|
|
32
|
+
export const MEETING_ATTENDANCE_AVAILABLE_EVENT =
|
|
33
|
+
'microsoft.meeting.attendance.available';
|
|
34
|
+
|
|
35
|
+
/** Um participante do relatório, na forma em que a origem precisa ver. */
|
|
36
|
+
export interface MeetingAttendanceRecord {
|
|
37
|
+
/**
|
|
38
|
+
* Nulo quando o provedor não identificou quem entrou (link aberto por
|
|
39
|
+
* convidado externo ou anônimo). A origem trata esse caso como "participante
|
|
40
|
+
* não identificado" em vez de descartar.
|
|
41
|
+
*/
|
|
42
|
+
email: string | null;
|
|
43
|
+
displayName: string;
|
|
44
|
+
totalAttendanceSeconds: number;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface MeetingAttendanceAvailablePayload {
|
|
48
|
+
sourceModule: string;
|
|
49
|
+
sourceEntity: string;
|
|
50
|
+
sourceEntityId: string;
|
|
51
|
+
providerMeetingId?: string | null;
|
|
52
|
+
records: MeetingAttendanceRecord[];
|
|
53
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Global, Module } from '@nestjs/common';
|
|
2
|
+
import { MeetingProviderRegistry } from './meeting-provider.registry';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Porta genérica de reuniões online. Só carrega o registro — a implementação vem
|
|
6
|
+
* de quem se registrar no boot (hoje a library `microsoft`, com a chave `teams`).
|
|
7
|
+
*/
|
|
8
|
+
@Global()
|
|
9
|
+
@Module({
|
|
10
|
+
providers: [MeetingProviderRegistry],
|
|
11
|
+
exports: [MeetingProviderRegistry],
|
|
12
|
+
})
|
|
13
|
+
export class MeetingModule {}
|
|
@@ -1,15 +1,34 @@
|
|
|
1
|
+
import { localeStorage } from '@hed-hog/api-locale';
|
|
1
2
|
import { Injectable, NestMiddleware } from '@nestjs/common';
|
|
2
3
|
import { NextFunction, Request, Response } from 'express';
|
|
3
|
-
import { localeStorage } from '../utils/locale-context';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Rede de seguranca do contexto de locale.
|
|
7
|
+
*
|
|
8
|
+
* Quem resolve o idioma e o `LocaleMiddleware` do `api-locale`, que ja abre o
|
|
9
|
+
* `AsyncLocalStorage` para o resto da cadeia. Este middleware so entra em acao
|
|
10
|
+
* quando aquele nao rodou (app que nao registrou o `LocaleModule`, ou uma
|
|
11
|
+
* ordem de middleware que o coloque depois), para que
|
|
12
|
+
* `getLocaleFromContext()` nunca leia um store vazio.
|
|
13
|
+
*
|
|
14
|
+
* Nao reinterpreta o header: sem a tabela `locale` a mao, validar aqui de novo
|
|
15
|
+
* era justamente como as duas camadas divergiam.
|
|
16
|
+
*/
|
|
5
17
|
@Injectable()
|
|
6
18
|
export class LocaleInjectionMiddleware implements NestMiddleware {
|
|
7
19
|
use(req: Request, res: Response, next: NextFunction) {
|
|
8
|
-
|
|
9
|
-
|
|
20
|
+
if (localeStorage.getStore()) {
|
|
21
|
+
return next();
|
|
22
|
+
}
|
|
10
23
|
|
|
11
|
-
localeStorage.run(
|
|
12
|
-
|
|
13
|
-
|
|
24
|
+
localeStorage.run(
|
|
25
|
+
{
|
|
26
|
+
locale: req['locale'] || 'en',
|
|
27
|
+
detected: Boolean(req['localeDetected']),
|
|
28
|
+
},
|
|
29
|
+
() => {
|
|
30
|
+
next();
|
|
31
|
+
},
|
|
32
|
+
);
|
|
14
33
|
}
|
|
15
34
|
}
|