@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,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit trail manager for change tracking and compliance
|
|
3
|
+
* Tracks all data changes with user attribution and timestamps
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Audit manager for tracking data changes
|
|
7
|
+
*/
|
|
8
|
+
export class AuditManager {
|
|
9
|
+
constructor(db, options) {
|
|
10
|
+
this.db = db;
|
|
11
|
+
this.options = {
|
|
12
|
+
trackBefore: options?.trackBefore !== false,
|
|
13
|
+
trackAfter: options?.trackAfter !== false,
|
|
14
|
+
trackChanges: options?.trackChanges !== false,
|
|
15
|
+
excludeFields: options?.excludeFields || ['password', 'password_hash', 'secret', 'token'],
|
|
16
|
+
maxRetentionDays: options?.maxRetentionDays || 90,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Log a data change
|
|
21
|
+
*/
|
|
22
|
+
async logChange(user, entity, recordId, operation, before, after, metadata) {
|
|
23
|
+
const now = Date.now();
|
|
24
|
+
const auditId = `aud_${now}_${Math.random().toString(36).substring(2, 15)}`;
|
|
25
|
+
// Filter sensitive fields
|
|
26
|
+
const filteredBefore = before ? this.filterSensitiveFields(before) : undefined;
|
|
27
|
+
const filteredAfter = after ? this.filterSensitiveFields(after) : undefined;
|
|
28
|
+
// Calculate field-level changes for updates
|
|
29
|
+
let changes;
|
|
30
|
+
if (this.options.trackChanges && operation === 'update' && filteredBefore && filteredAfter) {
|
|
31
|
+
changes = this.calculateChanges(filteredBefore, filteredAfter);
|
|
32
|
+
}
|
|
33
|
+
const auditLog = {
|
|
34
|
+
id: auditId,
|
|
35
|
+
userId: user.id,
|
|
36
|
+
entity,
|
|
37
|
+
recordId,
|
|
38
|
+
operation,
|
|
39
|
+
before: this.options.trackBefore && (operation === 'update' || operation === 'delete') ? filteredBefore : undefined,
|
|
40
|
+
after: this.options.trackAfter && (operation === 'create' || operation === 'update') ? filteredAfter : undefined,
|
|
41
|
+
changes,
|
|
42
|
+
metadata,
|
|
43
|
+
createdAt: now,
|
|
44
|
+
};
|
|
45
|
+
// Store in database
|
|
46
|
+
await this.db.run(`INSERT INTO audit_logs (id, user_id, entity, record_id, operation, before_data, after_data, changes, metadata, created_at)
|
|
47
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
48
|
+
auditLog.id,
|
|
49
|
+
auditLog.userId,
|
|
50
|
+
auditLog.entity,
|
|
51
|
+
auditLog.recordId,
|
|
52
|
+
auditLog.operation,
|
|
53
|
+
auditLog.before ? JSON.stringify(auditLog.before) : null,
|
|
54
|
+
auditLog.after ? JSON.stringify(auditLog.after) : null,
|
|
55
|
+
auditLog.changes ? JSON.stringify(auditLog.changes) : null,
|
|
56
|
+
auditLog.metadata ? JSON.stringify(auditLog.metadata) : null,
|
|
57
|
+
auditLog.createdAt,
|
|
58
|
+
]);
|
|
59
|
+
return auditLog;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Query audit logs
|
|
63
|
+
*/
|
|
64
|
+
async queryLogs(query) {
|
|
65
|
+
const limit = query.limit || 50;
|
|
66
|
+
const offset = query.offset || 0;
|
|
67
|
+
// Build WHERE clause
|
|
68
|
+
const conditions = [];
|
|
69
|
+
const params = [];
|
|
70
|
+
if (query.entity) {
|
|
71
|
+
conditions.push('entity = ?');
|
|
72
|
+
params.push(query.entity);
|
|
73
|
+
}
|
|
74
|
+
if (query.recordId) {
|
|
75
|
+
conditions.push('record_id = ?');
|
|
76
|
+
params.push(query.recordId);
|
|
77
|
+
}
|
|
78
|
+
if (query.userId) {
|
|
79
|
+
conditions.push('user_id = ?');
|
|
80
|
+
params.push(query.userId);
|
|
81
|
+
}
|
|
82
|
+
if (query.operation) {
|
|
83
|
+
conditions.push('operation = ?');
|
|
84
|
+
params.push(query.operation);
|
|
85
|
+
}
|
|
86
|
+
if (query.startDate) {
|
|
87
|
+
conditions.push('created_at >= ?');
|
|
88
|
+
params.push(query.startDate);
|
|
89
|
+
}
|
|
90
|
+
if (query.endDate) {
|
|
91
|
+
conditions.push('created_at <= ?');
|
|
92
|
+
params.push(query.endDate);
|
|
93
|
+
}
|
|
94
|
+
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
95
|
+
// Get logs
|
|
96
|
+
const sql = `
|
|
97
|
+
SELECT * FROM audit_logs
|
|
98
|
+
${whereClause}
|
|
99
|
+
ORDER BY created_at DESC
|
|
100
|
+
LIMIT ? OFFSET ?
|
|
101
|
+
`;
|
|
102
|
+
const rows = await this.db.getAll(sql, [...params, limit + 1, offset]);
|
|
103
|
+
// Check if there are more results
|
|
104
|
+
const hasMore = rows.length > limit;
|
|
105
|
+
const trimmedRows = hasMore ? rows.slice(0, limit) : rows;
|
|
106
|
+
// Get total count
|
|
107
|
+
const countSql = `SELECT COUNT(*) as total FROM audit_logs ${whereClause}`;
|
|
108
|
+
const countResult = await this.db.getOne(countSql, params);
|
|
109
|
+
const total = countResult?.total || 0;
|
|
110
|
+
// Parse JSON fields
|
|
111
|
+
const logs = trimmedRows.map((row) => ({
|
|
112
|
+
id: row.id,
|
|
113
|
+
userId: row.user_id,
|
|
114
|
+
entity: row.entity,
|
|
115
|
+
recordId: row.record_id,
|
|
116
|
+
operation: row.operation,
|
|
117
|
+
before: row.before_data ? JSON.parse(row.before_data) : undefined,
|
|
118
|
+
after: row.after_data ? JSON.parse(row.after_data) : undefined,
|
|
119
|
+
changes: row.changes ? JSON.parse(row.changes) : undefined,
|
|
120
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
121
|
+
createdAt: row.created_at,
|
|
122
|
+
}));
|
|
123
|
+
return {
|
|
124
|
+
logs,
|
|
125
|
+
total,
|
|
126
|
+
hasMore,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get audit log by ID
|
|
131
|
+
*/
|
|
132
|
+
async getLog(auditId) {
|
|
133
|
+
const row = await this.db.getOne('SELECT * FROM audit_logs WHERE id = ?', [auditId]);
|
|
134
|
+
if (!row) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
id: row.id,
|
|
139
|
+
userId: row.user_id,
|
|
140
|
+
entity: row.entity,
|
|
141
|
+
recordId: row.record_id,
|
|
142
|
+
operation: row.operation,
|
|
143
|
+
before: row.before_data ? JSON.parse(row.before_data) : undefined,
|
|
144
|
+
after: row.after_data ? JSON.parse(row.after_data) : undefined,
|
|
145
|
+
changes: row.changes ? JSON.parse(row.changes) : undefined,
|
|
146
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
147
|
+
createdAt: row.created_at,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get audit history for a specific record
|
|
152
|
+
*/
|
|
153
|
+
async getRecordHistory(entity, recordId) {
|
|
154
|
+
const rows = await this.db.getAll('SELECT * FROM audit_logs WHERE entity = ? AND record_id = ? ORDER BY created_at DESC', [entity, recordId]);
|
|
155
|
+
return rows.map((row) => ({
|
|
156
|
+
id: row.id,
|
|
157
|
+
userId: row.user_id,
|
|
158
|
+
entity: row.entity,
|
|
159
|
+
recordId: row.record_id,
|
|
160
|
+
operation: row.operation,
|
|
161
|
+
before: row.before_data ? JSON.parse(row.before_data) : undefined,
|
|
162
|
+
after: row.after_data ? JSON.parse(row.after_data) : undefined,
|
|
163
|
+
changes: row.changes ? JSON.parse(row.changes) : undefined,
|
|
164
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
165
|
+
createdAt: row.created_at,
|
|
166
|
+
}));
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get summary statistics for audit logs
|
|
170
|
+
*/
|
|
171
|
+
async getStatistics(options) {
|
|
172
|
+
const conditions = [];
|
|
173
|
+
const params = [];
|
|
174
|
+
if (options?.entity) {
|
|
175
|
+
conditions.push('entity = ?');
|
|
176
|
+
params.push(options.entity);
|
|
177
|
+
}
|
|
178
|
+
if (options?.userId) {
|
|
179
|
+
conditions.push('user_id = ?');
|
|
180
|
+
params.push(options.userId);
|
|
181
|
+
}
|
|
182
|
+
if (options?.startDate) {
|
|
183
|
+
conditions.push('created_at >= ?');
|
|
184
|
+
params.push(options.startDate);
|
|
185
|
+
}
|
|
186
|
+
if (options?.endDate) {
|
|
187
|
+
conditions.push('created_at <= ?');
|
|
188
|
+
params.push(options.endDate);
|
|
189
|
+
}
|
|
190
|
+
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
191
|
+
// Total changes
|
|
192
|
+
const totalResult = await this.db.getOne(`SELECT COUNT(*) as total FROM audit_logs ${whereClause}`, params);
|
|
193
|
+
const totalChanges = totalResult?.total || 0;
|
|
194
|
+
// Changes by operation
|
|
195
|
+
const operationRows = await this.db.getAll(`SELECT operation, COUNT(*) as count FROM audit_logs ${whereClause} GROUP BY operation`, params);
|
|
196
|
+
const changesByOperation = operationRows.map((row) => ({
|
|
197
|
+
operation: row.operation,
|
|
198
|
+
count: row.count,
|
|
199
|
+
}));
|
|
200
|
+
// Changes by entity
|
|
201
|
+
const entityRows = await this.db.getAll(`SELECT entity, COUNT(*) as count FROM audit_logs ${whereClause} GROUP BY entity ORDER BY count DESC LIMIT 10`, params);
|
|
202
|
+
const changesByEntity = entityRows.map((row) => ({
|
|
203
|
+
entity: row.entity,
|
|
204
|
+
count: row.count,
|
|
205
|
+
}));
|
|
206
|
+
// Changes by user
|
|
207
|
+
const userRows = await this.db.getAll(`SELECT user_id, COUNT(*) as count FROM audit_logs ${whereClause} GROUP BY user_id ORDER BY count DESC LIMIT 10`, params);
|
|
208
|
+
const changesByUser = userRows.map((row) => ({
|
|
209
|
+
userId: row.user_id,
|
|
210
|
+
count: row.count,
|
|
211
|
+
}));
|
|
212
|
+
return {
|
|
213
|
+
totalChanges,
|
|
214
|
+
changesByOperation,
|
|
215
|
+
changesByEntity,
|
|
216
|
+
changesByUser,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Clean up old audit logs based on retention policy
|
|
221
|
+
*/
|
|
222
|
+
async cleanupOldLogs() {
|
|
223
|
+
const cutoffDate = Date.now() - this.options.maxRetentionDays * 24 * 60 * 60 * 1000;
|
|
224
|
+
const result = await this.db.getOne('SELECT COUNT(*) as count FROM audit_logs WHERE created_at < ?', [cutoffDate]);
|
|
225
|
+
const count = result?.count || 0;
|
|
226
|
+
if (count > 0) {
|
|
227
|
+
await this.db.run('DELETE FROM audit_logs WHERE created_at < ?', [cutoffDate]);
|
|
228
|
+
}
|
|
229
|
+
return count;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Filter sensitive fields from data
|
|
233
|
+
*/
|
|
234
|
+
filterSensitiveFields(data) {
|
|
235
|
+
const filtered = {};
|
|
236
|
+
for (const [key, value] of Object.entries(data)) {
|
|
237
|
+
if (!this.options.excludeFields.includes(key.toLowerCase())) {
|
|
238
|
+
filtered[key] = value;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return filtered;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Calculate field-level changes between before and after states
|
|
245
|
+
*/
|
|
246
|
+
calculateChanges(before, after) {
|
|
247
|
+
const changes = [];
|
|
248
|
+
// Check for changed and new fields
|
|
249
|
+
for (const [field, afterValue] of Object.entries(after)) {
|
|
250
|
+
const beforeValue = before[field];
|
|
251
|
+
// Compare values (handle different types)
|
|
252
|
+
if (JSON.stringify(beforeValue) !== JSON.stringify(afterValue)) {
|
|
253
|
+
changes.push({ field, before: beforeValue, after: afterValue });
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Check for deleted fields
|
|
257
|
+
for (const field of Object.keys(before)) {
|
|
258
|
+
if (!(field in after)) {
|
|
259
|
+
changes.push({ field, before: before[field], after: undefined });
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return changes;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=audit-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-manager.js","sourceRoot":"","sources":["../../../../src/audit/audit-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encryption manager for field-level data encryption
|
|
3
|
+
* Handles encryption/decryption of sensitive fields at rest
|
|
4
|
+
*/
|
|
5
|
+
export interface EncryptionConfig {
|
|
6
|
+
entity: string;
|
|
7
|
+
fields: string[];
|
|
8
|
+
algorithm?: 'AES-GCM' | 'AES-CBC';
|
|
9
|
+
keyRotation?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface EncryptedValue {
|
|
12
|
+
ciphertext: string;
|
|
13
|
+
iv: string;
|
|
14
|
+
algorithm: string;
|
|
15
|
+
keyVersion?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface EncryptionKey {
|
|
18
|
+
id: string;
|
|
19
|
+
key: CryptoKey;
|
|
20
|
+
version: number;
|
|
21
|
+
algorithm: string;
|
|
22
|
+
createdAt: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Encryption manager for field-level encryption
|
|
26
|
+
*/
|
|
27
|
+
export declare class EncryptionManager {
|
|
28
|
+
private configs;
|
|
29
|
+
private currentKey;
|
|
30
|
+
private keyHistory;
|
|
31
|
+
constructor();
|
|
32
|
+
/**
|
|
33
|
+
* Register encryption configuration for an entity
|
|
34
|
+
*/
|
|
35
|
+
registerConfig(config: EncryptionConfig): void;
|
|
36
|
+
/**
|
|
37
|
+
* Get encryption configuration for an entity
|
|
38
|
+
*/
|
|
39
|
+
getConfig(entity: string): EncryptionConfig | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Initialize encryption key from master key
|
|
42
|
+
*/
|
|
43
|
+
initializeKey(masterKey: string, version?: number): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Rotate encryption key (for key rotation support)
|
|
46
|
+
*/
|
|
47
|
+
rotateKey(newMasterKey: string): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Encrypt a value
|
|
50
|
+
*/
|
|
51
|
+
encrypt(value: any): Promise<EncryptedValue>;
|
|
52
|
+
/**
|
|
53
|
+
* Decrypt a value
|
|
54
|
+
*/
|
|
55
|
+
decrypt(encrypted: EncryptedValue): Promise<any>;
|
|
56
|
+
/**
|
|
57
|
+
* Encrypt fields in a record based on entity configuration
|
|
58
|
+
*/
|
|
59
|
+
encryptRecord(entity: string, record: Record<string, any>): Promise<Record<string, any>>;
|
|
60
|
+
/**
|
|
61
|
+
* Decrypt fields in a record based on entity configuration
|
|
62
|
+
*/
|
|
63
|
+
decryptRecord(entity: string, record: Record<string, any>): Promise<Record<string, any>>;
|
|
64
|
+
/**
|
|
65
|
+
* Check if a field should be encrypted
|
|
66
|
+
*/
|
|
67
|
+
shouldEncrypt(entity: string, field: string): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Get all encrypted fields for an entity
|
|
70
|
+
*/
|
|
71
|
+
getEncryptedFields(entity: string): string[];
|
|
72
|
+
/**
|
|
73
|
+
* Re-encrypt a record with a new key (for key rotation)
|
|
74
|
+
*/
|
|
75
|
+
reencryptRecord(entity: string, record: Record<string, any>): Promise<Record<string, any>>;
|
|
76
|
+
/**
|
|
77
|
+
* Derive key material from master key
|
|
78
|
+
*/
|
|
79
|
+
private deriveKeyMaterial;
|
|
80
|
+
/**
|
|
81
|
+
* Convert ArrayBuffer to Base64
|
|
82
|
+
*/
|
|
83
|
+
private arrayBufferToBase64;
|
|
84
|
+
/**
|
|
85
|
+
* Convert Base64 to ArrayBuffer
|
|
86
|
+
*/
|
|
87
|
+
private base64ToArrayBuffer;
|
|
88
|
+
/**
|
|
89
|
+
* Clear all encryption keys (security)
|
|
90
|
+
*/
|
|
91
|
+
clear(): void;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Global encryption manager instance
|
|
95
|
+
*/
|
|
96
|
+
export declare const encryptionManager: EncryptionManager;
|
|
97
|
+
//# sourceMappingURL=encryption-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption-manager.d.ts","sourceRoot":"","sources":["../../../../src/encryption/encryption-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,SAAS,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,UAAU,CAAyC;;IAI3D;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAI9C;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIvD;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B1E;;OAEG;IACG,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC;IAiClD;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IAkCtD;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAqB9F;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IA+B9F;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAKrD;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAK5C;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAQhG;;OAEG;YACW,iBAAiB;IAW/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encryption manager for field-level data encryption
|
|
3
|
+
* Handles encryption/decryption of sensitive fields at rest
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Encryption manager for field-level encryption
|
|
7
|
+
*/
|
|
8
|
+
export class EncryptionManager {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.configs = new Map();
|
|
11
|
+
this.currentKey = null;
|
|
12
|
+
this.keyHistory = new Map();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Register encryption configuration for an entity
|
|
16
|
+
*/
|
|
17
|
+
registerConfig(config) {
|
|
18
|
+
this.configs.set(config.entity, config);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get encryption configuration for an entity
|
|
22
|
+
*/
|
|
23
|
+
getConfig(entity) {
|
|
24
|
+
return this.configs.get(entity);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Initialize encryption key from master key
|
|
28
|
+
*/
|
|
29
|
+
async initializeKey(masterKey, version = 1) {
|
|
30
|
+
const algorithm = 'AES-GCM';
|
|
31
|
+
// Derive key from master key using PBKDF2
|
|
32
|
+
const keyMaterial = await this.deriveKeyMaterial(masterKey);
|
|
33
|
+
const cryptoKey = await crypto.subtle.deriveKey({
|
|
34
|
+
name: 'PBKDF2',
|
|
35
|
+
salt: new TextEncoder().encode('edgebase-salt-v1'), // In production, use unique salt
|
|
36
|
+
iterations: 100000,
|
|
37
|
+
hash: 'SHA-256',
|
|
38
|
+
}, keyMaterial, { name: 'AES-GCM', length: 256 }, false, // Not extractable
|
|
39
|
+
['encrypt', 'decrypt']);
|
|
40
|
+
const encryptionKey = {
|
|
41
|
+
id: `key_${version}_${Date.now()}`,
|
|
42
|
+
key: cryptoKey,
|
|
43
|
+
version,
|
|
44
|
+
algorithm,
|
|
45
|
+
createdAt: Date.now(),
|
|
46
|
+
};
|
|
47
|
+
this.currentKey = encryptionKey;
|
|
48
|
+
this.keyHistory.set(version, encryptionKey);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Rotate encryption key (for key rotation support)
|
|
52
|
+
*/
|
|
53
|
+
async rotateKey(newMasterKey) {
|
|
54
|
+
const newVersion = this.currentKey ? this.currentKey.version + 1 : 1;
|
|
55
|
+
await this.initializeKey(newMasterKey, newVersion);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Encrypt a value
|
|
59
|
+
*/
|
|
60
|
+
async encrypt(value) {
|
|
61
|
+
if (!this.currentKey) {
|
|
62
|
+
throw new Error('Encryption key not initialized');
|
|
63
|
+
}
|
|
64
|
+
// Convert value to string
|
|
65
|
+
const plaintext = typeof value === 'string' ? value : JSON.stringify(value);
|
|
66
|
+
const plaintextBytes = new TextEncoder().encode(plaintext);
|
|
67
|
+
// Generate random IV
|
|
68
|
+
const iv = crypto.getRandomValues(new Uint8Array(12)); // 12 bytes for GCM
|
|
69
|
+
// Encrypt
|
|
70
|
+
const ciphertextBuffer = await crypto.subtle.encrypt({
|
|
71
|
+
name: 'AES-GCM',
|
|
72
|
+
iv,
|
|
73
|
+
}, this.currentKey.key, plaintextBytes);
|
|
74
|
+
const ciphertext = this.arrayBufferToBase64(ciphertextBuffer);
|
|
75
|
+
const ivBase64 = this.arrayBufferToBase64(iv);
|
|
76
|
+
return {
|
|
77
|
+
ciphertext,
|
|
78
|
+
iv: ivBase64,
|
|
79
|
+
algorithm: this.currentKey.algorithm,
|
|
80
|
+
keyVersion: this.currentKey.version,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Decrypt a value
|
|
85
|
+
*/
|
|
86
|
+
async decrypt(encrypted) {
|
|
87
|
+
// Get appropriate key for decryption (supports key rotation)
|
|
88
|
+
const key = encrypted.keyVersion
|
|
89
|
+
? this.keyHistory.get(encrypted.keyVersion)
|
|
90
|
+
: this.currentKey;
|
|
91
|
+
if (!key) {
|
|
92
|
+
throw new Error(`Encryption key for version ${encrypted.keyVersion} not found`);
|
|
93
|
+
}
|
|
94
|
+
// Decode base64
|
|
95
|
+
const ciphertextBuffer = this.base64ToArrayBuffer(encrypted.ciphertext);
|
|
96
|
+
const iv = this.base64ToArrayBuffer(encrypted.iv);
|
|
97
|
+
// Decrypt
|
|
98
|
+
const plaintextBuffer = await crypto.subtle.decrypt({
|
|
99
|
+
name: encrypted.algorithm,
|
|
100
|
+
iv: iv,
|
|
101
|
+
}, key.key, ciphertextBuffer);
|
|
102
|
+
const plaintext = new TextDecoder().decode(plaintextBuffer);
|
|
103
|
+
// Try to parse as JSON (for objects/arrays)
|
|
104
|
+
try {
|
|
105
|
+
return JSON.parse(plaintext);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return plaintext;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Encrypt fields in a record based on entity configuration
|
|
113
|
+
*/
|
|
114
|
+
async encryptRecord(entity, record) {
|
|
115
|
+
const config = this.configs.get(entity);
|
|
116
|
+
if (!config) {
|
|
117
|
+
return record; // No encryption config
|
|
118
|
+
}
|
|
119
|
+
const encrypted = { ...record };
|
|
120
|
+
for (const field of config.fields) {
|
|
121
|
+
if (field in record && record[field] !== null && record[field] !== undefined) {
|
|
122
|
+
// Encrypt the field
|
|
123
|
+
const encryptedValue = await this.encrypt(record[field]);
|
|
124
|
+
// Store as JSON string
|
|
125
|
+
encrypted[field] = JSON.stringify(encryptedValue);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return encrypted;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Decrypt fields in a record based on entity configuration
|
|
132
|
+
*/
|
|
133
|
+
async decryptRecord(entity, record) {
|
|
134
|
+
const config = this.configs.get(entity);
|
|
135
|
+
if (!config) {
|
|
136
|
+
return record; // No encryption config
|
|
137
|
+
}
|
|
138
|
+
const decrypted = { ...record };
|
|
139
|
+
for (const field of config.fields) {
|
|
140
|
+
if (field in record && record[field] !== null && record[field] !== undefined) {
|
|
141
|
+
try {
|
|
142
|
+
// Parse encrypted value
|
|
143
|
+
const encryptedValue = typeof record[field] === 'string'
|
|
144
|
+
? JSON.parse(record[field])
|
|
145
|
+
: record[field];
|
|
146
|
+
// Check if it's actually encrypted (has ciphertext and iv)
|
|
147
|
+
if (encryptedValue.ciphertext && encryptedValue.iv) {
|
|
148
|
+
// Decrypt the field
|
|
149
|
+
decrypted[field] = await this.decrypt(encryptedValue);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
console.error(`Failed to decrypt field ${field}:`, error);
|
|
154
|
+
// Keep original value if decryption fails
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return decrypted;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Check if a field should be encrypted
|
|
162
|
+
*/
|
|
163
|
+
shouldEncrypt(entity, field) {
|
|
164
|
+
const config = this.configs.get(entity);
|
|
165
|
+
return config ? config.fields.includes(field) : false;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get all encrypted fields for an entity
|
|
169
|
+
*/
|
|
170
|
+
getEncryptedFields(entity) {
|
|
171
|
+
const config = this.configs.get(entity);
|
|
172
|
+
return config ? config.fields : [];
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Re-encrypt a record with a new key (for key rotation)
|
|
176
|
+
*/
|
|
177
|
+
async reencryptRecord(entity, record) {
|
|
178
|
+
// First decrypt with old keys
|
|
179
|
+
const decrypted = await this.decryptRecord(entity, record);
|
|
180
|
+
// Then encrypt with current key
|
|
181
|
+
return await this.encryptRecord(entity, decrypted);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Derive key material from master key
|
|
185
|
+
*/
|
|
186
|
+
async deriveKeyMaterial(masterKey) {
|
|
187
|
+
const keyBytes = new TextEncoder().encode(masterKey);
|
|
188
|
+
return await crypto.subtle.importKey('raw', keyBytes, 'PBKDF2', false, ['deriveKey']);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Convert ArrayBuffer to Base64
|
|
192
|
+
*/
|
|
193
|
+
arrayBufferToBase64(buffer) {
|
|
194
|
+
const bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
|
|
195
|
+
let binary = '';
|
|
196
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
197
|
+
binary += String.fromCharCode(bytes[i]);
|
|
198
|
+
}
|
|
199
|
+
return btoa(binary);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Convert Base64 to ArrayBuffer
|
|
203
|
+
*/
|
|
204
|
+
base64ToArrayBuffer(base64) {
|
|
205
|
+
const binary = atob(base64);
|
|
206
|
+
const bytes = new Uint8Array(binary.length);
|
|
207
|
+
for (let i = 0; i < binary.length; i++) {
|
|
208
|
+
bytes[i] = binary.charCodeAt(i);
|
|
209
|
+
}
|
|
210
|
+
return bytes;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Clear all encryption keys (security)
|
|
214
|
+
*/
|
|
215
|
+
clear() {
|
|
216
|
+
this.currentKey = null;
|
|
217
|
+
this.keyHistory.clear();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Global encryption manager instance
|
|
222
|
+
*/
|
|
223
|
+
export const encryptionManager = new EncryptionManager();
|
|
224
|
+
//# sourceMappingURL=encryption-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption-manager.js","sourceRoot":"","sources":["../../../../src/encryption/encryption-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/core/src/index.d.ts
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
export * from './auth';
|
|
2
2
|
export * from './sync';
|
|
3
3
|
export * from './access-rules';
|
|
4
|
+
export * from './access-rules/column-security';
|
|
5
|
+
export * from './realtime/subscription-manager';
|
|
6
|
+
export * from './realtime/change-notifier';
|
|
7
|
+
export * from './realtime/message-types';
|
|
8
|
+
export * from './sync/transaction-manager';
|
|
9
|
+
export * from './sync/batch-processor';
|
|
10
|
+
export * from './sync/csv-processor';
|
|
11
|
+
export * from './storage/file-manager';
|
|
12
|
+
export * from './webhooks/webhook-manager';
|
|
13
|
+
export * from './search/search-manager';
|
|
14
|
+
export * from './audit/audit-manager';
|
|
15
|
+
export * from './encryption/encryption-manager';
|
|
4
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC"}
|
package/dist/core/src/index.js
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
export * from './auth';
|
|
2
2
|
export * from './sync';
|
|
3
3
|
export * from './access-rules';
|
|
4
|
+
export * from './access-rules/column-security';
|
|
5
|
+
export * from './realtime/subscription-manager';
|
|
6
|
+
export * from './realtime/change-notifier';
|
|
7
|
+
export * from './realtime/message-types';
|
|
8
|
+
export * from './sync/transaction-manager';
|
|
9
|
+
export * from './sync/batch-processor';
|
|
10
|
+
export * from './sync/csv-processor';
|
|
11
|
+
export * from './storage/file-manager';
|
|
12
|
+
export * from './webhooks/webhook-manager';
|
|
13
|
+
export * from './search/search-manager';
|
|
14
|
+
export * from './audit/audit-manager';
|
|
15
|
+
export * from './encryption/encryption-manager';
|
|
4
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC"}
|