@endora-commerce/mod-transactional-emails 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.
Files changed (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +63 -0
  3. package/dist/admin/api/transactional-emails-client.d.ts +43 -0
  4. package/dist/admin/api/transactional-emails-client.d.ts.map +1 -0
  5. package/dist/admin/api/transactional-emails-client.js +47 -0
  6. package/dist/admin/api/transactional-emails-client.js.map +1 -0
  7. package/dist/admin/components/BrandingPanel.d.ts +10 -0
  8. package/dist/admin/components/BrandingPanel.d.ts.map +1 -0
  9. package/dist/admin/components/BrandingPanel.js +58 -0
  10. package/dist/admin/components/BrandingPanel.js.map +1 -0
  11. package/dist/admin/components/EmailEditorPane.d.ts +7 -0
  12. package/dist/admin/components/EmailEditorPane.d.ts.map +1 -0
  13. package/dist/admin/components/EmailEditorPane.js +48 -0
  14. package/dist/admin/components/EmailEditorPane.js.map +1 -0
  15. package/dist/admin/index.d.ts +46 -0
  16. package/dist/admin/index.d.ts.map +1 -0
  17. package/dist/admin/index.js +92 -0
  18. package/dist/admin/index.js.map +1 -0
  19. package/dist/admin/pages/EmailBlockEditorPage.d.ts +16 -0
  20. package/dist/admin/pages/EmailBlockEditorPage.d.ts.map +1 -0
  21. package/dist/admin/pages/EmailBlockEditorPage.js +19 -0
  22. package/dist/admin/pages/EmailBlockEditorPage.js.map +1 -0
  23. package/dist/admin/pages/EmailBlocksPage.d.ts +8 -0
  24. package/dist/admin/pages/EmailBlocksPage.d.ts.map +1 -0
  25. package/dist/admin/pages/EmailBlocksPage.js +55 -0
  26. package/dist/admin/pages/EmailBlocksPage.js.map +1 -0
  27. package/dist/admin/pages/EmailEditor.d.ts +8 -0
  28. package/dist/admin/pages/EmailEditor.d.ts.map +1 -0
  29. package/dist/admin/pages/EmailEditor.js +126 -0
  30. package/dist/admin/pages/EmailEditor.js.map +1 -0
  31. package/dist/admin/pages/EmailFragmentEditor.d.ts +9 -0
  32. package/dist/admin/pages/EmailFragmentEditor.d.ts.map +1 -0
  33. package/dist/admin/pages/EmailFragmentEditor.js +93 -0
  34. package/dist/admin/pages/EmailFragmentEditor.js.map +1 -0
  35. package/dist/admin/pages/EmailTemplateEditorPage.d.ts +12 -0
  36. package/dist/admin/pages/EmailTemplateEditorPage.d.ts.map +1 -0
  37. package/dist/admin/pages/EmailTemplateEditorPage.js +15 -0
  38. package/dist/admin/pages/EmailTemplateEditorPage.js.map +1 -0
  39. package/dist/admin/pages/EmailTemplatesPage.d.ts +8 -0
  40. package/dist/admin/pages/EmailTemplatesPage.d.ts.map +1 -0
  41. package/dist/admin/pages/EmailTemplatesPage.js +55 -0
  42. package/dist/admin/pages/EmailTemplatesPage.js.map +1 -0
  43. package/dist/admin/pages/EmailsList.d.ts +8 -0
  44. package/dist/admin/pages/EmailsList.d.ts.map +1 -0
  45. package/dist/admin/pages/EmailsList.js +85 -0
  46. package/dist/admin/pages/EmailsList.js.map +1 -0
  47. package/dist/backend/commands/email-activation.commands.d.ts +42 -0
  48. package/dist/backend/commands/email-activation.commands.d.ts.map +1 -0
  49. package/dist/backend/commands/email-activation.commands.js +51 -0
  50. package/dist/backend/commands/email-activation.commands.js.map +1 -0
  51. package/dist/backend/entities/email-block-sales-channel.entity.d.ts +11 -0
  52. package/dist/backend/entities/email-block-sales-channel.entity.d.ts.map +1 -0
  53. package/dist/backend/entities/email-block-sales-channel.entity.js +39 -0
  54. package/dist/backend/entities/email-block-sales-channel.entity.js.map +1 -0
  55. package/dist/backend/entities/email-block.entity.d.ts +24 -0
  56. package/dist/backend/entities/email-block.entity.d.ts.map +1 -0
  57. package/dist/backend/entities/email-block.entity.js +85 -0
  58. package/dist/backend/entities/email-block.entity.js.map +1 -0
  59. package/dist/backend/entities/email-template-sales-channel.entity.d.ts +10 -0
  60. package/dist/backend/entities/email-template-sales-channel.entity.d.ts.map +1 -0
  61. package/dist/backend/entities/email-template-sales-channel.entity.js +38 -0
  62. package/dist/backend/entities/email-template-sales-channel.entity.js.map +1 -0
  63. package/dist/backend/entities/email-template.entity.d.ts +19 -0
  64. package/dist/backend/entities/email-template.entity.d.ts.map +1 -0
  65. package/dist/backend/entities/email-template.entity.js +76 -0
  66. package/dist/backend/entities/email-template.entity.js.map +1 -0
  67. package/dist/backend/entities/transactional-email-content.entity.d.ts +25 -0
  68. package/dist/backend/entities/transactional-email-content.entity.d.ts.map +1 -0
  69. package/dist/backend/entities/transactional-email-content.entity.js +77 -0
  70. package/dist/backend/entities/transactional-email-content.entity.js.map +1 -0
  71. package/dist/backend/entities/transactional-email.entity.d.ts +32 -0
  72. package/dist/backend/entities/transactional-email.entity.d.ts.map +1 -0
  73. package/dist/backend/entities/transactional-email.entity.js +100 -0
  74. package/dist/backend/entities/transactional-email.entity.js.map +1 -0
  75. package/dist/backend/index.d.ts +105 -0
  76. package/dist/backend/index.d.ts.map +1 -0
  77. package/dist/backend/index.js +126 -0
  78. package/dist/backend/index.js.map +1 -0
  79. package/dist/backend/plugin.d.ts +49 -0
  80. package/dist/backend/plugin.d.ts.map +1 -0
  81. package/dist/backend/plugin.js +54 -0
  82. package/dist/backend/plugin.js.map +1 -0
  83. package/dist/backend/routes.admin.d.ts +23 -0
  84. package/dist/backend/routes.admin.d.ts.map +1 -0
  85. package/dist/backend/routes.admin.js +133 -0
  86. package/dist/backend/routes.admin.js.map +1 -0
  87. package/dist/backend/services/branding.service.d.ts +63 -0
  88. package/dist/backend/services/branding.service.d.ts.map +1 -0
  89. package/dist/backend/services/branding.service.js +119 -0
  90. package/dist/backend/services/branding.service.js.map +1 -0
  91. package/dist/backend/services/content-resolver.d.ts +28 -0
  92. package/dist/backend/services/content-resolver.d.ts.map +1 -0
  93. package/dist/backend/services/content-resolver.js +64 -0
  94. package/dist/backend/services/content-resolver.js.map +1 -0
  95. package/dist/backend/services/email-block.service.d.ts +25 -0
  96. package/dist/backend/services/email-block.service.d.ts.map +1 -0
  97. package/dist/backend/services/email-block.service.js +162 -0
  98. package/dist/backend/services/email-block.service.js.map +1 -0
  99. package/dist/backend/services/email-builder-registry.d.ts +9 -0
  100. package/dist/backend/services/email-builder-registry.d.ts.map +1 -0
  101. package/dist/backend/services/email-builder-registry.js +14 -0
  102. package/dist/backend/services/email-builder-registry.js.map +1 -0
  103. package/dist/backend/services/email-defaults-registry.d.ts +63 -0
  104. package/dist/backend/services/email-defaults-registry.d.ts.map +1 -0
  105. package/dist/backend/services/email-defaults-registry.js +60 -0
  106. package/dist/backend/services/email-defaults-registry.js.map +1 -0
  107. package/dist/backend/services/email-template.service.d.ts +23 -0
  108. package/dist/backend/services/email-template.service.d.ts.map +1 -0
  109. package/dist/backend/services/email-template.service.js +155 -0
  110. package/dist/backend/services/email-template.service.js.map +1 -0
  111. package/dist/backend/services/embed-resolver.d.ts +21 -0
  112. package/dist/backend/services/embed-resolver.d.ts.map +1 -0
  113. package/dist/backend/services/embed-resolver.js +68 -0
  114. package/dist/backend/services/embed-resolver.js.map +1 -0
  115. package/dist/backend/services/manifest-reconciler.d.ts +28 -0
  116. package/dist/backend/services/manifest-reconciler.d.ts.map +1 -0
  117. package/dist/backend/services/manifest-reconciler.js +98 -0
  118. package/dist/backend/services/manifest-reconciler.js.map +1 -0
  119. package/dist/backend/services/template-email.d.ts +26 -0
  120. package/dist/backend/services/template-email.d.ts.map +1 -0
  121. package/dist/backend/services/template-email.js +69 -0
  122. package/dist/backend/services/template-email.js.map +1 -0
  123. package/dist/backend/services/transactional-email.service.d.ts +138 -0
  124. package/dist/backend/services/transactional-email.service.d.ts.map +1 -0
  125. package/dist/backend/services/transactional-email.service.js +410 -0
  126. package/dist/backend/services/transactional-email.service.js.map +1 -0
  127. package/dist/manifest.d.ts +195 -0
  128. package/dist/manifest.d.ts.map +1 -0
  129. package/dist/manifest.js +367 -0
  130. package/dist/manifest.js.map +1 -0
  131. package/dist/migrations/20260629T113442_transactional_emails_init.d.ts +6 -0
  132. package/dist/migrations/20260629T113442_transactional_emails_init.d.ts.map +1 -0
  133. package/dist/migrations/20260629T113442_transactional_emails_init.js +133 -0
  134. package/dist/migrations/20260629T113442_transactional_emails_init.js.map +1 -0
  135. package/dist/migrations/20260801T111001_transactional_emails_email_defaults_reseed.d.ts +6 -0
  136. package/dist/migrations/20260801T111001_transactional_emails_email_defaults_reseed.d.ts.map +1 -0
  137. package/dist/migrations/20260801T111001_transactional_emails_email_defaults_reseed.js +49 -0
  138. package/dist/migrations/20260801T111001_transactional_emails_email_defaults_reseed.js.map +1 -0
  139. package/dist/migrations/20260903T101748_transactional_emails_namespace_block_names.d.ts +6 -0
  140. package/dist/migrations/20260903T101748_transactional_emails_namespace_block_names.d.ts.map +1 -0
  141. package/dist/migrations/20260903T101748_transactional_emails_namespace_block_names.js +60 -0
  142. package/dist/migrations/20260903T101748_transactional_emails_namespace_block_names.js.map +1 -0
  143. package/dist/migrations/index.d.ts +29 -0
  144. package/dist/migrations/index.d.ts.map +1 -0
  145. package/dist/migrations/index.js +33 -0
  146. package/dist/migrations/index.js.map +1 -0
  147. package/docs/transactional-emails.md +176 -0
  148. package/i18n/en.json +92 -0
  149. package/i18n/pl.json +92 -0
  150. package/package.json +113 -0
  151. package/tailwind.css +14 -0
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Transactional Emails module (feature 047). Owns the editable email
3
+ * definitions, reusable email-safe blocks/templates, and branding (logo +
4
+ * look), and provides the TransactionalEmailSender port other modules use to
5
+ * send. Branding is modeled as per-channel-scopable settings (research R5).
6
+ */
7
+ export declare const TRANSACTIONAL_EMAILS_SETTING_CODES: {
8
+ readonly LOGO_ASSET_ID: "transactional_emails.logo_asset_id";
9
+ readonly ACCENT_COLOR: "transactional_emails.accent_color";
10
+ readonly HEADER_BLOCK_CODE: "transactional_emails.header_block_code";
11
+ readonly FOOTER_BLOCK_CODE: "transactional_emails.footer_block_code";
12
+ };
13
+ export declare const transactionalEmailsSettingsManifest: {
14
+ moduleCode: string;
15
+ groups: {
16
+ code: string;
17
+ name: string;
18
+ salesChannelCodes?: string[] | undefined;
19
+ isSystemProtected?: boolean | undefined;
20
+ }[];
21
+ settings: {
22
+ code: string;
23
+ name: string;
24
+ valueType: "string" | "number" | "boolean" | "json" | "string_list" | "secret" | "credential_ref";
25
+ defaultValue: unknown;
26
+ description?: string | undefined;
27
+ groupCode?: string | undefined;
28
+ previousDefaultValues?: unknown[] | undefined;
29
+ salesChannelCodes?: string[] | undefined;
30
+ enumOptions?: string[] | undefined;
31
+ configurationType?: string | undefined;
32
+ hidden?: boolean | undefined;
33
+ }[];
34
+ };
35
+ export declare const manifest: {
36
+ id: string;
37
+ name: string;
38
+ version: string;
39
+ dependencies: string[];
40
+ description?: string | undefined;
41
+ acknowledgedDependencies?: {
42
+ moduleId: string;
43
+ port: string;
44
+ reason: string;
45
+ }[] | undefined;
46
+ nonBindingDependencies?: {
47
+ moduleId: string;
48
+ name: string;
49
+ kind: "contributes-to" | "degrades-without" | "refuses-without";
50
+ reason: string;
51
+ whenAbsent?: string | undefined;
52
+ }[] | undefined;
53
+ activation?: {
54
+ settingCode: string;
55
+ default: boolean;
56
+ } | {
57
+ nonDeactivatable: true;
58
+ reason: string;
59
+ } | undefined;
60
+ settings?: {
61
+ moduleCode: string;
62
+ groups: {
63
+ code: string;
64
+ name: string;
65
+ salesChannelCodes?: string[] | undefined;
66
+ isSystemProtected?: boolean | undefined;
67
+ }[];
68
+ settings: {
69
+ code: string;
70
+ name: string;
71
+ valueType: "string" | "number" | "boolean" | "json" | "string_list" | "secret" | "credential_ref";
72
+ defaultValue: unknown;
73
+ description?: string | undefined;
74
+ groupCode?: string | undefined;
75
+ previousDefaultValues?: unknown[] | undefined;
76
+ salesChannelCodes?: string[] | undefined;
77
+ enumOptions?: string[] | undefined;
78
+ configurationType?: string | undefined;
79
+ hidden?: boolean | undefined;
80
+ }[];
81
+ } | undefined;
82
+ i18n?: {
83
+ bundlesDir: string;
84
+ } | undefined;
85
+ docs?: false | {
86
+ dir: string;
87
+ } | undefined;
88
+ demo?: false | {
89
+ summary: string;
90
+ seed: (context: import("@endora-commerce/contracts").ModuleDemoContext<never>) => Promise<import("@endora-commerce/contracts").DemoSeedResult>;
91
+ reset: (context: import("@endora-commerce/contracts").ModuleDemoContext<never>) => Promise<import("@endora-commerce/contracts").DemoResetResult>;
92
+ after?: readonly string[] | undefined;
93
+ package?: string | undefined;
94
+ } | undefined;
95
+ actions?: {
96
+ id: string;
97
+ labelKey: string;
98
+ icon: "Plus" | "Sparkles" | "Settings" | "Search" | "Boxes" | "Layers" | "Menu" | "PlusCircle" | "PlusSquare" | "FilePlus" | "FolderPlus" | "Upload" | "FileUp" | "CloudUpload" | "Download" | "FileDown" | "FileText" | "BookOpen" | "Rss" | "Package" | "Tag" | "ShoppingCart" | "Receipt" | "CreditCard" | "Users" | "UserPlus" | "Inbox" | "ListChecks" | "ClipboardList" | "Image" | "Video" | "LayoutDashboard" | "PanelLeft" | "KeyRound" | "ShieldCheck" | "Edit" | "Archive" | "Box" | "Truck" | "CircleDollarSign" | "Activity" | "LineChart" | "Smartphone" | "Webhook" | "Scale" | "PlugZap" | "PercentDiamond" | "Newspaper" | "Languages" | "Eraser" | "Warehouse" | "TrendingDown" | "Bell" | "PackageOpen" | "Building2" | "Store" | "ClipboardCheck";
99
+ targetRoute: string;
100
+ keywords: string[];
101
+ weight: number;
102
+ descriptionKey?: string | undefined;
103
+ requiredPermission?: string | undefined;
104
+ }[] | undefined;
105
+ permissions?: {
106
+ code: string;
107
+ label: string;
108
+ module?: string | undefined;
109
+ description?: string | undefined;
110
+ requires?: string[] | undefined;
111
+ }[] | undefined;
112
+ transactionalEmails?: {
113
+ code: string;
114
+ name: string;
115
+ variables: {
116
+ key: string;
117
+ label: string;
118
+ sampleValue?: string | undefined;
119
+ description?: string | undefined;
120
+ }[];
121
+ description?: string | undefined;
122
+ group?: string | undefined;
123
+ }[] | undefined;
124
+ capabilities?: string[] | undefined;
125
+ exclusiveCapabilities?: {
126
+ key: string;
127
+ errorCode: string;
128
+ }[] | undefined;
129
+ errorCodes?: {
130
+ code: string;
131
+ tokens?: string[] | undefined;
132
+ }[] | undefined;
133
+ blocks?: {
134
+ name: string;
135
+ labelKey: string;
136
+ category: string;
137
+ contexts: ("email" | "invoice" | "cms" | "newsletter")[];
138
+ fields: Record<string, {
139
+ type: "number" | "object" | "array" | "text" | "textarea" | "select" | "radio" | "external" | "uuid" | "richtext";
140
+ label?: string | undefined;
141
+ required?: boolean | undefined;
142
+ options?: {
143
+ label: string;
144
+ value: string | number;
145
+ }[] | undefined;
146
+ refKind?: string | undefined;
147
+ }>;
148
+ descriptionKey?: string | undefined;
149
+ defaultProps?: Record<string, unknown> | undefined;
150
+ responsiveFields?: string[] | undefined;
151
+ previewIcon?: string | undefined;
152
+ weight?: number | undefined;
153
+ }[] | undefined;
154
+ blockCategories?: {
155
+ key: string;
156
+ titleKey: string;
157
+ contexts: ("email" | "invoice" | "cms" | "newsletter")[];
158
+ weight?: number | undefined;
159
+ visible?: boolean | undefined;
160
+ }[] | undefined;
161
+ env?: {
162
+ name: string;
163
+ describes: {
164
+ en: string;
165
+ pl: string;
166
+ };
167
+ requirement: {
168
+ kind: "required";
169
+ } | {
170
+ kind: "requiredWhen";
171
+ input: string;
172
+ equals: string;
173
+ } | {
174
+ kind: "optional";
175
+ without: {
176
+ en: string;
177
+ pl: string;
178
+ };
179
+ };
180
+ secret: boolean;
181
+ generable: boolean;
182
+ owner: {
183
+ kind: "platform";
184
+ } | {
185
+ kind: "application";
186
+ application: "admin" | "backend" | "storefront";
187
+ } | {
188
+ kind: "module";
189
+ moduleId: string;
190
+ };
191
+ consumers: ("admin" | "backend" | "storefront")[];
192
+ addressOf: "admin" | "backend" | "storefront" | null;
193
+ }[] | undefined;
194
+ };
195
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,eAAO,MAAM,kCAAkC;;;;;CAKrC,CAAC;AAEX,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;CAqC9C,CAAC;AAEH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0TnB,CAAC"}
@@ -0,0 +1,367 @@
1
+ import { defineModuleManifest, defineModuleSettingsManifest } from '@endora-commerce/contracts';
2
+ import { DEFAULT_HEADER_BLOCK_CODE } from '@endora-commerce/email-components/defaults/default-header';
3
+ import { DEFAULT_FOOTER_BLOCK_CODE } from '@endora-commerce/email-components/defaults/default-footer';
4
+ /**
5
+ * Transactional Emails module (feature 047). Owns the editable email
6
+ * definitions, reusable email-safe blocks/templates, and branding (logo +
7
+ * look), and provides the TransactionalEmailSender port other modules use to
8
+ * send. Branding is modeled as per-channel-scopable settings (research R5).
9
+ */
10
+ export const TRANSACTIONAL_EMAILS_SETTING_CODES = {
11
+ LOGO_ASSET_ID: 'transactional_emails.logo_asset_id',
12
+ ACCENT_COLOR: 'transactional_emails.accent_color',
13
+ HEADER_BLOCK_CODE: 'transactional_emails.header_block_code',
14
+ FOOTER_BLOCK_CODE: 'transactional_emails.footer_block_code',
15
+ };
16
+ export const transactionalEmailsSettingsManifest = defineModuleSettingsManifest({
17
+ moduleCode: 'transactional_emails',
18
+ groups: [{ code: 'transactional_emails', name: 'Transactional Emails' }],
19
+ settings: [
20
+ {
21
+ code: TRANSACTIONAL_EMAILS_SETTING_CODES.LOGO_ASSET_ID,
22
+ name: 'Email header logo',
23
+ description: 'Asset used as the header logo in transactional emails.',
24
+ groupCode: 'transactional_emails',
25
+ valueType: 'string',
26
+ defaultValue: '',
27
+ },
28
+ {
29
+ code: TRANSACTIONAL_EMAILS_SETTING_CODES.ACCENT_COLOR,
30
+ name: 'Email accent color',
31
+ description: 'Accent color applied by default email components (hex).',
32
+ groupCode: 'transactional_emails',
33
+ valueType: 'string',
34
+ defaultValue: '#1f2937',
35
+ },
36
+ {
37
+ code: TRANSACTIONAL_EMAILS_SETTING_CODES.HEADER_BLOCK_CODE,
38
+ name: 'Default header block',
39
+ description: 'Email block auto-inserted as the header of new emails.',
40
+ groupCode: 'transactional_emails',
41
+ valueType: 'string',
42
+ defaultValue: DEFAULT_HEADER_BLOCK_CODE,
43
+ },
44
+ {
45
+ code: TRANSACTIONAL_EMAILS_SETTING_CODES.FOOTER_BLOCK_CODE,
46
+ name: 'Default footer block',
47
+ description: 'Email block auto-inserted as the footer of new emails.',
48
+ groupCode: 'transactional_emails',
49
+ valueType: 'string',
50
+ defaultValue: DEFAULT_FOOTER_BLOCK_CODE,
51
+ },
52
+ ],
53
+ });
54
+ export const manifest = defineModuleManifest({
55
+ id: 'transactional_emails',
56
+ name: 'Transactional Emails',
57
+ description: 'Admin-editable transactional email content and look (global + per sales channel), email-safe blocks/templates, variables, and preview.',
58
+ version: '1.0.0',
59
+ dependencies: ['assets_library', 'email', 'sales_channels', 'settings'],
60
+ // Feature 074 (Constitution XVII), test C2 — functional base. The second
61
+ // half of the old ground was that `organizations` declares this module, so
62
+ // the flip failed closed onto the tenancy root; ruling 2 withdraws that, and
63
+ // the first half stands on its own. This module is the platform's only
64
+ // acknowledgement path to a buyer and to an operator — order confirmation,
65
+ // document delivery, account mail. The granularity a business actually wants
66
+ // is the individual email, and that control exists: see
67
+ // `commands/email-activation.commands.ts` and
68
+ // `services/email-defaults-registry.ts` (issue #89).
69
+ activation: {
70
+ nonDeactivatable: true,
71
+ reason: 'The platform\'s only acknowledgement path to buyer and operator — order confirmation, ' +
72
+ 'document delivery, account mail. Switch off an individual email instead.',
73
+ },
74
+ settings: transactionalEmailsSettingsManifest,
75
+ i18n: { bundlesDir: 'i18n' },
76
+ docs: { dir: 'docs' },
77
+ /**
78
+ * `TRANSACTIONAL_EMAIL_NOT_DEACTIVATABLE` — D-129's remaining sweep, Tier A
79
+ * (`specs/090-module-owned-error-codes/d129-sweep.md` §5.2, Appendix A;
80
+ * MR 3).
81
+ *
82
+ * Declared by `_i18n` until this merge request, not because anybody judged
83
+ * it the platform's but because the deleted prefix chain had no rule for it
84
+ * and its last line was `return 'core'`. **D-121 T1 puts it here**: the noun
85
+ * is one transactional email, and this module owns the email, its content,
86
+ * its per-channel customization and the registry that says which emails a
87
+ * business may switch off.
88
+ *
89
+ * **The word `NOT_DEACTIVATABLE` is not the platform's here**, which is the
90
+ * one thing about this code worth reading twice. It sounds like the module
91
+ * lifecycle's `MODULE_NOT_DEACTIVATABLE`, and it is a different refusal at a
92
+ * different granularity: the platform's is about a *module* an operator may
93
+ * not switch off, this one is about a single **email** — `order_confirmation`
94
+ * and its like — that the registry marks always-on with a reason. Issue #89
95
+ * introduced the per-email control precisely because the module's own
96
+ * activation is `nonDeactivatable`; the two codes are the two ends of that
97
+ * decision and only one of them belongs to the lifecycle.
98
+ *
99
+ * **No sentence moves with it.** It has none in either language anywhere in
100
+ * the tree; it was already on `UNTRANSLATED_ERROR_CODES` under `_i18n` and
101
+ * moves to this module's group there, so the bundle this module already
102
+ * ships gains no key. The refusal an operator reads today is the registry's
103
+ * own `nonDeactivatableReasonOf(code)` prose, which the raise passes as the
104
+ * message.
105
+ *
106
+ * **`tokens` is derived from the raise sites, not from the bundle**
107
+ * (runbook §5), and this is the case where that rule bites rather than
108
+ * repeats itself. The single raise
109
+ * (`commands/email-activation.commands.ts`) puts `{ code, reason }` in
110
+ * `details`, so `refusalToken` reads a token off every one of these errors
111
+ * (`packages/platform/src/http/error-envelope.ts`) — and the token is the
112
+ * **email's** registry code, an open set every module contributing an email
113
+ * extends, not a fixed vocabulary this manifest could enumerate. Declaring
114
+ * tokens would therefore be declaring a list that goes stale on the next
115
+ * email somebody registers. It is `VALIDATION_FAILED`'s shape one layer
116
+ * along: a machine-readable discriminator on the wire rather than a token
117
+ * choosing between sentences.
118
+ *
119
+ * Two consequences, both recorded rather than repaired here. A base sentence
120
+ * written at `errors.TRANSACTIONAL_EMAIL_NOT_DEACTIVATABLE` would be **dead
121
+ * key** — the envelope always looks up `<key>.<token>` when a token is
122
+ * present — so whoever drains this code's ledger entry writes
123
+ * `errors.TRANSACTIONAL_EMAIL_NOT_DEACTIVATABLE.<email code>` per protected
124
+ * email, or leaves the registry's reason to answer. And `_i18n`'s own
125
+ * `tokens` paragraph counted seven codes carrying a `details.code`; this was
126
+ * an eighth, so that count is true of the list it describes only now that
127
+ * this code has left it.
128
+ */
129
+ errorCodes: [{ code: 'TRANSACTIONAL_EMAIL_NOT_DEACTIVATABLE' }],
130
+ permissions: [
131
+ { code: 'transactional_emails:read', label: 'View transactional emails' },
132
+ {
133
+ code: 'transactional_emails:write',
134
+ label: 'Manage transactional emails, blocks, templates, and branding',
135
+ },
136
+ ],
137
+ actions: [
138
+ {
139
+ id: 'open-transactional-emails',
140
+ labelKey: 'actions.openTransactionalEmails.label',
141
+ descriptionKey: 'actions.openTransactionalEmails.description',
142
+ icon: 'Inbox',
143
+ targetRoute: '/transactional-emails',
144
+ requiredPermission: 'transactional_emails:read',
145
+ keywords: ['email', 'transactional', 'notifications', 'templates'],
146
+ weight: 240,
147
+ },
148
+ {
149
+ id: 'open-email-templates',
150
+ labelKey: 'actions.openEmailTemplates.label',
151
+ descriptionKey: 'actions.openEmailTemplates.description',
152
+ icon: 'FileText',
153
+ targetRoute: '/transactional-emails/templates',
154
+ requiredPermission: 'transactional_emails:read',
155
+ keywords: ['email', 'templates', 'layout', 'transactional'],
156
+ weight: 241,
157
+ },
158
+ /**
159
+ * The one `AppShell.tsx` `PALETTE_ITEMS` row feature 091's batch 11
160
+ * deletes, arriving as a declaration (Principle XVI) — same destination,
161
+ * same code, same keywords. Its two siblings were declared already, so
162
+ * this is the row that would otherwise have gone silently.
163
+ *
164
+ * This module is `nonDeactivatable`, so the row it replaces never
165
+ * advertised an absent module; what the declaration buys here is the other
166
+ * axis, the one a lock leaves — the server resolves the operator's
167
+ * permission before the entry reaches the palette, and a hand-written row
168
+ * carried its own copy of that answer.
169
+ */
170
+ {
171
+ id: 'open-email-blocks',
172
+ labelKey: 'actions.openEmailBlocks.label',
173
+ descriptionKey: 'actions.openEmailBlocks.description',
174
+ icon: 'Inbox',
175
+ targetRoute: '/transactional-emails/blocks',
176
+ requiredPermission: 'transactional_emails:read',
177
+ keywords: ['email', 'blocks', 'fragments', 'bloki'],
178
+ weight: 242,
179
+ },
180
+ ],
181
+ /**
182
+ * The 17 e-mail Page Builder blocks this module owns, and the four e-mail
183
+ * palette sections its own blocks populate (feature 096, §7.2 and §2.1).
184
+ *
185
+ * They are not today's four. `order` moves to `orders`, which owns all eight
186
+ * blocks in it. `internal` is **new**: the e-mail palette has no hidden
187
+ * drawer today, which is exactly why `EmailColumn` sits in `components` and
188
+ * in no category and lands in Puck's *Other* group, insertable outside a row
189
+ * where it renders wrong. Putting it in a `visible: false` section is a
190
+ * deliberate behaviour change and the operator loses an *Other*-drawer entry
191
+ * that only ever worked inside a row. `EmailInsertTemplate` gains `embeds`:
192
+ * it has a renderer and a persisted name and appears in no palette at all.
193
+ *
194
+ * `contexts: ['email']` rather than `['email', 'newsletter']`: the newsletter
195
+ * palette is served by `filterConfigByContext`, which admits an `email` block
196
+ * into the `newsletter` context, and no newsletter section exists for a
197
+ * category declaration to name.
198
+ */
199
+ blocks: [
200
+ {
201
+ name: 'transactional_emails.EmailHeading',
202
+ labelKey: 'blocks.emailHeading.label',
203
+ descriptionKey: 'blocks.emailHeading.description',
204
+ category: 'content',
205
+ contexts: ['email'],
206
+ fields: {},
207
+ weight: 10,
208
+ },
209
+ {
210
+ name: 'transactional_emails.EmailText',
211
+ labelKey: 'blocks.emailText.label',
212
+ descriptionKey: 'blocks.emailText.description',
213
+ category: 'content',
214
+ contexts: ['email'],
215
+ fields: {},
216
+ weight: 20,
217
+ },
218
+ {
219
+ name: 'transactional_emails.EmailRichText',
220
+ labelKey: 'blocks.emailRichText.label',
221
+ descriptionKey: 'blocks.emailRichText.description',
222
+ category: 'content',
223
+ contexts: ['email'],
224
+ fields: {},
225
+ weight: 30,
226
+ },
227
+ {
228
+ name: 'transactional_emails.EmailButton',
229
+ labelKey: 'blocks.emailButton.label',
230
+ descriptionKey: 'blocks.emailButton.description',
231
+ category: 'content',
232
+ contexts: ['email'],
233
+ fields: {},
234
+ weight: 40,
235
+ },
236
+ {
237
+ name: 'transactional_emails.EmailImage',
238
+ labelKey: 'blocks.emailImage.label',
239
+ descriptionKey: 'blocks.emailImage.description',
240
+ category: 'content',
241
+ contexts: ['email'],
242
+ fields: {},
243
+ weight: 50,
244
+ },
245
+ {
246
+ name: 'transactional_emails.EmailLogo',
247
+ labelKey: 'blocks.emailLogo.label',
248
+ descriptionKey: 'blocks.emailLogo.description',
249
+ category: 'content',
250
+ contexts: ['email'],
251
+ fields: {},
252
+ weight: 60,
253
+ },
254
+ {
255
+ name: 'transactional_emails.EmailSocial',
256
+ labelKey: 'blocks.emailSocial.label',
257
+ descriptionKey: 'blocks.emailSocial.description',
258
+ category: 'content',
259
+ contexts: ['email'],
260
+ fields: {},
261
+ weight: 100,
262
+ },
263
+ {
264
+ name: 'transactional_emails.EmailCallout',
265
+ labelKey: 'blocks.emailCallout.label',
266
+ descriptionKey: 'blocks.emailCallout.description',
267
+ category: 'content',
268
+ contexts: ['email'],
269
+ fields: {},
270
+ weight: 110,
271
+ },
272
+ {
273
+ name: 'transactional_emails.EmailFooterLegal',
274
+ labelKey: 'blocks.emailFooterLegal.label',
275
+ descriptionKey: 'blocks.emailFooterLegal.description',
276
+ category: 'content',
277
+ contexts: ['email'],
278
+ fields: {},
279
+ weight: 120,
280
+ },
281
+ {
282
+ name: 'transactional_emails.EmailSection',
283
+ labelKey: 'blocks.emailSection.label',
284
+ descriptionKey: 'blocks.emailSection.description',
285
+ category: 'layout',
286
+ contexts: ['email'],
287
+ fields: {},
288
+ weight: 10,
289
+ },
290
+ {
291
+ name: 'transactional_emails.EmailRow',
292
+ labelKey: 'blocks.emailRow.label',
293
+ descriptionKey: 'blocks.emailRow.description',
294
+ category: 'layout',
295
+ contexts: ['email'],
296
+ fields: {},
297
+ weight: 20,
298
+ },
299
+ {
300
+ name: 'transactional_emails.EmailTable',
301
+ labelKey: 'blocks.emailTable.label',
302
+ descriptionKey: 'blocks.emailTable.description',
303
+ category: 'layout',
304
+ contexts: ['email'],
305
+ fields: {},
306
+ weight: 30,
307
+ },
308
+ {
309
+ name: 'transactional_emails.EmailDivider',
310
+ labelKey: 'blocks.emailDivider.label',
311
+ descriptionKey: 'blocks.emailDivider.description',
312
+ category: 'layout',
313
+ contexts: ['email'],
314
+ fields: {},
315
+ weight: 40,
316
+ },
317
+ {
318
+ name: 'transactional_emails.EmailSpacer',
319
+ labelKey: 'blocks.emailSpacer.label',
320
+ descriptionKey: 'blocks.emailSpacer.description',
321
+ category: 'layout',
322
+ contexts: ['email'],
323
+ fields: {},
324
+ weight: 50,
325
+ },
326
+ {
327
+ name: 'transactional_emails.EmailInsertBlock',
328
+ labelKey: 'blocks.emailInsertBlock.label',
329
+ descriptionKey: 'blocks.emailInsertBlock.description',
330
+ category: 'embeds',
331
+ contexts: ['email'],
332
+ fields: {},
333
+ weight: 10,
334
+ },
335
+ {
336
+ name: 'transactional_emails.EmailInsertTemplate',
337
+ labelKey: 'blocks.emailInsertTemplate.label',
338
+ descriptionKey: 'blocks.emailInsertTemplate.description',
339
+ category: 'embeds',
340
+ contexts: ['email'],
341
+ fields: {},
342
+ weight: 20,
343
+ },
344
+ {
345
+ name: 'transactional_emails.EmailColumn',
346
+ labelKey: 'blocks.emailColumn.label',
347
+ descriptionKey: 'blocks.emailColumn.description',
348
+ category: 'internal',
349
+ contexts: ['email'],
350
+ fields: {},
351
+ weight: 10,
352
+ },
353
+ ],
354
+ blockCategories: [
355
+ { key: 'content', titleKey: 'blocks.category.content', contexts: ['email'], weight: 10 },
356
+ { key: 'layout', titleKey: 'blocks.category.layout', contexts: ['email'], weight: 30 },
357
+ { key: 'embeds', titleKey: 'blocks.category.embeds', contexts: ['email'], weight: 40 },
358
+ {
359
+ key: 'internal',
360
+ titleKey: 'blocks.category.internal',
361
+ contexts: ['email'],
362
+ weight: 50,
363
+ visible: false,
364
+ },
365
+ ],
366
+ });
367
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Migration } from '@mikro-orm/migrations';
2
+ export declare class Migration20260629T113442TransactionalEmailsInit extends Migration {
3
+ up(): Promise<void>;
4
+ down(): Promise<void>;
5
+ }
6
+ //# sourceMappingURL=20260629T113442_transactional_emails_init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260629T113442_transactional_emails_init.d.ts","sourceRoot":"","sources":["../../src/migrations/20260629T113442_transactional_emails_init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AA2BlD,qBAAa,+CAAgD,SAAQ,SAAS;IAC7D,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;IAkInB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAQrC"}