@plures/pluresdb 1.6.10 → 2.9.7

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 (93) hide show
  1. package/README.md +97 -289
  2. package/crates/README.md +99 -0
  3. package/crates/pluresdb-node/README.md +181 -0
  4. package/crates/pluresdb-node/index.d.ts +0 -0
  5. package/crates/pluresdb-node/index.js +265 -0
  6. package/crates/pluresdb-node/package.json +35 -0
  7. package/dist/.tsbuildinfo +1 -1
  8. package/dist/napi/index.d.ts +38 -0
  9. package/dist/napi/index.d.ts.map +1 -0
  10. package/dist/napi/index.js +60 -0
  11. package/dist/napi/index.js.map +1 -0
  12. package/dist/node-index.d.ts +32 -0
  13. package/dist/node-index.d.ts.map +1 -1
  14. package/dist/node-index.js +52 -0
  15. package/dist/node-index.js.map +1 -1
  16. package/embedded.d.ts +1 -0
  17. package/embedded.js +46 -0
  18. package/package.json +21 -8
  19. package/examples/basic-usage.d.ts +0 -2
  20. package/examples/basic-usage.d.ts.map +0 -1
  21. package/examples/basic-usage.js +0 -26
  22. package/examples/basic-usage.js.map +0 -1
  23. package/examples/basic-usage.ts +0 -29
  24. package/examples/browser-demo/README.md +0 -204
  25. package/examples/browser-demo/index.html +0 -466
  26. package/examples/browser-wasm-integration.md +0 -411
  27. package/examples/ipc-demo/README.md +0 -127
  28. package/examples/local-first-usage.ts +0 -138
  29. package/examples/native-ipc-integration.md +0 -526
  30. package/examples/tauri-demo/README.md +0 -240
  31. package/examples/tauri-integration.md +0 -260
  32. package/examples/vscode-extension-example/README.md +0 -95
  33. package/examples/vscode-extension-example/package.json +0 -49
  34. package/examples/vscode-extension-example/src/extension.ts +0 -172
  35. package/examples/vscode-extension-example/tsconfig.json +0 -12
  36. package/examples/vscode-extension-integration.d.ts +0 -31
  37. package/examples/vscode-extension-integration.d.ts.map +0 -1
  38. package/examples/vscode-extension-integration.js +0 -319
  39. package/examples/vscode-extension-integration.js.map +0 -1
  40. package/examples/vscode-extension-integration.ts +0 -41
  41. package/legacy/benchmarks/memory-benchmarks.ts +0 -350
  42. package/legacy/benchmarks/run-benchmarks.ts +0 -315
  43. package/legacy/better-sqlite3-shared.ts +0 -157
  44. package/legacy/better-sqlite3.ts +0 -4
  45. package/legacy/cli.ts +0 -241
  46. package/legacy/config.ts +0 -50
  47. package/legacy/core/crdt.ts +0 -107
  48. package/legacy/core/database.ts +0 -529
  49. package/legacy/healthcheck.ts +0 -162
  50. package/legacy/http/api-server.ts +0 -569
  51. package/legacy/index.ts +0 -31
  52. package/legacy/local-first/unified-api.ts +0 -449
  53. package/legacy/logic/rules.ts +0 -46
  54. package/legacy/main.rs +0 -3
  55. package/legacy/main.ts +0 -197
  56. package/legacy/network/websocket-server.ts +0 -115
  57. package/legacy/node-index.ts +0 -827
  58. package/legacy/node-wrapper.ts +0 -329
  59. package/legacy/plugins/README.md +0 -181
  60. package/legacy/plugins/example-embedding-plugin.ts +0 -56
  61. package/legacy/plugins/plugin-system.ts +0 -315
  62. package/legacy/sqlite-compat.ts +0 -633
  63. package/legacy/sqlite3-compat.ts +0 -55
  64. package/legacy/storage/kv-storage.ts +0 -73
  65. package/legacy/tests/core.test.ts +0 -305
  66. package/legacy/tests/fixtures/performance-data.json +0 -71
  67. package/legacy/tests/fixtures/test-data.json +0 -129
  68. package/legacy/tests/integration/api-server.test.ts +0 -334
  69. package/legacy/tests/integration/mesh-network.test.ts +0 -303
  70. package/legacy/tests/logic.test.ts +0 -34
  71. package/legacy/tests/performance/load.test.ts +0 -290
  72. package/legacy/tests/security/input-validation.test.ts +0 -286
  73. package/legacy/tests/unit/core.test.ts +0 -226
  74. package/legacy/tests/unit/local-first-api.test.ts +0 -65
  75. package/legacy/tests/unit/plugin-system.test.ts +0 -388
  76. package/legacy/tests/unit/subscriptions.test.ts +0 -135
  77. package/legacy/tests/unit/vector-search.test.ts +0 -173
  78. package/legacy/tests/vscode_extension_test.ts +0 -281
  79. package/legacy/types/index.ts +0 -32
  80. package/legacy/types/node-types.ts +0 -80
  81. package/legacy/util/debug.ts +0 -27
  82. package/legacy/vector/index.ts +0 -59
  83. package/legacy/vscode/extension.ts +0 -387
  84. package/scripts/compiled-crud-verify.ts +0 -30
  85. package/scripts/dogfood.ts +0 -297
  86. package/scripts/publish-crates.sh +0 -95
  87. package/scripts/release-check.js +0 -224
  88. package/scripts/run-tests.ts +0 -178
  89. package/scripts/setup-libclang.ps1 +0 -209
  90. package/scripts/update-changelog.js +0 -214
  91. package/scripts/validate-npm-publish.js +0 -228
  92. package/web/README.md +0 -27
  93. package/web/svelte/package.json +0 -31
