@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
package/hedhog/data/route.yaml
CHANGED
|
@@ -89,6 +89,45 @@
|
|
|
89
89
|
slug: admin-access
|
|
90
90
|
- where:
|
|
91
91
|
slug: user
|
|
92
|
+
# Dispositivos conhecidos do proprio usuario. Mesmos papeis das sessoes: e a
|
|
93
|
+
# mesma area de seguranca da conta.
|
|
94
|
+
- url: /user-device
|
|
95
|
+
method: GET
|
|
96
|
+
type: HTTP
|
|
97
|
+
relations:
|
|
98
|
+
role:
|
|
99
|
+
- where:
|
|
100
|
+
slug: admin
|
|
101
|
+
- where:
|
|
102
|
+
slug: admin-access
|
|
103
|
+
- where:
|
|
104
|
+
slug: user
|
|
105
|
+
- url: /user-device/:deviceId
|
|
106
|
+
method: DELETE
|
|
107
|
+
type: HTTP
|
|
108
|
+
relations:
|
|
109
|
+
role:
|
|
110
|
+
- where:
|
|
111
|
+
slug: admin
|
|
112
|
+
- where:
|
|
113
|
+
slug: admin-access
|
|
114
|
+
- where:
|
|
115
|
+
slug: user
|
|
116
|
+
# Dispositivos de OUTRO usuario (sheet do admin): so admin.
|
|
117
|
+
- url: /user-device/user/:userId
|
|
118
|
+
method: GET
|
|
119
|
+
type: HTTP
|
|
120
|
+
relations:
|
|
121
|
+
role:
|
|
122
|
+
- where:
|
|
123
|
+
slug: admin
|
|
124
|
+
- url: /user-device/user/:userId/:deviceId
|
|
125
|
+
method: DELETE
|
|
126
|
+
type: HTTP
|
|
127
|
+
relations:
|
|
128
|
+
role:
|
|
129
|
+
- where:
|
|
130
|
+
slug: admin
|
|
92
131
|
- url: /sessions/:sessionId/revoke
|
|
93
132
|
method: DELETE
|
|
94
133
|
type: HTTP
|
|
@@ -427,6 +466,42 @@
|
|
|
427
466
|
slug: admin
|
|
428
467
|
- where:
|
|
429
468
|
slug: admin-user
|
|
469
|
+
# A acao "simular acesso" vive na tela de usuarios, entao quem so tem o
|
|
470
|
+
# papel de simulacao ainda precisa listar usuarios.
|
|
471
|
+
- where:
|
|
472
|
+
slug: admin-impersonation
|
|
473
|
+
# Simulacao de acesso. /impersonation/redeem e @Public() e /impersonation/stop e
|
|
474
|
+
# /impersonation/session sao @NoRole(), entao nao entram aqui — o RoleGuard
|
|
475
|
+
# retorna true antes de consultar a tabela nos tres casos.
|
|
476
|
+
- url: /impersonation/start
|
|
477
|
+
method: POST
|
|
478
|
+
type: HTTP
|
|
479
|
+
relations:
|
|
480
|
+
role:
|
|
481
|
+
- where:
|
|
482
|
+
slug: admin
|
|
483
|
+
- where:
|
|
484
|
+
slug: admin-impersonation
|
|
485
|
+
- url: /impersonation/history
|
|
486
|
+
method: GET
|
|
487
|
+
type: HTTP
|
|
488
|
+
relations:
|
|
489
|
+
role:
|
|
490
|
+
- where:
|
|
491
|
+
slug: admin
|
|
492
|
+
- where:
|
|
493
|
+
slug: admin-impersonation
|
|
494
|
+
- url: /impersonation/apps
|
|
495
|
+
method: GET
|
|
496
|
+
type: HTTP
|
|
497
|
+
relations:
|
|
498
|
+
role:
|
|
499
|
+
- where:
|
|
500
|
+
slug: admin
|
|
501
|
+
- where:
|
|
502
|
+
slug: admin-impersonation
|
|
503
|
+
# Gestao de papeis de um usuario: exige o papel dedicado admin-user-permission.
|
|
504
|
+
# admin-user administra o cadastro, mas nao concede/revoga papeis (escalonamento de privilegio).
|
|
430
505
|
- url: /user/:userId/role
|
|
431
506
|
method: GET
|
|
432
507
|
type: HTTP
|
|
@@ -435,7 +510,7 @@
|
|
|
435
510
|
- where:
|
|
436
511
|
slug: admin
|
|
437
512
|
- where:
|
|
438
|
-
slug: admin-user
|
|
513
|
+
slug: admin-user-permission
|
|
439
514
|
- url: /user/:userId/role/:roleId
|
|
440
515
|
method: DELETE
|
|
441
516
|
type: HTTP
|
|
@@ -444,7 +519,7 @@
|
|
|
444
519
|
- where:
|
|
445
520
|
slug: admin
|
|
446
521
|
- where:
|
|
447
|
-
slug: admin-user
|
|
522
|
+
slug: admin-user-permission
|
|
448
523
|
- url: /user/:userId/role/:roleId
|
|
449
524
|
method: POST
|
|
450
525
|
type: HTTP
|
|
@@ -453,7 +528,7 @@
|
|
|
453
528
|
- where:
|
|
454
529
|
slug: admin
|
|
455
530
|
- where:
|
|
456
|
-
slug: admin-user
|
|
531
|
+
slug: admin-user-permission
|
|
457
532
|
- url: /user/:userId
|
|
458
533
|
method: GET
|
|
459
534
|
type: HTTP
|
|
@@ -490,6 +565,8 @@
|
|
|
490
565
|
slug: admin
|
|
491
566
|
- where:
|
|
492
567
|
slug: admin-access
|
|
568
|
+
- where:
|
|
569
|
+
slug: admin-user-permission
|
|
493
570
|
- url: /user/:userId/route
|
|
494
571
|
method: GET
|
|
495
572
|
type: HTTP
|
|
@@ -499,6 +576,8 @@
|
|
|
499
576
|
slug: admin
|
|
500
577
|
- where:
|
|
501
578
|
slug: admin-access
|
|
579
|
+
- where:
|
|
580
|
+
slug: admin-user-permission
|
|
502
581
|
- url: /user
|
|
503
582
|
method: POST
|
|
504
583
|
type: HTTP
|
|
@@ -662,6 +741,11 @@
|
|
|
662
741
|
slug: admin
|
|
663
742
|
- where:
|
|
664
743
|
slug: admin-access
|
|
744
|
+
# O editor do CMS sobe capa de post e imagem de Open Graph por aqui.
|
|
745
|
+
- where:
|
|
746
|
+
slug: admin-cms
|
|
747
|
+
- where:
|
|
748
|
+
slug: cms-editor
|
|
665
749
|
- url: /file
|
|
666
750
|
method: DELETE
|
|
667
751
|
type: HTTP
|
|
@@ -1201,6 +1285,19 @@
|
|
|
1201
1285
|
slug: admin
|
|
1202
1286
|
- where:
|
|
1203
1287
|
slug: admin-mail
|
|
1288
|
+
# Provisiona o webhook que recebe bounce/complaint/delivery do SES e devolve a
|
|
1289
|
+
# URL para assinar no topico SNS. O endpoint que recebe os eventos e o
|
|
1290
|
+
# /webhook/:uuid publico do core: ele nao entra aqui porque o RoleGuard
|
|
1291
|
+
# curto-circuita em IS_PUBLIC_KEY antes de ler a tabela `route`.
|
|
1292
|
+
- url: /mail-delivery/provision/:integrationProfileId
|
|
1293
|
+
method: POST
|
|
1294
|
+
type: HTTP
|
|
1295
|
+
relations:
|
|
1296
|
+
role:
|
|
1297
|
+
- where:
|
|
1298
|
+
slug: admin
|
|
1299
|
+
- where:
|
|
1300
|
+
slug: admin-mail
|
|
1204
1301
|
- url: /mail-sent
|
|
1205
1302
|
method: GET
|
|
1206
1303
|
type: HTTP
|
|
@@ -1519,6 +1616,47 @@
|
|
|
1519
1616
|
slug: admin
|
|
1520
1617
|
- where:
|
|
1521
1618
|
slug: admin-access
|
|
1619
|
+
- url: /ai/richtext/edit-html
|
|
1620
|
+
method: POST
|
|
1621
|
+
type: HTTP
|
|
1622
|
+
relations:
|
|
1623
|
+
role:
|
|
1624
|
+
- where:
|
|
1625
|
+
slug: admin
|
|
1626
|
+
- where:
|
|
1627
|
+
slug: admin-access
|
|
1628
|
+
- where:
|
|
1629
|
+
slug: admin-campaign
|
|
1630
|
+
- where:
|
|
1631
|
+
slug: admin-cms
|
|
1632
|
+
- where:
|
|
1633
|
+
slug: cms-editor
|
|
1634
|
+
- where:
|
|
1635
|
+
slug: cms-publisher
|
|
1636
|
+
- where:
|
|
1637
|
+
slug: admin-finance
|
|
1638
|
+
- where:
|
|
1639
|
+
slug: admin-finance-operator
|
|
1640
|
+
- where:
|
|
1641
|
+
slug: finance-statements-editor
|
|
1642
|
+
- where:
|
|
1643
|
+
slug: admin-inbox
|
|
1644
|
+
- where:
|
|
1645
|
+
slug: inbox-owner
|
|
1646
|
+
- where:
|
|
1647
|
+
slug: admin-lms
|
|
1648
|
+
- where:
|
|
1649
|
+
slug: lms-instructor
|
|
1650
|
+
- where:
|
|
1651
|
+
slug: admin-operations-director
|
|
1652
|
+
- where:
|
|
1653
|
+
slug: admin-operations-project-manager
|
|
1654
|
+
- where:
|
|
1655
|
+
slug: operations-collaborator
|
|
1656
|
+
- where:
|
|
1657
|
+
slug: admin-sac
|
|
1658
|
+
- where:
|
|
1659
|
+
slug: sac-agent
|
|
1522
1660
|
- url: /integration-event-catalog
|
|
1523
1661
|
method: GET
|
|
1524
1662
|
type: HTTP
|
|
@@ -3357,6 +3495,37 @@
|
|
|
3357
3495
|
method: POST
|
|
3358
3496
|
type: HTTP
|
|
3359
3497
|
relations: *core_user_roles
|
|
3498
|
+
# Pareamento por QR. Só as rotas que exigem sessão entram aqui: /auth/pairing/claim,
|
|
3499
|
+
# /auth/pairing/redeem, /auth/pairing/reverse e /auth/pairing/reverse/poll são
|
|
3500
|
+
# @Public() — o aparelho que as chama ainda não tem sessão nenhuma.
|
|
3501
|
+
- url: /auth/pairing
|
|
3502
|
+
method: POST
|
|
3503
|
+
type: HTTP
|
|
3504
|
+
relations: *core_user_roles
|
|
3505
|
+
- url: /auth/pairing/:id
|
|
3506
|
+
method: GET
|
|
3507
|
+
type: HTTP
|
|
3508
|
+
relations: *core_user_roles
|
|
3509
|
+
- url: /auth/pairing/:id/confirm
|
|
3510
|
+
method: POST
|
|
3511
|
+
type: HTTP
|
|
3512
|
+
relations: *core_user_roles
|
|
3513
|
+
- url: /auth/pairing/:id
|
|
3514
|
+
method: DELETE
|
|
3515
|
+
type: HTTP
|
|
3516
|
+
relations: *core_user_roles
|
|
3517
|
+
- url: /auth/pairing/reverse/:id
|
|
3518
|
+
method: GET
|
|
3519
|
+
type: HTTP
|
|
3520
|
+
relations: *core_user_roles
|
|
3521
|
+
- url: /auth/pairing/reverse/:id/approve
|
|
3522
|
+
method: POST
|
|
3523
|
+
type: HTTP
|
|
3524
|
+
relations: *core_user_roles
|
|
3525
|
+
- url: /auth/pairing/reverse/:id/reject
|
|
3526
|
+
method: POST
|
|
3527
|
+
type: HTTP
|
|
3528
|
+
relations: *core_user_roles
|
|
3360
3529
|
- url: /auth/roles
|
|
3361
3530
|
method: GET
|
|
3362
3531
|
type: HTTP
|
|
@@ -76,6 +76,20 @@
|
|
|
76
76
|
subgroup_id:
|
|
77
77
|
where:
|
|
78
78
|
slug: general-system
|
|
79
|
+
- slug: cors-allowed-origins
|
|
80
|
+
type: array
|
|
81
|
+
component: input-tags
|
|
82
|
+
name:
|
|
83
|
+
en: Extra CORS Origins
|
|
84
|
+
pt: Origens CORS Adicionais
|
|
85
|
+
description:
|
|
86
|
+
en: 'Extra origins allowed to call the API from a browser, added to CORS_ALLOWED_ORIGINS/CORS_ALLOWED_DOMAINS and applied without a restart. Already includes the published browser extension; add your own only if you build the extension yourself.'
|
|
87
|
+
pt: 'Origens adicionais autorizadas a chamar a API pelo navegador, somadas a CORS_ALLOWED_ORIGINS/CORS_ALLOWED_DOMAINS e aplicadas sem reiniciar. Já inclui a extensão de navegador publicada; acrescente as suas apenas se você mesmo compilar a extensão.'
|
|
88
|
+
value: '["chrome-extension://ojimnolpmeegaaindaaceiodhmlbaljn"]'
|
|
89
|
+
user_override: false
|
|
90
|
+
subgroup_id:
|
|
91
|
+
where:
|
|
92
|
+
slug: general-system
|
|
79
93
|
- slug: app-names
|
|
80
94
|
type: array
|
|
81
95
|
component: input-tags
|
|
@@ -83,8 +97,8 @@
|
|
|
83
97
|
en: App Names
|
|
84
98
|
pt: Nomes dos Aplicativos
|
|
85
99
|
description:
|
|
86
|
-
en: '
|
|
87
|
-
pt: '
|
|
100
|
+
en: 'Deprecated: no longer used. Transactional emails always show the System Name. Kept for backward compatibility.'
|
|
101
|
+
pt: 'Descontinuada: não é mais usada. E-mails transacionais sempre exibem o Nome do Sistema. Mantida por compatibilidade.'
|
|
88
102
|
value: '["training=Training","class=Class","partners=Partners","admin=Admin"]'
|
|
89
103
|
user_override: false
|
|
90
104
|
subgroup_id:
|
|
@@ -376,6 +390,34 @@
|
|
|
376
390
|
subgroup_id:
|
|
377
391
|
where:
|
|
378
392
|
slug: mcp-configuration
|
|
393
|
+
- slug: richtext-ai-enabled
|
|
394
|
+
type: boolean
|
|
395
|
+
component: switch
|
|
396
|
+
name:
|
|
397
|
+
en: Enable AI in Rich Text Editor
|
|
398
|
+
pt: Habilitar IA no Editor de Texto
|
|
399
|
+
description:
|
|
400
|
+
en: Shows an AI button in the rich text editor toolbar (used across the admin), letting users rewrite the current content from a prompt.
|
|
401
|
+
pt: Exibe um botão de IA na barra de ferramentas do editor de texto rico (usado em todo o admin), permitindo reescrever o conteúdo atual a partir de um prompt.
|
|
402
|
+
value: false
|
|
403
|
+
user_override: false
|
|
404
|
+
subgroup_id:
|
|
405
|
+
where:
|
|
406
|
+
slug: richtext-ai-configuration
|
|
407
|
+
- slug: richtext-ai-profile-id
|
|
408
|
+
type: string
|
|
409
|
+
component: entity-picker
|
|
410
|
+
name:
|
|
411
|
+
en: AI Profile
|
|
412
|
+
pt: Perfil de IA
|
|
413
|
+
description:
|
|
414
|
+
en: Integration profile (type AI) used to rewrite rich text editor content from a prompt.
|
|
415
|
+
pt: Perfil de integração (tipo IA) usado para reescrever o conteúdo do editor de texto rico a partir de um prompt.
|
|
416
|
+
value: ''
|
|
417
|
+
user_override: false
|
|
418
|
+
subgroup_id:
|
|
419
|
+
where:
|
|
420
|
+
slug: richtext-ai-configuration
|
|
379
421
|
- slug: authentication
|
|
380
422
|
icon: lock-password
|
|
381
423
|
name:
|
|
@@ -665,6 +707,20 @@
|
|
|
665
707
|
subgroup_id:
|
|
666
708
|
where:
|
|
667
709
|
slug: session-management
|
|
710
|
+
- slug: impersonation-session-minutes
|
|
711
|
+
type: number
|
|
712
|
+
component: input-number
|
|
713
|
+
name:
|
|
714
|
+
en: Simulated Session Lifetime
|
|
715
|
+
pt: Duração da Sessão Simulada
|
|
716
|
+
description:
|
|
717
|
+
en: Minutes an access simulation session stays valid. It is never refreshed, so this is the hard limit.
|
|
718
|
+
pt: Minutos que uma sessão de simulação de acesso continua válida. Ela nunca é renovada, então este é o limite absoluto.
|
|
719
|
+
value: 30
|
|
720
|
+
user_override: false
|
|
721
|
+
subgroup_id:
|
|
722
|
+
where:
|
|
723
|
+
slug: session-management
|
|
668
724
|
- slug: localization
|
|
669
725
|
icon: world
|
|
670
726
|
name:
|
|
@@ -1102,6 +1158,12 @@
|
|
|
1102
1158
|
order: 10
|
|
1103
1159
|
- value: User.ReadBasic.All
|
|
1104
1160
|
order: 11
|
|
1161
|
+
- value: Calendars.ReadWrite
|
|
1162
|
+
order: 12
|
|
1163
|
+
- value: OnlineMeetings.ReadWrite
|
|
1164
|
+
order: 13
|
|
1165
|
+
- value: OnlineMeetingRecording.Read.All
|
|
1166
|
+
order: 14
|
|
1105
1167
|
subgroup_id:
|
|
1106
1168
|
where:
|
|
1107
1169
|
slug: microsoft-entra-id
|
|
@@ -1133,6 +1195,106 @@
|
|
|
1133
1195
|
subgroup_id:
|
|
1134
1196
|
where:
|
|
1135
1197
|
slug: microsoft-entra-id
|
|
1198
|
+
- slug: microsoft-meeting-organizer-mode
|
|
1199
|
+
type: string
|
|
1200
|
+
component: radio
|
|
1201
|
+
name:
|
|
1202
|
+
en: Teams meeting organizer
|
|
1203
|
+
pt: Organizador das reuniões Teams
|
|
1204
|
+
description:
|
|
1205
|
+
en: 'Who organizes the meetings this system schedules: "app" uses a fixed service account via application permissions (the instructor does not need a connected account); "delegated" uses the connected Microsoft account of whoever requested the meeting.'
|
|
1206
|
+
pt: 'Quem organiza as reuniões agendadas pelo sistema: "app" usa uma conta de serviço fixa com permissões de aplicativo (o instrutor não precisa ter conta conectada); "delegated" usa a conta Microsoft conectada de quem pediu a reunião.'
|
|
1207
|
+
value: app
|
|
1208
|
+
user_override: false
|
|
1209
|
+
relations:
|
|
1210
|
+
setting_list:
|
|
1211
|
+
- value: app
|
|
1212
|
+
order: 0
|
|
1213
|
+
- value: delegated
|
|
1214
|
+
order: 1
|
|
1215
|
+
subgroup_id:
|
|
1216
|
+
where:
|
|
1217
|
+
slug: microsoft-entra-id
|
|
1218
|
+
- slug: microsoft-meeting-service-account
|
|
1219
|
+
type: string
|
|
1220
|
+
component: input-text
|
|
1221
|
+
name:
|
|
1222
|
+
en: Teams meeting service account (UPN)
|
|
1223
|
+
pt: Conta de serviço das reuniões (UPN)
|
|
1224
|
+
description:
|
|
1225
|
+
en: UPN of the mailbox that organizes and records the meetings when the organizer is "app". Needs a Teams license, a policy allowing cloud recording, and an Application Access Policy granting this app access to it.
|
|
1226
|
+
pt: UPN da caixa que organiza e grava as reuniões quando o organizador é "app". Precisa de licença do Teams, política que permita gravação na nuvem e uma Application Access Policy dando acesso a este aplicativo.
|
|
1227
|
+
value: ""
|
|
1228
|
+
user_override: false
|
|
1229
|
+
subgroup_id:
|
|
1230
|
+
where:
|
|
1231
|
+
slug: microsoft-entra-id
|
|
1232
|
+
- slug: microsoft-meeting-recording-poll-hours
|
|
1233
|
+
type: number
|
|
1234
|
+
component: input-number
|
|
1235
|
+
name:
|
|
1236
|
+
en: Recording lookup window (hours)
|
|
1237
|
+
pt: Janela de busca da gravação (horas)
|
|
1238
|
+
description:
|
|
1239
|
+
en: How long after a meeting ends the system keeps looking for its recording before giving up and marking it unavailable.
|
|
1240
|
+
pt: Por quanto tempo, após o fim da reunião, o sistema continua procurando a gravação antes de desistir e marcá-la como indisponível.
|
|
1241
|
+
value: '48'
|
|
1242
|
+
user_override: false
|
|
1243
|
+
subgroup_id:
|
|
1244
|
+
where:
|
|
1245
|
+
slug: microsoft-entra-id
|
|
1246
|
+
- slug: microsoft-meeting-recording-purge-mode
|
|
1247
|
+
type: string
|
|
1248
|
+
component: radio
|
|
1249
|
+
name:
|
|
1250
|
+
en: OneDrive recording cleanup
|
|
1251
|
+
pt: Limpeza da gravação no OneDrive
|
|
1252
|
+
description:
|
|
1253
|
+
en: 'What to do with the recording in the organizer''s OneDrive once it is safely imported: nothing, log only, recycle bin, or permanent delete. The recycle bin still uses the account quota for up to 93 days.'
|
|
1254
|
+
pt: 'O que fazer com a gravação no OneDrive do organizador depois de importada com segurança: nada, só registrar no log, mandar para a lixeira ou excluir em definitivo. A lixeira ainda consome a cota por até 93 dias.'
|
|
1255
|
+
value: disabled
|
|
1256
|
+
user_override: false
|
|
1257
|
+
relations:
|
|
1258
|
+
setting_list:
|
|
1259
|
+
- value: disabled
|
|
1260
|
+
order: 0
|
|
1261
|
+
- value: dry_run
|
|
1262
|
+
order: 1
|
|
1263
|
+
- value: recycle_bin
|
|
1264
|
+
order: 2
|
|
1265
|
+
- value: permanent
|
|
1266
|
+
order: 3
|
|
1267
|
+
subgroup_id:
|
|
1268
|
+
where:
|
|
1269
|
+
slug: microsoft-entra-id
|
|
1270
|
+
- slug: microsoft-meeting-recording-purge-grace-days
|
|
1271
|
+
type: number
|
|
1272
|
+
component: input-number
|
|
1273
|
+
name:
|
|
1274
|
+
en: Cleanup grace period (days)
|
|
1275
|
+
pt: Carência antes da limpeza (dias)
|
|
1276
|
+
description:
|
|
1277
|
+
en: How long to wait after a successful import before deleting the recording from OneDrive. The window exists so a failed transcoding or a wrong import can still be redone from the original.
|
|
1278
|
+
pt: Quanto tempo esperar após uma importação bem-sucedida antes de apagar a gravação do OneDrive. A janela existe para que uma transcodificação falha ou um import errado ainda possam ser refeitos a partir do original.
|
|
1279
|
+
value: '7'
|
|
1280
|
+
user_override: false
|
|
1281
|
+
subgroup_id:
|
|
1282
|
+
where:
|
|
1283
|
+
slug: microsoft-entra-id
|
|
1284
|
+
- slug: microsoft-meeting-recording-folder
|
|
1285
|
+
type: string
|
|
1286
|
+
component: input-text
|
|
1287
|
+
name:
|
|
1288
|
+
en: OneDrive recordings folder
|
|
1289
|
+
pt: Pasta das gravações no OneDrive
|
|
1290
|
+
description:
|
|
1291
|
+
en: Name of the folder where Teams drops recordings in the organizer's OneDrive. The name follows the tenant language, and nothing outside this folder is ever deleted.
|
|
1292
|
+
pt: Nome da pasta onde o Teams deposita as gravações no OneDrive do organizador. O nome acompanha o idioma da organização, e nada fora dessa pasta é apagado.
|
|
1293
|
+
value: Recordings
|
|
1294
|
+
user_override: false
|
|
1295
|
+
subgroup_id:
|
|
1296
|
+
where:
|
|
1297
|
+
slug: microsoft-entra-id
|
|
1136
1298
|
- slug: oauth-apple-profile-id
|
|
1137
1299
|
type: string
|
|
1138
1300
|
component: entity-picker
|
|
@@ -2095,6 +2257,20 @@
|
|
|
2095
2257
|
subgroup_id:
|
|
2096
2258
|
where:
|
|
2097
2259
|
slug: image-optimization
|
|
2260
|
+
- slug: image-resize-allowed-widths
|
|
2261
|
+
type: string
|
|
2262
|
+
component: input-text
|
|
2263
|
+
name:
|
|
2264
|
+
en: Allowed Resize Widths (px)
|
|
2265
|
+
pt: Larguras Permitidas de Redimensionamento (px)
|
|
2266
|
+
description:
|
|
2267
|
+
en: 'JSON list of widths the public image endpoint may render via ?w=. Any other width serves the original file. An allowlist is required because the endpoint is public: an arbitrary width means arbitrary CPU per request.'
|
|
2268
|
+
pt: 'Lista JSON de larguras que o endpoint público de imagens pode gerar via ?w=. Qualquer outra largura serve o arquivo original. A lista é obrigatória porque o endpoint é público: uma largura arbitrária significa CPU arbitrária por requisição.'
|
|
2269
|
+
value: '[64,128,320,400,480,640,896,1200]'
|
|
2270
|
+
user_override: false
|
|
2271
|
+
subgroup_id:
|
|
2272
|
+
where:
|
|
2273
|
+
slug: image-optimization
|
|
2098
2274
|
- slug: image-cache-ttl-seconds
|
|
2099
2275
|
type: number
|
|
2100
2276
|
component: input-number
|
|
@@ -373,3 +373,11 @@
|
|
|
373
373
|
description:
|
|
374
374
|
en: Model Context Protocol configuration
|
|
375
375
|
pt: Configuração do servidor MCP
|
|
376
|
+
|
|
377
|
+
- slug: richtext-ai-configuration
|
|
378
|
+
name:
|
|
379
|
+
en: Rich Text AI
|
|
380
|
+
pt: IA no Editor de Texto
|
|
381
|
+
description:
|
|
382
|
+
en: AI-assisted rewriting for the shared rich text editor used across the admin
|
|
383
|
+
pt: Reescrita assistida por IA para o editor de texto rico compartilhado usado no admin
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { renderHook, waitFor } from '@testing-library/react';
|
|
3
|
+
import { type ReactNode } from 'react';
|
|
4
|
+
|
|
5
|
+
// useCoreAccess combina useApp().request/accessToken com useQuery real, igual ao
|
|
6
|
+
// padrão de use-finance-access.test.tsx. A lógica determinística real está na
|
|
7
|
+
// derivação de roleSlugs/canManageUserPermissions a partir da resposta.
|
|
8
|
+
const { mockRequest, appState } = vi.hoisted(() => ({
|
|
9
|
+
mockRequest: vi.fn(),
|
|
10
|
+
appState: { accessToken: undefined as string | undefined },
|
|
11
|
+
}));
|
|
12
|
+
vi.mock('@hed-hog/next-app-provider', async () => {
|
|
13
|
+
const rq = await vi.importActual<typeof import('@tanstack/react-query')>(
|
|
14
|
+
'@tanstack/react-query',
|
|
15
|
+
);
|
|
16
|
+
return {
|
|
17
|
+
useApp: () => ({ request: mockRequest, accessToken: appState.accessToken }),
|
|
18
|
+
useQuery: rq.useQuery,
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
23
|
+
import { useCoreAccess } from './use-core-access';
|
|
24
|
+
|
|
25
|
+
function makeWrapper() {
|
|
26
|
+
const client = new QueryClient({
|
|
27
|
+
defaultOptions: { queries: { retry: false } },
|
|
28
|
+
});
|
|
29
|
+
return function Wrapper({ children }: { children: ReactNode }) {
|
|
30
|
+
return <QueryClientProvider client={client}>{children}</QueryClientProvider>;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
describe('useCoreAccess', () => {
|
|
35
|
+
beforeEach(() => {
|
|
36
|
+
mockRequest.mockReset();
|
|
37
|
+
appState.accessToken = 'tok';
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('não dispara a query sem accessToken (enabled=false)', () => {
|
|
41
|
+
appState.accessToken = undefined;
|
|
42
|
+
const { result } = renderHook(() => useCoreAccess(), {
|
|
43
|
+
wrapper: makeWrapper(),
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
expect(mockRequest).not.toHaveBeenCalled();
|
|
47
|
+
expect(result.current.isLoading).toBe(false);
|
|
48
|
+
expect(result.current.roleSlugs).toEqual([]);
|
|
49
|
+
expect(result.current.canManageUserPermissions).toBe(false);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('canManageUserPermissions é true para admin', async () => {
|
|
53
|
+
mockRequest.mockResolvedValue({ data: { roles: [{ slug: 'admin' }] } });
|
|
54
|
+
const { result } = renderHook(() => useCoreAccess(), {
|
|
55
|
+
wrapper: makeWrapper(),
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
await waitFor(() => expect(result.current.roleSlugs).toEqual(['admin']));
|
|
59
|
+
expect(result.current.canManageUserPermissions).toBe(true);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('canManageUserPermissions é true para admin-user-permission', async () => {
|
|
63
|
+
mockRequest.mockResolvedValue({
|
|
64
|
+
data: { roles: [{ slug: 'admin-user-permission' }] },
|
|
65
|
+
});
|
|
66
|
+
const { result } = renderHook(() => useCoreAccess(), {
|
|
67
|
+
wrapper: makeWrapper(),
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
await waitFor(() =>
|
|
71
|
+
expect(result.current.roleSlugs).toEqual(['admin-user-permission']),
|
|
72
|
+
);
|
|
73
|
+
expect(result.current.canManageUserPermissions).toBe(true);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('canManageUserPermissions é false para admin-user (deliberadamente excluído)', async () => {
|
|
77
|
+
mockRequest.mockResolvedValue({ data: { roles: [{ slug: 'admin-user' }] } });
|
|
78
|
+
const { result } = renderHook(() => useCoreAccess(), {
|
|
79
|
+
wrapper: makeWrapper(),
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
await waitFor(() =>
|
|
83
|
+
expect(result.current.roleSlugs).toEqual(['admin-user']),
|
|
84
|
+
);
|
|
85
|
+
expect(result.current.canManageUserPermissions).toBe(false);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it('canManageUserPermissions é false para outros papéis admin-*', async () => {
|
|
89
|
+
mockRequest.mockResolvedValue({
|
|
90
|
+
data: { roles: [{ slug: 'admin-mail' }, { slug: 'admin-access' }] },
|
|
91
|
+
});
|
|
92
|
+
const { result } = renderHook(() => useCoreAccess(), {
|
|
93
|
+
wrapper: makeWrapper(),
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
await waitFor(() =>
|
|
97
|
+
expect(result.current.roleSlugs).toEqual(['admin-mail', 'admin-access']),
|
|
98
|
+
);
|
|
99
|
+
expect(result.current.canManageUserPermissions).toBe(false);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it('filtra roles sem slug (vazio/undefined) da lista final', async () => {
|
|
103
|
+
mockRequest.mockResolvedValue({
|
|
104
|
+
data: { roles: [{ slug: '' }, { slug: undefined }, { slug: 'user' }] },
|
|
105
|
+
});
|
|
106
|
+
const { result } = renderHook(() => useCoreAccess(), {
|
|
107
|
+
wrapper: makeWrapper(),
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
await waitFor(() => expect(result.current.roleSlugs).toEqual(['user']));
|
|
111
|
+
expect(result.current.canManageUserPermissions).toBe(false);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it('sem roles na resposta devolve lista vazia', async () => {
|
|
115
|
+
mockRequest.mockResolvedValue({ data: { roles: [] } });
|
|
116
|
+
const { result } = renderHook(() => useCoreAccess(), {
|
|
117
|
+
wrapper: makeWrapper(),
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
await waitFor(() => expect(mockRequest).toHaveBeenCalled());
|
|
121
|
+
await waitFor(() => expect(result.current.isLoading).toBe(false));
|
|
122
|
+
expect(result.current.roleSlugs).toEqual([]);
|
|
123
|
+
expect(result.current.canManageUserPermissions).toBe(false);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useApp, useQuery } from '@hed-hog/next-app-provider';
|
|
2
|
+
|
|
3
|
+
type Role = { slug?: string };
|
|
4
|
+
|
|
5
|
+
export function useCoreAccess() {
|
|
6
|
+
const { request, accessToken } = useApp();
|
|
7
|
+
|
|
8
|
+
const { data, isLoading } = useQuery<{ roles: Role[] }>({
|
|
9
|
+
queryKey: ['core-roles', accessToken],
|
|
10
|
+
enabled: !!accessToken,
|
|
11
|
+
queryFn: async () => {
|
|
12
|
+
const response = await request<{ roles: Role[] }>({ url: '/auth/roles' });
|
|
13
|
+
return response.data;
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const roleSlugs = (data?.roles ?? []).map((r) => r.slug || '').filter(Boolean);
|
|
18
|
+
|
|
19
|
+
return {
|
|
20
|
+
isLoading,
|
|
21
|
+
roleSlugs,
|
|
22
|
+
// Conceder/revogar papeis de outra conta e escalonamento de privilegio, entao
|
|
23
|
+
// exige o papel dedicado admin-user-permission. admin-user administra apenas
|
|
24
|
+
// o cadastro do usuario e é deliberadamente excluido daqui.
|
|
25
|
+
canManageUserPermissions:
|
|
26
|
+
roleSlugs.includes('admin') ||
|
|
27
|
+
roleSlugs.includes('admin-user-permission'),
|
|
28
|
+
};
|
|
29
|
+
}
|