@mrbelloc/encrypted-store 0.2.2 → 0.3.0
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 +81 -1
- package/dist/encryptedStore.d.ts +11 -3
- package/dist/encryptedStore.d.ts.map +1 -1
- package/dist/encryptedStore.js +101 -59
- package/dist/encryptedStore.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -41,6 +41,12 @@ const store = new EncryptedStore(db, "my-password", {
|
|
|
41
41
|
console.log(`Deleted ${table}:`, docs);
|
|
42
42
|
});
|
|
43
43
|
},
|
|
44
|
+
decryptionError: (events) => {
|
|
45
|
+
events.forEach(({ docId, error, doc }) => {
|
|
46
|
+
console.error(`Failed to decrypt ${docId}:`, error.message);
|
|
47
|
+
console.log("Raw encrypted document:", doc);
|
|
48
|
+
});
|
|
49
|
+
},
|
|
44
50
|
});
|
|
45
51
|
|
|
46
52
|
// Load existing data
|
|
@@ -64,16 +70,23 @@ Creates an encrypted store.
|
|
|
64
70
|
|
|
65
71
|
- `db`: Fireproof database instance
|
|
66
72
|
- `password`: Encryption password (string)
|
|
67
|
-
- `listener`: Object with
|
|
73
|
+
- `listener`: Object with callbacks:
|
|
68
74
|
- `docsAdded(events: TableEvent[])`: Fired when new documents are added
|
|
69
75
|
- `docsChanged(events: TableEvent[])`: Fired when documents are updated
|
|
70
76
|
- `docsDeleted(events: TableEvent[])`: Fired when documents are deleted
|
|
77
|
+
- `decryptionError?(events: DecryptionErrorEvent[])`: Optional. Fired when documents fail to decrypt
|
|
71
78
|
|
|
72
79
|
Each `TableEvent` has:
|
|
73
80
|
|
|
74
81
|
- `table`: Document type (e.g., "users", "transactions")
|
|
75
82
|
- `docs`: Array of documents with that type
|
|
76
83
|
|
|
84
|
+
Each `DecryptionErrorEvent` has:
|
|
85
|
+
|
|
86
|
+
- `docId`: Full document ID that failed to decrypt (e.g., "users_alice")
|
|
87
|
+
- `error`: Error object with details about why decryption failed
|
|
88
|
+
- `doc`: The raw encrypted document from Fireproof (includes `_id` and `d` fields)
|
|
89
|
+
|
|
77
90
|
### `await store.loadAll()`
|
|
78
91
|
|
|
79
92
|
Loads all existing documents and sets up change detection. Call this once after creating the store.
|
|
@@ -123,6 +136,58 @@ store.disconnectRemote();
|
|
|
123
136
|
|
|
124
137
|
**Note:** Remote servers only see encrypted blobs - they cannot read your data.
|
|
125
138
|
|
|
139
|
+
### Testing Remote Sync
|
|
140
|
+
|
|
141
|
+
To test that remote sync is working:
|
|
142
|
+
|
|
143
|
+
1. **Connect to a remote server** using one of the Fireproof connectors (PartyKit, Netlify, etc.)
|
|
144
|
+
2. **Monitor decryption errors** - If data arrives from another client encrypted with a different password or corrupted, you'll receive `decryptionError` events
|
|
145
|
+
3. **Use the decryptionError callback** to verify connectivity and detect synchronization issues
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
const store = new EncryptedStore(db, "my-password", {
|
|
149
|
+
docsAdded: (events) => {
|
|
150
|
+
console.log("✓ Received new documents from remote");
|
|
151
|
+
},
|
|
152
|
+
docsChanged: (events) => {
|
|
153
|
+
console.log("✓ Received document updates from remote");
|
|
154
|
+
},
|
|
155
|
+
docsDeleted: (events) => {
|
|
156
|
+
console.log("✓ Received document deletions from remote");
|
|
157
|
+
},
|
|
158
|
+
decryptionError: (events) => {
|
|
159
|
+
// This fires when remote data can't be decrypted
|
|
160
|
+
// Useful for detecting sync issues or password mismatches
|
|
161
|
+
events.forEach(({ docId, error, doc }) => {
|
|
162
|
+
console.warn(`⚠ Failed to decrypt ${docId}:`, error.message);
|
|
163
|
+
console.log("Raw encrypted document available for debugging:", doc);
|
|
164
|
+
});
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
await store.connectRemote(connect, {
|
|
169
|
+
namespace: "my-app",
|
|
170
|
+
host: "http://localhost:1999",
|
|
171
|
+
});
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**Important:** Unlike traditional databases like CouchDB/PouchDB, Fireproof connectors don't provide connection status events. The subscription mechanism handles both local and remote changes automatically. Monitor the event callbacks to verify sync is working.
|
|
175
|
+
|
|
176
|
+
## Decryption Error Handling
|
|
177
|
+
|
|
178
|
+
The store automatically handles documents that fail to decrypt:
|
|
179
|
+
|
|
180
|
+
- **Wrong password**: Documents encrypted with a different password will trigger `decryptionError` events
|
|
181
|
+
- **Corrupted data**: Malformed or corrupted encrypted data is caught and reported
|
|
182
|
+
- **Graceful degradation**: Successfully decrypted documents are still processed; failures don't stop the store
|
|
183
|
+
- **Remote sync issues**: Detect when remote clients are using different passwords or sending corrupted data
|
|
184
|
+
|
|
185
|
+
This is especially useful when:
|
|
186
|
+
- Testing remote sync connectivity
|
|
187
|
+
- Debugging encryption/decryption issues
|
|
188
|
+
- Detecting data corruption
|
|
189
|
+
- Monitoring multi-client scenarios with different encryption keys
|
|
190
|
+
|
|
126
191
|
## How It Works
|
|
127
192
|
|
|
128
193
|
1. **Encryption**: Documents are encrypted with AES-256-GCM before storage
|
|
@@ -130,6 +195,7 @@ store.disconnectRemote();
|
|
|
130
195
|
3. **Change Detection**: Fireproof's subscribe notifies us of changes
|
|
131
196
|
4. **Diff Computation**: We track IDs and decrypt only changed documents
|
|
132
197
|
5. **Events**: Your app gets organized events by table (added/changed/deleted)
|
|
198
|
+
6. **Error Handling**: Failed decryptions are reported via optional callback
|
|
133
199
|
|
|
134
200
|
## Example: React Integration
|
|
135
201
|
|
|
@@ -177,6 +243,13 @@ function useEncryptedStore(dbName: string, password: string) {
|
|
|
177
243
|
}
|
|
178
244
|
});
|
|
179
245
|
},
|
|
246
|
+
decryptionError: (events) => {
|
|
247
|
+
// Handle decryption errors (optional)
|
|
248
|
+
events.forEach(({ docId, error, doc }) => {
|
|
249
|
+
console.error(`Failed to decrypt ${docId}:`, error.message);
|
|
250
|
+
// Raw encrypted document is available in doc.d if needed
|
|
251
|
+
});
|
|
252
|
+
},
|
|
180
253
|
});
|
|
181
254
|
|
|
182
255
|
encryptedStore.loadAll();
|
|
@@ -195,10 +268,17 @@ interface TableEvent {
|
|
|
195
268
|
docs: Doc[];
|
|
196
269
|
}
|
|
197
270
|
|
|
271
|
+
interface DecryptionErrorEvent {
|
|
272
|
+
docId: string;
|
|
273
|
+
error: Error;
|
|
274
|
+
doc: any; // The raw encrypted document from Fireproof
|
|
275
|
+
}
|
|
276
|
+
|
|
198
277
|
interface StoreListener {
|
|
199
278
|
docsAdded: (events: TableEvent[]) => void;
|
|
200
279
|
docsChanged: (events: TableEvent[]) => void;
|
|
201
280
|
docsDeleted: (events: TableEvent[]) => void;
|
|
281
|
+
decryptionError?: (events: DecryptionErrorEvent[]) => void;
|
|
202
282
|
}
|
|
203
283
|
|
|
204
284
|
interface Doc {
|
package/dist/encryptedStore.d.ts
CHANGED
|
@@ -41,8 +41,12 @@ export interface FireproofDb {
|
|
|
41
41
|
value?: any;
|
|
42
42
|
}>;
|
|
43
43
|
}>;
|
|
44
|
-
subscribe(callback: (changes: any[]) => void, remote?: boolean): void;
|
|
44
|
+
subscribe(callback: (changes: any[]) => void, remote?: boolean): () => void;
|
|
45
45
|
del(id: string, rev?: string): Promise<any>;
|
|
46
|
+
changes(clock?: any): Promise<{
|
|
47
|
+
rows: any[];
|
|
48
|
+
clock: any;
|
|
49
|
+
}>;
|
|
46
50
|
}
|
|
47
51
|
/**
|
|
48
52
|
* EncryptedStore class
|
|
@@ -56,7 +60,9 @@ export declare class EncryptedStore {
|
|
|
56
60
|
private knownIds;
|
|
57
61
|
private fullIdMap;
|
|
58
62
|
private isSubscribed;
|
|
63
|
+
private unsubscribe;
|
|
59
64
|
private connection;
|
|
65
|
+
private clock;
|
|
60
66
|
constructor(db: FireproofDb, password: string, listener: StoreListener);
|
|
61
67
|
/** Load all documents and set up change detection (call once after creating store) */
|
|
62
68
|
loadAll(): Promise<void>;
|
|
@@ -70,11 +76,13 @@ export declare class EncryptedStore {
|
|
|
70
76
|
connectRemote(connector: ConnectorFunction, options: RemoteConnectOptions): Promise<void>;
|
|
71
77
|
/** Disconnect from remote sync */
|
|
72
78
|
disconnectRemote(): void;
|
|
79
|
+
/** Reconnect subscription to ensure remote changes are received */
|
|
80
|
+
reconnect(): void;
|
|
73
81
|
/** Read all encrypted documents (without decrypting) */
|
|
74
82
|
private readAllEncrypted;
|
|
75
83
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
84
|
+
* Query db.changes() and process any new changes (external indexer pattern)
|
|
85
|
+
* This is called whenever the subscription fires
|
|
78
86
|
*/
|
|
79
87
|
private handleChange;
|
|
80
88
|
private decryptFromEncryptedData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryptedStore.d.ts","sourceRoot":"","sources":["../src/encryptedStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,UAAU,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,EAAE,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IAC1C,WAAW,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IAC5C,WAAW,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GAAG,CAC9B,EAAE,EAAE,WAAW,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,KACT,cAAc,CAAC;AAEpB,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,CACH,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACjD,OAAO,CAAC;QACT,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,GAAG,CAAC;YAAC,KAAK,CAAC,EAAE,GAAG,CAAA;SAAE,CAAC,CAAC;KACtD,CAAC,CAAC;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"encryptedStore.d.ts","sourceRoot":"","sources":["../src/encryptedStore.ts"],"names":[],"mappings":"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"}
|
package/dist/encryptedStore.js
CHANGED
|
@@ -15,7 +15,9 @@ export class EncryptedStore {
|
|
|
15
15
|
knownIds = new Set(); // Set of known document IDs (stripped, e.g., "alice")
|
|
16
16
|
fullIdMap = new Map(); // stripped id -> full id with table
|
|
17
17
|
isSubscribed = false;
|
|
18
|
+
unsubscribe = null; // Callback to unsubscribe from changes
|
|
18
19
|
connection = null;
|
|
20
|
+
clock = null; // High water mark for changes() API
|
|
19
21
|
constructor(db, password, listener) {
|
|
20
22
|
this.db = db;
|
|
21
23
|
this.encryptionHelper = new EncryptionHelper(password);
|
|
@@ -23,6 +25,8 @@ export class EncryptedStore {
|
|
|
23
25
|
}
|
|
24
26
|
/** Load all documents and set up change detection (call once after creating store) */
|
|
25
27
|
async loadAll() {
|
|
28
|
+
// Reconnect subscription to ensure we receive all changes
|
|
29
|
+
this.reconnect();
|
|
26
30
|
const { encryptedMap, fullIdMap } = await this.readAllEncrypted();
|
|
27
31
|
this.fullIdMap = fullIdMap;
|
|
28
32
|
// Build initial set of known IDs
|
|
@@ -38,20 +42,20 @@ export class EncryptedStore {
|
|
|
38
42
|
// Skip documents we can't decrypt
|
|
39
43
|
}
|
|
40
44
|
}
|
|
45
|
+
// Initialize clock for changes() API
|
|
46
|
+
try {
|
|
47
|
+
const result = await this.db.changes();
|
|
48
|
+
this.clock = result.clock;
|
|
49
|
+
console.log("[EncryptedStore] Initialized changes clock");
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
console.warn("[EncryptedStore] db.changes() not available, falling back to subscription only");
|
|
53
|
+
}
|
|
41
54
|
// Fire initial docsAdded for everything, grouped by table
|
|
42
55
|
if (docs.length > 0) {
|
|
43
56
|
const events = this.groupByTable(docs, fullIdMap);
|
|
44
57
|
this.listener.docsAdded(events);
|
|
45
58
|
}
|
|
46
|
-
// Set up subscribe (only once)
|
|
47
|
-
if (!this.isSubscribed) {
|
|
48
|
-
this.db.subscribe((changes) => {
|
|
49
|
-
this.handleChange(changes).catch((err) => {
|
|
50
|
-
console.error("EncryptedStore: Error handling change:", err);
|
|
51
|
-
});
|
|
52
|
-
}, true); // Include remote changes
|
|
53
|
-
this.isSubscribed = true;
|
|
54
|
-
}
|
|
55
59
|
}
|
|
56
60
|
/** Create or update a document */
|
|
57
61
|
async put(type, doc) {
|
|
@@ -120,6 +124,27 @@ export class EncryptedStore {
|
|
|
120
124
|
}
|
|
121
125
|
this.connection = null;
|
|
122
126
|
}
|
|
127
|
+
/** Reconnect subscription to ensure remote changes are received */
|
|
128
|
+
reconnect() {
|
|
129
|
+
// Cancel existing subscription if any
|
|
130
|
+
if (this.unsubscribe) {
|
|
131
|
+
console.log("[EncryptedStore] Canceling existing subscription");
|
|
132
|
+
this.unsubscribe();
|
|
133
|
+
this.unsubscribe = null;
|
|
134
|
+
this.isSubscribed = false;
|
|
135
|
+
}
|
|
136
|
+
// Re-subscribe to database changes
|
|
137
|
+
// We treat subscription as a "something changed" notification
|
|
138
|
+
// and always query db.changes() to get actual changes (external indexer pattern)
|
|
139
|
+
console.log("[EncryptedStore] Reconnecting subscription (remote=true)");
|
|
140
|
+
this.unsubscribe = this.db.subscribe(() => {
|
|
141
|
+
console.log("[EncryptedStore] Subscription notified - querying db.changes()");
|
|
142
|
+
this.handleChange().catch((err) => {
|
|
143
|
+
console.error("EncryptedStore: Error handling change:", err);
|
|
144
|
+
});
|
|
145
|
+
}, true); // Include remote changes
|
|
146
|
+
this.isSubscribed = true;
|
|
147
|
+
}
|
|
123
148
|
/** Read all encrypted documents (without decrypting) */
|
|
124
149
|
async readAllEncrypted() {
|
|
125
150
|
const result = await this.db.query("_id", { descending: false });
|
|
@@ -140,65 +165,82 @@ export class EncryptedStore {
|
|
|
140
165
|
return { encryptedMap, fullIdMap };
|
|
141
166
|
}
|
|
142
167
|
/**
|
|
143
|
-
*
|
|
144
|
-
*
|
|
168
|
+
* Query db.changes() and process any new changes (external indexer pattern)
|
|
169
|
+
* This is called whenever the subscription fires
|
|
145
170
|
*/
|
|
146
|
-
async handleChange(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
if (
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
171
|
+
async handleChange() {
|
|
172
|
+
try {
|
|
173
|
+
// Query changes since last clock
|
|
174
|
+
const result = await this.db.changes(this.clock);
|
|
175
|
+
console.log(`[EncryptedStore] db.changes() returned ${result.rows.length} changes`);
|
|
176
|
+
if (result.rows.length === 0) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// Update clock first
|
|
180
|
+
this.clock = result.clock;
|
|
181
|
+
// Transform db.changes() format to processable format
|
|
182
|
+
// db.changes() returns { key, value: { _id, d }, clock }
|
|
183
|
+
const changes = result.rows.map((row) => row.value);
|
|
184
|
+
const newDocs = [];
|
|
185
|
+
const changedDocs = [];
|
|
186
|
+
const deletedDocs = [];
|
|
187
|
+
for (const change of changes) {
|
|
188
|
+
if (change.d) {
|
|
189
|
+
// Has encrypted data - it's a create or update
|
|
190
|
+
try {
|
|
191
|
+
const { type, id } = this.parseFullId(change._id);
|
|
192
|
+
// Decrypt the document
|
|
193
|
+
const decrypted = await this.decryptFromEncryptedData(change.d, id);
|
|
194
|
+
// Check if it's new or changed
|
|
195
|
+
if (this.knownIds.has(id)) {
|
|
196
|
+
changedDocs.push(decrypted);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
newDocs.push(decrypted);
|
|
200
|
+
this.knownIds.add(id);
|
|
201
|
+
this.fullIdMap.set(id, change._id); // Update fullIdMap for new docs
|
|
202
|
+
}
|
|
160
203
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
this.knownIds.add(id);
|
|
164
|
-
this.fullIdMap.set(id, change._id); // Update fullIdMap for new docs
|
|
204
|
+
catch (error) {
|
|
205
|
+
// Skip documents we can't decrypt or parse
|
|
165
206
|
}
|
|
166
207
|
}
|
|
167
|
-
|
|
168
|
-
//
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
//
|
|
208
|
+
else {
|
|
209
|
+
// No encrypted data - it's a deletion
|
|
210
|
+
try {
|
|
211
|
+
const { type, id } = this.parseFullId(change._id);
|
|
212
|
+
if (this.knownIds.has(id)) {
|
|
213
|
+
deletedDocs.push({ _id: id });
|
|
214
|
+
this.knownIds.delete(id);
|
|
215
|
+
// Keep fullIdMap entry for the deletion event, remove after
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
// Skip invalid IDs
|
|
179
220
|
}
|
|
180
221
|
}
|
|
181
|
-
|
|
182
|
-
|
|
222
|
+
}
|
|
223
|
+
// Fire events grouped by table
|
|
224
|
+
console.log(`[EncryptedStore] Firing events: ${newDocs.length} new, ${changedDocs.length} changed, ${deletedDocs.length} deleted`);
|
|
225
|
+
if (newDocs.length > 0) {
|
|
226
|
+
const events = this.groupByTable(newDocs, this.fullIdMap);
|
|
227
|
+
this.listener.docsAdded(events);
|
|
228
|
+
}
|
|
229
|
+
if (changedDocs.length > 0) {
|
|
230
|
+
const events = this.groupByTable(changedDocs, this.fullIdMap);
|
|
231
|
+
this.listener.docsChanged(events);
|
|
232
|
+
}
|
|
233
|
+
if (deletedDocs.length > 0) {
|
|
234
|
+
const events = this.groupDeletedByTable(deletedDocs);
|
|
235
|
+
this.listener.docsDeleted(events);
|
|
236
|
+
// Clean up fullIdMap entries for deleted docs
|
|
237
|
+
for (const doc of deletedDocs) {
|
|
238
|
+
this.fullIdMap.delete(doc._id);
|
|
183
239
|
}
|
|
184
240
|
}
|
|
185
241
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const events = this.groupByTable(newDocs, this.fullIdMap);
|
|
189
|
-
this.listener.docsAdded(events);
|
|
190
|
-
}
|
|
191
|
-
if (changedDocs.length > 0) {
|
|
192
|
-
const events = this.groupByTable(changedDocs, this.fullIdMap);
|
|
193
|
-
this.listener.docsChanged(events);
|
|
194
|
-
}
|
|
195
|
-
if (deletedDocs.length > 0) {
|
|
196
|
-
const events = this.groupDeletedByTable(deletedDocs);
|
|
197
|
-
this.listener.docsDeleted(events);
|
|
198
|
-
// Clean up fullIdMap entries for deleted docs
|
|
199
|
-
for (const doc of deletedDocs) {
|
|
200
|
-
this.fullIdMap.delete(doc._id);
|
|
201
|
-
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
console.error("[EncryptedStore] db.changes() failed:", error);
|
|
202
244
|
}
|
|
203
245
|
}
|
|
204
246
|
async decryptFromEncryptedData(encryptedData, id) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryptedStore.js","sourceRoot":"","sources":["../src/encryptedStore.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"encryptedStore.js","sourceRoot":"","sources":["../src/encryptedStore.ts"],"names":[],"mappings":"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"}
|