@interware/content-generator 0.7.2 → 0.8.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 (46) hide show
  1. package/dist/_chunks/{App-CTh6owSM.mjs → App-2eX-mcfo.mjs} +2 -2
  2. package/dist/_chunks/{App-ugsCmlsC.js → App-CvZirjX_.js} +2 -2
  3. package/dist/_chunks/{ImageStudioTabs-Umf3GODW.mjs → ImageStudioTabs-B6fkCK-o.mjs} +353 -21
  4. package/dist/_chunks/{ImageStudioTabs-BFEF9ggK.js → ImageStudioTabs-CNktoRax.js} +351 -19
  5. package/dist/_chunks/{Settings-Sk78JUBS.js → Settings-B-QPodCh.js} +169 -1
  6. package/dist/_chunks/{Settings-CdGW2O8h.mjs → Settings-CaGruvIm.mjs} +170 -2
  7. package/dist/_chunks/{StudioApp-DoC0z4eh.js → StudioApp-BDoB31L0.js} +2 -2
  8. package/dist/_chunks/{StudioApp-CrGn-9Gg.mjs → StudioApp-CF03znuL.mjs} +2 -2
  9. package/dist/_chunks/{index-D6UAvh53.mjs → index-DlemRDzs.mjs} +3 -3
  10. package/dist/_chunks/{index-C2s9Jhcc.js → index-DwHGS-BJ.js} +3 -3
  11. package/dist/admin/index.js +1 -1
  12. package/dist/admin/index.mjs +1 -1
  13. package/dist/admin/src/components/settings/DriveSettings.d.ts +77 -0
  14. package/dist/admin/src/features/drive/DriveTab.d.ts +42 -0
  15. package/dist/admin/src/features/image-studio/ImageStudioTabs.d.ts +3 -0
  16. package/dist/admin/src/features/library/FileCard.d.ts +5 -2
  17. package/dist/admin/src/features/library/LibraryTab.d.ts +5 -0
  18. package/dist/admin/src/features/library/driveSync.d.ts +41 -0
  19. package/dist/admin/src/features/templates/export/templateOrigin.d.ts +10 -0
  20. package/dist/admin/src/lib/use-cases/drive/index.d.ts +3 -0
  21. package/dist/server/index.js +1411 -49
  22. package/dist/server/index.mjs +1409 -47
  23. package/dist/server/src/bootstrap.d.ts +2 -0
  24. package/dist/server/src/content-types/drive-link/index.d.ts +62 -0
  25. package/dist/server/src/content-types/drive-link/schema.d.ts +68 -0
  26. package/dist/server/src/content-types/drive-op/index.d.ts +46 -0
  27. package/dist/server/src/content-types/drive-op/schema.d.ts +49 -0
  28. package/dist/server/src/content-types/index.d.ts +106 -0
  29. package/dist/server/src/controllers/drive.d.ts +30 -0
  30. package/dist/server/src/controllers/index.d.ts +130 -0
  31. package/dist/server/src/drive/client.d.ts +32 -0
  32. package/dist/server/src/drive/clientConfig.d.ts +27 -0
  33. package/dist/server/src/drive/common.d.ts +6 -0
  34. package/dist/server/src/drive/fakes.d.ts +104 -0
  35. package/dist/server/src/drive/files.d.ts +136 -0
  36. package/dist/server/src/drive/lifecycles.d.ts +7 -0
  37. package/dist/server/src/drive/links.d.ts +23 -0
  38. package/dist/server/src/drive/model.d.ts +99 -0
  39. package/dist/server/src/drive/oauth.d.ts +47 -0
  40. package/dist/server/src/drive/pull.d.ts +23 -0
  41. package/dist/server/src/drive/strapiPorts.d.ts +10 -0
  42. package/dist/server/src/drive/sync.d.ts +40 -0
  43. package/dist/server/src/index.d.ts +294 -0
  44. package/dist/server/src/services/drive.d.ts +141 -0
  45. package/dist/server/src/services/index.d.ts +55 -0
  46. package/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
