@antelopejs/dms-mailing 0.7.1 → 0.9.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 (255) hide show
  1. package/README.md +46 -31
  2. package/dist/automation/email-event-trigger.d.ts +2 -2
  3. package/dist/automation/send-template-action.d.ts +11 -3
  4. package/dist/automation/send-template-action.js +1 -1
  5. package/dist/automation/send-template-action.js.map +1 -1
  6. package/dist/crons/jobs.d.ts +1 -1
  7. package/dist/data/body.d.ts +2 -1
  8. package/dist/data/body.js +4 -2
  9. package/dist/data/body.js.map +1 -1
  10. package/dist/data/read-only-routes.d.ts +4 -4
  11. package/dist/data/sends-table.d.ts +4 -4
  12. package/dist/data/suppressions-table.d.ts +4 -4
  13. package/dist/data/templates-table.d.ts +35 -12
  14. package/dist/data/templates-table.js +30 -24
  15. package/dist/data/templates-table.js.map +1 -1
  16. package/dist/data-types/categories-type.d.ts +1 -2
  17. package/dist/data-types/categories-type.js +3 -5
  18. package/dist/data-types/categories-type.js.map +1 -1
  19. package/dist/data-types/category-type.d.ts +1 -2
  20. package/dist/data-types/category-type.js +3 -5
  21. package/dist/data-types/category-type.js.map +1 -1
  22. package/dist/db/models/send-events.model.d.ts +7 -5
  23. package/dist/db/models/sends.model.d.ts +7 -5
  24. package/dist/db/models/sends.model.js.map +1 -1
  25. package/dist/db/models/settings.model.d.ts +7 -5
  26. package/dist/db/models/suppressions.model.d.ts +7 -5
  27. package/dist/db/models/template-versions.model.d.ts +7 -5
  28. package/dist/db/models/template-versions.model.js +4 -3
  29. package/dist/db/models/template-versions.model.js.map +1 -1
  30. package/dist/db/models/templates.model.d.ts +7 -5
  31. package/dist/db/models/templates.model.js +2 -1
  32. package/dist/db/models/templates.model.js.map +1 -1
  33. package/dist/db/models/webhook-status.model.d.ts +7 -5
  34. package/dist/db/tables/templates.table.js.map +1 -1
  35. package/dist/engine/changes.js +8 -18
  36. package/dist/engine/changes.js.map +1 -1
  37. package/dist/engine/conditions.d.ts +2 -1
  38. package/dist/engine/conditions.js +5 -5
  39. package/dist/engine/conditions.js.map +1 -1
  40. package/dist/engine/coverage.d.ts +2 -1
  41. package/dist/engine/coverage.js.map +1 -1
  42. package/dist/engine/fallback-html.js +8 -8
  43. package/dist/engine/fallback-html.js.map +1 -1
  44. package/dist/engine/formats.d.ts +4 -6
  45. package/dist/engine/formats.js +22 -8
  46. package/dist/engine/formats.js.map +1 -1
  47. package/dist/engine/paths.d.ts +4 -2
  48. package/dist/engine/paths.js +16 -5
  49. package/dist/engine/paths.js.map +1 -1
  50. package/dist/engine/plain-text.js +2 -4
  51. package/dist/engine/plain-text.js.map +1 -1
  52. package/dist/engine/resolve.d.ts +2 -1
  53. package/dist/engine/resolve.js +1 -1
  54. package/dist/engine/resolve.js.map +1 -1
  55. package/dist/engine/system-variables.d.ts +2 -1
  56. package/dist/engine/system-variables.js +1 -1
  57. package/dist/engine/system-variables.js.map +1 -1
  58. package/dist/engine/tokens.d.ts +2 -1
  59. package/dist/engine/tokens.js.map +1 -1
  60. package/dist/hooks/tenant-export.js +10 -9
  61. package/dist/hooks/tenant-export.js.map +1 -1
  62. package/dist/pages/sends.js.map +1 -1
  63. package/dist/pages/templates.js +3 -1
  64. package/dist/pages/templates.js.map +1 -1
  65. package/dist/pages/toolbar.js.map +1 -1
  66. package/dist/routes/events.js +6 -4
  67. package/dist/routes/events.js.map +1 -1
  68. package/dist/routes/index.d.ts +1 -0
  69. package/dist/routes/index.js +1 -0
  70. package/dist/routes/index.js.map +1 -1
  71. package/dist/routes/metrics.js +31 -31
  72. package/dist/routes/metrics.js.map +1 -1
  73. package/dist/routes/period.js +5 -5
  74. package/dist/routes/period.js.map +1 -1
  75. package/dist/routes/sends.js +4 -5
  76. package/dist/routes/sends.js.map +1 -1
  77. package/dist/routes/settings.d.ts +1 -1
  78. package/dist/routes/settings.js +16 -14
  79. package/dist/routes/settings.js.map +1 -1
  80. package/dist/routes/suppressions.js +9 -6
  81. package/dist/routes/suppressions.js.map +1 -1
  82. package/dist/routes/template-content.d.ts +27 -0
  83. package/dist/routes/template-content.js +3 -0
  84. package/dist/routes/template-content.js.map +1 -0
  85. package/dist/routes/templates.d.ts +7 -30
  86. package/dist/routes/templates.js +7 -6
  87. package/dist/routes/templates.js.map +1 -1
  88. package/dist/routes/zod-json.d.ts +3 -0
  89. package/dist/routes/zod-json.js +21 -0
  90. package/dist/routes/zod-json.js.map +1 -0
  91. package/dist/services/attention.js +16 -8
  92. package/dist/services/attention.js.map +1 -1
  93. package/dist/services/catalog.js +4 -2
  94. package/dist/services/catalog.js.map +1 -1
  95. package/dist/services/categories.js +6 -6
  96. package/dist/services/categories.js.map +1 -1
  97. package/dist/services/checked-send.js +16 -9
  98. package/dist/services/checked-send.js.map +1 -1
  99. package/dist/services/declaration-error.d.ts +1 -1
  100. package/dist/services/declaration-error.js.map +1 -1
  101. package/dist/services/declarations.js +4 -1
  102. package/dist/services/declarations.js.map +1 -1
  103. package/dist/services/events.js +13 -7
  104. package/dist/services/events.js.map +1 -1
  105. package/dist/services/localized-text.d.ts +2 -1
  106. package/dist/services/localized-text.js +2 -1
  107. package/dist/services/localized-text.js.map +1 -1
  108. package/dist/services/metrics.js +2 -5
  109. package/dist/services/metrics.js.map +1 -1
  110. package/dist/services/render.js.map +1 -1
  111. package/dist/services/send-import.js +7 -3
  112. package/dist/services/send-import.js.map +1 -1
  113. package/dist/services/send.js +7 -7
  114. package/dist/services/send.js.map +1 -1
  115. package/dist/services/settings.d.ts +4 -2
  116. package/dist/services/settings.js +5 -4
  117. package/dist/services/settings.js.map +1 -1
  118. package/dist/services/starters.d.ts +3 -2
  119. package/dist/services/starters.js +5 -5
  120. package/dist/services/starters.js.map +1 -1
  121. package/dist/services/template-stats.js +5 -2
  122. package/dist/services/template-stats.js.map +1 -1
  123. package/dist/services/templates.d.ts +2 -1
  124. package/dist/services/templates.js +8 -4
  125. package/dist/services/templates.js.map +1 -1
  126. package/dist/services/webhook-status.d.ts +2 -2
  127. package/dist/services/webhook-status.js +6 -4
  128. package/dist/services/webhook-status.js.map +1 -1
  129. package/dist/types/json.d.ts +1 -0
  130. package/dist/types/json.js +3 -0
  131. package/dist/types/json.js.map +1 -0
  132. package/dist/types/settings.d.ts +2 -2
  133. package/dist/validation/declarations.schema.d.ts +44 -44
  134. package/dist/validation/declarations.schema.js +6 -5
  135. package/dist/validation/declarations.schema.js.map +1 -1
  136. package/dist/validation/guards.d.ts +3 -0
  137. package/dist/validation/guards.js +15 -0
  138. package/dist/validation/guards.js.map +1 -0
  139. package/dist/validation/json.d.ts +5 -0
  140. package/dist/validation/json.js +54 -0
  141. package/dist/validation/json.js.map +1 -0
  142. package/dist/validation/json.schema.d.ts +2 -0
  143. package/dist/validation/json.schema.js +9 -0
  144. package/dist/validation/json.schema.js.map +1 -0
  145. package/dist/validation/send-event-type.schema.d.ts +2 -0
  146. package/dist/validation/send-event-type.schema.js +11 -0
  147. package/dist/validation/send-event-type.schema.js.map +1 -0
  148. package/dist/validation/settings.schema.js +1 -1
  149. package/dist/validation/settings.schema.js.map +1 -1
  150. package/dist/validation/templates.schema.d.ts +44 -42
  151. package/dist/validation/templates.schema.js +4 -3
  152. package/dist/validation/templates.schema.js.map +1 -1
  153. package/frontend-vue/app/build/components/TemplateDrawerFooter.vue +45 -0
  154. package/frontend-vue/app/build/components/TemplateDrawerPerformance.vue +102 -0
  155. package/frontend-vue/app/build/components/TemplateDrawerVariables.vue +110 -0
  156. package/frontend-vue/app/build/composables/useDrawerStats.ts +78 -0
  157. package/frontend-vue/app/components/DuplicateModal.vue +3 -11
  158. package/frontend-vue/app/components/FixAddressModal.vue +2 -1
  159. package/frontend-vue/app/components/NewTemplateModal.vue +3 -11
  160. package/frontend-vue/app/components/RealSendModal.vue +6 -17
  161. package/frontend-vue/app/components/RenderingModal.vue +2 -1
  162. package/frontend-vue/app/components/SendDrawer.vue +5 -4
  163. package/frontend-vue/app/components/StarterGallery.vue +3 -11
  164. package/frontend-vue/app/components/TemplateDrawer.vue +40 -269
  165. package/frontend-vue/app/components/TestSendModal.vue +7 -18
  166. package/frontend-vue/app/components/VersionHistory.vue +2 -7
  167. package/frontend-vue/app/components/WebhookStatus.vue +2 -1
  168. package/frontend-vue/app/components/editor/EditorWorkspace.vue +2 -7
  169. package/frontend-vue/build/backend-boundary.ts +122 -0
  170. package/frontend-vue/dms.frontend.build.ts +7 -0
  171. package/frontend-vue/eslint.config.mjs +13 -0
  172. package/frontend-vue/package.json +4 -2
  173. package/frontend-vue/pnpm-lock.yaml +250 -61
  174. package/frontend-vue/tests/backend-boundary.test.ts +203 -0
  175. package/frontend-vue/tests/dnd.test.ts +1 -2
  176. package/frontend-vue/tests/editor-block-list.test.ts +136 -53
  177. package/frontend-vue/tests/helpers/auth-fetch.ts +123 -0
  178. package/frontend-vue/tests/helpers/nuxt-globals.ts +17 -1
  179. package/frontend-vue/tests/new-template-modal.test.ts +41 -6
  180. package/frontend-vue/tests/page-reads.test.ts +26 -6
  181. package/frontend-vue/tests/send-actions.test.ts +0 -1
  182. package/frontend-vue/tests/send-drawer.test.ts +2 -6
  183. package/frontend-vue/tests/send-modals.test.ts +8 -5
  184. package/frontend-vue/tests/sortable-list.test.ts +54 -62
  185. package/frontend-vue/tests/suppression.test.ts +1 -2
  186. package/frontend-vue/tests/template-drawer.test.ts +27 -18
  187. package/frontend-vue/tests/template-gallery.test.ts +7 -5
  188. package/frontend-vue/tests/template-preview-frame.test.ts +2 -5
  189. package/package.json +16 -20
  190. package/skills/dms-mailing/SKILL.md +1 -1
  191. package/skills/dms-mailing/cases.json +49 -0
  192. package/src/automation/email-event-trigger.ts +2 -2
  193. package/src/automation/send-template-action.ts +33 -14
  194. package/src/crons/jobs.ts +1 -1
  195. package/src/data/body.ts +7 -3
  196. package/src/data/templates-table.ts +55 -56
  197. package/src/data-types/categories-type.ts +2 -2
  198. package/src/data-types/category-type.ts +2 -2
  199. package/src/db/models/sends.model.ts +2 -2
  200. package/src/db/models/template-versions.model.ts +10 -4
  201. package/src/db/models/templates.model.ts +6 -3
  202. package/src/db/tables/templates.table.ts +1 -1
  203. package/src/engine/changes.ts +11 -28
  204. package/src/engine/conditions.ts +14 -8
  205. package/src/engine/coverage.ts +2 -1
  206. package/src/engine/fallback-html.ts +13 -13
  207. package/src/engine/formats.ts +35 -21
  208. package/src/engine/paths.ts +41 -7
  209. package/src/engine/plain-text.ts +2 -4
  210. package/src/engine/resolve.ts +12 -4
  211. package/src/engine/system-variables.ts +6 -4
  212. package/src/engine/tokens.ts +3 -3
  213. package/src/hooks/tenant-export.ts +11 -13
  214. package/src/pages/sends.ts +5 -3
  215. package/src/pages/templates.ts +4 -2
  216. package/src/pages/toolbar.ts +4 -2
  217. package/src/routes/events.ts +10 -10
  218. package/src/routes/index.ts +1 -0
  219. package/src/routes/metrics.ts +35 -33
  220. package/src/routes/period.ts +5 -5
  221. package/src/routes/sends.ts +23 -26
  222. package/src/routes/settings.ts +21 -17
  223. package/src/routes/suppressions.ts +12 -8
  224. package/src/routes/template-content.ts +45 -0
  225. package/src/routes/templates.ts +16 -49
  226. package/src/routes/zod-json.ts +28 -0
  227. package/src/services/attention.ts +20 -18
  228. package/src/services/catalog.ts +4 -8
  229. package/src/services/categories.ts +6 -6
  230. package/src/services/checked-send.ts +17 -19
  231. package/src/services/declaration-error.ts +1 -1
  232. package/src/services/declarations.ts +7 -6
  233. package/src/services/events.ts +18 -13
  234. package/src/services/localized-text.ts +4 -2
  235. package/src/services/metrics.ts +5 -7
  236. package/src/services/notify.ts +1 -1
  237. package/src/services/render.ts +5 -1
  238. package/src/services/send-import.ts +16 -11
  239. package/src/services/send.ts +10 -13
  240. package/src/services/settings.ts +17 -16
  241. package/src/services/starters.ts +12 -8
  242. package/src/services/template-stats.ts +11 -4
  243. package/src/services/templates.ts +24 -15
  244. package/src/services/webhook-status.ts +13 -8
  245. package/src/types/json.ts +1 -0
  246. package/src/types/settings.ts +2 -2
  247. package/src/validation/declarations.schema.ts +6 -5
  248. package/src/validation/guards.ts +17 -0
  249. package/src/validation/json.schema.ts +7 -0
  250. package/src/validation/json.ts +66 -0
  251. package/src/validation/send-event-type.schema.ts +10 -0
  252. package/src/validation/settings.schema.ts +7 -2
  253. package/src/validation/templates.schema.ts +9 -4
  254. package/frontend-vue/tests/i18n-editor.test.ts +0 -50
  255. package/frontend-vue/tests/i18n.test.ts +0 -138
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import type { Block } from "../types";
2
3
  export declare const slugSchema: z.ZodString;
