@interware/content-generator 0.6.1 → 0.7.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 (58) hide show
  1. package/dist/_chunks/App-Cwr5ra5m.js +1380 -0
  2. package/dist/_chunks/App-h4_txTsI.mjs +1362 -0
  3. package/dist/_chunks/{ImageStudioTabs-BLAH3KYv.mjs → ImageStudioTabs-B-mOwDfY.mjs} +687 -682
  4. package/dist/_chunks/{ImageStudioTabs-DtusqpQO.js → ImageStudioTabs-CG4KTn1S.js} +683 -678
  5. package/dist/_chunks/{Settings-o2GngLaW.mjs → Settings-BT-EqvXs.mjs} +2 -2
  6. package/dist/_chunks/{Settings-BQXxV3LO.js → Settings-D4NGBTk1.js} +4 -4
  7. package/dist/_chunks/{StudioApp-BaySMwrk.js → StudioApp-_ViSAwCm.js} +2 -2
  8. package/dist/_chunks/{StudioApp-C_znlQRo.mjs → StudioApp-xaEy-uIk.mjs} +2 -2
  9. package/dist/_chunks/{index-BKigRXm3.mjs → index-D67xWUPz.mjs} +3 -28
  10. package/dist/_chunks/{index-BKhe-Jyx.js → index-NA9OuMGs.js} +3 -28
  11. package/dist/admin/index.js +1 -1
  12. package/dist/admin/index.mjs +1 -1
  13. package/dist/admin/src/features/articles/ArticlePage.d.ts +5 -0
  14. package/dist/admin/src/features/articles/ArticlesPage.d.ts +7 -0
  15. package/dist/admin/src/features/articles/NewArticlePage.d.ts +6 -0
  16. package/dist/admin/src/features/articles/SharePreview.d.ts +19 -0
  17. package/dist/admin/src/features/articles/articlesApi.d.ts +94 -0
  18. package/dist/admin/src/features/articles/model.d.ts +24 -0
  19. package/dist/admin/src/features/articles/useArticlesApi.d.ts +19 -0
  20. package/dist/admin/src/features/library/LibraryImagePicker.d.ts +6 -1
  21. package/dist/admin/src/lib/postText.d.ts +25 -0
  22. package/dist/server/index.js +514 -320
  23. package/dist/server/index.mjs +514 -320
  24. package/dist/server/src/articles/generation.d.ts +135 -0
  25. package/dist/server/src/articles/schedule.d.ts +12 -0
  26. package/dist/server/src/articles/sources.d.ts +12 -0
  27. package/dist/server/src/bootstrap.d.ts +2 -0
  28. package/dist/server/src/controllers/articles.d.ts +30 -0
  29. package/dist/server/src/controllers/controller.d.ts +0 -4
  30. package/dist/server/src/controllers/index.d.ts +92 -4
  31. package/dist/server/src/index.d.ts +122 -67
  32. package/dist/server/src/services/articles.d.ts +126 -0
  33. package/dist/server/src/services/image-studio.d.ts +0 -10
  34. package/dist/server/src/services/index.d.ts +30 -63
  35. package/dist/server/src/services/service.d.ts +1 -62
  36. package/package.json +1 -1
  37. package/dist/_chunks/App-CJxSC8yt.js +0 -1105
  38. package/dist/_chunks/App-qbgUXlOZ.mjs +0 -1087
  39. package/dist/_chunks/getTranslation-B6Bsu-uq.mjs +0 -5
  40. package/dist/_chunks/getTranslation-BRVMWSf8.js +0 -4
  41. package/dist/admin/src/components/commons/dialog/index.d.ts +0 -12
  42. package/dist/admin/src/components/commons/generate-image-dialog/index.d.ts +0 -5
  43. package/dist/admin/src/components/generate-content/Form.d.ts +0 -15
  44. package/dist/admin/src/components/home/table.d.ts +0 -13
  45. package/dist/admin/src/components/index.d.ts +0 -12
  46. package/dist/admin/src/containers/generate-content/index.d.ts +0 -2
  47. package/dist/admin/src/containers/home/index.d.ts +0 -2
  48. package/dist/admin/src/hooks/useDialog.d.ts +0 -11
  49. package/dist/admin/src/lib/use-cases/articles/index.d.ts +0 -16
  50. package/dist/admin/src/lib/use-cases/categories/index.d.ts +0 -16
  51. package/dist/admin/src/lib/use-cases/facebook/index.d.ts +0 -5
  52. package/dist/admin/src/lib/use-cases/generate-content/index.d.ts +0 -6
  53. package/dist/admin/src/lib/use-cases/linkedin/index.d.ts +0 -5
  54. package/dist/admin/src/lib/use-cases/users/index.d.ts +0 -16
  55. package/dist/admin/src/pages/GenerateContent.d.ts +0 -2
  56. package/dist/admin/src/pages/HomePage.d.ts +0 -2
  57. package/dist/admin/src/reducers/dialog/index.d.ts +0 -6
  58. package/dist/admin/src/types/reducers.d.ts +0 -4
