@hed-hog/core 0.0.390 → 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 +39 -0
- 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 +8 -5
- 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.controller.d.ts +12 -8
- 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.service.d.ts +30 -1
- package/dist/ai/ai.service.d.ts.map +1 -1
- package/dist/ai/ai.service.js +97 -3
- package/dist/ai/ai.service.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/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 +5 -5
- package/dist/auth/auth.controller.d.ts +66 -7
- package/dist/auth/auth.controller.d.ts.map +1 -1
- package/dist/auth/auth.controller.js +67 -23
- 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 +136 -4
- package/dist/auth/auth.service.d.ts.map +1 -1
- package/dist/auth/auth.service.js +246 -48
- 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/challenge/challenge.service.d.ts +18 -5
- package/dist/challenge/challenge.service.d.ts.map +1 -1
- package/dist/challenge/challenge.service.js +50 -3
- package/dist/challenge/challenge.service.js.map +1 -1
- package/dist/core.module.d.ts.map +1 -1
- package/dist/core.module.js +17 -0
- package/dist/core.module.js.map +1 -1
- package/dist/dashboard/dashboard/dashboard.controller.d.ts +6 -6
- package/dist/dashboard/dashboard/dashboard.service.d.ts +6 -6
- package/dist/dashboard/dashboard-component/dashboard-component.controller.d.ts +4 -4
- package/dist/dashboard/dashboard-component/dashboard-component.service.d.ts +4 -4
- package/dist/dashboard/dashboard-component-role/dashboard-component-role.controller.d.ts +1 -1
- package/dist/dashboard/dashboard-component-role/dashboard-component-role.service.d.ts +1 -1
- package/dist/dashboard/dashboard-core/dashboard-core.controller.d.ts +2 -2
- package/dist/dashboard/dashboard-core/dashboard-core.service.d.ts +2 -2
- 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/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 +128 -1
- package/dist/file/file.service.d.ts.map +1 -1
- package/dist/file/file.service.js +319 -8
- 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/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -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/integration-profile.secrets.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.secrets.js +3 -0
- package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
- package/dist/integration-profile/integration-profile.utils.d.ts +14 -0
- package/dist/integration-profile/integration-profile.utils.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.utils.js +26 -0
- package/dist/integration-profile/integration-profile.utils.js.map +1 -1
- package/dist/integration-profile/testers/email.testers.d.ts.map +1 -1
- package/dist/integration-profile/testers/email.testers.js +28 -0
- package/dist/integration-profile/testers/email.testers.js.map +1 -1
- package/dist/language/en.json +11 -0
- package/dist/language/pt.json +11 -0
- package/dist/mail/dto/send.dto.d.ts +38 -1
- package/dist/mail/dto/send.dto.d.ts.map +1 -1
- package/dist/mail/dto/send.dto.js +10 -0
- package/dist/mail/dto/send.dto.js.map +1 -1
- package/dist/mail/mail.controller.d.ts +1 -0
- package/dist/mail/mail.controller.d.ts.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 +48 -4
- package/dist/mail/mail.service.d.ts.map +1 -1
- package/dist/mail/mail.service.js +187 -35
- 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-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/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/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/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 +3 -6
- package/dist/pdf/pdf.service.d.ts.map +1 -1
- package/dist/pdf/pdf.service.js +8 -20
- package/dist/pdf/pdf.service.js.map +1 -1
- package/dist/profile/profile.controller.d.ts +11 -0
- package/dist/profile/profile.controller.d.ts.map +1 -1
- package/dist/profile/profile.service.d.ts +11 -0
- package/dist/profile/profile.service.d.ts.map +1 -1
- package/dist/profile/profile.service.js +20 -11
- package/dist/profile/profile.service.js.map +1 -1
- package/dist/redis/redis-pubsub.d.ts.map +1 -1
- package/dist/redis/redis-pubsub.js +44 -0
- package/dist/redis/redis-pubsub.js.map +1 -1
- 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/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/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 +33 -0
- package/dist/setting/setting.service.d.ts.map +1 -1
- package/dist/setting/setting.service.js +88 -0
- 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/user.controller.d.ts +8 -22
- package/dist/user/user.controller.d.ts.map +1 -1
- package/dist/user/user.service.d.ts +44 -24
- package/dist/user/user.service.d.ts.map +1 -1
- package/dist/user/user.service.js +89 -6
- 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/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/hedhog/data/integration_provider.yaml +9 -0
- package/hedhog/data/mail.yaml +198 -62
- package/hedhog/data/mail_layout.yaml +43 -33
- package/hedhog/data/menu.yaml +2 -0
- package/hedhog/data/role.yaml +16 -0
- package/hedhog/data/route.yaml +172 -3
- package/hedhog/data/setting_group.yaml +178 -2
- 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/profile-form.tsx.ejs +2 -1
- 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/layout.tsx.ejs +2 -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 +376 -1236
- package/hedhog/frontend/app/mail/log/page.tsx.ejs +210 -3
- package/hedhog/frontend/app/mail/template/page.tsx.ejs +190 -132
- package/hedhog/frontend/app/users/active-session.tsx.ejs +58 -11
- package/hedhog/frontend/app/users/page.tsx.ejs +69 -10
- 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 +19 -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-sheet.tsx.ejs +46 -24
- package/hedhog/frontend/messages/en.json +146 -48
- package/hedhog/frontend/messages/pt.json +146 -48
- package/hedhog/table/access_log.yaml +7 -0
- package/hedhog/table/file.yaml +8 -0
- package/hedhog/table/mail_delivery_event.yaml +76 -0
- package/hedhog/table/mail_sent.yaml +23 -0
- package/hedhog/table/user_activity.yaml +9 -0
- package/hedhog/table/user_device.yaml +52 -0
- package/hedhog/table/user_session.yaml +20 -1
- package/package.json +6 -5
- package/src/access-log/access-log.controller.ts +1 -0
- package/src/access-log/access-log.interceptor.ts +5 -1
- 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.controller.ts +9 -0
- package/src/ai/ai.module.ts +3 -2
- package/src/ai/ai.service.ts +150 -13
- package/src/ai/dto/richtext-edit-html.dto.ts +11 -0
- package/src/ai/richtext-ai.prompts.ts +57 -0
- package/src/ai/richtext-ai.service.ts +109 -0
- package/src/auth/auth.controller.ts +47 -8
- package/src/auth/auth.module.ts +2 -0
- package/src/auth/auth.service.spec.ts +383 -6
- package/src/auth/auth.service.ts +345 -56
- 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/challenge/challenge.service.spec.ts +73 -0
- package/src/challenge/challenge.service.ts +62 -3
- package/src/core.module.ts +19 -0
- package/src/file/file.controller.ts +54 -4
- package/src/file/file.service.spec.ts +275 -105
- package/src/file/file.service.ts +409 -14
- 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/index.ts +21 -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/integration-profile.secrets.ts +3 -0
- package/src/integration-profile/integration-profile.utils.ts +38 -0
- package/src/integration-profile/testers/email.testers.ts +34 -1
- package/src/language/en.json +11 -0
- package/src/language/pt.json +11 -0
- package/src/mail/dto/send.dto.ts +46 -2
- package/src/mail/mail-template.spec.ts +79 -2
- package/src/mail/mail.module.ts +2 -0
- package/src/mail/mail.service.spec.ts +307 -6
- package/src/mail/mail.service.ts +227 -30
- 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-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/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/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 +6 -24
- package/src/profile/profile.service.ts +26 -8
- package/src/redis/redis-pubsub.ts +11 -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/setting.module.ts +3 -2
- package/src/setting/setting.service.spec.ts +79 -1
- package/src/setting/setting.service.ts +109 -1
- package/src/token/token.service.spec.ts +62 -0
- package/src/token/token.service.ts +57 -3
- package/src/user/user.service.spec.ts +33 -2
- package/src/user/user.service.ts +108 -6
- 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/webhook-integration/webhook-integration.service.ts +57 -3
- package/src/webhook-integration/webhook-protocol.registry.ts +6 -0
|
@@ -75,6 +75,7 @@
|
|
|
75
75
|
"tab2fa": "2FA",
|
|
76
76
|
"tabAccounts": "Contas",
|
|
77
77
|
"tabSessions": "Sessões",
|
|
78
|
+
"tabDevices": "Dispositivos",
|
|
78
79
|
"tabMcpTokens": "Tokens MCP",
|
|
79
80
|
"tabTokens": "Tokens",
|
|
80
81
|
"breadcrumbLabel": "Conta",
|
|
@@ -255,6 +256,7 @@
|
|
|
255
256
|
"tabIdentifiers": "Identificadores",
|
|
256
257
|
"tabMfa": "MFA",
|
|
257
258
|
"tabSessions": "Sessões",
|
|
259
|
+
"tabDevices": "Dispositivos",
|
|
258
260
|
"tabEmails": "E-mails",
|
|
259
261
|
"tabLogs": "Logs",
|
|
260
262
|
"cardLastLoginDescription": "Último login",
|
|
@@ -384,7 +386,8 @@
|
|
|
384
386
|
"passwordResetPending": "Reset pendente",
|
|
385
387
|
"passwordResetNone": "Em dia",
|
|
386
388
|
"neverLoggedIn": "Nunca acessou",
|
|
387
|
-
"filterOptionPasswordReset": "Reset de senha pendente"
|
|
389
|
+
"filterOptionPasswordReset": "Reset de senha pendente",
|
|
390
|
+
"activityByActor": "por {name}"
|
|
388
391
|
},
|
|
389
392
|
"RolePage": {
|
|
390
393
|
"title": "Gerenciamento de Cargos",
|
|
@@ -584,12 +587,14 @@
|
|
|
584
587
|
"variablesHelp": "Use '{{variavel}}' no corpo do e-mail",
|
|
585
588
|
"bodyLabel": "Corpo HTML",
|
|
586
589
|
"localeLabel": "Idioma",
|
|
590
|
+
"sectionIdentification": "Identificação",
|
|
587
591
|
"preview": "Preview",
|
|
588
592
|
"availableVariables": "Variáveis disponíveis:",
|
|
589
593
|
"testValuePlaceholder": "Valor de teste",
|
|
590
594
|
"downloadYAML": "Baixar YAML",
|
|
591
595
|
"generateMigration": "Gerar Migration",
|
|
592
596
|
"sendTestEmail": "Enviar e-mail de teste",
|
|
597
|
+
"moreActions": "Mais ações",
|
|
593
598
|
"cancel": "Cancelar",
|
|
594
599
|
"saveChanges": "Salvar Alterações",
|
|
595
600
|
"createTemplate": "Criar Template",
|
|
@@ -719,7 +724,11 @@
|
|
|
719
724
|
"logout": "Realizou logout",
|
|
720
725
|
"resetPassword": "Redefiniu a senha",
|
|
721
726
|
"revokeAllSessions": "Revogou todas as sessões",
|
|
722
|
-
"revokeSession": "Revogou uma sessão"
|
|
727
|
+
"revokeSession": "Revogou uma sessão",
|
|
728
|
+
"impersonationStarted": "Acesso simulado por um operador",
|
|
729
|
+
"impersonationEnded": "Simulação de acesso encerrada",
|
|
730
|
+
"impersonationPerformed": "Simulou o acesso de outro usuário",
|
|
731
|
+
"impersonationPerformedEnded": "Encerrou a simulação de acesso"
|
|
723
732
|
},
|
|
724
733
|
"LoginPage": {
|
|
725
734
|
"title": "Autenticação",
|
|
@@ -770,6 +779,16 @@
|
|
|
770
779
|
"submitButton": "Redefinir senha",
|
|
771
780
|
"submitButtonLoading": "Redefinindo..."
|
|
772
781
|
},
|
|
782
|
+
"ConfirmEmailPage": {
|
|
783
|
+
"title": "Confirmação de e-mail",
|
|
784
|
+
"checking": "Só um instante enquanto validamos o link...",
|
|
785
|
+
"invalidTitle": "Link inválido",
|
|
786
|
+
"invalidDescription": "Este link de confirmação é inválido ou já expirou. Sua conta continua ativa: basta entrar normalmente.",
|
|
787
|
+
"successTitle": "E-mail confirmado",
|
|
788
|
+
"successDescription": "Pronto! Seu endereço de e-mail foi confirmado.",
|
|
789
|
+
"alreadyConfirmedDescription": "Seu e-mail já estava confirmado. Não é preciso fazer mais nada.",
|
|
790
|
+
"goToLogin": "Ir para o login"
|
|
791
|
+
},
|
|
773
792
|
"ForgotPage": {
|
|
774
793
|
"title": "Esqueci minha Senha",
|
|
775
794
|
"emailLabel": "E-mail",
|
|
@@ -1027,7 +1046,8 @@
|
|
|
1027
1046
|
"revokeSuccess": "Sessão revogada com sucesso!",
|
|
1028
1047
|
"revokeFailure": "Falha ao revogar a sessão",
|
|
1029
1048
|
"revokeAllSuccess": "Sessões revogadas com sucesso!",
|
|
1030
|
-
"revokeAllFailure": "Falha ao revogar sessões"
|
|
1049
|
+
"revokeAllFailure": "Falha ao revogar sessões",
|
|
1050
|
+
"simulatedBy": "Simulado por {name}"
|
|
1031
1051
|
},
|
|
1032
1052
|
"UserMails": {
|
|
1033
1053
|
"title": "E-mails enviados",
|
|
@@ -1069,7 +1089,10 @@
|
|
|
1069
1089
|
"role_removed": "Papel removido",
|
|
1070
1090
|
"avatar_changed": "Avatar alterado",
|
|
1071
1091
|
"emptyTitle": "Nenhuma alteração registrada",
|
|
1072
|
-
"emptyDescription": "As alterações administrativas feitas neste usuário aparecerão aqui."
|
|
1092
|
+
"emptyDescription": "As alterações administrativas feitas neste usuário aparecerão aqui.",
|
|
1093
|
+
"impersonation_requested": "Simulação de acesso solicitada",
|
|
1094
|
+
"impersonation_started": "Simulação de acesso iniciada",
|
|
1095
|
+
"impersonation_ended": "Simulação de acesso encerrada"
|
|
1073
1096
|
},
|
|
1074
1097
|
"UserActiveSessions": {
|
|
1075
1098
|
"title": "Sessões Ativas",
|
|
@@ -1086,7 +1109,9 @@
|
|
|
1086
1109
|
"revokeSuccess": "Sessão revogada com sucesso!",
|
|
1087
1110
|
"revokeFailure": "Falha ao revogar sessão",
|
|
1088
1111
|
"revokeAllSuccess": "Sessões revogadas com sucesso!",
|
|
1089
|
-
"revokeAllFailure": "Falha ao revogar sessões"
|
|
1112
|
+
"revokeAllFailure": "Falha ao revogar sessões",
|
|
1113
|
+
"simulatedSession": "Acesso simulado",
|
|
1114
|
+
"simulatedBy": "Simulado por {name}"
|
|
1090
1115
|
},
|
|
1091
1116
|
"UserIdentifiers": {
|
|
1092
1117
|
"title": "Identificadores do Usuário",
|
|
@@ -1290,6 +1315,7 @@
|
|
|
1290
1315
|
"to": "Para",
|
|
1291
1316
|
"cc": "CC",
|
|
1292
1317
|
"bcc": "CCO",
|
|
1318
|
+
"providerMessageId": "ID da mensagem no provedor",
|
|
1293
1319
|
"body": "Corpo",
|
|
1294
1320
|
"createdAt": "Criado em",
|
|
1295
1321
|
"updatedAt": "Atualizado em",
|
|
@@ -1309,6 +1335,20 @@
|
|
|
1309
1335
|
"statusRead": "Lido",
|
|
1310
1336
|
"statusError": "Erro",
|
|
1311
1337
|
"statusUnavailable": "Sem status",
|
|
1338
|
+
"filterByDelivery": "Entrega",
|
|
1339
|
+
"deliveryAll": "Qualquer desfecho",
|
|
1340
|
+
"deliveryPending": "Sem resposta ainda",
|
|
1341
|
+
"deliveryPendingHint": "O provedor aceitou a mensagem e ainda não informou o desfecho.",
|
|
1342
|
+
"deliveryDelivered": "Entregue",
|
|
1343
|
+
"deliveryBounced": "Devolvido",
|
|
1344
|
+
"deliveryComplained": "Marcado como spam",
|
|
1345
|
+
"deliveryRejected": "Recusado",
|
|
1346
|
+
"undeliveredCurrentPage": "Não entregues (página)",
|
|
1347
|
+
"undeliveredHint": "Aceitos pelo provedor e devolvidos depois",
|
|
1348
|
+
"providerEvents": "Eventos de entrega do provedor",
|
|
1349
|
+
"noProviderEvents": "O provedor ainda não informou nada sobre esta mensagem.",
|
|
1350
|
+
"allRecipients": "Todos os destinatários",
|
|
1351
|
+
"reportingMta": "Reportado por",
|
|
1312
1352
|
"statusReceivedShort": "Recebidos: {count}",
|
|
1313
1353
|
"statusReadShort": "Lidos: {count}",
|
|
1314
1354
|
"statusErrorShort": "Erros: {count}",
|
|
@@ -1360,7 +1400,7 @@
|
|
|
1360
1400
|
"fileUploaded": "Arquivo enviado com sucesso.",
|
|
1361
1401
|
"fileUploadFailed": "Falha ao enviar arquivo.",
|
|
1362
1402
|
"fileIdNotReturned": "ID do arquivo não retornado.",
|
|
1363
|
-
"
|
|
1403
|
+
"apiBaseUrlNotConfigured": "A URL base da API não está configurada.",
|
|
1364
1404
|
"uploadedFileAlt": "Arquivo enviado",
|
|
1365
1405
|
"fileUrlPlaceholder": "URL do arquivo",
|
|
1366
1406
|
"durationUnitSeconds": "Segundos",
|
|
@@ -1384,44 +1424,21 @@
|
|
|
1384
1424
|
"oauthProfileEmptyState": "Nenhum perfil OAuth encontrado.",
|
|
1385
1425
|
"selectPaymentProfile": "Selecione um perfil de pagamento",
|
|
1386
1426
|
"paymentProfileEmptyState": "Nenhum perfil de pagamento encontrado.",
|
|
1387
|
-
"
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
"
|
|
1394
|
-
"
|
|
1395
|
-
"
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
"
|
|
1399
|
-
"
|
|
1400
|
-
"
|
|
1401
|
-
"
|
|
1402
|
-
"smtpUsernameLabel": "Usuário SMTP *",
|
|
1403
|
-
"smtpUsernamePlaceholder": "usuario@exemplo.com",
|
|
1404
|
-
"smtpPasswordLabel": "Senha SMTP *",
|
|
1405
|
-
"replyToEmailLabel": "E-mail do reply-to",
|
|
1406
|
-
"replyToEmailPlaceholder": "suporte@empresa.com",
|
|
1407
|
-
"clientIdLabel": "Client ID *",
|
|
1408
|
-
"clientSecretLabel": "Client Secret *",
|
|
1409
|
-
"refreshTokenLabel": "Refresh Token *",
|
|
1410
|
-
"accessKeyIdLabel": "Access Key ID *",
|
|
1411
|
-
"secretAccessKeyLabel": "Secret Access Key *",
|
|
1412
|
-
"regionLabel": "Região *",
|
|
1413
|
-
"regionPlaceholder": "us-east-1"
|
|
1414
|
-
},
|
|
1415
|
-
"whatsappProfile": {
|
|
1416
|
-
"nameLabel": "Nome *",
|
|
1417
|
-
"namePlaceholder": "Meu Perfil de WhatsApp",
|
|
1418
|
-
"providerLabel": "Provedor *",
|
|
1419
|
-
"hostLabel": "Host da API *",
|
|
1420
|
-
"hostPlaceholder": "https://api.exemplo.com",
|
|
1421
|
-
"instanceNameLabel": "Nome da instância *",
|
|
1422
|
-
"instanceNamePlaceholder": "MinhaInstancia",
|
|
1423
|
-
"tokenLabel": "Token *",
|
|
1424
|
-
"tokenPlaceholder": "Token de autenticação"
|
|
1427
|
+
"whatsappProfileEmptyState": "Nenhum perfil de WhatsApp encontrado.",
|
|
1428
|
+
"selectIntegrationProfile": "Selecione um perfil de integração",
|
|
1429
|
+
"integrationProfileEmptyState": "Nenhum perfil de integração encontrado.",
|
|
1430
|
+
"editProfileAria": "Editar {profile}",
|
|
1431
|
+
"createProfileAria": "Criar {profile}",
|
|
1432
|
+
"profileTypeNames": {
|
|
1433
|
+
"ai": "perfil de IA",
|
|
1434
|
+
"email": "perfil de e-mail",
|
|
1435
|
+
"whatsapp": "perfil de WhatsApp",
|
|
1436
|
+
"storage": "perfil de armazenamento",
|
|
1437
|
+
"oauth": "perfil OAuth",
|
|
1438
|
+
"payment": "perfil de pagamento",
|
|
1439
|
+
"infrastructure": "perfil de infraestrutura",
|
|
1440
|
+
"kubernetes": "perfil Kubernetes",
|
|
1441
|
+
"generic": "perfil de integração"
|
|
1425
1442
|
},
|
|
1426
1443
|
"selectInfraProfile": "Selecione o perfil de infraestrutura",
|
|
1427
1444
|
"infraProfileEmptyState": "Nenhum perfil de infraestrutura encontrado. Crie um perfil DigitalOcean ou Kubernetes primeiro.",
|
|
@@ -1816,7 +1833,13 @@
|
|
|
1816
1833
|
"decreaseZoom": "Diminuir zoom",
|
|
1817
1834
|
"resetZoom": "Resetar zoom",
|
|
1818
1835
|
"increaseZoom": "Aumentar zoom",
|
|
1819
|
-
"saveAndClose": "Salvar e Fechar"
|
|
1836
|
+
"saveAndClose": "Salvar e Fechar",
|
|
1837
|
+
"aiEdit": "Editar com IA",
|
|
1838
|
+
"aiEditPromptLabel": "O que você quer mudar?",
|
|
1839
|
+
"aiEditPromptPlaceholder": "Ex.: deixe o texto mais formal e adicione uma lista com os próximos passos",
|
|
1840
|
+
"aiEditSubmit": "Gerar",
|
|
1841
|
+
"aiEditSuccess": "Conteúdo atualizado pela IA",
|
|
1842
|
+
"aiEditError": "Não foi possível atualizar o conteúdo com IA"
|
|
1820
1843
|
},
|
|
1821
1844
|
"DashboardManagement": {
|
|
1822
1845
|
"title": "Gerenciamento de Dashboards",
|
|
@@ -2458,7 +2481,14 @@
|
|
|
2458
2481
|
"detailsDescription": "Detalhes completos desta entrada de log de acesso",
|
|
2459
2482
|
"os": "Sistema Operacional",
|
|
2460
2483
|
"location": "Localização",
|
|
2461
|
-
"rawUserAgent": "User Agent"
|
|
2484
|
+
"rawUserAgent": "User Agent",
|
|
2485
|
+
"simulated": "Simulado",
|
|
2486
|
+
"simulatedBy": "Simulado por {name}",
|
|
2487
|
+
"simulatedAccess": "Acesso simulado",
|
|
2488
|
+
"filterBySimulated": "Simulação",
|
|
2489
|
+
"simulatedAll": "Todos os acessos",
|
|
2490
|
+
"simulatedOnly": "Somente simulados",
|
|
2491
|
+
"simulatedExclude": "Excluir simulados"
|
|
2462
2492
|
},
|
|
2463
2493
|
"IntegrationProfilePage": {
|
|
2464
2494
|
"breadcrumbHome": "Início",
|
|
@@ -2564,6 +2594,7 @@
|
|
|
2564
2594
|
"fieldFromName": "Nome de Envio",
|
|
2565
2595
|
"fieldReplyTo": "E-mail de Resposta",
|
|
2566
2596
|
"fieldReplyToName": "Nome de Resposta",
|
|
2597
|
+
"fieldSnsTopicArn": "ARN do Tópico SNS (rastreio de entrega)",
|
|
2567
2598
|
"fieldClientId": "Client ID",
|
|
2568
2599
|
"fieldClientSecret": "Client Secret",
|
|
2569
2600
|
"fieldRefreshToken": "Refresh Token",
|
|
@@ -2571,6 +2602,7 @@
|
|
|
2571
2602
|
"fieldSecretAccessKey": "Secret Access Key",
|
|
2572
2603
|
"fieldRegion": "Região",
|
|
2573
2604
|
"fieldDomain": "Domínio",
|
|
2605
|
+
"fieldImapSecure": "TLS direto (porta 993)",
|
|
2574
2606
|
"fieldToken": "Token",
|
|
2575
2607
|
"fieldInstanceName": "Nome da Instância",
|
|
2576
2608
|
"fieldPhoneNumberId": "ID do Número de Telefone",
|
|
@@ -2584,6 +2616,13 @@
|
|
|
2584
2616
|
"fieldEnvironmentTest": "Teste",
|
|
2585
2617
|
"fieldEnvironmentProduction": "Produção",
|
|
2586
2618
|
"copiedToClipboard": "Copiado para a área de transferência",
|
|
2619
|
+
"sesWebhookSectionTitle": "Rastreio de entrega (SNS)",
|
|
2620
|
+
"sesWebhookDescription": "Sem esta assinatura o Hub só sabe que o provedor aceitou a mensagem, não se ela foi entregue.",
|
|
2621
|
+
"sesWebhookEndpointLabel": "URL do endpoint",
|
|
2622
|
+
"sesWebhookStep1": "Crie um tópico SNS na mesma região deste perfil do SES.",
|
|
2623
|
+
"sesWebhookStep2": "Adicione uma assinatura HTTPS no tópico com a URL acima. Ela é confirmada automaticamente.",
|
|
2624
|
+
"sesWebhookStep3": "No SES, abra a identidade de envio e aponte as notificações de Bounce, Complaint e Delivery para esse tópico.",
|
|
2625
|
+
"sesWebhookStep4": "Cole o ARN do tópico no campo acima para que eventos de outros tópicos sejam recusados.",
|
|
2587
2626
|
"whatsappWebhookSectionTitle": "Webhook da Meta",
|
|
2588
2627
|
"whatsappWebhookDescription": "Registre este webhook no seu app da Meta para receber mensagens do WhatsApp.",
|
|
2589
2628
|
"whatsappWebhookCallbackUrlLabel": "URL de Callback",
|
|
@@ -2729,7 +2768,9 @@
|
|
|
2729
2768
|
"fieldTimeoutMs": "Timeout (ms)",
|
|
2730
2769
|
"fieldMaxRetries": "Máximo de tentativas",
|
|
2731
2770
|
"fileStored": "Arquivo armazenado e cifrado. Clique para substituir.",
|
|
2732
|
-
"fileSelected": "Novo arquivo selecionado. Será cifrado ao salvar."
|
|
2771
|
+
"fileSelected": "Novo arquivo selecionado. Será cifrado ao salvar.",
|
|
2772
|
+
"fieldRtdnServiceAccount": "Conta de Serviço das Notificações (RTDN)",
|
|
2773
|
+
"fieldRtdnAudience": "Audience das Notificações (RTDN)"
|
|
2733
2774
|
},
|
|
2734
2775
|
"SystemPagesPage": {
|
|
2735
2776
|
"title": "Páginas",
|
|
@@ -3063,7 +3104,18 @@
|
|
|
3063
3104
|
"previewTitle": "Pré-visualização do HTML",
|
|
3064
3105
|
"noContent": "Sem conteúdo para visualizar",
|
|
3065
3106
|
"complexHtmlWarningTitle": "HTML complexo detectado",
|
|
3066
|
-
"complexHtmlWarningDesc": "Este conteúdo tem tags style, head ou script que o editor visual remove. Use a aba HTML para editá-lo."
|
|
3107
|
+
"complexHtmlWarningDesc": "Este conteúdo tem tags style, head ou script que o editor visual remove. Use a aba HTML para editá-lo.",
|
|
3108
|
+
"aiEditTitle": "Ajustar HTML com IA",
|
|
3109
|
+
"aiInstructionPlaceholder": "Descreva o ajuste que a IA deve fazer neste HTML.",
|
|
3110
|
+
"aiApplyButton": "Ajustar com IA",
|
|
3111
|
+
"aiApplying": "Ajustando...",
|
|
3112
|
+
"aiEditAppliedDefault": "HTML ajustado pela IA. Revise antes de salvar.",
|
|
3113
|
+
"aiEditErrorDefault": "Não foi possível ajustar o HTML com IA.",
|
|
3114
|
+
"enterFullscreen": "Tela cheia",
|
|
3115
|
+
"exitFullscreen": "Sair da tela cheia",
|
|
3116
|
+
"enterSplitView": "Ver painéis lado a lado",
|
|
3117
|
+
"exitSplitView": "Ver em abas",
|
|
3118
|
+
"splitViewLabel": "Preview, HTML e IA lado a lado"
|
|
3067
3119
|
},
|
|
3068
3120
|
"MailLayoutPage": {
|
|
3069
3121
|
"breadcrumbHome": "Início",
|
|
@@ -3087,5 +3139,51 @@
|
|
|
3087
3139
|
"saveSuccess": "Layout base salvo",
|
|
3088
3140
|
"saveError": "Falha ao salvar o layout base",
|
|
3089
3141
|
"missingContentTokenError": "O wrapper precisa conter o token {{{content}}}, senão todos os e-mails seriam enviados vazios."
|
|
3142
|
+
},
|
|
3143
|
+
"KnownDevices": {
|
|
3144
|
+
"title": "Dispositivos Conhecidos",
|
|
3145
|
+
"description": "Aparelhos que sua conta já reconhece. Um acesso vindo de um dispositivo fora desta lista dispara um alerta por e-mail.",
|
|
3146
|
+
"adminDescription": "Aparelhos que a conta deste usuário já reconhece.",
|
|
3147
|
+
"device": "Dispositivo",
|
|
3148
|
+
"browser": "Navegador",
|
|
3149
|
+
"lastIp": "Último IP",
|
|
3150
|
+
"lastSeen": "Último acesso",
|
|
3151
|
+
"firstSeen": "Reconhecido em",
|
|
3152
|
+
"action": "Ação",
|
|
3153
|
+
"unknown": "Desconhecido",
|
|
3154
|
+
"forget": "Esquecer",
|
|
3155
|
+
"noDevices": "Nenhum dispositivo reconhecido ainda",
|
|
3156
|
+
"forgetTitle": "Esquecer dispositivo",
|
|
3157
|
+
"forgetDescription": "O próximo acesso vindo deste dispositivo será tratado como desconhecido e disparará um alerta por e-mail. As sessões abertas nele continuam válidas — para encerrá-las, revogue as sessões.",
|
|
3158
|
+
"cancel": "Cancelar",
|
|
3159
|
+
"forgetSuccess": "Dispositivo esquecido",
|
|
3160
|
+
"forgetFailure": "Não foi possível esquecer o dispositivo",
|
|
3161
|
+
"simulatedNotRecorded": "Acessos simulados não são registrados como dispositivo — veja a aba de sessões."
|
|
3162
|
+
},
|
|
3163
|
+
"AccessSimulation": {
|
|
3164
|
+
"action": "Simular acesso",
|
|
3165
|
+
"dialogTitle": "Simular acesso",
|
|
3166
|
+
"dialogDescription": "Abre uma sessão curta e auditada vendo o sistema como {name}. Tudo o que você fizer fica registrado no nome dessa pessoa e no seu.",
|
|
3167
|
+
"targetApp": "Aplicação de destino",
|
|
3168
|
+
"targetAppPlaceholder": "Escolha onde abrir a sessão",
|
|
3169
|
+
"noAppsConfigured": "Nenhuma aplicação tem URL configurada na setting app-urls.",
|
|
3170
|
+
"reason": "Motivo (opcional)",
|
|
3171
|
+
"reasonPlaceholder": "Chamado, solicitação ou contexto desta simulação",
|
|
3172
|
+
"auditWarning": "A simulação fica registrada nas sessões, no log de acesso e na linha do tempo de atividade dos dois usuários. Dura 30 minutos e não pode ser renovada.",
|
|
3173
|
+
"confirm": "Iniciar simulação",
|
|
3174
|
+
"cancel": "Cancelar",
|
|
3175
|
+
"opening": "Abrindo…",
|
|
3176
|
+
"startFailure": "Não foi possível iniciar a simulação de acesso.",
|
|
3177
|
+
"bannerViewingAs": "ACESSO SIMULADO — você está vendo o sistema como",
|
|
3178
|
+
"bannerOperator": "Operador",
|
|
3179
|
+
"bannerExpiresIn": "expira em",
|
|
3180
|
+
"bannerStop": "Encerrar simulação",
|
|
3181
|
+
"bannerStopping": "Encerrando…",
|
|
3182
|
+
"redeemLoading": "Iniciando a simulação de acesso…",
|
|
3183
|
+
"redeemInvalidTitle": "Este link de simulação não vale mais",
|
|
3184
|
+
"redeemInvalidDescription": "O link funciona uma única vez e expira em um minuto. Peça ao operador para iniciar uma nova simulação.",
|
|
3185
|
+
"redeemMissingCode": "Nenhum código de simulação foi encontrado no link.",
|
|
3186
|
+
"noAdminAccessTitle": "Este usuário não tem acesso ao painel",
|
|
3187
|
+
"noAdminAccessDescription": "{name} não tem papel administrativo, então não há o que mostrar aqui. Simule esse acesso na aplicação que a pessoa realmente usa."
|
|
3090
3188
|
}
|
|
3091
3189
|
}
|
|
@@ -25,7 +25,14 @@ columns:
|
|
|
25
25
|
- name: mcp_prompt
|
|
26
26
|
type: text
|
|
27
27
|
isNullable: true
|
|
28
|
+
# Operador por tras de um acesso simulado. INT puro, SEM FK: uma segunda FK
|
|
29
|
+
# para `user` renomearia a relacao `user.access_log` no prisma db pull e
|
|
30
|
+
# quebraria AccessLogService.list. O nome sai de uma segunda consulta.
|
|
31
|
+
- name: impersonator_user_id
|
|
32
|
+
type: int
|
|
33
|
+
isNullable: true
|
|
28
34
|
- type: created_at
|
|
29
35
|
indexes:
|
|
30
36
|
- fields: [user_id]
|
|
31
37
|
- fields: [created_at]
|
|
38
|
+
- fields: [impersonator_user_id]
|
package/hedhog/table/file.yaml
CHANGED
|
@@ -19,5 +19,13 @@ columns:
|
|
|
19
19
|
type: int
|
|
20
20
|
unsigned: true
|
|
21
21
|
default: 0
|
|
22
|
+
# Tira o arquivo das duas rotas que servem por id sem autenticacao
|
|
23
|
+
# (GET /file/open/:id e GET /file/image/:id). O caminho autenticado
|
|
24
|
+
# PUT /file/open/:id -> token -> GET /file/open/:token continua valendo, e e
|
|
25
|
+
# por ele que o admin exibe anexo sensivel. Existe porque id de arquivo e
|
|
26
|
+
# sequencial: sem isso, um formulario de vaga com curriculos e enumeravel.
|
|
27
|
+
- name: is_private
|
|
28
|
+
type: boolean
|
|
29
|
+
default: false
|
|
22
30
|
- type: created_at
|
|
23
31
|
- type: updated_at
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Evento de entrega devolvido pelo provedor de e-mail (SES via SNS, por ora).
|
|
2
|
+
#
|
|
3
|
+
# Motivo: ate aqui "enviado" significava apenas "o provedor aceitou". O chamado
|
|
4
|
+
# 202608-000020 teve tres mensagens aceitas pelo SES, cada uma com MessageId de
|
|
5
|
+
# sucesso, e nenhuma chegou a caixa alguma - sem esta tabela nao havia como
|
|
6
|
+
# saber disso, nem por que. O `diagnostic_code` e a resposta literal do servidor
|
|
7
|
+
# destinatario, que e o que responde "por que nao chegou".
|
|
8
|
+
columns:
|
|
9
|
+
- type: pk
|
|
10
|
+
# Nullable de proposito: um evento pode chegar de um envio anterior a coluna
|
|
11
|
+
# provider_message_id existir, ou de um e-mail que saiu por fora do Hub.
|
|
12
|
+
# Descartar seria jogar fora justamente a evidencia de que algo escapou.
|
|
13
|
+
- type: fk
|
|
14
|
+
name: mail_sent_id
|
|
15
|
+
isNullable: true
|
|
16
|
+
references:
|
|
17
|
+
table: mail_sent
|
|
18
|
+
column: id
|
|
19
|
+
onDelete: set null
|
|
20
|
+
onUpdate: cascade
|
|
21
|
+
# Chave de juncao com mail_sent.provider_message_id.
|
|
22
|
+
- name: provider_message_id
|
|
23
|
+
type: varchar
|
|
24
|
+
length: 255
|
|
25
|
+
# O provedor reporta por destinatario: uma mensagem para tres pessoas pode
|
|
26
|
+
# ser entregue a duas e voltar da terceira.
|
|
27
|
+
- name: recipient_email
|
|
28
|
+
type: varchar
|
|
29
|
+
length: 255
|
|
30
|
+
isNullable: true
|
|
31
|
+
# varchar e nao enum: o SES ja tem sete tipos e acrescenta outros sem aviso,
|
|
32
|
+
# e um valor novo nao pode derrubar a ingestao do webhook.
|
|
33
|
+
- name: event_type
|
|
34
|
+
type: varchar
|
|
35
|
+
length: 32
|
|
36
|
+
- name: bounce_type
|
|
37
|
+
type: varchar
|
|
38
|
+
length: 64
|
|
39
|
+
isNullable: true
|
|
40
|
+
- name: bounce_subtype
|
|
41
|
+
type: varchar
|
|
42
|
+
length: 64
|
|
43
|
+
isNullable: true
|
|
44
|
+
- name: diagnostic_code
|
|
45
|
+
type: text
|
|
46
|
+
isNullable: true
|
|
47
|
+
- name: reporting_mta
|
|
48
|
+
type: varchar
|
|
49
|
+
length: 255
|
|
50
|
+
isNullable: true
|
|
51
|
+
# Notificacao crua, para o que o schema nao previu.
|
|
52
|
+
- name: payload
|
|
53
|
+
type: json
|
|
54
|
+
isNullable: true
|
|
55
|
+
# Horario do provedor, nao o nosso: o SNS reentrega e o nosso relogio diria
|
|
56
|
+
# quando processamos, nao quando aconteceu.
|
|
57
|
+
- name: occurred_at
|
|
58
|
+
type: timestamp
|
|
59
|
+
- type: created_at
|
|
60
|
+
- type: updated_at
|
|
61
|
+
indices:
|
|
62
|
+
- columns:
|
|
63
|
+
- provider_message_id
|
|
64
|
+
- columns:
|
|
65
|
+
- mail_sent_id
|
|
66
|
+
- columns:
|
|
67
|
+
- event_type
|
|
68
|
+
- occurred_at
|
|
69
|
+
# O SNS reentrega quando a resposta demora; sem esta chave o mesmo bounce
|
|
70
|
+
# viraria uma linha nova a cada tentativa.
|
|
71
|
+
- columns:
|
|
72
|
+
- provider_message_id
|
|
73
|
+
- recipient_email
|
|
74
|
+
- event_type
|
|
75
|
+
- occurred_at
|
|
76
|
+
isUnique: true
|
|
@@ -17,5 +17,28 @@ columns:
|
|
|
17
17
|
isNullable: true
|
|
18
18
|
- name: body
|
|
19
19
|
type: text
|
|
20
|
+
# Id devolvido pelo provedor (MessageId do SES, messageId do nodemailer).
|
|
21
|
+
# Sem ele nao ha como cruzar um envio nosso com o evento de entrega/bounce
|
|
22
|
+
# do provedor - foi essa lacuna que deixou "enviado sem erro, nunca chegou"
|
|
23
|
+
# sem resposta possivel.
|
|
24
|
+
- name: provider_message_id
|
|
25
|
+
length: 255
|
|
26
|
+
isNullable: true
|
|
27
|
+
# Desfecho consolidado dos eventos de mail_delivery_event, para a listagem do
|
|
28
|
+
# log nao precisar agregar a tabela de eventos a cada linha.
|
|
29
|
+
# delivered | bounced | complained | rejected
|
|
30
|
+
- name: delivery_status
|
|
31
|
+
type: varchar
|
|
32
|
+
length: 32
|
|
33
|
+
isNullable: true
|
|
34
|
+
- name: delivery_updated_at
|
|
35
|
+
type: timestamp
|
|
36
|
+
isNullable: true
|
|
20
37
|
- type: created_at
|
|
21
38
|
- type: updated_at
|
|
39
|
+
indices:
|
|
40
|
+
# Coluna de lookup do webhook de entrega: o provedor so conhece o MessageId.
|
|
41
|
+
- columns:
|
|
42
|
+
- provider_message_id
|
|
43
|
+
- columns:
|
|
44
|
+
- delivery_status
|
|
@@ -8,6 +8,15 @@ columns:
|
|
|
8
8
|
onDelete: CASCADE
|
|
9
9
|
- name: action
|
|
10
10
|
type: text
|
|
11
|
+
# Quem provocou a atividade, quando nao foi o proprio usuario (hoje: simulacao
|
|
12
|
+
# de acesso). INT puro, SEM FK: uma segunda FK para `user` renomearia a relacao
|
|
13
|
+
# `user.user_activity` no prisma db pull e quebraria getUserIncludeClause.
|
|
14
|
+
- name: actor_user_id
|
|
15
|
+
type: int
|
|
16
|
+
isNullable: true
|
|
11
17
|
- type: created_at
|
|
12
18
|
- type: updated_at
|
|
13
19
|
|
|
20
|
+
indices:
|
|
21
|
+
- columns: [actor_user_id]
|
|
22
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Dispositivos ja vistos por usuario, usada por AuthService para decidir se um
|
|
2
|
+
# login vem de um dispositivo desconhecido (e-mail auth-login-new-device).
|
|
3
|
+
#
|
|
4
|
+
# Existe porque a checagem anterior olhava o historico de `user_session`, que
|
|
5
|
+
# `clearExpiredSessions` poda por `session-retention-days`: um dispositivo parado
|
|
6
|
+
# alguns meses sumia do historico e era reanunciado como novo.
|
|
7
|
+
columns:
|
|
8
|
+
- type: pk
|
|
9
|
+
- name: user_id
|
|
10
|
+
type: fk
|
|
11
|
+
references:
|
|
12
|
+
table: user
|
|
13
|
+
column: id
|
|
14
|
+
onDelete: CASCADE
|
|
15
|
+
onUpdate: CASCADE
|
|
16
|
+
# sha256 hex de `b:<browser_id>` ou, na falta dele, `u:<user_agent>`.
|
|
17
|
+
# Ver buildDeviceKey em libraries/core/src/utils/device-key.ts.
|
|
18
|
+
- name: device_key
|
|
19
|
+
type: varchar
|
|
20
|
+
length: 64
|
|
21
|
+
# browser_id e user_agent ficam gravados crus so para diagnostico: quem decide
|
|
22
|
+
# a identidade e a device_key.
|
|
23
|
+
- name: browser_id
|
|
24
|
+
type: varchar
|
|
25
|
+
isNullable: true
|
|
26
|
+
- name: user_agent
|
|
27
|
+
type: text
|
|
28
|
+
isNullable: true
|
|
29
|
+
- name: browser_name
|
|
30
|
+
type: varchar
|
|
31
|
+
length: 64
|
|
32
|
+
isNullable: true
|
|
33
|
+
- name: os_name
|
|
34
|
+
type: varchar
|
|
35
|
+
length: 64
|
|
36
|
+
isNullable: true
|
|
37
|
+
- name: last_ip
|
|
38
|
+
type: varchar
|
|
39
|
+
length: 45
|
|
40
|
+
isNullable: true
|
|
41
|
+
- name: last_seen_at
|
|
42
|
+
type: timestamptz
|
|
43
|
+
- type: created_at
|
|
44
|
+
- type: updated_at
|
|
45
|
+
|
|
46
|
+
indices:
|
|
47
|
+
# A unica que importa no caminho de login: "este usuario ja usou este
|
|
48
|
+
# dispositivo?". Unica porque o upsert do registro depende dela.
|
|
49
|
+
- columns: [user_id, device_key]
|
|
50
|
+
isUnique: true
|
|
51
|
+
# Para uma futura poda de dispositivos ha muito nao usados.
|
|
52
|
+
- columns: [last_seen_at]
|
|
@@ -16,5 +16,24 @@ columns:
|
|
|
16
16
|
isNullable: true
|
|
17
17
|
- name: expires_at
|
|
18
18
|
type: datetime
|
|
19
|
+
# Sessao aberta por outro usuario via simulacao de acesso. INT puro, SEM FK:
|
|
20
|
+
# esta tabela ja tem uma FK para `user`, e uma segunda faria o prisma db pull
|
|
21
|
+
# renomear `user.user_session` (foi o que aconteceu com user_change_log), o que
|
|
22
|
+
# quebraria UserService.findUserById e a tela de sessoes do admin. O nome do
|
|
23
|
+
# operador sai de uma segunda consulta.
|
|
24
|
+
- name: impersonator_user_id
|
|
25
|
+
type: int
|
|
26
|
+
isNullable: true
|
|
27
|
+
- name: impersonation_reason
|
|
28
|
+
type: varchar
|
|
29
|
+
length: 255
|
|
30
|
+
isNullable: true
|
|
19
31
|
- type: created_at
|
|
20
|
-
- type: updated_at
|
|
32
|
+
- type: updated_at
|
|
33
|
+
|
|
34
|
+
# A FK user_id nasceu sem indice, entao toda consulta por usuario (listagem de
|
|
35
|
+
# sessoes, revogacao em massa) fazia seq scan. O prefixo user_id deste indice
|
|
36
|
+
# composto ja cobre esses casos.
|
|
37
|
+
indices:
|
|
38
|
+
- columns: [user_id, browser_id]
|
|
39
|
+
- columns: [impersonator_user_id]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hed-hog/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.393",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -39,18 +39,19 @@
|
|
|
39
39
|
"qrcode": "^1.5.4",
|
|
40
40
|
"redis": "4.7.1",
|
|
41
41
|
"rxjs": "^7.8.2",
|
|
42
|
+
"@sentry/nestjs": "10.70.0",
|
|
42
43
|
"socket.io": "^4.8.1",
|
|
43
44
|
"sharp": "^0.34.2",
|
|
44
45
|
"speakeasy": "^2.0.0",
|
|
45
46
|
"ua-parser-js": "^2.0.10",
|
|
46
47
|
"uuid": "^11.1.0",
|
|
47
48
|
"@hed-hog/api-prisma": "0.0.6",
|
|
48
|
-
"@hed-hog/api-
|
|
49
|
+
"@hed-hog/api-mail": "0.0.10",
|
|
49
50
|
"@hed-hog/vault-crypto": "0.0.1",
|
|
50
|
-
"@hed-hog/api": "0.0.8",
|
|
51
51
|
"@hed-hog/api-types": "0.0.1",
|
|
52
|
-
"@hed-hog/api-
|
|
53
|
-
"@hed-hog/api-
|
|
52
|
+
"@hed-hog/api-pagination": "0.0.7",
|
|
53
|
+
"@hed-hog/api-locale": "0.0.14",
|
|
54
|
+
"@hed-hog/api": "0.0.8"
|
|
54
55
|
},
|
|
55
56
|
"exports": {
|
|
56
57
|
".": {
|
|
@@ -26,6 +26,10 @@ export class AccessLogInterceptor implements NestInterceptor {
|
|
|
26
26
|
return next.handle().pipe(
|
|
27
27
|
tap(() => {
|
|
28
28
|
const userId: number | undefined = request.auth?.sub;
|
|
29
|
+
// Numa simulacao de acesso o `sub` e o ALVO; sem gravar o operador, o
|
|
30
|
+
// log ficaria indistinguivel de um acesso genuino do usuario.
|
|
31
|
+
const impersonatorUserId: number | undefined =
|
|
32
|
+
request.auth?.imp === true ? request.auth?.act : undefined;
|
|
29
33
|
// request.ip já resolve o IP real do cliente respeitando `trust proxy` (main.ts):
|
|
30
34
|
// ler x-forwarded-for na mão aqui pegava o primeiro valor da lista, que é
|
|
31
35
|
// exatamente o mais fácil de forjar pelo próprio cliente.
|
|
@@ -33,7 +37,7 @@ export class AccessLogInterceptor implements NestInterceptor {
|
|
|
33
37
|
const userAgent: string = (request.headers['user-agent'] as string) ?? '';
|
|
34
38
|
const method: string = request.method ?? '';
|
|
35
39
|
|
|
36
|
-
this.accessLogService.recordHttp({ userId, ip, userAgent, method, path });
|
|
40
|
+
this.accessLogService.recordHttp({ userId, ip, userAgent, method, path, impersonatorUserId });
|
|
37
41
|
}),
|
|
38
42
|
);
|
|
39
43
|
}
|