@escapenavigator/types 2.0.34 → 2.0.38
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/dist/admin/aggregator-order/create-aggregator-order.dto.d.ts +1 -0
- package/dist/agregator/agregator-questroom.ro.d.ts +2 -0
- package/dist/agregator/agregator-questroom.ro.js +5 -0
- package/dist/certificate-sale/certificate-sale.ro.d.ts +6 -0
- package/dist/certificate-sale/certificate-sale.ro.js +4 -0
- package/dist/certificate-uploaded/certificate-uploaded.ro.d.ts +1 -1
- package/dist/client/client.ro.d.ts +13 -0
- package/dist/client/client.ro.js +21 -0
- package/dist/constants/uploading/upload-bookeo-certificate-rows.js +2 -2
- package/dist/constants/uploading/upload-certificate-rows.js +1 -1
- package/dist/email-builder/email-content.dto.d.ts +26 -0
- package/dist/email-builder/email-content.dto.js +62 -0
- package/dist/email-builder/index.d.ts +81 -0
- package/dist/email-builder/index.js +89 -1
- package/dist/emails/index.d.ts +25 -2
- package/dist/location/create-location.dto.d.ts +2 -0
- package/dist/location/create-location.dto.js +7 -0
- package/dist/location/location-light.ro.d.ts +3 -1
- package/dist/location/location-light.ro.js +6 -1
- package/dist/location/update-location-for-admin.dto.d.ts +2 -0
- package/dist/location/update-location-for-admin.dto.js +7 -0
- package/dist/log/log-title.enum.d.ts +3 -0
- package/dist/log/log-title.enum.js +3 -0
- package/dist/loyalty/adjust-bonus.dto.d.ts +14 -0
- package/dist/loyalty/adjust-bonus.dto.js +35 -0
- package/dist/loyalty/assign-client-tier.dto.d.ts +9 -0
- package/dist/loyalty/assign-client-tier.dto.js +29 -0
- package/dist/loyalty/client-loyalty.ro.d.ts +30 -0
- package/dist/loyalty/client-loyalty.ro.js +71 -0
- package/dist/loyalty/enum/loyalty-bonus-type.enum.d.ts +13 -0
- package/dist/loyalty/enum/loyalty-bonus-type.enum.js +17 -0
- package/dist/loyalty/enum/loyalty-history-mode.enum.d.ts +18 -0
- package/dist/loyalty/enum/loyalty-history-mode.enum.js +22 -0
- package/dist/loyalty/enum/loyalty-metric.enum.d.ts +12 -0
- package/dist/loyalty/enum/loyalty-metric.enum.js +16 -0
- package/dist/loyalty/enum/loyalty-program-type.enum.d.ts +12 -0
- package/dist/loyalty/enum/loyalty-program-type.enum.js +16 -0
- package/dist/loyalty/enum/loyalty-stacking.enum.d.ts +14 -0
- package/dist/loyalty/enum/loyalty-stacking.enum.js +18 -0
- package/dist/loyalty/enum/loyalty-tier-color.enum.d.ts +16 -0
- package/dist/loyalty/enum/loyalty-tier-color.enum.js +20 -0
- package/dist/loyalty/enum/loyalty-tier-source.enum.d.ts +13 -0
- package/dist/loyalty/enum/loyalty-tier-source.enum.js +17 -0
- package/dist/loyalty/loyalty-bonus.ro.d.ts +20 -0
- package/dist/loyalty/loyalty-bonus.ro.js +55 -0
- package/dist/loyalty/loyalty-presets.d.ts +45 -0
- package/dist/loyalty/loyalty-presets.js +30 -0
- package/dist/loyalty/loyalty-preview.dto.d.ts +19 -0
- package/dist/loyalty/loyalty-preview.dto.js +64 -0
- package/dist/loyalty/loyalty-preview.ro.d.ts +20 -0
- package/dist/loyalty/loyalty-preview.ro.js +53 -0
- package/dist/loyalty/loyalty-settings.dto.d.ts +51 -0
- package/dist/loyalty/loyalty-settings.dto.js +103 -0
- package/dist/loyalty/loyalty-settings.ro.d.ts +33 -0
- package/dist/loyalty/loyalty-settings.ro.js +67 -0
- package/dist/loyalty/loyalty-tier.dto.d.ts +33 -0
- package/dist/loyalty/loyalty-tier.dto.js +69 -0
- package/dist/loyalty/loyalty-tier.ro.d.ts +12 -0
- package/dist/loyalty/loyalty-tier.ro.js +42 -0
- package/dist/loyalty/pay-with-bonus.dto.d.ts +10 -0
- package/dist/loyalty/pay-with-bonus.dto.js +36 -0
- package/dist/openapi/order-groups/openapi-batch-create-preorder.dto.d.ts +3 -3
- package/dist/openapi/orders/openapi-order.ro.d.ts +12 -0
- package/dist/openapi/orders/openapi-order.ro.js +8 -0
- package/dist/openapi/profiles/enum/openapi-certificate-status.enum.d.ts +29 -0
- package/dist/openapi/profiles/enum/openapi-certificate-status.enum.js +38 -0
- package/dist/openapi/profiles/openapi-annul-certificate.dto.d.ts +3 -0
- package/dist/openapi/profiles/openapi-annul-certificate.dto.js +29 -0
- package/dist/openapi/profiles/openapi-certificate.ro.d.ts +33 -0
- package/dist/openapi/profiles/openapi-certificate.ro.js +195 -0
- package/dist/openapi/profiles/openapi-create-certificate.dto.d.ts +24 -0
- package/dist/openapi/profiles/openapi-create-certificate.dto.js +208 -0
- package/dist/openapi/slots/openapi-widget-slot.ro.d.ts +3 -0
- package/dist/openapi/slots/openapi-widget-slot.ro.js +24 -2
- package/dist/openapi/upsellings/openapi-upselling.ro.d.ts +1 -0
- package/dist/openapi/upsellings/openapi-upselling.ro.js +4 -0
- package/dist/order/order.ro.d.ts +23 -1
- package/dist/order/order.ro.js +19 -0
- package/dist/order-discount/enum/order-discount-source.enum.d.ts +10 -0
- package/dist/order-discount/enum/order-discount-source.enum.js +14 -0
- package/dist/packages/book-package.dto.d.ts +3 -0
- package/dist/packages/book-package.dto.js +9 -0
- package/dist/packages/create-package.dto.d.ts +23 -0
- package/dist/packages/create-package.dto.js +81 -1
- package/dist/packages/package-addon.dto.d.ts +5 -0
- package/dist/packages/package-addon.dto.js +31 -0
- package/dist/packages/package-audience.enum.d.ts +6 -0
- package/dist/packages/package-audience.enum.js +10 -0
- package/dist/packages/package-feature.dto.d.ts +12 -0
- package/dist/packages/package-feature.dto.js +41 -0
- package/dist/packages/package-pricing-mode.enum.d.ts +14 -0
- package/dist/packages/package-pricing-mode.enum.js +18 -0
- package/dist/packages/package.ro.d.ts +14 -0
- package/dist/packages/package.ro.js +48 -0
- package/dist/profile/birthday-marketing/birthday-marketing.dto.d.ts +2 -2
- package/dist/profile/birthday-marketing/birthday-marketing.dto.js +3 -1
- package/dist/profile/company-ai-context.d.ts +2 -0
- package/dist/profile/cross-sale/cross-sale.dto.d.ts +2 -2
- package/dist/profile/cross-sale/cross-sale.dto.js +3 -1
- package/dist/profile/cross-sale/cross-sale.ro.d.ts +2 -2
- package/dist/profile/custom-client-booking-email/custom-client-booking-email.dto.d.ts +2 -2
- package/dist/profile/custom-client-booking-email/custom-client-booking-email.dto.js +3 -1
- package/dist/profile/custom-client-booking-email/custom-client-booking-email.ro.d.ts +2 -2
- package/dist/profile/marketing-automation/marketing-automation.dto.d.ts +2 -2
- package/dist/profile/marketing-automation/marketing-automation.dto.js +3 -1
- package/dist/profile/marketing-automation/marketing-automation.ro.d.ts +2 -2
- package/dist/profile/marketing-email/create-profile-marketing-email-campaign.dto.d.ts +14 -13
- package/dist/profile/marketing-email/create-profile-marketing-email-campaign.dto.js +19 -28
- package/dist/profile/marketing-email/preflight-issue.ro.d.ts +31 -1
- package/dist/profile/marketing-email/preflight-issue.ro.js +30 -0
- package/dist/profile/marketing-email/preview-campaign-v2.dto.d.ts +2 -2
- package/dist/profile/marketing-email/preview-campaign-v2.dto.js +2 -2
- package/dist/profile/marketing-email/preview-profile-marketing-segment.dto.d.ts +6 -0
- package/dist/profile/marketing-email/preview-profile-marketing-segment.dto.js +8 -0
- package/dist/profile/marketing-email/preview-profile-marketing-segment.ro.d.ts +6 -1
- package/dist/profile/marketing-email/preview-profile-marketing-segment.ro.js +9 -1
- package/dist/profile/marketing-email/profile-marketing-email-campaign.ro.d.ts +11 -2
- package/dist/profile/marketing-email/profile-marketing-email-campaign.ro.js +12 -0
- package/dist/profile/marketing-email/profile-marketing-email-recipient-status.enum.d.ts +6 -0
- package/dist/profile/marketing-email/profile-marketing-email-recipient-status.enum.js +6 -0
- package/dist/profile/marketing-email/test-send-email-v2.dto.d.ts +2 -2
- package/dist/profile/marketing-email/test-send-email-v2.dto.js +2 -2
- package/dist/profile/notification-chanel/notification-chanel-action.enum.d.ts +16 -1
- package/dist/profile/notification-chanel/notification-chanel-action.enum.js +21 -1
- package/dist/profile/notification-chanel/notification-chanel.ro.d.ts +5 -0
- package/dist/profile/notification-chanel/notification-chanel.ro.js +4 -0
- package/dist/profile/notification-chanel/test-notification-chanel.dto.d.ts +7 -2
- package/dist/profile/notification-chanel/test-notification-chanel.dto.js +7 -0
- package/dist/questroom/questroom-ai-context.d.ts +5 -0
- package/dist/questroom-scenario-email/create-questroom-scenario-email.dto.d.ts +2 -2
- package/dist/questroom-scenario-email/create-questroom-scenario-email.dto.js +3 -1
- package/dist/questroom-scenario-email/questroom-scenario-email.ro.d.ts +2 -2
- package/dist/shared/enum/availability.enum.d.ts +11 -0
- package/dist/shared/enum/availability.enum.js +15 -0
- package/dist/slot/bulk-update-slots.dto.d.ts +2 -0
- package/dist/slot/bulk-update-slots.dto.js +7 -0
- package/dist/slot/change-template-slots-form.dto.d.ts +3 -0
- package/dist/slot/change-template-slots-form.dto.js +13 -0
- package/dist/slot/create-slot-form.dto.d.ts +2 -0
- package/dist/slot/create-slot-form.dto.js +7 -0
- package/dist/slot/create-slot.dto.d.ts +2 -0
- package/dist/slot/create-slot.dto.js +7 -0
- package/dist/slot/daily-window-range.validator.d.ts +15 -0
- package/dist/slot/daily-window-range.validator.js +46 -0
- package/dist/slot/enum/slot-discount-type.enum.d.ts +15 -0
- package/dist/slot/enum/slot-discount-type.enum.js +19 -0
- package/dist/slot/slot-autocomplite-form.dto.d.ts +2 -0
- package/dist/slot/slot-autocomplite-form.dto.js +7 -0
- package/dist/slot/slot-discount-range.validator.d.ts +10 -0
- package/dist/slot/slot-discount-range.validator.js +36 -0
- package/dist/slot/slot.ro.d.ts +10 -0
- package/dist/slot/update-slot-upsellings-range.dto.d.ts +17 -0
- package/dist/slot/update-slot-upsellings-range.dto.js +68 -0
- package/dist/slot/update-slot.dto.d.ts +4 -0
- package/dist/slot/update-slot.dto.js +14 -0
- package/dist/slot-template/slot-template-element.d.ts +4 -0
- package/dist/slot-template/slot-template-element.js +9 -0
- package/dist/slot-template/slot-template-flex-rule.d.ts +8 -0
- package/dist/slot-template/slot-template-flex-rule.js +15 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/upselling/create-upselling.dto.d.ts +5 -0
- package/dist/upselling/create-upselling.dto.js +8 -0
- package/dist/upselling/upselling.ro.d.ts +1 -0
- package/dist/upselling/upselling.ro.js +4 -0
- package/dist/user/crud/user.ro.d.ts +3 -0
- package/dist/user/crud/user.ro.js +11 -0
- package/dist/user/current/update-current-user-notifications.dto.d.ts +7 -0
- package/dist/user/current/update-current-user-notifications.dto.js +13 -0
- package/dist/user/enum/push-order-scope.enum.d.ts +15 -0
- package/dist/user/enum/push-order-scope.enum.js +19 -0
- package/dist/widget/enum/widget-type.enum.d.ts +3 -1
- package/dist/widget/enum/widget-type.enum.js +2 -0
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EmailContent } from '../../email-builder';
|
|
2
2
|
import { Languages } from '../../shared/enum/languages.enum';
|
|
3
3
|
import { CrossSaleStatusEnum } from './cross-sale-status.enum';
|
|
4
4
|
import { CrossSaleDiscountTypeEnum } from './crossale-discount-type.enum';
|
|
@@ -12,7 +12,7 @@ export declare class CrossSaleLocaleDto {
|
|
|
12
12
|
* присылать `contentJson` параллельно. См. подробности в
|
|
13
13
|
* `CustomClientBookingEmailLocaleDto.contentJson`.
|
|
14
14
|
*/
|
|
15
|
-
contentJson?:
|
|
15
|
+
contentJson?: EmailContent | null;
|
|
16
16
|
}
|
|
17
17
|
export declare class CrossSaleDto {
|
|
18
18
|
status: CrossSaleStatusEnum;
|
|
@@ -13,6 +13,7 @@ exports.CrossSaleDto = exports.CrossSaleLocaleDto = void 0;
|
|
|
13
13
|
/* eslint-disable max-classes-per-file */
|
|
14
14
|
const class_transformer_1 = require("class-transformer");
|
|
15
15
|
const class_validator_1 = require("class-validator");
|
|
16
|
+
const email_content_dto_1 = require("../../email-builder/email-content.dto");
|
|
16
17
|
const languages_enum_1 = require("../../shared/enum/languages.enum");
|
|
17
18
|
const feedback_validators_1 = require("../../shared/feedback-validators");
|
|
18
19
|
const is_not_blank_1 = require("../../shared/is-not-blank");
|
|
@@ -43,7 +44,8 @@ __decorate([
|
|
|
43
44
|
], CrossSaleLocaleDto.prototype, "title", void 0);
|
|
44
45
|
__decorate([
|
|
45
46
|
(0, class_validator_1.IsOptional)(),
|
|
46
|
-
(0, class_validator_1.
|
|
47
|
+
(0, class_validator_1.ValidateNested)(),
|
|
48
|
+
(0, class_transformer_1.Type)(() => email_content_dto_1.EmailContentDto),
|
|
47
49
|
(0, class_transformer_1.Expose)(),
|
|
48
50
|
__metadata("design:type", Object)
|
|
49
51
|
], CrossSaleLocaleDto.prototype, "contentJson", void 0);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EmailContent } from '../../email-builder';
|
|
2
2
|
import { Languages } from '../../shared/enum/languages.enum';
|
|
3
3
|
import { RO } from '../../shared/ro-class';
|
|
4
4
|
import { CrossSaleStatusEnum } from './cross-sale-status.enum';
|
|
@@ -7,7 +7,7 @@ export declare class CrossSaleLocaleRO {
|
|
|
7
7
|
language: Languages;
|
|
8
8
|
feedbackText: string;
|
|
9
9
|
title: string;
|
|
10
|
-
contentJson?:
|
|
10
|
+
contentJson?: EmailContent | null;
|
|
11
11
|
}
|
|
12
12
|
export declare class CrossSaleRO extends RO {
|
|
13
13
|
sendAfter: number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EmailContent } from '../../email-builder';
|
|
2
2
|
import { Languages } from '../../shared/enum/languages.enum';
|
|
3
3
|
import { CrossSaleStatusEnum } from '../cross-sale/cross-sale-status.enum';
|
|
4
4
|
export declare class CustomClientBookingEmailLocaleDto {
|
|
@@ -14,7 +14,7 @@ export declare class CustomClientBookingEmailLocaleDto {
|
|
|
14
14
|
* откатится на legacy-рендер `feedbackText` (см. договорённость
|
|
15
15
|
* по soft-fallback'у).
|
|
16
16
|
*/
|
|
17
|
-
contentJson?:
|
|
17
|
+
contentJson?: EmailContent | null;
|
|
18
18
|
}
|
|
19
19
|
export declare class CustomClientBookingEmailDto {
|
|
20
20
|
status: CrossSaleStatusEnum;
|
|
@@ -13,6 +13,7 @@ exports.CustomClientBookingEmailDto = exports.CustomClientBookingEmailLocaleDto
|
|
|
13
13
|
/* eslint-disable max-classes-per-file */
|
|
14
14
|
const class_transformer_1 = require("class-transformer");
|
|
15
15
|
const class_validator_1 = require("class-validator");
|
|
16
|
+
const email_content_dto_1 = require("../../email-builder/email-content.dto");
|
|
16
17
|
const languages_enum_1 = require("../../shared/enum/languages.enum");
|
|
17
18
|
const is_not_blank_1 = require("../../shared/is-not-blank");
|
|
18
19
|
const cross_sale_status_enum_1 = require("../cross-sale/cross-sale-status.enum");
|
|
@@ -40,7 +41,8 @@ __decorate([
|
|
|
40
41
|
], CustomClientBookingEmailLocaleDto.prototype, "title", void 0);
|
|
41
42
|
__decorate([
|
|
42
43
|
(0, class_validator_1.IsOptional)(),
|
|
43
|
-
(0, class_validator_1.
|
|
44
|
+
(0, class_validator_1.ValidateNested)(),
|
|
45
|
+
(0, class_transformer_1.Type)(() => email_content_dto_1.EmailContentDto),
|
|
44
46
|
(0, class_transformer_1.Expose)(),
|
|
45
47
|
__metadata("design:type", Object)
|
|
46
48
|
], CustomClientBookingEmailLocaleDto.prototype, "contentJson", void 0);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EmailContent } from '../../email-builder';
|
|
2
2
|
import { Languages } from '../../shared/enum/languages.enum';
|
|
3
3
|
import { RO } from '../../shared/ro-class';
|
|
4
4
|
import { CrossSaleStatusEnum } from '../cross-sale/cross-sale-status.enum';
|
|
@@ -13,7 +13,7 @@ export declare class CustomClientBookingEmailLocaleRO {
|
|
|
13
13
|
*/
|
|
14
14
|
feedbackText: string;
|
|
15
15
|
title: string;
|
|
16
|
-
contentJson?:
|
|
16
|
+
contentJson?: EmailContent | null;
|
|
17
17
|
}
|
|
18
18
|
export declare class CustomClientBookingEmailRO extends RO {
|
|
19
19
|
status: CrossSaleStatusEnum;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EmailContent } from '../../email-builder';
|
|
2
2
|
import { Languages } from '../../shared/enum/languages.enum';
|
|
3
3
|
import { MarketingAutomationConfigDto } from './marketing-automation-config.dto';
|
|
4
4
|
import { MarketingAutomationDiscountTypeEnum } from './marketing-automation-discount-type.enum';
|
|
@@ -16,7 +16,7 @@ export declare class MarketingAutomationLocaleDto {
|
|
|
16
16
|
feedbackText?: string;
|
|
17
17
|
title?: string;
|
|
18
18
|
/** v2-документ Maily/TipTap. Используется при `isV2 === true`. */
|
|
19
|
-
contentJson?:
|
|
19
|
+
contentJson?: EmailContent | null;
|
|
20
20
|
}
|
|
21
21
|
export declare class MarketingAutomationDto {
|
|
22
22
|
type: MarketingAutomationTypeEnum;
|
|
@@ -13,6 +13,7 @@ exports.MarketingAutomationDto = exports.MarketingAutomationLocaleDto = void 0;
|
|
|
13
13
|
/* eslint-disable max-classes-per-file */
|
|
14
14
|
const class_transformer_1 = require("class-transformer");
|
|
15
15
|
const class_validator_1 = require("class-validator");
|
|
16
|
+
const email_content_dto_1 = require("../../email-builder/email-content.dto");
|
|
16
17
|
const languages_enum_1 = require("../../shared/enum/languages.enum");
|
|
17
18
|
const marketing_automation_config_dto_1 = require("./marketing-automation-config.dto");
|
|
18
19
|
const marketing_automation_discount_type_enum_1 = require("./marketing-automation-discount-type.enum");
|
|
@@ -48,7 +49,8 @@ __decorate([
|
|
|
48
49
|
], MarketingAutomationLocaleDto.prototype, "title", void 0);
|
|
49
50
|
__decorate([
|
|
50
51
|
(0, class_validator_1.IsOptional)(),
|
|
51
|
-
(0, class_validator_1.
|
|
52
|
+
(0, class_validator_1.ValidateNested)(),
|
|
53
|
+
(0, class_transformer_1.Type)(() => email_content_dto_1.EmailContentDto),
|
|
52
54
|
(0, class_transformer_1.Expose)(),
|
|
53
55
|
__metadata("design:type", Object)
|
|
54
56
|
], MarketingAutomationLocaleDto.prototype, "contentJson", void 0);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EmailContent } from '../../email-builder';
|
|
2
2
|
import { Languages } from '../../shared/enum/languages.enum';
|
|
3
3
|
import { RO } from '../../shared/ro-class';
|
|
4
4
|
import { MarketingAutomationConfigDto } from './marketing-automation-config.dto';
|
|
@@ -9,7 +9,7 @@ export declare class MarketingAutomationLocaleRO {
|
|
|
9
9
|
language: Languages;
|
|
10
10
|
feedbackText: string;
|
|
11
11
|
title: string;
|
|
12
|
-
contentJson?:
|
|
12
|
+
contentJson?: EmailContent | null;
|
|
13
13
|
}
|
|
14
14
|
export declare class MarketingAutomationRO extends RO {
|
|
15
15
|
type: MarketingAutomationTypeEnum;
|
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EmailContentDto } from '../../email-builder/email-content.dto';
|
|
2
2
|
import { ProfileMarketingEmailGoalEnum } from './profile-marketing-email-goal.enum';
|
|
3
|
-
|
|
4
|
-
* Body of the campaign content payload — strict v2 schema produced by
|
|
5
|
-
* the maily.to-based editor. Variable substitution / UTM injection /
|
|
6
|
-
* footer are applied at send time on alfa-mailer.
|
|
7
|
-
*/
|
|
8
|
-
export declare class EmailContentJsonV2Dto implements EmailContentJsonV2 {
|
|
9
|
-
version: typeof EMAIL_CONTENT_VERSION_V2;
|
|
10
|
-
doc: TipTapJSONDoc;
|
|
11
|
-
theme?: EmailThemeV2;
|
|
12
|
-
}
|
|
3
|
+
export { EmailContentDto };
|
|
13
4
|
export declare class CreateProfileMarketingEmailCampaignDto {
|
|
14
5
|
title: string;
|
|
15
6
|
/**
|
|
@@ -32,8 +23,8 @@ export declare class CreateProfileMarketingEmailCampaignDto {
|
|
|
32
23
|
* домен не верифицирован — блок `SenderDomainNotVerified`.
|
|
33
24
|
*/
|
|
34
25
|
senderId?: number;
|
|
35
|
-
/**
|
|
36
|
-
contentJson:
|
|
26
|
+
/** Тело письма: блочный документ (v2) либо загруженный HTML. */
|
|
27
|
+
contentJson: EmailContentDto;
|
|
37
28
|
utmSource?: string;
|
|
38
29
|
utmMedium?: string;
|
|
39
30
|
/**
|
|
@@ -50,6 +41,16 @@ export declare class CreateProfileMarketingEmailCampaignDto {
|
|
|
50
41
|
goalTypes?: ProfileMarketingEmailGoalEnum[];
|
|
51
42
|
/** Окно атрибуции заказов в днях после `launchedAt`. По умолчанию 14. */
|
|
52
43
|
attributionWindowDays?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Не слать клиенту, если ему доставляли маркетинговое письмо за
|
|
46
|
+
* последние N дней. `0` — без ограничения.
|
|
47
|
+
*/
|
|
48
|
+
frequencyCapDays?: number;
|
|
49
|
+
/**
|
|
50
|
+
* Сдвигать старт на утро, если запуск попал в тихие часы. По
|
|
51
|
+
* умолчанию включено.
|
|
52
|
+
*/
|
|
53
|
+
respectQuietHours?: boolean;
|
|
53
54
|
/** Клиент по умолчанию для preview/test-send. */
|
|
54
55
|
previewClientId?: number;
|
|
55
56
|
}
|
|
@@ -9,35 +9,12 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.CreateProfileMarketingEmailCampaignDto = exports.
|
|
12
|
+
exports.CreateProfileMarketingEmailCampaignDto = exports.EmailContentDto = void 0;
|
|
13
13
|
const class_transformer_1 = require("class-transformer");
|
|
14
14
|
const class_validator_1 = require("class-validator");
|
|
15
|
-
const
|
|
15
|
+
const email_content_dto_1 = require("../../email-builder/email-content.dto");
|
|
16
|
+
Object.defineProperty(exports, "EmailContentDto", { enumerable: true, get: function () { return email_content_dto_1.EmailContentDto; } });
|
|
16
17
|
const profile_marketing_email_goal_enum_1 = require("./profile-marketing-email-goal.enum");
|
|
17
|
-
/**
|
|
18
|
-
* Body of the campaign content payload — strict v2 schema produced by
|
|
19
|
-
* the maily.to-based editor. Variable substitution / UTM injection /
|
|
20
|
-
* footer are applied at send time on alfa-mailer.
|
|
21
|
-
*/
|
|
22
|
-
class EmailContentJsonV2Dto {
|
|
23
|
-
}
|
|
24
|
-
exports.EmailContentJsonV2Dto = EmailContentJsonV2Dto;
|
|
25
|
-
__decorate([
|
|
26
|
-
(0, class_validator_1.Equals)(email_builder_1.EMAIL_CONTENT_VERSION_V2),
|
|
27
|
-
(0, class_transformer_1.Expose)(),
|
|
28
|
-
__metadata("design:type", Object)
|
|
29
|
-
], EmailContentJsonV2Dto.prototype, "version", void 0);
|
|
30
|
-
__decorate([
|
|
31
|
-
(0, class_validator_1.IsObject)(),
|
|
32
|
-
(0, class_transformer_1.Expose)(),
|
|
33
|
-
__metadata("design:type", Object)
|
|
34
|
-
], EmailContentJsonV2Dto.prototype, "doc", void 0);
|
|
35
|
-
__decorate([
|
|
36
|
-
(0, class_validator_1.IsOptional)(),
|
|
37
|
-
(0, class_validator_1.IsObject)(),
|
|
38
|
-
(0, class_transformer_1.Expose)(),
|
|
39
|
-
__metadata("design:type", Object)
|
|
40
|
-
], EmailContentJsonV2Dto.prototype, "theme", void 0);
|
|
41
18
|
class CreateProfileMarketingEmailCampaignDto {
|
|
42
19
|
}
|
|
43
20
|
exports.CreateProfileMarketingEmailCampaignDto = CreateProfileMarketingEmailCampaignDto;
|
|
@@ -91,9 +68,9 @@ __decorate([
|
|
|
91
68
|
__decorate([
|
|
92
69
|
(0, class_validator_1.IsDefined)(),
|
|
93
70
|
(0, class_validator_1.ValidateNested)(),
|
|
94
|
-
(0, class_transformer_1.Type)(() =>
|
|
71
|
+
(0, class_transformer_1.Type)(() => email_content_dto_1.EmailContentDto),
|
|
95
72
|
(0, class_transformer_1.Expose)(),
|
|
96
|
-
__metadata("design:type",
|
|
73
|
+
__metadata("design:type", email_content_dto_1.EmailContentDto)
|
|
97
74
|
], CreateProfileMarketingEmailCampaignDto.prototype, "contentJson", void 0);
|
|
98
75
|
__decorate([
|
|
99
76
|
(0, class_validator_1.IsOptional)(),
|
|
@@ -146,6 +123,20 @@ __decorate([
|
|
|
146
123
|
(0, class_transformer_1.Expose)(),
|
|
147
124
|
__metadata("design:type", Number)
|
|
148
125
|
], CreateProfileMarketingEmailCampaignDto.prototype, "attributionWindowDays", void 0);
|
|
126
|
+
__decorate([
|
|
127
|
+
(0, class_validator_1.IsOptional)(),
|
|
128
|
+
(0, class_validator_1.IsInt)(),
|
|
129
|
+
(0, class_validator_1.Min)(0),
|
|
130
|
+
(0, class_validator_1.Max)(365),
|
|
131
|
+
(0, class_transformer_1.Expose)(),
|
|
132
|
+
__metadata("design:type", Number)
|
|
133
|
+
], CreateProfileMarketingEmailCampaignDto.prototype, "frequencyCapDays", void 0);
|
|
134
|
+
__decorate([
|
|
135
|
+
(0, class_validator_1.IsOptional)(),
|
|
136
|
+
(0, class_validator_1.IsBoolean)(),
|
|
137
|
+
(0, class_transformer_1.Expose)(),
|
|
138
|
+
__metadata("design:type", Boolean)
|
|
139
|
+
], CreateProfileMarketingEmailCampaignDto.prototype, "respectQuietHours", void 0);
|
|
149
140
|
__decorate([
|
|
150
141
|
(0, class_validator_1.IsOptional)(),
|
|
151
142
|
(0, class_validator_1.IsInt)(),
|
|
@@ -16,7 +16,37 @@ export declare enum PreflightIssueCodeEnum {
|
|
|
16
16
|
NonUniqueUtmCampaign = "non_unique_utm_campaign",
|
|
17
17
|
NoUnsubscribe = "no_unsubscribe",
|
|
18
18
|
NoGoals = "no_goals",
|
|
19
|
-
NoConsentFilter = "no_consent_filter"
|
|
19
|
+
NoConsentFilter = "no_consent_filter",
|
|
20
|
+
/**
|
|
21
|
+
* Письмо тяжелее ~102 КБ: Gmail покажет «просмотреть всё сообщение»,
|
|
22
|
+
* и в обрезанный хвост уедет футер с отпиской. Предупреждение, не
|
|
23
|
+
* блокер — тяжёлые письма законны, просто хуже работают.
|
|
24
|
+
*/
|
|
25
|
+
ContentTooLarge = "content_too_large",
|
|
26
|
+
/**
|
|
27
|
+
* В теле нет ни одной ссылки. Для рекламного письма это почти всегда
|
|
28
|
+
* ошибка вёрстки (потерянная CTA), а не осознанный выбор.
|
|
29
|
+
*/
|
|
30
|
+
NoLinks = "no_links",
|
|
31
|
+
/** Картинки без `alt`: часть клиентов блокирует изображения по умолчанию. */
|
|
32
|
+
ImagesWithoutAlt = "images_without_alt",
|
|
33
|
+
/**
|
|
34
|
+
* В теле остались `{{переменные}}`, которых нет в scope письма —
|
|
35
|
+
* получатель увидит их буквально.
|
|
36
|
+
*/
|
|
37
|
+
UnresolvedVariables = "unresolved_variables",
|
|
38
|
+
/**
|
|
39
|
+
* Запуск попал в тихие часы и будет сдвинут на утро. Предупреждение,
|
|
40
|
+
* а не блокер: отправка состоится, просто позже — и пользователь
|
|
41
|
+
* должен узнать об этом до нажатия «Отправить», а не из отчёта.
|
|
42
|
+
*/
|
|
43
|
+
QuietHours = "quiet_hours",
|
|
44
|
+
/**
|
|
45
|
+
* Аудитория больше суточного лимита прогрева домена — отправка
|
|
46
|
+
* растянется на несколько дней. Предупреждение: письма не теряются,
|
|
47
|
+
* но пользователь должен понимать, почему «отправлено» растёт медленно.
|
|
48
|
+
*/
|
|
49
|
+
DomainWarmup = "domain_warmup"
|
|
20
50
|
}
|
|
21
51
|
export declare class PreflightIssueRO {
|
|
22
52
|
severity: PreflightIssueSeverityEnum;
|
|
@@ -32,6 +32,36 @@ var PreflightIssueCodeEnum;
|
|
|
32
32
|
PreflightIssueCodeEnum["NoUnsubscribe"] = "no_unsubscribe";
|
|
33
33
|
PreflightIssueCodeEnum["NoGoals"] = "no_goals";
|
|
34
34
|
PreflightIssueCodeEnum["NoConsentFilter"] = "no_consent_filter";
|
|
35
|
+
/**
|
|
36
|
+
* Письмо тяжелее ~102 КБ: Gmail покажет «просмотреть всё сообщение»,
|
|
37
|
+
* и в обрезанный хвост уедет футер с отпиской. Предупреждение, не
|
|
38
|
+
* блокер — тяжёлые письма законны, просто хуже работают.
|
|
39
|
+
*/
|
|
40
|
+
PreflightIssueCodeEnum["ContentTooLarge"] = "content_too_large";
|
|
41
|
+
/**
|
|
42
|
+
* В теле нет ни одной ссылки. Для рекламного письма это почти всегда
|
|
43
|
+
* ошибка вёрстки (потерянная CTA), а не осознанный выбор.
|
|
44
|
+
*/
|
|
45
|
+
PreflightIssueCodeEnum["NoLinks"] = "no_links";
|
|
46
|
+
/** Картинки без `alt`: часть клиентов блокирует изображения по умолчанию. */
|
|
47
|
+
PreflightIssueCodeEnum["ImagesWithoutAlt"] = "images_without_alt";
|
|
48
|
+
/**
|
|
49
|
+
* В теле остались `{{переменные}}`, которых нет в scope письма —
|
|
50
|
+
* получатель увидит их буквально.
|
|
51
|
+
*/
|
|
52
|
+
PreflightIssueCodeEnum["UnresolvedVariables"] = "unresolved_variables";
|
|
53
|
+
/**
|
|
54
|
+
* Запуск попал в тихие часы и будет сдвинут на утро. Предупреждение,
|
|
55
|
+
* а не блокер: отправка состоится, просто позже — и пользователь
|
|
56
|
+
* должен узнать об этом до нажатия «Отправить», а не из отчёта.
|
|
57
|
+
*/
|
|
58
|
+
PreflightIssueCodeEnum["QuietHours"] = "quiet_hours";
|
|
59
|
+
/**
|
|
60
|
+
* Аудитория больше суточного лимита прогрева домена — отправка
|
|
61
|
+
* растянется на несколько дней. Предупреждение: письма не теряются,
|
|
62
|
+
* но пользователь должен понимать, почему «отправлено» растёт медленно.
|
|
63
|
+
*/
|
|
64
|
+
PreflightIssueCodeEnum["DomainWarmup"] = "domain_warmup";
|
|
35
65
|
})(PreflightIssueCodeEnum || (exports.PreflightIssueCodeEnum = PreflightIssueCodeEnum = {}));
|
|
36
66
|
class PreflightIssueRO {
|
|
37
67
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EmailScope } from '../../email-builder';
|
|
2
|
-
import {
|
|
2
|
+
import { EmailContentDto } from './create-profile-marketing-email-campaign.dto';
|
|
3
3
|
/**
|
|
4
4
|
* Promocode-payload для preview. Фронт собирает поля из реальных
|
|
5
5
|
* настроек письма (cross-sale/retargeting/birthday-discount form
|
|
@@ -27,7 +27,7 @@ export declare class PreviewPromocodeDto {
|
|
|
27
27
|
* for the current profile) or from the scope's `exampleValue`s.
|
|
28
28
|
*/
|
|
29
29
|
export declare class PreviewMarketingEmailCampaignV2Dto {
|
|
30
|
-
contentJson:
|
|
30
|
+
contentJson: EmailContentDto;
|
|
31
31
|
scope: EmailScope;
|
|
32
32
|
/** Optional: render with a specific client's data for end-to-end QA. */
|
|
33
33
|
previewClientId?: number;
|
|
@@ -56,9 +56,9 @@ exports.PreviewMarketingEmailCampaignV2Dto = PreviewMarketingEmailCampaignV2Dto;
|
|
|
56
56
|
__decorate([
|
|
57
57
|
(0, class_validator_1.IsDefined)(),
|
|
58
58
|
(0, class_validator_1.ValidateNested)(),
|
|
59
|
-
(0, class_transformer_1.Type)(() => create_profile_marketing_email_campaign_dto_1.
|
|
59
|
+
(0, class_transformer_1.Type)(() => create_profile_marketing_email_campaign_dto_1.EmailContentDto),
|
|
60
60
|
(0, class_transformer_1.Expose)(),
|
|
61
|
-
__metadata("design:type", create_profile_marketing_email_campaign_dto_1.
|
|
61
|
+
__metadata("design:type", create_profile_marketing_email_campaign_dto_1.EmailContentDto)
|
|
62
62
|
], PreviewMarketingEmailCampaignV2Dto.prototype, "contentJson", void 0);
|
|
63
63
|
__decorate([
|
|
64
64
|
(0, class_validator_1.IsEnum)(email_builder_1.EmailScope),
|
|
@@ -4,4 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export declare class PreviewProfileMarketingSegmentDto {
|
|
6
6
|
clientFilters?: Record<string, unknown>;
|
|
7
|
+
/**
|
|
8
|
+
* Frequency cap черновика. Приходит из формы, а не из БД: билдер
|
|
9
|
+
* пересчитывает аудиторию по несохранённым настройкам, и панель должна
|
|
10
|
+
* реагировать на ползунок сразу.
|
|
11
|
+
*/
|
|
12
|
+
frequencyCapDays?: number;
|
|
7
13
|
}
|
|
@@ -25,3 +25,11 @@ __decorate([
|
|
|
25
25
|
(0, class_transformer_1.Expose)(),
|
|
26
26
|
__metadata("design:type", Object)
|
|
27
27
|
], PreviewProfileMarketingSegmentDto.prototype, "clientFilters", void 0);
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, class_validator_1.IsOptional)(),
|
|
30
|
+
(0, class_validator_1.IsInt)(),
|
|
31
|
+
(0, class_validator_1.Min)(0),
|
|
32
|
+
(0, class_validator_1.Max)(365),
|
|
33
|
+
(0, class_transformer_1.Expose)(),
|
|
34
|
+
__metadata("design:type", Number)
|
|
35
|
+
], PreviewProfileMarketingSegmentDto.prototype, "frequencyCapDays", void 0);
|
|
@@ -10,7 +10,11 @@
|
|
|
10
10
|
* - `bounced` — клиенты с ранее отлетевшим email (`hasComplaint === true`).
|
|
11
11
|
* - `suppressed` — пересечение `withConsent` с `profile-marketing-suppression`
|
|
12
12
|
* (hard bounces, complaints, manual-list).
|
|
13
|
-
* - `
|
|
13
|
+
* - `frequencyCapped` — клиенты, которым письмо уже доставляли за
|
|
14
|
+
* последние `frequencyCapDays` дней (см. `frequency-cap.util`). `0`,
|
|
15
|
+
* если cap выключен.
|
|
16
|
+
* - `willBeSent` — итоговое число писем, которое уйдёт:
|
|
17
|
+
* `withConsent − suppressed − frequencyCapped`.
|
|
14
18
|
*
|
|
15
19
|
* `count` сохранён для обратной совместимости со старым UI до переключения.
|
|
16
20
|
*/
|
|
@@ -22,5 +26,6 @@ export declare class PreviewProfileMarketingSegmentRO {
|
|
|
22
26
|
unsubscribed: number;
|
|
23
27
|
bounced: number;
|
|
24
28
|
suppressed: number;
|
|
29
|
+
frequencyCapped: number;
|
|
25
30
|
willBeSent: number;
|
|
26
31
|
}
|
|
@@ -23,7 +23,11 @@ const class_transformer_1 = require("class-transformer");
|
|
|
23
23
|
* - `bounced` — клиенты с ранее отлетевшим email (`hasComplaint === true`).
|
|
24
24
|
* - `suppressed` — пересечение `withConsent` с `profile-marketing-suppression`
|
|
25
25
|
* (hard bounces, complaints, manual-list).
|
|
26
|
-
* - `
|
|
26
|
+
* - `frequencyCapped` — клиенты, которым письмо уже доставляли за
|
|
27
|
+
* последние `frequencyCapDays` дней (см. `frequency-cap.util`). `0`,
|
|
28
|
+
* если cap выключен.
|
|
29
|
+
* - `willBeSent` — итоговое число писем, которое уйдёт:
|
|
30
|
+
* `withConsent − suppressed − frequencyCapped`.
|
|
27
31
|
*
|
|
28
32
|
* `count` сохранён для обратной совместимости со старым UI до переключения.
|
|
29
33
|
*/
|
|
@@ -58,6 +62,10 @@ __decorate([
|
|
|
58
62
|
(0, class_transformer_1.Expose)(),
|
|
59
63
|
__metadata("design:type", Number)
|
|
60
64
|
], PreviewProfileMarketingSegmentRO.prototype, "suppressed", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
(0, class_transformer_1.Expose)(),
|
|
67
|
+
__metadata("design:type", Number)
|
|
68
|
+
], PreviewProfileMarketingSegmentRO.prototype, "frequencyCapped", void 0);
|
|
61
69
|
__decorate([
|
|
62
70
|
(0, class_transformer_1.Expose)(),
|
|
63
71
|
__metadata("design:type", Number)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EmailContent } from '../../email-builder';
|
|
2
2
|
import { RO } from '../../shared/ro-class';
|
|
3
3
|
import { ProfileMarketingEmailCampaignStatusEnum } from './profile-marketing-email-campaign-status.enum';
|
|
4
4
|
import { ProfileMarketingEmailGoalEnum } from './profile-marketing-email-goal.enum';
|
|
@@ -12,7 +12,7 @@ export declare class ProfileMarketingEmailCampaignRO extends RO {
|
|
|
12
12
|
fromName: string | null;
|
|
13
13
|
replyTo: string | null;
|
|
14
14
|
senderId: number | null;
|
|
15
|
-
contentJson:
|
|
15
|
+
contentJson: EmailContent;
|
|
16
16
|
utmSource: string;
|
|
17
17
|
utmMedium: string;
|
|
18
18
|
utmCampaign: string;
|
|
@@ -20,6 +20,15 @@ export declare class ProfileMarketingEmailCampaignRO extends RO {
|
|
|
20
20
|
utmTerm: string | null;
|
|
21
21
|
goalTypes: ProfileMarketingEmailGoalEnum[];
|
|
22
22
|
attributionWindowDays: number;
|
|
23
|
+
/** Frequency cap в днях; `0` — выключен. */
|
|
24
|
+
frequencyCapDays: number;
|
|
25
|
+
/** Сдвигать старт, если он попал в тихие часы. */
|
|
26
|
+
respectQuietHours: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Заполнено, когда доотправку сдерживает прогрев домена: кампания
|
|
29
|
+
* продолжится не раньше этого момента.
|
|
30
|
+
*/
|
|
31
|
+
throttledUntil: Date | null;
|
|
23
32
|
previewClientId: number | null;
|
|
24
33
|
launchedAt: Date | null;
|
|
25
34
|
scheduledAt: Date | null;
|
|
@@ -80,6 +80,18 @@ __decorate([
|
|
|
80
80
|
(0, class_transformer_1.Expose)(),
|
|
81
81
|
__metadata("design:type", Number)
|
|
82
82
|
], ProfileMarketingEmailCampaignRO.prototype, "attributionWindowDays", void 0);
|
|
83
|
+
__decorate([
|
|
84
|
+
(0, class_transformer_1.Expose)(),
|
|
85
|
+
__metadata("design:type", Number)
|
|
86
|
+
], ProfileMarketingEmailCampaignRO.prototype, "frequencyCapDays", void 0);
|
|
87
|
+
__decorate([
|
|
88
|
+
(0, class_transformer_1.Expose)(),
|
|
89
|
+
__metadata("design:type", Boolean)
|
|
90
|
+
], ProfileMarketingEmailCampaignRO.prototype, "respectQuietHours", void 0);
|
|
91
|
+
__decorate([
|
|
92
|
+
(0, class_transformer_1.Expose)(),
|
|
93
|
+
__metadata("design:type", Date)
|
|
94
|
+
], ProfileMarketingEmailCampaignRO.prototype, "throttledUntil", void 0);
|
|
83
95
|
__decorate([
|
|
84
96
|
(0, class_transformer_1.Expose)(),
|
|
85
97
|
__metadata("design:type", Number)
|
|
@@ -13,6 +13,12 @@ export declare enum ProfileMarketingEmailRecipientStatusEnum {
|
|
|
13
13
|
SkippedInvalidEmail = "skipped_invalid_email",
|
|
14
14
|
/** Дубль внутри той же кампании (одинаковый email у нескольких клиентов). */
|
|
15
15
|
SkippedDuplicate = "skipped_duplicate",
|
|
16
|
+
/**
|
|
17
|
+
* Клиенту уже приходило маркетинговое письмо за последние
|
|
18
|
+
* `campaign.frequencyCapDays` дней. Не ошибка — сознательная защита
|
|
19
|
+
* списка от переписки, см. `ProfileMarketingEmailCampaignEntity`.
|
|
20
|
+
*/
|
|
21
|
+
SkippedFrequencyCap = "skipped_frequency_cap",
|
|
16
22
|
/** Кампания отменена до отправки этому получателю. */
|
|
17
23
|
Cancelled = "cancelled"
|
|
18
24
|
}
|
|
@@ -17,6 +17,12 @@ var ProfileMarketingEmailRecipientStatusEnum;
|
|
|
17
17
|
ProfileMarketingEmailRecipientStatusEnum["SkippedInvalidEmail"] = "skipped_invalid_email";
|
|
18
18
|
/** Дубль внутри той же кампании (одинаковый email у нескольких клиентов). */
|
|
19
19
|
ProfileMarketingEmailRecipientStatusEnum["SkippedDuplicate"] = "skipped_duplicate";
|
|
20
|
+
/**
|
|
21
|
+
* Клиенту уже приходило маркетинговое письмо за последние
|
|
22
|
+
* `campaign.frequencyCapDays` дней. Не ошибка — сознательная защита
|
|
23
|
+
* списка от переписки, см. `ProfileMarketingEmailCampaignEntity`.
|
|
24
|
+
*/
|
|
25
|
+
ProfileMarketingEmailRecipientStatusEnum["SkippedFrequencyCap"] = "skipped_frequency_cap";
|
|
20
26
|
/** Кампания отменена до отправки этому получателю. */
|
|
21
27
|
ProfileMarketingEmailRecipientStatusEnum["Cancelled"] = "cancelled";
|
|
22
28
|
})(ProfileMarketingEmailRecipientStatusEnum || (exports.ProfileMarketingEmailRecipientStatusEnum = ProfileMarketingEmailRecipientStatusEnum = {}));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EmailScope } from '../../email-builder';
|
|
2
2
|
import { Languages } from '../../shared/enum/languages.enum';
|
|
3
3
|
import { MarketingAutomationTypeEnum } from '../marketing-automation/marketing-automation-type.enum';
|
|
4
|
-
import {
|
|
4
|
+
import { EmailContentDto } from './create-profile-marketing-email-campaign.dto';
|
|
5
5
|
import { PreviewPromocodeDto } from './preview-campaign-v2.dto';
|
|
6
6
|
/**
|
|
7
7
|
* Request body for `POST /profile-marketing-email-campaigns/test-send-v2`.
|
|
@@ -20,7 +20,7 @@ import { PreviewPromocodeDto } from './preview-campaign-v2.dto';
|
|
|
20
20
|
* `marketing-campaign`) → нужен `clientId` (номер клиента в профиле).
|
|
21
21
|
*/
|
|
22
22
|
export declare class TestSendMarketingEmailV2Dto {
|
|
23
|
-
contentJson:
|
|
23
|
+
contentJson: EmailContentDto;
|
|
24
24
|
scope: EmailScope;
|
|
25
25
|
/** Куда отправить тестовое письмо (inbox оператора). */
|
|
26
26
|
email: string;
|
|
@@ -39,9 +39,9 @@ exports.TestSendMarketingEmailV2Dto = TestSendMarketingEmailV2Dto;
|
|
|
39
39
|
__decorate([
|
|
40
40
|
(0, class_validator_1.IsDefined)(),
|
|
41
41
|
(0, class_validator_1.ValidateNested)(),
|
|
42
|
-
(0, class_transformer_1.Type)(() => create_profile_marketing_email_campaign_dto_1.
|
|
42
|
+
(0, class_transformer_1.Type)(() => create_profile_marketing_email_campaign_dto_1.EmailContentDto),
|
|
43
43
|
(0, class_transformer_1.Expose)(),
|
|
44
|
-
__metadata("design:type", create_profile_marketing_email_campaign_dto_1.
|
|
44
|
+
__metadata("design:type", create_profile_marketing_email_campaign_dto_1.EmailContentDto)
|
|
45
45
|
], TestSendMarketingEmailV2Dto.prototype, "contentJson", void 0);
|
|
46
46
|
__decorate([
|
|
47
47
|
(0, class_validator_1.IsEnum)(email_builder_1.EmailScope),
|
|
@@ -6,5 +6,20 @@ export declare enum NotificationTriggerEnum {
|
|
|
6
6
|
CERTIFICATE_SALES = "certificate-sale",
|
|
7
7
|
UNASSIGNMENTS = "unassigments",
|
|
8
8
|
/** Оплата игры через orders (orders.escapenavigator) */
|
|
9
|
-
ORDER_PAID_VIA_ORDERS = "order-paid-via-orders"
|
|
9
|
+
ORDER_PAID_VIA_ORDERS = "order-paid-via-orders",
|
|
10
|
+
/**
|
|
11
|
+
* Любое изменение выпущенного сертификата: гашение в заказе, доплата или
|
|
12
|
+
* возврат, отгрузка и трек-номер, срок действия, скидки и промокоды,
|
|
13
|
+
* ручная пометка «использован». Payload несёт `changedFields` и `oldData`
|
|
14
|
+
* с прежними значениями только изменившихся полей.
|
|
15
|
+
*/
|
|
16
|
+
CERTIFICATE_UPDATED = "certificate-updated",
|
|
17
|
+
/** Аннулирование сертификата (сотрудником, клиентом или по API). */
|
|
18
|
+
CERTIFICATE_ANNUL = "certificate-annul"
|
|
10
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* События, payload которых строится вокруг продажи сертификата, а не заказа.
|
|
22
|
+
* Тест канала и UI спрашивают для них код сертификата вместо номера заказа.
|
|
23
|
+
*/
|
|
24
|
+
export declare const CERTIFICATE_NOTIFICATION_TRIGGERS: NotificationTriggerEnum[];
|
|
25
|
+
export declare const isCertificateNotificationTrigger: (trigger: NotificationTriggerEnum) => boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NotificationTriggerEnum = void 0;
|
|
3
|
+
exports.isCertificateNotificationTrigger = exports.CERTIFICATE_NOTIFICATION_TRIGGERS = exports.NotificationTriggerEnum = void 0;
|
|
4
4
|
var NotificationTriggerEnum;
|
|
5
5
|
(function (NotificationTriggerEnum) {
|
|
6
6
|
NotificationTriggerEnum["NEW_ORDER"] = "new-order";
|
|
@@ -11,4 +11,24 @@ var NotificationTriggerEnum;
|
|
|
11
11
|
NotificationTriggerEnum["UNASSIGNMENTS"] = "unassigments";
|
|
12
12
|
/** Оплата игры через orders (orders.escapenavigator) */
|
|
13
13
|
NotificationTriggerEnum["ORDER_PAID_VIA_ORDERS"] = "order-paid-via-orders";
|
|
14
|
+
/**
|
|
15
|
+
* Любое изменение выпущенного сертификата: гашение в заказе, доплата или
|
|
16
|
+
* возврат, отгрузка и трек-номер, срок действия, скидки и промокоды,
|
|
17
|
+
* ручная пометка «использован». Payload несёт `changedFields` и `oldData`
|
|
18
|
+
* с прежними значениями только изменившихся полей.
|
|
19
|
+
*/
|
|
20
|
+
NotificationTriggerEnum["CERTIFICATE_UPDATED"] = "certificate-updated";
|
|
21
|
+
/** Аннулирование сертификата (сотрудником, клиентом или по API). */
|
|
22
|
+
NotificationTriggerEnum["CERTIFICATE_ANNUL"] = "certificate-annul";
|
|
14
23
|
})(NotificationTriggerEnum || (exports.NotificationTriggerEnum = NotificationTriggerEnum = {}));
|
|
24
|
+
/**
|
|
25
|
+
* События, payload которых строится вокруг продажи сертификата, а не заказа.
|
|
26
|
+
* Тест канала и UI спрашивают для них код сертификата вместо номера заказа.
|
|
27
|
+
*/
|
|
28
|
+
exports.CERTIFICATE_NOTIFICATION_TRIGGERS = [
|
|
29
|
+
NotificationTriggerEnum.CERTIFICATE_SALES,
|
|
30
|
+
NotificationTriggerEnum.CERTIFICATE_UPDATED,
|
|
31
|
+
NotificationTriggerEnum.CERTIFICATE_ANNUL,
|
|
32
|
+
];
|
|
33
|
+
const isCertificateNotificationTrigger = (trigger) => exports.CERTIFICATE_NOTIFICATION_TRIGGERS.includes(trigger);
|
|
34
|
+
exports.isCertificateNotificationTrigger = isCertificateNotificationTrigger;
|
|
@@ -13,4 +13,9 @@ export declare class NotificationChanelRO extends RO {
|
|
|
13
13
|
profileId: number;
|
|
14
14
|
/** Здоровье доставки — только для каналов типа WEBHOOK. */
|
|
15
15
|
health?: WebhookHealthRO;
|
|
16
|
+
/**
|
|
17
|
+
* Момент автоотключения канала после серии неудачных доставок.
|
|
18
|
+
* `null` — канал активен.
|
|
19
|
+
*/
|
|
20
|
+
disabledAt?: Date | null;
|
|
16
21
|
}
|
|
@@ -54,3 +54,7 @@ __decorate([
|
|
|
54
54
|
(0, class_transformer_1.Type)(() => webhook_health_ro_1.WebhookHealthRO),
|
|
55
55
|
__metadata("design:type", webhook_health_ro_1.WebhookHealthRO)
|
|
56
56
|
], NotificationChanelRO.prototype, "health", void 0);
|
|
57
|
+
__decorate([
|
|
58
|
+
(0, class_transformer_1.Expose)(),
|
|
59
|
+
__metadata("design:type", Date)
|
|
60
|
+
], NotificationChanelRO.prototype, "disabledAt", void 0);
|