@framers/sql-storage-adapter 0.4.2 → 0.5.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 (135) hide show
  1. package/README.md +94 -2
  2. package/dist/adapters/electron/electronMainAdapter.d.ts +241 -0
  3. package/dist/adapters/electron/electronMainAdapter.d.ts.map +1 -0
  4. package/dist/adapters/electron/electronMainAdapter.js +442 -0
  5. package/dist/adapters/electron/electronMainAdapter.js.map +1 -0
  6. package/dist/adapters/electron/electronRendererAdapter.d.ts +177 -0
  7. package/dist/adapters/electron/electronRendererAdapter.d.ts.map +1 -0
  8. package/dist/adapters/electron/electronRendererAdapter.js +339 -0
  9. package/dist/adapters/electron/electronRendererAdapter.js.map +1 -0
  10. package/dist/adapters/electron/index.d.ts +74 -0
  11. package/dist/adapters/electron/index.d.ts.map +1 -0
  12. package/dist/adapters/electron/index.js +96 -0
  13. package/dist/adapters/electron/index.js.map +1 -0
  14. package/dist/adapters/electron/ipc/channels.d.ts +196 -0
  15. package/dist/adapters/electron/ipc/channels.d.ts.map +1 -0
  16. package/dist/adapters/electron/ipc/channels.js +121 -0
  17. package/dist/adapters/electron/ipc/channels.js.map +1 -0
  18. package/dist/adapters/electron/ipc/index.d.ts +11 -0
  19. package/dist/adapters/electron/ipc/index.d.ts.map +1 -0
  20. package/dist/adapters/electron/ipc/index.js +11 -0
  21. package/dist/adapters/electron/ipc/index.js.map +1 -0
  22. package/dist/adapters/electron/ipc/protocol.d.ts +78 -0
  23. package/dist/adapters/electron/ipc/protocol.d.ts.map +1 -0
  24. package/dist/adapters/electron/ipc/protocol.js +347 -0
  25. package/dist/adapters/electron/ipc/protocol.js.map +1 -0
  26. package/dist/adapters/electron/ipc/types.d.ts +248 -0
  27. package/dist/adapters/electron/ipc/types.d.ts.map +1 -0
  28. package/dist/adapters/electron/ipc/types.js +8 -0
  29. package/dist/adapters/electron/ipc/types.js.map +1 -0
  30. package/dist/adapters/electron/migration/autoMigrator.d.ts +184 -0
  31. package/dist/adapters/electron/migration/autoMigrator.d.ts.map +1 -0
  32. package/dist/adapters/electron/migration/autoMigrator.js +478 -0
  33. package/dist/adapters/electron/migration/autoMigrator.js.map +1 -0
  34. package/dist/adapters/electron/migration/index.d.ts +9 -0
  35. package/dist/adapters/electron/migration/index.d.ts.map +1 -0
  36. package/dist/adapters/electron/migration/index.js +9 -0
  37. package/dist/adapters/electron/migration/index.js.map +1 -0
  38. package/dist/adapters/electron/preload.d.ts +126 -0
  39. package/dist/adapters/electron/preload.d.ts.map +1 -0
  40. package/dist/adapters/electron/preload.js +254 -0
  41. package/dist/adapters/electron/preload.js.map +1 -0
  42. package/dist/adapters/electron/recovery/corruptionDetector.d.ts +214 -0
  43. package/dist/adapters/electron/recovery/corruptionDetector.d.ts.map +1 -0
  44. package/dist/adapters/electron/recovery/corruptionDetector.js +410 -0
  45. package/dist/adapters/electron/recovery/corruptionDetector.js.map +1 -0
  46. package/dist/adapters/electron/recovery/index.d.ts +11 -0
  47. package/dist/adapters/electron/recovery/index.d.ts.map +1 -0
  48. package/dist/adapters/electron/recovery/index.js +11 -0
  49. package/dist/adapters/electron/recovery/index.js.map +1 -0
  50. package/dist/adapters/electron/recovery/walCheckpoint.d.ts +186 -0
  51. package/dist/adapters/electron/recovery/walCheckpoint.d.ts.map +1 -0
  52. package/dist/adapters/electron/recovery/walCheckpoint.js +302 -0
  53. package/dist/adapters/electron/recovery/walCheckpoint.js.map +1 -0
  54. package/dist/adapters/electron/window/index.d.ts +9 -0
  55. package/dist/adapters/electron/window/index.d.ts.map +1 -0
  56. package/dist/adapters/electron/window/index.js +9 -0
  57. package/dist/adapters/electron/window/index.js.map +1 -0
  58. package/dist/adapters/electron/window/windowManager.d.ts +190 -0
  59. package/dist/adapters/electron/window/windowManager.d.ts.map +1 -0
  60. package/dist/adapters/electron/window/windowManager.js +358 -0
  61. package/dist/adapters/electron/window/windowManager.js.map +1 -0
  62. package/dist/core/contracts/context.d.ts +2 -2
  63. package/dist/core/contracts/context.d.ts.map +1 -1
  64. package/dist/core/database.d.ts +19 -0
  65. package/dist/core/database.d.ts.map +1 -1
  66. package/dist/core/database.js +4 -0
  67. package/dist/core/database.js.map +1 -1
  68. package/dist/core/resolver.d.ts +3 -0
  69. package/dist/core/resolver.d.ts.map +1 -1
  70. package/dist/core/resolver.js +39 -3
  71. package/dist/core/resolver.js.map +1 -1
  72. package/dist/features/sync/conflicts/conflictResolver.d.ts +222 -0
  73. package/dist/features/sync/conflicts/conflictResolver.d.ts.map +1 -0
  74. package/dist/features/sync/conflicts/conflictResolver.js +396 -0
  75. package/dist/features/sync/conflicts/conflictResolver.js.map +1 -0
  76. package/dist/features/sync/conflicts/index.d.ts +9 -0
  77. package/dist/features/sync/conflicts/index.d.ts.map +1 -0
  78. package/dist/features/sync/conflicts/index.js +9 -0
  79. package/dist/features/sync/conflicts/index.js.map +1 -0
  80. package/dist/features/sync/crossPlatformSync.d.ts +281 -0
  81. package/dist/features/sync/crossPlatformSync.d.ts.map +1 -0
  82. package/dist/features/sync/crossPlatformSync.js +623 -0
  83. package/dist/features/sync/crossPlatformSync.js.map +1 -0
  84. package/dist/features/sync/devices/deviceManager.d.ts +243 -0
  85. package/dist/features/sync/devices/deviceManager.d.ts.map +1 -0
  86. package/dist/features/sync/devices/deviceManager.js +494 -0
  87. package/dist/features/sync/devices/deviceManager.js.map +1 -0
  88. package/dist/features/sync/devices/index.d.ts +10 -0
  89. package/dist/features/sync/devices/index.d.ts.map +1 -0
  90. package/dist/features/sync/devices/index.js +10 -0
  91. package/dist/features/sync/devices/index.js.map +1 -0
  92. package/dist/features/sync/index.d.ts +37 -0
  93. package/dist/features/sync/index.d.ts.map +1 -0
  94. package/dist/features/sync/index.js +47 -0
  95. package/dist/features/sync/index.js.map +1 -0
  96. package/dist/features/sync/protocol/index.d.ts +11 -0
  97. package/dist/features/sync/protocol/index.d.ts.map +1 -0
  98. package/dist/features/sync/protocol/index.js +11 -0
  99. package/dist/features/sync/protocol/index.js.map +1 -0
  100. package/dist/features/sync/protocol/messages.d.ts +348 -0
  101. package/dist/features/sync/protocol/messages.d.ts.map +1 -0
  102. package/dist/features/sync/protocol/messages.js +216 -0
  103. package/dist/features/sync/protocol/messages.js.map +1 -0
  104. package/dist/features/sync/protocol/vectorClock.d.ts +164 -0
  105. package/dist/features/sync/protocol/vectorClock.d.ts.map +1 -0
  106. package/dist/features/sync/protocol/vectorClock.js +286 -0
  107. package/dist/features/sync/protocol/vectorClock.js.map +1 -0
  108. package/dist/features/sync/tables/index.d.ts +10 -0
  109. package/dist/features/sync/tables/index.d.ts.map +1 -0
  110. package/dist/features/sync/tables/index.js +10 -0
  111. package/dist/features/sync/tables/index.js.map +1 -0
  112. package/dist/features/sync/tables/syncLogManager.d.ts +216 -0
  113. package/dist/features/sync/tables/syncLogManager.d.ts.map +1 -0
  114. package/dist/features/sync/tables/syncLogManager.js +456 -0
  115. package/dist/features/sync/tables/syncLogManager.js.map +1 -0
  116. package/dist/features/sync/transport/httpTransport.d.ts +123 -0
  117. package/dist/features/sync/transport/httpTransport.d.ts.map +1 -0
  118. package/dist/features/sync/transport/httpTransport.js +380 -0
  119. package/dist/features/sync/transport/httpTransport.js.map +1 -0
  120. package/dist/features/sync/transport/index.d.ts +12 -0
  121. package/dist/features/sync/transport/index.d.ts.map +1 -0
  122. package/dist/features/sync/transport/index.js +12 -0
  123. package/dist/features/sync/transport/index.js.map +1 -0
  124. package/dist/features/sync/transport/transport.d.ts +259 -0
  125. package/dist/features/sync/transport/transport.d.ts.map +1 -0
  126. package/dist/features/sync/transport/transport.js +153 -0
  127. package/dist/features/sync/transport/transport.js.map +1 -0
  128. package/dist/features/sync/transport/websocketTransport.d.ts +126 -0
  129. package/dist/features/sync/transport/websocketTransport.d.ts.map +1 -0
  130. package/dist/features/sync/transport/websocketTransport.js +374 -0
  131. package/dist/features/sync/transport/websocketTransport.js.map +1 -0
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +6 -0
  134. package/dist/index.js.map +1 -1
  135. package/package.json +21 -1
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Migration Module for Electron SQL Storage Adapter.
3
+ *
4
+ * Provides automatic database migration management for Electron applications.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ export { AutoMigrator, createAutoMigrator, type AutoMigratorConfig, type MigrationFile, type AppliedMigration, type MigrationResult, } from './autoMigrator';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/electron/migration/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Migration Module for Electron SQL Storage Adapter.
3
+ *
4
+ * Provides automatic database migration management for Electron applications.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ export { AutoMigrator, createAutoMigrator, } from './autoMigrator.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapters/electron/migration/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,YAAY,EACZ,kBAAkB,GAKnB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Preload Script for Electron SQL Storage Adapter.
3
+ *
4
+ * Exposes a secure API to renderer processes via contextBridge.
5
+ * This script runs in an isolated context with access to Node.js APIs
6
+ * and Electron's IPC modules.
7
+ *
8
+ * ## Security
9
+ * - Only exposes necessary functions via contextBridge
10
+ * - All IPC calls are wrapped with proper error handling
11
+ * - No direct access to Node.js modules from renderer
12
+ *
13
+ * ## Usage in main.js
14
+ * ```javascript
15
+ * new BrowserWindow({
16
+ * webPreferences: {
17
+ * preload: path.join(__dirname, 'preload.js'),
18
+ * contextIsolation: true,
19
+ * nodeIntegration: false,
20
+ * }
21
+ * });
22
+ * ```
23
+ */
24
+ import type { TransactionContext, SyncStatus, DbChangeEvent } from './ipc/types';
25
+ import type { StorageRunResult, StorageOpenOptions, StorageParameters, BatchOperation, BatchResult, StorageCapability } from '../../core/contracts';
26
+ /**
27
+ * SQL Storage API exposed to renderer processes.
28
+ */
29
+ declare const sqlStorageApi: {
30
+ /**
31
+ * Open the database connection.
32
+ */
33
+ open(options?: StorageOpenOptions): Promise<void>;
34
+ /**
35
+ * Close the database connection.
36
+ */
37
+ close(): Promise<void>;
38
+ /**
39
+ * Check if the database is open.
40
+ */
41
+ isOpen(): Promise<boolean>;
42
+ /**
43
+ * Get adapter capabilities.
44
+ */
45
+ getCapabilities(): Promise<StorageCapability[]>;
46
+ /**
47
+ * Execute a mutation statement (INSERT, UPDATE, DELETE).
48
+ */
49
+ run(statement: string, parameters?: StorageParameters): Promise<StorageRunResult>;
50
+ /**
51
+ * Get a single row.
52
+ */
53
+ get<T = unknown>(statement: string, parameters?: StorageParameters): Promise<T | null>;
54
+ /**
55
+ * Get all matching rows.
56
+ */
57
+ all<T = unknown>(statement: string, parameters?: StorageParameters): Promise<T[]>;
58
+ /**
59
+ * Execute a SQL script.
60
+ */
61
+ exec(script: string): Promise<void>;
62
+ /**
63
+ * Execute batch operations.
64
+ */
65
+ batch(operations: BatchOperation[]): Promise<BatchResult>;
66
+ /**
67
+ * Begin a transaction.
68
+ */
69
+ beginTransaction(): Promise<TransactionContext>;
70
+ /**
71
+ * Commit a transaction.
72
+ */
73
+ commitTransaction(transactionId: string): Promise<void>;
74
+ /**
75
+ * Rollback a transaction.
76
+ */
77
+ rollbackTransaction(transactionId: string): Promise<void>;
78
+ /**
79
+ * Execute an operation within a transaction.
80
+ */
81
+ executeInTransaction(transactionId: string, statement: string, parameters?: StorageParameters): Promise<StorageRunResult | unknown[]>;
82
+ /**
83
+ * Execute a callback within a transaction (convenience method).
84
+ * Automatically handles begin/commit/rollback.
85
+ */
86
+ transaction<T>(fn: (trx: {
87
+ run: (statement: string, parameters?: StorageParameters) => Promise<StorageRunResult>;
88
+ get: <R = unknown>(statement: string, parameters?: StorageParameters) => Promise<R | null>;
89
+ all: <R = unknown>(statement: string, parameters?: StorageParameters) => Promise<R[]>;
90
+ }) => Promise<T>): Promise<T>;
91
+ /**
92
+ * Get sync status.
93
+ */
94
+ getSyncStatus(): Promise<SyncStatus>;
95
+ /**
96
+ * Trigger manual sync.
97
+ */
98
+ triggerSync(): Promise<void>;
99
+ /**
100
+ * Subscribe to database change events.
101
+ */
102
+ onDatabaseChange(callback: (event: DbChangeEvent) => void): () => void;
103
+ /**
104
+ * Subscribe to sync progress events.
105
+ */
106
+ onSyncProgress(callback: (progress: number) => void): () => void;
107
+ /**
108
+ * Subscribe to sync complete events.
109
+ */
110
+ onSyncComplete(callback: () => void): () => void;
111
+ /**
112
+ * Subscribe to sync error events.
113
+ */
114
+ onSyncError(callback: (error: Error) => void): () => void;
115
+ };
116
+ /**
117
+ * Type declaration for window.sqlStorage.
118
+ */
119
+ export type SqlStorageApi = typeof sqlStorageApi;
120
+ export { sqlStorageApi };
121
+ declare global {
122
+ interface Window {
123
+ sqlStorage: SqlStorageApi;
124
+ }
125
+ }
126
+ //# sourceMappingURL=preload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../../src/adapters/electron/preload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,OAAO,KAAK,EAOV,kBAAkB,EAElB,UAAU,EACV,aAAa,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AA4C9B;;GAEG;AACH,QAAA,MAAM,aAAa;IAKjB;;OAEG;mBACkB,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD;;OAEG;aACY,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;cACa,OAAO,CAAC,OAAO,CAAC;IAIhC;;OAEG;uBACsB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAIrD;;OAEG;mBACkB,MAAM,eAAe,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAKvF;;OAEG;QACO,CAAC,uBAAuB,MAAM,eAAe,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK5F;;OAEG;QACO,CAAC,uBAAuB,MAAM,eAAe,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAKvF;;OAEG;iBACgB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC;;OAEG;sBACqB,cAAc,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAS/D;;OAEG;wBACuB,OAAO,CAAC,kBAAkB,CAAC;IAIrD;;OAEG;qCACoC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D;;OAEG;uCACsC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D;;OAEG;wCAEc,MAAM,aACV,MAAM,eACJ,iBAAiB,GAC7B,OAAO,CAAC,gBAAgB,GAAG,OAAO,EAAE,CAAC;IAQxC;;;OAGG;gBACe,CAAC,MACb,CAAC,GAAG,EAAE;QACR,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACtF,GAAG,EAAE,CAAC,CAAW,GAAP,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3F,GAAG,EAAE,CAAC,CAAW,GAAP,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;KACvF,KAAK,OAAO,CAAC,CAAC,CAAC,GACf,OAAO,CAAC,CAAC,CAAC;IAkCb;;OAEG;qBACoB,OAAO,CAAC,UAAU,CAAC;IAI1C;;OAEG;mBACkB,OAAO,CAAC,IAAI,CAAC;IAQlC;;OAEG;+BACwB,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;IAQtE;;OAEG;6BACsB,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI;IAQhE;;OAEG;6BACsB,MAAM,IAAI,GAAG,MAAM,IAAI;IAMhD;;OAEG;0BACmB,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,MAAM,IAAI;CAO1D,CAAC;AAMF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC;AAQjD,OAAO,EAAE,aAAa,EAAE,CAAC;AAMzB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,UAAU,EAAE,aAAa,CAAC;KAC3B;CACF"}
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Preload Script for Electron SQL Storage Adapter.
3
+ *
4
+ * Exposes a secure API to renderer processes via contextBridge.
5
+ * This script runs in an isolated context with access to Node.js APIs
6
+ * and Electron's IPC modules.
7
+ *
8
+ * ## Security
9
+ * - Only exposes necessary functions via contextBridge
10
+ * - All IPC calls are wrapped with proper error handling
11
+ * - No direct access to Node.js modules from renderer
12
+ *
13
+ * ## Usage in main.js
14
+ * ```javascript
15
+ * new BrowserWindow({
16
+ * webPreferences: {
17
+ * preload: path.join(__dirname, 'preload.js'),
18
+ * contextIsolation: true,
19
+ * nodeIntegration: false,
20
+ * }
21
+ * });
22
+ * ```
23
+ */
24
+ import { contextBridge, ipcRenderer } from 'electron';
25
+ import { DB_CHANNELS, TRANSACTION_CHANNELS, SYNC_CHANNELS, BROADCAST_CHANNELS } from './ipc/channels.js';
26
+ // ============================================================================
27
+ // Helper Functions
28
+ // ============================================================================
29
+ /**
30
+ * Generate a unique message ID for request correlation.
31
+ */
32
+ function generateMessageId() {
33
+ return `msg_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
34
+ }
35
+ /**
36
+ * Create a typed IPC request.
37
+ */
38
+ function createRequest(payload) {
39
+ return {
40
+ messageId: generateMessageId(),
41
+ payload,
42
+ timestamp: Date.now(),
43
+ };
44
+ }
45
+ /**
46
+ * Invoke IPC and handle response.
47
+ */
48
+ async function invokeIpc(channel, payload) {
49
+ const request = createRequest(payload);
50
+ const response = await ipcRenderer.invoke(channel, request);
51
+ if (!response.success) {
52
+ const error = new Error(response.error?.message ?? 'Unknown IPC error');
53
+ error.name = response.error?.code ?? 'IpcError';
54
+ throw error;
55
+ }
56
+ return response.data;
57
+ }
58
+ // ============================================================================
59
+ // SQL Storage API
60
+ // ============================================================================
61
+ /**
62
+ * SQL Storage API exposed to renderer processes.
63
+ */
64
+ const sqlStorageApi = {
65
+ // ============================================================================
66
+ // Database Operations
67
+ // ============================================================================
68
+ /**
69
+ * Open the database connection.
70
+ */
71
+ async open(options) {
72
+ const payload = { options };
73
+ await invokeIpc(DB_CHANNELS.OPEN, payload);
74
+ },
75
+ /**
76
+ * Close the database connection.
77
+ */
78
+ async close() {
79
+ await invokeIpc(DB_CHANNELS.CLOSE, undefined);
80
+ },
81
+ /**
82
+ * Check if the database is open.
83
+ */
84
+ async isOpen() {
85
+ return invokeIpc(DB_CHANNELS.IS_OPEN, undefined);
86
+ },
87
+ /**
88
+ * Get adapter capabilities.
89
+ */
90
+ async getCapabilities() {
91
+ return invokeIpc(DB_CHANNELS.CAPABILITIES, undefined);
92
+ },
93
+ /**
94
+ * Execute a mutation statement (INSERT, UPDATE, DELETE).
95
+ */
96
+ async run(statement, parameters) {
97
+ const payload = { statement, parameters };
98
+ return invokeIpc(DB_CHANNELS.RUN, payload);
99
+ },
100
+ /**
101
+ * Get a single row.
102
+ */
103
+ async get(statement, parameters) {
104
+ const payload = { statement, parameters };
105
+ return invokeIpc(DB_CHANNELS.GET, payload);
106
+ },
107
+ /**
108
+ * Get all matching rows.
109
+ */
110
+ async all(statement, parameters) {
111
+ const payload = { statement, parameters };
112
+ return invokeIpc(DB_CHANNELS.ALL, payload);
113
+ },
114
+ /**
115
+ * Execute a SQL script.
116
+ */
117
+ async exec(script) {
118
+ const payload = { script };
119
+ await invokeIpc(DB_CHANNELS.EXEC, payload);
120
+ },
121
+ /**
122
+ * Execute batch operations.
123
+ */
124
+ async batch(operations) {
125
+ const payload = { operations };
126
+ return invokeIpc(DB_CHANNELS.BATCH, payload);
127
+ },
128
+ // ============================================================================
129
+ // Transaction Operations
130
+ // ============================================================================
131
+ /**
132
+ * Begin a transaction.
133
+ */
134
+ async beginTransaction() {
135
+ return invokeIpc(TRANSACTION_CHANNELS.BEGIN, undefined);
136
+ },
137
+ /**
138
+ * Commit a transaction.
139
+ */
140
+ async commitTransaction(transactionId) {
141
+ await invokeIpc(TRANSACTION_CHANNELS.COMMIT, { transactionId });
142
+ },
143
+ /**
144
+ * Rollback a transaction.
145
+ */
146
+ async rollbackTransaction(transactionId) {
147
+ await invokeIpc(TRANSACTION_CHANNELS.ROLLBACK, { transactionId });
148
+ },
149
+ /**
150
+ * Execute an operation within a transaction.
151
+ */
152
+ async executeInTransaction(transactionId, statement, parameters) {
153
+ const payload = {
154
+ transactionId,
155
+ operation: { statement, parameters },
156
+ };
157
+ return invokeIpc(TRANSACTION_CHANNELS.EXECUTE, payload);
158
+ },
159
+ /**
160
+ * Execute a callback within a transaction (convenience method).
161
+ * Automatically handles begin/commit/rollback.
162
+ */
163
+ async transaction(fn) {
164
+ const ctx = await this.beginTransaction();
165
+ const trx = {
166
+ run: async (statement, parameters) => {
167
+ const result = await this.executeInTransaction(ctx.transactionId, statement, parameters);
168
+ return result;
169
+ },
170
+ get: async (statement, parameters) => {
171
+ const result = await this.executeInTransaction(ctx.transactionId, statement, parameters);
172
+ return (Array.isArray(result) ? result[0] ?? null : null);
173
+ },
174
+ all: async (statement, parameters) => {
175
+ const result = await this.executeInTransaction(ctx.transactionId, statement, parameters);
176
+ return (Array.isArray(result) ? result : []);
177
+ },
178
+ };
179
+ try {
180
+ const result = await fn(trx);
181
+ await this.commitTransaction(ctx.transactionId);
182
+ return result;
183
+ }
184
+ catch (error) {
185
+ await this.rollbackTransaction(ctx.transactionId).catch(() => {
186
+ // Ignore rollback errors
187
+ });
188
+ throw error;
189
+ }
190
+ },
191
+ // ============================================================================
192
+ // Sync Operations
193
+ // ============================================================================
194
+ /**
195
+ * Get sync status.
196
+ */
197
+ async getSyncStatus() {
198
+ return invokeIpc(SYNC_CHANNELS.STATUS, undefined);
199
+ },
200
+ /**
201
+ * Trigger manual sync.
202
+ */
203
+ async triggerSync() {
204
+ await invokeIpc(SYNC_CHANNELS.TRIGGER, undefined);
205
+ },
206
+ // ============================================================================
207
+ // Event Subscriptions
208
+ // ============================================================================
209
+ /**
210
+ * Subscribe to database change events.
211
+ */
212
+ onDatabaseChange(callback) {
213
+ const handler = (_, event) => {
214
+ callback(event);
215
+ };
216
+ ipcRenderer.on(BROADCAST_CHANNELS.DB_CHANGE, handler);
217
+ return () => ipcRenderer.removeListener(BROADCAST_CHANNELS.DB_CHANGE, handler);
218
+ },
219
+ /**
220
+ * Subscribe to sync progress events.
221
+ */
222
+ onSyncProgress(callback) {
223
+ const handler = (_, progress) => {
224
+ callback(progress);
225
+ };
226
+ ipcRenderer.on(SYNC_CHANNELS.PROGRESS, handler);
227
+ return () => ipcRenderer.removeListener(SYNC_CHANNELS.PROGRESS, handler);
228
+ },
229
+ /**
230
+ * Subscribe to sync complete events.
231
+ */
232
+ onSyncComplete(callback) {
233
+ const handler = () => callback();
234
+ ipcRenderer.on(SYNC_CHANNELS.COMPLETE, handler);
235
+ return () => ipcRenderer.removeListener(SYNC_CHANNELS.COMPLETE, handler);
236
+ },
237
+ /**
238
+ * Subscribe to sync error events.
239
+ */
240
+ onSyncError(callback) {
241
+ const handler = (_, error) => {
242
+ callback(new Error(error.message));
243
+ };
244
+ ipcRenderer.on(SYNC_CHANNELS.ERROR, handler);
245
+ return () => ipcRenderer.removeListener(SYNC_CHANNELS.ERROR, handler);
246
+ },
247
+ };
248
+ // Only expose if contextBridge is available (running in Electron)
249
+ if (contextBridge) {
250
+ contextBridge.exposeInMainWorld('sqlStorage', sqlStorageApi);
251
+ }
252
+ // Export for testing and direct use
253
+ export { sqlStorageApi };
254
+ //# sourceMappingURL=preload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.js","sourceRoot":"","sources":["../../../src/adapters/electron/preload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Database Corruption Detection and Auto-Repair.
3
+ *
4
+ * Provides integrity checking and automatic repair capabilities
5
+ * for SQLite databases. Detects corruption early and attempts
6
+ * recovery before data loss occurs.
7
+ *
8
+ * ## Detection Methods
9
+ * - SQLite integrity_check PRAGMA
10
+ * - Quick check (faster, less thorough)
11
+ * - Foreign key constraint validation
12
+ * - Index integrity verification
13
+ *
14
+ * ## Repair Strategies
15
+ * - VACUUM: Rebuilds entire database
16
+ * - REINDEX: Rebuilds all indexes
17
+ * - Export/Import: Last resort recovery
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const detector = new CorruptionDetector(adapter, {
22
+ * checkOnOpen: true,
23
+ * autoRepair: true,
24
+ * backupBeforeRepair: true,
25
+ * });
26
+ *
27
+ * const result = await detector.runFullCheck();
28
+ * if (!result.isHealthy) {
29
+ * await detector.attemptRepair();
30
+ * }
31
+ * ```
32
+ */
33
+ import type { StorageAdapter } from '../../../core/contracts';
34
+ /**
35
+ * Integrity check level.
36
+ */
37
+ export type IntegrityCheckLevel = 'quick' | 'full' | 'thorough';
38
+ /**
39
+ * Corruption detection configuration.
40
+ */
41
+ export interface CorruptionDetectorConfig {
42
+ /** Run check when database is opened (default: true) */
43
+ checkOnOpen?: boolean;
44
+ /** Attempt automatic repair on corruption (default: true) */
45
+ autoRepair?: boolean;
46
+ /** Create backup before repair (default: true) */
47
+ backupBeforeRepair?: boolean;
48
+ /** Maximum time for integrity check in ms (default: 60000) */
49
+ checkTimeout?: number;
50
+ /** Check level (default: 'quick') */
51
+ defaultCheckLevel?: IntegrityCheckLevel;
52
+ /** Enable verbose logging (default: false) */
53
+ verbose?: boolean;
54
+ }
55
+ /**
56
+ * Single corruption issue.
57
+ */
58
+ export interface CorruptionIssue {
59
+ /** Issue type */
60
+ type: 'data' | 'index' | 'foreign_key' | 'structure' | 'unknown';
61
+ /** Affected table (if identifiable) */
62
+ table?: string;
63
+ /** Detailed message */
64
+ message: string;
65
+ /** Severity level */
66
+ severity: 'warning' | 'error' | 'critical';
67
+ /** Whether this issue is repairable */
68
+ repairable: boolean;
69
+ }
70
+ /**
71
+ * Result of an integrity check.
72
+ */
73
+ export interface IntegrityCheckResult {
74
+ /** Whether the database is healthy */
75
+ isHealthy: boolean;
76
+ /** Check level performed */
77
+ level: IntegrityCheckLevel;
78
+ /** List of issues found */
79
+ issues: CorruptionIssue[];
80
+ /** Time taken in milliseconds */
81
+ durationMs: number;
82
+ /** Timestamp of check */
83
+ timestamp: number;
84
+ /** Pages checked (full check only) */
85
+ pagesChecked?: number;
86
+ /** Total database size in bytes */
87
+ databaseSize?: number;
88
+ }
89
+ /**
90
+ * Repair strategy.
91
+ */
92
+ export type RepairStrategy = 'vacuum' | 'reindex' | 'export_import';
93
+ /**
94
+ * Result of a repair attempt.
95
+ */
96
+ export interface RepairResult {
97
+ /** Whether repair was successful */
98
+ success: boolean;
99
+ /** Strategy used */
100
+ strategy: RepairStrategy;
101
+ /** Issues fixed */
102
+ issuesFixed: number;
103
+ /** Issues remaining */
104
+ issuesRemaining: number;
105
+ /** Time taken in milliseconds */
106
+ durationMs: number;
107
+ /** Backup path (if created) */
108
+ backupPath?: string;
109
+ /** Error message if failed */
110
+ error?: string;
111
+ }
112
+ /**
113
+ * Database Corruption Detector.
114
+ *
115
+ * Detects and repairs SQLite database corruption.
116
+ */
117
+ export declare class CorruptionDetector {
118
+ private readonly adapter;
119
+ private readonly config;
120
+ private lastCheck;
121
+ private repairHistory;
122
+ constructor(adapter: StorageAdapter, config?: CorruptionDetectorConfig);
123
+ /**
124
+ * Run a quick integrity check.
125
+ * Faster but less thorough than full check.
126
+ */
127
+ runQuickCheck(): Promise<IntegrityCheckResult>;
128
+ /**
129
+ * Run a full integrity check.
130
+ * Checks all pages and structures.
131
+ */
132
+ runFullCheck(): Promise<IntegrityCheckResult>;
133
+ /**
134
+ * Run a thorough integrity check.
135
+ * Includes foreign key and index validation.
136
+ */
137
+ runThoroughCheck(): Promise<IntegrityCheckResult>;
138
+ /**
139
+ * Run an integrity check at the specified level.
140
+ */
141
+ private runCheck;
142
+ /**
143
+ * Parse integrity check results into structured issues.
144
+ */
145
+ private parseIntegrityResults;
146
+ /**
147
+ * Check foreign key constraints.
148
+ */
149
+ private checkForeignKeys;
150
+ /**
151
+ * Check index integrity.
152
+ */
153
+ private checkIndexes;
154
+ /**
155
+ * Attempt to repair the database.
156
+ */
157
+ attemptRepair(strategy?: RepairStrategy): Promise<RepairResult>;
158
+ /**
159
+ * Select the best repair strategy based on issues found.
160
+ */
161
+ private selectRepairStrategy;
162
+ /**
163
+ * Repair using VACUUM.
164
+ */
165
+ private repairWithVacuum;
166
+ /**
167
+ * Repair using REINDEX.
168
+ */
169
+ private repairWithReindex;
170
+ /**
171
+ * Repair using export/import.
172
+ * This is a last resort that exports all data and recreates the database.
173
+ */
174
+ private repairWithExportImport;
175
+ /**
176
+ * Create a backup of the database.
177
+ */
178
+ private createBackup;
179
+ /**
180
+ * Get the last integrity check result.
181
+ */
182
+ getLastCheck(): IntegrityCheckResult | null;
183
+ /**
184
+ * Get repair history.
185
+ */
186
+ getRepairHistory(): RepairResult[];
187
+ /**
188
+ * Check if the database appears healthy.
189
+ */
190
+ isHealthy(): boolean;
191
+ /**
192
+ * Get summary of database health.
193
+ */
194
+ getHealthSummary(): {
195
+ isHealthy: boolean;
196
+ lastCheckAt: number | null;
197
+ issueCount: number;
198
+ repairAttempts: number;
199
+ successfulRepairs: number;
200
+ };
201
+ /**
202
+ * Log a message if verbose mode is enabled.
203
+ */
204
+ private log;
205
+ }
206
+ /**
207
+ * Create a Corruption Detector.
208
+ *
209
+ * @param adapter - Storage adapter to monitor
210
+ * @param config - Detector configuration
211
+ * @returns CorruptionDetector instance
212
+ */
213
+ export declare function createCorruptionDetector(adapter: StorageAdapter, config?: CorruptionDetectorConfig): CorruptionDetector;
214
+ //# sourceMappingURL=corruptionDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corruptionDetector.d.ts","sourceRoot":"","sources":["../../../../src/adapters/electron/recovery/corruptionDetector.ts"],"names":[],"mappings":"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"}