+ /// <reference types="node" />
3
4
  declare const _default: {
4
5
  register: ({ strapi }: {
5
6
  strapi: import("@strapi/types/dist/core").Strapi;
@@ -159,6 +160,136 @@ declare const _default: {
159
160
  body: unknown;
160
161
  }) => Promise<void>;
161
162
  };
163
+ drive: ({ strapi }: {
164
+ strapi: import("@strapi/types/dist/core").Strapi;
165
+ }) => {
166
+ status: (ctx: {
167
+ request: {
168
+ body?: Record<string, unknown>;
169
+ };
170
+ query: Record<string, unknown>;
171
+ params?: Record<string, string>;
172
+ status: number;
173
+ body: unknown;
174
+ }) => Promise<void>;
175
+ saveClient: (ctx: {
176
+ request: {
177
+ body?: Record<string, unknown>;
178
+ };
179
+ query: Record<string, unknown>;
180
+ params?: Record<string, string>;
181
+ status: number;
182
+ body: unknown;
183
+ }) => Promise<void>;
184
+ removeClient: (ctx: {
185
+ request: {
186
+ body?: Record<string, unknown>;
187
+ };
188
+ query: Record<string, unknown>;
189
+ params?: Record<string, string>;
190
+ status: number;
191
+ body: unknown;
192
+ }) => Promise<void>;
193
+ authorizationUrl: (ctx: {
194
+ request: {
195
+ body?: Record<string, unknown>;
196
+ };
197
+ query: Record<string, unknown>;
198
+ params?: Record<string, string>;
199
+ status: number;
200
+ body: unknown;
201
+ }) => Promise<void>;
202
+ exchange: (ctx: {
203
+ request: {
204
+ body?: Record<string, unknown>;
205
+ };
206
+ query: Record<string, unknown>;
207
+ params?: Record<string, string>;
208
+ status: number;
209
+ body: unknown;
210
+ }) => Promise<void>;
211
+ disconnect: (ctx: {
212
+ request: {
213
+ body?: Record<string, unknown>;
214
+ };
215
+ query: Record<string, unknown>;
216
+ params?: Record<string, string>;
217
+ status: number;
218
+ body: unknown;
219
+ }) => Promise<void>;
220
+ links: (ctx: {
221
+ request: {
222
+ body?: Record<string, unknown>;
223
+ };
224
+ query: Record<string, unknown>;
225
+ params?: Record<string, string>;
226
+ status: number;
227
+ body: unknown;
228
+ }) => Promise<void>;
229
+ mark: (ctx: {
230
+ request: {
231
+ body?: Record<string, unknown>;
232
+ };
233
+ query: Record<string, unknown>;
234
+ params?: Record<string, string>;
235
+ status: number;
236
+ body: unknown;
237
+ }) => Promise<void>;
238
+ unmark: (ctx: {
239
+ request: {
240
+ body?: Record<string, unknown>;
241
+ };
242
+ query: Record<string, unknown>;
243
+ params?: Record<string, string>;
244
+ status: number;
245
+ body: unknown;
246
+ }) => Promise<void>;
247
+ syncNow: (ctx: {
248
+ request: {
249
+ body?: Record<string, unknown>;
250
+ };
251
+ query: Record<string, unknown>;
252
+ params?: Record<string, string>;
253
+ status: number;
254
+ body: unknown;
255
+ }) => Promise<void>;
256
+ browse: (ctx: {
257
+ request: {
258
+ body?: Record<string, unknown>;
259
+ };
260
+ query: Record<string, unknown>;
261
+ params?: Record<string, string>;
262
+ status: number;
263
+ body: unknown;
264
+ }) => Promise<void>;
265
+ count: (ctx: {
266
+ request: {
267
+ body?: Record<string, unknown>;
268
+ };
269
+ query: Record<string, unknown>;
270
+ params?: Record<string, string>;
271
+ status: number;
272
+ body: unknown;
273
+ }) => Promise<void>;
274
+ trash: (ctx: {
275
+ request: {
276
+ body?: Record<string, unknown>;
277
+ };
278
+ query: Record<string, unknown>;
279
+ params?: Record<string, string>;
280
+ status: number;
281
+ body: unknown;
282
+ }) => Promise<void>;
283
+ origin: (ctx: {
284
+ request: {
285
+ body?: Record<string, unknown>;
286
+ };
287
+ query: Record<string, unknown>;
288
+ params?: Record<string, string>;
289
+ status: number;
290
+ body: unknown;
291
+ }) => Promise<void>;
292
+ };
162
293
  articles: ({ strapi }: {
163
294
  strapi: import("@strapi/types/dist/core").Strapi;
164
295
  }) => {
@@ -337,6 +468,60 @@ declare const _default: {
337
468
  renameFolder(from: unknown, to: unknown): Promise<string[]>;
338
469
  deleteFolder(path: unknown): Promise<string[]>;
339
470
  };
471
+ drive: ({ strapi }: {
472
+ strapi: import("@strapi/types/dist/core").Strapi;
473
+ }) => {
474
+ http: () => {
475
+ request: <T = unknown>(path: string, init?: RequestInit) => Promise<T>;
476
+ download: (path: string) => Promise<Uint8Array>;
477
+ about: () => Promise<import("./drive/client").DriveAbout>;
478
+ reset: () => any;
479
+ };
480
+ connected: () => Promise<boolean>;
481
+ runCycle: ({ full }?: {
482
+ full?: boolean;
483
+ }) => Promise<import("./drive/sync").SyncSummary>;
484
+ mark(cmsType: import("./drive/model").CmsType, cmsId: number): Promise<void>;
485
+ unmark(cmsType: import("./drive/model").CmsType, cmsId: number): Promise<void>;
486
+ syncNow(full?: boolean): Promise<import("./drive/sync").SyncSummary>;
487
+ track(cmsType: import("./drive/model").CmsType, cmsId: number): Promise<void>;
488
+ linkStatuses(): Promise<import("./services/drive").LinkStatuses>;
489
+ browse(folderId: unknown, pageToken?: unknown): Promise<{
490
+ path: {
491
+ id: string;
492
+ name: string;
493
+ }[];
494
+ items: {
495
+ synced: boolean;
496
+ id: string;
497
+ name: string;
498
+ mimeType: string;
499
+ size: number;
500
+ modifiedTime: string;
501
+ webViewLink: string;
502
+ parents: string[];
503
+ }[];
504
+ nextPageToken: string;
505
+ }>;
506
+ countItem(id: unknown): Promise<{
507
+ synced: boolean;
508
+ files: number;
509
+ folders: number;
510
+ truncated: boolean;
511
+ }>;
512
+ trashItem(id: unknown): Promise<void>;
513
+ setOrigin(fileId: unknown, documentId: unknown, name: unknown): Promise<void>;
514
+ saveClient(json: unknown, redirectUri: unknown): Promise<void>;
515
+ removeClient(): Promise<void>;
516
+ authorizationUrl(redirectUri: unknown): Promise<string>;
517
+ exchange({ code, state, redirectUri }: {
518
+ code?: unknown;
519
+ state?: unknown;
520
+ redirectUri?: unknown;
521
+ }): Promise<void>;
522
+ disconnect: () => Promise<void>;
523
+ status(): Promise<import("./services/drive").DriveStatus>;
524
+ };
340
525
  articles: ({ strapi }: {
341
526
  strapi: import("@strapi/types/dist/core").Strapi;
342
527
  }) => {
@@ -432,6 +617,115 @@ declare const _default: {
432
617
  };
433
618
  };
434
619
  };
620
+ /**
621
+ * Plugin server methods
622
+ */
623
+ 'drive-link': {
624
+ schema: {
625
+ kind: string;
626
+ collectionName: string;
627
+ info: {
628
+ singularName: string;
629
+ pluralName: string;
630
+ displayName: string;
631
+ description: string;
632
+ };
633
+ options: {
634
+ draftAndPublish: boolean;
635
+ };
636
+ pluginOptions: {
637
+ 'content-manager': {
638
+ visible: boolean;
639
+ };
640
+ 'content-type-builder': {
641
+ visible: boolean;
642
+ };
643
+ };
644
+ attributes: {
645
+ cmsType: {
646
+ type: string;
647
+ enum: string[];
648
+ required: boolean;
649
+ };
650
+ cmsId: {
651
+ type: string;
652
+ required: boolean;
653
+ };
654
+ driveId: {
655
+ type: string;
656
+ };
657
+ root: {
658
+ type: string;
659
+ default: boolean;
660
+ };
661
+ name: {
662
+ type: string;
663
+ };
664
+ parentCmsId: {
665
+ type: string;
666
+ };
667
+ version: {
668
+ type: string;
669
+ };
670
+ driveRev: {
671
+ type: string;
672
+ };
673
+ status: {
674
+ type: string;
675
+ enum: string[];
676
+ default: string;
677
+ };
678
+ error: {
679
+ type: string;
680
+ };
681
+ };
682
+ };
683
+ };
684
+ 'drive-op': {
685
+ schema: {
686
+ kind: string;
687
+ collectionName: string;
688
+ info: {
689
+ singularName: string;
690
+ pluralName: string;
691
+ displayName: string;
692
+ description: string;
693
+ };
694
+ options: {
695
+ draftAndPublish: boolean;
696
+ };
697
+ pluginOptions: {
698
+ 'content-manager': {
699
+ visible: boolean;
700
+ };
701
+ 'content-type-builder': {
702
+ visible: boolean;
703
+ };
704
+ };
705
+ attributes: {
706
+ cmsType: {
707
+ type: string;
708
+ enum: string[];
709
+ required: boolean;
710
+ };
711
+ cmsId: {
712
+ type: string;
713
+ required: boolean;
714
+ };
715
+ attempts: {
716
+ type: string;
717
+ default: number;
718
+ };
719
+ runAfter: {
720
+ type: string;
721
+ default: string;
722
+ };
723
+ error: {
724
+ type: string;
725
+ };
726
+ };
727
+ };
728
+ };
435
729
  };
