@interware/content-generator 0.6.1 → 0.7.1

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 +534 -327
  23. package/dist/server/index.mjs +535 -328
  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 +6 -11
  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,126 @@
1
+ import type { Core } from '@strapi/strapi';
2
+ import type { GoogleGenAI } from '@google/genai';
3
+ import type { ArticleInput } from '../articles/generation';
4
+ import type { Estado } from '../articles/schedule';
5
+ import type { Fuente } from '../articles/sources';
6
+ /** El artículo o la categoría no existen: el controlador responde 404. */
7
+ export declare class NotFoundError extends Error {
8
+ }
9
+ /** Lo que el servicio usa de `strapi.documents(uid)`. */
10
+ export interface DocsApi {
11
+ findMany(params?: Record<string, unknown>): Promise<unknown[]>;
12
+ findOne(params: Record<string, unknown>): Promise<unknown>;
13
+ findFirst(params: Record<string, unknown>): Promise<unknown>;
14
+ create(params: Record<string, unknown>): Promise<unknown>;
15
+ update(params: Record<string, unknown>): Promise<unknown>;
16
+ publish(params: Record<string, unknown>): Promise<unknown>;
17
+ }
18
+ type ModelsApi = Pick<GoogleGenAI['models'], 'generateContent'>;
19
+ interface Log {
20
+ info(message: string): void;
21
+ warn(message: string): void;
22
+ error(message: string): void;
23
+ }
24
+ /** Prompt base guardado en el plugin store (D12). `null`: se usa el predeterminado. */
25
+ export interface PromptStore {
26
+ get(): Promise<string | null>;
27
+ set(value: string): Promise<void>;
28
+ remove(): Promise<void>;
29
+ }
30
+ interface Deps {
31
+ promptStore?: PromptStore;
32
+ articulos: DocsApi;
33
+ categorias: DocsApi;
34
+ getModels: () => Promise<ModelsApi>;
35
+ now?: () => Date;
36
+ log?: Log;
37
+ }
38
+ export interface ArticleRow {
39
+ documentId: string;
40
+ titulo: string;
41
+ categoria: string | null;
42
+ estado: Estado;
43
+ imagen: boolean;
44
+ fechaPublicacion: string | null;
45
+ programadaPara: string | null;
46
+ linkedInPostId: string | null;
47
+ facebookPostId: string | null;
48
+ }
49
+ export interface ArticleDetail extends ArticleRow {
50
+ descripcion: string;
51
+ content: string;
52
+ minuteRead: number | null;
53
+ slug: string | null;
54
+ imageUrl: string | null;
55
+ imageName: string | null;
56
+ seo: {
57
+ metaTitle?: string;
58
+ metaDescription?: string;
59
+ } | null;
60
+ keywords: string[];
61
+ fuentes: Fuente[];
62
+ }
63
+ /**
64
+ * Artículos del blog (E6): estado, imagen, publicación y programación, generación con fuentes y
65
+ * «Enriquecer instrucciones». Las dependencias se inyectan para probarlo sin Strapi ni Google.
66
+ */
67
+ export declare const createArticles: ({ articulos, categorias, getModels, now, log, promptStore }: Deps) => {
68
+ basePrompt: () => Promise<{
69
+ prompt: string;
70
+ personalizado: boolean;
71
+ }>;
72
+ saveBasePrompt(prompt: string): Promise<{
73
+ prompt: string;
74
+ personalizado: boolean;
75
+ }>;
76
+ resetBasePrompt(): Promise<{
77
+ prompt: string;
78
+ personalizado: boolean;
79
+ }>;
80
+ list(): Promise<{
81
+ articles: ArticleRow[];
82
+ }>;
83
+ detail: (documentId: string) => Promise<ArticleDetail>;
84
+ generate(input: ArticleInput): Promise<{
85
+ documentId: string;
86
+ }>;
87
+ enrich(texto: string): Promise<string>;
88
+ setImage(documentId: string, fileId: unknown): Promise<ArticleDetail>;
89
+ publish(documentId: string): Promise<ArticleDetail>;
90
+ schedule(documentId: string, at: unknown): Promise<ArticleDetail>;
91
+ unschedule(documentId: string): Promise<ArticleDetail>;
92
+ /** D4: publica los borradores con programación vencida. Devuelve cuántos publicó. */
93
+ publishDue(): Promise<number>;
94
+ };
95
+ export type ArticlesService = ReturnType<typeof createArticles>;
96
+ declare const _default: ({ strapi }: {
97
+ strapi: Core.Strapi;
98
+ }) => {
99
+ basePrompt: () => Promise<{
100
+ prompt: string;
101
+ personalizado: boolean;
102
+ }>;
103
+ saveBasePrompt(prompt: string): Promise<{
104
+ prompt: string;
105
+ personalizado: boolean;
106
+ }>;
107
+ resetBasePrompt(): Promise<{
108
+ prompt: string;
109
+ personalizado: boolean;
110
+ }>;
111
+ list(): Promise<{
112
+ articles: ArticleRow[];
113
+ }>;
114
+ detail: (documentId: string) => Promise<ArticleDetail>;
115
+ generate(input: ArticleInput): Promise<{
116
+ documentId: string;
117
+ }>;
118
+ enrich(texto: string): Promise<string>;
119
+ setImage(documentId: string, fileId: unknown): Promise<ArticleDetail>;
120
+ publish(documentId: string): Promise<ArticleDetail>;
121
+ schedule(documentId: string, at: unknown): Promise<ArticleDetail>;
122
+ unschedule(documentId: string): Promise<ArticleDetail>;
123
+ /** D4: publica los borradores con programación vencida. Devuelve cuántos publicó. */
124
+ publishDue(): Promise<number>;
125
+ };
126
+ export default _default;
@@ -4,8 +4,13 @@ import type { Core } from '@strapi/strapi';
4
4
  import type { GoogleGenAI } from '@google/genai';