@@ -0,0 +1,135 @@
1
+ import type { Tool } from '@google/genai';
2
+ /** Modelo de los artículos y modelo rápido de «Enriquecer instrucciones» (E6, D8). */
3
+ export declare const ARTICLE_MODEL = "gemini-2.5-pro";
4
+ export declare const ENRICH_MODEL = "gemini-2.5-flash";
5
+ export type CategoriaInput = {
6
+ id: string;
7
+ } | {
8
+ nueva: string;
9
+ };
10
+ export interface ArticleInput {
11
+ titulo: string;
12
+ categoria: CategoriaInput;
13
+ temperatura: number;
14
+ instrucciones: string;
15
+ urls: string[];
16
+ busqueda: boolean;
17
+ /** Con `false` se mandan las instrucciones tal cual, sin el prompt base. */
18
+ usarPromptBase: boolean;
19
+ /** Prompt base editado para esta generación; si falta, el guardado o el predeterminado. */
20
+ promptBase?: string;
21
+ }
22
+ export declare const BASE_PROMPT_MAX = 20000;
23
+ /** Cuerpo de `POST /articles/generate` validado. Errores como `InputError` (400). */
24
+ export declare const parseArticleInput: (body: Record<string, unknown>) => ArticleInput;
25
+ /** Prompt base que se guarda como predeterminado (`PUT /articles/base-prompt`). */
26
+ export declare const parseBasePrompt: (input: unknown) => string;
27
+ /** Herramientas del paso de investigación (D5). Vacío: no hay investigación. */
28
+ export declare const researchTools: ({ urls, busqueda }: {
29
+ urls: string[];
30
+ busqueda: boolean;
31
+ }) => Tool[];
32
+ interface Tema {
33
+ titulo: string;
34
+ categoria: string;
35
+ instrucciones: string;
36
+ }
37
+ /** Paso 1 con búsqueda o URLs: notas de investigación en texto, con los datos que respaldan el artículo. */
38
+ export declare const researchPrompt: (tema: Tema & {
39
+ urls: string[];
40
+ }) => string;
41
+ /**
42
+ * Prompt base predeterminado (persona, marca, tono, estilo y arco narrativo). Se puede editar desde «Nuevo
43
+ * artículo» y guardar como predeterminado en el plugin store (E6, D12).
44
+ */
45
+ export declare const DEFAULT_BASE_PROMPT = "# ROL Y PERSONA (EL FONDO)\nAct\u00FAa como un Estratega Tecnol\u00F3gico de nivel C-Level y Arquitecto de Negocios de \u00E9lite para 'InterWare'. Eres un columnista de opini\u00F3n experto, escribiendo para una audiencia exclusiva de tomadores de decisi\u00F3n: Directores de TI (CTOs), Directores de Operaciones (COOs) y Directores Financieros (CFOs/FinOps).\nNo eres un redactor de marketing ni un vendedor de software; eres un consultor de alto nivel que diagnostica problemas sist\u00E9micos complejos y ofrece perspectivas de valor incalculable. Tu objetivo es hacer que el lector cuestione la madurez de su propia infraestructura.\n\n# FILOSOF\u00CDA DE MARCA: \"ORQUESTACI\u00D3N LATENTE\"\nToda tu narrativa debe estar impregnada de nuestra visi\u00F3n de negocio: \"Evoluci\u00F3n por Continuidad\"\n- InterWare no inventa necesidades ni vende cat\u00E1logos de servicios; InterWare resuelve la complejidad operativa con responsabilidad\n- Somos el orquestador invisible que garantiza que ecosistemas heterog\u00E9neos trabajen en perfecta armon\u00EDa.\n- Tu ancla absoluta de confianza y diferenciador es: \"El c\u00F3digo tiene alma\". Esto significa que no entregamos simple software; entregamos sistemas de misi\u00F3n cr\u00EDtica que no fallan, respaldados por equipos humanos de excelencia.\n- Tu respaldo de autoridad (menci\u00F3nelo sutilmente como validaci\u00F3n, nunca como presunci\u00F3n): Nos avalan casi 30 a\u00F1os de historia, m\u00E1s de 9,000 proyectos exitosos, primer centro autorizado de Java en LATAM y m\u00E1s de 25 a\u00F1os como Partners Gold de IBM. Nuestra prueba de lealtad es que promediamos relaciones de m\u00E1s de 10 a\u00F1os con nuestros clientes.\n\n# REGLAS DE TONO Y L\u00C9XICO (LA FORMA)\n1. El Tono: Profundamente autoritario, fr\u00EDo, elegante, quir\u00FArgico y sofisticado. Escribe con la certeza de quien ha visto todas las fallas posibles en la industria y sabe c\u00F3mo prevenirlas.\n2. Vocabulario Obligatorio (Usa al menos 4 de forma natural): Orquestaci\u00F3n, resiliencia, fricci\u00F3n operativa, deuda t\u00E9cnica, telemetr\u00EDa, anticipaci\u00F3n, interoperabilidad, misi\u00F3n cr\u00EDtica, observabilidad profunda, ecosistemas h\u00EDbridos, primitivas de orquestaci\u00F3n.\n3. Prohibici\u00F3n de L\u00E9xico Barato (Zero-Clutter Text): PROHIBIDO usar palabras literales o burdas como \"fierros\", \"cables\", \"hardware\", \"servidores f\u00EDsicos\" o \"computadoras\". En su lugar, usa \"nodos\", \"infraestructura\", \"arquitecturas distribuidas\", \"activos digitales\".\n\n# RESTRICCIONES ESTRICTAS ANTI-IA (EL ESTILO)\n- Cero Clich\u00E9s de Marketing: NUNCA uses frases trilladas como \"en el mundo digital de hoy\", \"en la era actual\", \"desata el poder\", \"revolucionar el mercado\", \"lleva tu empresa al siguiente nivel\" o \"somos tu mejor opci\u00F3n\".\n- Cero Estructuras Rob\u00F3ticas: Evita transiciones predecibles como \"En resumen\", \"En conclusi\u00F3n\", \"En primer lugar\", \"En segundo lugar\".\n- Fluidez Org\u00E1nica: No abuses de las listas de vi\u00F1etas (bullets). Si debes listar beneficios, int\u00E9gralos en la prosa de manera fluida o usa negritas sutiles dentro de un p\u00E1rrafo.\n- Espacio Negativo Textual: Los tomadores de decisi\u00F3n no leen bloques densos de texto. Usa p\u00E1rrafos cortos (m\u00E1ximo 3 o 4 l\u00EDneas). El texto debe \"respirar\".\n\n# INSTRUCCI\u00D3N DE EJECUCI\u00D3N: LA NARRATIVA DE LA COLUMNA\nRedacta una columna de opini\u00F3n profunda y anal\u00EDtica sobre el tema de la secci\u00F3n \u00ABTEMA DEL ART\u00CDCULO\u00BB.\n\nTu art\u00EDculo debe seguir este arco narrativo impecable (entre 600 y 800 palabras):\n\n1. EL T\u00CDTULO ABSTRACTO: Crea un t\u00EDtulo de menos de 10 palabras que evoque un dolor de negocio o una revelaci\u00F3n financiera, no una caracter\u00EDstica de software. Debe sonar a un art\u00EDculo de *Harvard Business Review*.\n2. LA FRICCI\u00D3N (El Diagn\u00F3stico Crudo): Abre el art\u00EDculo sin introducciones banales. Golpea directamente diagnosticando el dolor del negocio (ej. la p\u00E9rdida de rentabilidad por cuellos de botella operativos o el riesgo inminente de sistemas legados que nadie sabe mantener). Haz que el lector sienta que est\u00E1s describiendo su empresa.\n3. LA ORQUESTACI\u00D3N (El N\u00FAcleo): Desarrolla tu argumento explicando c\u00F3mo una arquitectura inteligente (ya sea a trav\u00E9s de microservicios, DevSecOps, automatizaci\u00F3n inteligente de negocio, o monitoreo sint\u00E9tico con herramientas como iwRobot) resuelve este problema de ra\u00EDz. Transmite la idea de que la tecnolog\u00EDa debe ser un habilitador transparente, no una carga.\n4. EL IMPACTO LATENTE: Teje dentro de la prosa (sin usar vi\u00F1etas obvias de IA) los tres impactos estrat\u00E9gicos del tema. Habla de c\u00F3mo se logra la Resiliencia, la Fluidez operativa, la Eficiencia financiera o la Anticipaci\u00F3n ante el riesgo.\n5. EL CIERRE SUTIL (El CTA Elegante): En lugar de un llamado a la acci\u00F3n desesperado de ventas, cierra con una reflexi\u00F3n ejecutiva o una pregunta abierta que invite al lector a auditar mentalmente la madurez de su propia infraestructura. Una despedida que demuestre que, para orquestar la complejidad, se requiere la maestr\u00EDa de tres d\u00E9cadas.\n\nRecuerda: Eres un experto hablando con otro experto. S\u00E9 denso en valor y conciso en palabras";
46
+ /** Prompt de la columna: el prompt base (predeterminado o editado), el tema y la investigación si la hay. */
47
+ export declare const articlePrompt: ({ base, investigacion, ...tema }: Tema & {
48
+ base?: string;
49
+ investigacion?: string;
50
+ }) => string;
51
+ /** Sin prompt base: las instrucciones tal cual, más la investigación si se pidió búsqueda o URLs (D12). */
52
+ export declare const rawPrompt: ({ instrucciones, investigacion }: {
53
+ instrucciones: string;
54
+ investigacion?: string;
55
+ }) => string;
56
+ /** «Enriquecer instrucciones» (D8): de una idea corta a instrucciones completas y editables. */
57
+ export declare const enrichPrompt: (texto: string) => string;
58
+ /** Esquema de la respuesta estructurada (el mismo de antes del E6). */
59
+ export declare const ARTICLE_SCHEMA: {
60
+ type: string;
61
+ required: string[];
62
+ properties: {
63
+ seo: {
64
+ type: string;
65
+ required: string[];
66
+ properties: {
67
+ metaTitle: {
68
+ type: string;
69
+ };
70
+ metaDescription: {
71
+ type: string;
72
+ };
73
+ metadata: {
74
+ type: string;
75
+ items: {
76
+ type: string;
77
+ required: string[];
78
+ properties: {
79
+ name: {
80
+ type: string;
81
+ };
82
+ content: {
83
+ type: string;
84
+ };
85
+ };
86
+ };
87
+ };
88
+ };
89
+ };
90
+ titulo: {
91
+ type: string;
92
+ minLength: number;
93
+ maxLength: number;
94
+ description: string;
95
+ };
96
+ descripcion: {
97
+ type: string;
98
+ minLength: number;
99
+ maxLength: number;
100
+ description: string;
101
+ };
102
+ slug: {
103
+ type: string;
104
+ minLength: number;
105
+ maxLength: number;
106
+ description: string;
107
+ };
108
+ content: {
109
+ type: string;
110
+ description: string;
111
+ };
112
+ minute_read: {
113
+ type: string;
114
+ minimum: number;
115
+ maximum: number;
116
+ description: string;
117
+ };
118
+ keywords: {
119
+ type: string;
120
+ minItems: number;
121
+ maxItems: number;
122
+ items: {
123
+ type: string;
124
+ required: string[];
125
+ properties: {
126
+ name: {
127
+ type: string;
128
+ };
129
+ };
130
+ };
131
+ description: string;
132
+ };
133
+ };
134
+ };
135
+ export {};
@@ -0,0 +1,12 @@
1
+ /** Zona horaria del equipo de Marketing (E6, D11). El servidor guarda UTC. */
2
+ export declare const ZONA = "America/Mexico_City";
3
+ export type Estado = 'borrador' | 'programado' | 'publicado';
4
+ /** Fecha `YYYY-MM-DD` de ese instante en la Ciudad de México (para `fecha_publicacion`). */
5
+ export declare const fechaEnMexico: (date: Date) => string;
6
+ /** Fecha y hora para programar (D3): ISO 8601, futura y a menos de un año. */
7
+ export declare const parseScheduleAt: (input: unknown, now: Date) => Date;
8
+ /** Estado del artículo (D1): publicado si hay versión publicada; si no, programado o borrador. */
9
+ export declare const estadoDe: ({ publicado, programada }: {
10
+ publicado: boolean;
11
+ programada: string | null | undefined;
12
+ }) => Estado;
@@ -0,0 +1,12 @@
1
+ import type { GenerateContentResponse } from '@google/genai';
2
+ /** Fuente que consultó Gemini al escribir el artículo (E6, D6). Se guarda en `fuentes` del artículo. */
3
+ export interface Fuente {
4
+ titulo: string;
5
+ url: string;
6
+ tipo: 'referencia' | 'busqueda';
7
+ }
8
+ export declare const MAX_URLS = 3;
9
+ /** URLs de referencia del formulario: hasta 3, http(s), sin espacios ni repetidas. */
10
+ export declare const parseReferenceUrls: (input: unknown) => string[];
11
+ /** Las referencias del usuario primero y luego lo que el modelo encontró en Google, sin repetir URLs. */
12
+ export declare const sourcesFrom: (urls: string[], res: GenerateContentResponse | undefined) => Fuente[];
@@ -1,4 +1,6 @@
1
1
  import type { Core } from '@strapi/strapi';
