@oktis-works/core 0.11.5 → 0.14.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.
@@ -36,9 +36,29 @@ export declare class ThemeService {
36
36
  deactivate(id: string): Promise<Theme | null>;
37
37
  /** Tema ativo atual (fonte única lida pelo app web na renderização). */
38
38
  getActive(): Promise<Theme | null>;
39
- /** Atualiza o config (customizador) do tema — validado como objeto simples. */
40
- updateConfig(id: string, config: unknown): Promise<Theme | null>;
39
+ /** Atualiza o config (customizador) do tema — validado contra manifest.settings. */
40
+ updateConfig(id: string, config: unknown, userId?: string, allowExtraKeys?: boolean): Promise<Theme | null>;
41
41
  uninstall(id: string): Promise<boolean>;
42
+ /** Export theme config as JSON. */
43
+ exportConfig(id: string): Promise<{
44
+ config: Record<string, unknown>;
45
+ manifest: Record<string, unknown>;
46
+ exportedAt: string;
47
+ } | null>;
48
+ /** Import theme config from JSON, validating against manifest. */
49
+ importConfig(id: string, config: Record<string, unknown>, options?: {
50
+ mode?: 'merge' | 'replace';
51
+ }): Promise<Theme | null>;
52
+ /** Get config version history for a theme. */
53
+ getConfigHistory(id: string, limit?: number, offset?: number): Promise<Array<{
54
+ id: string;
55
+ config: Record<string, unknown>;
56
+ userId: string | null;
57
+ changeSummary: string | null;
58
+ createdAt: Date;
59
+ }>>;
60
+ /** Restore a previous config version. */
61
+ restoreConfigVersion(themeId: string, versionId: string, userId: string | null): Promise<Theme | null>;
42
62
  }
43
63
  export declare const themeService: ThemeService;
44
64
  //# sourceMappingURL=service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/theme/service.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAUhD,qBAAa,YAAY;IACvB;;;;;;OAMG;IACG,iBAAiB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAwC3C,4DAA4D;YAC9C,YAAY;IAWpB,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAMxB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAM1C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAMpD;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,KAAK,CAAC;IAqClB;;;OAGG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAsBjD;;;;OAIG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAqBnD,wEAAwE;IAClE,SAAS,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAUxC,+EAA+E;IACzE,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAiBhE,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAS9C;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/theme/service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AA8WnE,qBAAa,YAAY;IACvB;;;;;;OAMG;IACG,iBAAiB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IA2C3C,4DAA4D;YAC9C,YAAY;IAWpB,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAMxB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAM1C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAMpD;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,KAAK,CAAC;IA+ClB;;;OAGG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IA6BjD;;;;OAIG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IA+BnD,wEAAwE;IAClE,SAAS,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAUxC,oFAAoF;IAC9E,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAkC3G,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAwB7C,mCAAmC;IAC7B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAW1I,kEAAkE;IAC5D,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgChI,8CAA8C;IACxC,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAajM,yCAAyC;IACnC,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;CAW7G;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
@@ -1,13 +1,340 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { readdir, readFile } from 'node:fs/promises';
3
- import { join } from 'node:path';
4
- import { getConnection } from '@oktis-works/database';
2
+ import { existsSync, realpathSync } from 'node:fs';
3
+ import { readdir, readFile, rm } from 'node:fs/promises';
4
+ import { join, resolve, sep } from 'node:path';
5
+ import { getConnection, runInTransaction } from '@oktis-works/database';
5
6
  import { checkExtensionCompatibility } from '@oktis-works/validation';
6
7
  import { resolveExtensionDirectory } from '../extensions/project-directories.js';
7
8
  const SAFE_NAME_RE = /^[a-z0-9][a-z0-9_-]*$/i;
8
9
  function isPlainObject(value) {
9
10
  return typeof value === 'object' && value !== null && !Array.isArray(value);
10
11
  }