5
5
  import type { Backend } from '../image-studio/geminiConfig';
6
6
  import type { EditInput, GenerateInput } from '../image-studio/validate';
7
- /** El modelo no devolvió imagen (bloqueo de seguridad u otra causa): el controlador responde 422. */
7
+ /**
8
+ * El modelo no devolvió imagen (bloqueo de seguridad u otra causa): el controlador responde 422 con
9
+ * `message` y registra `detail` (motivo y mensaje de Google, con su código de soporte).
10
+ */
8
11
  export declare class BlockedError extends Error {
12
+ readonly detail?: string;
13
+ constructor(message: string, detail?: string);
9
14
  }
10
15
  type ModelsApi = Pick<GoogleGenAI['models'], 'generateContent' | 'list'>;
11
16
  type ReadFile = (path: string) => Promise<Buffer>;
@@ -38,11 +43,6 @@ export declare const createImageStudio: (getClient: () => Promise<StudioClient>,
38
43
  models: import("../image-studio/models").ImageModelInfo[];
39
44
  verified: boolean;
40
45
  }>;
41
- /**
42
- * Imagen para un artículo (S4.12): antes usaba Imagen 4, que Google apagó. Usa el primer modelo
43
- * disponible del catálogo y ajusta proporción y tamaño a lo que admite. Devuelve base64.
44
- */
45
- generateForArticle(prompt: string, aspectRatio: string, imageSize: string): Promise<string>;
46
46
  generate(input: GenerateInput): Promise<GeneratedImage>;
47
47
  edit(input: EditInput): Promise<GeneratedImage>;
48
48
  expand(prompt: string): Promise<string>;
@@ -54,11 +54,6 @@ declare const _default: ({ strapi }: {
54
54
  models: import("../image-studio/models").ImageModelInfo[];
55
55
  verified: boolean;
56
56
  }>;
57
- /**
58
- * Imagen para un artículo (S4.12): antes usaba Imagen 4, que Google apagó. Usa el primer modelo
59
- * disponible del catálogo y ajusta proporción y tamaño a lo que admite. Devuelve base64.
60
- */
61
- generateForArticle(prompt: string, aspectRatio: string, imageSize: string): Promise<string>;
62
57
  generate(input: GenerateInput): Promise<GeneratedImage>;
63
58
  edit(input: EditInput): Promise<GeneratedImage>;
64
59
  expand(prompt: string): Promise<string>;
@@ -8,79 +8,18 @@ declare const _default: {
8
8
  allowVertex?: boolean;
9
9
  }): Promise<import("../utils/geminiClient").GeminiClient>;
10
10
  geminiConfig(): Promise<import("@google/genai").GoogleGenAI>;
