@grafema/rfdb-client 0.2.1-beta → 0.2.6-beta

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 CHANGED
@@ -1,8 +1,10 @@
1
1
  # @grafema/rfdb-client
2
2
 
3
- > TypeScript client for RFDB graph database
3
+ > TypeScript client for RFDB (Rega Flow Database)
4
4
 
5
- **Warning: This package is in early alpha stage and is not recommended for production use.**
5
+ *Named after the author's wife Regina (Rega for short). The Hebrew word רגע (rega, "moment") conveniently fits the concept — a flow of discrete moments captured in the graph.*
6
+
7
+ **Warning: This package is in beta stage and the API may change between minor versions.**
6
8
 
7
9
  ## Installation
8
10
 
@@ -12,14 +14,16 @@ npm install @grafema/rfdb-client
12
14
 
13
15
  ## Overview
14
16
 
15
- High-performance TypeScript client for RFDB (ReginaFlow Database) - a graph database optimized for code analysis. Communicates with RFDB server via Unix socket using MessagePack protocol.
17
+ High-performance TypeScript client for RFDB a graph database optimized for code analysis. Communicates with RFDB server via Unix socket using MessagePack protocol.
16
18
 
17
19
  ## Features
18
20
 
19
21
  - Socket-based client for out-of-process communication
20
22
  - MessagePack binary protocol for efficiency
23
+ - Batch operations for high-throughput ingestion
21
24
  - Full graph operations: nodes, edges, queries
22
25
  - Datalog query support
26
+ - Streaming support for large result sets
23
27
 
24
28
  ## Quick Start
25
29
 
@@ -37,6 +41,9 @@ await client.addNode({
37
41
  file: 'src/api/users.ts'
38
42
  });
39
43
 
44
+ // Batch add for performance
45
+ await client.addNodes([node1, node2, node3]);
46
+
40
47
  // Query nodes
41
48
  const functions = await client.findByType('FUNCTION');
42
49
 
@@ -50,27 +57,33 @@ await client.close();
50
57
 
51
58
  ### Connection
52
59
 
53
- - `connect()` - Connect to RFDB server
54
- - `close()` - Close connection
60
+ - `connect()` Connect to RFDB server
61
+ - `close()` Close connection
55
62
 
56
63
  ### Nodes
57
64
 
58
- - `addNode(node)` - Add a single node
59
- - `addNodes(nodes)` - Batch add nodes
60
- - `getNode(id)` - Get node by ID
61
- - `findByType(type)` - Find nodes by type
62
- - `queryNodes(query)` - Query nodes with filters
65
+ - `addNode(node)` Add a single node
66
+ - `addNodes(nodes)` Batch add nodes
67
+ - `getNode(id)` Get node by ID
68
+ - `findByType(type)` Find nodes by type
69
+ - `queryNodes(query)` Query nodes with filters
63
70
 
64
71
  ### Edges
65
72
 
66
- - `addEdge(edge)` - Add a single edge
67
- - `addEdges(edges)` - Batch add edges
68
- - `getOutgoingEdges(nodeId, types?)` - Get outgoing edges
69
- - `getIncomingEdges(nodeId, types?)` - Get incoming edges
73
+ - `addEdge(edge)` Add a single edge
74
+ - `addEdges(edges)` Batch add edges
75
+ - `getOutgoingEdges(nodeId, types?)` Get outgoing edges
76
+ - `getIncomingEdges(nodeId, types?)` Get incoming edges
70
77
 
71
78
  ### Queries
72
79
 
73
- - `queryDatalog(query)` - Execute Datalog query
80
+ - `queryDatalog(query)` Execute Datalog query
81
+
82
+ ### Database Management
83
+
84
+ - `createDatabase(name)` — Create a new database
85
+ - `useDatabase(name)` — Switch to a database
86
+ - `clear()` — Clear all data
74
87
 
75
88
  ## License
76
89
 
package/dist/client.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  * with a separate rfdb-server process over Unix socket + MessagePack.
6
6
  */
7
7
  import { EventEmitter } from 'events';
