@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
|
@@ -51,12 +51,12 @@ export declare class DashboardComponentController {
|
|
|
51
51
|
created_at: Date;
|
|
52
52
|
updated_at: Date;
|
|
53
53
|
slug: string;
|
|
54
|
+
width: number;
|
|
54
55
|
library_slug: string;
|
|
55
56
|
min_width: number;
|
|
56
57
|
max_width: number | null;
|
|
57
58
|
min_height: number;
|
|
58
59
|
max_height: number | null;
|
|
59
|
-
width: number;
|
|
60
60
|
height: number;
|
|
61
61
|
is_resizable: boolean;
|
|
62
62
|
}>;
|
|
@@ -85,12 +85,12 @@ export declare class DashboardComponentController {
|
|
|
85
85
|
created_at: Date;
|
|
86
86
|
updated_at: Date;
|
|
87
87
|
slug: string;
|
|
88
|
+
width: number;
|
|
88
89
|
library_slug: string;
|
|
89
90
|
min_width: number;
|
|
90
91
|
max_width: number | null;
|
|
91
92
|
min_height: number;
|
|
92
93
|
max_height: number | null;
|
|
93
|
-
width: number;
|
|
94
94
|
height: number;
|
|
95
95
|
is_resizable: boolean;
|
|
96
96
|
}>;
|
|
@@ -119,12 +119,12 @@ export declare class DashboardComponentController {
|
|
|
119
119
|
created_at: Date;
|
|
120
120
|
updated_at: Date;
|
|
121
121
|
slug: string;
|
|
122
|
+
width: number;
|
|
122
123
|
library_slug: string;
|
|
123
124
|
min_width: number;
|
|
124
125
|
max_width: number | null;
|
|
125
126
|
min_height: number;
|
|
126
127
|
max_height: number | null;
|
|
127
|
-
width: number;
|
|
128
128
|
height: number;
|
|
129
129
|
is_resizable: boolean;
|
|
130
130
|
}>;
|
|
@@ -133,12 +133,12 @@ export declare class DashboardComponentController {
|
|
|
133
133
|
created_at: Date;
|
|
134
134
|
updated_at: Date;
|
|
135
135
|
slug: string;
|
|
136
|
+
width: number;
|
|
136
137
|
library_slug: string;
|
|
137
138
|
min_width: number;
|
|
138
139
|
max_width: number | null;
|
|
139
140
|
min_height: number;
|
|
140
141
|
max_height: number | null;
|
|
141
|
-
width: number;
|
|
142
142
|
height: number;
|
|
143
143
|
is_resizable: boolean;
|
|
144
144
|
}>;
|
|
@@ -53,12 +53,12 @@ export declare class DashboardComponentService {
|
|
|
53
53
|
created_at: Date;
|
|
54
54
|
updated_at: Date;
|
|
55
55
|
slug: string;
|
|
56
|
+
width: number;
|
|
56
57
|
library_slug: string;
|
|
57
58
|
min_width: number;
|
|
58
59
|
max_width: number | null;
|
|
59
60
|
min_height: number;
|
|
60
61
|
max_height: number | null;
|
|
61
|
-
width: number;
|
|
62
62
|
height: number;
|
|
63
63
|
is_resizable: boolean;
|
|
64
64
|
}>;
|
|
@@ -87,12 +87,12 @@ export declare class DashboardComponentService {
|
|
|
87
87
|
created_at: Date;
|
|
88
88
|
updated_at: Date;
|
|
89
89
|
slug: string;
|
|
90
|
+
width: number;
|
|
90
91
|
library_slug: string;
|
|
91
92
|
min_width: number;
|
|
92
93
|
max_width: number | null;
|
|
93
94
|
min_height: number;
|
|
94
95
|
max_height: number | null;
|
|
95
|
-
width: number;
|
|
96
96
|
height: number;
|
|
97
97
|
is_resizable: boolean;
|
|
98
98
|
}>;
|
|
@@ -121,12 +121,12 @@ export declare class DashboardComponentService {
|
|
|
121
121
|
created_at: Date;
|
|
122
122
|
updated_at: Date;
|
|
123
123
|
slug: string;
|
|
124
|
+
width: number;
|
|
124
125
|
library_slug: string;
|
|
125
126
|
min_width: number;
|
|
126
127
|
max_width: number | null;
|
|
127
128
|
min_height: number;
|
|
128
129
|
max_height: number | null;
|
|
129
|
-
width: number;
|
|
130
130
|
height: number;
|
|
131
131
|
is_resizable: boolean;
|
|
132
132
|
}>;
|
|
@@ -135,12 +135,12 @@ export declare class DashboardComponentService {
|
|
|
135
135
|
created_at: Date;
|
|
136
136
|
updated_at: Date;
|
|
137
137
|
slug: string;
|
|
138
|
+
width: number;
|
|
138
139
|
library_slug: string;
|
|
139
140
|
min_width: number;
|
|
140
141
|
max_width: number | null;
|
|
141
142
|
min_height: number;
|
|
142
143
|
max_height: number | null;
|
|
143
|
-
width: number;
|
|
144
144
|
height: number;
|
|
145
145
|
is_resizable: boolean;
|
|
146
146
|
}>;
|
|
@@ -97,12 +97,12 @@ export declare class DashboardComponentRoleController {
|
|
|
97
97
|
created_at: Date;
|
|
98
98
|
updated_at: Date;
|
|
99
99
|
slug: string;
|
|
100
|
+
width: number;
|
|
100
101
|
library_slug: string;
|
|
101
102
|
min_width: number;
|
|
102
103
|
max_width: number | null;
|
|
103
104
|
min_height: number;
|
|
104
105
|
max_height: number | null;
|
|
105
|
-
width: number;
|
|
106
106
|
height: number;
|
|
107
107
|
is_resizable: boolean;
|
|
108
108
|
};
|
|
@@ -100,12 +100,12 @@ export declare class DashboardComponentRoleService {
|
|
|
100
100
|
created_at: Date;
|
|
101
101
|
updated_at: Date;
|
|
102
102
|
slug: string;
|
|
103
|
+
width: number;
|
|
103
104
|
library_slug: string;
|
|
104
105
|
min_width: number;
|
|
105
106
|
max_width: number | null;
|
|
106
107
|
min_height: number;
|
|
107
108
|
max_height: number | null;
|
|
108
|
-
width: number;
|
|
109
109
|
height: number;
|
|
110
110
|
is_resizable: boolean;
|
|
111
111
|
};
|
|
@@ -314,12 +314,12 @@ export declare class DashboardCoreController {
|
|
|
314
314
|
created_at: Date;
|
|
315
315
|
updated_at: Date;
|
|
316
316
|
slug: string;
|
|
317
|
+
width: number;
|
|
317
318
|
library_slug: string;
|
|
318
319
|
min_width: number;
|
|
319
320
|
max_width: number | null;
|
|
320
321
|
min_height: number;
|
|
321
322
|
max_height: number | null;
|
|
322
|
-
width: number;
|
|
323
323
|
height: number;
|
|
324
324
|
is_resizable: boolean;
|
|
325
325
|
};
|
|
@@ -327,8 +327,8 @@ export declare class DashboardCoreController {
|
|
|
327
327
|
id: number;
|
|
328
328
|
created_at: Date;
|
|
329
329
|
updated_at: Date;
|
|
330
|
-
component_id: number;
|
|
331
330
|
width: number;
|
|
331
|
+
component_id: number;
|
|
332
332
|
height: number;
|
|
333
333
|
dashboard_id: number;
|
|
334
334
|
x_axis: number;
|
|
@@ -181,12 +181,12 @@ export declare class DashboardCoreService {
|
|
|
181
181
|
created_at: Date;
|
|
182
182
|
updated_at: Date;
|
|
183
183
|
slug: string;
|
|
184
|
+
width: number;
|
|
184
185
|
library_slug: string;
|
|
185
186
|
min_width: number;
|
|
186
187
|
max_width: number | null;
|
|
187
188
|
min_height: number;
|
|
188
189
|
max_height: number | null;
|
|
189
|
-
width: number;
|
|
190
190
|
height: number;
|
|
191
191
|
is_resizable: boolean;
|
|
192
192
|
};
|
|
@@ -194,8 +194,8 @@ export declare class DashboardCoreService {
|
|
|
194
194
|
id: number;
|
|
195
195
|
created_at: Date;
|
|
196
196
|
updated_at: Date;
|
|
197
|
-
component_id: number;
|
|
198
197
|
width: number;
|
|
198
|
+
component_id: number;
|
|
199
199
|
height: number;
|
|
200
200
|
dashboard_id: number;
|
|
201
201
|
x_axis: number;
|
|
@@ -26,12 +26,12 @@ export declare class DashboardItemController {
|
|
|
26
26
|
created_at: Date;
|
|
27
27
|
updated_at: Date;
|
|
28
28
|
slug: string;
|
|
29
|
+
width: number;
|
|
29
30
|
library_slug: string;
|
|
30
31
|
min_width: number;
|
|
31
32
|
max_width: number | null;
|
|
32
33
|
min_height: number;
|
|
33
34
|
max_height: number | null;
|
|
34
|
-
width: number;
|
|
35
35
|
height: number;
|
|
36
36
|
is_resizable: boolean;
|
|
37
37
|
};
|
|
@@ -39,8 +39,8 @@ export declare class DashboardItemController {
|
|
|
39
39
|
id: number;
|
|
40
40
|
created_at: Date;
|
|
41
41
|
updated_at: Date;
|
|
42
|
-
component_id: number;
|
|
43
42
|
width: number;
|
|
43
|
+
component_id: number;
|
|
44
44
|
height: number;
|
|
45
45
|
dashboard_id: number;
|
|
46
46
|
x_axis: number;
|
|
@@ -30,12 +30,12 @@ export declare class DashboardItemService {
|
|
|
30
30
|
created_at: Date;
|
|
31
31
|
updated_at: Date;
|
|
32
32
|
slug: string;
|
|
33
|
+
width: number;
|
|
33
34
|
library_slug: string;
|
|
34
35
|
min_width: number;
|
|
35
36
|
max_width: number | null;
|
|
36
37
|
min_height: number;
|
|
37
38
|
max_height: number | null;
|
|
38
|
-
width: number;
|
|
39
39
|
height: number;
|
|
40
40
|
is_resizable: boolean;
|
|
41
41
|
};
|
|
@@ -43,8 +43,8 @@ export declare class DashboardItemService {
|
|
|
43
43
|
id: number;
|
|
44
44
|
created_at: Date;
|
|
45
45
|
updated_at: Date;
|
|
46
|
-
component_id: number;
|
|
47
46
|
width: number;
|
|
47
|
+
component_id: number;
|
|
48
48
|
height: number;
|
|
49
49
|
dashboard_id: number;
|
|
50
50
|
x_axis: number;
|
|
@@ -26,6 +26,7 @@ export declare class FileController {
|
|
|
26
26
|
location: string;
|
|
27
27
|
mimetype_id: number;
|
|
28
28
|
size: number;
|
|
29
|
+
is_private: boolean;
|
|
29
30
|
}>;
|
|
30
31
|
getTempOpenURL(id: number, req: Request): Promise<{
|
|
31
32
|
url: string;
|
|
@@ -34,7 +35,12 @@ export declare class FileController {
|
|
|
34
35
|
url: string;
|
|
35
36
|
}>;
|
|
36
37
|
download(token: string, res: Response, locale: string): Promise<void>;
|
|
37
|
-
|
|
38
|
+
/**
|
|
39
|
+
* `w`/`f`/`q` request a resized variant. Widths outside the configured
|
|
40
|
+
* allowlist are ignored and the original is served, so a stale URL sitting in
|
|
41
|
+
* someone's cached HTML degrades instead of failing.
|
|
42
|
+
*/
|
|
43
|
+
openImage(id: number, req: Request, res: Response, locale: string, width?: string, format?: string, quality?: string): Promise<void>;
|
|
38
44
|
open(token: string, req: Request, res: Response, locale: string): Promise<void>;
|
|
39
45
|
upload(file: MulterFile, body: UploadFileDTO): Promise<{
|
|
40
46
|
id: number;
|
|
@@ -46,6 +52,7 @@ export declare class FileController {
|
|
|
46
52
|
location: string;
|
|
47
53
|
mimetype_id: number;
|
|
48
54
|
size: number;
|
|
55
|
+
is_private: boolean;
|
|
49
56
|
}>;
|
|
50
57
|
delete(data: DeleteDTO, locale: string): Promise<number[]>;
|
|
51
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.controller.d.ts","sourceRoot":"","sources":["../../src/file/file.controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file.controller.d.ts","sourceRoot":"","sources":["../../src/file/file.controller.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAO5C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAQ7C,qBAEa,cAAc;IAKvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJ9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;gBAIvC,WAAW,EAAE,WAAW;IAG3C,OAAO,CAAC,uBAAuB;IAsCzB,IAAI,CAAe,gBAAgB,KAAA;;;;;;;;;IAKnC,IAAI,CAA4B,EAAE,KAAA;;;;;;;;;;;;IAKlC,cAAc,CACS,EAAE,EAAE,MAAM,EAC9B,GAAG,EAAE,OAAO;;;IAYb,UAAU,CACa,EAAE,EAAE,MAAM,EAC9B,GAAG,EAAE,OAAO;;;IAajB,QAAQ,CACI,KAAK,EAAE,MAAM,EACtB,GAAG,EAAE,QAAQ,EACV,MAAM,EAAE,MAAM;IA8B1B;;;;OAIG;IAGG,SAAS,CACc,EAAE,EAAE,MAAM,EAC9B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACV,MAAM,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM;IAkBxB,IAAI,CACQ,KAAK,EAAE,MAAM,EACtB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACV,MAAM,EAAE,MAAM;IAyDpB,MAAM,CACM,IAAI,EAAE,UAAU,EACxB,IAAI,EAAE,aAAa;;;;;;;;;;;;IA6BvB,MAAM,CAAS,IAAI,EAAE,SAAS,EAAY,MAAM,EAAE,MAAM;CAG/D"}
|
|
@@ -23,11 +23,18 @@ const api_pagination_1 = require("@hed-hog/api-pagination");
|
|
|
23
23
|
const common_1 = require("@nestjs/common");
|
|
24
24
|
const platform_express_1 = require("@nestjs/platform-express");
|
|
25
25
|
const fs_1 = require("fs");
|
|
26
|
+
const promises_1 = require("fs/promises");
|
|
26
27
|
const handlebars_1 = __importDefault(require("handlebars"));
|
|
28
|
+
const multer_1 = require("multer");
|
|
29
|
+
const os_1 = require("os");
|
|
27
30
|
const path_1 = require("path");
|
|
28
31
|
const delete_dto_1 = require("./dto/delete.dto");
|
|
29
32
|
const upload_dto_1 = require("./dto/upload.dto");
|
|
30
33
|
const file_service_1 = require("./file.service");
|
|
34
|
+
// Teto duro do multipart, avaliado enquanto o corpo ainda está chegando. É
|
|
35
|
+
// diferente do setting `storage-max-size`, que só roda depois do arquivo inteiro
|
|
36
|
+
// já estar recebido e por isso nunca serviu de proteção de recurso.
|
|
37
|
+
const MAX_UPLOAD_BYTES = Number(process.env.STORAGE_MAX_UPLOAD_BYTES) || 2 * 1024 * 1024 * 1024;
|
|
31
38
|
let FileController = FileController_1 = class FileController {
|
|
32
39
|
constructor(fileService) {
|
|
33
40
|
this.fileService = fileService;
|
|
@@ -73,7 +80,7 @@ let FileController = FileController_1 = class FileController {
|
|
|
73
80
|
async getTempOpenURL(id, req) {
|
|
74
81
|
const file = await this.fileService.get(id);
|
|
75
82
|
const token = this.fileService.createDownloadToken(file.path, 3600);
|
|
76
|
-
const origin =
|
|
83
|
+
const origin = await this.fileService.resolvePublicBaseUrl(req);
|
|
77
84
|
return {
|
|
78
85
|
url: `${origin}/file/open/${encodeURIComponent(token)}`,
|
|
79
86
|
};
|
|
@@ -81,7 +88,7 @@ let FileController = FileController_1 = class FileController {
|
|
|
81
88
|
async getTempURL(id, req) {
|
|
82
89
|
const file = await this.fileService.get(id);
|
|
83
90
|
const token = this.fileService.createDownloadToken(file.path, 3600);
|
|
84
|
-
const origin =
|
|
91
|
+
const origin = await this.fileService.resolvePublicBaseUrl(req);
|
|
85
92
|
return {
|
|
86
93
|
url: `${origin}/file/download/${encodeURIComponent(token)}`,
|
|
87
94
|
};
|
|
@@ -107,9 +114,14 @@ let FileController = FileController_1 = class FileController {
|
|
|
107
114
|
return;
|
|
108
115
|
}
|
|
109
116
|
}
|
|
110
|
-
|
|
117
|
+
/**
|
|
118
|
+
* `w`/`f`/`q` request a resized variant. Widths outside the configured
|
|
119
|
+
* allowlist are ignored and the original is served, so a stale URL sitting in
|
|
120
|
+
* someone's cached HTML degrades instead of failing.
|
|
121
|
+
*/
|
|
122
|
+
async openImage(id, req, res, locale, width, format, quality) {
|
|
111
123
|
try {
|
|
112
|
-
await this.fileService.serveImageById(locale, id, req.headers['if-none-match'], res);
|
|
124
|
+
await this.fileService.serveImageById(locale, id, req.headers['if-none-match'], res, { width, format, quality });
|
|
113
125
|
}
|
|
114
126
|
catch (error) {
|
|
115
127
|
const html = this.renderDownloadErrorHtml(locale, error);
|
|
@@ -143,11 +155,31 @@ let FileController = FileController_1 = class FileController {
|
|
|
143
155
|
return;
|
|
144
156
|
}
|
|
145
157
|
}
|
|
158
|
+
// Grava o multipart em disco em vez de bufferizar na RAM: o memoryStorage padrão
|
|
159
|
+
// do multer fazia um Buffer.concat do arquivo inteiro antes de o handler rodar,
|
|
160
|
+
// o que derrubava o pod por OOM em uploads grandes (ex.: masters de vídeo do LMS
|
|
161
|
+
// de ~450 MB contra um limite de 1Gi). Daqui em diante o arquivo vai para o
|
|
162
|
+
// storage por streaming, via uploadFromPath.
|
|
146
163
|
async upload(file, body) {
|
|
164
|
+
if (!(file === null || file === void 0 ? void 0 : file.path)) {
|
|
165
|
+
throw new common_1.BadRequestException(`No file provided`);
|
|
166
|
+
}
|
|
147
167
|
const destination = body.destination || 'files';
|
|
148
168
|
const maxWidth = Number(body.maxWidth) || undefined;
|
|
149
169
|
const maxHeight = Number(body.maxHeight) || undefined;
|
|
150
|
-
|
|
170
|
+
try {
|
|
171
|
+
return await this.fileService.uploadFromPath(destination, file.path, {
|
|
172
|
+
originalname: file.originalname,
|
|
173
|
+
mimetype: file.mimetype,
|
|
174
|
+
size: file.size,
|
|
175
|
+
encoding: file.encoding,
|
|
176
|
+
resize: { maxWidth, maxHeight },
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
finally {
|
|
180
|
+
// Sem isto o diskStorage troca o OOM por disk pressure no nó.
|
|
181
|
+
await (0, promises_1.rm)(file.path, { force: true }).catch((error) => this.logger.warn(`Failed to remove temporary upload ${file.path}: ${error === null || error === void 0 ? void 0 : error.message}`));
|
|
182
|
+
}
|
|
151
183
|
}
|
|
152
184
|
async delete(data, locale) {
|
|
153
185
|
return this.fileService.delete(locale, data);
|
|
@@ -201,8 +233,11 @@ __decorate([
|
|
|
201
233
|
__param(1, (0, common_1.Req)()),
|
|
202
234
|
__param(2, (0, common_1.Res)()),
|
|
203
235
|
__param(3, (0, api_locale_1.Locale)()),
|
|
236
|
+
__param(4, (0, common_1.Query)('w')),
|
|
237
|
+
__param(5, (0, common_1.Query)('f')),
|
|
238
|
+
__param(6, (0, common_1.Query)('q')),
|
|
204
239
|
__metadata("design:type", Function),
|
|
205
|
-
__metadata("design:paramtypes", [Number, Object, Object, String]),
|
|
240
|
+
__metadata("design:paramtypes", [Number, Object, Object, String, String, String, String]),
|
|
206
241
|
__metadata("design:returntype", Promise)
|
|
207
242
|
], FileController.prototype, "openImage", null);
|
|
208
243
|
__decorate([
|
|
@@ -218,7 +253,10 @@ __decorate([
|
|
|
218
253
|
], FileController.prototype, "open", null);
|
|
219
254
|
__decorate([
|
|
220
255
|
(0, common_1.Post)(),
|
|
221
|
-
(0, common_1.UseInterceptors)((0, platform_express_1.FileInterceptor)('file'
|
|
256
|
+
(0, common_1.UseInterceptors)((0, platform_express_1.FileInterceptor)('file', {
|
|
257
|
+
storage: (0, multer_1.diskStorage)({ destination: (0, os_1.tmpdir)() }),
|
|
258
|
+
limits: { fileSize: MAX_UPLOAD_BYTES },
|
|
259
|
+
})),
|
|
222
260
|
__param(0, (0, common_1.UploadedFile)()),
|
|
223
261
|
__param(1, (0, common_1.Body)()),
|
|
224
262
|
__metadata("design:type", Function),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.controller.js","sourceRoot":"","sources":["../../src/file/file.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,sCAA4C;AAC5C,oDAA4D;AAC5D,4DAAqD;AACrD,
|
|
1
|
+
{"version":3,"file":"file.controller.js","sourceRoot":"","sources":["../../src/file/file.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,17 @@ import { PaginationDTO, PaginationService } from '@hed-hog/api-pagination';
|
|
|
2
2
|
import { PrismaService } from '@hed-hog/api-prisma';
|
|
3
3
|
import { OnModuleInit } from '@nestjs/common';
|
|
4
4
|
import { JwtService } from '@nestjs/jwt';
|
|
5
|
+
import type { Request } from 'express';
|
|
5
6
|
import { SettingService } from '../setting/setting.service';
|
|
6
7
|
import { DeleteDTO } from './dto/delete.dto';
|
|
7
8
|
import { ImageOptimizationService } from './image-optimization.service';
|
|
8
9
|
import { AbstractProvider } from './provider/abstract.provider';
|
|
10
|
+
/** Raw `?w=`/`?f=`/`?q=` query values for the public image endpoint. */
|
|
11
|
+
export type ImageVariantRequest = {
|
|
12
|
+
width?: number | string;
|
|
13
|
+
format?: string;
|
|
14
|
+
quality?: number | string;
|
|
15
|
+
};
|
|
9
16
|
export declare class FileService implements OnModuleInit {
|
|
10
17
|
private readonly prismaService;
|
|
11
18
|
private readonly paginationService;
|
|
@@ -37,6 +44,7 @@ export declare class FileService implements OnModuleInit {
|
|
|
37
44
|
location: string;
|
|
38
45
|
mimetype_id: number;
|
|
39
46
|
size: number;
|
|
47
|
+
is_private: boolean;
|
|
40
48
|
}>;
|
|
41
49
|
private mapStorageNotFoundError;
|
|
42
50
|
openReadStreamById(fileId: number): Promise<{
|
|
@@ -57,6 +65,7 @@ export declare class FileService implements OnModuleInit {
|
|
|
57
65
|
location: string;
|
|
58
66
|
mimetype_id: number;
|
|
59
67
|
size: number;
|
|
68
|
+
is_private: boolean;
|
|
60
69
|
};
|
|
61
70
|
stream: any;
|
|
62
71
|
size: number;
|
|
@@ -79,6 +88,7 @@ export declare class FileService implements OnModuleInit {
|
|
|
79
88
|
location: string;
|
|
80
89
|
mimetype_id: number;
|
|
81
90
|
size: number;
|
|
91
|
+
is_private: boolean;
|
|
82
92
|
};
|
|
83
93
|
stream: any;
|
|
84
94
|
totalSize: number;
|
|
@@ -107,6 +117,7 @@ export declare class FileService implements OnModuleInit {
|
|
|
107
117
|
location: string;
|
|
108
118
|
mimetype_id: number;
|
|
109
119
|
size: number;
|
|
120
|
+
is_private: boolean;
|
|
110
121
|
};
|
|
111
122
|
path: string;
|
|
112
123
|
size: number;
|
|
@@ -129,9 +140,25 @@ export declare class FileService implements OnModuleInit {
|
|
|
129
140
|
location: string;
|
|
130
141
|
mimetype_id: number;
|
|
131
142
|
size: number;
|
|
143
|
+
is_private: boolean;
|
|
132
144
|
};
|
|
133
145
|
buffer: Buffer<ArrayBuffer>;
|
|
134
146
|
}>;
|
|
147
|
+
/**
|
|
148
|
+
* Renderiza um cartão social 1200x630 (JPEG) a partir de arquivos do acervo.
|
|
149
|
+
*
|
|
150
|
+
* Devolve `null` quando não há arquivo utilizável — quem chama deve responder
|
|
151
|
+
* 404 e deixar o consumidor cair na imagem padrão da marca, nunca 500: do
|
|
152
|
+
* outro lado costuma haver um robô de link preview.
|
|
153
|
+
*/
|
|
154
|
+
renderShareCard(options: {
|
|
155
|
+
backgroundFileId?: number | null;
|
|
156
|
+
overlayFileId?: number | null;
|
|
157
|
+
background?: string | null;
|
|
158
|
+
}): Promise<{
|
|
159
|
+
buffer: Buffer;
|
|
160
|
+
contentType: string;
|
|
161
|
+
} | null>;
|
|
135
162
|
getLocalFile(fileId: number, res: any): Promise<void>;
|
|
136
163
|
upload(destination: string, fileBuffer: MulterFile, resize?: {
|
|
137
164
|
maxWidth?: number;
|
|
@@ -139,6 +166,7 @@ export declare class FileService implements OnModuleInit {
|
|
|
139
166
|
}, options?: {
|
|
140
167
|
skipMimeValidation?: boolean;
|
|
141
168
|
skipSizeValidation?: boolean;
|
|
169
|
+
isPrivate?: boolean;
|
|
142
170
|
}): Promise<{
|
|
143
171
|
id: number;
|
|
144
172
|
path: string;
|
|
@@ -149,6 +177,7 @@ export declare class FileService implements OnModuleInit {
|
|
|
149
177
|
location: string;
|
|
150
178
|
mimetype_id: number;
|
|
151
179
|
size: number;
|
|
180
|
+
is_private: boolean;
|
|
152
181
|
}>;
|
|
153
182
|
uploadFromPath(destination: string, filePath: string, metadata?: {
|
|
154
183
|
originalname?: string;
|
|
@@ -158,6 +187,11 @@ export declare class FileService implements OnModuleInit {
|
|
|
158
187
|
encoding?: string;
|
|
159
188
|
skipMimeValidation?: boolean;
|
|
160
189
|
skipSizeValidation?: boolean;
|
|
190
|
+
isPrivate?: boolean;
|
|
191
|
+
resize?: {
|
|
192
|
+
maxWidth?: number;
|
|
193
|
+
maxHeight?: number;
|
|
194
|
+
};
|
|
161
195
|
}): Promise<{
|
|
162
196
|
id: number;
|
|
163
197
|
path: string;
|
|
@@ -168,6 +202,7 @@ export declare class FileService implements OnModuleInit {
|
|
|
168
202
|
location: string;
|
|
169
203
|
mimetype_id: number;
|
|
170
204
|
size: number;
|
|
205
|
+
is_private: boolean;
|
|
171
206
|
}>;
|
|
172
207
|
/**
|
|
173
208
|
* Re-applies the current image-optimization settings to an already-stored file,
|
|
@@ -204,8 +239,56 @@ export declare class FileService implements OnModuleInit {
|
|
|
204
239
|
location: string;
|
|
205
240
|
mimetype_id: number;
|
|
206
241
|
size: number;
|
|
242
|
+
is_private: boolean;
|
|
243
|
+
}>;
|
|
244
|
+
/**
|
|
245
|
+
* Creates an independent copy of a stored file: new bytes in storage + a new `file` row.
|
|
246
|
+
*
|
|
247
|
+
* Unlike sharing a `file_id`, the result survives the original being deleted — which is what
|
|
248
|
+
* "duplicate files" means when copying course content between courses.
|
|
249
|
+
*
|
|
250
|
+
* `filename` and `destination` default to the source's, so a caller that only wants
|
|
251
|
+
* independent bytes gets them without thinking about paths. Passing `destination` matters for
|
|
252
|
+
* artifacts addressed by their location (HLS manifests and segments).
|
|
253
|
+
*
|
|
254
|
+
* The bytes are copied server-side when the active provider supports it; otherwise — and when
|
|
255
|
+
* the provider-side copy fails, e.g. an object above S3's 5GB CopyObject cap — they are
|
|
256
|
+
* streamed through a temp file, never buffered in RAM. Mime/size validation is skipped: the
|
|
257
|
+
* source already passed it at upload time.
|
|
258
|
+
*/
|
|
259
|
+
duplicate(fileId: number, options?: {
|
|
260
|
+
destination?: string;
|
|
261
|
+
filename?: string;
|
|
262
|
+
}): Promise<{
|
|
263
|
+
id: number;
|
|
264
|
+
path: string;
|
|
265
|
+
created_at: Date;
|
|
266
|
+
updated_at: Date;
|
|
267
|
+
filename: string;
|
|
268
|
+
provider_id: number;
|
|
269
|
+
location: string;
|
|
270
|
+
mimetype_id: number;
|
|
271
|
+
size: number;
|
|
272
|
+
is_private: boolean;
|
|
207
273
|
}>;
|
|
208
274
|
readStream(filepath: string): Promise<any>;
|
|
275
|
+
/**
|
|
276
|
+
* Confere se os bytes de um `file` estão mesmo no storage, devolvendo o tamanho
|
|
277
|
+
* relatado pelo provider ao lado do tamanho declarado no banco.
|
|
278
|
+
*
|
|
279
|
+
* Existe para quem precisa **provar** que a cópia sobreviveu antes de apagar o
|
|
280
|
+
* original em outro lugar: o registro em banco sozinho não é prova, porque é
|
|
281
|
+
* gravado depois do upload e nada reconcilia os dois se o insert falhar no meio
|
|
282
|
+
* — o blob fica órfão ou a linha aponta para o vazio, e ninguém percebe até
|
|
283
|
+
* alguém tentar ler.
|
|
284
|
+
*
|
|
285
|
+
* Não lança quando o objeto está ausente: devolve `storedSize: null`, para o
|
|
286
|
+
* chamador decidir o que fazer com a divergência.
|
|
287
|
+
*/
|
|
288
|
+
statStoredFile(fileId: number): Promise<{
|
|
289
|
+
storedSize: number | null;
|
|
290
|
+
declaredSize: number;
|
|
291
|
+
}>;
|
|
209
292
|
private getFileSizeFromMetadata;
|
|
210
293
|
download(locale: string, token: string): Promise<{
|
|
211
294
|
stream: any;
|
|
@@ -224,6 +307,16 @@ export declare class FileService implements OnModuleInit {
|
|
|
224
307
|
* Resolves the file record and its storage metadata (mimetype + size) without
|
|
225
308
|
* opening a read stream — so callers can answer a conditional 304 cheaply.
|
|
226
309
|
*/
|
|
310
|
+
/**
|
|
311
|
+
* Metadados para servir um arquivo POR ID.
|
|
312
|
+
*
|
|
313
|
+
* Só os dois handlers anônimos passam por aqui (`serveFileById` e
|
|
314
|
+
* `serveImageById`), e é por isso que a checagem de `is_private` mora neste
|
|
315
|
+
* ponto e não em cada um: id de arquivo é sequencial, então servir por id é uma
|
|
316
|
+
* porta enumerável. O caminho por token (`download`) não passa por aqui, então
|
|
317
|
+
* um arquivo privado continua acessível ao admin via
|
|
318
|
+
* `PUT /file/open/:id` -> token -> `GET /file/open/:token`.
|
|
319
|
+
*/
|
|
227
320
|
private resolveFileMeta;
|
|
228
321
|
private setInlineHeaders;
|
|
229
322
|
/**
|
|
@@ -239,12 +332,36 @@ export declare class FileService implements OnModuleInit {
|
|
|
239
332
|
* Concrete non-image types (video, pdf, ...) are returned unchanged.
|
|
240
333
|
*/
|
|
241
334
|
private resolveEffectiveMimetype;
|
|
335
|
+
/**
|
|
336
|
+
* Widths this endpoint is willing to render. An allowlist is required, not a
|
|
337
|
+
* range check: the endpoint is `@Public()`, and an arbitrary width means
|
|
338
|
+
* arbitrary CPU and an unbounded number of cache entries per file.
|
|
339
|
+
*/
|
|
340
|
+
private getAllowedImageWidths;
|
|
341
|
+
/**
|
|
342
|
+
* Resolves the requested variant against the allowlist. Anything unknown or
|
|
343
|
+
* out of the list collapses to "no variant", which serves the original bytes
|
|
344
|
+
* instead of failing — a stale `?w=` in cached HTML must not 500.
|
|
345
|
+
*/
|
|
346
|
+
private resolveImageVariant;
|
|
347
|
+
/** Absolute path of the on-disk cache entry for a rendered variant. */
|
|
348
|
+
private imageVariantCachePath;
|
|
242
349
|
/**
|
|
243
350
|
* Serves an image by id with strong, immutable HTTP caching. The content of a
|
|
244
351
|
* given fileId never changes (a new upload yields a new id), so the ETag is
|
|
245
352
|
* derived from id+size instead of hashing the buffer, keeping it streaming.
|
|
353
|
+
*
|
|
354
|
+
* With a `variant` (`?w=`), the bytes are resized before being sent and the
|
|
355
|
+
* ETag carries the variant parameters — otherwise a conditional request for
|
|
356
|
+
* one width would get a 304 while holding the bytes of another.
|
|
246
357
|
*/
|
|
247
|
-
serveImageById(locale: string, id: number, ifNoneMatch: string | undefined, res: any): Promise<void>;
|
|
358
|
+
serveImageById(locale: string, id: number, ifNoneMatch: string | undefined, res: any, variant?: ImageVariantRequest): Promise<void>;
|
|
359
|
+
/**
|
|
360
|
+
* Produces (and memoizes on disk) a resized variant of a stored image.
|
|
361
|
+
* The cache key includes the file size, so re-uploading under the same id —
|
|
362
|
+
* which the storage layer does not normally do — cannot serve stale bytes.
|
|
363
|
+
*/
|
|
364
|
+
private renderImageVariant;
|
|
248
365
|
/**
|
|
249
366
|
* Serves any file by id with configurable HTTP caching (not immutable, shorter
|
|
250
367
|
* TTL than images). Used by the generic open endpoint's numeric-id branch.
|
|
@@ -365,5 +482,15 @@ export declare class FileService implements OnModuleInit {
|
|
|
365
482
|
prefix?: string;
|
|
366
483
|
}): Promise<void>;
|
|
367
484
|
createDownloadToken(filepath: string, expires?: number): string;
|
|
485
|
+
/**
|
|
486
|
+
* Base pública para URLs de arquivo devolvidas ao navegador.
|
|
487
|
+
*
|
|
488
|
+
* Não dá para derivar do `Host` da requisição: apps que falam com a API por
|
|
489
|
+
* proxy interno (o class, via rewrite `/api` do Next) fazem o Nest enxergar o
|
|
490
|
+
* Service do cluster, e a URL sai como `http://hub-api:3100/...` — inútil no
|
|
491
|
+
* navegador. O setting `api-url` é a URL pública canônica da API no repo; o
|
|
492
|
+
* `Host` fica só como fallback para ambientes sem o setting configurado.
|
|
493
|
+
*/
|
|
494
|
+
resolvePublicBaseUrl(req: Request): Promise<string>;
|
|
368
495
|
}
|
|
369
496
|
//# sourceMappingURL=file.service.d.ts.map
|