@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.
- package/dist/theme/service.d.ts +22 -2
- package/dist/theme/service.d.ts.map +1 -1
- package/dist/theme/service.js +474 -39
- package/dist/theme/service.js.map +1 -1
- package/package.json +3 -3
package/dist/theme/service.d.ts
CHANGED
|
@@ -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
|
|
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":"
|
|
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"}
|
package/dist/theme/service.js
CHANGED
|
@@ -1,13 +1,340 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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 },
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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
|
|
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
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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",
|