2
+ /** Tarea que publica los artículos programados (E6, D4). */
3
+ export declare const SCHEDULE_CRON = "content-generator-publicar-programados";
2
4
  declare const bootstrap: ({ strapi }: {
3
5
  strapi: Core.Strapi;
4
6
  }) => Promise<void>;
@@ -0,0 +1,30 @@
1
+ import type { Core } from '@strapi/strapi';
2
+ type Ctx = {
3
+ request: {
4
+ body?: Record<string, unknown>;
5
+ };
6
+ params?: Record<string, string>;
7
+ status: number;
8
+ body: unknown;
9
+ };
10
+ /**
11
+ * Rutas de artículos (E6). Errores como en el Estudio (E4, D12): entrada inválida o validación de
12
+ * Strapi al publicar → 400 con mensaje; no existe → 404; cualquier otro (Google) → 502 genérico, con
13
+ * el detalle solo en el log del servidor.
14
+ */
15
+ declare const _default: ({ strapi }: {
16
+ strapi: Core.Strapi;
17
+ }) => {
18
+ list: (ctx: Ctx) => Promise<void>;
19
+ detail: (ctx: Ctx) => Promise<void>;
20
+ generate: (ctx: Ctx) => Promise<void>;
21
+ enrich: (ctx: Ctx) => Promise<void>;
22
+ basePrompt: (ctx: Ctx) => Promise<void>;
23
+ saveBasePrompt: (ctx: Ctx) => Promise<void>;
24
+ resetBasePrompt: (ctx: Ctx) => Promise<void>;
25
+ setImage: (ctx: Ctx) => Promise<void>;
26
+ publish: (ctx: Ctx) => Promise<void>;
27
+ schedule: (ctx: Ctx) => Promise<void>;
28
+ unschedule: (ctx: Ctx) => Promise<void>;
29
+ };
30
+ export default _default;
@@ -2,11 +2,7 @@ import type { Core } from '@strapi/strapi';
2
2
  declare const controller: ({ strapi }: {
3
3
  strapi: Core.Strapi;
4
4
  }) => {
5
- getArticles(ctx: any): Promise<unknown>;
6
5
  getCategories(ctx: any): Promise<unknown>;
7
- getUsers(ctx: any): Promise<unknown>;
8
- generateArticle(ctx: any): Promise<void>;
9
- generateImageForArticle(ctx: any): Promise<void>;
10
6
  downloadFile(ctx: any): Promise<void>;
11
7
  generateVideo(ctx: any): Promise<void>;
12
8
  publishToLinkedIn(ctx: any): Promise<void>;
@@ -2,11 +2,7 @@ declare const _default: {
2
2
  controller: ({ strapi }: {
3
3
  strapi: import("@strapi/types/dist/core").Strapi;
4
4
  }) => {
5
- getArticles(ctx: any): Promise<unknown>;
6
5
  getCategories(ctx: any): Promise<unknown>;
7
- getUsers(ctx: any): Promise<unknown>;
8
- generateArticle(ctx: any): Promise<void>;
9
- generateImageForArticle(ctx: any): Promise<void>;
10
6
  downloadFile(ctx: any): Promise<void>;
11
7
  generateVideo(ctx: any): Promise<void>;
12
8
  publishToLinkedIn(ctx: any): Promise<void>;
@@ -147,5 +143,97 @@ declare const _default: {
147
143
  body: unknown;
148
144
  }) => Promise<void>;
149
145
  };
146
+ articles: ({ strapi }: {
147
+ strapi: import("@strapi/types/dist/core").Strapi;
148
+ }) => {
149
+ list: (ctx: {
150
+ request: {
151
+ body?: Record<string, unknown>;
152
+ };
153
+ params?: Record<string, string>;
154
+ status: number;
155
+ body: unknown;
156
+ }) => Promise<void>;
157
+ detail: (ctx: {
158
+ request: {
159
+ body?: Record<string, unknown>;
160
+ };
161
+ params?: Record<string, string>;
162
+ status: number;
163
+ body: unknown;
164
+ }) => Promise<void>;
165
+ generate: (ctx: {
166
+ request: {
167
+ body?: Record<string, unknown>;
168
+ };
169
+ params?: Record<string, string>;
170
+ status: number;
171
+ body: unknown;
172
+ }) => Promise<void>;
173
+ enrich: (ctx: {
174
+ request: {
175
+ body?: Record<string, unknown>;
176
+ };
177
+ params?: Record<string, string>;
178
+ status: number;
179
+ body: unknown;
180
+ }) => Promise<void>;
181
+ basePrompt: (ctx: {
182
+ request: {
183
+ body?: Record<string, unknown>;
184
+ };
185
+ params?: Record<string, string>;
186
+ status: number;
187
+ body: unknown;
188
+ }) => Promise<void>;
189
+ saveBasePrompt: (ctx: {
190
+ request: {
191
+ body?: Record<string, unknown>;
192
+ };
193
+ params?: Record<string, string>;
194
+ status: number;
195
+ body: unknown;
196
+ }) => Promise<void>;
197
+ resetBasePrompt: (ctx: {
198
+ request: {
199
+ body?: Record<string, unknown>;
200
+ };
201
+ params?: Record<string, string>;
202
+ status: number;
203
+ body: unknown;
204
+ }) => Promise<void>;
205
+ setImage: (ctx: {
206
+ request: {
207
+ body?: Record<string, unknown>;
208
+ };
209
+ params?: Record<string, string>;
210
+ status: number;
211
+ body: unknown;
212
+ }) => Promise<void>;
213
+ publish: (ctx: {
214
+ request: {
215
+ body?: Record<string, unknown>;
216
+ };
217
+ params?: Record<string, string>;
218
+ status: number;
219
+ body: unknown;
220
+ }) => Promise<void>;
221
+ schedule: (ctx: {
222
+ request: {
223
+ body?: Record<string, unknown>;
224
+ };
225
+ params?: Record<string, string>;
226
+ status: number;
227
+ body: unknown;
228
+ }) => Promise<void>;
229
+ unschedule: (ctx: {
230
+ request: {
231
+ body?: Record<string, unknown>;
232
+ };
233
+ params?: Record<string, string>;
234
+ status: number;
235
+ body: unknown;
236
+ }) => Promise<void>;
237
+ };
150
238
  };
