@endora-commerce/mod-newsletter 0.100.0
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/LICENSE +21 -0
- package/README.md +66 -0
- package/dist/admin/api/newsletter-client.d.ts +64 -0
- package/dist/admin/api/newsletter-client.d.ts.map +1 -0
- package/dist/admin/api/newsletter-client.js +71 -0
- package/dist/admin/api/newsletter-client.js.map +1 -0
- package/dist/admin/email-variables.d.ts +21 -0
- package/dist/admin/email-variables.d.ts.map +1 -0
- package/dist/admin/email-variables.js +48 -0
- package/dist/admin/email-variables.js.map +1 -0
- package/dist/admin/index.d.ts +44 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +149 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/pages/AutomationBuilder.d.ts +8 -0
- package/dist/admin/pages/AutomationBuilder.d.ts.map +1 -0
- package/dist/admin/pages/AutomationBuilder.js +131 -0
- package/dist/admin/pages/AutomationBuilder.js.map +1 -0
- package/dist/admin/pages/AutomationsPage.d.ts +8 -0
- package/dist/admin/pages/AutomationsPage.d.ts.map +1 -0
- package/dist/admin/pages/AutomationsPage.js +43 -0
- package/dist/admin/pages/AutomationsPage.js.map +1 -0
- package/dist/admin/pages/BlocksPage.d.ts +8 -0
- package/dist/admin/pages/BlocksPage.d.ts.map +1 -0
- package/dist/admin/pages/BlocksPage.js +110 -0
- package/dist/admin/pages/BlocksPage.js.map +1 -0
- package/dist/admin/pages/CampaignEditor.d.ts +8 -0
- package/dist/admin/pages/CampaignEditor.d.ts.map +1 -0
- package/dist/admin/pages/CampaignEditor.js +144 -0
- package/dist/admin/pages/CampaignEditor.js.map +1 -0
- package/dist/admin/pages/CampaignStats.d.ts +8 -0
- package/dist/admin/pages/CampaignStats.d.ts.map +1 -0
- package/dist/admin/pages/CampaignStats.js +45 -0
- package/dist/admin/pages/CampaignStats.js.map +1 -0
- package/dist/admin/pages/CampaignsPage.d.ts +8 -0
- package/dist/admin/pages/CampaignsPage.d.ts.map +1 -0
- package/dist/admin/pages/CampaignsPage.js +28 -0
- package/dist/admin/pages/CampaignsPage.js.map +1 -0
- package/dist/admin/pages/ProviderSettingsPage.d.ts +8 -0
- package/dist/admin/pages/ProviderSettingsPage.d.ts.map +1 -0
- package/dist/admin/pages/ProviderSettingsPage.js +64 -0
- package/dist/admin/pages/ProviderSettingsPage.js.map +1 -0
- package/dist/admin/pages/SubscribersPage.d.ts +8 -0
- package/dist/admin/pages/SubscribersPage.d.ts.map +1 -0
- package/dist/admin/pages/SubscribersPage.js +55 -0
- package/dist/admin/pages/SubscribersPage.js.map +1 -0
- package/dist/admin/pages/TagsPage.d.ts +8 -0
- package/dist/admin/pages/TagsPage.d.ts.map +1 -0
- package/dist/admin/pages/TagsPage.js +114 -0
- package/dist/admin/pages/TagsPage.js.map +1 -0
- package/dist/backend/entities/newsletter-automation-run.entity.d.ts +19 -0
- package/dist/backend/entities/newsletter-automation-run.entity.d.ts.map +1 -0
- package/dist/backend/entities/newsletter-automation-run.entity.js +72 -0
- package/dist/backend/entities/newsletter-automation-run.entity.js.map +1 -0
- package/dist/backend/entities/newsletter-automation.entity.d.ts +22 -0
- package/dist/backend/entities/newsletter-automation.entity.d.ts.map +1 -0
- package/dist/backend/entities/newsletter-automation.entity.js +86 -0
- package/dist/backend/entities/newsletter-automation.entity.js.map +1 -0
- package/dist/backend/entities/newsletter-campaign-subscriber.entity.d.ts +6 -0
- package/dist/backend/entities/newsletter-campaign-subscriber.entity.d.ts.map +1 -0
- package/dist/backend/entities/newsletter-campaign-subscriber.entity.js +30 -0
- package/dist/backend/entities/newsletter-campaign-subscriber.entity.js.map +1 -0
- package/dist/backend/entities/newsletter-campaign.entity.d.ts +22 -0
- package/dist/backend/entities/newsletter-campaign.entity.d.ts.map +1 -0
- package/dist/backend/entities/newsletter-campaign.entity.js +102 -0
- package/dist/backend/entities/newsletter-campaign.entity.js.map +1 -0
- package/dist/backend/entities/newsletter-custom-field.entity.d.ts +12 -0
- package/dist/backend/entities/newsletter-custom-field.entity.d.ts.map +1 -0
- package/dist/backend/entities/newsletter-custom-field.entity.js +53 -0
- package/dist/backend/entities/newsletter-custom-field.entity.js.map +1 -0
- package/dist/backend/entities/newsletter-email-block-sales-channel.entity.d.ts +7 -0
- package/dist/backend/entities/newsletter-email-block-sales-channel.entity.d.ts.map +1 -0
- package/dist/backend/entities/newsletter-email-block-sales-channel.entity.js +35 -0
- package/dist/backend/entities/newsletter-email-block-sales-channel.entity.js.map +1 -0
- package/dist/backend/entities/newsletter-email-block.entity.d.ts +21 -0
- package/dist/backend/entities/newsletter-email-block.entity.d.ts.map +1 -0
- package/dist/backend/entities/newsletter-email-block.entity.js +78 -0
- package/dist/backend/entities/newsletter-email-block.entity.js.map +1 -0
- package/dist/backend/entities/newsletter-engagement-event.entity.d.ts +12 -0
- package/dist/backend/entities/newsletter-engagement-event.entity.d.ts.map +1 -0
- package/dist/backend/entities/newsletter-engagement-event.entity.js +54 -0
- package/dist/backend/entities/newsletter-engagement-event.entity.js.map +1 -0
- package/dist/backend/entities/newsletter-send-record.entity.d.ts +23 -0
- package/dist/backend/entities/newsletter-send-record.entity.d.ts.map +1 -0
- package/dist/backend/entities/newsletter-send-record.entity.js +89 -0
- package/dist/backend/entities/newsletter-send-record.entity.js.map +1 -0
- package/dist/backend/entities/newsletter-subscriber-tag.entity.d.ts +6 -0
- package/dist/backend/entities/newsletter-subscriber-tag.entity.d.ts.map +1 -0
- package/dist/backend/entities/newsletter-subscriber-tag.entity.js +31 -0
- package/dist/backend/entities/newsletter-subscriber-tag.entity.js.map +1 -0
- package/dist/backend/entities/newsletter-subscriber.entity.d.ts +63 -0
- package/dist/backend/entities/newsletter-subscriber.entity.d.ts.map +1 -0
- package/dist/backend/entities/newsletter-subscriber.entity.js +147 -0
- package/dist/backend/entities/newsletter-subscriber.entity.js.map +1 -0
- package/dist/backend/entities/newsletter-suppression.entity.d.ts +14 -0
- package/dist/backend/entities/newsletter-suppression.entity.d.ts.map +1 -0
- package/dist/backend/entities/newsletter-suppression.entity.js +51 -0
- package/dist/backend/entities/newsletter-suppression.entity.js.map +1 -0
- package/dist/backend/entities/newsletter-tag.entity.d.ts +12 -0
- package/dist/backend/entities/newsletter-tag.entity.d.ts.map +1 -0
- package/dist/backend/entities/newsletter-tag.entity.js +53 -0
- package/dist/backend/entities/newsletter-tag.entity.js.map +1 -0
- package/dist/backend/index.d.ts +120 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +139 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/plugin.d.ts +114 -0
- package/dist/backend/plugin.d.ts.map +1 -0
- package/dist/backend/plugin.js +171 -0
- package/dist/backend/plugin.js.map +1 -0
- package/dist/backend/routes.admin.d.ts +27 -0
- package/dist/backend/routes.admin.d.ts.map +1 -0
- package/dist/backend/routes.admin.js +118 -0
- package/dist/backend/routes.admin.js.map +1 -0
- package/dist/backend/routes.self.d.ts +15 -0
- package/dist/backend/routes.self.d.ts.map +1 -0
- package/dist/backend/routes.self.js +28 -0
- package/dist/backend/routes.self.js.map +1 -0
- package/dist/backend/routes.storefront.d.ts +24 -0
- package/dist/backend/routes.storefront.d.ts.map +1 -0
- package/dist/backend/routes.storefront.js +79 -0
- package/dist/backend/routes.storefront.js.map +1 -0
- package/dist/backend/services/audience-resolver.d.ts +20 -0
- package/dist/backend/services/audience-resolver.d.ts.map +1 -0
- package/dist/backend/services/audience-resolver.js +41 -0
- package/dist/backend/services/audience-resolver.js.map +1 -0
- package/dist/backend/services/automation.service.d.ts +58 -0
- package/dist/backend/services/automation.service.d.ts.map +1 -0
- package/dist/backend/services/automation.service.js +301 -0
- package/dist/backend/services/automation.service.js.map +1 -0
- package/dist/backend/services/campaign-dispatch.service.d.ts +50 -0
- package/dist/backend/services/campaign-dispatch.service.d.ts.map +1 -0
- package/dist/backend/services/campaign-dispatch.service.js +130 -0
- package/dist/backend/services/campaign-dispatch.service.js.map +1 -0
- package/dist/backend/services/campaign.service.d.ts +40 -0
- package/dist/backend/services/campaign.service.d.ts.map +1 -0
- package/dist/backend/services/campaign.service.js +195 -0
- package/dist/backend/services/campaign.service.js.map +1 -0
- package/dist/backend/services/consent-block-seeder.d.ts +30 -0
- package/dist/backend/services/consent-block-seeder.d.ts.map +1 -0
- package/dist/backend/services/consent-block-seeder.js +52 -0
- package/dist/backend/services/consent-block-seeder.js.map +1 -0
- package/dist/backend/services/content.service.d.ts +52 -0
- package/dist/backend/services/content.service.d.ts.map +1 -0
- package/dist/backend/services/content.service.js +48 -0
- package/dist/backend/services/content.service.js.map +1 -0
- package/dist/backend/services/custom-field.service.d.ts +16 -0
- package/dist/backend/services/custom-field.service.d.ts.map +1 -0
- package/dist/backend/services/custom-field.service.js +67 -0
- package/dist/backend/services/custom-field.service.js.map +1 -0
- package/dist/backend/services/email-block.service.d.ts +26 -0
- package/dist/backend/services/email-block.service.d.ts.map +1 -0
- package/dist/backend/services/email-block.service.js +120 -0
- package/dist/backend/services/email-block.service.js.map +1 -0
- package/dist/backend/services/opt-in.service.d.ts +25 -0
- package/dist/backend/services/opt-in.service.d.ts.map +1 -0
- package/dist/backend/services/opt-in.service.js +46 -0
- package/dist/backend/services/opt-in.service.js.map +1 -0
- package/dist/backend/services/provider/console-provider.d.ts +32 -0
- package/dist/backend/services/provider/console-provider.d.ts.map +1 -0
- package/dist/backend/services/provider/console-provider.js +31 -0
- package/dist/backend/services/provider/console-provider.js.map +1 -0
- package/dist/backend/services/provider/provider-registry.d.ts +51 -0
- package/dist/backend/services/provider/provider-registry.d.ts.map +1 -0
- package/dist/backend/services/provider/provider-registry.js +84 -0
- package/dist/backend/services/provider/provider-registry.js.map +1 -0
- package/dist/backend/services/provider/smtp-provider.d.ts +30 -0
- package/dist/backend/services/provider/smtp-provider.d.ts.map +1 -0
- package/dist/backend/services/provider/smtp-provider.js +42 -0
- package/dist/backend/services/provider/smtp-provider.js.map +1 -0
- package/dist/backend/services/provider-admin.service.d.ts +39 -0
- package/dist/backend/services/provider-admin.service.d.ts.map +1 -0
- package/dist/backend/services/provider-admin.service.js +59 -0
- package/dist/backend/services/provider-admin.service.js.map +1 -0
- package/dist/backend/services/provider-admin.types.d.ts +6 -0
- package/dist/backend/services/provider-admin.types.d.ts.map +1 -0
- package/dist/backend/services/provider-admin.types.js +2 -0
- package/dist/backend/services/provider-admin.types.js.map +1 -0
- package/dist/backend/services/queues/newsletter-queues.d.ts +34 -0
- package/dist/backend/services/queues/newsletter-queues.d.ts.map +1 -0
- package/dist/backend/services/queues/newsletter-queues.js +58 -0
- package/dist/backend/services/queues/newsletter-queues.js.map +1 -0
- package/dist/backend/services/self.service.d.ts +17 -0
- package/dist/backend/services/self.service.d.ts.map +1 -0
- package/dist/backend/services/self.service.js +44 -0
- package/dist/backend/services/self.service.js.map +1 -0
- package/dist/backend/services/stats.service.d.ts +10 -0
- package/dist/backend/services/stats.service.d.ts.map +1 -0
- package/dist/backend/services/stats.service.js +45 -0
- package/dist/backend/services/stats.service.js.map +1 -0
- package/dist/backend/services/subscriber-admin.service.d.ts +26 -0
- package/dist/backend/services/subscriber-admin.service.d.ts.map +1 -0
- package/dist/backend/services/subscriber-admin.service.js +163 -0
- package/dist/backend/services/subscriber-admin.service.js.map +1 -0
- package/dist/backend/services/subscriber.service.d.ts +91 -0
- package/dist/backend/services/subscriber.service.d.ts.map +1 -0
- package/dist/backend/services/subscriber.service.js +280 -0
- package/dist/backend/services/subscriber.service.js.map +1 -0
- package/dist/backend/services/tag.service.d.ts +16 -0
- package/dist/backend/services/tag.service.d.ts.map +1 -0
- package/dist/backend/services/tag.service.js +79 -0
- package/dist/backend/services/tag.service.js.map +1 -0
- package/dist/backend/services/token.helper.d.ts +32 -0
- package/dist/backend/services/token.helper.d.ts.map +1 -0
- package/dist/backend/services/token.helper.js +76 -0
- package/dist/backend/services/token.helper.js.map +1 -0
- package/dist/backend/services/tracking.service.d.ts +14 -0
- package/dist/backend/services/tracking.service.d.ts.map +1 -0
- package/dist/backend/services/tracking.service.js +45 -0
- package/dist/backend/services/tracking.service.js.map +1 -0
- package/dist/manifest.d.ts +192 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +211 -0
- package/dist/manifest.js.map +1 -0
- package/dist/migrations/20260629T200954_newsletter_init.d.ts +6 -0
- package/dist/migrations/20260629T200954_newsletter_init.d.ts.map +1 -0
- package/dist/migrations/20260629T200954_newsletter_init.js +261 -0
- package/dist/migrations/20260629T200954_newsletter_init.js.map +1 -0
- package/dist/migrations/20260830T212736_newsletter_organization_attribution.d.ts +116 -0
- package/dist/migrations/20260830T212736_newsletter_organization_attribution.d.ts.map +1 -0
- package/dist/migrations/20260830T212736_newsletter_organization_attribution.js +186 -0
- package/dist/migrations/20260830T212736_newsletter_organization_attribution.js.map +1 -0
- package/dist/migrations/20260903T101752_newsletter_namespace_block_names.d.ts +6 -0
- package/dist/migrations/20260903T101752_newsletter_namespace_block_names.d.ts.map +1 -0
- package/dist/migrations/20260903T101752_newsletter_namespace_block_names.js +58 -0
- package/dist/migrations/20260903T101752_newsletter_namespace_block_names.js.map +1 -0
- package/dist/migrations/20260912T125702_newsletter_subscriber_tenant_scope_index.d.ts +23 -0
- package/dist/migrations/20260912T125702_newsletter_subscriber_tenant_scope_index.d.ts.map +1 -0
- package/dist/migrations/20260912T125702_newsletter_subscriber_tenant_scope_index.js +27 -0
- package/dist/migrations/20260912T125702_newsletter_subscriber_tenant_scope_index.js.map +1 -0
- package/dist/migrations/index.d.ts +30 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +35 -0
- package/dist/migrations/index.js.map +1 -0
- package/docs/newsletter.md +94 -0
- package/i18n/en.json +27 -0
- package/i18n/pl.json +27 -0
- package/package.json +119 -0
- package/tailwind.css +14 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Entity, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
|
|
11
|
+
import { GlobalEntity } from '@endora-commerce/platform/tenancy';
|
|
12
|
+
import { randomUUID } from 'crypto';
|
|
13
|
+
/**
|
|
14
|
+
* NewsletterAutomation — feature 048. A linear send/wait sequence triggered by
|
|
15
|
+
* all/tag/tag-list. `steps` is an ordered JSON list whose shape leaves room for
|
|
16
|
+
* future branch/condition/tag-action node types (research R9).
|
|
17
|
+
*/
|
|
18
|
+
let NewsletterAutomation = class NewsletterAutomation {
|
|
19
|
+
[OptionalProps];
|
|
20
|
+
id = randomUUID();
|
|
21
|
+
name;
|
|
22
|
+
status = 'draft';
|
|
23
|
+
triggerType = 'all';
|
|
24
|
+
triggerTagIds = [];
|
|
25
|
+
salesChannelId = null;
|
|
26
|
+
language;
|
|
27
|
+
reentryPolicy = 'once';
|
|
28
|
+
steps = [];
|
|
29
|
+
version = 1;
|
|
30
|
+
createdAt = new Date();
|
|
31
|
+
updatedAt = new Date();
|
|
32
|
+
};
|
|
33
|
+
__decorate([
|
|
34
|
+
PrimaryKey({ type: 'uuid' }),
|
|
35
|
+
__metadata("design:type", String)
|
|
36
|
+
], NewsletterAutomation.prototype, "id", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
Property({ type: 'string', length: 200 }),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], NewsletterAutomation.prototype, "name", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
Property({ type: 'string', length: 16 }),
|
|
43
|
+
__metadata("design:type", String)
|
|
44
|
+
], NewsletterAutomation.prototype, "status", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
Property({ type: 'string', length: 16, fieldName: 'trigger_type' }),
|
|
47
|
+
__metadata("design:type", String)
|
|
48
|
+
], NewsletterAutomation.prototype, "triggerType", void 0);
|
|
49
|
+
__decorate([
|
|
50
|
+
Property({ type: 'json', fieldName: 'trigger_tag_ids' }),
|
|
51
|
+
__metadata("design:type", Array)
|
|
52
|
+
], NewsletterAutomation.prototype, "triggerTagIds", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
Property({ type: 'uuid', fieldName: 'sales_channel_id', nullable: true }),
|
|
55
|
+
__metadata("design:type", Object)
|
|
56
|
+
], NewsletterAutomation.prototype, "salesChannelId", void 0);
|
|
57
|
+
__decorate([
|
|
58
|
+
Property({ type: 'string', length: 12 }),
|
|
59
|
+
__metadata("design:type", String)
|
|
60
|
+
], NewsletterAutomation.prototype, "language", void 0);
|
|
61
|
+
__decorate([
|
|
62
|
+
Property({ type: 'string', length: 16, fieldName: 'reentry_policy' }),
|
|
63
|
+
__metadata("design:type", String)
|
|
64
|
+
], NewsletterAutomation.prototype, "reentryPolicy", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
Property({ type: 'json' }),
|
|
67
|
+
__metadata("design:type", Array)
|
|
68
|
+
], NewsletterAutomation.prototype, "steps", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
Property({ type: 'integer' }),
|
|
71
|
+
__metadata("design:type", Number)
|
|
72
|
+
], NewsletterAutomation.prototype, "version", void 0);
|
|
73
|
+
__decorate([
|
|
74
|
+
Property({ type: 'datetime', fieldName: 'created_at', onCreate: () => new Date() }),
|
|
75
|
+
__metadata("design:type", Date)
|
|
76
|
+
], NewsletterAutomation.prototype, "createdAt", void 0);
|
|
77
|
+
__decorate([
|
|
78
|
+
Property({ type: 'datetime', fieldName: 'updated_at', onUpdate: () => new Date() }),
|
|
79
|
+
__metadata("design:type", Date)
|
|
80
|
+
], NewsletterAutomation.prototype, "updatedAt", void 0);
|
|
81
|
+
NewsletterAutomation = __decorate([
|
|
82
|
+
GlobalEntity(),
|
|
83
|
+
Entity({ tableName: 'newsletter_automations' })
|
|
84
|
+
], NewsletterAutomation);
|
|
85
|
+
export { NewsletterAutomation };
|
|
86
|
+
//# sourceMappingURL=newsletter-automation.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter-automation.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/newsletter-automation.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;;GAIG;AAGI,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,CAAC,aAAa,CAAC,CAOC;IAGhB,EAAE,GAAW,UAAU,EAAE,CAAC;IAG1B,IAAI,CAAU;IAGd,MAAM,GAAkC,OAAO,CAAC;IAGhD,WAAW,GAA+B,KAAK,CAAC;IAGhD,aAAa,GAAa,EAAE,CAAC;IAG7B,cAAc,GAAkB,IAAI,CAAC;IAGrC,QAAQ,CAAU;IAGlB,aAAa,GAA6B,MAAM,CAAC;IAGjD,KAAK,GAAmC,EAAE,CAAC;IAG3C,OAAO,GAAW,CAAC,CAAC;IAGpB,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;IAG7B,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;CAC9B,CAAA;AAlCC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;gDACH;AAG1B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;kDAC5B;AAGd;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;oDACO;AAGhD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;;yDACpB;AAGhD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;;2DAC5B;AAG7B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4DACrC;AAGrC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;sDACvB;AAGlB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;;2DACrB;AAGjD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;8BACpB,KAAK;mDAA+B;AAG3C;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;qDACV;AAGpB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BACzE,IAAI;uDAAc;AAG7B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BACzE,IAAI;uDAAc;AA5ClB,oBAAoB;IAFhC,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC;GACnC,oBAAoB,CA6ChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter-campaign-subscriber.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/newsletter-campaign-subscriber.entity.ts"],"names":[],"mappings":"AAGA,oFAAoF;AACpF,qBAEa,4BAA4B;IAEvC,UAAU,EAAG,MAAM,CAAC;IAGpB,YAAY,EAAG,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Entity, PrimaryKey } from '@mikro-orm/core';
|
|
11
|
+
import { GlobalEntity } from '@endora-commerce/platform/tenancy';
|
|
12
|
+
/** NewsletterCampaignSubscriber — feature 048. Bridge for `target_type = group`. */
|
|
13
|
+
let NewsletterCampaignSubscriber = class NewsletterCampaignSubscriber {
|
|
14
|
+
campaignId;
|
|
15
|
+
subscriberId;
|
|
16
|
+
};
|
|
17
|
+
__decorate([
|
|
18
|
+
PrimaryKey({ type: 'uuid', fieldName: 'campaign_id' }),
|
|
19
|
+
__metadata("design:type", String)
|
|
20
|
+
], NewsletterCampaignSubscriber.prototype, "campaignId", void 0);
|
|
21
|
+
__decorate([
|
|
22
|
+
PrimaryKey({ type: 'uuid', fieldName: 'subscriber_id' }),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], NewsletterCampaignSubscriber.prototype, "subscriberId", void 0);
|
|
25
|
+
NewsletterCampaignSubscriber = __decorate([
|
|
26
|
+
GlobalEntity(),
|
|
27
|
+
Entity({ tableName: 'newsletter_campaign_subscribers' })
|
|
28
|
+
], NewsletterCampaignSubscriber);
|
|
29
|
+
export { NewsletterCampaignSubscriber };
|
|
30
|
+
//# sourceMappingURL=newsletter-campaign-subscriber.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter-campaign-subscriber.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/newsletter-campaign-subscriber.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE,oFAAoF;AAG7E,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;IAEvC,UAAU,CAAU;IAGpB,YAAY,CAAU;CACvB,CAAA;AAJC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;;gEACnC;AAGpB;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;;kEACnC;AALX,4BAA4B;IAFxC,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,iCAAiC,EAAE,CAAC;GAC5C,4BAA4B,CAMxC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { OptionalProps } from '@mikro-orm/core';
|
|
2
|
+
/** NewsletterCampaign — feature 048. A one-off bulk send to a target audience. */
|
|
3
|
+
export declare class NewsletterCampaign {
|
|
4
|
+
[OptionalProps]?: 'salesChannelId' | 'targetTagIds' | 'trackingEnabled' | 'status' | 'scheduledAt' | 'dispatchJobId' | 'stats' | 'version' | 'createdAt' | 'updatedAt';
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
subject: string;
|
|
8
|
+
content: Record<string, unknown>;
|
|
9
|
+
salesChannelId: string | null;
|
|
10
|
+
language: string;
|
|
11
|
+
targetType: 'all' | 'group' | 'tag' | 'tag_list';
|
|
12
|
+
targetTagIds: string[];
|
|
13
|
+
trackingEnabled: boolean;
|
|
14
|
+
status: 'draft' | 'scheduled' | 'sending' | 'sent' | 'cancelled';
|
|
15
|
+
scheduledAt: Date | null;
|
|
16
|
+
dispatchJobId: string | null;
|
|
17
|
+
stats: Record<string, unknown>;
|
|
18
|
+
version: number;
|
|
19
|
+
createdAt: Date;
|
|
20
|
+
updatedAt: Date;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=newsletter-campaign.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter-campaign.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/newsletter-campaign.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AAI9E,kFAAkF;AAClF,qBAEa,kBAAkB;IAC7B,CAAC,aAAa,CAAC,CAAC,EACZ,gBAAgB,GAChB,cAAc,GACd,iBAAiB,GACjB,QAAQ,GACR,aAAa,GACb,eAAe,GACf,OAAO,GACP,SAAS,GACT,WAAW,GACX,WAAW,CAAC;IAGhB,EAAE,EAAE,MAAM,CAAgB;IAG1B,IAAI,EAAG,MAAM,CAAC;IAGd,OAAO,EAAG,MAAM,CAAC;IAGjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAGtC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGrC,QAAQ,EAAG,MAAM,CAAC;IAGlB,UAAU,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,UAAU,CAAS;IAGzD,YAAY,EAAE,MAAM,EAAE,CAAM;IAG5B,eAAe,EAAE,OAAO,CAAQ;IAGhC,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,CAAW;IAG3E,WAAW,EAAE,IAAI,GAAG,IAAI,CAAQ;IAGhC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAGpC,OAAO,EAAE,MAAM,CAAK;IAGpB,SAAS,EAAE,IAAI,CAAc;IAG7B,SAAS,EAAE,IAAI,CAAc;CAC9B"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Entity, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
|
|
11
|
+
import { GlobalEntity } from '@endora-commerce/platform/tenancy';
|
|
12
|
+
import { randomUUID } from 'crypto';
|
|
13
|
+
/** NewsletterCampaign — feature 048. A one-off bulk send to a target audience. */
|
|
14
|
+
let NewsletterCampaign = class NewsletterCampaign {
|
|
15
|
+
[OptionalProps];
|
|
16
|
+
id = randomUUID();
|
|
17
|
+
name;
|
|
18
|
+
subject;
|
|
19
|
+
content = {};
|
|
20
|
+
salesChannelId = null;
|
|
21
|
+
language;
|
|
22
|
+
targetType = 'all';
|
|
23
|
+
targetTagIds = [];
|
|
24
|
+
trackingEnabled = true;
|
|
25
|
+
status = 'draft';
|
|
26
|
+
scheduledAt = null;
|
|
27
|
+
dispatchJobId = null;
|
|
28
|
+
stats = {};
|
|
29
|
+
version = 1;
|
|
30
|
+
createdAt = new Date();
|
|
31
|
+
updatedAt = new Date();
|
|
32
|
+
};
|
|
33
|
+
__decorate([
|
|
34
|
+
PrimaryKey({ type: 'uuid' }),
|
|
35
|
+
__metadata("design:type", String)
|
|
36
|
+
], NewsletterCampaign.prototype, "id", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
Property({ type: 'string', length: 200 }),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], NewsletterCampaign.prototype, "name", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
Property({ type: 'text' }),
|
|
43
|
+
__metadata("design:type", String)
|
|
44
|
+
], NewsletterCampaign.prototype, "subject", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
Property({ type: 'json' }),
|
|
47
|
+
__metadata("design:type", Object)
|
|
48
|
+
], NewsletterCampaign.prototype, "content", void 0);
|
|
49
|
+
__decorate([
|
|
50
|
+
Property({ type: 'uuid', fieldName: 'sales_channel_id', nullable: true }),
|
|
51
|
+
__metadata("design:type", Object)
|
|
52
|
+
], NewsletterCampaign.prototype, "salesChannelId", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
Property({ type: 'string', length: 12 }),
|
|
55
|
+
__metadata("design:type", String)
|
|
56
|
+
], NewsletterCampaign.prototype, "language", void 0);
|
|
57
|
+
__decorate([
|
|
58
|
+
Property({ type: 'string', length: 16, fieldName: 'target_type' }),
|
|
59
|
+
__metadata("design:type", String)
|
|
60
|
+
], NewsletterCampaign.prototype, "targetType", void 0);
|
|
61
|
+
__decorate([
|
|
62
|
+
Property({ type: 'json', fieldName: 'target_tag_ids' }),
|
|
63
|
+
__metadata("design:type", Array)
|
|
64
|
+
], NewsletterCampaign.prototype, "targetTagIds", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
Property({ type: 'boolean', fieldName: 'tracking_enabled' }),
|
|
67
|
+
__metadata("design:type", Boolean)
|
|
68
|
+
], NewsletterCampaign.prototype, "trackingEnabled", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
Property({ type: 'string', length: 16 }),
|
|
71
|
+
__metadata("design:type", String)
|
|
72
|
+
], NewsletterCampaign.prototype, "status", void 0);
|
|
73
|
+
__decorate([
|
|
74
|
+
Property({ type: 'datetime', fieldName: 'scheduled_at', nullable: true }),
|
|
75
|
+
__metadata("design:type", Object)
|
|
76
|
+
], NewsletterCampaign.prototype, "scheduledAt", void 0);
|
|
77
|
+
__decorate([
|
|
78
|
+
Property({ type: 'string', length: 128, fieldName: 'dispatch_job_id', nullable: true }),
|
|
79
|
+
__metadata("design:type", Object)
|
|
80
|
+
], NewsletterCampaign.prototype, "dispatchJobId", void 0);
|
|
81
|
+
__decorate([
|
|
82
|
+
Property({ type: 'json' }),
|
|
83
|
+
__metadata("design:type", Object)
|
|
84
|
+
], NewsletterCampaign.prototype, "stats", void 0);
|
|
85
|
+
__decorate([
|
|
86
|
+
Property({ type: 'integer' }),
|
|
87
|
+
__metadata("design:type", Number)
|
|
88
|
+
], NewsletterCampaign.prototype, "version", void 0);
|
|
89
|
+
__decorate([
|
|
90
|
+
Property({ type: 'datetime', fieldName: 'created_at', onCreate: () => new Date() }),
|
|
91
|
+
__metadata("design:type", Date)
|
|
92
|
+
], NewsletterCampaign.prototype, "createdAt", void 0);
|
|
93
|
+
__decorate([
|
|
94
|
+
Property({ type: 'datetime', fieldName: 'updated_at', onUpdate: () => new Date() }),
|
|
95
|
+
__metadata("design:type", Date)
|
|
96
|
+
], NewsletterCampaign.prototype, "updatedAt", void 0);
|
|
97
|
+
NewsletterCampaign = __decorate([
|
|
98
|
+
GlobalEntity(),
|
|
99
|
+
Entity({ tableName: 'newsletter_campaigns' })
|
|
100
|
+
], NewsletterCampaign);
|
|
101
|
+
export { NewsletterCampaign };
|
|
102
|
+
//# sourceMappingURL=newsletter-campaign.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter-campaign.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/newsletter-campaign.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,kFAAkF;AAG3E,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,CAAC,aAAa,CAAC,CAUC;IAGhB,EAAE,GAAW,UAAU,EAAE,CAAC;IAG1B,IAAI,CAAU;IAGd,OAAO,CAAU;IAGjB,OAAO,GAA4B,EAAE,CAAC;IAGtC,cAAc,GAAkB,IAAI,CAAC;IAGrC,QAAQ,CAAU;IAGlB,UAAU,GAAyC,KAAK,CAAC;IAGzD,YAAY,GAAa,EAAE,CAAC;IAG5B,eAAe,GAAY,IAAI,CAAC;IAGhC,MAAM,GAA6D,OAAO,CAAC;IAG3E,WAAW,GAAgB,IAAI,CAAC;IAGhC,aAAa,GAAkB,IAAI,CAAC;IAGpC,KAAK,GAA4B,EAAE,CAAC;IAGpC,OAAO,GAAW,CAAC,CAAC;IAGpB,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;IAG7B,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;CAC9B,CAAA;AA9CC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;8CACH;AAG1B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;gDAC5B;AAGd;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;mDACV;AAGjB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;mDACW;AAGtC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0DACrC;AAGrC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;oDACvB;AAGlB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;;sDACV;AAGzD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;;wDAC5B;AAG5B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;;2DAC7B;AAGhC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;kDACkC;AAG3E;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uDAC1C;AAGhC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yDACpD;AAGpC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;iDACS;AAGpC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;mDACV;AAGpB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BACzE,IAAI;qDAAc;AAG7B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BACzE,IAAI;qDAAc;AA3DlB,kBAAkB;IAF9B,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC;GACjC,kBAAkB,CA4D9B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { OptionalProps } from '@mikro-orm/core';
|
|
2
|
+
/** NewsletterCustomField — feature 048. Operator-defined subscriber attribute. */
|
|
3
|
+
export declare class NewsletterCustomField {
|
|
4
|
+
[OptionalProps]?: 'createdAt' | 'updatedAt';
|
|
5
|
+
id: string;
|
|
6
|
+
key: string;
|
|
7
|
+
label: string;
|
|
8
|
+
type: 'text' | 'number' | 'boolean' | 'date';
|
|
9
|
+
createdAt: Date;
|
|
10
|
+
updatedAt: Date;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=newsletter-custom-field.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter-custom-field.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/newsletter-custom-field.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,aAAa,EAAgC,MAAM,iBAAiB,CAAC;AAItF,kFAAkF;AAClF,qBAEa,qBAAqB;IAChC,CAAC,aAAa,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IAG5C,EAAE,EAAE,MAAM,CAAgB;IAI1B,GAAG,EAAG,MAAM,CAAC;IAGb,KAAK,EAAG,MAAM,CAAC;IAGf,IAAI,EAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IAG9C,SAAS,EAAE,IAAI,CAAc;IAG7B,SAAS,EAAE,IAAI,CAAc;CAC9B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Entity, OptionalProps, PrimaryKey, Property, Unique } from '@mikro-orm/core';
|
|
11
|
+
import { GlobalEntity } from '@endora-commerce/platform/tenancy';
|
|
12
|
+
import { randomUUID } from 'crypto';
|
|
13
|
+
/** NewsletterCustomField — feature 048. Operator-defined subscriber attribute. */
|
|
14
|
+
let NewsletterCustomField = class NewsletterCustomField {
|
|
15
|
+
[OptionalProps];
|
|
16
|
+
id = randomUUID();
|
|
17
|
+
key;
|
|
18
|
+
label;
|
|
19
|
+
type;
|
|
20
|
+
createdAt = new Date();
|
|
21
|
+
updatedAt = new Date();
|
|
22
|
+
};
|
|
23
|
+
__decorate([
|
|
24
|
+
PrimaryKey({ type: 'uuid' }),
|
|
25
|
+
__metadata("design:type", String)
|
|
26
|
+
], NewsletterCustomField.prototype, "id", void 0);
|
|
27
|
+
__decorate([
|
|
28
|
+
Property({ type: 'string', length: 64 }),
|
|
29
|
+
Unique(),
|
|
30
|
+
__metadata("design:type", String)
|
|
31
|
+
], NewsletterCustomField.prototype, "key", void 0);
|
|
32
|
+
__decorate([
|
|
33
|
+
Property({ type: 'string', length: 160 }),
|
|
34
|
+
__metadata("design:type", String)
|
|
35
|
+
], NewsletterCustomField.prototype, "label", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
Property({ type: 'string', length: 16 }),
|
|
38
|
+
__metadata("design:type", String)
|
|
39
|
+
], NewsletterCustomField.prototype, "type", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
Property({ type: 'datetime', fieldName: 'created_at', onCreate: () => new Date() }),
|
|
42
|
+
__metadata("design:type", Date)
|
|
43
|
+
], NewsletterCustomField.prototype, "createdAt", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
Property({ type: 'datetime', fieldName: 'updated_at', onUpdate: () => new Date() }),
|
|
46
|
+
__metadata("design:type", Date)
|
|
47
|
+
], NewsletterCustomField.prototype, "updatedAt", void 0);
|
|
48
|
+
NewsletterCustomField = __decorate([
|
|
49
|
+
GlobalEntity(),
|
|
50
|
+
Entity({ tableName: 'newsletter_custom_fields' })
|
|
51
|
+
], NewsletterCustomField);
|
|
52
|
+
export { NewsletterCustomField };
|
|
53
|
+
//# sourceMappingURL=newsletter-custom-field.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter-custom-field.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/newsletter-custom-field.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,kFAAkF;AAG3E,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,CAAC,aAAa,CAAC,CAA6B;IAG5C,EAAE,GAAW,UAAU,EAAE,CAAC;IAI1B,GAAG,CAAU;IAGb,KAAK,CAAU;IAGf,IAAI,CAA0C;IAG9C,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;IAG7B,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;CAC9B,CAAA;AAjBC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;iDACH;AAI1B;IAFC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACxC,MAAM,EAAE;;kDACI;AAGb;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;oDAC3B;AAGf;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;mDACK;AAG9C;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BACzE,IAAI;wDAAc;AAG7B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BACzE,IAAI;wDAAc;AApBlB,qBAAqB;IAFjC,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC;GACrC,qBAAqB,CAqBjC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** NewsletterEmailBlockSalesChannel — feature 048. Optional per-channel block scoping. */
|
|
2
|
+
export declare class NewsletterEmailBlockSalesChannel {
|
|
3
|
+
blockId: string;
|
|
4
|
+
salesChannelId: string;
|
|
5
|
+
code: string;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=newsletter-email-block-sales-channel.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter-email-block-sales-channel.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/newsletter-email-block-sales-channel.entity.ts"],"names":[],"mappings":"AAGA,0FAA0F;AAC1F,qBAEa,gCAAgC;IAE3C,OAAO,EAAG,MAAM,CAAC;IAGjB,cAAc,EAAG,MAAM,CAAC;IAGxB,IAAI,EAAG,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Entity, PrimaryKey, Property } from '@mikro-orm/core';
|
|
11
|
+
import { GlobalEntity } from '@endora-commerce/platform/tenancy';
|
|
12
|
+
/** NewsletterEmailBlockSalesChannel — feature 048. Optional per-channel block scoping. */
|
|
13
|
+
let NewsletterEmailBlockSalesChannel = class NewsletterEmailBlockSalesChannel {
|
|
14
|
+
blockId;
|
|
15
|
+
salesChannelId;
|
|
16
|
+
code;
|
|
17
|
+
};
|
|
18
|
+
__decorate([
|
|
19
|
+
PrimaryKey({ type: 'uuid', fieldName: 'block_id' }),
|
|
20
|
+
__metadata("design:type", String)
|
|
21
|
+
], NewsletterEmailBlockSalesChannel.prototype, "blockId", void 0);
|
|
22
|
+
__decorate([
|
|
23
|
+
PrimaryKey({ type: 'uuid', fieldName: 'sales_channel_id' }),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], NewsletterEmailBlockSalesChannel.prototype, "salesChannelId", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
Property({ type: 'string', length: 180 }),
|
|
28
|
+
__metadata("design:type", String)
|
|
29
|
+
], NewsletterEmailBlockSalesChannel.prototype, "code", void 0);
|
|
30
|
+
NewsletterEmailBlockSalesChannel = __decorate([
|
|
31
|
+
GlobalEntity(),
|
|
32
|
+
Entity({ tableName: 'newsletter_email_block_sales_channels' })
|
|
33
|
+
], NewsletterEmailBlockSalesChannel);
|
|
34
|
+
export { NewsletterEmailBlockSalesChannel };
|
|
35
|
+
//# sourceMappingURL=newsletter-email-block-sales-channel.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter-email-block-sales-channel.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/newsletter-email-block-sales-channel.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE,0FAA0F;AAGnF,IAAM,gCAAgC,GAAtC,MAAM,gCAAgC;IAE3C,OAAO,CAAU;IAGjB,cAAc,CAAU;IAGxB,IAAI,CAAU;CACf,CAAA;AAPC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;;iEACnC;AAGjB;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;;wEACpC;AAGxB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;8DAC5B;AARH,gCAAgC;IAF5C,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,uCAAuC,EAAE,CAAC;GAClD,gCAAgC,CAS5C"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { OptionalProps } from '@mikro-orm/core';
|
|
2
|
+
/**
|
|
3
|
+
* NewsletterEmailBlock — feature 048. Reusable email-safe content fragment
|
|
4
|
+
* (e.g. header/footer) embedded in campaign/automation content. Global when no
|
|
5
|
+
* sales-channel bridge rows exist. System blocks cannot be deleted.
|
|
6
|
+
*/
|
|
7
|
+
export declare class NewsletterEmailBlock {
|
|
8
|
+
[OptionalProps]?: 'active' | 'description' | 'isSystem' | 'version' | 'createdAt' | 'updatedAt';
|
|
9
|
+
id: string;
|
|
10
|
+
code: string;
|
|
11
|
+
name: string;
|
|
12
|
+
description: string | null;
|
|
13
|
+
active: boolean;
|
|
14
|
+
/** Content envelope: { schema_version, languages: { lang: tree } }. */
|
|
15
|
+
content: Record<string, unknown>;
|
|
16
|
+
isSystem: boolean;
|
|
17
|
+
version: number;
|
|
18
|
+
createdAt: Date;
|
|
19
|
+
updatedAt: Date;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=newsletter-email-block.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter-email-block.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/newsletter-email-block.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AAIrF;;;;GAIG;AACH,qBAEa,oBAAoB;IAC/B,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;IAGhG,EAAE,EAAE,MAAM,CAAgB;IAI1B,IAAI,EAAG,MAAM,CAAC;IAGd,IAAI,EAAG,MAAM,CAAC;IAGd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGlC,MAAM,EAAE,OAAO,CAAQ;IAEvB,uEAAuE;IAEvE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAGtC,QAAQ,EAAE,OAAO,CAAS;IAG1B,OAAO,EAAE,MAAM,CAAK;IAGpB,SAAS,EAAE,IAAI,CAAc;IAG7B,SAAS,EAAE,IAAI,CAAc;CAC9B"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Entity, Index, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
|
|
11
|
+
import { GlobalEntity } from '@endora-commerce/platform/tenancy';
|
|
12
|
+
import { randomUUID } from 'crypto';
|
|
13
|
+
/**
|
|
14
|
+
* NewsletterEmailBlock — feature 048. Reusable email-safe content fragment
|
|
15
|
+
* (e.g. header/footer) embedded in campaign/automation content. Global when no
|
|
16
|
+
* sales-channel bridge rows exist. System blocks cannot be deleted.
|
|
17
|
+
*/
|
|
18
|
+
let NewsletterEmailBlock = class NewsletterEmailBlock {
|
|
19
|
+
[OptionalProps];
|
|
20
|
+
id = randomUUID();
|
|
21
|
+
code;
|
|
22
|
+
name;
|
|
23
|
+
description = null;
|
|
24
|
+
active = true;
|
|
25
|
+
/** Content envelope: { schema_version, languages: { lang: tree } }. */
|
|
26
|
+
content = {};
|
|
27
|
+
isSystem = false;
|
|
28
|
+
version = 1;
|
|
29
|
+
createdAt = new Date();
|
|
30
|
+
updatedAt = new Date();
|
|
31
|
+
};
|
|
32
|
+
__decorate([
|
|
33
|
+
PrimaryKey({ type: 'uuid' }),
|
|
34
|
+
__metadata("design:type", String)
|
|
35
|
+
], NewsletterEmailBlock.prototype, "id", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
Property({ type: 'string', length: 180 }),
|
|
38
|
+
Index(),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], NewsletterEmailBlock.prototype, "code", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
Property({ type: 'string', length: 200 }),
|
|
43
|
+
__metadata("design:type", String)
|
|
44
|
+
], NewsletterEmailBlock.prototype, "name", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
Property({ type: 'text', nullable: true }),
|
|
47
|
+
__metadata("design:type", Object)
|
|
48
|
+
], NewsletterEmailBlock.prototype, "description", void 0);
|
|
49
|
+
__decorate([
|
|
50
|
+
Property({ type: 'boolean' }),
|
|
51
|
+
__metadata("design:type", Boolean)
|
|
52
|
+
], NewsletterEmailBlock.prototype, "active", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
Property({ type: 'json' }),
|
|
55
|
+
__metadata("design:type", Object)
|
|
56
|
+
], NewsletterEmailBlock.prototype, "content", void 0);
|
|
57
|
+
__decorate([
|
|
58
|
+
Property({ type: 'boolean', fieldName: 'is_system' }),
|
|
59
|
+
__metadata("design:type", Boolean)
|
|
60
|
+
], NewsletterEmailBlock.prototype, "isSystem", void 0);
|
|
61
|
+
__decorate([
|
|
62
|
+
Property({ type: 'integer' }),
|
|
63
|
+
__metadata("design:type", Number)
|
|
64
|
+
], NewsletterEmailBlock.prototype, "version", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
Property({ type: 'datetime', fieldName: 'created_at', onCreate: () => new Date() }),
|
|
67
|
+
__metadata("design:type", Date)
|
|
68
|
+
], NewsletterEmailBlock.prototype, "createdAt", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
Property({ type: 'datetime', fieldName: 'updated_at', onUpdate: () => new Date() }),
|
|
71
|
+
__metadata("design:type", Date)
|
|
72
|
+
], NewsletterEmailBlock.prototype, "updatedAt", void 0);
|
|
73
|
+
NewsletterEmailBlock = __decorate([
|
|
74
|
+
GlobalEntity(),
|
|
75
|
+
Entity({ tableName: 'newsletter_email_blocks' })
|
|
76
|
+
], NewsletterEmailBlock);
|
|
77
|
+
export { NewsletterEmailBlock };
|
|
78
|
+
//# sourceMappingURL=newsletter-email-block.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter-email-block.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/newsletter-email-block.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;;GAIG;AAGI,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,CAAC,aAAa,CAAC,CAAiF;IAGhG,EAAE,GAAW,UAAU,EAAE,CAAC;IAI1B,IAAI,CAAU;IAGd,IAAI,CAAU;IAGd,WAAW,GAAkB,IAAI,CAAC;IAGlC,MAAM,GAAY,IAAI,CAAC;IAEvB,uEAAuE;IAEvE,OAAO,GAA4B,EAAE,CAAC;IAGtC,QAAQ,GAAY,KAAK,CAAC;IAG1B,OAAO,GAAW,CAAC,CAAC;IAGpB,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;IAG7B,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;CAC9B,CAAA;AA9BC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;gDACH;AAI1B;IAFC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACzC,KAAK,EAAE;;kDACM;AAGd;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;kDAC5B;AAGd;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yDACT;AAGlC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;oDACP;AAIvB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;qDACW;AAGtC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;;sDAC5B;AAG1B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;qDACV;AAGpB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BACzE,IAAI;uDAAc;AAG7B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BACzE,IAAI;uDAAc;AAjClB,oBAAoB;IAFhC,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC;GACpC,oBAAoB,CAkChC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { OptionalProps } from '@mikro-orm/core';
|
|
2
|
+
/** NewsletterEngagementEvent — feature 048. One open/click event per send record. */
|
|
3
|
+
export declare class NewsletterEngagementEvent {
|
|
4
|
+
[OptionalProps]?: 'linkId' | 'url' | 'occurredAt';
|
|
5
|
+
id: string;
|
|
6
|
+
sendRecordId: string;
|
|
7
|
+
type: 'open' | 'click';
|
|
8
|
+
linkId: string | null;
|
|
9
|
+
url: string | null;
|
|
10
|
+
occurredAt: Date;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=newsletter-engagement-event.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter-engagement-event.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/newsletter-engagement-event.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AAIrF,qFAAqF;AACrF,qBAIa,yBAAyB;IACpC,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,YAAY,CAAC;IAGlD,EAAE,EAAE,MAAM,CAAgB;IAG1B,YAAY,EAAG,MAAM,CAAC;IAGtB,IAAI,EAAG,MAAM,GAAG,OAAO,CAAC;IAGxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG7B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG1B,UAAU,EAAE,IAAI,CAAc;CAC/B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Entity, Index, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
|
|
11
|
+
import { GlobalEntity } from '@endora-commerce/platform/tenancy';
|
|
12
|
+
import { randomUUID } from 'crypto';
|
|
13
|
+
/** NewsletterEngagementEvent — feature 048. One open/click event per send record. */
|
|
14
|
+
let NewsletterEngagementEvent = class NewsletterEngagementEvent {
|
|
15
|
+
[OptionalProps];
|
|
16
|
+
id = randomUUID();
|
|
17
|
+
sendRecordId;
|
|
18
|
+
type;
|
|
19
|
+
linkId = null;
|
|
20
|
+
url = null;
|
|
21
|
+
occurredAt = new Date();
|
|
22
|
+
};
|
|
23
|
+
__decorate([
|
|
24
|
+
PrimaryKey({ type: 'uuid' }),
|
|
25
|
+
__metadata("design:type", String)
|
|
26
|
+
], NewsletterEngagementEvent.prototype, "id", void 0);
|
|
27
|
+
__decorate([
|
|
28
|
+
Property({ type: 'uuid', fieldName: 'send_record_id' }),
|
|
29
|
+
__metadata("design:type", String)
|
|
30
|
+
], NewsletterEngagementEvent.prototype, "sendRecordId", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
Property({ type: 'string', length: 8 }),
|
|
33
|
+
__metadata("design:type", String)
|
|
34
|
+
], NewsletterEngagementEvent.prototype, "type", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
Property({ type: 'string', length: 64, fieldName: 'link_id', nullable: true }),
|
|
37
|
+
__metadata("design:type", Object)
|
|
38
|
+
], NewsletterEngagementEvent.prototype, "linkId", void 0);
|
|
39
|
+
__decorate([
|
|
40
|
+
Property({ type: 'text', nullable: true }),
|
|
41
|
+
__metadata("design:type", Object)
|
|
42
|
+
], NewsletterEngagementEvent.prototype, "url", void 0);
|
|
43
|
+
__decorate([
|
|
44
|
+
Property({ type: 'datetime', fieldName: 'occurred_at', onCreate: () => new Date() }),
|
|
45
|
+
__metadata("design:type", Date)
|
|
46
|
+
], NewsletterEngagementEvent.prototype, "occurredAt", void 0);
|
|
47
|
+
NewsletterEngagementEvent = __decorate([
|
|
48
|
+
GlobalEntity(),
|
|
49
|
+
Entity({ tableName: 'newsletter_engagement_events' }),
|
|
50
|
+
Index({ properties: ['sendRecordId'] }),
|
|
51
|
+
Index({ properties: ['type'] })
|
|
52
|
+
], NewsletterEngagementEvent);
|
|
53
|
+
export { NewsletterEngagementEvent };
|
|
54
|
+
//# sourceMappingURL=newsletter-engagement-event.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter-engagement-event.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/newsletter-engagement-event.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,qFAAqF;AAK9E,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IACpC,CAAC,aAAa,CAAC,CAAmC;IAGlD,EAAE,GAAW,UAAU,EAAE,CAAC;IAG1B,YAAY,CAAU;IAGtB,IAAI,CAAoB;IAGxB,MAAM,GAAkB,IAAI,CAAC;IAG7B,GAAG,GAAkB,IAAI,CAAC;IAG1B,UAAU,GAAS,IAAI,IAAI,EAAE,CAAC;CAC/B,CAAA;AAhBC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;qDACH;AAG1B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;;+DAClC;AAGtB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;;uDAChB;AAGxB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yDAClD;AAG7B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sDACjB;AAG1B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BACzE,IAAI;6DAAc;AAnBnB,yBAAyB;IAJrC,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,8BAA8B,EAAE,CAAC;IACrD,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;IACvC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;GACnB,yBAAyB,CAoBrC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { OptionalProps } from '@mikro-orm/core';
|
|
2
|
+
/**
|
|
3
|
+
* NewsletterSendRecord — feature 048. Per-recipient send + the atomic
|
|
4
|
+
* idempotency claim (Principle X). `id` is the stable provider messageId.
|
|
5
|
+
* Unique (campaign_id, subscriber_id) / (automation_run_id, step_index,
|
|
6
|
+
* subscriber_id) partial indexes are created in the migration.
|
|
7
|
+
*/
|
|
8
|
+
export declare class NewsletterSendRecord {
|
|
9
|
+
[OptionalProps]?: 'campaignId' | 'automationRunId' | 'stepIndex' | 'status' | 'providerMessageId' | 'error' | 'openedAt' | 'clickCount' | 'sentAt' | 'createdAt';
|
|
10
|
+
id: string;
|
|
11
|
+
campaignId: string | null;
|
|
12
|
+
automationRunId: string | null;
|
|
13
|
+
stepIndex: number | null;
|
|
14
|
+
subscriberId: string;
|
|
15
|
+
status: 'queued' | 'sent' | 'failed' | 'bounced' | 'complained';
|
|
16
|
+
providerMessageId: string | null;
|
|
17
|
+
error: string | null;
|
|
18
|
+
openedAt: Date | null;
|
|
19
|
+
clickCount: number;
|
|
20
|
+
sentAt: Date | null;
|
|
21
|
+
createdAt: Date;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=newsletter-send-record.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter-send-record.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/newsletter-send-record.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AAIrF;;;;;GAKG;AACH,qBAIa,oBAAoB;IAC/B,CAAC,aAAa,CAAC,CAAC,EACZ,YAAY,GACZ,iBAAiB,GACjB,WAAW,GACX,QAAQ,GACR,mBAAmB,GACnB,OAAO,GACP,UAAU,GACV,YAAY,GACZ,QAAQ,GACR,WAAW,CAAC;IAGhB,EAAE,EAAE,MAAM,CAAgB;IAG1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGjC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGtC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGhC,YAAY,EAAG,MAAM,CAAC;IAGtB,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAY;IAG3E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGxC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG5B,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAQ;IAG7B,UAAU,EAAE,MAAM,CAAK;IAGvB,MAAM,EAAE,IAAI,GAAG,IAAI,CAAQ;IAG3B,SAAS,EAAE,IAAI,CAAc;CAC9B"}
|