@@ -1,135 +0,0 @@
1
- // @ts-nocheck
2
- import { assertEquals, assertThrows } from "jsr:@std/assert@1.0.14";
3
- import { GunDB } from "../../core/database.ts";
4
-
5
- Deno.test("Subscriptions - Basic Update Events", async () => {
6
- const db = new GunDB();
7
- try {
8
- const kvPath = await Deno.makeTempFile({
9
- prefix: "kv_",
10
- suffix: ".sqlite",
11
- });
12
- await db.ready(kvPath);
13
-
14
- const id = "user:test";
15
- let updateCount = 0;
16
- let lastData: any = null;
17
-
18
- const unsubscribe = db.on(id, (node) => {
19
- updateCount++;
20
- lastData = node?.data;
21
- });
22
-
23
- // Test initial put
24
- await db.put(id, { name: "Alice", age: 30 });
25
- await new Promise((resolve) => setTimeout(resolve, 100));
26
- assertEquals(updateCount, 1);
27
- assertEquals(lastData?.name, "Alice");
28
-
29
- // Test update
30
- await db.put(id, { name: "Alice", age: 31 });
31
- await new Promise((resolve) => setTimeout(resolve, 100));
32
- assertEquals(updateCount, 2);
33
- assertEquals(lastData?.age, 31);
34
-
35
- // Test unsubscribe
36
- unsubscribe();
37
- await db.put(id, { name: "Alice", age: 32 });
38
- await new Promise((resolve) => setTimeout(resolve, 100));
39
- assertEquals(updateCount, 2); // Should not increment
40
- } finally {
41
- await db.close();
42
- }
43
- });
44
-
45
- Deno.test("Subscriptions - Delete Events", async () => {
46
- const db = new GunDB();
47
- try {
48
- const kvPath = await Deno.makeTempFile({
49
- prefix: "kv_",
50
- suffix: ".sqlite",
51
- });
52
- await db.ready(kvPath);
53
-
54
- const id = "user:delete";
55
- let deleteReceived = false;
56
-
57
- const unsubscribe = db.on(id, (node) => {
58
- if (node === null) {
59
- deleteReceived = true;
60
- }
61
- });
62
-
63
- await db.put(id, { name: "Bob" });
64
- await db.delete(id);
65
- await new Promise((resolve) => setTimeout(resolve, 100));
66
-
67
- assertEquals(deleteReceived, true);
68
- unsubscribe();
69
- } finally {
70
- await db.close();
71
- }
72
- });
73
-
74
- Deno.test("Subscriptions - Multiple Subscribers", async () => {
75
- const db = new GunDB();
76
- try {
77
- const kvPath = await Deno.makeTempFile({
78
- prefix: "kv_",
79
- suffix: ".sqlite",
80
- });
81
- await db.ready(kvPath);
82
-
83
- const id = "user:multi";
84
- let subscriber1Count = 0;
85
- let subscriber2Count = 0;
86
-
87
- const unsubscribe1 = db.on(id, () => subscriber1Count++);
88
- const unsubscribe2 = db.on(id, () => subscriber2Count++);
89
-
90
- await db.put(id, { name: "Charlie" });
91
- await new Promise((resolve) => setTimeout(resolve, 100));
92
-
93
- assertEquals(subscriber1Count, 1);
94
- assertEquals(subscriber2Count, 1);
95
-
96
- unsubscribe1();
97
- unsubscribe2();
98
- } finally {
99
- await db.close();
100
- }
101
- });
102
-
103
- Deno.test("Subscriptions - Error Handling", () => {
104
- const db = new GunDB();
105
-
106
- // Test subscription before ready
107
- assertThrows(() => db.on("test", () => {}), Error, "Database not ready");
108
- });
109
-
110
- Deno.test("Subscriptions - Off Method", async () => {
111
- const db = new GunDB();
112
- try {
113
- const kvPath = await Deno.makeTempFile({
114
- prefix: "kv_",
115
- suffix: ".sqlite",
116
- });
117
- await db.ready(kvPath);
118
-
119
- const id = "user:off";
120
- let called = false;
121
-
122
- const callback = () => {
123
- called = true;
124
- };
125
- db.on(id, callback);
126
- db.off(id, callback);
127
-
128
- await db.put(id, { name: "Dave" });
129
- await new Promise((resolve) => setTimeout(resolve, 100));
130
-
131
- assertEquals(called, false);
132
- } finally {
133
- await db.close();
134
- }
135
- });
@@ -1,173 +0,0 @@
1
- // @ts-nocheck
2
- import { assertEquals, assertExists } from "jsr:@std/assert@1.0.14";
3
- import { GunDB } from "../../core/database.ts";
4
-
5
- Deno.test("Vector Search - Basic Functionality", async () => {
6
- const db = new GunDB();
7
- try {
8
- const kvPath = await Deno.makeTempFile({
9
- prefix: "kv_",
10
- suffix: ".sqlite",
11
- });
12
- await db.ready(kvPath);
13
-
14
- // Add documents with different content
15
- await db.put("doc:1", {
16
- text: "Machine learning and artificial intelligence algorithms",
17
- content: "Deep learning neural networks for pattern recognition",
18
- });
19
- await db.put("doc:2", {
20
- text: "Cooking recipes and food preparation techniques",
21
- content: "Italian pasta recipes and cooking methods",
22
- });
23
- await db.put("doc:3", {
24
- text: "Web development and JavaScript programming",
25
- content: "React and TypeScript for modern web applications",
26
- });
27
-
28
- // Test search with text field
29
- const results1 = await db.vectorSearch("machine learning", 2);
30
- assertExists(results1);
31
- assertEquals(results1.length, 2);
32
-
33
- // Test search with content field
34
- const results2 = await db.vectorSearch("neural networks", 1);
35
- assertExists(results2);
36
- assertEquals(results2.length, 1);
37
- assertEquals(results2[0].id, "doc:1");
38
-
39
- // Test search with different query
40
- const results3 = await db.vectorSearch("cooking food", 1);
41
- assertExists(results3);
42
- assertEquals(results3.length, 1);
43
- assertEquals(results3[0].id, "doc:2");
44
- } finally {
45
- await db.close();
46
- }
47
- });
48
-
49
- Deno.test("Vector Search - Similarity Scoring", async () => {
50
- const db = new GunDB();
51
- try {
52
- const kvPath = await Deno.makeTempFile({
53
- prefix: "kv_",
54
- suffix: ".sqlite",
55
- });
56
- await db.ready(kvPath);
57
-
58
- await db.put("doc:1", { text: "Machine learning algorithms" });
59
- await db.put("doc:2", { text: "Machine learning and AI" });
60
- await db.put("doc:3", { text: "Cooking recipes" });
61
-
62
- const results = await db.vectorSearch("machine learning", 3);
63
- assertExists(results);
64
- assertEquals(results.length, 3);
65
-
66
- // Results should be ordered by similarity (highest first)
67
- assertExists(results[0].similarity);
68
- assertExists(results[1].similarity);
69
- assertExists(results[2].similarity);
70
-
71
- // First result should have highest similarity
72
- assertEquals(results[0].similarity >= results[1].similarity, true);
73
- assertEquals(results[1].similarity >= results[2].similarity, true);
74
- } finally {
75
- await db.close();
76
- }
77
- });
78
-
79
- Deno.test("Vector Search - Limit Parameter", async () => {
80
- const db = new GunDB();
81
- try {
82
- const kvPath = await Deno.makeTempFile({
83
- prefix: "kv_",
84
- suffix: ".sqlite",
85
- });
86
- await db.ready(kvPath);
87
-
88
- // Add multiple documents
89
- for (let i = 1; i <= 10; i++) {
90
- await db.put(`doc:${i}`, {
91
- text: `Document ${i} about machine learning and AI`,
92
- });
93
- }
94
-
95
- // Test different limits
96
- const results1 = await db.vectorSearch("machine learning", 3);
97
- assertEquals(results1.length, 3);
98
-
99
- const results2 = await db.vectorSearch("machine learning", 5);
100
- assertEquals(results2.length, 5);
101
-
102
- const results3 = await db.vectorSearch("machine learning", 1);
103
- assertEquals(results3.length, 1);
104
- } finally {
105
- await db.close();
106
- }
107
- });
108
-
109
- Deno.test("Vector Search - Empty Results", async () => {
110
- const db = new GunDB();
111
- try {
112
- const kvPath = await Deno.makeTempFile({
113
- prefix: "kv_",
114
- suffix: ".sqlite",
115
- });
116
- await db.ready(kvPath);
117
-
118
- // Search in empty database
119
- const results = await db.vectorSearch("anything", 5);
120
- assertEquals(results.length, 0);
121
- } finally {
122
- await db.close();
123
- }
124
- });
125
-
126
- Deno.test("Vector Search - Custom Vector Input", async () => {
127
- const db = new GunDB();
128
- try {
129
- const kvPath = await Deno.makeTempFile({
130
- prefix: "kv_",
131
- suffix: ".sqlite",
132
- });
133
- await db.ready(kvPath);
134
-
135
- // Add document with custom vector
136
- const customVector = [0.1, 0.2, 0.3, 0.4, 0.5];
137
- await db.put("doc:custom", {
138
- text: "Custom vector document",
139
- vector: customVector,
140
- });
141
-
142
- // Search with custom vector
143
- const results = await db.vectorSearch(customVector, 1);
144
- assertExists(results);
145
- assertEquals(results.length, 1);
146
- assertEquals(results[0].id, "doc:custom");
147
- } finally {
148
- await db.close();
149
- }
150
- });
151
-
152
- Deno.test("Vector Search - No Text Content", async () => {
153
- const db = new GunDB();
154
- try {
155
- const kvPath = await Deno.makeTempFile({
156
- prefix: "kv_",
157
- suffix: ".sqlite",
158
- });
159
- await db.ready(kvPath);
160
-
161
- // Add document without text or content
162
- await db.put("doc:no-text", {
163
- name: "Document without text",
164
- value: 123,
165
- });
166
-
167
- // Search should return empty results
168
- const results = await db.vectorSearch("anything", 5);
169
- assertEquals(results.length, 0);
170
- } finally {
171
- await db.close();
172
- }
173
- });
@@ -1,281 +0,0 @@
1
- // @ts-nocheck
2
- import { assert, assertEquals, assertMatch } from "jsr:@std/assert@1.0.14";
3
- import {
4
- createPluresExtension,
5
- ExtensionContextLike,
6
- PluresVSCodeExtension,
7
- VSCodeAPI,
8
- } from "../vscode/extension.ts";
9
-
10
- interface RecordedDocument {
11
- content: string;
12
- language: string;
13
- }
14
-
15
- interface RecordedMessage {
16
- type: "info" | "error";
17
- text: string;
18
- }
19
-
20
- type CommandHandler = (...args: unknown[]) => unknown;
21
-
22
- type TestHarness = {
23
- vscode: VSCodeAPI;
24
- context: ExtensionContextLike;
25
- commands: Map<string, CommandHandler>;
26
- docs: RecordedDocument[];
27
- messages: RecordedMessage[];
28
- shownTargets: string[];
29
- queueInputs: (...values: (string | undefined)[]) => void;
30
- };
31
-
32
- function createHarness(storageDir: string): TestHarness {
33
- const commands = new Map<string, CommandHandler>();
34
- const docs: RecordedDocument[] = [];
35
- const messages: RecordedMessage[] = [];
36
- const shownTargets: string[] = [];
37
- const inputQueue: Array<string | undefined> = [];
38
-
39
- const vscode: VSCodeAPI = {
40
- commands: {
41
- registerCommand(command, handler) {
42
- commands.set(command, handler);
43
- return {
44
- dispose() {
45
- commands.delete(command);
46
- },
47
- };
48
- },
49
- },
50
- window: {
51
- async showInformationMessage(message: string) {
52
- messages.push({ type: "info", text: message });
53
- },
54
- async showErrorMessage(message: string) {
55
- messages.push({ type: "error", text: message });
56
- },
57
- async showInputBox() {
58
- return inputQueue.shift();
59
- },
60
- async showTextDocument(doc: unknown) {
61
- if (
62
- typeof doc === "object" && doc && "content" in doc &&
63
- "language" in doc
64
- ) {
65
- const record = doc as RecordedDocument;
66
- docs.push({ content: record.content, language: record.language });
67
- }
68
- },
69
- },
70
- workspace: {
71
- async openTextDocument(init) {
72
- docs.push(init as RecordedDocument);
73
- return init;
74
- },
75
- },
76
- env: {
77
- async openExternal(target) {
78
- shownTargets.push(
79
- typeof target === "string" ? target : target.toString(),
80
- );
81
- },
82
- },
83
- Uri: {
84
- parse(target: string) {
85
- return target;
86
- },
87
- },
88
- };
89
-
90
- const context: ExtensionContextLike = {
91
- subscriptions: [],
92
- globalStorageUri: { fsPath: storageDir },
93
- };
94
-
95
- return {
96
- vscode,
97
- context,
98
- commands,
99
- docs,
100
- messages,
101
- shownTargets,
102
- queueInputs: (...values: (string | undefined)[]) => {
103
- inputQueue.push(...values);
104
- },
105
- };
106
- }
107
-
108
- async function getFreePort(): Promise<number> {
109
- const listener = Deno.listen({ hostname: "127.0.0.1", port: 0 });
110
- const { port } = listener.addr as Deno.NetAddr;
111
- listener.close();
112
- return port;
113
- }
114
-
115
- async function waitFor(
116
- predicate: () => Promise<boolean>,
117
- timeout = 10_000,
118
- interval = 200,
119
- ) {
120
- const deadline = Date.now() + timeout;
121
- while (Date.now() < deadline) {
122
- if (await predicate()) return;
123
- await new Promise((resolve) => setTimeout(resolve, interval));
124
- }
125
- throw new Error("Timed out waiting for condition");
126
- }
127
-
128
- async function removeDirWithRetry(target: string) {
129
- const delays = [0, 200, 400, 800, 1600, 3200];
130
- for (let i = 0; i < delays.length; i++) {
131
- if (delays[i] > 0) {
132
- await new Promise((resolve) => setTimeout(resolve, delays[i]));
133
- }
134
- try {
135
- await Deno.remove(target, { recursive: true });
136
- return;
137
- } catch (error) {
138
- const retryable = error instanceof Error &&
139
- /used by another process/i.test(error.message);
140
- if (!retryable || i === delays.length - 1) {
141
- throw error;
142
- }
143
- }
144
- }
145
- }
146
-
147
- Deno.test("VSCode integration dogfood workflow", async () => {
148
- const storageDir = await Deno.makeTempDir({ prefix: "plures-vscode-" });
149
- const apiPort = await getFreePort();
150
- const webPort = await getFreePort();
151
- const apiUrl = `http://127.0.0.1:${apiPort}`;
152
-
153
- const harness = createHarness(storageDir);
154
- const extension = createPluresExtension(harness.vscode, harness.context, {
155
- config: {
156
- host: "127.0.0.1",
157
- port: apiPort,
158
- webPort,
159
- },
160
- });
161
-
162
- try {
163
- try {
164
- await extension.activate();
165
- } catch (error) {
166
- console.error("Activation failed", harness.messages);
167
- throw error;
168
- }
169
-
170
- await waitFor(async () => {
171
- try {
172
- const res = await fetch(`${apiUrl}/api/list`);
173
- return res.ok;
174
- } catch {
175
- return false;
176
- }
177
- });
178
-
179
- const seed = await fetch(`${apiUrl}/api/put`, {
180
- method: "POST",
181
- headers: { "content-type": "application/json" },
182
- body: JSON.stringify({
183
- id: "extension:vector-doc",
184
- data: {
185
- type: "VSCodeDocument",
186
- title: "Integration Test",
187
- tags: ["extension", "sqlite"],
188
- vector: [0.12, 0.24, 0.48, 0.96],
189
- },
190
- }),
191
- });
192
- assert(seed.ok, "Failed to seed vector test data");
193
-
194
- const openWebUICmd = harness.commands.get("pluresdb.openWebUI");
195
- if (!openWebUICmd) {
196
- throw new Error("openWebUI command should be registered");
197
- }
198
- await openWebUICmd();
199
- assertEquals(harness.shownTargets.at(-1), `http://127.0.0.1:${webPort}`);
200
-
201
- harness.queueInputs("SELECT name FROM pragma_table_info('settings')");
202
- const execQuery = harness.commands.get("pluresdb.executeQuery");
203
- if (!execQuery) {
204
- throw new Error("executeQuery command should be registered");
205
- }
206
- await execQuery();
207
- const schemaDoc = harness.docs.at(-1);
208
- if (!schemaDoc) {
209
- throw new Error("Expected schema document to open");
210
- }
211
- const schemaRows = JSON.parse(schemaDoc.content) as Array<
212
- Record<string, unknown>
213
- >;
214
- const columnNames = schemaRows.map((row) => String(row.name));
215
- assert(
216
- columnNames.includes("key"),
217
- "Settings table should expose key column",
218
- );
219
-
220
- harness.queueInputs(
221
- "user:alpha",
222
- '{"name":"Ada","vector":[0.2,0.1,0.3,0.4],"role":"builder"}',
223
- );
224
- const storeCommand = harness.commands.get("pluresdb.storeData");
225
- if (!storeCommand) {
226
- throw new Error("storeData command should be registered");
227
- }
228
- await storeCommand();
229
- assertMatch(
230
- harness.messages.at(-1)?.text ?? "",
231
- /Stored data for key: user:alpha/,
232
- );
233
-
234
- harness.queueInputs("user:alpha");
235
- const retrieveCommand = harness.commands.get("pluresdb.retrieveData");
236
- if (!retrieveCommand) {
237
- throw new Error("retrieveData command should be registered");
238
- }
239
- await retrieveCommand();
240
- const retrievedDoc = harness.docs.at(-1);
241
- if (!retrievedDoc) {
242
- throw new Error("Expected retrieved document to open");
243
- }
244
- const retrieved = JSON.parse(retrievedDoc.content);
245
- assertEquals(retrieved.name, "Ada");
246
-
247
- harness.queueInputs("sqlite builder search");
248
- const vectorCommand = harness.commands.get("pluresdb.vectorSearch");
249
- if (!vectorCommand) {
250
- throw new Error("vectorSearch command should be registered");
251
- }
252
- await vectorCommand();
253
- const vectorDoc = harness.docs.at(-1);
254
- if (!vectorDoc) {
255
- throw new Error("Expected vector search document to open");
256
- }
257
- const vectorResults = JSON.parse(vectorDoc.content) as Array<
258
- Record<string, unknown>
259
- >;
260
- assert(
261
- vectorResults.length > 0,
262
- "Vector search should return at least one result",
263
- );
264
-
265
- const settingsRows = await extension.executeSQL(
266
- "SELECT name FROM pragma_table_info('documents')",
267
- );
268
- assert(Array.isArray(settingsRows));
269
- } finally {
270
- await extension.deactivate();
271
- try {
272
- await removeDirWithRetry(storageDir);
273
- } catch (error) {
274
- console.warn(
275
- `⚠️ Failed to remove temp dir: ${
276
- error instanceof Error ? error.message : String(error)
277
- }`,
278
- );
279
- }
280
- }
281
- });
@@ -1,32 +0,0 @@
1
- export interface VectorClock {
2
- [peerId: string]: number;
3
- }
4
-
5
- export interface NodeRecord {
6
- id: string;
7
- data: Record<string, unknown>;
8
- vector?: number[];
9
- type?: string;
10
- timestamp: number;
11
- state?: Record<string, number>;
12
- vectorClock: VectorClock;
13
- }
14
-
15
- export interface PutMessage {
16
- type: "put";
17
- originId?: string;
18
- node: NodeRecord;
19
- }
20
-
21
- export interface DeleteMessage {
22
- type: "delete";
23
- originId?: string;
24
- id: string;
25
- }
26
-
27
- export interface SyncRequestMessage {
28
- type: "sync_request";
29
- originId?: string;
30
- }
31
-
32
- export type MeshMessage = PutMessage | DeleteMessage | SyncRequestMessage;
@@ -1,80 +0,0 @@
1
- /**
2
- * Node.js-specific types for PluresDB
3
- */
4
-
5
- export interface PluresDBConfig {
6
- port?: number;
7
- host?: string;
8
- dataDir?: string;
9
- webPort?: number;
10
- logLevel?: "debug" | "info" | "warn" | "error";
11
- }
12
-
13
- export interface PluresDBOptions {
14
- config?: PluresDBConfig;
15
- autoStart?: boolean;
16
- denoPath?: string;
17
- }
18
-
19
- export interface QueryResult {
20
- rows: any[];
21
- columns: string[];
22
- changes: number;
23
- lastInsertRowId: number;
24
- }
25
-
26
- export interface BetterSQLite3Options extends PluresDBOptions {
27
- filename?: string;
28
- memory?: boolean;
29
- readonly?: boolean;
30
- fileMustExist?: boolean;
31
- verbose?: (...args: unknown[]) => void;
32
- }
33
-
34
- export interface BetterSQLite3RunResult {
35
- changes: number;
36
- lastInsertRowid: number | null;
37
- columns?: string[];
38
- }
39
-
40
- export interface VectorSearchResult {
41
- id: string;
42
- content: string;
43
- score: number;
44
- metadata?: any;
45
- }
46
-
47
- export interface Peer {
48
- id: string;
49
- name: string;
50
- email: string;
51
- publicKey: string;
52
- lastSeen: Date;
53
- status: "online" | "offline" | "connecting";
54
- }
55
-
56
- export interface SharedNode {
57
- id: string;
58
- nodeId: string;
59
- peerId: string;
60
- accessLevel: "read-only" | "read-write" | "admin";
61
- encrypted: boolean;
62
- createdAt: Date;
63
- expiresAt?: Date;
64
- }
65
-
66
- export interface Device {
67
- id: string;
68
- name: string;
69
- type: "laptop" | "phone" | "server" | "desktop";
70
- lastSync: Date;
71
- status: "online" | "offline" | "syncing";
72
- }
73
-
74
- export interface SyncStatus {
75
- isOnline: boolean;
76
- lastSync: Date | null;
77
- pendingChanges: number;
78
- connectedPeers: number;
79
- syncProgress: number;
80
- }