@docstack/client 0.0.4 → 0.0.6
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/lib/core/attribute.js +406 -0
- package/lib/core/attribute.js.map +1 -0
- package/lib/core/class.d.ts +15 -16
- package/lib/core/class.js +761 -0
- package/lib/core/class.js.map +1 -0
- package/lib/core/crypto-engine/index.js +229 -0
- package/lib/core/crypto-engine/index.js.map +1 -0
- package/lib/core/crypto-engine/utils.js +88 -0
- package/lib/core/crypto-engine/utils.js.map +1 -0
- package/lib/core/datamodel/index.js +1308 -0
- package/lib/core/datamodel/index.js.map +1 -0
- package/lib/core/domain.d.ts +7 -8
- package/lib/core/domain.js +423 -0
- package/lib/core/domain.js.map +1 -0
- package/lib/core/index.js +520 -0
- package/lib/core/index.js.map +1 -0
- package/lib/core/job-engine/index.js +220 -0
- package/lib/core/job-engine/index.js.map +1 -0
- package/lib/core/policy-engine/index.js +232 -0
- package/lib/core/policy-engine/index.js.map +1 -0
- package/lib/core/query-engine/accumulators.js +258 -0
- package/lib/core/query-engine/accumulators.js.map +1 -0
- package/lib/core/query-engine/evaluator.js +179 -0
- package/lib/core/query-engine/evaluator.js.map +1 -0
- package/lib/core/query-engine/executor.js +405 -0
- package/lib/core/query-engine/executor.js.map +1 -0
- package/lib/core/query-engine/index.js +4 -0
- package/lib/core/query-engine/index.js.map +1 -0
- package/lib/core/query-engine/parser.js +515 -0
- package/lib/core/query-engine/parser.js.map +1 -0
- package/lib/core/query-engine/planner.js +330 -0
- package/lib/core/query-engine/planner.js.map +1 -0
- package/lib/core/stack.js +1817 -0
- package/lib/core/stack.js.map +1 -0
- package/lib/core/test-utils/docstack.js +222 -0
- package/lib/core/test-utils/docstack.js.map +1 -0
- package/lib/core/trigger/index.js +81 -0
- package/lib/core/trigger/index.js.map +1 -0
- package/lib/index.js +4 -8231
- package/lib/index.js.map +1 -1
- package/lib/index.umd.js +10 -4
- package/lib/plugins/pouchdb.js +368 -0
- package/lib/plugins/pouchdb.js.map +1 -0
- package/lib/utils/crypto/index.js +34 -0
- package/lib/utils/crypto/index.js.map +1 -0
- package/lib/utils/index.js +58 -0
- package/lib/utils/index.js.map +1 -0
- package/lib/utils/logger/index.js +20 -0
- package/lib/utils/logger/index.js.map +1 -0
- package/lib/utils/logger/transport.js +28 -0
- package/lib/utils/logger/transport.js.map +1 -0
- package/lib/workers/dataModel.js +48 -0
- package/lib/workers/dataModel.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../src/core/class.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import createLogger from "../../utils/logger/index";
|
|
2
|
+
import { wrapDocumentKey, generateRandomString } from "./utils";
|
|
3
|
+
import { decryptWithAesGcm, encryptWithAesGcm, importAesKeyFromHex, isEncryptedPayload, unwrapDocumentKey, } from "./utils";
|
|
4
|
+
/**
|
|
5
|
+
* Engine for handling document-level encryption and decryption.
|
|
6
|
+
*
|
|
7
|
+
* CryptoEngine manages AES-GCM encryption for sensitive document fields.
|
|
8
|
+
* It uses a document key (derived from user credentials) to encrypt/decrypt
|
|
9
|
+
* fields marked with `encrypted: true` in their attribute configuration.
|
|
10
|
+
*
|
|
11
|
+
* The engine can be disabled via stack options for scenarios where
|
|
12
|
+
* encryption is not required.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* // Encryption is handled automatically during document operations
|
|
17
|
+
* // when attributes are configured with `encrypted: true`
|
|
18
|
+
* await Attribute.create(userClass, 'ssn', 'string', 'Social Security Number', {
|
|
19
|
+
* encrypted: true
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // After authentication, the document key is available
|
|
23
|
+
* await stack.authenticate({ username: 'user', password: 'pass' });
|
|
24
|
+
* // Now encrypted fields will be automatically encrypted/decrypted
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export class CryptoEngine {
|
|
28
|
+
/**
|
|
29
|
+
* Creates a new CryptoEngine instance.
|
|
30
|
+
* @param stack - The parent ClientStack instance
|
|
31
|
+
*/
|
|
32
|
+
constructor(stack) {
|
|
33
|
+
this.logger = createLogger().child({ module: "crypto-engine" });
|
|
34
|
+
this.stack = stack;
|
|
35
|
+
this.enabled = !stack.isCryptoEngineDisabled();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Sets the document encryption key.
|
|
39
|
+
* Called automatically during authentication to provide the key
|
|
40
|
+
* derived from user credentials.
|
|
41
|
+
*
|
|
42
|
+
* @param documentKey - The hex-encoded document key, or null to clear
|
|
43
|
+
*/
|
|
44
|
+
async setDocumentKey(documentKey) {
|
|
45
|
+
if (!this.enabled)
|
|
46
|
+
return;
|
|
47
|
+
this.documentKey = documentKey || undefined;
|
|
48
|
+
this.cryptoKey = undefined;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Returns the current document key.
|
|
52
|
+
* @returns The hex-encoded document key, or undefined if not set
|
|
53
|
+
*/
|
|
54
|
+
getDocumentKey() {
|
|
55
|
+
return this.enabled ? this.documentKey : undefined;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Generates a cryptographically secure random string.
|
|
59
|
+
* Useful for generating salts or nonces.
|
|
60
|
+
*
|
|
61
|
+
* @param length - The length of the string to generate (default: 16)
|
|
62
|
+
* @returns A random hex string
|
|
63
|
+
*/
|
|
64
|
+
generateRandomString(length = 16) {
|
|
65
|
+
return generateRandomString(length);
|
|
66
|
+
}
|
|
67
|
+
async encryptValueForMarker(value) {
|
|
68
|
+
if (!this.enabled)
|
|
69
|
+
return null;
|
|
70
|
+
const key = await this.getCryptoKey();
|
|
71
|
+
if (!key)
|
|
72
|
+
return null;
|
|
73
|
+
return await this.encryptValue(value, key);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Checks if the crypto engine is enabled.
|
|
77
|
+
* @returns `true` if encryption is enabled
|
|
78
|
+
*/
|
|
79
|
+
isEnabled() {
|
|
80
|
+
return this.enabled;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Wraps a document key using the user's derived key.
|
|
84
|
+
* Used during user registration to store the encrypted document key.
|
|
85
|
+
*
|
|
86
|
+
* @param documentKey - The document key to wrap
|
|
87
|
+
* @param derivedKeyHex - The user's derived key (from password)
|
|
88
|
+
* @returns The wrapped (encrypted) document key
|
|
89
|
+
*/
|
|
90
|
+
async wrapDocumentKey(documentKey, derivedKeyHex) {
|
|
91
|
+
return wrapDocumentKey(documentKey, derivedKeyHex);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Unwraps and stores the document key using the user's derived key.
|
|
95
|
+
* Called during authentication to recover the document key.
|
|
96
|
+
*
|
|
97
|
+
* @param wrappedDocumentKey - The wrapped document key from the user record
|
|
98
|
+
* @param derivedKey - The user's derived key (from password)
|
|
99
|
+
* @returns The unwrapped document key
|
|
100
|
+
* @throws Error if the crypto engine is disabled or keys are missing
|
|
101
|
+
*/
|
|
102
|
+
async unwrapAndStoreDocumentKey(wrappedDocumentKey, derivedKey) {
|
|
103
|
+
if (!this.enabled)
|
|
104
|
+
throw new Error("Crypto engine is disabled");
|
|
105
|
+
if (!wrappedDocumentKey)
|
|
106
|
+
throw new Error("Missing wrapped document key");
|
|
107
|
+
if (!derivedKey)
|
|
108
|
+
throw new Error("Missing derived key");
|
|
109
|
+
const key = await unwrapDocumentKey(wrappedDocumentKey, await this.getCryptoKey(), derivedKey);
|
|
110
|
+
await this.setDocumentKey(key);
|
|
111
|
+
return key;
|
|
112
|
+
}
|
|
113
|
+
async getCryptoKey() {
|
|
114
|
+
if (!this.enabled)
|
|
115
|
+
return null;
|
|
116
|
+
if (!this.documentKey)
|
|
117
|
+
return null;
|
|
118
|
+
if (this.cryptoKey)
|
|
119
|
+
return this.cryptoKey;
|
|
120
|
+
this.cryptoKey = await importAesKeyFromHex(this.documentKey, ["encrypt", "decrypt"]);
|
|
121
|
+
return this.cryptoKey;
|
|
122
|
+
}
|
|
123
|
+
async encryptValue(value, key) {
|
|
124
|
+
if (!this.enabled)
|
|
125
|
+
return value;
|
|
126
|
+
if (!key)
|
|
127
|
+
return value;
|
|
128
|
+
if (value === undefined || value === null)
|
|
129
|
+
return value;
|
|
130
|
+
if (isEncryptedPayload(value))
|
|
131
|
+
return value;
|
|
132
|
+
const serialized = JSON.stringify(value);
|
|
133
|
+
return encryptWithAesGcm(serialized, key);
|
|
134
|
+
}
|
|
135
|
+
async decryptValue(value, key) {
|
|
136
|
+
if (!this.enabled)
|
|
137
|
+
return value;
|
|
138
|
+
if (!key)
|
|
139
|
+
return value;
|
|
140
|
+
if (!isEncryptedPayload(value))
|
|
141
|
+
return value;
|
|
142
|
+
try {
|
|
143
|
+
const decrypted = await decryptWithAesGcm(value, key);
|
|
144
|
+
return JSON.parse(decrypted);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
this.logger.error("Failed to decrypt value", { error: (error === null || error === void 0 ? void 0 : error.message) || error });
|
|
148
|
+
return value;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Identifies which document keys contain encrypted data.
|
|
153
|
+
* Combines schema-defined encrypted attributes with runtime detection.
|
|
154
|
+
*
|
|
155
|
+
* @param document - The document to analyze
|
|
156
|
+
* @param classObj - Optional class for schema-based detection
|
|
157
|
+
* @returns Array of field names that are/should be encrypted
|
|
158
|
+
*/
|
|
159
|
+
identifyEncryptedKeys(document, classObj) {
|
|
160
|
+
var _a;
|
|
161
|
+
if (!this.enabled)
|
|
162
|
+
return [];
|
|
163
|
+
const encryptedFromSchema = (_a = classObj === null || classObj === void 0 ? void 0 : classObj.getEncryptedAttributes().map((attribute) => attribute.getName())) !== null && _a !== void 0 ? _a : [];
|
|
164
|
+
const encryptedFromPayload = Object.keys(document).filter((key) => isEncryptedPayload(document[key]));
|
|
165
|
+
if (!encryptedFromSchema.length) {
|
|
166
|
+
return encryptedFromPayload;
|
|
167
|
+
}
|
|
168
|
+
const merged = new Set(encryptedFromSchema);
|
|
169
|
+
for (const key of encryptedFromPayload) {
|
|
170
|
+
merged.add(key);
|
|
171
|
+
}
|
|
172
|
+
return Array.from(merged);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Encrypts sensitive fields in a document before storage.
|
|
176
|
+
* Only encrypts fields marked with `encrypted: true` in the schema.
|
|
177
|
+
* Modifies the document in place.
|
|
178
|
+
*
|
|
179
|
+
* @param document - The document to encrypt
|
|
180
|
+
* @param classObj - The class defining which fields to encrypt
|
|
181
|
+
*/
|
|
182
|
+
async encryptDocument(document, classObj) {
|
|
183
|
+
var _a, _b, _c;
|
|
184
|
+
if (!this.enabled)
|
|
185
|
+
return;
|
|
186
|
+
const encryptableAttributes = classObj.getEncryptedAttributes();
|
|
187
|
+
if (!encryptableAttributes.length)
|
|
188
|
+
return;
|
|
189
|
+
const key = await this.getCryptoKey();
|
|
190
|
+
if (!key) {
|
|
191
|
+
this.logger.warn("Document key is not available; skipping encryption", { className: (_b = (_a = classObj.getName) === null || _a === void 0 ? void 0 : _a.call(classObj)) !== null && _b !== void 0 ? _b : (_c = classObj.model) === null || _c === void 0 ? void 0 : _c.name });
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
for (const attribute of encryptableAttributes) {
|
|
195
|
+
const name = attribute.getName();
|
|
196
|
+
if (!(name in document))
|
|
197
|
+
continue;
|
|
198
|
+
const encrypted = await this.encryptValue(document[name], key);
|
|
199
|
+
document[name] = encrypted;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Decrypts encrypted fields in a document after retrieval.
|
|
204
|
+
* Modifies the document in place.
|
|
205
|
+
*
|
|
206
|
+
* @param document - The document to decrypt
|
|
207
|
+
* @param classObj - Optional class for schema-based detection
|
|
208
|
+
* @param encryptedKeys - Optional pre-computed list of encrypted field names
|
|
209
|
+
*/
|
|
210
|
+
async decryptDocument(document, classObj, encryptedKeys) {
|
|
211
|
+
var _a, _b, _c;
|
|
212
|
+
if (!this.enabled)
|
|
213
|
+
return;
|
|
214
|
+
const encryptedAttributes = encryptedKeys !== null && encryptedKeys !== void 0 ? encryptedKeys : this.identifyEncryptedKeys(document, classObj);
|
|
215
|
+
if (!encryptedAttributes.length)
|
|
216
|
+
return;
|
|
217
|
+
const key = await this.getCryptoKey();
|
|
218
|
+
if (!key) {
|
|
219
|
+
this.logger.warn("Document key is not available; returning encrypted payload", { className: (_b = (_a = classObj === null || classObj === void 0 ? void 0 : classObj.getName) === null || _a === void 0 ? void 0 : _a.call(classObj)) !== null && _b !== void 0 ? _b : (_c = classObj === null || classObj === void 0 ? void 0 : classObj.model) === null || _c === void 0 ? void 0 : _c.name });
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
for (const name of encryptedAttributes) {
|
|
223
|
+
const decrypted = await this.decryptValue(document[name], key);
|
|
224
|
+
document[name] = decrypted;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
export { wrapDocumentKey, unwrapDocumentKey } from "./utils";
|
|
229
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/crypto-engine/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
const encoder = new TextEncoder();
|
|
2
|
+
const decoder = new TextDecoder();
|
|
3
|
+
const getCrypto = () => globalThis.crypto;
|
|
4
|
+
export const hexToBytes = (hex) => {
|
|
5
|
+
if (hex.length % 2 !== 0) {
|
|
6
|
+
throw new Error("Hex value must have an even length");
|
|
7
|
+
}
|
|
8
|
+
const bytes = new Uint8Array(hex.length / 2);
|
|
9
|
+
for (let i = 0; i < hex.length; i += 2) {
|
|
10
|
+
bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16);
|
|
11
|
+
}
|
|
12
|
+
return bytes;
|
|
13
|
+
};
|
|
14
|
+
const toUint8Array = (data) => data instanceof ArrayBuffer ? new Uint8Array(data) : data;
|
|
15
|
+
export const toBase64 = (data) => {
|
|
16
|
+
const bytes = toUint8Array(data);
|
|
17
|
+
let binary = "";
|
|
18
|
+
bytes.forEach((byte) => {
|
|
19
|
+
binary += String.fromCharCode(byte);
|
|
20
|
+
});
|
|
21
|
+
return btoa(binary);
|
|
22
|
+
};
|
|
23
|
+
export const fromBase64 = (value) => {
|
|
24
|
+
const binary = atob(value);
|
|
25
|
+
const bytes = new Uint8Array(binary.length);
|
|
26
|
+
for (let i = 0; i < binary.length; i++) {
|
|
27
|
+
bytes[i] = binary.charCodeAt(i);
|
|
28
|
+
}
|
|
29
|
+
return bytes;
|
|
30
|
+
};
|
|
31
|
+
export const importAesKeyFromHex = async (hexKey, usages = ["encrypt", "decrypt"]) => {
|
|
32
|
+
const cryptoObj = getCrypto();
|
|
33
|
+
return cryptoObj.subtle.importKey("raw", hexToBytes(hexKey), { name: "AES-GCM" }, false, usages);
|
|
34
|
+
};
|
|
35
|
+
export const isEncryptedPayload = (value) => {
|
|
36
|
+
if (!value || typeof value !== "object")
|
|
37
|
+
return false;
|
|
38
|
+
const candidate = value;
|
|
39
|
+
return candidate.__enc === true && typeof candidate.iv === "string" && typeof candidate.data === "string";
|
|
40
|
+
};
|
|
41
|
+
export const encryptWithAesGcm = async (plaintext, key) => {
|
|
42
|
+
const cryptoObj = getCrypto();
|
|
43
|
+
const iv = new Uint8Array(12);
|
|
44
|
+
cryptoObj.getRandomValues(iv);
|
|
45
|
+
const ivBuffer = iv.buffer.slice(iv.byteOffset, iv.byteOffset + iv.byteLength);
|
|
46
|
+
const ciphertext = await cryptoObj.subtle.encrypt({ name: "AES-GCM", iv: ivBuffer }, key, encoder.encode(plaintext));
|
|
47
|
+
return {
|
|
48
|
+
__enc: true,
|
|
49
|
+
iv: toBase64(iv),
|
|
50
|
+
data: toBase64(ciphertext),
|
|
51
|
+
alg: "AES-GCM",
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
export const decryptWithAesGcm = async (payload, key) => {
|
|
55
|
+
const cryptoObj = getCrypto();
|
|
56
|
+
const ivBytes = fromBase64(payload.iv);
|
|
57
|
+
const dataBytes = fromBase64(payload.data);
|
|
58
|
+
const ivBuffer = ivBytes.buffer.slice(ivBytes.byteOffset, ivBytes.byteOffset + ivBytes.byteLength);
|
|
59
|
+
const dataBuffer = dataBytes.buffer.slice(dataBytes.byteOffset, dataBytes.byteOffset + dataBytes.byteLength);
|
|
60
|
+
const decrypted = await cryptoObj.subtle.decrypt({ name: "AES-GCM", iv: ivBuffer }, key, dataBuffer);
|
|
61
|
+
return decoder.decode(decrypted);
|
|
62
|
+
};
|
|
63
|
+
export const wrapDocumentKey = async (documentKey, derivedKeyHex) => {
|
|
64
|
+
const key = await importAesKeyFromHex(derivedKeyHex);
|
|
65
|
+
const payload = await encryptWithAesGcm(documentKey, key);
|
|
66
|
+
return JSON.stringify(payload);
|
|
67
|
+
};
|
|
68
|
+
export const unwrapDocumentKey = async (wrappedDocumentKey, cryptoKey, derivedKeyHex) => {
|
|
69
|
+
const parsed = JSON.parse(wrappedDocumentKey);
|
|
70
|
+
if (!isEncryptedPayload(parsed)) {
|
|
71
|
+
throw new Error("Wrapped document key payload is malformed: " + wrappedDocumentKey);
|
|
72
|
+
}
|
|
73
|
+
const key = await importAesKeyFromHex(derivedKeyHex, ["decrypt"]);
|
|
74
|
+
const firstLayer = await decryptWithAesGcm(parsed, key);
|
|
75
|
+
return firstLayer;
|
|
76
|
+
// return await decryptWithAesGcm((JSON.parse(firstLayer) as EncryptedPayload), key);
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Generate random string of given length in bytes, returned as hex string
|
|
80
|
+
*
|
|
81
|
+
**/
|
|
82
|
+
export const generateRandomString = (length = 16) => {
|
|
83
|
+
const cryptoObj = getCrypto();
|
|
84
|
+
const array = new Uint8Array(length);
|
|
85
|
+
cryptoObj.getRandomValues(array);
|
|
86
|
+
return Array.from(array).map(b => ('00' + b.toString(16)).slice(-2)).join('');
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/core/crypto-engine/utils.ts"],"names":[],"mappings":"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"}
|