@mrbelloc/encrypted-store 0.2.3 → 1.3.1

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 (56) hide show
  1. package/README.md +385 -117
  2. package/dist/encryptedStore.d.ts +55 -72
  3. package/dist/encryptedStore.d.ts.map +1 -1
  4. package/dist/encryptedStore.js +299 -270
  5. package/dist/encryptedStore.js.map +1 -1
  6. package/dist/encryption.d.ts +1 -6
  7. package/dist/encryption.d.ts.map +1 -1
  8. package/dist/encryption.js +3 -5
  9. package/dist/encryption.js.map +1 -1
  10. package/dist/index.d.ts +6 -5
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +7 -4
  13. package/dist/index.js.map +1 -1
  14. package/dist/kb-dir-partykit/_test_db_1_1768430534431_data_.json +4 -0
  15. package/dist/kb-dir-partykit/_test_db_1_1768430534431_idx_data_.json +4 -0
  16. package/dist/kb-dir-partykit/_test_db_1_1768430534431_idx_meta_.json +4 -0
  17. package/dist/kb-dir-partykit/_test_db_1_1768430534431_idx_wal_.json +4 -0
  18. package/dist/kb-dir-partykit/_test_db_1_1768430534431_meta_.json +4 -0
  19. package/dist/kb-dir-partykit/_test_db_1_1768430534431_wal_.json +4 -0
  20. package/dist/kb-dir-partykit/_test_db_2_1768430536612_data_.json +4 -0
  21. package/dist/kb-dir-partykit/_test_db_2_1768430536612_idx_data_.json +4 -0
  22. package/dist/kb-dir-partykit/_test_db_2_1768430536612_idx_meta_.json +4 -0
  23. package/dist/kb-dir-partykit/_test_db_2_1768430536612_idx_wal_.json +4 -0
  24. package/dist/kb-dir-partykit/_test_db_2_1768430536612_meta_.json +4 -0
  25. package/dist/kb-dir-partykit/_test_db_2_1768430536612_wal_.json +4 -0
  26. package/dist/kb-dir-partykit/_test_sync_db_1768430808558_data_.json +4 -0
  27. package/dist/kb-dir-partykit/_test_sync_db_1768430808558_idx_data_.json +4 -0
  28. package/dist/kb-dir-partykit/_test_sync_db_1768430808558_idx_meta_.json +4 -0
  29. package/dist/kb-dir-partykit/_test_sync_db_1768430808558_idx_wal_.json +4 -0
  30. package/dist/kb-dir-partykit/_test_sync_db_1768430808558_meta_.json +4 -0
  31. package/dist/kb-dir-partykit/_test_sync_db_1768430808558_wal_.json +4 -0
  32. package/dist/kb-dir-partykit/_test_sync_db_1768430839116_data_.json +4 -0
  33. package/dist/kb-dir-partykit/_test_sync_db_1768430839116_idx_data_.json +4 -0
  34. package/dist/kb-dir-partykit/_test_sync_db_1768430839116_idx_meta_.json +4 -0
  35. package/dist/kb-dir-partykit/_test_sync_db_1768430839116_idx_wal_.json +4 -0
  36. package/dist/kb-dir-partykit/_test_sync_db_1768430839116_meta_.json +4 -0
  37. package/dist/kb-dir-partykit/_test_sync_db_1768430839116_wal_.json +4 -0
  38. package/dist/kb-dir-partykit/_test_sync_db_1768430931049_data_.json +4 -0
  39. package/dist/kb-dir-partykit/_test_sync_db_1768430931049_idx_data_.json +4 -0
  40. package/dist/kb-dir-partykit/_test_sync_db_1768430931049_idx_meta_.json +4 -0
  41. package/dist/kb-dir-partykit/_test_sync_db_1768430931049_idx_wal_.json +4 -0
  42. package/dist/kb-dir-partykit/_test_sync_db_1768430931049_meta_.json +4 -0
  43. package/dist/kb-dir-partykit/_test_sync_db_1768430931049_wal_.json +4 -0
  44. package/dist/kb-dir-partykit/_test_sync_db_1768430955075_data_.json +4 -0
  45. package/dist/kb-dir-partykit/_test_sync_db_1768430955075_idx_data_.json +4 -0
  46. package/dist/kb-dir-partykit/_test_sync_db_1768430955075_idx_meta_.json +4 -0
  47. package/dist/kb-dir-partykit/_test_sync_db_1768430955075_idx_wal_.json +4 -0
  48. package/dist/kb-dir-partykit/_test_sync_db_1768430955075_meta_.json +4 -0
  49. package/dist/kb-dir-partykit/_test_sync_db_1768430955075_wal_.json +4 -0
  50. package/dist/kb-dir-partykit/_test_sync_db_1768522643733_data_.json +4 -0
  51. package/dist/kb-dir-partykit/_test_sync_db_1768522643733_idx_data_.json +4 -0
  52. package/dist/kb-dir-partykit/_test_sync_db_1768522643733_idx_meta_.json +4 -0
  53. package/dist/kb-dir-partykit/_test_sync_db_1768522643733_idx_wal_.json +4 -0
  54. package/dist/kb-dir-partykit/_test_sync_db_1768522643733_meta_.json +4 -0
  55. package/dist/kb-dir-partykit/_test_sync_db_1768522643733_wal_.json +4 -0
  56. package/package.json +14 -9