151
239
  export default _default;
@@ -18,11 +18,7 @@ declare const _default: {
18
18
  controller: ({ strapi }: {
19
19
  strapi: import("@strapi/types/dist/core").Strapi;
20
20
  }) => {
21
- getArticles(ctx: any): Promise<unknown>;
22
21
  getCategories(ctx: any): Promise<unknown>;
23
- getUsers(ctx: any): Promise<unknown>;
24
- generateArticle(ctx: any): Promise<void>;
25
- generateImageForArticle(ctx: any): Promise<void>;
26
22
  downloadFile(ctx: any): Promise<void>;
27
23
  generateVideo(ctx: any): Promise<void>;
28
24
  publishToLinkedIn(ctx: any): Promise<void>;
@@ -163,6 +159,98 @@ declare const _default: {
163
159
  body: unknown;
164
160
  }) => Promise<void>;
165
161
  };
162
+ articles: ({ strapi }: {
163
+ strapi: import("@strapi/types/dist/core").Strapi;
164
+ }) => {
165
+ list: (ctx: {
166
+ request: {
167
+ body?: Record<string, unknown>;
168
+ };
169
+ params?: Record<string, string>;
170
+ status: number;
171
+ body: unknown;
172
+ }) => Promise<void>;
173
+ detail: (ctx: {
174
+ request: {
175
+ body?: Record<string, unknown>;
176
+ };
177
+ params?: Record<string, string>;
178
+ status: number;
179
+ body: unknown;
180
+ }) => Promise<void>;
181
+ generate: (ctx: {
182
+ request: {
183
+ body?: Record<string, unknown>;
184
+ };
185
+ params?: Record<string, string>;
186
+ status: number;
187
+ body: unknown;
188
+ }) => Promise<void>;
189
+ enrich: (ctx: {
190
+ request: {
191
+ body?: Record<string, unknown>;
192
+ };
193
+ params?: Record<string, string>;
194
+ status: number;
195
+ body: unknown;
196
+ }) => Promise<void>;
197
+ basePrompt: (ctx: {
198
+ request: {
199
+ body?: Record<string, unknown>;
200
+ };
201
+ params?: Record<string, string>;
202
+ status: number;
203
+ body: unknown;
204
+ }) => Promise<void>;
205
+ saveBasePrompt: (ctx: {
206
+ request: {
207
+ body?: Record<string, unknown>;
208
+ };
209
+ params?: Record<string, string>;
210
+ status: number;
211
+ body: unknown;
212
+ }) => Promise<void>;
213
+ resetBasePrompt: (ctx: {
214
+ request: {
215
+ body?: Record<string, unknown>;
216
+ };
217
+ params?: Record<string, string>;
218
+ status: number;
219
+ body: unknown;
220
+ }) => Promise<void>;
221
+ setImage: (ctx: {
222
+ request: {
223
+ body?: Record<string, unknown>;
224
+ };
225
+ params?: Record<string, string>;
226
+ status: number;
227
+ body: unknown;
228
+ }) => Promise<void>;
229
+ publish: (ctx: {
230
+ request: {
231
+ body?: Record<string, unknown>;
232
+ };
233
+ params?: Record<string, string>;
234
+ status: number;
235
+ body: unknown;
236
+ }) => Promise<void>;
237
+ schedule: (ctx: {
238
+ request: {
239
+ body?: Record<string, unknown>;
240
+ };
241
+ params?: Record<string, string>;
242
+ status: number;
243
+ body: unknown;
244
+ }) => Promise<void>;
245
+ unschedule: (ctx: {
246
+ request: {
247
+ body?: Record<string, unknown>;
248
+ };
249
+ params?: Record<string, string>;
250
+ status: number;
251
+ body: unknown;
252
+ }) => Promise<void>;
253
+ };
166
254
  };
