ponch-mcp-server 1.0.21 → 1.0.23

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 (36) hide show
  1. package/dist/schemas/index.d.ts +968 -118
  2. package/dist/schemas/index.d.ts.map +1 -1
  3. package/dist/schemas/index.js +31 -21
  4. package/dist/schemas/index.js.map +1 -1
  5. package/dist/schemas/marketing/brandBrief.d.ts +916 -0
  6. package/dist/schemas/marketing/brandBrief.d.ts.map +1 -0
  7. package/dist/schemas/marketing/brandBrief.js +206 -0
  8. package/dist/schemas/marketing/brandBrief.js.map +1 -0
  9. package/dist/schemas/marketing/brandConfig.d.ts +1886 -0
  10. package/dist/schemas/marketing/brandConfig.d.ts.map +1 -0
  11. package/dist/schemas/marketing/brandConfig.js +114 -0
  12. package/dist/schemas/marketing/brandConfig.js.map +1 -0
  13. package/dist/schemas/marketing/calendario.d.ts +1093 -0
  14. package/dist/schemas/marketing/calendario.d.ts.map +1 -0
  15. package/dist/schemas/marketing/calendario.js +60 -0
  16. package/dist/schemas/marketing/calendario.js.map +1 -0
  17. package/dist/schemas/marketing/collectionSuggestions.d.ts +274 -0
  18. package/dist/schemas/marketing/collectionSuggestions.d.ts.map +1 -0
  19. package/dist/schemas/marketing/collectionSuggestions.js +125 -0
  20. package/dist/schemas/marketing/collectionSuggestions.js.map +1 -0
  21. package/dist/schemas/marketing/contenido.d.ts +203 -0
  22. package/dist/schemas/marketing/contenido.d.ts.map +1 -0
  23. package/dist/schemas/marketing/contenido.js +84 -0
  24. package/dist/schemas/marketing/contenido.js.map +1 -0
  25. package/dist/schemas/marketing/foto.d.ts +242 -0
  26. package/dist/schemas/marketing/foto.d.ts.map +1 -0
  27. package/dist/schemas/marketing/foto.js +40 -0
  28. package/dist/schemas/marketing/foto.js.map +1 -0
  29. package/dist/schemas/marketing/plan.d.ts +574 -0
  30. package/dist/schemas/marketing/plan.d.ts.map +1 -1
  31. package/dist/schemas/marketing/plan.js +137 -0
  32. package/dist/schemas/marketing/plan.js.map +1 -1
  33. package/dist/tools/marketing.d.ts.map +1 -1
  34. package/dist/tools/marketing.js +46 -18
  35. package/dist/tools/marketing.js.map +1 -1
  36. package/package.json +1 -1
