@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,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;
@@ -38,11 +38,6 @@ export declare const createImageStudio: (getClient: () => Promise<StudioClient>,
38
38
  models: import("../image-studio/models").ImageModelInfo[];
39
39
  verified: boolean;
40
40
  }>;
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
41
  generate(input: GenerateInput): Promise<GeneratedImage>;
47
42
  edit(input: EditInput): Promise<GeneratedImage>;
48
43
  expand(prompt: string): Promise<string>;
@@ -54,11 +49,6 @@ declare const _default: ({ strapi }: {
54
49
  models: import("../image-studio/models").ImageModelInfo[];
55
50
  verified: boolean;
56
51
  }>;
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
52
  generate(input: GenerateInput): Promise<GeneratedImage>;
63
53
  edit(input: EditInput): Promise<GeneratedImage>;
64
54
  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.0",
3
3
  "keywords": [],
4
4
  "type": "commonjs",
5
5
  "publishConfig": {