436
730
  policies: {};
437
731
  middlewares: {};
@@ -0,0 +1,141 @@
1
+ import type { Core } from '@strapi/strapi';
2
+ import type { DriveAbout } from '../drive/client';
3
+ import type { PublicDriveClient } from '../drive/clientConfig';
4
+ import type { Cms, CmsType, CmsWriter, LinkRepo, LinkStatus, OpQueue } from '../drive/model';
5
+ import type { Fetch, Store } from '../drive/oauth';
6
+ import type { SyncSummary } from '../drive/sync';
7
+ /** Refresh token y correo de la cuenta conectada. Nunca sale del servidor. */
8
+ export declare const DRIVE_TOKEN_KEY = "DRIVE_TOKEN";
9
+ /** Origen de los archivos exportados de un template: `{ [fileId]: { documentId, name } }` (S7.3). */
10
+ export declare const DRIVE_ORIGINS_KEY = "DRIVE_ORIGINS";
11
+ /** Entrada inválida (400) o conflicto (409) del panel. El mensaje es para mostrarse tal cual. */
12
+ export declare class DriveInputError extends Error {
13
+ readonly status: 400 | 409;
14
+ constructor(message: string, status?: 400 | 409);
15
+ }
16
+ export interface LinkStatuses {
17
+ connected: boolean;
18
+ /** `inside`: el elemento se sincroniza (marcado o dentro de algo marcado); falso en ancestros que solo dan ruta. */
19
+ items: Record<string, {
20
+ status: LinkStatus;
21
+ root: boolean;
22
+ inside: boolean;
23
+ error: string | null;
24
+ }>;
25
+ lastRun: {
26
+ at: number;
27
+ processed: number;
28
+ errors: number;
29
+ } | null;
30
+ pending: number;
31
+ }
32
+ /** Puertos de la sincronización (S7.3); el `default` los arma con Strapi. */
33
+ export interface SyncPorts {
34
+ cms: Cms;
35
+ links: LinkRepo;
36
+ ops: OpQueue;
37
+ /** Escrituras a la Biblioteca para lo que llega de Drive (S7.4). */
38
+ writer?: CmsWriter;
39
+ /** URL pública del CMS, para el link al template en la descripción de Drive. */
40
+ serverUrl: string;
41
+ }
42
+ export interface DriveConnection {
43
+ connected: boolean;
44
+ email: string | null;
45
+ usage: number | null;
46
+ limit: number | null;
47
+ error: string | null;
48
+ }
49
+ export interface DriveSyncState {
50
+ lastRun: {
51
+ at: number;
52
+ processed: number;
53
+ errors: number;
54
+ } | null;
55
+ pending: number;
56
+ /** Elementos con error u omitidos, con su motivo (máximo 20). */
57
+ errors: {
58
+ key: string;
59
+ name: string;
60
+ error: string;
61
+ }[];
62
+ }
63
+ export interface DriveStatus {
64
+ client: PublicDriveClient;
65
+ connection: DriveConnection;
66
+ sync: DriveSyncState | null;
67
+ }
68
+ /**
69
+ * Conexión con Google Drive (S7.1, ADR-008): cliente OAuth, autorización, canje, desconexión y estado. S7.2
70
+ * a S7.4 usan `http()` para hablar con Drive.
71
+ */
72
+ export declare const createDriveService: ({ store, fetch: fetchFn, log, sync, }: {
73
+ store: Store;
74
+ fetch: Fetch;
75
+ log: Pick<Core.Strapi['log'], 'warn'> & Partial<Pick<Core.Strapi['log'], 'info'>>;
76
+ sync?: SyncPorts;
77
+ }) => {
78
+ http: () => {
79
+ request: <T = unknown>(path: string, init?: RequestInit) => Promise<T>;
80
+ download: (path: string) => Promise<Uint8Array>;
81
+ about: () => Promise<DriveAbout>;
82
+ reset: () => any;
83
+ };
84
+ connected: () => Promise<boolean>;
85
+ runCycle: ({ full }?: {
86
+ full?: boolean;
87
+ }) => Promise<SyncSummary | null>;
88
+ /** Marca para sincronizar y programa el ciclo. */
89
+ mark(cmsType: CmsType, cmsId: number): Promise<void>;
90
+ unmark(cmsType: CmsType, cmsId: number): Promise<void>;
91
+ /** «Sincronizar ahora»; con `full`, «Revisión completa»: compara todo lo vinculado contra Drive. */
92
+ syncNow(full?: boolean): Promise<SyncSummary>;
93
+ /** Lifecycle de upload: encola si el elemento está (o estaba) en lo sincronizado. */
94
+ track(cmsType: CmsType, cmsId: number): Promise<void>;
95
+ linkStatuses(): Promise<LinkStatuses>;
96
+ /** Vista de Drive (S7.2): una carpeta en vivo con su ruta y qué hijos están sincronizados. */
97
+ browse(folderId: unknown, pageToken?: unknown): Promise<{
98
+ path: {
99
+ id: string;
100
+ name: string;
101
+ }[];
102
+ items: {
103
+ synced: boolean;
104
+ id: string;
105
+ name: string;
106
+ mimeType: string;
107
+ size: number;
108
+ modifiedTime: string;
109
+ webViewLink: string;
110
+ parents: string[];
111
+ }[];
112
+ nextPageToken: string;
113
+ }>;
114
+ /** Cuántos elementos se irían a la papelera con esta carpeta, y si está sincronizada. */
115
+ countItem(id: unknown): Promise<{
116
+ synced: boolean;
117
+ files: number;
118
+ folders: number;
119
+ truncated: boolean;
120
+ }>;
121
+ /** Eliminar desde la vista: a la papelera de Drive. Si estaba sincronizado, el siguiente ciclo lo borra del CMS. */
122
+ trashItem(id: unknown): Promise<void>;
123
+ /** El panel avisa que un archivo salió de un template (S7.3). */
124
+ setOrigin(fileId: unknown, documentId: unknown, name: unknown): Promise<void>;
125
+ /** Guarda el cliente del JSON de Google. Un cliente nuevo invalida la conexión anterior. */
126
+ saveClient(json: unknown, redirectUri: unknown): Promise<void>;
127
+ removeClient(): Promise<void>;
128
+ authorizationUrl(redirectUri: unknown): Promise<string>;
129
+ exchange({ code, state, redirectUri }: {
130
+ code?: unknown;
131
+ state?: unknown;
132
+ redirectUri?: unknown;
133
+ }): Promise<void>;
134
+ disconnect: () => Promise<void>;
135
+ status(): Promise<DriveStatus>;
136
+ };
137
+ export type DriveService = ReturnType<typeof createDriveService>;
138
+ declare const _default: ({ strapi }: {
139
+ strapi: Core.Strapi;
140
+ }) => DriveService;
141
+ export default _default;
@@ -1,5 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
+ /// <reference types="node" />
3
4
  declare const _default: {
4
5
  service: ({ strapi }: {
5
6
  strapi: import("@strapi/types/dist/core").Strapi;
@@ -63,6 +64,60 @@ declare const _default: {
63
64
  renameFolder(from: unknown, to: unknown): Promise<string[]>;
64
65
  deleteFolder(path: unknown): Promise<string[]>;
65
66
  };
67
+ drive: ({ strapi }: {
68
+ strapi: import("@strapi/types/dist/core").Strapi;
69
+ }) => {
70
+ http: () => {
71
+ request: <T = unknown>(path: string, init?: RequestInit) => Promise<T>;
72
+ download: (path: string) => Promise<Uint8Array>;
73
+ about: () => Promise<import("../drive/client").DriveAbout>;
74
+ reset: () => any;
75
+ };
76
+ connected: () => Promise<boolean>;
77
+ runCycle: ({ full }?: {
78
+ full?: boolean;
79
+ }) => Promise<import("../drive/sync").SyncSummary>;
80
+ mark(cmsType: import("../drive/model").CmsType, cmsId: number): Promise<void>;
81
+ unmark(cmsType: import("../drive/model").CmsType, cmsId: number): Promise<void>;
82
+ syncNow(full?: boolean): Promise<import("../drive/sync").SyncSummary>;
83
+ track(cmsType: import("../drive/model").CmsType, cmsId: number): Promise<void>;
84
+ linkStatuses(): Promise<import("./drive").LinkStatuses>;
85
+ browse(folderId: unknown, pageToken?: unknown): Promise<{
86
+ path: {
87
+ id: string;
88
+ name: string;
89
+ }[];
90
+ items: {
91
+ synced: boolean;
92
+ id: string;
93
+ name: string;
94
+ mimeType: string;
95
+ size: number;
96
+ modifiedTime: string;
97
+ webViewLink: string;
98
+ parents: string[];
99
+ }[];
100
+ nextPageToken: string;
101
+ }>;
102
+ countItem(id: unknown): Promise<{
103
+ synced: boolean;
104
+ files: number;
105
+ folders: number;
106
+ truncated: boolean;
107
+ }>;
108
+ trashItem(id: unknown): Promise<void>;
109
+ setOrigin(fileId: unknown, documentId: unknown, name: unknown): Promise<void>;
110
+ saveClient(json: unknown, redirectUri: unknown): Promise<void>;
111
+ removeClient(): Promise<void>;
112
+ authorizationUrl(redirectUri: unknown): Promise<string>;
113
+ exchange({ code, state, redirectUri }: {
114
+ code?: unknown;
115
+ state?: unknown;
116
+ redirectUri?: unknown;
117
+ }): Promise<void>;
118
+ disconnect: () => Promise<void>;
119
+ status(): Promise<import("./drive").DriveStatus>;
120
+ };
66
121
  articles: ({ strapi }: {
67
122
  strapi: import("@strapi/types/dist/core").Strapi;
68
123
  }) => {
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.7.2",
2
+ "version": "0.8.1",
3
3
  "keywords": [],
4
4
  "type": "commonjs",
5
5
  "publishConfig": {