@push.rocks/smartdb 2.5.1 → 2.5.5
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/dist_rust/rustdb_linux_amd64 +0 -0
- package/dist_rust/rustdb_linux_arm64 +0 -0
- package/package.json +2 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/dist_ts/00_commitinfo_data.d.ts +0 -8
- package/dist_ts/00_commitinfo_data.js +0 -9
- package/dist_ts/index.d.ts +0 -7
- package/dist_ts/index.js +0 -10
- package/dist_ts/ts_local/classes.localsmartdb.d.ts +0 -87
- package/dist_ts/ts_local/classes.localsmartdb.js +0 -169
- package/dist_ts/ts_local/index.d.ts +0 -2
- package/dist_ts/ts_local/index.js +0 -2
- package/dist_ts/ts_local/plugins.d.ts +0 -1
- package/dist_ts/ts_local/plugins.js +0 -3
- package/dist_ts/ts_migration/classes.storagemigrator.d.ts +0 -24
- package/dist_ts/ts_migration/classes.storagemigrator.js +0 -75
- package/dist_ts/ts_migration/index.d.ts +0 -1
- package/dist_ts/ts_migration/index.js +0 -2
- package/dist_ts/ts_migration/migrators/v0_to_v1.d.ts +0 -9
- package/dist_ts/ts_migration/migrators/v0_to_v1.js +0 -225
- package/dist_ts/ts_smartdb/index.d.ts +0 -4
- package/dist_ts/ts_smartdb/index.js +0 -6
- package/dist_ts/ts_smartdb/plugins.d.ts +0 -2
- package/dist_ts/ts_smartdb/plugins.js +0 -4
- package/dist_ts/ts_smartdb/rust-db-bridge.d.ts +0 -122
- package/dist_ts/ts_smartdb/rust-db-bridge.js +0 -113
- package/dist_ts/ts_smartdb/server/SmartdbServer.d.ts +0 -104
- package/dist_ts/ts_smartdb/server/SmartdbServer.js +0 -166
- package/dist_ts/ts_smartdb/server/index.d.ts +0 -2
- package/dist_ts/ts_smartdb/server/index.js +0 -3
- package/dist_ts_debugserver/bundled.d.ts +0 -4
- package/dist_ts_debugserver/bundled.js +0 -12
- package/dist_ts_debugserver/classes.debugserver.d.ts +0 -36
- package/dist_ts_debugserver/classes.debugserver.js +0 -95
- package/dist_ts_debugserver/index.d.ts +0 -2
- package/dist_ts_debugserver/index.js +0 -2
- package/dist_ts_debugserver/plugins.d.ts +0 -2
- package/dist_ts_debugserver/plugins.js +0 -3
- package/dist_ts_debugui/index.d.ts +0 -2
- package/dist_ts_debugui/index.js +0 -2
- package/dist_ts_debugui/plugins.d.ts +0 -1
- package/dist_ts_debugui/plugins.js +0 -2
- package/dist_ts_debugui/smartdb-debugui.d.ts +0 -62
- package/dist_ts_debugui/smartdb-debugui.js +0 -1132
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import * as crypto from 'crypto';
|
|
4
|
-
import { BSON } from 'bson';
|
|
5
|
-
// ---------------------------------------------------------------------------
|
|
6
|
-
// Binary format constants (must match Rust: record.rs)
|
|
7
|
-
// ---------------------------------------------------------------------------
|
|
8
|
-
/** File-level magic: "SMARTDB\0" */
|
|
9
|
-
const FILE_MAGIC = Buffer.from('SMARTDB\0', 'ascii');
|
|
10
|
-
/** Current format version */
|
|
11
|
-
const FORMAT_VERSION = 1;
|
|
12
|
-
/** File type tags */
|
|
13
|
-
const FILE_TYPE_DATA = 1;
|
|
14
|
-
const FILE_TYPE_HINT = 3;
|
|
15
|
-
/** File header total size */
|
|
16
|
-
const FILE_HEADER_SIZE = 64;
|
|
17
|
-
/** Per-record magic */
|
|
18
|
-
const RECORD_MAGIC = 0xDB01;
|
|
19
|
-
/** Per-record header size */
|
|
20
|
-
const RECORD_HEADER_SIZE = 22; // 2 + 8 + 4 + 4 + 4
|
|
21
|
-
// ---------------------------------------------------------------------------
|
|
22
|
-
// Binary encoding helpers
|
|
23
|
-
// ---------------------------------------------------------------------------
|
|
24
|
-
function writeFileHeader(fileType) {
|
|
25
|
-
const buf = Buffer.alloc(FILE_HEADER_SIZE, 0);
|
|
26
|
-
FILE_MAGIC.copy(buf, 0);
|
|
27
|
-
buf.writeUInt16LE(FORMAT_VERSION, 8);
|
|
28
|
-
buf.writeUInt8(fileType, 10);
|
|
29
|
-
buf.writeUInt32LE(0, 11); // flags
|
|
30
|
-
const now = BigInt(Date.now());
|
|
31
|
-
buf.writeBigUInt64LE(now, 15);
|
|
32
|
-
// bytes 23..64 are reserved (zeros)
|
|
33
|
-
return buf;
|
|
34
|
-
}
|
|
35
|
-
function encodeDataRecord(timestamp, key, value) {
|
|
36
|
-
const keyLen = key.length;
|
|
37
|
-
const valLen = value.length;
|
|
38
|
-
const totalSize = RECORD_HEADER_SIZE + keyLen + valLen;
|
|
39
|
-
const buf = Buffer.alloc(totalSize);
|
|
40
|
-
// Write header fields (without CRC)
|
|
41
|
-
buf.writeUInt16LE(RECORD_MAGIC, 0);
|
|
42
|
-
buf.writeBigUInt64LE(timestamp, 2);
|
|
43
|
-
buf.writeUInt32LE(keyLen, 10);
|
|
44
|
-
buf.writeUInt32LE(valLen, 14);
|
|
45
|
-
// CRC placeholder at offset 18..22 (will fill below)
|
|
46
|
-
key.copy(buf, RECORD_HEADER_SIZE);
|
|
47
|
-
value.copy(buf, RECORD_HEADER_SIZE + keyLen);
|
|
48
|
-
// CRC32 covers everything except the CRC field itself:
|
|
49
|
-
// bytes [0..18] + bytes [22..]
|
|
50
|
-
const crc = crc32(Buffer.concat([
|
|
51
|
-
buf.subarray(0, 18),
|
|
52
|
-
buf.subarray(22),
|
|
53
|
-
]));
|
|
54
|
-
buf.writeUInt32LE(crc, 18);
|
|
55
|
-
return buf;
|
|
56
|
-
}
|
|
57
|
-
function encodeHintEntry(key, offset, recordLen, valueLen, timestamp) {
|
|
58
|
-
const keyBuf = Buffer.from(key, 'utf-8');
|
|
59
|
-
const buf = Buffer.alloc(4 + keyBuf.length + 8 + 4 + 4 + 8);
|
|
60
|
-
let pos = 0;
|
|
61
|
-
buf.writeUInt32LE(keyBuf.length, pos);
|
|
62
|
-
pos += 4;
|
|
63
|
-
keyBuf.copy(buf, pos);
|
|
64
|
-
pos += keyBuf.length;
|
|
65
|
-
buf.writeBigUInt64LE(offset, pos);
|
|
66
|
-
pos += 8;
|
|
67
|
-
buf.writeUInt32LE(recordLen, pos);
|
|
68
|
-
pos += 4;
|
|
69
|
-
buf.writeUInt32LE(valueLen, pos);
|
|
70
|
-
pos += 4;
|
|
71
|
-
buf.writeBigUInt64LE(timestamp, pos);
|
|
72
|
-
return buf;
|
|
73
|
-
}
|
|
74
|
-
// ---------------------------------------------------------------------------
|
|
75
|
-
// CRC32 (matching crc32fast in Rust)
|
|
76
|
-
// ---------------------------------------------------------------------------
|
|
77
|
-
const CRC32_TABLE = (() => {
|
|
78
|
-
const table = new Uint32Array(256);
|
|
79
|
-
for (let i = 0; i < 256; i++) {
|
|
80
|
-
let crc = i;
|
|
81
|
-
for (let j = 0; j < 8; j++) {
|
|
82
|
-
crc = (crc & 1) ? (0xEDB88320 ^ (crc >>> 1)) : (crc >>> 1);
|
|
83
|
-
}
|
|
84
|
-
table[i] = crc;
|
|
85
|
-
}
|
|
86
|
-
return table;
|
|
87
|
-
})();
|
|
88
|
-
function crc32(data) {
|
|
89
|
-
let crc = 0xFFFFFFFF;
|
|
90
|
-
for (let i = 0; i < data.length; i++) {
|
|
91
|
-
crc = CRC32_TABLE[(crc ^ data[i]) & 0xFF] ^ (crc >>> 8);
|
|
92
|
-
}
|
|
93
|
-
return (crc ^ 0xFFFFFFFF) >>> 0;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Migrate a storage directory from v0 (JSON-per-collection) to v1 (Bitcask binary).
|
|
97
|
-
*
|
|
98
|
-
* - Original .json files are NOT modified or deleted.
|
|
99
|
-
* - New v1 files are written into {db}/{coll}/ subdirectories.
|
|
100
|
-
* - Returns a list of old files that can be safely deleted.
|
|
101
|
-
* - On failure, cleans up any partial new files and throws.
|
|
102
|
-
*/
|
|
103
|
-
export async function migrateV0ToV1(storagePath) {
|
|
104
|
-
const deletableFiles = [];
|
|
105
|
-
const createdDirs = [];
|
|
106
|
-
try {
|
|
107
|
-
const dbEntries = fs.readdirSync(storagePath, { withFileTypes: true });
|
|
108
|
-
for (const dbEntry of dbEntries) {
|
|
109
|
-
if (!dbEntry.isDirectory())
|
|
110
|
-
continue;
|
|
111
|
-
const dbDir = path.join(storagePath, dbEntry.name);
|
|
112
|
-
const collFiles = fs.readdirSync(dbDir, { withFileTypes: true });
|
|
113
|
-
for (const collFile of collFiles) {
|
|
114
|
-
if (!collFile.isFile())
|
|
115
|
-
continue;
|
|
116
|
-
if (!collFile.name.endsWith('.json'))
|
|
117
|
-
continue;
|
|
118
|
-
if (collFile.name.endsWith('.indexes.json'))
|
|
119
|
-
continue;
|
|
120
|
-
const collName = collFile.name.replace(/\.json$/, '');
|
|
121
|
-
const jsonPath = path.join(dbDir, collFile.name);
|
|
122
|
-
const indexJsonPath = path.join(dbDir, `${collName}.indexes.json`);
|
|
123
|
-
// Target directory
|
|
124
|
-
const collDir = path.join(dbDir, collName);
|
|
125
|
-
if (fs.existsSync(collDir)) {
|
|
126
|
-
// Already migrated
|
|
127
|
-
continue;
|
|
128
|
-
}
|
|
129
|
-
console.log(`[smartdb] Migrating ${dbEntry.name}.${collName}...`);
|
|
130
|
-
// Read the JSON collection
|
|
131
|
-
const jsonData = fs.readFileSync(jsonPath, 'utf-8');
|
|
132
|
-
const docs = JSON.parse(jsonData);
|
|
133
|
-
// Create collection directory
|
|
134
|
-
fs.mkdirSync(collDir, { recursive: true });
|
|
135
|
-
createdDirs.push(collDir);
|
|
136
|
-
// Write data.rdb
|
|
137
|
-
const dataPath = path.join(collDir, 'data.rdb');
|
|
138
|
-
const fd = fs.openSync(dataPath, 'w');
|
|
139
|
-
try {
|
|
140
|
-
// File header
|
|
141
|
-
const headerBuf = writeFileHeader(FILE_TYPE_DATA);
|
|
142
|
-
fs.writeSync(fd, headerBuf);
|
|
143
|
-
let currentOffset = BigInt(FILE_HEADER_SIZE);
|
|
144
|
-
const keydir = new Map();
|
|
145
|
-
const ts = BigInt(Date.now());
|
|
146
|
-
for (const doc of docs) {
|
|
147
|
-
// Extract _id
|
|
148
|
-
let idHex;
|
|
149
|
-
if (doc._id && doc._id.$oid) {
|
|
150
|
-
idHex = doc._id.$oid;
|
|
151
|
-
}
|
|
152
|
-
else if (typeof doc._id === 'string') {
|
|
153
|
-
idHex = doc._id;
|
|
154
|
-
}
|
|
155
|
-
else if (doc._id) {
|
|
156
|
-
idHex = String(doc._id);
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
// Generate a new ObjectId
|
|
160
|
-
idHex = crypto.randomBytes(12).toString('hex');
|
|
161
|
-
doc._id = { $oid: idHex };
|
|
162
|
-
}
|
|
163
|
-
// Serialize to BSON
|
|
164
|
-
const bsonBytes = BSON.serialize(doc);
|
|
165
|
-
const keyBuf = Buffer.from(idHex, 'utf-8');
|
|
166
|
-
const valueBuf = Buffer.from(bsonBytes);
|
|
167
|
-
const record = encodeDataRecord(ts, keyBuf, valueBuf);
|
|
168
|
-
fs.writeSync(fd, record);
|
|
169
|
-
keydir.set(idHex, {
|
|
170
|
-
offset: currentOffset,
|
|
171
|
-
recordLen: record.length,
|
|
172
|
-
valueLen: valueBuf.length,
|
|
173
|
-
timestamp: ts,
|
|
174
|
-
});
|
|
175
|
-
currentOffset += BigInt(record.length);
|
|
176
|
-
}
|
|
177
|
-
fs.fsyncSync(fd);
|
|
178
|
-
fs.closeSync(fd);
|
|
179
|
-
// Write keydir.hint
|
|
180
|
-
const hintPath = path.join(collDir, 'keydir.hint');
|
|
181
|
-
const hintFd = fs.openSync(hintPath, 'w');
|
|
182
|
-
fs.writeSync(hintFd, writeFileHeader(FILE_TYPE_HINT));
|
|
183
|
-
for (const [key, entry] of keydir) {
|
|
184
|
-
fs.writeSync(hintFd, encodeHintEntry(key, entry.offset, entry.recordLen, entry.valueLen, entry.timestamp));
|
|
185
|
-
}
|
|
186
|
-
fs.fsyncSync(hintFd);
|
|
187
|
-
fs.closeSync(hintFd);
|
|
188
|
-
}
|
|
189
|
-
catch (writeErr) {
|
|
190
|
-
// Clean up on write failure
|
|
191
|
-
try {
|
|
192
|
-
fs.closeSync(fd);
|
|
193
|
-
}
|
|
194
|
-
catch { }
|
|
195
|
-
throw writeErr;
|
|
196
|
-
}
|
|
197
|
-
// Copy indexes.json if it exists
|
|
198
|
-
if (fs.existsSync(indexJsonPath)) {
|
|
199
|
-
const destIndexPath = path.join(collDir, 'indexes.json');
|
|
200
|
-
fs.copyFileSync(indexJsonPath, destIndexPath);
|
|
201
|
-
deletableFiles.push(indexJsonPath);
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
// Write default _id index
|
|
205
|
-
const destIndexPath = path.join(collDir, 'indexes.json');
|
|
206
|
-
fs.writeFileSync(destIndexPath, JSON.stringify([{ name: '_id_', key: { _id: 1 } }], null, 2));
|
|
207
|
-
}
|
|
208
|
-
deletableFiles.push(jsonPath);
|
|
209
|
-
console.log(`[smartdb] Migrated ${dbEntry.name}.${collName}: ${docs.length} documents`);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
catch (err) {
|
|
214
|
-
// Clean up any partially created directories
|
|
215
|
-
for (const dir of createdDirs) {
|
|
216
|
-
try {
|
|
217
|
-
fs.rmSync(dir, { recursive: true, force: true });
|
|
218
|
-
}
|
|
219
|
-
catch { }
|
|
220
|
-
}
|
|
221
|
-
throw err;
|
|
222
|
-
}
|
|
223
|
-
return deletableFiles;
|
|
224
|
-
}
|
|
225
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjBfdG9fdjEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy90c19taWdyYXRpb24vbWlncmF0b3JzL3YwX3RvX3YxLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUIsOEVBQThFO0FBQzlFLHVEQUF1RDtBQUN2RCw4RUFBOEU7QUFFOUUsb0NBQW9DO0FBQ3BDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JELDZCQUE2QjtBQUM3QixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDekIscUJBQXFCO0FBQ3JCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDekIsNkJBQTZCO0FBQzdCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLHVCQUF1QjtBQUN2QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUM7QUFDNUIsNkJBQTZCO0FBQzdCLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDLENBQUMsb0JBQW9CO0FBRW5ELDhFQUE4RTtBQUM5RSwwQkFBMEI7QUFDMUIsOEVBQThFO0FBRTlFLFNBQVMsZUFBZSxDQUFDLFFBQWdCO0lBQ3ZDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEIsR0FBRyxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENB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
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { SmartdbServer } from './server/SmartdbServer.js';
|
|
2
|
-
export type { ISmartdbServerOptions } from './server/SmartdbServer.js';
|
|
3
|
-
export { RustDbBridge } from './rust-db-bridge.js';
|
|
4
|
-
export type { IOpLogEntry, IOpLogResult, IOpLogStats, IRevertResult, ICollectionInfo, IDocumentsResult, ISmartDbMetrics, } from './rust-db-bridge.js';
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
// SmartDB - Wire protocol compatible embedded database server
|
|
2
|
-
// Export server (the main entry point for using SmartDB)
|
|
3
|
-
export { SmartdbServer } from './server/SmartdbServer.js';
|
|
4
|
-
// Export bridge for advanced usage
|
|
5
|
-
export { RustDbBridge } from './rust-db-bridge.js';
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90c19zbWFydGRiL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhEQUE4RDtBQUU5RCx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzFELG1DQUFtQztBQUNuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUMifQ==
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
// @push.rocks scope
|
|
2
|
-
import * as smartrust from '@push.rocks/smartrust';
|
|
3
|
-
export { smartrust };
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3RzX3NtYXJ0ZGIvcGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMifQ==
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'events';
|
|
2
|
-
/**
|
|
3
|
-
* A single oplog entry returned from the Rust engine.
|
|
4
|
-
*/
|
|
5
|
-
export interface IOpLogEntry {
|
|
6
|
-
seq: number;
|
|
7
|
-
timestampMs: number;
|
|
8
|
-
op: 'insert' | 'update' | 'delete';
|
|
9
|
-
db: string;
|
|
10
|
-
collection: string;
|
|
11
|
-
documentId: string;
|
|
12
|
-
document: Record<string, any> | null;
|
|
13
|
-
previousDocument: Record<string, any> | null;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Aggregate oplog statistics.
|
|
17
|
-
*/
|
|
18
|
-
export interface IOpLogStats {
|
|
19
|
-
currentSeq: number;
|
|
20
|
-
totalEntries: number;
|
|
21
|
-
oldestSeq: number;
|
|
22
|
-
entriesByOp: {
|
|
23
|
-
insert: number;
|
|
24
|
-
update: number;
|
|
25
|
-
delete: number;
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Result of a getOpLog query.
|
|
30
|
-
*/
|
|
31
|
-
export interface IOpLogResult {
|
|
32
|
-
entries: IOpLogEntry[];
|
|
33
|
-
currentSeq: number;
|
|
34
|
-
totalEntries: number;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Result of a revertToSeq command.
|
|
38
|
-
*/
|
|
39
|
-
export interface IRevertResult {
|
|
40
|
-
dryRun: boolean;
|
|
41
|
-
reverted: number;
|
|
42
|
-
targetSeq?: number;
|
|
43
|
-
entries?: IOpLogEntry[];
|
|
44
|
-
errors?: string[];
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* A collection info entry.
|
|
48
|
-
*/
|
|
49
|
-
export interface ICollectionInfo {
|
|
50
|
-
db: string;
|
|
51
|
-
name: string;
|
|
52
|
-
count: number;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Result of a getDocuments query.
|
|
56
|
-
*/
|
|
57
|
-
export interface IDocumentsResult {
|
|
58
|
-
documents: Record<string, any>[];
|
|
59
|
-
total: number;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Server metrics.
|
|
63
|
-
*/
|
|
64
|
-
export interface ISmartDbMetrics {
|
|
65
|
-
databases: number;
|
|
66
|
-
collections: number;
|
|
67
|
-
oplogEntries: number;
|
|
68
|
-
oplogCurrentSeq: number;
|
|
69
|
-
uptimeSeconds: number;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Configuration sent to the Rust binary on start.
|
|
73
|
-
*/
|
|
74
|
-
interface ISmartDbRustConfig {
|
|
75
|
-
port?: number;
|
|
76
|
-
host?: string;
|
|
77
|
-
socketPath?: string;
|
|
78
|
-
storage: 'memory' | 'file';
|
|
79
|
-
storagePath?: string;
|
|
80
|
-
persistPath?: string;
|
|
81
|
-
persistIntervalMs?: number;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Bridge between TypeScript SmartdbServer and the Rust binary.
|
|
85
|
-
* Wraps @push.rocks/smartrust's RustBridge with type-safe command definitions.
|
|
86
|
-
*/
|
|
87
|
-
export declare class RustDbBridge extends EventEmitter {
|
|
88
|
-
private bridge;
|
|
89
|
-
constructor();
|
|
90
|
-
/**
|
|
91
|
-
* Spawn the Rust binary in management mode.
|
|
92
|
-
* Returns true if the binary was found and spawned successfully.
|
|
93
|
-
*/
|
|
94
|
-
spawn(): Promise<boolean>;
|
|
95
|
-
/**
|
|
96
|
-
* Kill the Rust process and clean up.
|
|
97
|
-
*/
|
|
98
|
-
kill(): void;
|
|
99
|
-
/**
|
|
100
|
-
* Whether the bridge is currently running.
|
|
101
|
-
*/
|
|
102
|
-
get running(): boolean;
|
|
103
|
-
startDb(config: ISmartDbRustConfig): Promise<{
|
|
104
|
-
connectionUri: string;
|
|
105
|
-
}>;
|
|
106
|
-
stopDb(): Promise<void>;
|
|
107
|
-
getStatus(): Promise<{
|
|
108
|
-
running: boolean;
|
|
109
|
-
}>;
|
|
110
|
-
getMetrics(): Promise<ISmartDbMetrics>;
|
|
111
|
-
getOpLog(params?: {
|
|
112
|
-
sinceSeq?: number;
|
|
113
|
-
limit?: number;
|
|
114
|
-
db?: string;
|
|
115
|
-
collection?: string;
|
|
116
|
-
}): Promise<IOpLogResult>;
|
|
117
|
-
getOpLogStats(): Promise<IOpLogStats>;
|
|
118
|
-
revertToSeq(seq: number, dryRun?: boolean): Promise<IRevertResult>;
|
|
119
|
-
getCollections(db?: string): Promise<ICollectionInfo[]>;
|
|
120
|
-
getDocuments(db: string, collection: string, limit?: number, skip?: number): Promise<IDocumentsResult>;
|
|
121
|
-
}
|
|
122
|
-
export {};
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import * as plugins from './plugins.js';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import * as url from 'url';
|
|
4
|
-
import { EventEmitter } from 'events';
|
|
5
|
-
/**
|
|
6
|
-
* Get the package root directory using import.meta.url.
|
|
7
|
-
* This file is at ts/ts_smartdb/, so package root is 2 levels up.
|
|
8
|
-
*/
|
|
9
|
-
function getPackageRoot() {
|
|
10
|
-
const thisDir = path.dirname(url.fileURLToPath(import.meta.url));
|
|
11
|
-
return path.resolve(thisDir, '..', '..');
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Map Node.js process.platform/process.arch to tsrust's friendly name suffix.
|
|
15
|
-
* tsrust names cross-compiled binaries as: rustdb_linux_amd64, rustdb_linux_arm64, etc.
|
|
16
|
-
*/
|
|
17
|
-
function getTsrustPlatformSuffix() {
|
|
18
|
-
const archMap = { x64: 'amd64', arm64: 'arm64' };
|
|
19
|
-
const osMap = { linux: 'linux', darwin: 'macos' };
|
|
20
|
-
const os = osMap[process.platform];
|
|
21
|
-
const arch = archMap[process.arch];
|
|
22
|
-
if (os && arch) {
|
|
23
|
-
return `${os}_${arch}`;
|
|
24
|
-
}
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Build local search paths for the Rust binary, including dist_rust/ candidates
|
|
29
|
-
* (built by tsrust) and local development build paths.
|
|
30
|
-
*/
|
|
31
|
-
function buildLocalPaths() {
|
|
32
|
-
const packageRoot = getPackageRoot();
|
|
33
|
-
const suffix = getTsrustPlatformSuffix();
|
|
34
|
-
const paths = [];
|
|
35
|
-
// dist_rust/ candidates (tsrust cross-compiled output)
|
|
36
|
-
if (suffix) {
|
|
37
|
-
paths.push(path.join(packageRoot, 'dist_rust', `rustdb_${suffix}`));
|
|
38
|
-
}
|
|
39
|
-
paths.push(path.join(packageRoot, 'dist_rust', 'rustdb'));
|
|
40
|
-
// Local dev build paths
|
|
41
|
-
paths.push(path.resolve(process.cwd(), 'rust', 'target', 'release', 'rustdb'));
|
|
42
|
-
paths.push(path.resolve(process.cwd(), 'rust', 'target', 'debug', 'rustdb'));
|
|
43
|
-
return paths;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Bridge between TypeScript SmartdbServer and the Rust binary.
|
|
47
|
-
* Wraps @push.rocks/smartrust's RustBridge with type-safe command definitions.
|
|
48
|
-
*/
|
|
49
|
-
export class RustDbBridge extends EventEmitter {
|
|
50
|
-
constructor() {
|
|
51
|
-
super();
|
|
52
|
-
this.bridge = new plugins.smartrust.RustBridge({
|
|
53
|
-
binaryName: 'rustdb',
|
|
54
|
-
envVarName: 'SMARTDB_RUST_BINARY',
|
|
55
|
-
platformPackagePrefix: '@push.rocks/smartdb',
|
|
56
|
-
localPaths: buildLocalPaths(),
|
|
57
|
-
maxPayloadSize: 10 * 1024 * 1024, // 10 MB
|
|
58
|
-
});
|
|
59
|
-
// Forward events from the inner bridge
|
|
60
|
-
this.bridge.on('exit', (code, signal) => {
|
|
61
|
-
this.emit('exit', code, signal);
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Spawn the Rust binary in management mode.
|
|
66
|
-
* Returns true if the binary was found and spawned successfully.
|
|
67
|
-
*/
|
|
68
|
-
async spawn() {
|
|
69
|
-
return this.bridge.spawn();
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Kill the Rust process and clean up.
|
|
73
|
-
*/
|
|
74
|
-
kill() {
|
|
75
|
-
this.bridge.kill();
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Whether the bridge is currently running.
|
|
79
|
-
*/
|
|
80
|
-
get running() {
|
|
81
|
-
return this.bridge.running;
|
|
82
|
-
}
|
|
83
|
-
// --- Convenience methods for each management command ---
|
|
84
|
-
async startDb(config) {
|
|
85
|
-
return await this.bridge.sendCommand('start', { config });
|
|
86
|
-
}
|
|
87
|
-
async stopDb() {
|
|
88
|
-
await this.bridge.sendCommand('stop', {});
|
|
89
|
-
}
|
|
90
|
-
async getStatus() {
|
|
91
|
-
return await this.bridge.sendCommand('getStatus', {});
|
|
92
|
-
}
|
|
93
|
-
async getMetrics() {
|
|
94
|
-
return this.bridge.sendCommand('getMetrics', {});
|
|
95
|
-
}
|
|
96
|
-
async getOpLog(params = {}) {
|
|
97
|
-
return this.bridge.sendCommand('getOpLog', params);
|
|
98
|
-
}
|
|
99
|
-
async getOpLogStats() {
|
|
100
|
-
return this.bridge.sendCommand('getOpLogStats', {});
|
|
101
|
-
}
|
|
102
|
-
async revertToSeq(seq, dryRun = false) {
|
|
103
|
-
return this.bridge.sendCommand('revertToSeq', { seq, dryRun });
|
|
104
|
-
}
|
|
105
|
-
async getCollections(db) {
|
|
106
|
-
const result = await this.bridge.sendCommand('getCollections', db ? { db } : {});
|
|
107
|
-
return result.collections;
|
|
108
|
-
}
|
|
109
|
-
async getDocuments(db, collection, limit = 50, skip = 0) {
|
|
110
|
-
return this.bridge.sendCommand('getDocuments', { db, collection, limit, skip });
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1kYi1icmlkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90c19zbWFydGRiL3J1c3QtZGItYnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFzSHRDOzs7R0FHRztBQUNILFNBQVMsY0FBYztJQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHVCQUF1QjtJQUM5QixNQUFNLE9BQU8sR0FBMkIsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN6RSxNQUFNLEtBQUssR0FBMkIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMxRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDZixPQUFPLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGVBQWU7SUFDdEIsTUFBTSxXQUFXLEdBQUcsY0FBYyxFQUFFLENBQUM7SUFDckMsTUFBTSxNQUFNLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztJQUN6QyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFFM0IsdURBQXVEO0lBQ3ZELElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUUxRCx3QkFBd0I7SUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQy9FLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUU3RSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sWUFBYSxTQUFRLFlBQVk7SUFHNUM7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBbUI7WUFDL0QsVUFBVSxFQUFFLFFBQVE7WUFDcEIsVUFBVSxFQUFFLHFCQUFxQjtZQUNqQyxxQkFBcUIsRUFBRSxxQkFBcUI7WUFDNUMsVUFBVSxFQUFFLGVBQWUsRUFBRTtZQUM3QixjQUFjLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsUUFBUTtTQUMzQyxDQUFDLENBQUM7UUFFSCx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBbUIsRUFBRSxNQUFxQixFQUFFLEVBQUU7WUFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxJQUFJO1FBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBRUQsMERBQTBEO0lBRW5ELEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBMEI7UUFDN0MsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUE4QixDQUFDO0lBQ3pGLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTTtRQUNqQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUEyQixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTO1FBQ3BCLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBMkIsQ0FBeUIsQ0FBQztJQUN6RyxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBMkIsQ0FBNkIsQ0FBQztJQUN4RyxDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUtsQixFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUEwQixDQUFDO0lBQzlFLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYTtRQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxFQUEyQixDQUF5QixDQUFDO0lBQ3ZHLENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQVcsRUFBRSxNQUFNLEdBQUcsS0FBSztRQUNsRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBMkIsQ0FBQztJQUMzRixDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFXO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQXVDLENBQUM7UUFDdkgsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUN2QixFQUFVLEVBQ1YsVUFBa0IsRUFDbEIsS0FBSyxHQUFHLEVBQUUsRUFDVixJQUFJLEdBQUcsQ0FBQztRQUVSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQThCLENBQUM7SUFDL0csQ0FBQztDQUNGIn0=
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import type { IOpLogResult, IOpLogStats, IRevertResult, ICollectionInfo, IDocumentsResult, ISmartDbMetrics } from '../rust-db-bridge.js';
|
|
2
|
-
/**
|
|
3
|
-
* Server configuration options
|
|
4
|
-
*/
|
|
5
|
-
export interface ISmartdbServerOptions {
|
|
6
|
-
/** Port to listen on (default: 27017) - ignored if socketPath is set */
|
|
7
|
-
port?: number;
|
|
8
|
-
/** Host to bind to (default: 127.0.0.1) - ignored if socketPath is set */
|
|
9
|
-
host?: string;
|
|
10
|
-
/** Unix socket path - if set, server listens on socket instead of TCP */
|
|
11
|
-
socketPath?: string;
|
|
12
|
-
/** Storage type: 'memory' or 'file' (default: 'memory') */
|
|
13
|
-
storage?: 'memory' | 'file';
|
|
14
|
-
/** Path for file storage (required if storage is 'file') */
|
|
15
|
-
storagePath?: string;
|
|
16
|
-
/** Enable persistence for memory storage */
|
|
17
|
-
persistPath?: string;
|
|
18
|
-
/** Persistence interval in ms (default: 60000) */
|
|
19
|
-
persistIntervalMs?: number;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* SmartdbServer - Wire protocol compatible database server backed by Rust
|
|
23
|
-
*
|
|
24
|
-
* This server implements the wire protocol to allow official drivers to
|
|
25
|
-
* connect and perform operations. The core engine runs as a Rust sidecar
|
|
26
|
-
* binary managed via @push.rocks/smartrust IPC.
|
|
27
|
-
*
|
|
28
|
-
* @example
|
|
29
|
-
* ```typescript
|
|
30
|
-
* import { SmartdbServer } from '@push.rocks/smartdb';
|
|
31
|
-
* import { MongoClient } from 'mongodb';
|
|
32
|
-
*
|
|
33
|
-
* const server = new SmartdbServer({ port: 27017 });
|
|
34
|
-
* await server.start();
|
|
35
|
-
*
|
|
36
|
-
* const client = new MongoClient(server.getConnectionUri());
|
|
37
|
-
* await client.connect();
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
export declare class SmartdbServer {
|
|
41
|
-
private options;
|
|
42
|
-
private bridge;
|
|
43
|
-
private isRunning;
|
|
44
|
-
private resolvedConnectionUri;
|
|
45
|
-
constructor(options?: ISmartdbServerOptions);
|
|
46
|
-
/**
|
|
47
|
-
* Start the server
|
|
48
|
-
*/
|
|
49
|
-
start(): Promise<void>;
|
|
50
|
-
/**
|
|
51
|
-
* Stop the server
|
|
52
|
-
*/
|
|
53
|
-
stop(): Promise<void>;
|
|
54
|
-
/**
|
|
55
|
-
* Get the connection URI for this server
|
|
56
|
-
*/
|
|
57
|
-
getConnectionUri(): string;
|
|
58
|
-
/**
|
|
59
|
-
* Get the socket path (if using Unix socket mode)
|
|
60
|
-
*/
|
|
61
|
-
get socketPath(): string | undefined;
|
|
62
|
-
/**
|
|
63
|
-
* Check if the server is running
|
|
64
|
-
*/
|
|
65
|
-
get running(): boolean;
|
|
66
|
-
/**
|
|
67
|
-
* Get the port the server is listening on
|
|
68
|
-
*/
|
|
69
|
-
get port(): number;
|
|
70
|
-
/**
|
|
71
|
-
* Get the host the server is bound to
|
|
72
|
-
*/
|
|
73
|
-
get host(): string;
|
|
74
|
-
/**
|
|
75
|
-
* Get oplog entries, optionally filtered.
|
|
76
|
-
*/
|
|
77
|
-
getOpLog(params?: {
|
|
78
|
-
sinceSeq?: number;
|
|
79
|
-
limit?: number;
|
|
80
|
-
db?: string;
|
|
81
|
-
collection?: string;
|
|
82
|
-
}): Promise<IOpLogResult>;
|
|
83
|
-
/**
|
|
84
|
-
* Get aggregate oplog statistics.
|
|
85
|
-
*/
|
|
86
|
-
getOpLogStats(): Promise<IOpLogStats>;
|
|
87
|
-
/**
|
|
88
|
-
* Revert database state to a specific oplog sequence number.
|
|
89
|
-
* Use dryRun=true to preview which entries would be reverted.
|
|
90
|
-
*/
|
|
91
|
-
revertToSeq(seq: number, dryRun?: boolean): Promise<IRevertResult>;
|
|
92
|
-
/**
|
|
93
|
-
* List all collections across all databases, with document counts.
|
|
94
|
-
*/
|
|
95
|
-
getCollections(db?: string): Promise<ICollectionInfo[]>;
|
|
96
|
-
/**
|
|
97
|
-
* Get documents from a collection with pagination.
|
|
98
|
-
*/
|
|
99
|
-
getDocuments(db: string, collection: string, limit?: number, skip?: number): Promise<IDocumentsResult>;
|
|
100
|
-
/**
|
|
101
|
-
* Get server metrics including database/collection counts and oplog info.
|
|
102
|
-
*/
|
|
103
|
-
getMetrics(): Promise<ISmartDbMetrics>;
|
|
104
|
-
}
|