12
+ /**
13
+ * Valida e sanitiza o config do tema contra o schema do manifesto.
14
+ * - Rejeita chaves não declaradas no manifest.settings
15
+ * - Valida required, type, min/max, minLength/maxLength, pattern, enum (select)
16
+ * - Sanitiza HTML em wysiwyg/textarea (strip tags perigosos)
17
+ * - Para repeater/flexible_content/group: valida recursivamente subFields
18
+ */
19
+ function validateThemeConfig(config, manifestSettings, allowExtraKeys = false) {
20
+ const errors = [];
21
+ const sanitized = {};
22
+ const allowedKeys = new Set();
23
+ // Build allowed keys set from manifest
24
+ const declaredSettings = Array.isArray(manifestSettings) ? manifestSettings : [];
25
+ for (const field of declaredSettings) {
26
+ if (!field || typeof field !== 'object')
27
+ continue;
28
+ const record = field;
29
+ const name = record['name'];
30
+ if (typeof name === 'string' && name) {
31
+ allowedKeys.add(name);
32
+ }
33
+ }
34
+ // Validate each key in config
35
+ for (const [key, value] of Object.entries(config)) {
36
+ if (!allowedKeys.has(key)) {
37
+ if (!allowExtraKeys) {
38
+ errors.push(`Setting "${key}" is not declared in theme manifest.settings`);
39
+ continue; // Skip undeclared keys
40
+ }
41
+ // In allowExtraKeys mode, accept the value as-is
42
+ sanitized[key] = value;
43
+ continue;
44
+ }
45
+ // Find field definition
46
+ const fieldDef = declaredSettings.find((f) => {
47
+ if (!f || typeof f !== 'object')
48
+ return false;
49
+ return f['name'] === key;
50
+ });
51
+ if (!fieldDef) {
52
+ // Should not happen since allowedKeys check passed
53
+ continue;
54
+ }
55
+ // Validate required
56
+ if (fieldDef.required && (value === undefined || value === null || value === '')) {
57
+ errors.push(`Setting "${key}" is required`);
58
+ continue;
59
+ }
60
+ // If value is empty and not required, skip further validation
61
+ if (value === undefined || value === null || value === '') {
62
+ sanitized[key] = fieldDef.default ?? '';
63
+ continue;
64
+ }
65
+ // Type-specific validation
66
+ const validation = validateFieldValue(key, value, fieldDef);
67
+ if (!validation.valid) {
68
+ errors.push(...validation.errors);
69
+ continue;
70
+ }
71
+ sanitized[key] = validation.sanitized;
72
+ }
73
+ return { valid: errors.length === 0, errors, sanitized };
74
+ }
75
+ /** Valida um valor individual contra a definição do campo. */
76
+ function validateFieldValue(key, value, field) {
77
+ const errors = [];
78
+ let sanitized = value;
79
+ const type = field.type ?? 'text';
80
+ switch (type) {
81
+ case 'text':
82
+ case 'textarea':
83
+ case 'wysiwyg': {
84
+ if (typeof value !== 'string') {
85
+ errors.push(`Setting "${key}" must be a string`);
86
+ break;
87
+ }
88
+ if (field.minLength !== undefined && value.length < field.minLength) {
89
+ errors.push(`Setting "${key}" must be at least ${field.minLength} characters`);
90
+ }
91
+ if (field.maxLength !== undefined && value.length > field.maxLength) {
92
+ errors.push(`Setting "${key}" must be at most ${field.maxLength} characters`);
93
+ }
94
+ if (field.pattern && typeof field.pattern === 'string') {
95
+ try {
96
+ const re = new RegExp(field.pattern);
97
+ if (!re.test(value)) {
98
+ errors.push(`Setting "${key}" does not match required pattern`);
99
+ }
100
+ }
101
+ catch {
102
+ errors.push(`Setting "${key}" has invalid pattern regex`);
103
+ }
104
+ }
105
+ // Sanitize HTML for wysiwyg/textarea
106
+ if ((type === 'wysiwyg' || type === 'textarea') && value.includes('<')) {
107
+ sanitized = sanitizeHtml(value);
108
+ }
109
+ break;
110
+ }
111
+ case 'select': {
112
+ if (typeof value !== 'string') {
113
+ errors.push(`Setting "${key}" must be a string`);
114
+ break;
115
+ }
116
+ const options = field.options ?? [];
117
+ const validValues = options.map((o) => (typeof o === 'string' ? o : o.value));
118
+ if (options.length > 0 && !validValues.includes(value)) {
119
+ errors.push(`Setting "${key}" must be one of: ${validValues.join(', ')}`);
120
+ }
121
+ break;
122
+ }
123
+ case 'checkbox': {
124
+ if (typeof value !== 'boolean') {
125
+ errors.push(`Setting "${key}" must be a boolean`);
126
+ }
127
+ else {
128
+ sanitized = value;
129
+ }
130
+ break;
131
+ }
132
+ case 'color': {
133
+ if (typeof value !== 'string' || !/^#[0-9a-fA-F]{6}$/.test(value)) {
134
+ errors.push(`Setting "${key}" must be a valid hex color (e.g., #ff0000)`);
135
+ }
136
+ break;
137
+ }
138
+ case 'number': {
139
+ const num = Number(value);
140
+ if (!Number.isFinite(num)) {
141
+ errors.push(`Setting "${key}" must be a number`);
142
+ break;
143
+ }
144
+ if (field.min !== undefined && num < field.min) {
145
+ errors.push(`Setting "${key}" must be at least ${field.min}`);
146
+ }
147
+ if (field.max !== undefined && num > field.max) {
148
+ errors.push(`Setting "${key}" must be at most ${field.max}`);
149
+ }
150
+ sanitized = num;
151
+ break;
152
+ }
153
+ case 'date_picker':
154
+ case 'date_time_picker':
155
+ case 'time_picker': {
156
+ if (typeof value !== 'string') {
157
+ errors.push(`Setting "${key}" must be a string`);
158
+ break;
159
+ }
160
+ // Basic format validation (YYYY-MM-DD, YYYY-MM-DDTHH:mm, HH:mm)
161
+ const patterns = {
162
+ date_picker: /^\d{4}-\d{2}-\d{2}$/,
163
+ date_time_picker: /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/,
164
+ time_picker: /^\d{2}:\d{2}$/,
165
+ };
166
+ if (!patterns[type].test(value)) {
167
+ errors.push(`Setting "${key}" has invalid format`);
168
+ }
169
+ else if (type === 'date_picker' || type === 'date_time_picker') {
170
+ const parsed = new Date(value);
171
+ if (Number.isNaN(parsed.getTime()))
172
+ errors.push(`Setting "${key}" has an invalid date`);
173
+ }
174
+ else {
175
+ const [hours = 0, minutes = 0] = value.split(':').map(Number);
176
+ if (hours > 23 || minutes > 59)
177
+ errors.push(`Setting "${key}" has an invalid time`);
178
+ }
179
+ break;
180
+ }
181
+ case 'google_map': {
182
+ if (!isPlainObject(value)) {
183
+ errors.push(`Setting "${key}" must be an object with address, lat, lng`);
184
+ break;
185
+ }
186
+ const map = value;
187
+ if (typeof map['address'] !== 'string' || typeof map['lat'] !== 'number' || typeof map['lng'] !== 'number') {
188
+ errors.push(`Setting "${key}" must have address (string), lat (number), lng (number)`);
189
+ }
190
+ const lat = map['lat'];
191
+ const lng = map['lng'];
192
+ if (lat !== undefined && (lat < -90 || lat > 90)) {
193
+ errors.push(`Setting "${key}" latitude must be between -90 and 90`);
194
+ }
195
+ if (lng !== undefined && (lng < -180 || lng > 180)) {
196
+ errors.push(`Setting "${key}" longitude must be between -180 and 180`);
197
+ }
198
+ break;
199
+ }
200
+ case 'link': {
201
+ if (!isPlainObject(value)) {
202
+ errors.push(`Setting "${key}" must be an object with url and target`);
203
+ break;
204
+ }
205
+ const link = value;
206
+ if (typeof link['url'] !== 'string' || !link['url']) {
207
+ errors.push(`Setting "${key}" must have a url`);
208
+ }
209
+ else if (!/^(?:https?:|mailto:|tel:|\/|#)/i.test(link['url'])) {
210
+ errors.push(`Setting "${key}" has an unsafe url protocol`);
211
+ }
212
+ if (link['target'] !== undefined && !['_self', '_blank'].includes(link['target'])) {
213
+ errors.push(`Setting "${key}" target must be _self or _blank`);
214
+ }
215
+ break;
216
+ }
217
+ case 'relationship':
218
+ case 'post_object': {
219
+ // Value can be string (single) or string[] (multiple)
220
+ if ((!Array.isArray(value) && typeof value !== 'string') || (Array.isArray(value) && value.some((item) => typeof item !== 'string'))) {
221
+ errors.push(`Setting "${key}" must be a string or array of strings`);
222
+ }
223
+ break;
224
+ }
225
+ case 'taxonomy':
226
+ case 'user': {
227
+ if ((!Array.isArray(value) && typeof value !== 'string') || (Array.isArray(value) && value.some((item) => typeof item !== 'string'))) {
228
+ errors.push(`Setting "${key}" must be a string or array of strings`);
229
+ }
230
+ break;
231
+ }
232
+ case 'repeater': {
233
+ if (!Array.isArray(value)) {
234
+ errors.push(`Setting "${key}" must be an array`);
235
+ break;
236
+ }
237
+ const subFields = field.subFields ?? [];
238
+ if (subFields.length > 0) {
239
+ const sanitizedRows = [];
240
+ for (let i = 0; i < value.length; i++) {
241
+ const row = value[i];
242
+ if (!isPlainObject(row)) {
243
+ errors.push(`Setting "${key}[${i}]" must be an object`);
244
+ continue;
245
+ }
246
+ const rowResult = validateThemeConfig(row, subFields);
247
+ if (!rowResult.valid) {
248
+ errors.push(...rowResult.errors.map((e) => `${key}[${i}]: ${e}`));
249
+ }
250
+ sanitizedRows.push(rowResult.sanitized);
251
+ }
252
+ sanitized = sanitizedRows;
253
+ }
254
+ else {
255
+ sanitized = value;
256
+ }
257
+ break;
258
+ }
259
+ case 'flexible_content': {
260
+ if (!Array.isArray(value)) {
261
+ errors.push(`Setting "${key}" must be an array`);
262
+ break;
263
+ }
264
+ const layouts = field.layouts ?? [];
265
+ const sanitizedRows = [];
266
+ for (let i = 0; i < value.length; i++) {
267
+ const row = value[i];
268
+ if (!isPlainObject(row)) {
269
+ errors.push(`Setting "${key}[${i}]" must be an object`);
270
+ continue;
271
+ }
272
+ const rowRecord = row;
273
+ const layoutName = rowRecord['fc_layout'];
274
+ const layoutDef = layouts.find((l) => l.name === layoutName);
275
+ if (!layoutDef) {
276
+ errors.push(`Setting "${key}[${i}]" has unknown layout "${layoutName}"`);
277
+ continue;
278
+ }
279
+ const subFields = layoutDef.subFields ?? [];
280
+ if (subFields.length > 0) {
281
+ const rowData = { ...row };
282
+ delete rowData['fc_layout'];
283
+ const rowResult = validateThemeConfig(rowData, subFields);
284
+ if (!rowResult.valid) {
285
+ errors.push(...rowResult.errors.map((e) => `${key}[${i}]: ${e}`));
286
+ }
287
+ sanitizedRows.push({ fc_layout: layoutName, ...rowResult.sanitized });
288
+ }
289
+ else {
290
+ sanitizedRows.push({ ...rowRecord });
291
+ }
292
+ }
293
+ sanitized = sanitizedRows;
294
+ break;
295
+ }
296
+ case 'group': {
297
+ if (!isPlainObject(value)) {
298
+ errors.push(`Setting "${key}" must be an object`);
299
+ break;
300
+ }
301
+ const subFields = field.subFields ?? [];
302
+ if (subFields.length > 0) {
303
+ const groupResult = validateThemeConfig(value, subFields);
304
+ if (!groupResult.valid) {
305
+ errors.push(...groupResult.errors.map((e) => `${key}: ${e}`));
306
+ }
307
+ sanitized = groupResult.sanitized;
308
+ }
309
+ break;
310
+ }
311
+ case 'image':
312
+ case 'file':
313
+ case 'gallery': {
314
+ const values = type === 'gallery' || Array.isArray(value) ? (Array.isArray(value) ? value : [value]) : [value];
315
+ if (values.some((item) => typeof item !== 'string' && typeof item !== 'number')) {
316
+ errors.push(`Setting "${key}" must contain media identifiers`);
317
+ }
318
+ else {
319
+ sanitized = type === 'gallery' || Array.isArray(value) ? values : values[0];
320
+ }
321
+ break;
322
+ }
323
+ default:
324
+ // Unknown type - accept as-is but warn
325
+ break;
326
+ }
327
+ return { valid: errors.length === 0, errors, sanitized };
328
+ }
329
+ /** Sanitização básica de HTML para prevenir XSS em campos wysiwyg/textarea. */
330
+ function sanitizeHtml(html) {
331
+ return html
332
+ .replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '') // Remove script tags
333
+ .replace(/<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe>/gi, '') // Remove iframe tags
334
+ .replace(/<(?:object|embed|applet)\b[^>]*>/gi, '')
335
+ .replace(/on\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi, '')
336
+ .replace(/(?:javascript|vbscript|data):/gi, '');
337
+ }
11
338
  export class ThemeService {
12
339
  /**
13
340
  * Descobre temas presentes no diretório configurado do projeto e faz upsert
@@ -35,7 +362,10 @@ export class ThemeService {
35
362
  continue;
36
363
  const name = typeof manifest['name'] === 'string' ? manifest['name'].trim() : '';
37
364
  const version = typeof manifest['version'] === 'string' ? manifest['version'].trim() : '';
38
- if (!name || !version)
365
+ if (!SAFE_NAME_RE.test(name) || !version)
366
+ continue;
367
+ const compatibilityIssues = checkExtensionCompatibility('theme', { ...manifest, name, version });
368
+ if (compatibilityIssues.length > 0)
39
369
  continue;
40
370
  const existing = await this.getByName(name);
41
371
  if (existing) {
@@ -97,6 +427,13 @@ export class ThemeService {
97
427
  if (issues.length > 0) {
98
428
  throw new Error(`Invalid theme manifest: ${issues.map((issue) => issue.message).join('; ')}`);
99
429
  }
430
+ const installConfig = input.config ?? {};
431
+ if (!isPlainObject(installConfig))
432
+ throw new Error('Theme config must be an object');
433
+ const configValidation = validateThemeConfig(installConfig, Array.isArray(input.manifest['settings']) ? input.manifest['settings'] : []);
434
+ if (!configValidation.valid) {
435
+ throw new Error(`Theme config validation failed: ${configValidation.errors.join('; ')}`);
436
+ }
100
437
  const duplicate = await this.getByName(name);
101
438
  if (duplicate) {
102
439
  throw new Error(`Theme "${name}" is already installed (id ${duplicate.id})`);
@@ -105,7 +442,7 @@ export class ThemeService {
105
442
  const id = randomUUID();
106
443
  const result = await sql.unsafe(`INSERT INTO themes (id, name, version, status, manifest, config, installed_at, created_at, updated_at)
107
444
  VALUES ($1, $2, $3, 'INSTALLED', $4::jsonb, $5::jsonb, NOW(), NOW(), NOW())
108
- RETURNING *`, [id, name, version, { ...input.manifest, name, version }, input.config ?? {}]);
445
+ RETURNING *`, [id, name, version, { ...input.manifest, name, version }, configValidation.sanitized]);
109
446
  return result[0];
110
447
  }
111
448
  /**
@@ -113,17 +450,24 @@ export class ThemeService {
113
450
  * tenant, garantida também pelo índice parcial idx_themes_single_active).
114
451
  */
115
452
  async activate(id) {
116
- const existing = await this.getById(id);
117
- if (!existing)
118
- return null;
119
- const sql = getConnection();
120
- await sql.unsafe(`UPDATE themes SET status = 'INACTIVE', updated_at = NOW()
121
- WHERE status = 'ACTIVE' AND id <> $1`, [id]);
122
- const result = await sql.unsafe(`UPDATE themes
123
- SET status = 'ACTIVE', activated_at = NOW(), updated_at = NOW()
124
- WHERE id = $1
125
- RETURNING *`, [id]);
126
- return result[0] ?? null;
453
+ return runInTransaction(async () => {
454
+ const sql = getConnection();
455
+ const selected = await sql.unsafe('SELECT * FROM themes WHERE id = $1 FOR UPDATE', [id]);
456
+ const existing = selected[0] ?? null;
457
+ if (!existing)
458
+ return null;
459
+ const themeDir = join(resolveExtensionDirectory('theme'), existing.name);
460
+ if (!existsSync(join(themeDir, 'theme.json'))) {
461
+ throw new Error(`Theme files are missing for "${existing.name}"`);
462
+ }
463
+ await sql.unsafe(`UPDATE themes SET status = 'INACTIVE', updated_at = NOW()
464
+ WHERE status = 'ACTIVE' AND id <> $1 AND tenant_id IS NOT DISTINCT FROM $2`, [id, existing.tenant_id ?? null]);
465
+ const result = await sql.unsafe(`UPDATE themes
466
+ SET status = 'ACTIVE', activated_at = NOW(), updated_at = NOW()
467
+ WHERE id = $1
468
+ RETURNING *`, [id]);
469
+ return result[0] ?? null;
470
+ });
127
471
  }
128
472
  /**
129
473
  * Deactivates a theme. Invariant: the site must always keep an active
@@ -131,49 +475,140 @@ export class ThemeService {
131
475
  * with multiple themes the admin re-activates one of the others.
132
476
  */
133
477
  async deactivate(id) {
134
- const existing = await this.getById(id);
135
- if (!existing)
136
- return null;
137
- const sql = getConnection();
138
- const countResult = await sql.unsafe('SELECT COUNT(*)::int AS count FROM themes');
139
- const total = Number(countResult[0]?.count ?? 0);
140
- if (total <= 1) {
141
- throw new Error('Cannot deactivate the only available theme — at least one active theme is required');
142
- }
143
- const result = await sql.unsafe(`UPDATE themes
144
- SET status = 'INACTIVE', updated_at = NOW()
145
- WHERE id = $1
146
- RETURNING *`, [id]);
147
- return result[0] ?? null;
478
+ return runInTransaction(async () => {
479
+ const sql = getConnection();
480
+ const selected = await sql.unsafe('SELECT * FROM themes WHERE id = $1 FOR UPDATE', [id]);
481
+ const existing = selected[0] ?? null;
482
+ if (!existing)
483
+ return null;
484
+ if (existing.status === 'ACTIVE') {
485
+ const countResult = await sql.unsafe(`SELECT COUNT(*)::int AS count FROM themes
486
+ WHERE status = 'ACTIVE' AND tenant_id IS NOT DISTINCT FROM $1`, [existing.tenant_id ?? null]);
487
+ const activeCount = Number(countResult[0]?.count ?? 0);
488
+ if (activeCount <= 1) {
489
+ throw new Error('Cannot deactivate the only active theme in this scope');
490
+ }
491
+ }
492
+ const result = await sql.unsafe(`UPDATE themes
493
+ SET status = 'INACTIVE', updated_at = NOW()
494
+ WHERE id = $1
495
+ RETURNING *`, [id]);
496
+ return result[0] ?? null;
497
+ });
148
498
  }
149
499
  /** Tema ativo atual (fonte única lida pelo app web na renderização). */
150
500
  async getActive() {
151
501
  const sql = getConnection();
152
502
  const result = await sql.unsafe(`SELECT * FROM themes WHERE status = 'ACTIVE'
153
- ORDER BY activated_at DESC NULLS LAST, created_at DESC
503
+ ORDER BY (tenant_id IS NULL), activated_at DESC NULLS LAST, created_at DESC
154
504
  LIMIT 1`);
155
505
  return result[0] ?? null;
156
506
  }
157
- /** Atualiza o config (customizador) do tema — validado como objeto simples. */
158
- async updateConfig(id, config) {
507
+ /** Atualiza o config (customizador) do tema — validado contra manifest.settings. */
508
+ async updateConfig(id, config, userId, allowExtraKeys) {
159
509
  if (!isPlainObject(config)) {
160
510
  throw new Error('Theme config must be an object');
161
511
  }
162
- const existing = await this.getById(id);
163
- if (!existing)
164
- return null;
165
- const sql = getConnection();
166
- const result = await sql.unsafe(`UPDATE themes SET config = $1::jsonb, updated_at = NOW() WHERE id = $2 RETURNING *`, [config, id]);
167
- return result[0] ?? null;
512
+ return runInTransaction(async () => {
513
+ const sql = getConnection();
514
+ const selected = await sql.unsafe('SELECT * FROM themes WHERE id = $1 FOR UPDATE', [id]);
515
+ const existing = selected[0] ?? null;
516
+ if (!existing)
517
+ return null;
518
+ const manifest = existing.manifest;
519
+ const manifestSettings = manifest?.settings ?? [];
520
+ const validation = validateThemeConfig(config, manifestSettings, allowExtraKeys);
521
+ if (!validation.valid) {
522
+ throw new Error(`Theme config validation failed: ${validation.errors.join('; ')}`);
523
+ }
524
+ await sql.unsafe(`INSERT INTO theme_config_versions (theme_id, config, user_id, change_summary)
525
+ VALUES ($1, $2::jsonb, $3, $4)`, [id, existing.config ?? {}, userId ?? null, 'Config updated via API']);
526
+ const result = await sql.unsafe(`UPDATE themes SET config = $1::jsonb, updated_at = NOW() WHERE id = $2 RETURNING *`, [allowExtraKeys ? config : validation.sanitized, id]);
527
+ return result[0] ?? null;
528
+ });
168
529
  }
169
530
  async uninstall(id) {
170
531
  const existing = await this.getById(id);
171
532
  if (!existing)
172
533
  return false;
534
+ if (existing.status === 'ACTIVE') {
535
+ throw new Error('Cannot uninstall the active theme; activate another theme first');
536
+ }
173
537
  const sql = getConnection();
174
538
  await sql.unsafe('DELETE FROM themes WHERE id = $1', [id]);
539
+ const themesRoot = resolveExtensionDirectory('theme');
540
+ const root = resolve(themesRoot);
541
+ const themeDir = resolve(root, existing.name);
542
+ if (themeDir.startsWith(root + sep) && existsSync(themeDir)) {
543
+ const realRoot = realpathSync(root);
544
+ const realThemeDir = realpathSync(themeDir);
545
+ if (realThemeDir.startsWith(realRoot + sep)) {
546
+ await rm(realThemeDir, { recursive: true, force: true });
547
+ }
548
+ }
175
549
  return true;
176
550
  }
551
+ /** Export theme config as JSON. */
552
+ async exportConfig(id) {
553
+ const theme = await this.getById(id);
554
+ if (!theme)
555
+ return null;
556
+ return {
557
+ config: theme.config ?? {},
558
+ manifest: theme.manifest,
559
+ exportedAt: new Date().toISOString(),
560
+ };
561
+ }
562
+ /** Import theme config from JSON, validating against manifest. */
563
+ async importConfig(id, config, options) {
564
+ const existing = await this.getById(id);
565
+ if (!existing)
566
+ return null;
567
+ const mode = options?.mode ?? 'merge';
568
+ const manifest = existing.manifest;
569
+ const manifestSettings = manifest?.settings ?? [];
570
+ // In replace mode, we allow any keys (full config replacement)
571
+ // In merge mode, we validate against manifest
572
+ let validation;
573
+ if (mode === 'replace') {
574
+ // In replace mode, we accept any config but still sanitize known fields
575
+ validation = validateThemeConfig(config, manifestSettings, true);
576
+ }
577
+ else {
578
+ validation = validateThemeConfig(config, manifestSettings);
579
+ }
580
+ if (!validation.valid) {
581
+ throw new Error(`Theme config validation failed: ${validation.errors.join('; ')}`);
582
+ }
583
+ let newConfig;
584
+ if (mode === 'replace') {
585
+ // In replace mode, use the full config (not just sanitized)
586
+ newConfig = config;
587
+ }
588
+ else {
589
+ newConfig = { ...(existing.config ?? {}), ...validation.sanitized };
590
+ }
591
+ return this.updateConfig(id, newConfig, undefined, mode === 'replace');
592
+ }
593
+ /** Get config version history for a theme. */
594
+ async getConfigHistory(id, limit = 50, offset = 0) {
595
+ const sql = getConnection();
596
+ const rows = await sql.unsafe(`SELECT id, config, user_id, change_summary, created_at
597
+ FROM theme_config_versions
598
+ WHERE theme_id = $1
599
+ ORDER BY created_at DESC
600
+ LIMIT $2 OFFSET $3`, [id, limit, offset]);
601
+ return rows;
602
+ }
603
+ /** Restore a previous config version. */
604
+ async restoreConfigVersion(themeId, versionId, userId) {
605
+ const sql = getConnection();
606
+ const version = await sql.unsafe(`SELECT config FROM theme_config_versions WHERE id = $1 AND theme_id = $2`, [versionId, themeId]);
607
+ if (!version[0])
608
+ return null;
609
+ const config = version[0]['config'];
610
+ return this.updateConfig(themeId, config, userId ?? undefined);
611
+ }
177
612
  }
178
613
  export const themeService = new ThemeService();
179
614
  //# sourceMappingURL=service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/theme/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/theme/service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oktis-works/core",
3
- "version": "0.11.5",
3
+ "version": "0.14.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -21,10 +21,10 @@
21
21
  "clean": "rm -rf dist tsconfig.tsbuildinfo"
22
22
  },
23
23
  "dependencies": {
24
- "@oktis-works/types": "^0.9.0",
24
+ "@oktis-works/types": "^0.9.1",
25
25
  "@oktis-works/validation": "^0.7.0",
26
26
  "@oktis-works/config": "^0.6.4",
27
- "@oktis-works/database": "^0.14.0",
27
+ "@oktis-works/database": "^0.14.1",
28
28
  "@oktis-works/plugin-runtime": "^0.7.0",
29
29
  "@aws-sdk/client-s3": "3.700.0",
30
30
  "bullmq": "5.0.0",