11
- getArticulos(sanitizedQueryParams: any): Promise<{
12
- id: import("@strapi/types/dist/data").ID;
13
- documentId: string;
14
- locale?: string;
15
- content?: string;
16
- createdAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
17
- descripcion?: string;
18
- facebookPostId?: string;
19
- fecha_publicacion?: import("@strapi/types/dist/schema/attribute").DateValue;
20
- linkedInPostId?: string;
21
- minute_read?: number;
22
- publishedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
23
- slug?: string;
24
- titulo?: string;
25
- updatedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
26
- }[]>;
27
11
  getCategorias(sanitizedQueryParams: any): Promise<{
28
12
  id: import("@strapi/types/dist/data").ID;
29
13
  documentId: string;
30
- categoria?: string;
31
- locale?: string;
32
- createdAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
33
14
  descripcion?: string;
34
- publishedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
35
- updatedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
36
- }[]>;
37
- getUsuarios(sanitizedQueryParams: any): Promise<{
38
- id: import("@strapi/types/dist/data").ID;
39
- documentId: string;
15
+ categoria?: string;
40
16
  locale?: string;
41
- password?: string;
42
- email?: string;
43
17
  createdAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
44
18
  publishedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
45
19
  updatedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
46
- apellidos?: string;
47
- bio?: string;
48
- blocked?: boolean;
49
- confirmationToken?: string;
50
- confirmed?: boolean;
51
- fecha_baja?: import("@strapi/types/dist/schema/attribute").DateValue;
52
- fecha_ingreso?: import("@strapi/types/dist/schema/attribute").DateValue;
53
- fecha_nacimiento?: import("@strapi/types/dist/schema/attribute").DateValue;
54
- nombre?: string;
55
- nombre_completo?: string;
56
- numero_empleado?: string;
57
- provider?: string;
58
- resetPasswordToken?: string;
59
- sfid?: string;
60
- username?: string;
61
20
  }[]>;
62
21
  downloadFile(ctx: any): Promise<void>;
63
22
  _uploadGeneratedFile(file: string | Buffer, filename: string, mimeType: string, folderName?: string): Promise<any>;
