@hed-hog/core 0.0.390 → 0.0.394
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/mail.yaml
CHANGED
|
@@ -5,27 +5,27 @@
|
|
|
5
5
|
body:
|
|
6
6
|
en: |
|
|
7
7
|
Hello {{name}},<br>
|
|
8
|
-
Thank you for signing up for a {{brandName}} account!
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
Confirmation
|
|
8
|
+
Thank you for signing up for a {{brandName}} account!
|
|
9
|
+
Your account is ready — just confirm your email address
|
|
10
|
+
using the link below:<br>
|
|
11
|
+
Confirmation Link: <a href="{{link}}">{{link}}</a><br>
|
|
12
12
|
If you did not sign up for a {{brandName}} account, please ignore this email.<br>
|
|
13
13
|
Best regards,<br>
|
|
14
14
|
The {{brandName}} Team
|
|
15
15
|
pt: |
|
|
16
16
|
Olá {{name}},<br>
|
|
17
|
-
Obrigado por se inscrever para uma conta {{brandName}}!
|
|
18
|
-
|
|
19
|
-
usando o
|
|
20
|
-
|
|
21
|
-
Se você não se inscreveu para uma conta {{brandName}},
|
|
17
|
+
Obrigado por se inscrever para uma conta {{brandName}}!
|
|
18
|
+
Sua conta já está pronta — só falta confirmar seu endereço de e-mail
|
|
19
|
+
usando o link abaixo:<br>
|
|
20
|
+
Link de Confirmação: <a href="{{link}}">{{link}}</a><br>
|
|
21
|
+
Se você não se inscreveu para uma conta {{brandName}},
|
|
22
22
|
por favor ignore este e-mail.<br>
|
|
23
23
|
Atenciosamente,<br>
|
|
24
24
|
A equipe {{brandName}}
|
|
25
25
|
relations:
|
|
26
26
|
mail_var:
|
|
27
27
|
- name: name
|
|
28
|
-
- name:
|
|
28
|
+
- name: link
|
|
29
29
|
- slug: auth-email-verification-code
|
|
30
30
|
subject:
|
|
31
31
|
en: Your verification code
|
|
@@ -49,41 +49,54 @@
|
|
|
49
49
|
mail_var:
|
|
50
50
|
- name: name
|
|
51
51
|
- name: code
|
|
52
|
+
# O corpo abaixo usa escalar dobrado (>-) de proposito: MailService.interpolateTemplate
|
|
53
|
+
# troca toda quebra de linha por <br/> antes de compilar o Handlebars, entao um corpo
|
|
54
|
+
# em bloco literal (|) espalharia <br/> soltos no meio da tabela. Sob >- o YAML dobra
|
|
55
|
+
# tudo numa linha so — o que exige indentacao identica em TODAS as linhas: um espaco a
|
|
56
|
+
# mais transforma o resto em bloco literal e as quebras voltam.
|
|
52
57
|
- slug: auth-login-new-device
|
|
53
58
|
subject:
|
|
54
|
-
en: New
|
|
55
|
-
pt: Novo
|
|
59
|
+
en: New sign-in from an unrecognized device
|
|
60
|
+
pt: Novo acesso de um dispositivo desconhecido
|
|
56
61
|
body:
|
|
57
|
-
en:
|
|
58
|
-
Hello {{name}}
|
|
59
|
-
We
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
62
|
+
en: >-
|
|
63
|
+
<p style="margin:0 0 16px;">Hello {{name}},</p>
|
|
64
|
+
<p style="margin:0 0 20px;">We detected a sign-in to your {{brandName}} account from a device we have not seen before.</p>
|
|
65
|
+
<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="width:100%;border-collapse:collapse;background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;margin:0 0 20px;"><tr><td style="padding:12px 20px;"><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="width:100%;border-collapse:collapse;">
|
|
66
|
+
{{#if datetime}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Date and time</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{datetime}}</td></tr>{{/if}}
|
|
67
|
+
{{#if browser}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Browser</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{browser}}</td></tr>{{/if}}
|
|
68
|
+
{{#if os}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">System</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{os}}</td></tr>{{/if}}
|
|
69
|
+
{{#unless browser}}{{#unless os}}{{#if userAgent}}<tr><td colspan="2" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Device<br /><span style="font-size:13px;line-height:1.5;color:#334155;word-break:break-all;">{{userAgent}}</span></td></tr>{{/if}}{{/unless}}{{/unless}}
|
|
70
|
+
{{#if location}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Location</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{countryFlag}} {{location}}</td></tr>{{/if}}
|
|
71
|
+
{{#if ipAddress}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">IP address</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{ipAddress}}</td></tr>{{/if}}
|
|
72
|
+
</table></td></tr></table>
|
|
73
|
+
<p style="margin:0 0 16px;">If this was you, there is nothing else to do.</p>
|
|
74
|
+
<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="width:100%;border-collapse:collapse;margin:0 0 20px;"><tr><td style="padding:12px 16px;background:#fef2f2;border-left:4px solid #dc2626;font-size:15px;line-height:1.6;color:#7f1d1d;"><strong style="color:#7f1d1d;">If you do not recognize this sign-in</strong>, change your password right away and review the active sessions on your account.</td></tr></table>
|
|
75
|
+
<p style="margin:0;">Best regards,<br />The {{brandName}} Team</p>
|
|
76
|
+
pt: >-
|
|
77
|
+
<p style="margin:0 0 16px;">Olá {{name}},</p>
|
|
78
|
+
<p style="margin:0 0 20px;">Detectamos um acesso à sua conta {{brandName}} a partir de um dispositivo que ainda não conhecíamos.</p>
|
|
79
|
+
<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="width:100%;border-collapse:collapse;background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;margin:0 0 20px;"><tr><td style="padding:12px 20px;"><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="width:100%;border-collapse:collapse;">
|
|
80
|
+
{{#if datetime}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Data e hora</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{datetime}}</td></tr>{{/if}}
|
|
81
|
+
{{#if browser}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Navegador</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{browser}}</td></tr>{{/if}}
|
|
82
|
+
{{#if os}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Sistema</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{os}}</td></tr>{{/if}}
|
|
83
|
+
{{#unless browser}}{{#unless os}}{{#if userAgent}}<tr><td colspan="2" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Dispositivo<br /><span style="font-size:13px;line-height:1.5;color:#334155;word-break:break-all;">{{userAgent}}</span></td></tr>{{/if}}{{/unless}}{{/unless}}
|
|
84
|
+
{{#if location}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Localização</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{countryFlag}} {{location}}</td></tr>{{/if}}
|
|
85
|
+
{{#if ipAddress}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Endereço IP</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{ipAddress}}</td></tr>{{/if}}
|
|
86
|
+
</table></td></tr></table>
|
|
87
|
+
<p style="margin:0 0 16px;">Se foi você, não é preciso fazer nada.</p>
|
|
88
|
+
<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="width:100%;border-collapse:collapse;margin:0 0 20px;"><tr><td style="padding:12px 16px;background:#fef2f2;border-left:4px solid #dc2626;font-size:15px;line-height:1.6;color:#7f1d1d;"><strong style="color:#7f1d1d;">Se você não reconhece este acesso</strong>, altere sua senha imediatamente e revise as sessões ativas da sua conta.</td></tr></table>
|
|
89
|
+
<p style="margin:0;">Atenciosamente,<br />A equipe {{brandName}}</p>
|
|
81
90
|
relations:
|
|
82
91
|
mail_var:
|
|
92
|
+
- name: name
|
|
93
|
+
- name: datetime
|
|
94
|
+
- name: browser
|
|
95
|
+
- name: os
|
|
83
96
|
- name: userAgent
|
|
84
|
-
- name: ipAddress
|
|
85
97
|
- name: location
|
|
86
|
-
- name:
|
|
98
|
+
- name: countryFlag
|
|
99
|
+
- name: ipAddress
|
|
87
100
|
- slug: auth-forget-password
|
|
88
101
|
subject:
|
|
89
102
|
en: Reset your {{brandName}} password
|
|
@@ -132,39 +145,50 @@
|
|
|
132
145
|
relations:
|
|
133
146
|
mail_var:
|
|
134
147
|
- name: name
|
|
148
|
+
# Mesmo cartao de detalhes do auth-login-new-device — ver a nota sobre >- la em cima.
|
|
135
149
|
- slug: auth-change-password-notification
|
|
136
150
|
subject:
|
|
137
151
|
en: Your {{brandName}} password has been changed
|
|
138
152
|
pt: Sua senha do {{brandName}} foi alterada
|
|
139
153
|
body:
|
|
140
|
-
en:
|
|
141
|
-
Hello {{name}}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
154
|
+
en: >-
|
|
155
|
+
<p style="margin:0 0 16px;">Hello {{name}},</p>
|
|
156
|
+
<p style="margin:0 0 20px;">The password for your {{brandName}} account has just been changed.</p>
|
|
157
|
+
<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="width:100%;border-collapse:collapse;background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;margin:0 0 20px;"><tr><td style="padding:12px 20px;"><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="width:100%;border-collapse:collapse;">
|
|
158
|
+
{{#if datetime}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Date and time</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{datetime}}</td></tr>{{/if}}
|
|
159
|
+
{{#if browser}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Browser</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{browser}}</td></tr>{{/if}}
|
|
160
|
+
{{#if os}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">System</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{os}}</td></tr>{{/if}}
|
|
161
|
+
{{#unless browser}}{{#unless os}}{{#if userAgent}}<tr><td colspan="2" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Device<br /><span style="font-size:13px;line-height:1.5;color:#334155;word-break:break-all;">{{userAgent}}</span></td></tr>{{/if}}{{/unless}}{{/unless}}
|
|
162
|
+
{{#if location}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Location</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{countryFlag}} {{location}}</td></tr>{{/if}}
|
|
163
|
+
{{#if ipAddress}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">IP address</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{ipAddress}}</td></tr>{{/if}}
|
|
164
|
+
</table></td></tr></table>
|
|
165
|
+
<p style="margin:0 0 16px;">If this was you, there is nothing else to do.</p>
|
|
166
|
+
<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="width:100%;border-collapse:collapse;margin:0 0 20px;"><tr><td style="padding:12px 16px;background:#fef2f2;border-left:4px solid #dc2626;font-size:15px;line-height:1.6;color:#7f1d1d;"><strong style="color:#7f1d1d;">If you did not make this change</strong>, reset your password immediately and contact support.</td></tr></table>
|
|
167
|
+
<p style="margin:0;">Best regards,<br />The {{brandName}} Team</p>
|
|
168
|
+
pt: >-
|
|
169
|
+
<p style="margin:0 0 16px;">Olá {{name}},</p>
|
|
170
|
+
<p style="margin:0 0 20px;">A senha da sua conta {{brandName}} acabou de ser alterada.</p>
|
|
171
|
+
<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="width:100%;border-collapse:collapse;background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;margin:0 0 20px;"><tr><td style="padding:12px 20px;"><table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="width:100%;border-collapse:collapse;">
|
|
172
|
+
{{#if datetime}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Data e hora</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{datetime}}</td></tr>{{/if}}
|
|
173
|
+
{{#if browser}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Navegador</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{browser}}</td></tr>{{/if}}
|
|
174
|
+
{{#if os}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Sistema</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{os}}</td></tr>{{/if}}
|
|
175
|
+
{{#unless browser}}{{#unless os}}{{#if userAgent}}<tr><td colspan="2" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Dispositivo<br /><span style="font-size:13px;line-height:1.5;color:#334155;word-break:break-all;">{{userAgent}}</span></td></tr>{{/if}}{{/unless}}{{/unless}}
|
|
176
|
+
{{#if location}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Localização</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{countryFlag}} {{location}}</td></tr>{{/if}}
|
|
177
|
+
{{#if ipAddress}}<tr><td width="40%" valign="top" style="padding:7px 0;font-size:13px;line-height:1.5;color:#64748b;">Endereço IP</td><td valign="top" align="right" style="padding:7px 0 7px 16px;font-size:15px;line-height:1.5;color:#0f172a;font-weight:600;">{{ipAddress}}</td></tr>{{/if}}
|
|
178
|
+
</table></td></tr></table>
|
|
179
|
+
<p style="margin:0 0 16px;">Se foi você, não é preciso fazer nada.</p>
|
|
180
|
+
<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="width:100%;border-collapse:collapse;margin:0 0 20px;"><tr><td style="padding:12px 16px;background:#fef2f2;border-left:4px solid #dc2626;font-size:15px;line-height:1.6;color:#7f1d1d;"><strong style="color:#7f1d1d;">Se você não fez esta alteração</strong>, redefina sua senha imediatamente e entre em contato com o suporte.</td></tr></table>
|
|
181
|
+
<p style="margin:0;">Atenciosamente,<br />A equipe {{brandName}}</p>
|
|
162
182
|
relations:
|
|
163
183
|
mail_var:
|
|
184
|
+
- name: name
|
|
185
|
+
- name: datetime
|
|
186
|
+
- name: browser
|
|
187
|
+
- name: os
|
|
164
188
|
- name: userAgent
|
|
165
|
-
- name: ipAddress
|
|
166
189
|
- name: location
|
|
167
|
-
- name:
|
|
190
|
+
- name: countryFlag
|
|
191
|
+
- name: ipAddress
|
|
168
192
|
- slug: auth-mfa-code
|
|
169
193
|
subject:
|
|
170
194
|
en: Your {{brandName}} MFA Code
|
|
@@ -537,3 +561,115 @@
|
|
|
537
561
|
mail_var:
|
|
538
562
|
- name: name
|
|
539
563
|
- name: company
|
|
564
|
+
|
|
565
|
+
- slug: brclick-inscricao-confirmacao
|
|
566
|
+
subject:
|
|
567
|
+
en: BRClick registration confirmed — protocol {{protocolo}}
|
|
568
|
+
pt: Inscrição confirmada no BRClick — protocolo {{protocolo}}
|
|
569
|
+
body:
|
|
570
|
+
en: |
|
|
571
|
+
Hello {{name}},<br>
|
|
572
|
+
Your <strong>BRClick</strong> registration has been recorded.<br>
|
|
573
|
+
Protocol: <strong>{{protocolo}}</strong><br>
|
|
574
|
+
<br>
|
|
575
|
+
You are enrolled in:<br>
|
|
576
|
+
{{{turmas}}}
|
|
577
|
+
{{#if hasWaitlist}}
|
|
578
|
+
<br>
|
|
579
|
+
<strong style="color:#9c7a00;">Waiting list:</strong> these classes are full, so you are on the waiting list for:<br>
|
|
580
|
+
{{{turmasEspera}}}
|
|
581
|
+
If someone drops out, we will email you about the open spot.<br>
|
|
582
|
+
{{/if}}
|
|
583
|
+
{{#if hasUnavailable}}
|
|
584
|
+
<br>
|
|
585
|
+
<strong style="color:#b3261e;">Heads up:</strong> we could not confirm your spot in:<br>
|
|
586
|
+
{{{turmasIndisponiveis}}}
|
|
587
|
+
Our team will reach out to sort this out.<br>
|
|
588
|
+
{{/if}}
|
|
589
|
+
{{#if hasAccount}}
|
|
590
|
+
{{#if emailLinkSent}}
|
|
591
|
+
You already had an account on the training platform, but no password yet. We sent you a separate email with the link to set one.<br>
|
|
592
|
+
{{else}}
|
|
593
|
+
You already have an account on the training platform — sign in with your usual password to see your classes.<br>
|
|
594
|
+
Sign in: <a href="{{link}}">{{link}}</a><br>
|
|
595
|
+
{{/if}}
|
|
596
|
+
{{else}}
|
|
597
|
+
Your training platform account was created with the password you chose in the form.<br>
|
|
598
|
+
Sign in: <a href="{{link}}">{{link}}</a><br>
|
|
599
|
+
{{/if}}
|
|
600
|
+
<br>
|
|
601
|
+
<strong>Meanwhile, you can already get started:</strong><br>
|
|
602
|
+
1. Sign in to Hcode Training with the email and password from the form.<br>
|
|
603
|
+
2. {{#if logicCourseEnrolled}}You are already enrolled in the <strong>Programming Logic</strong> course — it's the prerequisite for the live classes, and the best place to start.{{else}}We are granting your access to the <strong>Programming Logic</strong> course, the prerequisite for the live classes; if it doesn't show up on your dashboard within a few hours, just reply to this email.{{/if}}<br>
|
|
604
|
+
3. Click the button below to start right now.<br>
|
|
605
|
+
<br>
|
|
606
|
+
<table role="presentation" cellspacing="0" cellpadding="0" border="0" style="width:100%;max-width:320px;">
|
|
607
|
+
<tr>
|
|
608
|
+
<td align="center" bgcolor="#1465b8" style="border-radius:10px;">
|
|
609
|
+
<a href="{{logicCourseUrl}}" target="_blank" style="display:block; padding:14px 20px; font-size:16px; line-height:1.1; font-weight:700; color:#ffffff; text-decoration:none;">🎓 Go to the Logic course</a>
|
|
610
|
+
</td>
|
|
611
|
+
</tr>
|
|
612
|
+
</table>
|
|
613
|
+
<br>
|
|
614
|
+
Best regards,<br>
|
|
615
|
+
The Hcode Team
|
|
616
|
+
pt: |
|
|
617
|
+
Olá {{name}},<br>
|
|
618
|
+
Sua inscrição no <strong>BRClick</strong> foi registrada.<br>
|
|
619
|
+
Protocolo: <strong>{{protocolo}}</strong><br>
|
|
620
|
+
<br>
|
|
621
|
+
Você está matriculado em:<br>
|
|
622
|
+
{{{turmas}}}
|
|
623
|
+
{{#if hasWaitlist}}
|
|
624
|
+
<br>
|
|
625
|
+
<strong style="color:#9c7a00;">Lista de espera:</strong> estas turmas já estão cheias, então você entrou na lista de espera de:<br>
|
|
626
|
+
{{{turmasEspera}}}
|
|
627
|
+
Se alguém desistir, avisamos você por e-mail sobre a vaga.<br>
|
|
628
|
+
{{/if}}
|
|
629
|
+
{{#if hasUnavailable}}
|
|
630
|
+
<br>
|
|
631
|
+
<strong style="color:#b3261e;">Atenção:</strong> não conseguimos confirmar sua vaga em:<br>
|
|
632
|
+
{{{turmasIndisponiveis}}}
|
|
633
|
+
Nossa equipe vai entrar em contato para resolver isso.<br>
|
|
634
|
+
{{/if}}
|
|
635
|
+
{{#if hasAccount}}
|
|
636
|
+
{{#if emailLinkSent}}
|
|
637
|
+
Você já tinha uma conta na plataforma de treinamentos, mas ainda sem senha. Enviamos um e-mail separado com o link para você defini-la.<br>
|
|
638
|
+
{{else}}
|
|
639
|
+
Você já tem conta na plataforma de treinamentos — entre com a sua senha de sempre para ver as aulas.<br>
|
|
640
|
+
Acessar: <a href="{{link}}">{{link}}</a><br>
|
|
641
|
+
{{/if}}
|
|
642
|
+
{{else}}
|
|
643
|
+
Sua conta na plataforma de treinamentos foi criada com a senha que você definiu no formulário.<br>
|
|
644
|
+
Acessar: <a href="{{link}}">{{link}}</a><br>
|
|
645
|
+
{{/if}}
|
|
646
|
+
<br>
|
|
647
|
+
<strong>Enquanto isso, já dá pra começar:</strong><br>
|
|
648
|
+
1. Entre no Hcode Training com o e-mail e a senha do cadastro.<br>
|
|
649
|
+
2. {{#if logicCourseEnrolled}}Você já está matriculado no curso <strong>Lógica de Programação</strong> — é o pré-requisito das turmas, e é por aí que vale começar.{{else}}Estamos liberando seu acesso ao curso <strong>Lógica de Programação</strong>, o pré-requisito das turmas; se não aparecer no seu painel em algumas horas, responda este e-mail.{{/if}}<br>
|
|
650
|
+
3. Clique no botão abaixo para começar agora mesmo.<br>
|
|
651
|
+
<br>
|
|
652
|
+
<table role="presentation" cellspacing="0" cellpadding="0" border="0" style="width:100%;max-width:320px;">
|
|
653
|
+
<tr>
|
|
654
|
+
<td align="center" bgcolor="#1465b8" style="border-radius:10px;">
|
|
655
|
+
<a href="{{logicCourseUrl}}" target="_blank" style="display:block; padding:14px 20px; font-size:16px; line-height:1.1; font-weight:700; color:#ffffff; text-decoration:none;">🎓 Acessar o curso de Lógica</a>
|
|
656
|
+
</td>
|
|
657
|
+
</tr>
|
|
658
|
+
</table>
|
|
659
|
+
<br>
|
|
660
|
+
Atenciosamente,<br>
|
|
661
|
+
A equipe Hcode
|
|
662
|
+
relations:
|
|
663
|
+
mail_var:
|
|
664
|
+
- name: name
|
|
665
|
+
- name: protocolo
|
|
666
|
+
- name: turmas
|
|
667
|
+
- name: link
|
|
668
|
+
- name: hasAccount
|
|
669
|
+
- name: emailLinkSent
|
|
670
|
+
- name: hasWaitlist
|
|
671
|
+
- name: turmasEspera
|
|
672
|
+
- name: hasUnavailable
|
|
673
|
+
- name: turmasIndisponiveis
|
|
674
|
+
- name: logicCourseUrl
|
|
675
|
+
- name: logicCourseEnrolled
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
- slug: default
|
|
2
2
|
is_default: true
|
|
3
3
|
# Shell que estava hardcoded em packages/api-mail/src/mail-template.ts.
|
|
4
|
-
# Tokens: {{{header}}} {{{content}}} {{{footer}}} {{subject}} {{brandName}} {{
|
|
4
|
+
# Tokens: {{{header}}} {{{content}}} {{{footer}}} {{subject}} {{brandName}} {{{brandMark}}}
|
|
5
|
+
# {{primaryColor}} {{primaryForeground}} {{year}} {{lang}}
|
|
6
|
+
# brandMark/primaryColor/primaryForeground vem das settings image-url, theme-primary-light
|
|
7
|
+
# e theme-primary-foreground-light (ver MailService.resolveLayout em packages/api-mail).
|
|
5
8
|
wrapper: |
|
|
6
9
|
<!DOCTYPE html>
|
|
7
10
|
<html lang="{{lang}}">
|
|
@@ -15,7 +18,7 @@
|
|
|
15
18
|
body {
|
|
16
19
|
margin: 0;
|
|
17
20
|
padding: 0;
|
|
18
|
-
background: #
|
|
21
|
+
background: #ffffff;
|
|
19
22
|
color: #1f2937;
|
|
20
23
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
21
24
|
}
|
|
@@ -24,9 +27,7 @@
|
|
|
24
27
|
}
|
|
25
28
|
.page {
|
|
26
29
|
width: 100%;
|
|
27
|
-
background:
|
|
28
|
-
radial-gradient(circle at top, rgba(245, 158, 11, 0.14), transparent 32%),
|
|
29
|
-
linear-gradient(180deg, #f8fafc 0%, #eef2f7 100%);
|
|
30
|
+
background: #ffffff;
|
|
30
31
|
padding: 32px 16px;
|
|
31
32
|
}
|
|
32
33
|
.shell {
|
|
@@ -37,12 +38,21 @@
|
|
|
37
38
|
.hero {
|
|
38
39
|
padding: 0 0 18px;
|
|
39
40
|
}
|
|
41
|
+
.brand-mark {
|
|
42
|
+
margin: 0 0 16px;
|
|
43
|
+
}
|
|
44
|
+
.brand-mark img {
|
|
45
|
+
display: block;
|
|
46
|
+
height: 32px;
|
|
47
|
+
max-height: 32px;
|
|
48
|
+
width: auto;
|
|
49
|
+
}
|
|
40
50
|
.brand {
|
|
41
51
|
display: inline-block;
|
|
42
52
|
padding: 8px 14px;
|
|
43
53
|
border-radius: 999px;
|
|
44
|
-
background:
|
|
45
|
-
color:
|
|
54
|
+
background: {{primaryColor}};
|
|
55
|
+
color: {{primaryForeground}};
|
|
46
56
|
font-size: 12px;
|
|
47
57
|
font-weight: 700;
|
|
48
58
|
letter-spacing: 0.08em;
|
|
@@ -50,24 +60,23 @@
|
|
|
50
60
|
}
|
|
51
61
|
.subject {
|
|
52
62
|
margin: 18px 0 0;
|
|
53
|
-
font-size:
|
|
54
|
-
line-height: 1.
|
|
55
|
-
font-weight:
|
|
63
|
+
font-size: 24px;
|
|
64
|
+
line-height: 1.3;
|
|
65
|
+
font-weight: 700;
|
|
56
66
|
color: #0f172a;
|
|
57
67
|
}
|
|
58
68
|
.panel {
|
|
59
69
|
background: #ffffff;
|
|
60
|
-
border: 1px solid
|
|
61
|
-
border-radius:
|
|
70
|
+
border: 1px solid #e2e8f0;
|
|
71
|
+
border-radius: 12px;
|
|
62
72
|
overflow: hidden;
|
|
63
|
-
box-shadow: 0 24px 60px rgba(15, 23, 42, 0.08);
|
|
64
73
|
}
|
|
65
74
|
.panel-accent {
|
|
66
|
-
height:
|
|
67
|
-
background:
|
|
75
|
+
height: 4px;
|
|
76
|
+
background: {{primaryColor}};
|
|
68
77
|
}
|
|
69
78
|
.content {
|
|
70
|
-
padding:
|
|
79
|
+
padding: 32px 34px 28px;
|
|
71
80
|
font-size: 16px;
|
|
72
81
|
line-height: 1.7;
|
|
73
82
|
color: #334155;
|
|
@@ -76,12 +85,13 @@
|
|
|
76
85
|
.content h2,
|
|
77
86
|
.content h3 {
|
|
78
87
|
margin: 0 0 16px;
|
|
79
|
-
line-height: 1.
|
|
88
|
+
line-height: 1.3;
|
|
89
|
+
font-weight: 700;
|
|
80
90
|
color: #0f172a;
|
|
81
91
|
}
|
|
82
|
-
.content h1 { font-size:
|
|
83
|
-
.content h2 { font-size:
|
|
84
|
-
.content h3 { font-size:
|
|
92
|
+
.content h1 { font-size: 24px; }
|
|
93
|
+
.content h2 { font-size: 20px; }
|
|
94
|
+
.content h3 { font-size: 17px; }
|
|
85
95
|
.content p,
|
|
86
96
|
.content ul,
|
|
87
97
|
.content ol,
|
|
@@ -96,7 +106,7 @@
|
|
|
96
106
|
margin-top: 8px;
|
|
97
107
|
}
|
|
98
108
|
.content a {
|
|
99
|
-
color:
|
|
109
|
+
color: {{primaryColor}};
|
|
100
110
|
font-weight: 600;
|
|
101
111
|
text-decoration: none;
|
|
102
112
|
}
|
|
@@ -105,10 +115,10 @@
|
|
|
105
115
|
}
|
|
106
116
|
.content blockquote {
|
|
107
117
|
padding: 14px 16px;
|
|
108
|
-
border-left:
|
|
109
|
-
border-radius: 0
|
|
110
|
-
background: #
|
|
111
|
-
color: #
|
|
118
|
+
border-left: 3px solid {{primaryColor}};
|
|
119
|
+
border-radius: 0 8px 8px 0;
|
|
120
|
+
background: #f8fafc;
|
|
121
|
+
color: #334155;
|
|
112
122
|
}
|
|
113
123
|
.content hr {
|
|
114
124
|
margin: 24px 0;
|
|
@@ -117,24 +127,24 @@
|
|
|
117
127
|
}
|
|
118
128
|
.content img {
|
|
119
129
|
max-width: 100%;
|
|
120
|
-
border-radius:
|
|
130
|
+
border-radius: 8px;
|
|
121
131
|
}
|
|
122
132
|
.footer {
|
|
123
|
-
padding:
|
|
133
|
+
padding: 24px 12px 0;
|
|
124
134
|
font-size: 12px;
|
|
125
135
|
line-height: 1.6;
|
|
126
136
|
text-align: center;
|
|
127
|
-
color: #
|
|
137
|
+
color: #94a3b8;
|
|
128
138
|
}
|
|
129
139
|
@media only screen and (max-width: 640px) {
|
|
130
140
|
.page {
|
|
131
141
|
padding: 20px 12px;
|
|
132
142
|
}
|
|
133
143
|
.subject {
|
|
134
|
-
font-size:
|
|
144
|
+
font-size: 21px;
|
|
135
145
|
}
|
|
136
146
|
.content {
|
|
137
|
-
padding:
|
|
147
|
+
padding: 24px 20px 22px;
|
|
138
148
|
font-size: 15px;
|
|
139
149
|
}
|
|
140
150
|
}
|
|
@@ -153,7 +163,7 @@
|
|
|
153
163
|
<tr>
|
|
154
164
|
<td>
|
|
155
165
|
<div class="panel">
|
|
156
|
-
<div class="panel-accent"></div>
|
|
166
|
+
<div class="panel-accent" style="background:{{primaryColor}};"></div>
|
|
157
167
|
<div class="content">
|
|
158
168
|
{{{content}}}
|
|
159
169
|
</div>
|
|
@@ -176,10 +186,10 @@
|
|
|
176
186
|
pt: Layout padrão
|
|
177
187
|
header:
|
|
178
188
|
en: |
|
|
179
|
-
<div class="brand">{{
|
|
189
|
+
<div class="brand-mark">{{{brandMark}}}</div>
|
|
180
190
|
<div class="subject">{{subject}}</div>
|
|
181
191
|
pt: |
|
|
182
|
-
<div class="brand">{{
|
|
192
|
+
<div class="brand-mark">{{{brandMark}}}</div>
|
|
183
193
|
<div class="subject">{{subject}}</div>
|
|
184
194
|
footer:
|
|
185
195
|
en: |
|
package/hedhog/data/menu.yaml
CHANGED
package/hedhog/data/role.yaml
CHANGED
|
@@ -19,6 +19,13 @@
|
|
|
19
19
|
description:
|
|
20
20
|
en: Access to administrative privileges related to users.
|
|
21
21
|
pt: Acesso a privilégios administrativos relacionados á usuários.
|
|
22
|
+
- slug: admin-user-permission
|
|
23
|
+
name:
|
|
24
|
+
en: User Permission Administrator
|
|
25
|
+
pt: Administrador de Permissões de Usuário
|
|
26
|
+
description:
|
|
27
|
+
en: Can assign and remove roles from users.
|
|
28
|
+
pt: Pode atribuir e remover papéis de usuários.
|
|
22
29
|
- slug: admin-mail
|
|
23
30
|
name:
|
|
24
31
|
en: Admin Mail
|
|
@@ -47,4 +54,13 @@
|
|
|
47
54
|
description:
|
|
48
55
|
en: Access to manage integration profiles and their credentials.
|
|
49
56
|
pt: Acesso para gerenciar perfis de integração e suas credenciais.
|
|
57
|
+
# O slug precisa começar com "admin": o GuardPage do painel só deixa entrar quem
|
|
58
|
+
# tem algum papel com esse prefixo.
|
|
59
|
+
- slug: admin-impersonation
|
|
60
|
+
name:
|
|
61
|
+
en: Access Simulation
|
|
62
|
+
pt: Simulação de Acesso
|
|
63
|
+
description:
|
|
64
|
+
en: Can open a short, audited session as another user. Cannot target administrators.
|
|
65
|
+
pt: Pode abrir uma sessão curta e auditada como outro usuário. Não pode simular administradores.
|
|
50
66
|
|