167
255
  routes: {
168
256
  'content-api': {
@@ -194,79 +282,18 @@ declare const _default: {
194
282
  allowVertex?: boolean;
195
283
  }): Promise<import("./utils/geminiClient").GeminiClient>;
196
284
  geminiConfig(): Promise<import("@google/genai").GoogleGenAI>;
197
- getArticulos(sanitizedQueryParams: any): Promise<{
198
- id: import("@strapi/types/dist/data").ID;
199
- documentId: string;
200
- locale?: string;
201
- content?: string;
202
- createdAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
203
- descripcion?: string;
204
- facebookPostId?: string;
205
- fecha_publicacion?: import("@strapi/types/dist/schema/attribute").DateValue;
206
- linkedInPostId?: string;
207
- minute_read?: number;
208
- publishedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
209
- slug?: string;
210
- titulo?: string;
211
- updatedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
212
- }[]>;
213
285
  getCategorias(sanitizedQueryParams: any): Promise<{
214
286
  id: import("@strapi/types/dist/data").ID;
215
287
  documentId: string;
216
- categoria?: string;
217
- locale?: string;
218
- createdAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
219
288
  descripcion?: string;
220
- publishedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
221
- updatedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
222
- }[]>;
223
- getUsuarios(sanitizedQueryParams: any): Promise<{
224
- id: import("@strapi/types/dist/data").ID;
225
- documentId: string;
289
+ categoria?: string;
226
290
  locale?: string;
227
- password?: string;
228
- email?: string;
229
291
  createdAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
230
292
  publishedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
231
293
  updatedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
232
- apellidos?: string;
233
- bio?: string;
234
- blocked?: boolean;
235
- confirmationToken?: string;
236
- confirmed?: boolean;
237
- fecha_baja?: import("@strapi/types/dist/schema/attribute").DateValue;
238
- fecha_ingreso?: import("@strapi/types/dist/schema/attribute").DateValue;
239
- fecha_nacimiento?: import("@strapi/types/dist/schema/attribute").DateValue;
240
- nombre?: string;
241
- nombre_completo?: string;
242
- numero_empleado?: string;
243
- provider?: string;
244
- resetPasswordToken?: string;
245
- sfid?: string;
246
- username?: string;
247
294
  }[]>;
248
295
  downloadFile(ctx: any): Promise<void>;
249
296
  _uploadGeneratedFile(file: string | Buffer, filename: string, mimeType: string, folderName?: string): Promise<any>;
250
- generateArticle(ctx: any): Promise<{
251
- id: import("@strapi/types/dist/data").ID;
252
- documentId: string;
253
- locale?: string;
254
- content?: string;
255
- createdAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
256
- descripcion?: string;
257
- facebookPostId?: string;
258
- fecha_publicacion?: import("@strapi/types/dist/schema/attribute").DateValue;
259
- linkedInPostId?: string;
260
- minute_read?: number;
261
- publishedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
262
- slug?: string;
263
- titulo?: string;
264
- updatedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
265
- }>;
266
- generateImageForArticle(ctx: any): Promise<{
267
- message: string;
268
- image: any;
269
- }>;
270
297
  _callVeoVideoGeneration(promptText: string, aspectRatio: string, durationSeconds: number, sceneRefs: {
271
298
  buffer: Buffer;
272
299
  mimeType: string;
@@ -291,7 +318,6 @@ declare const _default: {
291
318
  models: import("./image-studio/models").ImageModelInfo[];
292
319
  verified: boolean;
293
320
  }>;
294
- generateForArticle(prompt: string, aspectRatio: string, imageSize: string): Promise<string>;
295
321
  generate(input: import("./image-studio/validate").GenerateInput): Promise<import("./services/image-studio").GeneratedImage>;
296
322
  edit(input: import("./image-studio/validate").EditInput): Promise<import("./services/image-studio").GeneratedImage>;
297
323
  expand(prompt: string): Promise<string>;
@@ -311,6 +337,35 @@ declare const _default: {
311
337
  renameFolder(from: unknown, to: unknown): Promise<string[]>;
312
338
  deleteFolder(path: unknown): Promise<string[]>;
313
339
  };
340
+ articles: ({ strapi }: {
341
+ strapi: import("@strapi/types/dist/core").Strapi;
342
+ }) => {
343
+ basePrompt: () => Promise<{
344
+ prompt: string;
345
+ personalizado: boolean;
346
+ }>;
347
+ saveBasePrompt(prompt: string): Promise<{
348
+ prompt: string;
349
+ personalizado: boolean;
350
+ }>;
351
+ resetBasePrompt(): Promise<{
352
+ prompt: string;
353
+ personalizado: boolean;
354
+ }>;
355
+ list(): Promise<{
356
+ articles: import("./services/articles").ArticleRow[];
357
+ }>;
358
+ detail: (documentId: string) => Promise<import("./services/articles").ArticleDetail>;
359
+ generate(input: import("./articles/generation").ArticleInput): Promise<{
360
+ documentId: string;
361
+ }>;
362
+ enrich(texto: string): Promise<string>;
363
+ setImage(documentId: string, fileId: unknown): Promise<import("./services/articles").ArticleDetail>;
364
+ publish(documentId: string): Promise<import("./services/articles").ArticleDetail>;
365
+ schedule(documentId: string, at: unknown): Promise<import("./services/articles").ArticleDetail>;
366
+ unschedule(documentId: string): Promise<import("./services/articles").ArticleDetail>;
367
+ publishDue(): Promise<number>;
368
+ };
314
369
  };
315
370
  contentTypes: {
316
371
  template: {