64
- generateArticle(ctx: any): Promise<{
65
- id: import("@strapi/types/dist/data").ID;
66
- documentId: string;
67
- locale?: string;
68
- content?: string;
69
- createdAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
70
- descripcion?: string;
71
- facebookPostId?: string;
72
- fecha_publicacion?: import("@strapi/types/dist/schema/attribute").DateValue;
73
- linkedInPostId?: string;
74
- minute_read?: number;
75
- publishedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
76
- slug?: string;
77
- titulo?: string;
78
- updatedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
79
- }>;
80
- generateImageForArticle(ctx: any): Promise<{
81
- message: string;
82
- image: any;
83
- }>;
84
23
  _callVeoVideoGeneration(promptText: string, aspectRatio: string, durationSeconds: number, sceneRefs: {
85
24
  buffer: Buffer;
86
25
  mimeType: string;
@@ -105,7 +44,6 @@ declare const _default: {
105
44
  models: import("../image-studio/models").ImageModelInfo[];
106
45
  verified: boolean;
107
46
  }>;
108
- generateForArticle(prompt: string, aspectRatio: string, imageSize: string): Promise<string>;
109
47
  generate(input: import("../image-studio/validate").GenerateInput): Promise<import("./image-studio").GeneratedImage>;
110
48
  edit(input: import("../image-studio/validate").EditInput): Promise<import("./image-studio").GeneratedImage>;
111
49
  expand(prompt: string): Promise<string>;
@@ -125,5 +63,34 @@ declare const _default: {
125
63
  renameFolder(from: unknown, to: unknown): Promise<string[]>;
126
64
  deleteFolder(path: unknown): Promise<string[]>;
127
65
  };
66
+ articles: ({ strapi }: {
67
+ strapi: import("@strapi/types/dist/core").Strapi;
68
+ }) => {
69
+ basePrompt: () => Promise<{
70
+ prompt: string;
71
+ personalizado: boolean;
72
+ }>;
73
+ saveBasePrompt(prompt: string): Promise<{
74
+ prompt: string;
75
+ personalizado: boolean;
76
+ }>;
77
+ resetBasePrompt(): Promise<{
78
+ prompt: string;
79
+ personalizado: boolean;
80
+ }>;
81
+ list(): Promise<{
82
+ articles: import("./articles").ArticleRow[];
83
+ }>;
84
+ detail: (documentId: string) => Promise<import("./articles").ArticleDetail>;
85
+ generate(input: import("../articles/generation").ArticleInput): Promise<{
86
+ documentId: string;
87
+ }>;
88
+ enrich(texto: string): Promise<string>;
89
+ setImage(documentId: string, fileId: unknown): Promise<import("./articles").ArticleDetail>;
90
+ publish(documentId: string): Promise<import("./articles").ArticleDetail>;
91
+ schedule(documentId: string, at: unknown): Promise<import("./articles").ArticleDetail>;
92
+ unschedule(documentId: string): Promise<import("./articles").ArticleDetail>;
93
+ publishDue(): Promise<number>;
94
+ };
128
95
  };
129
96
  export default _default;
@@ -16,79 +16,18 @@ declare const service: ({ strapi }: {
16
16
  }): Promise<GeminiClient>;
17
17
  /** Atajo para los usos que solo necesitan el cliente (artículos). */
18
18
  geminiConfig(): Promise<GoogleGenAI>;
19
- getArticulos(sanitizedQueryParams: any): Promise<{
20
- id: import("@strapi/types/dist/data").ID;
21
- documentId: string;
22
- locale?: string;
23
- content?: string;
24
- createdAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
25
- descripcion?: string;
26
- facebookPostId?: string;
27
- fecha_publicacion?: import("@strapi/types/dist/schema/attribute").DateValue;
28
- linkedInPostId?: string;
29
- minute_read?: number;
30
- publishedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
31
- slug?: string;
32
- titulo?: string;
33
- updatedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
34
- }[]>;
35
19
  getCategorias(sanitizedQueryParams: any): Promise<{
36
20
  id: import("@strapi/types/dist/data").ID;
37
21
  documentId: string;
38
- categoria?: string;
39
- locale?: string;
40
- createdAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
41
22
  descripcion?: string;
42
- publishedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
43
- updatedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
44
- }[]>;
45
- getUsuarios(sanitizedQueryParams: any): Promise<{
46
- id: import("@strapi/types/dist/data").ID;
47
- documentId: string;
23
+ categoria?: string;
48
24
  locale?: string;
49
- password?: string;
50
- email?: string;
51
25
  createdAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
52
26
  publishedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
53
27
  updatedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
54
- apellidos?: string;
55
- bio?: string;
56
- blocked?: boolean;
57
- confirmationToken?: string;
58
- confirmed?: boolean;
59
- fecha_baja?: import("@strapi/types/dist/schema/attribute").DateValue;
60
- fecha_ingreso?: import("@strapi/types/dist/schema/attribute").DateValue;
61
- fecha_nacimiento?: import("@strapi/types/dist/schema/attribute").DateValue;
62
- nombre?: string;
63
- nombre_completo?: string;
64
- numero_empleado?: string;
65
- provider?: string;
66
- resetPasswordToken?: string;
67
- sfid?: string;
68
- username?: string;
69
28
  }[]>;
70
29
  downloadFile(ctx: any): Promise<void>;
71
30
  _uploadGeneratedFile(file: Buffer | string, filename: string, mimeType: string, folderName?: string): Promise<any>;
72
- generateArticle(ctx: any): Promise<{
73
- id: import("@strapi/types/dist/data").ID;
74
- documentId: string;
75
- locale?: string;
76
- content?: string;
77
- createdAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
78
- descripcion?: string;
79
- facebookPostId?: string;
80
- fecha_publicacion?: import("@strapi/types/dist/schema/attribute").DateValue;
81
- linkedInPostId?: string;
82
- minute_read?: number;
83
- publishedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
84
- slug?: string;
85
- titulo?: string;
86
- updatedAt?: import("@strapi/types/dist/schema/attribute").DateTimeValue;
87
- }>;
88
- generateImageForArticle(ctx: any): Promise<{
89
- message: string;
90
- image: any;
91
- }>;
92
31
  _callVeoVideoGeneration(promptText: string, aspectRatio: string, durationSeconds: number, sceneRefs: {
93
32
  buffer: Buffer;
94
33
  mimeType: string;
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.6.1",
2
+ "version": "0.7.1",
3
3
  "keywords": [],
4
4
  "type": "commonjs",
5
5
  "publishConfig": {