@@ -1,97 +1,80 @@
1
1
  /**
2
- * Encrypted storage with change detection for small datasets
3
- * Wraps Fireproof with AES-256-GCM encryption + real-time event system
2
+ * Encrypted storage with change detection using PouchDB
3
+ * Simple API: put, get, delete, loadAll
4
4
  */
5
- interface Doc {
5
+ export interface Doc {
6
6
  _id: string;
7
+ _table: string;
7
8
  [key: string]: any;
8
9
  }
9
- export interface TableEvent {
10
- table: string;
11
- docs: Doc[];
10
+ export interface DecryptionErrorEvent {
11
+ docId: string;
12
+ error: Error;
13
+ rawDoc: any;
12
14
  }
13
- export interface StoreListener {
14
- docsAdded: (events: TableEvent[]) => void;
15
- docsChanged: (events: TableEvent[]) => void;
16
- docsDeleted: (events: TableEvent[]) => void;
15
+ export interface ConflictInfo {
16
+ docId: string;
17
+ table: string;
18
+ id: string;
19
+ currentRev: string;
20
+ conflictRevs: string[];
21
+ winner: Doc;
22
+ losers: Doc[];
17
23
  }
18
- export interface RemoteConnectOptions {
19
- namespace: string;
20
- host: string;
24
+ export interface SyncInfo {
25
+ direction: "push" | "pull" | "both";
26
+ change: {
27
+ docs_read?: number;
28
+ docs_written?: number;
29
+ doc_write_failures?: number;
30
+ errors?: any[];
31
+ };
21
32
  }
22
- export interface SyncConnection {
23
- ready?: Promise<void>;
24
- disconnect?: () => void;
33
+ export interface StoreListener {
34
+ onChange: (docs: Doc[]) => void;
35
+ onDelete: (docs: Doc[]) => void;
36
+ onConflict?: (conflicts: ConflictInfo[]) => void;
37
+ onSync?: (info: SyncInfo) => void;
38
+ onError?: (errors: DecryptionErrorEvent[]) => void;
25
39
  }
26
- export type ConnectorFunction = (db: FireproofDb, namespace: string, host: string) => SyncConnection;
27
- export interface FireproofDb {
28
- put(doc: any): Promise<{
29
- id: string;
30
- rev?: string;
31
- }>;
32
- get(id: string): Promise<any>;
33
- query(field: string, options?: {
34
- limit?: number;
35
- descending?: boolean;
36
- }): Promise<{
37
- docs?: any[];
38
- rows: Array<{
39
- key: string;
40
- doc?: any;
41
- value?: any;
42
- }>;
43
- }>;
44
- subscribe(callback: (changes: any[]) => void, remote?: boolean): () => void;
45
- del(id: string, rev?: string): Promise<any>;
46
- changes(clock?: any): Promise<{
47
- rows: any[];
48
- clock: any;
49
- }>;
40
+ export interface RemoteOptions {
41
+ url: string;
42
+ live?: boolean;
43
+ retry?: boolean;
50
44
  }
51
- /**
52
- * EncryptedStore class
53
- *
54
- * Main entry point for encrypted storage with change detection
55
- */
56
45
  export declare class EncryptedStore {
57
46
  private db;
58
47
  private encryptionHelper;
59
48
  private listener;
60
- private knownIds;
61
- private fullIdMap;
62
- private isSubscribed;
63
- private unsubscribe;
64
- private connection;
65
- private clock;
66
- constructor(db: FireproofDb, password: string, listener: StoreListener);
67
- /** Load all documents and set up change detection (call once after creating store) */
49
+ private changesHandler;
50
+ private syncHandler;
51
+ private processingChain;
52
+ constructor(db: PouchDB.Database, password: string, listener?: StoreListener);
53
+ /** Load all documents and set up change detection */
68
54
  loadAll(): Promise<void>;
69
55
  /** Create or update a document */
70
- put(type: string, doc: any): Promise<Doc>;
71
- /** Get a document (returns null if not found) */
72
- get(type: string, id: string): Promise<Doc | null>;
56
+ put(table: string, doc: any): Promise<Doc>;
57
+ /** Get a document by table and id */
58
+ get(table: string, id: string): Promise<Doc | null>;
73
59
  /** Delete a document */
74
- delete(type: string, id: string): Promise<void>;
75
- /** Connect to remote sync with any Fireproof connector */
76
- connectRemote(connector: ConnectorFunction, options: RemoteConnectOptions): Promise<void>;
60
+ delete(table: string, id: string): Promise<void>;
61
+ /** Get all documents (optionally filtered by table) */
62
+ getAll(table?: string): Promise<Doc[]>;
63
+ /** Connect to remote CouchDB for sync */
64
+ connectRemote(options: RemoteOptions): Promise<void>;
77
65
  /** Disconnect from remote sync */
78
66
  disconnectRemote(): void;
79
- /** Reconnect subscription to ensure remote changes are received */
67
+ /** Resolve a conflict by choosing the winner */
68
+ resolveConflict(table: string, id: string, winningDoc: Doc): Promise<void>;
69
+ /** Check if a document has conflicts without triggering the callback */
70
+ getConflictInfo(table: string, id: string): Promise<ConflictInfo | null>;
71
+ /** Re-subscribe to changes (useful after disconnect/reconnect) */
80
72
  reconnect(): void;
81
- /** Read all encrypted documents (without decrypting) */
82
- private readAllEncrypted;
83
- /**
84
- * Query db.changes() and process any new changes (external indexer pattern)
85
- * This is called whenever the subscription fires
86
- */
73
+ private setupSubscription;
87
74
  private handleChange;
88
- private decryptFromEncryptedData;
89
- private encryptDoc;
75
+ private buildConflictInfo;
90
76
  private decryptDoc;
77
+ private encryptDoc;
91
78
  private parseFullId;
92
- private generateId;
93
- private groupByTable;
94
- private groupDeletedByTable;
95
79
  }
96
- export {};
97
80
  //# sourceMappingURL=encryptedStore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"encryptedStore.d.ts","sourceRoot":"","sources":["../src/encryptedStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"encryptedStore.d.ts","sourceRoot":"","sources":["../src/encryptedStore.ts"],"names":[],"mappings":"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"}