8
- import type { WireNode, WireEdge, RFDBResponse, IRFDBClient, AttrQuery, DatalogResult, NodeType, EdgeType } from '@grafema/types';
8
+ import type { WireNode, WireEdge, RFDBResponse, IRFDBClient, AttrQuery, FieldDeclaration, DatalogResult, NodeType, EdgeType, HelloResponse, CreateDatabaseResponse, OpenDatabaseResponse, ListDatabasesResponse, CurrentDatabaseResponse, SnapshotRef, SnapshotDiff, SnapshotInfo, CommitDelta } from '@grafema/types';
9
9
  export declare class RFDBClient extends EventEmitter implements IRFDBClient {
10
10
  readonly socketPath: string;
11
11
  private socket;
@@ -13,21 +13,58 @@ export declare class RFDBClient extends EventEmitter implements IRFDBClient {
13
13
  private pending;
14
14
  private reqId;
15
15
  private buffer;
16
+ private _batching;
17
+ private _batchNodes;
18
+ private _batchEdges;
19
+ private _batchFiles;
20
+ private _supportsStreaming;
21
+ private _pendingStreams;
22
+ private _streamTimers;
16
23
  constructor(socketPath?: string);
24
+ /**
25
+ * Whether the connected server supports streaming responses.
26
+ * Set after calling hello(). Defaults to false.
27
+ */
28
+ get supportsStreaming(): boolean;
17
29
  /**
18
30
  * Connect to RFDB server
19
31
  */
20
32
  connect(): Promise<void>;
33
+ /**
34
+ * Enhance connection errors with helpful messages about --auto-start
35
+ */
36
+ private _enhanceConnectionError;
21
37
  /**
22
38
  * Handle incoming data, parse framed messages
23
39
  */
24
40
  private _handleData;
25
41
  /**
26
- * Handle decoded response
42
+ * Handle decoded response — match by requestId, route streaming chunks
43
+ * to StreamQueue or resolve single-response Promise.
27
44
  */
28
45
  private _handleResponse;
29
46
  /**
30
- * Send a request and wait for response
47
+ * Handle a response for a streaming request.
48
+ * Routes chunk data to StreamQueue and manages stream lifecycle.
49
+ * Resets per-chunk timeout on each successful chunk arrival.
50
+ */
51
+ private _handleStreamingResponse;
52
+ /**
53
+ * Reset the per-chunk timeout for a streaming request.
54
+ */
55
+ private _resetStreamTimer;
56
+ /**
57
+ * Clean up all state for a completed/failed streaming request.
58
+ */
59
+ private _cleanupStream;
60
+ private _parseRequestId;
61
+ /**
62
+ * Default timeout for operations (60 seconds)
63
+ * Flush/compact may take time for large graphs, but should not hang indefinitely
64
+ */
65
+ private static readonly DEFAULT_TIMEOUT_MS;
66
+ /**
67
+ * Send a request and wait for response with timeout
31
68
  */
32
69
  private _send;
33
70
  /**
@@ -127,6 +164,22 @@ export declare class RFDBClient extends EventEmitter implements IRFDBClient {
127
164
  * Query nodes (async generator)
128
165
  */
129
166
  queryNodes(query: AttrQuery): AsyncGenerator<WireNode, void, unknown>;
167
+ /**
168
+ * Build a server query object from an AttrQuery.
169
+ */
170
+ private _buildServerQuery;
171
+ /**
172
+ * Stream nodes matching query with true streaming support.
173
+ *
174
+ * Behavior depends on server capabilities:
175
+ * - Server supports streaming (protocol v3): receives chunked NodesChunk
176
+ * responses via StreamQueue. Nodes are yielded as they arrive.
177
+ * - Server does NOT support streaming (fallback): delegates to queryNodes()
178
+ * which yields nodes one by one from bulk response.
179
+ *
180
+ * The generator can be aborted by breaking out of the loop or calling .return().
181
+ */
182
+ queryNodesStream(query: AttrQuery): AsyncGenerator<WireNode, void, unknown>;
130
183
  /**
131
184
  * Get all nodes matching query
132
185
  */
@@ -148,6 +201,12 @@ export declare class RFDBClient extends EventEmitter implements IRFDBClient {
148
201
  * Update node version
149
202
  */
150
203
  updateNodeVersion(id: string, version: string): Promise<RFDBResponse>;
204
+ /**
205
+ * Declare metadata fields for server-side indexing.
206
+ * Call before adding nodes so the server builds indexes on flush.
207
+ * Returns the number of declared fields.
208
+ */
209
+ declareFields(fields: FieldDeclaration[]): Promise<number>;
151
210
  /**
152
211
  * Load Datalog rules
153
212
  */
@@ -164,10 +223,119 @@ export declare class RFDBClient extends EventEmitter implements IRFDBClient {
164
223
  * Check a guarantee (Datalog rule) and return violations
165
224
  */
166
225
  checkGuarantee(ruleSource: string): Promise<DatalogResult[]>;
226
+ /**
227
+ * Execute unified Datalog — handles both direct queries and rule-based programs.
228
+ * Auto-detects the head predicate instead of hardcoding violation(X).
229
+ */
230
+ executeDatalog(source: string): Promise<DatalogResult[]>;
167
231
  /**
168
232
  * Ping the server
169
233
  */
170
234
  ping(): Promise<string | false>;
235
+ /**
236
+ * Negotiate protocol version with server
237
+ * @param protocolVersion - Protocol version to negotiate (default: 2)
238
+ * @returns Server capabilities including protocolVersion, serverVersion, features
239
+ */
240
+ hello(protocolVersion?: number): Promise<HelloResponse>;
241
+ /**
242
+ * Create a new database
243
+ * @param name - Database name (alphanumeric, _, -)
244
+ * @param ephemeral - If true, database is in-memory and auto-cleaned on disconnect
245
+ */
246
+ createDatabase(name: string, ephemeral?: boolean): Promise<CreateDatabaseResponse>;
247
+ /**
248
+ * Open a database and set as current for this session
249
+ * @param name - Database name
250
+ * @param mode - 'rw' (read-write) or 'ro' (read-only)
251
+ */
252
+ openDatabase(name: string, mode?: 'rw' | 'ro'): Promise<OpenDatabaseResponse>;
253
+ /**
254
+ * Close current database
255
+ */
256
+ closeDatabase(): Promise<RFDBResponse>;
257
+ /**
258
+ * Drop (delete) a database - must not be in use
259
+ * @param name - Database name
260
+ */
261
+ dropDatabase(name: string): Promise<RFDBResponse>;
262
+ /**
263
+ * List all databases
264
+ */
265
+ listDatabases(): Promise<ListDatabasesResponse>;
266
+ /**
267
+ * Get current database for this session
268
+ */
269
+ currentDatabase(): Promise<CurrentDatabaseResponse>;
270
+ /**
271
+ * Convert a SnapshotRef to wire format payload fields.
272
+ *
273
+ * - number -> { version: N }
274
+ * - { tag, value } -> { tagKey, tagValue }
275
+ */
276
+ private _resolveSnapshotRef;
277
+ /**
278
+ * Compute diff between two snapshots.
279
+ * @param from - Source snapshot (version number or tag reference)
280
+ * @param to - Target snapshot (version number or tag reference)
281
+ * @returns SnapshotDiff with added/removed segments and stats
282
+ */
283
+ diffSnapshots(from: SnapshotRef, to: SnapshotRef): Promise<SnapshotDiff>;
284
+ /**
285
+ * Tag a snapshot with key-value metadata.
286
+ * @param version - Snapshot version to tag
287
+ * @param tags - Key-value pairs to apply (e.g. { "release": "v1.0" })
288
+ */
289
+ tagSnapshot(version: number, tags: Record<string, string>): Promise<void>;
290
+ /**
291
+ * Find a snapshot by tag key/value pair.
292
+ * @param tagKey - Tag key to search for
293
+ * @param tagValue - Tag value to match
294
+ * @returns Snapshot version number, or null if not found
295
+ */
296
+ findSnapshot(tagKey: string, tagValue: string): Promise<number | null>;
297
+ /**
298
+ * List snapshots, optionally filtered by tag key.
299
+ * @param filterTag - Optional tag key to filter by (only snapshots with this tag)
300
+ * @returns Array of SnapshotInfo objects
301
+ */
302
+ listSnapshots(filterTag?: string): Promise<SnapshotInfo[]>;
303
+ /**
304
+ * Begin a batch operation.
305
+ * While batching, addNodes/addEdges buffer locally instead of sending to server.
306
+ * Call commitBatch() to send all buffered data atomically.
307
+ */
308
+ beginBatch(): void;
309
+ /**
310
+ * Commit the current batch to the server.
311
+ * Sends all buffered nodes/edges with the list of changed files.
312
+ * Server atomically replaces old data for changed files with new data.
313
+ */
314
+ commitBatch(tags?: string[]): Promise<CommitDelta>;
315
+ /**
316
+ * Abort the current batch, discarding all buffered data.
317
+ */
318
+ abortBatch(): void;
319
+ /**
320
+ * Check if a batch is currently in progress.
321
+ */
322
+ isBatching(): boolean;
323
+ /**
324
+ * Find files that depend on the given changed files.
325
+ * Uses backward reachability to find dependent modules.
326
+ *
327
+ * Note: For large result sets, each reachable node requires a separate
328
+ * getNode RPC. A future server-side optimization could return file paths
329
+ * directly from the reachability query.
330
+ */
331
+ findDependentFiles(changedFiles: string[]): Promise<string[]>;
332
+ /**
333
+ * Unref the socket so it doesn't keep the process alive.
334
+ *
335
+ * Call this in test environments to allow process to exit
336
+ * even if connections remain open.
337
+ */
338
+ unref(): void;
171
339
  /**
172
340
  * Close connection
173
341
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../ts/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../ts/client.ts"],"names":[],"mappings":"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"}