3
4
  export declare const createTemplateSchema: z.ZodObject<{
4
5
  slug: z.ZodString;
@@ -32,15 +33,15 @@ export declare const conditionSchema: z.ZodObject<{
32
33
  value: string;
33
34
  operator: "eq" | "ne" | "gt" | "lt" | "truthy" | "falsy";
34
35
  }>;
35
- export declare const blockSchema: z.ZodType<unknown>;
36
+ export declare const blockSchema: z.ZodType<Block, z.ZodTypeDef, unknown>;
36
37
  export declare const localeContentSchema: z.ZodObject<{
37
38
  subject: z.ZodString;
38
39
  preheader: z.ZodString;
39
- blocks: z.ZodArray<z.ZodType<unknown, z.ZodTypeDef, unknown>, "many">;
40
+ blocks: z.ZodArray<z.ZodType<Block, z.ZodTypeDef, unknown>, "many">;
40
41
  }, "strip", z.ZodTypeAny, {
41
42
  subject: string;
42
43
  preheader: string;
43
- blocks: unknown[];
44
+ blocks: Block[];
44
45
  }, {
45
46
  subject: string;
46
47
  preheader: string;
@@ -50,11 +51,11 @@ export declare const templateContentSchema: z.ZodObject<{
50
51
  locales: z.ZodRecord<z.ZodString, z.ZodObject<{
51
52
  subject: z.ZodString;
52
53
  preheader: z.ZodString;
53
- blocks: z.ZodArray<z.ZodType<unknown, z.ZodTypeDef, unknown>, "many">;
54
+ blocks: z.ZodArray<z.ZodType<Block, z.ZodTypeDef, unknown>, "many">;
54
55
  }, "strip", z.ZodTypeAny, {
55
56
  subject: string;
56
57
  preheader: string;
57
- blocks: unknown[];
58
+ blocks: Block[];
58
59
  }, {
59
60
  subject: string;
60
61
  preheader: string;
@@ -64,7 +65,7 @@ export declare const templateContentSchema: z.ZodObject<{
64
65
  locales: Record<string, {
65
66
  subject: string;
66
67
  preheader: string;
67
- blocks: unknown[];
68
+ blocks: Block[];
68
69
  }>;
69
70
  }, {
70
71
  locales: Record<string, {
@@ -94,12 +95,12 @@ export declare const variableSchema: z.ZodObject<{
94
95
  type: z.ZodEnum<["string", "text", "number", "money", "date", "url", "boolean", "array"]>;
95
96
  required: z.ZodBoolean;
96
97
  }, "strip", z.ZodTypeAny, {
98
+ type: "string" | "number" | "boolean" | "text" | "date" | "array" | "url" | "money";
97
99
  path: string;
98
- type: "string" | "number" | "boolean" | "date" | "array" | "url" | "money" | "text";
99
100
  required: boolean;
100
101
  }, {
102
+ type: "string" | "number" | "boolean" | "text" | "date" | "array" | "url" | "money";
101
103
  path: string;
102
- type: "string" | "number" | "boolean" | "date" | "array" | "url" | "money" | "text";
103
104
  required: boolean;
104
105
  }>;
105
106
  export declare const variableListSchema: z.ZodArray<z.ZodObject<{
@@ -107,12 +108,12 @@ export declare const variableListSchema: z.ZodArray<z.ZodObject<{
107
108
  type: z.ZodEnum<["string", "text", "number", "money", "date", "url", "boolean", "array"]>;
108
109
  required: z.ZodBoolean;
109
110
  }, "strip", z.ZodTypeAny, {
111
+ type: "string" | "number" | "boolean" | "text" | "date" | "array" | "url" | "money";
110
112
  path: string;
111
- type: "string" | "number" | "boolean" | "date" | "array" | "url" | "money" | "text";
112
113
  required: boolean;
113
114
  }, {
115
+ type: "string" | "number" | "boolean" | "text" | "date" | "array" | "url" | "money";
114
116
  path: string;
115
- type: "string" | "number" | "boolean" | "date" | "array" | "url" | "money" | "text";
116
117
  required: boolean;
117
118
  }>, "many">;
118
119
  export declare const variablesSchema: z.ZodObject<{
@@ -121,26 +122,26 @@ export declare const variablesSchema: z.ZodObject<{
121
122
  type: z.ZodEnum<["string", "text", "number", "money", "date", "url", "boolean", "array"]>;
122
123
  required: z.ZodBoolean;
123
124
  }, "strip", z.ZodTypeAny, {
125
+ type: "string" | "number" | "boolean" | "text" | "date" | "array" | "url" | "money";
124
126
  path: string;
125
- type: "string" | "number" | "boolean" | "date" | "array" | "url" | "money" | "text";
126
127
  required: boolean;
127
128
  }, {
129
+ type: "string" | "number" | "boolean" | "text" | "date" | "array" | "url" | "money";
128
130
  path: string;
129
- type: "string" | "number" | "boolean" | "date" | "array" | "url" | "money" | "text";
130
131
  required: boolean;
131
132
  }>, "many">;
132
133
  revision: z.ZodOptional<z.ZodNumber>;
133
134
  }, "strip", z.ZodTypeAny, {
134
135
  variables: {
136
+ type: "string" | "number" | "boolean" | "text" | "date" | "array" | "url" | "money";
135
137
  path: string;
136
- type: "string" | "number" | "boolean" | "date" | "array" | "url" | "money" | "text";
137
138
  required: boolean;
138
139
  }[];
139
140
  revision?: number | undefined;
140
141
  }, {
141
142
  variables: {
143
+ type: "string" | "number" | "boolean" | "text" | "date" | "array" | "url" | "money";
142
144
  path: string;
143
- type: "string" | "number" | "boolean" | "date" | "array" | "url" | "money" | "text";
144
145
  required: boolean;
145
146
  }[];
146
147
  revision?: number | undefined;
@@ -150,11 +151,11 @@ export declare const saveContentSchema: z.ZodObject<{
150
151
  locales: z.ZodRecord<z.ZodString, z.ZodObject<{
151
152
  subject: z.ZodString;
152
153
  preheader: z.ZodString;
153
- blocks: z.ZodArray<z.ZodType<unknown, z.ZodTypeDef, unknown>, "many">;
154
+ blocks: z.ZodArray<z.ZodType<Block, z.ZodTypeDef, unknown>, "many">;
154
155
  }, "strip", z.ZodTypeAny, {
155
156
  subject: string;
156
157
  preheader: string;
157
- blocks: unknown[];
158
+ blocks: Block[];
158
159
  }, {
159
160
  subject: string;
160
161
  preheader: string;
@@ -164,7 +165,7 @@ export declare const saveContentSchema: z.ZodObject<{
164
165
  locales: Record<string, {
165
166
  subject: string;
166
167
  preheader: string;
167
- blocks: unknown[];
168
+ blocks: Block[];
168
169
  }>;
169
170
  }, {
170
171
  locales: Record<string, {
@@ -178,12 +179,12 @@ export declare const saveContentSchema: z.ZodObject<{
178
179
  type: z.ZodEnum<["string", "text", "number", "money", "date", "url", "boolean", "array"]>;
179
180
  required: z.ZodBoolean;
180
181
  }, "strip", z.ZodTypeAny, {
182
+ type: "string" | "number" | "boolean" | "text" | "date" | "array" | "url" | "money";
181
183
  path: string;
182
- type: "string" | "number" | "boolean" | "date" | "array" | "url" | "money" | "text";
183
184
  required: boolean;
184
185
  }, {
186
+ type: "string" | "number" | "boolean" | "text" | "date" | "array" | "url" | "money";
185
187
  path: string;
186
- type: "string" | "number" | "boolean" | "date" | "array" | "url" | "money" | "text";
187
188
  required: boolean;
188
189
  }>, "many">>;
189
190
  revision: z.ZodOptional<z.ZodNumber>;
@@ -192,13 +193,13 @@ export declare const saveContentSchema: z.ZodObject<{
192
193
  locales: Record<string, {
193
194
  subject: string;
194
195
  preheader: string;
195
- blocks: unknown[];
196
+ blocks: Block[];
196
197
  }>;
197
198
  };
198
199
  revision?: number | undefined;
199
200
  variables?: {
201
+ type: "string" | "number" | "boolean" | "text" | "date" | "array" | "url" | "money";
200
202
  path: string;
201
- type: "string" | "number" | "boolean" | "date" | "array" | "url" | "money" | "text";
202
203
  required: boolean;
203
204
  }[] | undefined;
204
205
  }, {
@@ -211,17 +212,17 @@ export declare const saveContentSchema: z.ZodObject<{
211
212
  };
212
213
  revision?: number | undefined;
213
214
  variables?: {
215
+ type: "string" | "number" | "boolean" | "text" | "date" | "array" | "url" | "money";
214
216
  path: string;
215
- type: "string" | "number" | "boolean" | "date" | "array" | "url" | "money" | "text";
216
217
  required: boolean;
217
218
  }[] | undefined;
218
219
  }>;
219
220
  export declare const testDataSchema: z.ZodObject<{
220
- data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
221
+ data: z.ZodEffects<z.ZodUnknown, import("@antelopejs/interface-dms-mailing").JsonObject, unknown>;
221
222
  }, "strip", z.ZodTypeAny, {
222
- data: Record<string, unknown>;
223
+ data: import("@antelopejs/interface-dms-mailing").JsonObject;
223
224
  }, {
224
- data: Record<string, unknown>;
225
+ data?: unknown;
225
226
  }>;
226
227
  export declare const previewVersionSchema: z.ZodUnion<[z.ZodLiteral<"draft">, z.ZodLiteral<"published">, z.ZodNumber]>;
227
228
  export declare const previewSchema: z.ZodObject<{
@@ -231,11 +232,11 @@ export declare const previewSchema: z.ZodObject<{
231
232
  locales: z.ZodRecord<z.ZodString, z.ZodObject<{
232
233
  subject: z.ZodString;
233
234
  preheader: z.ZodString;
234
- blocks: z.ZodArray<z.ZodType<unknown, z.ZodTypeDef, unknown>, "many">;
235
+ blocks: z.ZodArray<z.ZodType<Block, z.ZodTypeDef, unknown>, "many">;
235
236
  }, "strip", z.ZodTypeAny, {
236
237
  subject: string;
237
238
  preheader: string;
238
- blocks: unknown[];
239
+ blocks: Block[];
239
240
  }, {
240
241
  subject: string;
241
242
  preheader: string;
@@ -245,7 +246,7 @@ export declare const previewSchema: z.ZodObject<{
245
246
  locales: Record<string, {
246
247
  subject: string;
247
248
  preheader: string;
248
- blocks: unknown[];
249
+ blocks: Block[];
249
250
  }>;
250
251
  }, {
251
252
  locales: Record<string, {
@@ -254,20 +255,21 @@ export declare const previewSchema: z.ZodObject<{
254
255
  blocks: unknown[];
255
256
  }>;
256
257
  }>>;
257
- data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
258
+ data: z.ZodOptional<z.ZodEffects<z.ZodUnknown, import("@antelopejs/interface-dms-mailing").JsonObject, unknown>>;
258
259
  }, "strip", z.ZodTypeAny, {
259
260
  version?: number | "draft" | "published" | undefined;
261
+ data?: import("@antelopejs/interface-dms-mailing").JsonObject | undefined;
260
262
  content?: {
261
263
  locales: Record<string, {
262
264
  subject: string;
263
265
  preheader: string;
264
- blocks: unknown[];
266
+ blocks: Block[];
265
267
  }>;
266
268
  } | undefined;
267
- data?: Record<string, unknown> | undefined;
268
269
  locale?: string | undefined;
269
270
  }, {
270
271
  version?: number | "draft" | "published" | undefined;
272
+ data?: unknown;
271
273
  content?: {
272
274
  locales: Record<string, {
273
275
  subject: string;
@@ -275,20 +277,19 @@ export declare const previewSchema: z.ZodObject<{
275
277
  blocks: unknown[];
276
278
  }>;
277
279
  } | undefined;
278
- data?: Record<string, unknown> | undefined;
279
280
  locale?: string | undefined;
280
281
  }>;
281
282
  export declare const realSendSchema: z.ZodObject<{
282
283
  to: z.ZodArray<z.ZodString, "many">;
283
284
  locale: z.ZodOptional<z.ZodString>;
284
- data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
285
+ data: z.ZodOptional<z.ZodEffects<z.ZodUnknown, import("@antelopejs/interface-dms-mailing").JsonObject, unknown>>;
285
286
  }, "strip", z.ZodTypeAny, {
286
287
  to: string[];
287
- data?: Record<string, unknown> | undefined;
288
+ data?: import("@antelopejs/interface-dms-mailing").JsonObject | undefined;
288
289
  locale?: string | undefined;
289
290
  }, {
290
291
  to: string[];
291
- data?: Record<string, unknown> | undefined;
292
+ data?: unknown;
292
293
  locale?: string | undefined;
293
294
  }>;
294
295
  export declare const testSendSchema: z.ZodObject<{
@@ -298,11 +299,11 @@ export declare const testSendSchema: z.ZodObject<{
298
299
  locales: z.ZodRecord<z.ZodString, z.ZodObject<{
299
300
  subject: z.ZodString;
300
301
  preheader: z.ZodString;
301
- blocks: z.ZodArray<z.ZodType<unknown, z.ZodTypeDef, unknown>, "many">;
302
+ blocks: z.ZodArray<z.ZodType<Block, z.ZodTypeDef, unknown>, "many">;
302
303
  }, "strip", z.ZodTypeAny, {
303
304
  subject: string;
304
305
  preheader: string;
305
- blocks: unknown[];
306
+ blocks: Block[];
306
307
  }, {
307
308
  subject: string;
308
309
  preheader: string;
@@ -312,7 +313,7 @@ export declare const testSendSchema: z.ZodObject<{
312
313
  locales: Record<string, {
313
314
  subject: string;
314
315
  preheader: string;
315
- blocks: unknown[];
316
+ blocks: Block[];
316
317
  }>;
317
318
  }, {
318
319
  locales: Record<string, {
@@ -321,24 +322,25 @@ export declare const testSendSchema: z.ZodObject<{
321
322
  blocks: unknown[];
322
323
  }>;
323
324
  }>>;
324
- data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
325
+ data: z.ZodOptional<z.ZodEffects<z.ZodUnknown, import("@antelopejs/interface-dms-mailing").JsonObject, unknown>>;
325
326
  } & {
326
327
  to: z.ZodArray<z.ZodString, "many">;
327
328
  }, "strip", z.ZodTypeAny, {
328
329
  to: string[];
329
330
  version?: number | "draft" | "published" | undefined;
331
+ data?: import("@antelopejs/interface-dms-mailing").JsonObject | undefined;
330
332
  content?: {
331
333
  locales: Record<string, {
332
334
  subject: string;
333
335
  preheader: string;
334
- blocks: unknown[];
336
+ blocks: Block[];
335
337
  }>;
336
338
  } | undefined;
337
- data?: Record<string, unknown> | undefined;
338
339
  locale?: string | undefined;
339
340
  }, {
340
341
  to: string[];
341
342
  version?: number | "draft" | "published" | undefined;
343
+ data?: unknown;
342
344
  content?: {
343
345
  locales: Record<string, {
344
346
  subject: string;
@@ -346,7 +348,6 @@ export declare const testSendSchema: z.ZodObject<{
346
348
  blocks: unknown[];
347
349
  }>;
348
350
  } | undefined;
349
- data?: Record<string, unknown> | undefined;
350
351
  locale?: string | undefined;
351
352
  }>;
352
353
  export declare const templateDetailsSchema: z.ZodObject<{
@@ -362,6 +363,7 @@ export declare const templateDetailsSchema: z.ZodObject<{
362
363
  category?: string | null | undefined;
363
364
  slug?: string | undefined;
364
365
  }>;
366
+ export type TemplateDetails = z.infer<typeof templateDetailsSchema>;
365
367
  export declare const duplicateSchema: z.ZodObject<{
366
368
  slug: z.ZodString;
367
369
  name: z.ZodString;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.replayFailedSchema = exports.replaySchema = exports.duplicateSchema = exports.templateDetailsSchema = exports.testSendSchema = exports.realSendSchema = exports.previewSchema = exports.previewVersionSchema = exports.testDataSchema = exports.saveContentSchema = exports.variablesSchema = exports.variableListSchema = exports.variableSchema = exports.versionNumberSchema = exports.restoreVersionSchema = exports.publishSchema = exports.draftRevisionSchema = exports.templateContentSchema = exports.localeContentSchema = exports.blockSchema = exports.conditionSchema = exports.createTemplateSchema = exports.slugSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const constants_1 = require("../constants");
6
+ const json_schema_1 = require("./json.schema");
6
7
  const MIN_HEADING_SIZE = 12;
7
8
  const MAX_HEADING_SIZE = 48;
8
9
  const MAX_TEST_RECIPIENT_COUNT = 5;
@@ -119,7 +120,7 @@ exports.saveContentSchema = zod_1.z.object({
119
120
  variables: exports.variableListSchema.optional(),
120
121
  revision: exports.draftRevisionSchema,
121
122
  });
122
- exports.testDataSchema = zod_1.z.object({ data: zod_1.z.record(zod_1.z.unknown()) });
123
+ exports.testDataSchema = zod_1.z.object({ data: json_schema_1.jsonObjectSchema });
123
124
  exports.previewVersionSchema = zod_1.z.union([
124
125
  zod_1.z.literal("draft"),
125
126
  zod_1.z.literal("published"),
@@ -129,12 +130,12 @@ exports.previewSchema = zod_1.z.object({
129
130
  locale: zod_1.z.string().min(1).optional(),
130
131
  version: exports.previewVersionSchema.optional(),
131
132
  content: exports.templateContentSchema.optional(),
132
- data: zod_1.z.record(zod_1.z.unknown()).optional(),
133
+ data: json_schema_1.jsonObjectSchema.optional(),
133
134
  });
134
135
  exports.realSendSchema = zod_1.z.object({
135
136
  to: zod_1.z.array(zod_1.z.string().email()).min(1).max(MAX_TEST_RECIPIENT_COUNT),
136
137
  locale: zod_1.z.string().min(1).optional(),
137
- data: zod_1.z.record(zod_1.z.unknown()).optional(),
138
+ data: json_schema_1.jsonObjectSchema.optional(),
138
139
  });
139
140
  exports.testSendSchema = exports.previewSchema.extend({
140
141
  to: zod_1.z.array(zod_1.z.string().email()).min(1).max(MAX_TEST_RECIPIENT_COUNT),
@@ -1 +1 @@
1
- {"version":3,"file":"templates.schema.js","sourceRoot":"","sources":["../../src/validation/templates.schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templates.schema.js","sourceRoot":"","sources":["../../src/validation/templates.schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ <script setup lang="ts">
2
+ import type { TemplateOverlays } from '../../composables/useTemplateDrawer'
3
+ import type { TemplateRow } from '../../types/mailing'
4
+
5
+ /**
6
+ * The footer of a template's drawer, its test, duplicate and edit actions:
7
+ * the drawer's own bindings, under the names it gives them.
8
+ */
9
+ interface TemplateDrawerFooterProps {
10
+ templateId: string
11
+ locale: string
12
+ template: TemplateRow
13
+ overlays: TemplateOverlays
14
+ openEditor: (targetLocale?: string) => void
15
+ }
16
+
17
+ defineProps<TemplateDrawerFooterProps>()
18
+
19
+ const { t } = useI18n()
20
+ </script>
21
+
22
+ <template>
23
+ <DmsContainerFooter data-template-footer>
24
+ <UButton
25
+ icon="i-ph-flask"
26
+ color="neutral"
27
+ variant="ghost"
28
+ :label="t('dms_mailing.templates.card.test')"
29
+ @click="overlays.openTestSend(templateId, { locale })"
30
+ />
31
+ <UButton
32
+ class="ml-auto"
33
+ icon="i-ph-copy"
34
+ color="neutral"
35
+ variant="outline"
36
+ :label="t('dms_mailing.templates.actions.duplicate')"
37
+ @click="overlays.openDuplicate(templateId, { rowData: template })"
38
+ />
39
+ <UButton
40
+ icon="i-ph-pencil-simple"
41
+ :label="t('dms_mailing.templates.actions.open_editor')"
42
+ @click="openEditor(locale)"
43
+ />
44
+ </DmsContainerFooter>
45
+ </template>
@@ -0,0 +1,102 @@
1
+ <script setup lang="ts">
2
+ import type { TemplatePerformance } from '../../types/mailing'
3
+
4
+ /** A figure of the drawer's last 30 days, as `DmsStatGroup` draws it. */
5
+ interface DrawerStat {
6
+ id: string
7
+ eyebrow: string
8
+ value: string
9
+ detail?: string
10
+ detailTone?: 'error'
11
+ to?: string
12
+ }
13
+
14
+ /**
15
+ * The performance tab of a template's drawer: the drawer's own bindings,
16
+ * under the names it gives them.
17
+ */
18
+ interface TemplateDrawerPerformanceProps {
19
+ stats: DrawerStat[]
20
+ loading: boolean
21
+ hasSends: boolean
22
+ performance: TemplatePerformance | null
23
+ openSendLog: () => void
24
+ formatNumber: (value: number) => string
25
+ }
26
+
27
+ defineProps<TemplateDrawerPerformanceProps>()
28
+
29
+ const { t } = useI18n()
30
+ </script>
31
+
32
+ <template>
33
+ <div class="flex flex-col gap-2">
34
+ <div class="flex items-center justify-between">
35
+ <DmsEyebrow :label="t('dms_mailing.templates.drawer.last_30_days')" />
36
+ <UButton
37
+ variant="link"
38
+ size="xs"
39
+ class="p-0"
40
+ :label="t('dms_mailing.templates.drawer.open_send_log')"
41
+ @click="openSendLog"
42
+ />
43
+ </div>
44
+ <DmsStatGroup
45
+ layout="joined"
46
+ :columns="3"
47
+ :items="stats"
48
+ :loading="loading"
49
+ />
50
+ </div>
51
+ <div class="flex flex-col gap-1">
52
+ <DmsEyebrow :label="t('dms_mailing.templates.drawer.called_from')" />
53
+ <p
54
+ v-if="!hasSends || !performance?.sources.length"
55
+ class="text-muted text-[12.5px]"
56
+ >
57
+ {{ t('dms_mailing.templates.drawer.no_sources') }}
58
+ </p>
59
+ <DmsListRow
60
+ v-for="source in performance?.sources ?? []"
61
+ :key="source.source"
62
+ icon="i-ph-code"
63
+ size="sm"
64
+ mono
65
+ :title="source.source || t('dms_mailing.templates.drawer.unknown_source')"
66
+ :trailing="
67
+ t(
68
+ 'dms_mailing.templates.drawer.sends_count',
69
+ { count: formatNumber(source.count) },
70
+ source.count,
71
+ )
72
+ "
73
+ />
74
+ </div>
75
+ <div class="flex flex-col gap-1">
76
+ <DmsEyebrow :label="t('dms_mailing.templates.drawer.fallbacks')" />
77
+ <p v-if="!hasSends" class="text-muted text-[12.5px]">
78
+ {{ t('dms_mailing.templates.drawer.no_sources') }}
79
+ </p>
80
+ <p
81
+ v-else-if="!performance?.fallbacks.length"
82
+ class="text-muted text-[12.5px]"
83
+ >
84
+ {{ t('dms_mailing.templates.drawer.no_fallbacks') }}
85
+ </p>
86
+ <DmsListRow
87
+ v-for="fallback in performance?.fallbacks ?? []"
88
+ :key="`${fallback.requested}-${fallback.used}`"
89
+ icon="i-ph-translate"
90
+ tone="warning"
91
+ size="sm"
92
+ :title="`${fallback.requested.toUpperCase()} → ${fallback.used.toUpperCase()}`"
93
+ :trailing="
94
+ t(
95
+ 'dms_mailing.templates.drawer.sends_count',
96
+ { count: formatNumber(fallback.count) },
97
+ fallback.count,
98
+ )
99
+ "
100
+ />
101
+ </div>
102
+ </template>
@@ -0,0 +1,110 @@
1
+ <script setup lang="ts">
2
+ import type { MergedVariable } from '../../utils/variables'
3
+ import type { SystemVariable } from '../../utils/system-variables'
4
+ import { variableTypeLabelKey } from '../../utils/variable-types'
5
+
6
+ /**
7
+ * The variables tab of a template's drawer: the drawer's own bindings, under
8
+ * the names it gives them.
9
+ */
10
+ interface TemplateDrawerVariablesProps {
11
+ variables: MergedVariable[]
12
+ isLive: boolean
13
+ hasDraftDeclarations: boolean
14
+ systemVars: SystemVariable[]
15
+ snippet: string
16
+ declareVariable: (path: string) => Promise<void>
17
+ openEditor: (targetLocale?: string) => void
18
+ }
19
+
20
+ defineProps<TemplateDrawerVariablesProps>()
21
+
22
+ const { t } = useI18n()
23
+ </script>
24
+
25
+ <template>
26
+ <div class="flex flex-col gap-1">
27
+ <DmsEyebrow :label="t('dms_mailing.templates.drawer.declared_detected')" />
28
+ <p v-if="!variables.length" class="text-muted text-[12.5px]">
29
+ {{ t('dms_mailing.templates.drawer.no_variables') }}
30
+ </p>
31
+ <div
32
+ v-for="variable in variables"
33
+ :key="variable.path"
34
+ class="border-default flex min-h-9 items-center gap-2 border-b last:border-b-0"
35
+ >
36
+ <code
37
+ class="truncate font-mono text-[12px]"
38
+ :class="variable.usage === 'unused' ? 'text-dimmed' : 'text-toned'"
39
+ >
40
+ {{ variable.path }}
41
+ </code>
42
+ <span
43
+ v-if="variable.required && variable.usage !== 'detected'"
44
+ class="text-error"
45
+ :title="t('dms_mailing.templates.drawer.required')"
46
+ >
47
+ *
48
+ </span>
49
+ <DmsStatusPill
50
+ v-if="variable.usage === 'detected'"
51
+ tone="warning"
52
+ size="sm"
53
+ dot="none"
54
+ :label="t('dms_mailing.templates.drawer.not_declared')"
55
+ />
56
+ <DmsStatusPill
57
+ v-if="variable.usage === 'unused'"
58
+ tone="neutral"
59
+ size="sm"
60
+ dot="none"
61
+ :label="t('dms_mailing.templates.drawer.unused')"
62
+ />
63
+ <UButton
64
+ v-if="variable.usage === 'detected' && !isLive"
65
+ class="ml-auto"
66
+ color="neutral"
67
+ variant="ghost"
68
+ size="xs"
69
+ :label="t('dms_mailing.templates.drawer.declare')"
70
+ @click="declareVariable(variable.path)"
71
+ />
72
+ <span
73
+ v-else-if="variable.usage !== 'detected'"
74
+ class="text-dimmed ml-auto font-mono text-[11px]"
75
+ >
76
+ {{ t(variableTypeLabelKey(variable.type)) }}
77
+ </span>
78
+ </div>
79
+ </div>
80
+ <DmsBanner
81
+ v-if="hasDraftDeclarations"
82
+ tone="info"
83
+ size="sm"
84
+ icon="i-ph-brackets-curly"
85
+ :title="t('dms_mailing.templates.drawer.draft_declarations')"
86
+ :description="
87
+ t('dms_mailing.templates.drawer.draft_declarations_description')
88
+ "
89
+ >
90
+ <template #actions>
91
+ <UButton
92
+ color="neutral"
93
+ variant="outline"
94
+ size="xs"
95
+ :label="t('dms_mailing.templates.actions.open_editor')"
96
+ @click="openEditor()"
97
+ />
98
+ </template>
99
+ </DmsBanner>
100
+ <MailingSystemVariables :variables="systemVars" />
101
+ <div class="flex flex-col gap-1.5">
102
+ <div class="flex items-center justify-between">
103
+ <DmsEyebrow :label="t('dms_mailing.templates.drawer.call_from_code')" />
104
+ <DmsCopyButton :value="snippet" />
105
+ </div>
106
+ <pre
107
+ class="bg-elevated text-toned overflow-x-auto rounded-md p-3 font-mono text-[11.5px] leading-relaxed"
108
+ >{{ snippet }}</pre>
109
+ </div>
110
+ </template>