@edgebasejs/core 0.1.7 → 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.
Files changed (63) hide show
  1. package/README.md +15 -0
  2. package/dist/core/src/access-rules/column-security.d.ts +80 -0
  3. package/dist/core/src/access-rules/column-security.d.ts.map +1 -0
  4. package/dist/core/src/access-rules/column-security.js +191 -0
  5. package/dist/core/src/access-rules/column-security.js.map +1 -0
  6. package/dist/core/src/access-rules/engine.d.ts.map +1 -1
  7. package/dist/core/src/access-rules/engine.js +2 -1
  8. package/dist/core/src/access-rules/engine.js.map +1 -1
  9. package/dist/core/src/audit/audit-manager.d.ts +108 -0
  10. package/dist/core/src/audit/audit-manager.d.ts.map +1 -0
  11. package/dist/core/src/audit/audit-manager.js +265 -0
  12. package/dist/core/src/audit/audit-manager.js.map +1 -0
  13. package/dist/core/src/encryption/encryption-manager.d.ts +97 -0
  14. package/dist/core/src/encryption/encryption-manager.d.ts.map +1 -0
  15. package/dist/core/src/encryption/encryption-manager.js +224 -0
  16. package/dist/core/src/encryption/encryption-manager.js.map +1 -0
  17. package/dist/core/src/index.d.ts +12 -0
  18. package/dist/core/src/index.d.ts.map +1 -1
  19. package/dist/core/src/index.js +12 -0
  20. package/dist/core/src/index.js.map +1 -1
  21. package/dist/core/src/realtime/change-notifier.d.ts +50 -0
  22. package/dist/core/src/realtime/change-notifier.d.ts.map +1 -0
  23. package/dist/core/src/realtime/change-notifier.js +145 -0
  24. package/dist/core/src/realtime/change-notifier.js.map +1 -0
  25. package/dist/core/src/realtime/message-types.d.ts +39 -0
  26. package/dist/core/src/realtime/message-types.d.ts.map +1 -0
  27. package/dist/core/src/realtime/message-types.js +5 -0
  28. package/dist/core/src/realtime/message-types.js.map +1 -0
  29. package/dist/core/src/realtime/subscription-manager.d.ts +67 -0
  30. package/dist/core/src/realtime/subscription-manager.d.ts.map +1 -0
  31. package/dist/core/src/realtime/subscription-manager.js +229 -0
  32. package/dist/core/src/realtime/subscription-manager.js.map +1 -0
  33. package/dist/core/src/search/search-manager.d.ts +93 -0
  34. package/dist/core/src/search/search-manager.d.ts.map +1 -0
  35. package/dist/core/src/search/search-manager.js +258 -0
  36. package/dist/core/src/search/search-manager.js.map +1 -0
  37. package/dist/core/src/storage/file-manager.d.ts +138 -0
  38. package/dist/core/src/storage/file-manager.d.ts.map +1 -0
  39. package/dist/core/src/storage/file-manager.js +224 -0
  40. package/dist/core/src/storage/file-manager.js.map +1 -0
  41. package/dist/core/src/sync/batch-processor.d.ts +97 -0
  42. package/dist/core/src/sync/batch-processor.d.ts.map +1 -0
  43. package/dist/core/src/sync/batch-processor.js +313 -0
  44. package/dist/core/src/sync/batch-processor.js.map +1 -0
  45. package/dist/core/src/sync/csv-processor.d.ts +66 -0
  46. package/dist/core/src/sync/csv-processor.d.ts.map +1 -0
  47. package/dist/core/src/sync/csv-processor.js +223 -0
  48. package/dist/core/src/sync/csv-processor.js.map +1 -0
  49. package/dist/core/src/sync/sync-engine.d.ts +22 -0
  50. package/dist/core/src/sync/sync-engine.d.ts.map +1 -1
  51. package/dist/core/src/sync/sync-engine.js +123 -10
  52. package/dist/core/src/sync/sync-engine.js.map +1 -1
  53. package/dist/core/src/sync/transaction-manager.d.ts +83 -0
  54. package/dist/core/src/sync/transaction-manager.d.ts.map +1 -0
  55. package/dist/core/src/sync/transaction-manager.js +227 -0
  56. package/dist/core/src/sync/transaction-manager.js.map +1 -0
  57. package/dist/core/src/webhooks/webhook-manager.d.ts +137 -0
  58. package/dist/core/src/webhooks/webhook-manager.d.ts.map +1 -0
  59. package/dist/core/src/webhooks/webhook-manager.js +334 -0
  60. package/dist/core/src/webhooks/webhook-manager.js.map +1 -0
  61. package/dist/index.d.ts +0 -1
  62. package/dist/index.js +0 -1
  63. 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;AAGzE,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;CACZ;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;gBAEpB,OAAO,EAAE,iBAAiB;IAOtC;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAmBvD;;OAEG;YACW,oBAAoB;IAiGlC;;OAEG;YACW,WAAW;IAsDzB;;OAEG;YACW,gBAAgB;CAwD/B;AAED,eAAe,gBAAgB,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
- LEFT JOIN sync_metadata m ON m.entity = ? AND m.record_id = r.id`, [entity]);
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: record,
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
- LEFT JOIN ${entity} r ON r.id = m.record_id
183
- WHERE m.entity = ? AND m.updated_at > ?`, [entity, lastSyncTimestamp]);
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: record.deleted_at ? {} : record,
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"}