@edgebasejs/core 0.1.8 → 0.1.9
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/README.md +15 -0
- package/dist/core/src/access-rules/column-security.d.ts +80 -0
- package/dist/core/src/access-rules/column-security.d.ts.map +1 -0
- package/dist/core/src/access-rules/column-security.js +191 -0
- package/dist/core/src/access-rules/column-security.js.map +1 -0
- package/dist/core/src/access-rules/engine.d.ts.map +1 -1
- package/dist/core/src/access-rules/engine.js +2 -1
- package/dist/core/src/access-rules/engine.js.map +1 -1
- package/dist/core/src/audit/audit-manager.d.ts +108 -0
- package/dist/core/src/audit/audit-manager.d.ts.map +1 -0
- package/dist/core/src/audit/audit-manager.js +265 -0
- package/dist/core/src/audit/audit-manager.js.map +1 -0
- package/dist/core/src/encryption/encryption-manager.d.ts +97 -0
- package/dist/core/src/encryption/encryption-manager.d.ts.map +1 -0
- package/dist/core/src/encryption/encryption-manager.js +224 -0
- package/dist/core/src/encryption/encryption-manager.js.map +1 -0
- package/dist/core/src/index.d.ts +12 -0
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/index.js +12 -0
- package/dist/core/src/index.js.map +1 -1
- package/dist/core/src/realtime/change-notifier.d.ts +50 -0
- package/dist/core/src/realtime/change-notifier.d.ts.map +1 -0
- package/dist/core/src/realtime/change-notifier.js +145 -0
- package/dist/core/src/realtime/change-notifier.js.map +1 -0
- package/dist/core/src/realtime/message-types.d.ts +39 -0
- package/dist/core/src/realtime/message-types.d.ts.map +1 -0
- package/dist/core/src/realtime/message-types.js +5 -0
- package/dist/core/src/realtime/message-types.js.map +1 -0
- package/dist/core/src/realtime/subscription-manager.d.ts +67 -0
- package/dist/core/src/realtime/subscription-manager.d.ts.map +1 -0
- package/dist/core/src/realtime/subscription-manager.js +229 -0
- package/dist/core/src/realtime/subscription-manager.js.map +1 -0
- package/dist/core/src/search/search-manager.d.ts +93 -0
- package/dist/core/src/search/search-manager.d.ts.map +1 -0
- package/dist/core/src/search/search-manager.js +258 -0
- package/dist/core/src/search/search-manager.js.map +1 -0
- package/dist/core/src/storage/file-manager.d.ts +138 -0
- package/dist/core/src/storage/file-manager.d.ts.map +1 -0
- package/dist/core/src/storage/file-manager.js +224 -0
- package/dist/core/src/storage/file-manager.js.map +1 -0
- package/dist/core/src/sync/batch-processor.d.ts +97 -0
- package/dist/core/src/sync/batch-processor.d.ts.map +1 -0
- package/dist/core/src/sync/batch-processor.js +313 -0
- package/dist/core/src/sync/batch-processor.js.map +1 -0
- package/dist/core/src/sync/csv-processor.d.ts +66 -0
- package/dist/core/src/sync/csv-processor.d.ts.map +1 -0
- package/dist/core/src/sync/csv-processor.js +223 -0
- package/dist/core/src/sync/csv-processor.js.map +1 -0
- package/dist/core/src/sync/sync-engine.d.ts +22 -0
- package/dist/core/src/sync/sync-engine.d.ts.map +1 -1
- package/dist/core/src/sync/sync-engine.js +123 -10
- package/dist/core/src/sync/sync-engine.js.map +1 -1
- package/dist/core/src/sync/transaction-manager.d.ts +83 -0
- package/dist/core/src/sync/transaction-manager.d.ts.map +1 -0
- package/dist/core/src/sync/transaction-manager.js +227 -0
- package/dist/core/src/sync/transaction-manager.js.map +1 -0
- package/dist/core/src/webhooks/webhook-manager.d.ts +137 -0
- package/dist/core/src/webhooks/webhook-manager.d.ts.map +1 -0
- package/dist/core/src/webhooks/webhook-manager.js +334 -0
- package/dist/core/src/webhooks/webhook-manager.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSV import/export processor
|
|
3
|
+
* Handles CSV data transformation for bulk import/export operations
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* CSV processor for import/export operations
|
|
7
|
+
*/
|
|
8
|
+
export class CSVProcessor {
|
|
9
|
+
/**
|
|
10
|
+
* Parse CSV string to objects
|
|
11
|
+
*/
|
|
12
|
+
static parseCSV(content, hasHeader = true) {
|
|
13
|
+
const lines = content.split('\n').filter((line) => line.trim());
|
|
14
|
+
if (lines.length === 0) {
|
|
15
|
+
return {
|
|
16
|
+
entity: '',
|
|
17
|
+
totalRows: 0,
|
|
18
|
+
validRows: 0,
|
|
19
|
+
invalidRows: 0,
|
|
20
|
+
errors: [],
|
|
21
|
+
data: [],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
let headers = [];
|
|
25
|
+
let startIndex = 0;
|
|
26
|
+
// Parse header if present
|
|
27
|
+
if (hasHeader && lines.length > 0) {
|
|
28
|
+
headers = this.parseCSVLine(lines[0]);
|
|
29
|
+
startIndex = 1;
|
|
30
|
+
}
|
|
31
|
+
if (headers.length === 0) {
|
|
32
|
+
throw new Error('No headers found in CSV');
|
|
33
|
+
}
|
|
34
|
+
const data = [];
|
|
35
|
+
const errors = [];
|
|
36
|
+
// Parse data rows
|
|
37
|
+
for (let i = startIndex; i < lines.length; i++) {
|
|
38
|
+
try {
|
|
39
|
+
const values = this.parseCSVLine(lines[i]);
|
|
40
|
+
if (values.length === 0) {
|
|
41
|
+
continue; // Skip empty rows
|
|
42
|
+
}
|
|
43
|
+
// Create object from headers and values
|
|
44
|
+
const record = {};
|
|
45
|
+
for (let j = 0; j < headers.length; j++) {
|
|
46
|
+
const value = values[j] || '';
|
|
47
|
+
record[headers[j]] = this.convertValue(value);
|
|
48
|
+
}
|
|
49
|
+
data.push(record);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
const errorMsg = error instanceof Error ? error.message : 'Parse error';
|
|
53
|
+
errors.push({
|
|
54
|
+
row: i + 1,
|
|
55
|
+
error: errorMsg,
|
|
56
|
+
data: lines[i],
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
entity: '',
|
|
62
|
+
totalRows: lines.length - (hasHeader ? 1 : 0),
|
|
63
|
+
validRows: data.length,
|
|
64
|
+
invalidRows: errors.length,
|
|
65
|
+
errors,
|
|
66
|
+
data,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Convert CSV string to objects for import
|
|
71
|
+
*/
|
|
72
|
+
static async importFromCSV(options) {
|
|
73
|
+
try {
|
|
74
|
+
const parsed = this.parseCSV(options.data, options.hasHeader !== false);
|
|
75
|
+
return {
|
|
76
|
+
entity: options.entity,
|
|
77
|
+
totalRows: parsed.totalRows,
|
|
78
|
+
validRows: parsed.validRows,
|
|
79
|
+
invalidRows: parsed.invalidRows,
|
|
80
|
+
errors: options.skipErrors ? [] : parsed.errors,
|
|
81
|
+
data: parsed.data,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
throw new Error(`CSV import failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Convert objects to CSV string for export
|
|
90
|
+
*/
|
|
91
|
+
static exportToCSV(options) {
|
|
92
|
+
if (options.data.length === 0) {
|
|
93
|
+
return {
|
|
94
|
+
entity: options.entity,
|
|
95
|
+
columns: [],
|
|
96
|
+
rows: [],
|
|
97
|
+
csv: '',
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// Determine columns
|
|
101
|
+
let columns = options.columns || [];
|
|
102
|
+
if (columns.length === 0) {
|
|
103
|
+
// Extract all unique columns from data
|
|
104
|
+
const columnSet = new Set();
|
|
105
|
+
for (const record of options.data) {
|
|
106
|
+
Object.keys(record).forEach((key) => {
|
|
107
|
+
if (!key.startsWith('_')) {
|
|
108
|
+
columnSet.add(key);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
columns = Array.from(columnSet).sort();
|
|
113
|
+
}
|
|
114
|
+
// Build CSV rows
|
|
115
|
+
const rows = [];
|
|
116
|
+
// Add header row
|
|
117
|
+
rows.push(columns);
|
|
118
|
+
// Add data rows
|
|
119
|
+
for (const record of options.data) {
|
|
120
|
+
const row = [];
|
|
121
|
+
for (const column of columns) {
|
|
122
|
+
const value = record[column];
|
|
123
|
+
row.push(this.formatCSVValue(value));
|
|
124
|
+
}
|
|
125
|
+
rows.push(row);
|
|
126
|
+
}
|
|
127
|
+
// Convert to CSV string
|
|
128
|
+
const csv = rows.map((row) => row.map((val) => `"${val}"`).join(',')).join('\n');
|
|
129
|
+
return {
|
|
130
|
+
entity: options.entity,
|
|
131
|
+
columns,
|
|
132
|
+
rows,
|
|
133
|
+
csv,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Parse a single CSV line, handling quoted fields
|
|
138
|
+
*/
|
|
139
|
+
static parseCSVLine(line) {
|
|
140
|
+
const result = [];
|
|
141
|
+
let current = '';
|
|
142
|
+
let inQuotes = false;
|
|
143
|
+
for (let i = 0; i < line.length; i++) {
|
|
144
|
+
const char = line[i];
|
|
145
|
+
const nextChar = line[i + 1];
|
|
146
|
+
if (char === '"') {
|
|
147
|
+
if (inQuotes && nextChar === '"') {
|
|
148
|
+
// Escaped quote
|
|
149
|
+
current += '"';
|
|
150
|
+
i++; // Skip next quote
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
// Toggle quote mode
|
|
154
|
+
inQuotes = !inQuotes;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else if (char === ',' && !inQuotes) {
|
|
158
|
+
// Field separator
|
|
159
|
+
result.push(current.trim());
|
|
160
|
+
current = '';
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
current += char;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Add last field
|
|
167
|
+
result.push(current.trim());
|
|
168
|
+
return result;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Convert CSV string value to appropriate type
|
|
172
|
+
*/
|
|
173
|
+
static convertValue(value) {
|
|
174
|
+
if (!value || value === 'null' || value === 'undefined') {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
// Try to parse as boolean
|
|
178
|
+
if (value.toLowerCase() === 'true') {
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
if (value.toLowerCase() === 'false') {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
// Try to parse as number
|
|
185
|
+
const num = parseFloat(value);
|
|
186
|
+
if (!isNaN(num) && value !== '') {
|
|
187
|
+
return num;
|
|
188
|
+
}
|
|
189
|
+
// Try to parse as JSON (for objects/arrays)
|
|
190
|
+
if ((value.startsWith('{') && value.endsWith('}')) || (value.startsWith('[') && value.endsWith(']'))) {
|
|
191
|
+
try {
|
|
192
|
+
return JSON.parse(value);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// Fall through to string
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Return as string
|
|
199
|
+
return value;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Format a value for CSV output
|
|
203
|
+
*/
|
|
204
|
+
static formatCSVValue(value) {
|
|
205
|
+
if (value === null || value === undefined) {
|
|
206
|
+
return '';
|
|
207
|
+
}
|
|
208
|
+
if (typeof value === 'string') {
|
|
209
|
+
return value;
|
|
210
|
+
}
|
|
211
|
+
if (typeof value === 'boolean') {
|
|
212
|
+
return value ? 'true' : 'false';
|
|
213
|
+
}
|
|
214
|
+
if (typeof value === 'number') {
|
|
215
|
+
return value.toString();
|
|
216
|
+
}
|
|
217
|
+
if (typeof value === 'object') {
|
|
218
|
+
return JSON.stringify(value);
|
|
219
|
+
}
|
|
220
|
+
return String(value);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=csv-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv-processor.js","sourceRoot":"","sources":["../../../../src/sync/csv-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { SyncRequest, SyncResponse, User } from '@edgebasejs/types';
|
|
2
|
+
import { ColumnSecurityManager } from '../access-rules/column-security';
|
|
3
|
+
import { EncryptionManager } from '../encryption/encryption-manager';
|
|
2
4
|
export interface SyncDatabase {
|
|
3
5
|
getOne(sql: string, params: any[]): Promise<any>;
|
|
4
6
|
getAll(sql: string, params: any[]): Promise<any[]>;
|
|
@@ -15,6 +17,8 @@ export interface ServerSyncOptions {
|
|
|
15
17
|
schemas: Map<string, EntitySchema>;
|
|
16
18
|
db: SyncDatabase;
|
|
17
19
|
user: User;
|
|
20
|
+
columnSecurity?: ColumnSecurityManager;
|
|
21
|
+
encryption?: EncryptionManager;
|
|
18
22
|
}
|
|
19
23
|
/**
|
|
20
24
|
* Server-side sync engine
|
|
@@ -24,6 +28,8 @@ export declare class ServerSyncEngine {
|
|
|
24
28
|
private db;
|
|
25
29
|
private user;
|
|
26
30
|
private serverTimestamp;
|
|
31
|
+
private columnSecurity?;
|
|
32
|
+
private encryption?;
|
|
27
33
|
constructor(options: ServerSyncOptions);
|
|
28
34
|
/**
|
|
29
35
|
* Process sync request from client
|
|
@@ -41,6 +47,22 @@ export declare class ServerSyncEngine {
|
|
|
41
47
|
* Get server changes since last sync
|
|
42
48
|
*/
|
|
43
49
|
private getServerChanges;
|
|
50
|
+
/**
|
|
51
|
+
* Filter record columns based on column-level security
|
|
52
|
+
*/
|
|
53
|
+
private filterColumns;
|
|
54
|
+
/**
|
|
55
|
+
* Filter writable columns for client changes
|
|
56
|
+
*/
|
|
57
|
+
private filterWritableData;
|
|
58
|
+
/**
|
|
59
|
+
* Encrypt sensitive fields before storing
|
|
60
|
+
*/
|
|
61
|
+
private encryptData;
|
|
62
|
+
/**
|
|
63
|
+
* Decrypt sensitive fields after retrieving
|
|
64
|
+
*/
|
|
65
|
+
private decryptData;
|
|
44
66
|
}
|
|
45
67
|
export default ServerSyncEngine;
|
|
46
68
|
//# sourceMappingURL=sync-engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-engine.d.ts","sourceRoot":"","sources":["../../../../src/sync/sync-engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-engine.d.ts","sourceRoot":"","sources":["../../../../src/sync/sync-engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACnD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;CAC3E;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,GAAG,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACnC,EAAE,EAAE,YAAY,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,cAAc,CAAC,CAAwB;IAC/C,OAAO,CAAC,UAAU,CAAC,CAAoB;gBAE3B,OAAO,EAAE,iBAAiB;IAStC;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA0BvD;;OAEG;YACW,oBAAoB;IA0JlC;;OAEG;YACW,WAAW;IAsDzB;;OAEG;YACW,gBAAgB;IA6F9B;;OAEG;YACW,aAAa;IAQ3B;;OAEG;YACW,kBAAkB;IAYhC;;OAEG;YACW,WAAW;IAQzB;;OAEG;YACW,WAAW;CAO1B;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -9,6 +9,8 @@ export class ServerSyncEngine {
|
|
|
9
9
|
this.db = options.db;
|
|
10
10
|
this.user = options.user;
|
|
11
11
|
this.serverTimestamp = Date.now();
|
|
12
|
+
this.columnSecurity = options.columnSecurity;
|
|
13
|
+
this.encryption = options.encryption;
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* Process sync request from client
|
|
@@ -20,12 +22,18 @@ export class ServerSyncEngine {
|
|
|
20
22
|
conflicts: [],
|
|
21
23
|
errors: [],
|
|
22
24
|
};
|
|
25
|
+
const appliedChangeKeys = new Set();
|
|
23
26
|
// Process client changes
|
|
24
27
|
if (request.changes && request.changes.length > 0) {
|
|
25
28
|
await this.processClientChanges(request.changes, response);
|
|
29
|
+
for (const change of response.changes) {
|
|
30
|
+
if (change.entity && change.id) {
|
|
31
|
+
appliedChangeKeys.add(`${change.entity}:${change.id}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
26
34
|
}
|
|
27
35
|
// Get server changes since last sync
|
|
28
|
-
await this.getServerChanges(request.lastSyncTimestamp, response);
|
|
36
|
+
await this.getServerChanges(request.lastSyncTimestamp, response, appliedChangeKeys);
|
|
29
37
|
return response;
|
|
30
38
|
}
|
|
31
39
|
/**
|
|
@@ -34,6 +42,37 @@ export class ServerSyncEngine {
|
|
|
34
42
|
async processClientChanges(changes, response) {
|
|
35
43
|
for (const change of changes) {
|
|
36
44
|
try {
|
|
45
|
+
if (!change.entity) {
|
|
46
|
+
response.errors.push({
|
|
47
|
+
entity: change.entity,
|
|
48
|
+
id: change.id,
|
|
49
|
+
operation: change.operation,
|
|
50
|
+
error: 'Missing entity',
|
|
51
|
+
code: 'VALIDATION_ERROR',
|
|
52
|
+
});
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (!change.id) {
|
|
56
|
+
response.errors.push({
|
|
57
|
+
entity: change.entity,
|
|
58
|
+
id: change.id,
|
|
59
|
+
operation: change.operation,
|
|
60
|
+
error: 'Missing record id',
|
|
61
|
+
code: 'VALIDATION_ERROR',
|
|
62
|
+
});
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if ((change.operation === 'create' || change.operation === 'update') &&
|
|
66
|
+
(!change.data || typeof change.data !== 'object')) {
|
|
67
|
+
response.errors.push({
|
|
68
|
+
entity: change.entity,
|
|
69
|
+
id: change.id,
|
|
70
|
+
operation: change.operation,
|
|
71
|
+
error: 'Missing data',
|
|
72
|
+
code: 'VALIDATION_ERROR',
|
|
73
|
+
});
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
37
76
|
// Get schema for entity
|
|
38
77
|
const schema = this.schemas.get(change.entity);
|
|
39
78
|
if (!schema) {
|
|
@@ -50,7 +89,7 @@ export class ServerSyncEngine {
|
|
|
50
89
|
const accessContext = {
|
|
51
90
|
user: this.user,
|
|
52
91
|
operation: change.operation,
|
|
53
|
-
data: change.data,
|
|
92
|
+
data: change.data ?? {},
|
|
54
93
|
};
|
|
55
94
|
// Get existing data for update/delete operations
|
|
56
95
|
if (change.operation === 'update' || change.operation === 'delete') {
|
|
@@ -73,6 +112,16 @@ export class ServerSyncEngine {
|
|
|
73
112
|
});
|
|
74
113
|
continue;
|
|
75
114
|
}
|
|
115
|
+
// Filter writable columns for create/update operations
|
|
116
|
+
if (change.data && (change.operation === 'create' || change.operation === 'update')) {
|
|
117
|
+
const { filtered, rejected } = await this.filterWritableData(change.entity, change.data, accessContext.existingData);
|
|
118
|
+
if (rejected.length > 0) {
|
|
119
|
+
// Log rejected columns (optional: could add to response warnings)
|
|
120
|
+
console.warn(`Rejected columns for ${change.entity}:${change.id}:`, rejected);
|
|
121
|
+
}
|
|
122
|
+
// Use filtered data
|
|
123
|
+
change.data = filtered;
|
|
124
|
+
}
|
|
76
125
|
// Get current version
|
|
77
126
|
const metadata = await this.db.getOne('SELECT version FROM sync_metadata WHERE entity = ? AND record_id = ?', [change.entity, change.id]);
|
|
78
127
|
const currentVersion = metadata?.version || 0;
|
|
@@ -93,9 +142,12 @@ export class ServerSyncEngine {
|
|
|
93
142
|
}
|
|
94
143
|
// Apply change to database
|
|
95
144
|
await this.applyChange(change, currentVersion + 1);
|
|
145
|
+
// Filter columns before sending back to client
|
|
146
|
+
const filteredData = change.data ? await this.filterColumns(change.entity, change.data) : {};
|
|
96
147
|
// Add to response changes
|
|
97
148
|
response.changes.push({
|
|
98
149
|
...change,
|
|
150
|
+
data: filteredData,
|
|
99
151
|
serverTimestamp: this.serverTimestamp,
|
|
100
152
|
version: currentVersion + 1,
|
|
101
153
|
});
|
|
@@ -151,19 +203,31 @@ export class ServerSyncEngine {
|
|
|
151
203
|
/**
|
|
152
204
|
* Get server changes since last sync
|
|
153
205
|
*/
|
|
154
|
-
async getServerChanges(lastSyncTimestamp, response) {
|
|
206
|
+
async getServerChanges(lastSyncTimestamp, response, appliedChangeKeys) {
|
|
155
207
|
if (!lastSyncTimestamp) {
|
|
156
208
|
// First sync - get all data
|
|
157
209
|
for (const entity of this.schemas.keys()) {
|
|
158
210
|
try {
|
|
159
211
|
const records = await this.db.getAll(`SELECT m.version, r.* FROM ${entity} r
|
|
160
|
-
|
|
212
|
+
LEFT JOIN sync_metadata m ON m.entity = ? AND m.record_id = r.id`, [entity]);
|
|
161
213
|
for (const record of records) {
|
|
214
|
+
if (appliedChangeKeys.has(`${entity}:${record.id}`)) {
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
const entitySchema = this.schemas.get(entity);
|
|
218
|
+
if (entitySchema?.accessRules?.read) {
|
|
219
|
+
const accessDecision = await AccessRulesEngine.evaluate({ user: this.user, operation: 'read', data: record }, entitySchema.accessRules);
|
|
220
|
+
if (!accessDecision.allowed) {
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Filter columns based on column-level security
|
|
225
|
+
const filteredData = await this.filterColumns(entity, record);
|
|
162
226
|
response.changes.push({
|
|
163
227
|
entity,
|
|
164
228
|
operation: 'create',
|
|
165
229
|
id: record.id,
|
|
166
|
-
data:
|
|
230
|
+
data: filteredData,
|
|
167
231
|
serverTimestamp: this.serverTimestamp,
|
|
168
232
|
version: record.version || 1,
|
|
169
233
|
});
|
|
@@ -178,16 +242,29 @@ export class ServerSyncEngine {
|
|
|
178
242
|
// Get changes since last sync
|
|
179
243
|
for (const entity of this.schemas.keys()) {
|
|
180
244
|
try {
|
|
181
|
-
const records = await this.db.getAll(`SELECT m.version, m.deleted_at, r.* FROM sync_metadata m
|
|
182
|
-
|
|
183
|
-
|
|
245
|
+
const records = await this.db.getAll(`SELECT m.version, m.deleted_at, m.record_id, r.* FROM sync_metadata m
|
|
246
|
+
LEFT JOIN ${entity} r ON r.id = m.record_id
|
|
247
|
+
WHERE m.entity = ? AND m.updated_at > ?`, [entity, lastSyncTimestamp]);
|
|
184
248
|
for (const record of records) {
|
|
249
|
+
const recordId = record.record_id || record.id;
|
|
250
|
+
if (appliedChangeKeys.has(`${entity}:${recordId}`)) {
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
185
253
|
const operation = record.deleted_at ? 'delete' : 'update';
|
|
254
|
+
const entitySchema = this.schemas.get(entity);
|
|
255
|
+
if (!record.deleted_at && entitySchema?.accessRules?.read) {
|
|
256
|
+
const accessDecision = await AccessRulesEngine.evaluate({ user: this.user, operation: 'read', data: record }, entitySchema.accessRules);
|
|
257
|
+
if (!accessDecision.allowed) {
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// Filter columns based on column-level security
|
|
262
|
+
const filteredData = record.deleted_at ? {} : await this.filterColumns(entity, record);
|
|
186
263
|
response.changes.push({
|
|
187
264
|
entity,
|
|
188
265
|
operation: operation,
|
|
189
|
-
id: record.id,
|
|
190
|
-
data:
|
|
266
|
+
id: record.record_id || record.id,
|
|
267
|
+
data: filteredData,
|
|
191
268
|
serverTimestamp: this.serverTimestamp,
|
|
192
269
|
version: record.version || 1,
|
|
193
270
|
});
|
|
@@ -199,6 +276,42 @@ export class ServerSyncEngine {
|
|
|
199
276
|
}
|
|
200
277
|
}
|
|
201
278
|
}
|
|
279
|
+
/**
|
|
280
|
+
* Filter record columns based on column-level security
|
|
281
|
+
*/
|
|
282
|
+
async filterColumns(entity, data) {
|
|
283
|
+
if (!this.columnSecurity) {
|
|
284
|
+
return data; // No column security = return all data
|
|
285
|
+
}
|
|
286
|
+
return await this.columnSecurity.filterReadableColumns(entity, data, this.user);
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Filter writable columns for client changes
|
|
290
|
+
*/
|
|
291
|
+
async filterWritableData(entity, data, existingRecord) {
|
|
292
|
+
if (!this.columnSecurity) {
|
|
293
|
+
return { filtered: data, rejected: [] }; // No column security = allow all
|
|
294
|
+
}
|
|
295
|
+
return await this.columnSecurity.filterWritableColumns(entity, data, this.user, existingRecord);
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Encrypt sensitive fields before storing
|
|
299
|
+
*/
|
|
300
|
+
async encryptData(entity, data) {
|
|
301
|
+
if (!this.encryption) {
|
|
302
|
+
return data; // No encryption = return as is
|
|
303
|
+
}
|
|
304
|
+
return await this.encryption.encryptRecord(entity, data);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Decrypt sensitive fields after retrieving
|
|
308
|
+
*/
|
|
309
|
+
async decryptData(entity, data) {
|
|
310
|
+
if (!this.encryption) {
|
|
311
|
+
return data; // No encryption = return as is
|
|
312
|
+
}
|
|
313
|
+
return await this.encryption.decryptRecord(entity, data);
|
|
314
|
+
}
|
|
202
315
|
}
|
|
203
316
|
export default ServerSyncEngine;
|
|
204
317
|
//# sourceMappingURL=sync-engine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-engine.js","sourceRoot":"","sources":["../../../../src/sync/sync-engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync-engine.js","sourceRoot":"","sources":["../../../../src/sync/sync-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { SyncDatabase } from './sync-engine';
|
|
2
|
+
import type { User } from '@edgebasejs/types';
|
|
3
|
+
export type IsolationLevel = 'READ_UNCOMMITTED' | 'READ_COMMITTED' | 'SERIALIZABLE';
|
|
4
|
+
export type TransactionStatus = 'active' | 'committed' | 'rolled_back' | 'expired';
|
|
5
|
+
export interface Transaction {
|
|
6
|
+
id: string;
|
|
7
|
+
userId: string;
|
|
8
|
+
status: TransactionStatus;
|
|
9
|
+
isolationLevel: IsolationLevel;
|
|
10
|
+
createdAt: number;
|
|
11
|
+
expiresAt: number;
|
|
12
|
+
completedAt?: number;
|
|
13
|
+
changes: TransactionChange[];
|
|
14
|
+
}
|
|
15
|
+
export interface TransactionChange {
|
|
16
|
+
id: string;
|
|
17
|
+
entity: string;
|
|
18
|
+
recordId: string;
|
|
19
|
+
operation: 'create' | 'update' | 'delete';
|
|
20
|
+
data: Record<string, any>;
|
|
21
|
+
version?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Manages database transactions with ACID guarantees
|
|
25
|
+
* Handles begin, commit, and rollback operations
|
|
26
|
+
*/
|
|
27
|
+
export declare class TransactionManager {
|
|
28
|
+
private db;
|
|
29
|
+
private activeTransactions;
|
|
30
|
+
private readonly transactionTimeout;
|
|
31
|
+
private readonly maxRetries;
|
|
32
|
+
constructor(db: SyncDatabase);
|
|
33
|
+
/**
|
|
34
|
+
* Begin a new transaction
|
|
35
|
+
*/
|
|
36
|
+
begin(user: User, isolationLevel?: IsolationLevel): Promise<string>;
|
|
37
|
+
/**
|
|
38
|
+
* Add a change to a transaction
|
|
39
|
+
*/
|
|
40
|
+
addChange(transactionId: string, entity: string, recordId: string, operation: 'create' | 'update' | 'delete', data: Record<string, any>, version?: number): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Get a transaction by ID
|
|
43
|
+
*/
|
|
44
|
+
getTransaction(transactionId: string): Transaction | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Commit a transaction
|
|
47
|
+
* Applies all changes atomically
|
|
48
|
+
*/
|
|
49
|
+
commit(transactionId: string): Promise<{
|
|
50
|
+
appliedCount: number;
|
|
51
|
+
errors: string[];
|
|
52
|
+
}>;
|
|
53
|
+
/**
|
|
54
|
+
* Rollback a transaction
|
|
55
|
+
* Reverts all changes
|
|
56
|
+
*/
|
|
57
|
+
rollback(transactionId: string): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Detect conflicts for a record
|
|
60
|
+
*/
|
|
61
|
+
private detectConflict;
|
|
62
|
+
/**
|
|
63
|
+
* Apply a single change to the database
|
|
64
|
+
*/
|
|
65
|
+
private applyChange;
|
|
66
|
+
/**
|
|
67
|
+
* Get all active transactions for a user
|
|
68
|
+
*/
|
|
69
|
+
getActiveTransactions(userId: string): Transaction[];
|
|
70
|
+
/**
|
|
71
|
+
* Cleanup expired transactions
|
|
72
|
+
*/
|
|
73
|
+
cleanup(): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Get transaction statistics
|
|
76
|
+
*/
|
|
77
|
+
getStats(): {
|
|
78
|
+
activeTransactions: number;
|
|
79
|
+
committedTransactions: number;
|
|
80
|
+
rolledBackTransactions: number;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=transaction-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-manager.d.ts","sourceRoot":"","sources":["../../../../src/sync/transaction-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,cAAc,CAAC;AACpF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AAEnF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;IAC1B,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAKjB,OAAO,CAAC,EAAE;IAJtB,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAK;gBAEZ,EAAE,EAAE,YAAY;IAEpC;;OAEG;IACG,KAAK,CACT,IAAI,EAAE,IAAI,EACV,cAAc,GAAE,cAAiC,GAChD,OAAO,CAAC,MAAM,CAAC;IA4BlB;;OAEG;IACG,SAAS,CACb,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACzC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAsChB;;OAEG;IACH,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI9D;;;OAGG;IACG,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAkExF;;;OAGG;IACG,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpD;;OAEG;YACW,cAAc;IA8C5B;;OAEG;YACW,WAAW;IAwBzB;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE;IAMpD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B;;OAEG;IACH,QAAQ,IAAI;QACV,kBAAkB,EAAE,MAAM,CAAC;QAC3B,qBAAqB,EAAE,MAAM,CAAC;QAC9B,sBAAsB,EAAE,MAAM,CAAC;KAChC;CAaF"}
|