@@ -0,0 +1,203 @@
1
+ /**
2
+ * mcp-server/src/schemas/marketing/contenido.ts
3
+ *
4
+ * Schemas Zod para marketing_contenido + datos por plataforma.
5
+ *
6
+ * Sub-deuda 2.5 (sesion 176B): builder buildContenido() y los buildDatos*
7
+ * llaman a sus schemas Zod al final.
8
+ */
9
+ import { z } from 'zod';
10
+ export declare const DatosGBPSchema: z.ZodObject<{
11
+ summary: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12
+ topicType: z.ZodOptional<z.ZodEnum<["STANDARD", "OFFER", "EVENT"]>>;
13
+ callToAction: z.ZodOptional<z.ZodNullable<z.ZodObject<{
14
+ type: z.ZodEnum<["SHOP", "LEARN_MORE", "SIGN_UP", "CALL"]>;
15
+ url: z.ZodString;
16
+ }, "strip", z.ZodTypeAny, {
17
+ url: string;
18
+ type: "SHOP" | "LEARN_MORE" | "SIGN_UP" | "CALL";
19
+ }, {
20
+ url: string;
21
+ type: "SHOP" | "LEARN_MORE" | "SIGN_UP" | "CALL";
22
+ }>>>;
23
+ perfilId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
24
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
25
+ summary: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26
+ topicType: z.ZodOptional<z.ZodEnum<["STANDARD", "OFFER", "EVENT"]>>;
27
+ callToAction: z.ZodOptional<z.ZodNullable<z.ZodObject<{
28
+ type: z.ZodEnum<["SHOP", "LEARN_MORE", "SIGN_UP", "CALL"]>;
29
+ url: z.ZodString;
30
+ }, "strip", z.ZodTypeAny, {
31
+ url: string;
32
+ type: "SHOP" | "LEARN_MORE" | "SIGN_UP" | "CALL";
33
+ }, {
34
+ url: string;
35
+ type: "SHOP" | "LEARN_MORE" | "SIGN_UP" | "CALL";
36
+ }>>>;
37
+ perfilId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
38
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
39
+ summary: z.ZodOptional<z.ZodNullable<z.ZodString>>;
40
+ topicType: z.ZodOptional<z.ZodEnum<["STANDARD", "OFFER", "EVENT"]>>;
41
+ callToAction: z.ZodOptional<z.ZodNullable<z.ZodObject<{
42
+ type: z.ZodEnum<["SHOP", "LEARN_MORE", "SIGN_UP", "CALL"]>;
43
+ url: z.ZodString;
44
+ }, "strip", z.ZodTypeAny, {
45
+ url: string;
46
+ type: "SHOP" | "LEARN_MORE" | "SIGN_UP" | "CALL";
47
+ }, {
48
+ url: string;
49
+ type: "SHOP" | "LEARN_MORE" | "SIGN_UP" | "CALL";
50
+ }>>>;
51
+ perfilId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
52
+ }, z.ZodTypeAny, "passthrough">>;
53
+ export type DatosGBP = z.infer<typeof DatosGBPSchema>;
54
+ export declare const DatosBlogSchema: z.ZodObject<{
55
+ title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
56
+ body: z.ZodOptional<z.ZodNullable<z.ZodString>>;
57
+ handle: z.ZodOptional<z.ZodNullable<z.ZodString>>;
58
+ metaTitle: z.ZodOptional<z.ZodNullable<z.ZodString>>;
59
+ metaDescription: z.ZodOptional<z.ZodNullable<z.ZodString>>;
60
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
61
+ imageAltText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
62
+ keywordsSecundarios: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
63
+ productosLinkeados: z.ZodOptional<z.ZodArray<z.ZodUnknown, "many">>;
64
+ structuredData: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
65
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
66
+ title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
67
+ body: z.ZodOptional<z.ZodNullable<z.ZodString>>;
68
+ handle: z.ZodOptional<z.ZodNullable<z.ZodString>>;
69
+ metaTitle: z.ZodOptional<z.ZodNullable<z.ZodString>>;
70
+ metaDescription: z.ZodOptional<z.ZodNullable<z.ZodString>>;
71
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
72
+ imageAltText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
73
+ keywordsSecundarios: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
74
+ productosLinkeados: z.ZodOptional<z.ZodArray<z.ZodUnknown, "many">>;
75
+ structuredData: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
76
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
77
+ title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
78
+ body: z.ZodOptional<z.ZodNullable<z.ZodString>>;
79
+ handle: z.ZodOptional<z.ZodNullable<z.ZodString>>;
80
+ metaTitle: z.ZodOptional<z.ZodNullable<z.ZodString>>;
81
+ metaDescription: z.ZodOptional<z.ZodNullable<z.ZodString>>;
82
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
83
+ imageAltText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
84
+ keywordsSecundarios: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
85
+ productosLinkeados: z.ZodOptional<z.ZodArray<z.ZodUnknown, "many">>;
86
+ structuredData: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
87
+ }, z.ZodTypeAny, "passthrough">>;
88
+ export type DatosBlog = z.infer<typeof DatosBlogSchema>;
89
+ export declare const DatosIGSchema: z.ZodObject<{
90
+ caption: z.ZodOptional<z.ZodNullable<z.ZodString>>;
91
+ altText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
92
+ mediaType: z.ZodOptional<z.ZodEnum<["IMAGE", "CAROUSEL", "REEL", "STORY"]>>;
93
+ productTags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
94
+ hashtags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
95
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
96
+ caption: z.ZodOptional<z.ZodNullable<z.ZodString>>;
97
+ altText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
98
+ mediaType: z.ZodOptional<z.ZodEnum<["IMAGE", "CAROUSEL", "REEL", "STORY"]>>;
99
+ productTags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
100
+ hashtags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
101
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
102
+ caption: z.ZodOptional<z.ZodNullable<z.ZodString>>;
103
+ altText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
104
+ mediaType: z.ZodOptional<z.ZodEnum<["IMAGE", "CAROUSEL", "REEL", "STORY"]>>;
105
+ productTags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
106
+ hashtags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
107
+ }, z.ZodTypeAny, "passthrough">>;
108
+ export type DatosIG = z.infer<typeof DatosIGSchema>;
109
+ export declare const DatosReviewSchema: z.ZodObject<{
110
+ reviewText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
111
+ rating: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
112
+ reviewerName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
113
+ responseText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
114
+ googleReviewId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
115
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
116
+ reviewText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
117
+ rating: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
118
+ reviewerName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
119
+ responseText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
120
+ googleReviewId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
121
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
122
+ reviewText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
123
+ rating: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
124
+ reviewerName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
125
+ responseText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
126
+ googleReviewId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
127
+ }, z.ZodTypeAny, "passthrough">>;
128
+ export type DatosReview = z.infer<typeof DatosReviewSchema>;
129
+ export declare const ContenidoSchema: z.ZodObject<{
130
+ id: z.ZodString;
131
+ tenantId: z.ZodString;
132
+ brandId: z.ZodString;
133
+ plataforma: z.ZodNullable<z.ZodEnum<["gbp", "shopify_blog", "instagram", "review"]>>;
134
+ tipo: z.ZodEnum<["post", "blog", "carousel", "reel", "story", "review_response"]>;
135
+ keyword: z.ZodOptional<z.ZodNullable<z.ZodString>>;
136
+ languageCode: z.ZodOptional<z.ZodString>;
137
+ estado: z.ZodEnum<["borrador", "generado", "pendiente_aprobacion", "aprobado", "publicado", "rechazado", "editado", "error_publicacion"]>;
138
+ fotoId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
139
+ mediaUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
140
+ calendarioItemRef: z.ZodOptional<z.ZodNullable<z.ZodString>>;
141
+ datos: z.ZodRecord<z.ZodString, z.ZodUnknown>;
142
+ creadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
143
+ creadoPorId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
144
+ aprobadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
145
+ aprobadoPorId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
146
+ aprobadoPorNombre: z.ZodOptional<z.ZodNullable<z.ZodString>>;
147
+ rechazadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
148
+ rechazadoMotivo: z.ZodOptional<z.ZodNullable<z.ZodString>>;
149
+ editadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
150
+ publicadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
151
+ errorPublicacion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
152
+ externalId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
153
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
154
+ id: z.ZodString;
155
+ tenantId: z.ZodString;
156
+ brandId: z.ZodString;
157
+ plataforma: z.ZodNullable<z.ZodEnum<["gbp", "shopify_blog", "instagram", "review"]>>;
158
+ tipo: z.ZodEnum<["post", "blog", "carousel", "reel", "story", "review_response"]>;
159
+ keyword: z.ZodOptional<z.ZodNullable<z.ZodString>>;
160
+ languageCode: z.ZodOptional<z.ZodString>;
161
+ estado: z.ZodEnum<["borrador", "generado", "pendiente_aprobacion", "aprobado", "publicado", "rechazado", "editado", "error_publicacion"]>;
162
+ fotoId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
163
+ mediaUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
164
+ calendarioItemRef: z.ZodOptional<z.ZodNullable<z.ZodString>>;
165
+ datos: z.ZodRecord<z.ZodString, z.ZodUnknown>;
166
+ creadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
167
+ creadoPorId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
168
+ aprobadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
169
+ aprobadoPorId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
170
+ aprobadoPorNombre: z.ZodOptional<z.ZodNullable<z.ZodString>>;
171
+ rechazadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
172
+ rechazadoMotivo: z.ZodOptional<z.ZodNullable<z.ZodString>>;
173
+ editadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
174
+ publicadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
175
+ errorPublicacion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
176
+ externalId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
177
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
178
+ id: z.ZodString;
179
+ tenantId: z.ZodString;
180
+ brandId: z.ZodString;
181
+ plataforma: z.ZodNullable<z.ZodEnum<["gbp", "shopify_blog", "instagram", "review"]>>;
182
+ tipo: z.ZodEnum<["post", "blog", "carousel", "reel", "story", "review_response"]>;
183
+ keyword: z.ZodOptional<z.ZodNullable<z.ZodString>>;
184
+ languageCode: z.ZodOptional<z.ZodString>;
185
+ estado: z.ZodEnum<["borrador", "generado", "pendiente_aprobacion", "aprobado", "publicado", "rechazado", "editado", "error_publicacion"]>;
186
+ fotoId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
187
+ mediaUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
188
+ calendarioItemRef: z.ZodOptional<z.ZodNullable<z.ZodString>>;
189
+ datos: z.ZodRecord<z.ZodString, z.ZodUnknown>;
190
+ creadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
191
+ creadoPorId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
192
+ aprobadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
193
+ aprobadoPorId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
194
+ aprobadoPorNombre: z.ZodOptional<z.ZodNullable<z.ZodString>>;
195
+ rechazadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
196
+ rechazadoMotivo: z.ZodOptional<z.ZodNullable<z.ZodString>>;
197
+ editadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
198
+ publicadoAt: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
199
+ errorPublicacion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
200
+ externalId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
201
+ }, z.ZodTypeAny, "passthrough">>;
202
+ export type Contenido = z.infer<typeof ContenidoSchema>;
203
+ //# sourceMappingURL=contenido.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contenido.d.ts","sourceRoot":"","sources":["../../../src/schemas/marketing/contenido.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAQX,CAAC;AACjB,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAWZ,CAAC;AACjB,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;gCAMV,CAAC;AACjB,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;gCAMd,CAAC;AACjB,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAM5D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA0BZ,CAAC;AAEjB,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * mcp-server/src/schemas/marketing/contenido.ts
3
+ *
4
+ * Schemas Zod para marketing_contenido + datos por plataforma.
5
+ *
6
+ * Sub-deuda 2.5 (sesion 176B): builder buildContenido() y los buildDatos*
7
+ * llaman a sus schemas Zod al final.
8
+ */
9
+ import { z } from 'zod';
10
+ const PLATAFORMAS = ['gbp', 'shopify_blog', 'instagram', 'review'];
11
+ const TIPOS_CONTENIDO = ['post', 'blog', 'carousel', 'reel', 'story', 'review_response'];
12
+ const ESTADOS_CONTENIDO = [
13
+ 'borrador', 'generado', 'pendiente_aprobacion', 'aprobado',
14
+ 'publicado', 'rechazado', 'editado', 'error_publicacion',
15
+ ];
16
+ // ═══════════════════════════════════════════════════════════
17
+ // DATOS POR PLATAFORMA
18
+ // ═══════════════════════════════════════════════════════════
19
+ export const DatosGBPSchema = z.object({
20
+ summary: z.string().nullable().optional(),
21
+ topicType: z.enum(['STANDARD', 'OFFER', 'EVENT']).optional(),
22
+ callToAction: z.object({
23
+ type: z.enum(['SHOP', 'LEARN_MORE', 'SIGN_UP', 'CALL']),
24
+ url: z.string(),
25
+ }).nullable().optional(),
26
+ perfilId: z.string().nullable().optional(),
27
+ }).passthrough();
28
+ export const DatosBlogSchema = z.object({
29
+ title: z.string().nullable().optional(),
30
+ body: z.string().nullable().optional(),
31
+ handle: z.string().nullable().optional(),
32
+ metaTitle: z.string().max(60, 'meta title NO debe exceder 60 chars').nullable().optional(),
33
+ metaDescription: z.string().max(158, 'meta description NO debe exceder 158 chars').nullable().optional(),
34
+ tags: z.array(z.string()).optional(),
35
+ imageAltText: z.string().max(125, 'imageAltText NO debe exceder 125 chars').nullable().optional(),
36
+ keywordsSecundarios: z.array(z.string()).optional(),
37
+ productosLinkeados: z.array(z.unknown()).optional(),
38
+ structuredData: z.unknown().nullable().optional(),
39
+ }).passthrough();
40
+ export const DatosIGSchema = z.object({
41
+ caption: z.string().max(2200, 'caption IG NO debe exceder 2200 chars').nullable().optional(),
42
+ altText: z.string().max(1000, 'altText IG NO debe exceder 1000 chars').nullable().optional(),
43
+ mediaType: z.enum(['IMAGE', 'CAROUSEL', 'REEL', 'STORY']).optional(),
44
+ productTags: z.array(z.string()).optional(),
45
+ hashtags: z.array(z.string()).optional(),
46
+ }).passthrough();
47
+ export const DatosReviewSchema = z.object({
48
+ reviewText: z.string().nullable().optional(),
49
+ rating: z.number().min(1).max(5).nullable().optional(),
50
+ reviewerName: z.string().nullable().optional(),
51
+ responseText: z.string().nullable().optional(),
52
+ googleReviewId: z.string().nullable().optional(),
53
+ }).passthrough();
54
+ // ═══════════════════════════════════════════════════════════
55
+ // CONTENIDO RAIZ
56
+ // ═══════════════════════════════════════════════════════════
57
+ export const ContenidoSchema = z.object({
58
+ id: z.string().min(1, 'id es obligatorio'),
59
+ tenantId: z.string().min(1, 'tenantId es obligatorio'),
60
+ brandId: z.string().min(1, 'brandId es obligatorio'),
61
+ plataforma: z.enum(PLATAFORMAS).nullable(),
62
+ tipo: z.enum(TIPOS_CONTENIDO),
63
+ keyword: z.string().nullable().optional(),
64
+ languageCode: z.string().optional(),
65
+ estado: z.enum(ESTADOS_CONTENIDO),
66
+ fotoId: z.string().nullable().optional(),
67
+ mediaUrl: z.string().nullable().optional(),
68
+ calendarioItemRef: z.string().nullable().optional(),
69
+ // datos es polimorfico — depende de plataforma. Pasa por passthrough,
70
+ // los buildDatos* validan internamente cuando se construye.
71
+ datos: z.record(z.unknown()),
72
+ creadoAt: z.unknown().nullable().optional(),
73
+ creadoPorId: z.string().nullable().optional(),
74
+ aprobadoAt: z.unknown().nullable().optional(),
75
+ aprobadoPorId: z.string().nullable().optional(),
76
+ aprobadoPorNombre: z.string().nullable().optional(),
77
+ rechazadoAt: z.unknown().nullable().optional(),
78
+ rechazadoMotivo: z.string().nullable().optional(),
79
+ editadoAt: z.unknown().nullable().optional(),
80
+ publicadoAt: z.unknown().nullable().optional(),
81
+ errorPublicacion: z.string().nullable().optional(),
82
+ externalId: z.string().nullable().optional(),
83
+ }).passthrough();
84
+ //# sourceMappingURL=contenido.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contenido.js","sourceRoot":"","sources":["../../../src/schemas/marketing/contenido.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,242 @@
1
+ /**
2
+ * mcp-server/src/schemas/marketing/foto.ts
3
+ *
4
+ * Schema Zod para marketing_fotos.
5
+ *
6
+ * Sub-deuda 2.5 (sesion 176B): cierra el modulo Marketing en Zod.
7
+ * El builder buildFoto() ahora llama a FotoSchema.parse() al final.
8
+ */
9
+ import { z } from 'zod';
10
+ export declare const FotoMetadataSchema: z.ZodObject<{
11
+ ancho: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
12
+ alto: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
13
+ peso: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
14
+ formato: z.ZodOptional<z.ZodNullable<z.ZodString>>;
15
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
16
+ ancho: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
17
+ alto: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
18
+ peso: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
19
+ formato: z.ZodOptional<z.ZodNullable<z.ZodString>>;
20
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
21
+ ancho: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
22
+ alto: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
23
+ peso: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
24
+ formato: z.ZodOptional<z.ZodNullable<z.ZodString>>;
25
+ }, z.ZodTypeAny, "passthrough">>;
26
+ export declare const FotoUsadaEnSchema: z.ZodObject<{
27
+ plataforma: z.ZodOptional<z.ZodString>;
28
+ postId: z.ZodOptional<z.ZodString>;
29
+ fecha: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate, z.ZodObject<{
30
+ seconds: z.ZodNumber;
31
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
32
+ seconds: z.ZodNumber;
33
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
34
+ seconds: z.ZodNumber;
35
+ }, z.ZodTypeAny, "passthrough">>]>>;
36
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
37
+ plataforma: z.ZodOptional<z.ZodString>;
38
+ postId: z.ZodOptional<z.ZodString>;
39
+ fecha: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate, z.ZodObject<{
40
+ seconds: z.ZodNumber;
41
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
42
+ seconds: z.ZodNumber;
43
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
44
+ seconds: z.ZodNumber;
45
+ }, z.ZodTypeAny, "passthrough">>]>>;
46
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
47
+ plataforma: z.ZodOptional<z.ZodString>;
48
+ postId: z.ZodOptional<z.ZodString>;
49
+ fecha: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate, z.ZodObject<{
50
+ seconds: z.ZodNumber;
51
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
52
+ seconds: z.ZodNumber;
53
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
54
+ seconds: z.ZodNumber;
55
+ }, z.ZodTypeAny, "passthrough">>]>>;
56
+ }, z.ZodTypeAny, "passthrough">>;
57
+ export declare const FotoSchema: z.ZodObject<{
58
+ id: z.ZodString;
59
+ tenantId: z.ZodString;
60
+ brandId: z.ZodString;
61
+ archivoOriginal: z.ZodOptional<z.ZodNullable<z.ZodString>>;
62
+ archivoEditado: z.ZodOptional<z.ZodNullable<z.ZodString>>;
63
+ estado: z.ZodEnum<["nueva", "por_editar", "editada", "publicada", "descartada"]>;
64
+ tipo: z.ZodOptional<z.ZodNullable<z.ZodEnum<["producto", "arreglo", "entrega", "taller", "equipo", "evento"]>>>;
65
+ flores: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
66
+ productos: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
67
+ fechaIngesta: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
68
+ fechaEdicion: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
69
+ usadaEn: z.ZodOptional<z.ZodArray<z.ZodObject<{
70
+ plataforma: z.ZodOptional<z.ZodString>;
71
+ postId: z.ZodOptional<z.ZodString>;
72
+ fecha: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate, z.ZodObject<{
73
+ seconds: z.ZodNumber;
74
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
75
+ seconds: z.ZodNumber;
76
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
77
+ seconds: z.ZodNumber;
78
+ }, z.ZodTypeAny, "passthrough">>]>>;
79
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
80
+ plataforma: z.ZodOptional<z.ZodString>;
81
+ postId: z.ZodOptional<z.ZodString>;
82
+ fecha: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate, z.ZodObject<{
83
+ seconds: z.ZodNumber;
84
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
85
+ seconds: z.ZodNumber;
86
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
87
+ seconds: z.ZodNumber;
88
+ }, z.ZodTypeAny, "passthrough">>]>>;
89
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
90
+ plataforma: z.ZodOptional<z.ZodString>;
91
+ postId: z.ZodOptional<z.ZodString>;
92
+ fecha: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate, z.ZodObject<{
93
+ seconds: z.ZodNumber;
94
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
95
+ seconds: z.ZodNumber;
96
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
97
+ seconds: z.ZodNumber;
98
+ }, z.ZodTypeAny, "passthrough">>]>>;
99
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
100
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodObject<{
101
+ ancho: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
102
+ alto: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
103
+ peso: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
104
+ formato: z.ZodOptional<z.ZodNullable<z.ZodString>>;
105
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
106
+ ancho: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
107
+ alto: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
108
+ peso: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
109
+ formato: z.ZodOptional<z.ZodNullable<z.ZodString>>;
110
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
111
+ ancho: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
112
+ alto: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
113
+ peso: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
114
+ formato: z.ZodOptional<z.ZodNullable<z.ZodString>>;
115
+ }, z.ZodTypeAny, "passthrough">>>>;
116
+ creadoPorId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
117
+ creadoPorNombre: z.ZodOptional<z.ZodNullable<z.ZodString>>;
118
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
119
+ id: z.ZodString;
120
+ tenantId: z.ZodString;
121
+ brandId: z.ZodString;
122
+ archivoOriginal: z.ZodOptional<z.ZodNullable<z.ZodString>>;
123
+ archivoEditado: z.ZodOptional<z.ZodNullable<z.ZodString>>;
124
+ estado: z.ZodEnum<["nueva", "por_editar", "editada", "publicada", "descartada"]>;
125
+ tipo: z.ZodOptional<z.ZodNullable<z.ZodEnum<["producto", "arreglo", "entrega", "taller", "equipo", "evento"]>>>;
126
+ flores: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
127
+ productos: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
128
+ fechaIngesta: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
129
+ fechaEdicion: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
130
+ usadaEn: z.ZodOptional<z.ZodArray<z.ZodObject<{
131
+ plataforma: z.ZodOptional<z.ZodString>;
132
+ postId: z.ZodOptional<z.ZodString>;
133
+ fecha: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate, z.ZodObject<{
134
+ seconds: z.ZodNumber;
135
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
136
+ seconds: z.ZodNumber;
137
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
138
+ seconds: z.ZodNumber;
139
+ }, z.ZodTypeAny, "passthrough">>]>>;
140
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
141
+ plataforma: z.ZodOptional<z.ZodString>;
142
+ postId: z.ZodOptional<z.ZodString>;
143
+ fecha: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate, z.ZodObject<{
144
+ seconds: z.ZodNumber;
145
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
146
+ seconds: z.ZodNumber;
147
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
148
+ seconds: z.ZodNumber;
149
+ }, z.ZodTypeAny, "passthrough">>]>>;
150
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
151
+ plataforma: z.ZodOptional<z.ZodString>;
152
+ postId: z.ZodOptional<z.ZodString>;
153
+ fecha: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate, z.ZodObject<{
154
+ seconds: z.ZodNumber;
155
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
156
+ seconds: z.ZodNumber;
157
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
158
+ seconds: z.ZodNumber;
159
+ }, z.ZodTypeAny, "passthrough">>]>>;
160
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
161
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodObject<{
162
+ ancho: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
163
+ alto: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
164
+ peso: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
165
+ formato: z.ZodOptional<z.ZodNullable<z.ZodString>>;
166
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
167
+ ancho: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
168
+ alto: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
169
+ peso: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
170
+ formato: z.ZodOptional<z.ZodNullable<z.ZodString>>;
171
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
172
+ ancho: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
173
+ alto: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
174
+ peso: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
175
+ formato: z.ZodOptional<z.ZodNullable<z.ZodString>>;
176
+ }, z.ZodTypeAny, "passthrough">>>>;
177
+ creadoPorId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
178
+ creadoPorNombre: z.ZodOptional<z.ZodNullable<z.ZodString>>;
179
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
180
+ id: z.ZodString;
181
+ tenantId: z.ZodString;
182
+ brandId: z.ZodString;
183
+ archivoOriginal: z.ZodOptional<z.ZodNullable<z.ZodString>>;
184
+ archivoEditado: z.ZodOptional<z.ZodNullable<z.ZodString>>;
185
+ estado: z.ZodEnum<["nueva", "por_editar", "editada", "publicada", "descartada"]>;
186
+ tipo: z.ZodOptional<z.ZodNullable<z.ZodEnum<["producto", "arreglo", "entrega", "taller", "equipo", "evento"]>>>;
187
+ flores: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
188
+ productos: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
189
+ fechaIngesta: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
190
+ fechaEdicion: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
191
+ usadaEn: z.ZodOptional<z.ZodArray<z.ZodObject<{
192
+ plataforma: z.ZodOptional<z.ZodString>;
193
+ postId: z.ZodOptional<z.ZodString>;
194
+ fecha: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate, z.ZodObject<{
195
+ seconds: z.ZodNumber;
196
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
197
+ seconds: z.ZodNumber;
198
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
199
+ seconds: z.ZodNumber;
200
+ }, z.ZodTypeAny, "passthrough">>]>>;
201
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
202
+ plataforma: z.ZodOptional<z.ZodString>;
203
+ postId: z.ZodOptional<z.ZodString>;
204
+ fecha: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate, z.ZodObject<{
205
+ seconds: z.ZodNumber;
206
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
207
+ seconds: z.ZodNumber;
208
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
209
+ seconds: z.ZodNumber;
210
+ }, z.ZodTypeAny, "passthrough">>]>>;
211
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
212
+ plataforma: z.ZodOptional<z.ZodString>;
213
+ postId: z.ZodOptional<z.ZodString>;
214
+ fecha: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate, z.ZodObject<{
215
+ seconds: z.ZodNumber;
216
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
217
+ seconds: z.ZodNumber;
218
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
219
+ seconds: z.ZodNumber;
220
+ }, z.ZodTypeAny, "passthrough">>]>>;
221
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
222
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodObject<{
223
+ ancho: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
224
+ alto: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
225
+ peso: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
226
+ formato: z.ZodOptional<z.ZodNullable<z.ZodString>>;
227
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
228
+ ancho: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
229
+ alto: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
230
+ peso: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
231
+ formato: z.ZodOptional<z.ZodNullable<z.ZodString>>;
232
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
233
+ ancho: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
234
+ alto: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
235
+ peso: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
236
+ formato: z.ZodOptional<z.ZodNullable<z.ZodString>>;
237
+ }, z.ZodTypeAny, "passthrough">>>>;
238
+ creadoPorId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
239
+ creadoPorNombre: z.ZodOptional<z.ZodNullable<z.ZodString>>;
240
+ }, z.ZodTypeAny, "passthrough">>;
241
+ export type Foto = z.infer<typeof FotoSchema>;
242
+ //# sourceMappingURL=foto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foto.d.ts","sourceRoot":"","sources":["../../../src/schemas/marketing/foto.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;gCAKf,CAAC;AAEjB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAId,CAAC;AAEjB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAgBP,CAAC;AAEjB,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * mcp-server/src/schemas/marketing/foto.ts
3
+ *
4
+ * Schema Zod para marketing_fotos.
5
+ *
6
+ * Sub-deuda 2.5 (sesion 176B): cierra el modulo Marketing en Zod.
7
+ * El builder buildFoto() ahora llama a FotoSchema.parse() al final.
8
+ */
9
+ import { z } from 'zod';
10
+ const ESTADOS_FOTO = ['nueva', 'por_editar', 'editada', 'publicada', 'descartada'];
11
+ const TIPOS_FOTO = ['producto', 'arreglo', 'entrega', 'taller', 'equipo', 'evento'];
12
+ export const FotoMetadataSchema = z.object({
13
+ ancho: z.number().nullable().optional(),
14
+ alto: z.number().nullable().optional(),
15
+ peso: z.number().nullable().optional(),
16
+ formato: z.string().nullable().optional(),
17
+ }).passthrough();
18
+ export const FotoUsadaEnSchema = z.object({
19
+ plataforma: z.string().optional(),
20
+ postId: z.string().optional(),
21
+ fecha: z.union([z.string(), z.date(), z.object({ seconds: z.number() }).passthrough()]).optional(),
22
+ }).passthrough();
23
+ export const FotoSchema = z.object({
24
+ id: z.string().min(1, 'id es obligatorio'),
25
+ tenantId: z.string().min(1, 'tenantId es obligatorio'),
26
+ brandId: z.string().min(1, 'brandId es obligatorio'),
27
+ archivoOriginal: z.string().nullable().optional(),
28
+ archivoEditado: z.string().nullable().optional(),
29
+ estado: z.enum(ESTADOS_FOTO),
30
+ tipo: z.enum(TIPOS_FOTO).nullable().optional(),
31
+ flores: z.array(z.string()).optional(),
32
+ productos: z.array(z.string()).optional(),
33
+ fechaIngesta: z.unknown().nullable().optional(),
34
+ fechaEdicion: z.unknown().nullable().optional(),
35
+ usadaEn: z.array(FotoUsadaEnSchema).optional(),
36
+ metadata: FotoMetadataSchema.nullable().optional(),
37
+ creadoPorId: z.string().nullable().optional(),
38
+ creadoPorNombre: z.string().nullable().optional(),
39
+ }).passthrough();
40
+ //# sourceMappingURL=foto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foto.js","sourceRoot":"","sources":["../../../src/schemas/marketing/foto.ts"],"names":[],"mappings":"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"}