@push.rocks/smartdb 1.0.1 → 2.1.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.
- package/.smartconfig.json +18 -4
- package/dist_rust/rustdb_linux_amd64 +0 -0
- package/dist_rust/rustdb_linux_arm64 +0 -0
- package/dist_ts/00_commitinfo_data.js +3 -3
- package/dist_ts/index.d.ts +1 -0
- package/dist_ts/ts_local/classes.localsmartdb.d.ts +5 -5
- package/dist_ts/ts_local/classes.localsmartdb.js +7 -9
- package/dist_ts/ts_local/plugins.d.ts +1 -2
- package/dist_ts/ts_local/plugins.js +3 -3
- package/dist_ts/ts_smartdb/index.d.ts +2 -24
- package/dist_ts/ts_smartdb/index.js +4 -29
- package/dist_ts/ts_smartdb/plugins.d.ts +2 -10
- package/dist_ts/ts_smartdb/plugins.js +3 -13
- package/dist_ts/ts_smartdb/rust-db-bridge.d.ts +122 -0
- package/dist_ts/ts_smartdb/rust-db-bridge.js +113 -0
- package/dist_ts/ts_smartdb/server/SmartdbServer.d.ts +39 -37
- package/dist_ts/ts_smartdb/server/SmartdbServer.js +87 -206
- package/dist_ts/ts_smartdb/server/index.d.ts +0 -4
- package/dist_ts/ts_smartdb/server/index.js +1 -5
- package/dist_ts_debugserver/bundled.d.ts +4 -0
- package/dist_ts_debugserver/bundled.js +12 -0
- package/dist_ts_debugserver/classes.debugserver.d.ts +36 -0
- package/dist_ts_debugserver/classes.debugserver.js +95 -0
- package/dist_ts_debugserver/index.d.ts +2 -0
- package/dist_ts_debugserver/index.js +2 -0
- package/dist_ts_debugserver/plugins.d.ts +2 -0
- package/dist_ts_debugserver/plugins.js +3 -0
- package/dist_ts_debugui/index.d.ts +2 -0
- package/dist_ts_debugui/index.js +2 -0
- package/dist_ts_debugui/plugins.d.ts +1 -0
- package/dist_ts_debugui/plugins.js +2 -0
- package/dist_ts_debugui/smartdb-debugui.d.ts +62 -0
- package/dist_ts_debugui/smartdb-debugui.js +1132 -0
- package/license +3 -1
- package/package.json +14 -13
- package/readme.md +209 -177
- package/ts/00_commitinfo_data.ts +2 -2
- package/ts/index.ts +11 -0
- package/ts/ts_local/classes.localsmartdb.ts +5 -6
- package/ts/ts_local/plugins.ts +1 -3
- package/ts/ts_smartdb/index.ts +14 -41
- package/ts/ts_smartdb/plugins.ts +2 -15
- package/ts/ts_smartdb/rust-db-bridge.ts +262 -0
- package/ts/ts_smartdb/server/SmartdbServer.ts +115 -246
- package/ts/ts_smartdb/server/index.ts +0 -7
- package/dist_ts/ts_smartdb/engine/AggregationEngine.d.ts +0 -66
- package/dist_ts/ts_smartdb/engine/AggregationEngine.js +0 -189
- package/dist_ts/ts_smartdb/engine/IndexEngine.d.ts +0 -97
- package/dist_ts/ts_smartdb/engine/IndexEngine.js +0 -678
- package/dist_ts/ts_smartdb/engine/QueryEngine.d.ts +0 -54
- package/dist_ts/ts_smartdb/engine/QueryEngine.js +0 -271
- package/dist_ts/ts_smartdb/engine/QueryPlanner.d.ts +0 -64
- package/dist_ts/ts_smartdb/engine/QueryPlanner.js +0 -308
- package/dist_ts/ts_smartdb/engine/SessionEngine.d.ts +0 -117
- package/dist_ts/ts_smartdb/engine/SessionEngine.js +0 -232
- package/dist_ts/ts_smartdb/engine/TransactionEngine.d.ts +0 -85
- package/dist_ts/ts_smartdb/engine/TransactionEngine.js +0 -287
- package/dist_ts/ts_smartdb/engine/UpdateEngine.d.ts +0 -47
- package/dist_ts/ts_smartdb/engine/UpdateEngine.js +0 -461
- package/dist_ts/ts_smartdb/errors/SmartdbErrors.d.ts +0 -100
- package/dist_ts/ts_smartdb/errors/SmartdbErrors.js +0 -155
- package/dist_ts/ts_smartdb/server/CommandRouter.d.ts +0 -87
- package/dist_ts/ts_smartdb/server/CommandRouter.js +0 -222
- package/dist_ts/ts_smartdb/server/WireProtocol.d.ts +0 -117
- package/dist_ts/ts_smartdb/server/WireProtocol.js +0 -298
- package/dist_ts/ts_smartdb/server/handlers/AdminHandler.d.ts +0 -100
- package/dist_ts/ts_smartdb/server/handlers/AdminHandler.js +0 -668
- package/dist_ts/ts_smartdb/server/handlers/AggregateHandler.d.ts +0 -31
- package/dist_ts/ts_smartdb/server/handlers/AggregateHandler.js +0 -277
- package/dist_ts/ts_smartdb/server/handlers/DeleteHandler.d.ts +0 -8
- package/dist_ts/ts_smartdb/server/handlers/DeleteHandler.js +0 -95
- package/dist_ts/ts_smartdb/server/handlers/FindHandler.d.ts +0 -31
- package/dist_ts/ts_smartdb/server/handlers/FindHandler.js +0 -291
- package/dist_ts/ts_smartdb/server/handlers/HelloHandler.d.ts +0 -11
- package/dist_ts/ts_smartdb/server/handlers/HelloHandler.js +0 -62
- package/dist_ts/ts_smartdb/server/handlers/IndexHandler.d.ts +0 -20
- package/dist_ts/ts_smartdb/server/handlers/IndexHandler.js +0 -183
- package/dist_ts/ts_smartdb/server/handlers/InsertHandler.d.ts +0 -8
- package/dist_ts/ts_smartdb/server/handlers/InsertHandler.js +0 -79
- package/dist_ts/ts_smartdb/server/handlers/UpdateHandler.d.ts +0 -24
- package/dist_ts/ts_smartdb/server/handlers/UpdateHandler.js +0 -296
- package/dist_ts/ts_smartdb/server/handlers/index.d.ts +0 -8
- package/dist_ts/ts_smartdb/server/handlers/index.js +0 -10
- package/dist_ts/ts_smartdb/storage/FileStorageAdapter.d.ts +0 -85
- package/dist_ts/ts_smartdb/storage/FileStorageAdapter.js +0 -465
- package/dist_ts/ts_smartdb/storage/IStorageAdapter.d.ts +0 -145
- package/dist_ts/ts_smartdb/storage/IStorageAdapter.js +0 -2
- package/dist_ts/ts_smartdb/storage/MemoryStorageAdapter.d.ts +0 -67
- package/dist_ts/ts_smartdb/storage/MemoryStorageAdapter.js +0 -378
- package/dist_ts/ts_smartdb/storage/OpLog.d.ts +0 -93
- package/dist_ts/ts_smartdb/storage/OpLog.js +0 -221
- package/dist_ts/ts_smartdb/storage/WAL.d.ts +0 -117
- package/dist_ts/ts_smartdb/storage/WAL.js +0 -286
- package/dist_ts/ts_smartdb/types/interfaces.d.ts +0 -363
- package/dist_ts/ts_smartdb/types/interfaces.js +0 -2
- package/dist_ts/ts_smartdb/utils/checksum.d.ts +0 -30
- package/dist_ts/ts_smartdb/utils/checksum.js +0 -77
- package/dist_ts/ts_smartdb/utils/index.d.ts +0 -1
- package/dist_ts/ts_smartdb/utils/index.js +0 -2
- package/ts/ts_smartdb/engine/AggregationEngine.ts +0 -283
- package/ts/ts_smartdb/engine/IndexEngine.ts +0 -798
- package/ts/ts_smartdb/engine/QueryEngine.ts +0 -301
- package/ts/ts_smartdb/engine/QueryPlanner.ts +0 -393
- package/ts/ts_smartdb/engine/SessionEngine.ts +0 -292
- package/ts/ts_smartdb/engine/TransactionEngine.ts +0 -351
- package/ts/ts_smartdb/engine/UpdateEngine.ts +0 -506
- package/ts/ts_smartdb/errors/SmartdbErrors.ts +0 -181
- package/ts/ts_smartdb/server/CommandRouter.ts +0 -289
- package/ts/ts_smartdb/server/WireProtocol.ts +0 -416
- package/ts/ts_smartdb/server/handlers/AdminHandler.ts +0 -719
- package/ts/ts_smartdb/server/handlers/AggregateHandler.ts +0 -342
- package/ts/ts_smartdb/server/handlers/DeleteHandler.ts +0 -115
- package/ts/ts_smartdb/server/handlers/FindHandler.ts +0 -330
- package/ts/ts_smartdb/server/handlers/HelloHandler.ts +0 -78
- package/ts/ts_smartdb/server/handlers/IndexHandler.ts +0 -207
- package/ts/ts_smartdb/server/handlers/InsertHandler.ts +0 -97
- package/ts/ts_smartdb/server/handlers/UpdateHandler.ts +0 -344
- package/ts/ts_smartdb/server/handlers/index.ts +0 -10
- package/ts/ts_smartdb/storage/FileStorageAdapter.ts +0 -562
- package/ts/ts_smartdb/storage/IStorageAdapter.ts +0 -208
- package/ts/ts_smartdb/storage/MemoryStorageAdapter.ts +0 -455
- package/ts/ts_smartdb/storage/OpLog.ts +0 -282
- package/ts/ts_smartdb/storage/WAL.ts +0 -375
- package/ts/ts_smartdb/types/interfaces.ts +0 -433
- package/ts/ts_smartdb/utils/checksum.ts +0 -88
- package/ts/ts_smartdb/utils/index.ts +0 -1
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Base error class for all SmartDB errors
|
|
3
|
-
* Mirrors MongoDB driver error hierarchy
|
|
4
|
-
*/
|
|
5
|
-
export class SmartdbError extends Error {
|
|
6
|
-
code;
|
|
7
|
-
codeName;
|
|
8
|
-
constructor(message, code, codeName) {
|
|
9
|
-
super(message);
|
|
10
|
-
this.name = 'SmartdbError';
|
|
11
|
-
this.code = code;
|
|
12
|
-
this.codeName = codeName;
|
|
13
|
-
Object.setPrototypeOf(this, new.target.prototype);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Error thrown during connection issues
|
|
18
|
-
*/
|
|
19
|
-
export class SmartdbConnectionError extends SmartdbError {
|
|
20
|
-
constructor(message) {
|
|
21
|
-
super(message);
|
|
22
|
-
this.name = 'SmartdbConnectionError';
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Error thrown when an operation times out
|
|
27
|
-
*/
|
|
28
|
-
export class SmartdbTimeoutError extends SmartdbError {
|
|
29
|
-
constructor(message) {
|
|
30
|
-
super(message, 50, 'MaxTimeMSExpired');
|
|
31
|
-
this.name = 'SmartdbTimeoutError';
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Error thrown during write operations
|
|
36
|
-
*/
|
|
37
|
-
export class SmartdbWriteError extends SmartdbError {
|
|
38
|
-
writeErrors;
|
|
39
|
-
result;
|
|
40
|
-
constructor(message, code, writeErrors) {
|
|
41
|
-
super(message, code);
|
|
42
|
-
this.name = 'SmartdbWriteError';
|
|
43
|
-
this.writeErrors = writeErrors;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Error thrown for duplicate key violations
|
|
48
|
-
*/
|
|
49
|
-
export class SmartdbDuplicateKeyError extends SmartdbWriteError {
|
|
50
|
-
keyPattern;
|
|
51
|
-
keyValue;
|
|
52
|
-
constructor(message, keyPattern, keyValue) {
|
|
53
|
-
super(message, 11000);
|
|
54
|
-
this.name = 'SmartdbDuplicateKeyError';
|
|
55
|
-
this.codeName = 'DuplicateKey';
|
|
56
|
-
this.keyPattern = keyPattern;
|
|
57
|
-
this.keyValue = keyValue;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Error thrown for bulk write failures
|
|
62
|
-
*/
|
|
63
|
-
export class SmartdbBulkWriteError extends SmartdbError {
|
|
64
|
-
writeErrors;
|
|
65
|
-
result;
|
|
66
|
-
constructor(message, writeErrors, result) {
|
|
67
|
-
super(message, 65);
|
|
68
|
-
this.name = 'SmartdbBulkWriteError';
|
|
69
|
-
this.writeErrors = writeErrors;
|
|
70
|
-
this.result = result;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Error thrown during transaction operations
|
|
75
|
-
*/
|
|
76
|
-
export class SmartdbTransactionError extends SmartdbError {
|
|
77
|
-
constructor(message, code) {
|
|
78
|
-
super(message, code);
|
|
79
|
-
this.name = 'SmartdbTransactionError';
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Error thrown when a transaction is aborted due to conflict
|
|
84
|
-
*/
|
|
85
|
-
export class SmartdbWriteConflictError extends SmartdbTransactionError {
|
|
86
|
-
constructor(message = 'Write conflict during transaction') {
|
|
87
|
-
super(message, 112);
|
|
88
|
-
this.name = 'SmartdbWriteConflictError';
|
|
89
|
-
this.codeName = 'WriteConflict';
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Error thrown for invalid arguments
|
|
94
|
-
*/
|
|
95
|
-
export class SmartdbArgumentError extends SmartdbError {
|
|
96
|
-
constructor(message) {
|
|
97
|
-
super(message);
|
|
98
|
-
this.name = 'SmartdbArgumentError';
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Error thrown when an operation is not supported
|
|
103
|
-
*/
|
|
104
|
-
export class SmartdbNotSupportedError extends SmartdbError {
|
|
105
|
-
constructor(message) {
|
|
106
|
-
super(message, 115);
|
|
107
|
-
this.name = 'SmartdbNotSupportedError';
|
|
108
|
-
this.codeName = 'CommandNotSupported';
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Error thrown when cursor is exhausted or closed
|
|
113
|
-
*/
|
|
114
|
-
export class SmartdbCursorError extends SmartdbError {
|
|
115
|
-
constructor(message) {
|
|
116
|
-
super(message);
|
|
117
|
-
this.name = 'SmartdbCursorError';
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Error thrown when a namespace (database.collection) is invalid
|
|
122
|
-
*/
|
|
123
|
-
export class SmartdbNamespaceError extends SmartdbError {
|
|
124
|
-
constructor(message) {
|
|
125
|
-
super(message, 73);
|
|
126
|
-
this.name = 'SmartdbNamespaceError';
|
|
127
|
-
this.codeName = 'InvalidNamespace';
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Error thrown when an index operation fails
|
|
132
|
-
*/
|
|
133
|
-
export class SmartdbIndexError extends SmartdbError {
|
|
134
|
-
constructor(message, code) {
|
|
135
|
-
super(message, code || 86);
|
|
136
|
-
this.name = 'SmartdbIndexError';
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Convert any error to a SmartdbError
|
|
141
|
-
*/
|
|
142
|
-
export function toSmartdbError(error) {
|
|
143
|
-
if (error instanceof SmartdbError) {
|
|
144
|
-
return error;
|
|
145
|
-
}
|
|
146
|
-
const smartdbError = new SmartdbError(error.message || String(error));
|
|
147
|
-
if (error.code) {
|
|
148
|
-
smartdbError.code = error.code;
|
|
149
|
-
}
|
|
150
|
-
if (error.codeName) {
|
|
151
|
-
smartdbError.codeName = error.codeName;
|
|
152
|
-
}
|
|
153
|
-
return smartdbError;
|
|
154
|
-
}
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU21hcnRkYkVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3RzX3NtYXJ0ZGIvZXJyb3JzL1NtYXJ0ZGJFcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFlBQWEsU0FBUSxLQUFLO0lBQzlCLElBQUksQ0FBVTtJQUNkLFFBQVEsQ0FBVTtJQUV6QixZQUFZLE9BQWUsRUFBRSxJQUFhLEVBQUUsUUFBaUI7UUFDM0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxZQUFZO0lBQ3RELFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLHdCQUF3QixDQUFDO0lBQ3ZDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFlBQVk7SUFDbkQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxZQUFZO0lBQzFDLFdBQVcsQ0FBaUI7SUFDNUIsTUFBTSxDQUFPO0lBRXBCLFlBQVksT0FBZSxFQUFFLElBQWEsRUFBRSxXQUEyQjtRQUNy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
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import type { IStorageAdapter } from '../storage/IStorageAdapter.js';
|
|
3
|
-
import type { IParsedCommand } from './WireProtocol.js';
|
|
4
|
-
import type { SmartdbServer } from './SmartdbServer.js';
|
|
5
|
-
import { IndexEngine } from '../engine/IndexEngine.js';
|
|
6
|
-
import { TransactionEngine } from '../engine/TransactionEngine.js';
|
|
7
|
-
import { SessionEngine } from '../engine/SessionEngine.js';
|
|
8
|
-
/**
|
|
9
|
-
* Handler context passed to command handlers
|
|
10
|
-
*/
|
|
11
|
-
export interface IHandlerContext {
|
|
12
|
-
storage: IStorageAdapter;
|
|
13
|
-
server: SmartdbServer;
|
|
14
|
-
database: string;
|
|
15
|
-
command: plugins.bson.Document;
|
|
16
|
-
documentSequences?: Map<string, plugins.bson.Document[]>;
|
|
17
|
-
/** Get or create an IndexEngine for a collection */
|
|
18
|
-
getIndexEngine: (collName: string) => IndexEngine;
|
|
19
|
-
/** Transaction engine instance */
|
|
20
|
-
transactionEngine: TransactionEngine;
|
|
21
|
-
/** Current transaction ID (if in a transaction) */
|
|
22
|
-
txnId?: string;
|
|
23
|
-
/** Session ID (from lsid) */
|
|
24
|
-
sessionId?: string;
|
|
25
|
-
/** Session engine instance */
|
|
26
|
-
sessionEngine: SessionEngine;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Command handler interface
|
|
30
|
-
*/
|
|
31
|
-
export interface ICommandHandler {
|
|
32
|
-
handle(context: IHandlerContext): Promise<plugins.bson.Document>;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* CommandRouter - Routes incoming commands to appropriate handlers
|
|
36
|
-
*/
|
|
37
|
-
export declare class CommandRouter {
|
|
38
|
-
private storage;
|
|
39
|
-
private server;
|
|
40
|
-
private handlers;
|
|
41
|
-
private cursors;
|
|
42
|
-
private cursorIdCounter;
|
|
43
|
-
private indexEngines;
|
|
44
|
-
private transactionEngine;
|
|
45
|
-
private sessionEngine;
|
|
46
|
-
constructor(storage: IStorageAdapter, server: SmartdbServer);
|
|
47
|
-
/**
|
|
48
|
-
* Get or create an IndexEngine for a database.collection
|
|
49
|
-
*/
|
|
50
|
-
getIndexEngine(dbName: string, collName: string): IndexEngine;
|
|
51
|
-
/**
|
|
52
|
-
* Clear index engine cache for a collection (used when collection is dropped)
|
|
53
|
-
*/
|
|
54
|
-
clearIndexEngineCache(dbName: string, collName?: string): void;
|
|
55
|
-
/**
|
|
56
|
-
* Register all command handlers
|
|
57
|
-
*/
|
|
58
|
-
private registerHandlers;
|
|
59
|
-
/**
|
|
60
|
-
* Route a command to its handler
|
|
61
|
-
*/
|
|
62
|
-
route(parsedCommand: IParsedCommand): Promise<plugins.bson.Document>;
|
|
63
|
-
/**
|
|
64
|
-
* Close the command router and cleanup resources
|
|
65
|
-
*/
|
|
66
|
-
close(): void;
|
|
67
|
-
/**
|
|
68
|
-
* Get session engine (for administrative purposes)
|
|
69
|
-
*/
|
|
70
|
-
getSessionEngine(): SessionEngine;
|
|
71
|
-
/**
|
|
72
|
-
* Get transaction engine (for administrative purposes)
|
|
73
|
-
*/
|
|
74
|
-
getTransactionEngine(): TransactionEngine;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Cursor state for multi-batch queries
|
|
78
|
-
*/
|
|
79
|
-
export interface ICursorState {
|
|
80
|
-
id: bigint;
|
|
81
|
-
database: string;
|
|
82
|
-
collection: string;
|
|
83
|
-
documents: plugins.bson.Document[];
|
|
84
|
-
position: number;
|
|
85
|
-
batchSize: number;
|
|
86
|
-
createdAt: Date;
|
|
87
|
-
}
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import { IndexEngine } from '../engine/IndexEngine.js';
|
|
3
|
-
import { TransactionEngine } from '../engine/TransactionEngine.js';
|
|
4
|
-
import { SessionEngine } from '../engine/SessionEngine.js';
|
|
5
|
-
// Import handlers
|
|
6
|
-
import { HelloHandler } from './handlers/HelloHandler.js';
|
|
7
|
-
import { InsertHandler } from './handlers/InsertHandler.js';
|
|
8
|
-
import { FindHandler } from './handlers/FindHandler.js';
|
|
9
|
-
import { UpdateHandler } from './handlers/UpdateHandler.js';
|
|
10
|
-
import { DeleteHandler } from './handlers/DeleteHandler.js';
|
|
11
|
-
import { AggregateHandler } from './handlers/AggregateHandler.js';
|
|
12
|
-
import { IndexHandler } from './handlers/IndexHandler.js';
|
|
13
|
-
import { AdminHandler } from './handlers/AdminHandler.js';
|
|
14
|
-
/**
|
|
15
|
-
* CommandRouter - Routes incoming commands to appropriate handlers
|
|
16
|
-
*/
|
|
17
|
-
export class CommandRouter {
|
|
18
|
-
storage;
|
|
19
|
-
server;
|
|
20
|
-
handlers = new Map();
|
|
21
|
-
// Cursor state for getMore operations
|
|
22
|
-
cursors = new Map();
|
|
23
|
-
cursorIdCounter = BigInt(1);
|
|
24
|
-
// Index engine cache: db.collection -> IndexEngine
|
|
25
|
-
indexEngines = new Map();
|
|
26
|
-
// Transaction engine (shared across all handlers)
|
|
27
|
-
transactionEngine;
|
|
28
|
-
// Session engine (shared across all handlers)
|
|
29
|
-
sessionEngine;
|
|
30
|
-
constructor(storage, server) {
|
|
31
|
-
this.storage = storage;
|
|
32
|
-
this.server = server;
|
|
33
|
-
this.transactionEngine = new TransactionEngine(storage);
|
|
34
|
-
this.sessionEngine = new SessionEngine();
|
|
35
|
-
// Link session engine to transaction engine for auto-abort on session expiry
|
|
36
|
-
this.sessionEngine.setTransactionEngine(this.transactionEngine);
|
|
37
|
-
this.registerHandlers();
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Get or create an IndexEngine for a database.collection
|
|
41
|
-
*/
|
|
42
|
-
getIndexEngine(dbName, collName) {
|
|
43
|
-
const key = `${dbName}.${collName}`;
|
|
44
|
-
let engine = this.indexEngines.get(key);
|
|
45
|
-
if (!engine) {
|
|
46
|
-
engine = new IndexEngine(dbName, collName, this.storage);
|
|
47
|
-
this.indexEngines.set(key, engine);
|
|
48
|
-
}
|
|
49
|
-
return engine;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Clear index engine cache for a collection (used when collection is dropped)
|
|
53
|
-
*/
|
|
54
|
-
clearIndexEngineCache(dbName, collName) {
|
|
55
|
-
if (collName) {
|
|
56
|
-
this.indexEngines.delete(`${dbName}.${collName}`);
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
// Clear all engines for the database
|
|
60
|
-
for (const key of this.indexEngines.keys()) {
|
|
61
|
-
if (key.startsWith(`${dbName}.`)) {
|
|
62
|
-
this.indexEngines.delete(key);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Register all command handlers
|
|
69
|
-
*/
|
|
70
|
-
registerHandlers() {
|
|
71
|
-
// Create handler instances with shared state
|
|
72
|
-
const helloHandler = new HelloHandler();
|
|
73
|
-
const findHandler = new FindHandler(this.cursors, () => this.cursorIdCounter++);
|
|
74
|
-
const insertHandler = new InsertHandler();
|
|
75
|
-
const updateHandler = new UpdateHandler();
|
|
76
|
-
const deleteHandler = new DeleteHandler();
|
|
77
|
-
const aggregateHandler = new AggregateHandler(this.cursors, () => this.cursorIdCounter++);
|
|
78
|
-
const indexHandler = new IndexHandler();
|
|
79
|
-
const adminHandler = new AdminHandler();
|
|
80
|
-
// Handshake commands
|
|
81
|
-
this.handlers.set('hello', helloHandler);
|
|
82
|
-
this.handlers.set('ismaster', helloHandler);
|
|
83
|
-
this.handlers.set('isMaster', helloHandler);
|
|
84
|
-
// CRUD commands
|
|
85
|
-
this.handlers.set('find', findHandler);
|
|
86
|
-
this.handlers.set('insert', insertHandler);
|
|
87
|
-
this.handlers.set('update', updateHandler);
|
|
88
|
-
this.handlers.set('delete', deleteHandler);
|
|
89
|
-
this.handlers.set('findAndModify', updateHandler);
|
|
90
|
-
this.handlers.set('getMore', findHandler);
|
|
91
|
-
this.handlers.set('killCursors', findHandler);
|
|
92
|
-
// Aggregation
|
|
93
|
-
this.handlers.set('aggregate', aggregateHandler);
|
|
94
|
-
this.handlers.set('count', findHandler);
|
|
95
|
-
this.handlers.set('distinct', findHandler);
|
|
96
|
-
// Index operations
|
|
97
|
-
this.handlers.set('createIndexes', indexHandler);
|
|
98
|
-
this.handlers.set('dropIndexes', indexHandler);
|
|
99
|
-
this.handlers.set('listIndexes', indexHandler);
|
|
100
|
-
// Admin/Database operations
|
|
101
|
-
this.handlers.set('ping', adminHandler);
|
|
102
|
-
this.handlers.set('listDatabases', adminHandler);
|
|
103
|
-
this.handlers.set('listCollections', adminHandler);
|
|
104
|
-
this.handlers.set('drop', adminHandler);
|
|
105
|
-
this.handlers.set('dropDatabase', adminHandler);
|
|
106
|
-
this.handlers.set('create', adminHandler);
|
|
107
|
-
this.handlers.set('serverStatus', adminHandler);
|
|
108
|
-
this.handlers.set('buildInfo', adminHandler);
|
|
109
|
-
this.handlers.set('whatsmyuri', adminHandler);
|
|
110
|
-
this.handlers.set('getLog', adminHandler);
|
|
111
|
-
this.handlers.set('hostInfo', adminHandler);
|
|
112
|
-
this.handlers.set('replSetGetStatus', adminHandler);
|
|
113
|
-
this.handlers.set('isMaster', helloHandler);
|
|
114
|
-
this.handlers.set('saslStart', adminHandler);
|
|
115
|
-
this.handlers.set('saslContinue', adminHandler);
|
|
116
|
-
this.handlers.set('endSessions', adminHandler);
|
|
117
|
-
this.handlers.set('abortTransaction', adminHandler);
|
|
118
|
-
this.handlers.set('commitTransaction', adminHandler);
|
|
119
|
-
this.handlers.set('collStats', adminHandler);
|
|
120
|
-
this.handlers.set('dbStats', adminHandler);
|
|
121
|
-
this.handlers.set('connectionStatus', adminHandler);
|
|
122
|
-
this.handlers.set('currentOp', adminHandler);
|
|
123
|
-
this.handlers.set('collMod', adminHandler);
|
|
124
|
-
this.handlers.set('renameCollection', adminHandler);
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Route a command to its handler
|
|
128
|
-
*/
|
|
129
|
-
async route(parsedCommand) {
|
|
130
|
-
const { commandName, command, database, documentSequences } = parsedCommand;
|
|
131
|
-
// Extract session ID from lsid using SessionEngine helper
|
|
132
|
-
let sessionId = SessionEngine.extractSessionId(command.lsid);
|
|
133
|
-
let txnId;
|
|
134
|
-
// If we have a session ID, register/touch the session
|
|
135
|
-
if (sessionId) {
|
|
136
|
-
this.sessionEngine.getOrCreateSession(sessionId);
|
|
137
|
-
}
|
|
138
|
-
// Check if this starts a new transaction
|
|
139
|
-
if (command.startTransaction && sessionId) {
|
|
140
|
-
txnId = this.transactionEngine.startTransaction(sessionId);
|
|
141
|
-
this.sessionEngine.startTransaction(sessionId, txnId, command.txnNumber);
|
|
142
|
-
}
|
|
143
|
-
else if (sessionId && this.sessionEngine.isInTransaction(sessionId)) {
|
|
144
|
-
// Continue existing transaction
|
|
145
|
-
txnId = this.sessionEngine.getTransactionId(sessionId);
|
|
146
|
-
// Verify transaction is still active
|
|
147
|
-
if (txnId && !this.transactionEngine.isActive(txnId)) {
|
|
148
|
-
this.sessionEngine.endTransaction(sessionId);
|
|
149
|
-
txnId = undefined;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
// Create handler context
|
|
153
|
-
const context = {
|
|
154
|
-
storage: this.storage,
|
|
155
|
-
server: this.server,
|
|
156
|
-
database,
|
|
157
|
-
command,
|
|
158
|
-
documentSequences,
|
|
159
|
-
getIndexEngine: (collName) => this.getIndexEngine(database, collName),
|
|
160
|
-
transactionEngine: this.transactionEngine,
|
|
161
|
-
sessionEngine: this.sessionEngine,
|
|
162
|
-
txnId,
|
|
163
|
-
sessionId,
|
|
164
|
-
};
|
|
165
|
-
// Find handler
|
|
166
|
-
const handler = this.handlers.get(commandName);
|
|
167
|
-
if (!handler) {
|
|
168
|
-
// Unknown command
|
|
169
|
-
return {
|
|
170
|
-
ok: 0,
|
|
171
|
-
errmsg: `no such command: '${commandName}'`,
|
|
172
|
-
code: 59,
|
|
173
|
-
codeName: 'CommandNotFound',
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
try {
|
|
177
|
-
return await handler.handle(context);
|
|
178
|
-
}
|
|
179
|
-
catch (error) {
|
|
180
|
-
// Handle known error types
|
|
181
|
-
if (error.code) {
|
|
182
|
-
return {
|
|
183
|
-
ok: 0,
|
|
184
|
-
errmsg: error.message,
|
|
185
|
-
code: error.code,
|
|
186
|
-
codeName: error.codeName || 'UnknownError',
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
// Generic error
|
|
190
|
-
return {
|
|
191
|
-
ok: 0,
|
|
192
|
-
errmsg: error.message || 'Internal error',
|
|
193
|
-
code: 1,
|
|
194
|
-
codeName: 'InternalError',
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Close the command router and cleanup resources
|
|
200
|
-
*/
|
|
201
|
-
close() {
|
|
202
|
-
// Close session engine (stops cleanup interval, clears sessions)
|
|
203
|
-
this.sessionEngine.close();
|
|
204
|
-
// Clear cursors
|
|
205
|
-
this.cursors.clear();
|
|
206
|
-
// Clear index engine cache
|
|
207
|
-
this.indexEngines.clear();
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Get session engine (for administrative purposes)
|
|
211
|
-
*/
|
|
212
|
-
getSessionEngine() {
|
|
213
|
-
return this.sessionEngine;
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Get transaction engine (for administrative purposes)
|
|
217
|
-
*/
|
|
218
|
-
getTransactionEngine() {
|
|
219
|
-
return this.transactionEngine;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWFuZFJvdXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3RzX3NtYXJ0ZGIvc2VydmVyL0NvbW1hbmRSb3V0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFJekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRCxrQkFBa0I7QUFDbEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBOEIxRDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ2hCLE9BQU8sQ0FBa0I7SUFDekIsTUFBTSxDQUFnQjtJQUN0QixRQUFRLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFFM0Qsc0NBQXNDO0lBQzlCLE9BQU8sR0FBOEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUMvQyxlQUFlLEdBQVcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTVDLG1EQUFtRDtJQUMzQyxZQUFZLEdBQTZCLElBQUksR0FBRyxF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
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
/**
|
|
3
|
-
* MongoDB Wire Protocol Implementation
|
|
4
|
-
* Handles parsing and encoding of MongoDB wire protocol messages (OP_MSG primarily)
|
|
5
|
-
*
|
|
6
|
-
* Wire Protocol Message Format:
|
|
7
|
-
* - Header (16 bytes): messageLength (4), requestID (4), responseTo (4), opCode (4)
|
|
8
|
-
* - OP_MSG: flagBits (4), sections[], optional checksum (4)
|
|
9
|
-
*
|
|
10
|
-
* References:
|
|
11
|
-
* - https://www.mongodb.com/docs/manual/reference/mongodb-wire-protocol/
|
|
12
|
-
*/
|
|
13
|
-
export declare const OP_REPLY = 1;
|
|
14
|
-
export declare const OP_UPDATE = 2001;
|
|
15
|
-
export declare const OP_INSERT = 2002;
|
|
16
|
-
export declare const OP_QUERY = 2004;
|
|
17
|
-
export declare const OP_GET_MORE = 2005;
|
|
18
|
-
export declare const OP_DELETE = 2006;
|
|
19
|
-
export declare const OP_KILL_CURSORS = 2007;
|
|
20
|
-
export declare const OP_COMPRESSED = 2012;
|
|
21
|
-
export declare const OP_MSG = 2013;
|
|
22
|
-
export declare const SECTION_BODY = 0;
|
|
23
|
-
export declare const SECTION_DOCUMENT_SEQUENCE = 1;
|
|
24
|
-
export declare const MSG_FLAG_CHECKSUM_PRESENT: number;
|
|
25
|
-
export declare const MSG_FLAG_MORE_TO_COME: number;
|
|
26
|
-
export declare const MSG_FLAG_EXHAUST_ALLOWED: number;
|
|
27
|
-
/**
|
|
28
|
-
* Parsed message header
|
|
29
|
-
*/
|
|
30
|
-
export interface IMessageHeader {
|
|
31
|
-
messageLength: number;
|
|
32
|
-
requestID: number;
|
|
33
|
-
responseTo: number;
|
|
34
|
-
opCode: number;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Parsed OP_MSG message
|
|
38
|
-
*/
|
|
39
|
-
export interface IOpMsgMessage {
|
|
40
|
-
header: IMessageHeader;
|
|
41
|
-
flagBits: number;
|
|
42
|
-
sections: IOpMsgSection[];
|
|
43
|
-
checksum?: number;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* OP_MSG section (either body or document sequence)
|
|
47
|
-
*/
|
|
48
|
-
export interface IOpMsgSection {
|
|
49
|
-
type: number;
|
|
50
|
-
payload: plugins.bson.Document;
|
|
51
|
-
sequenceIdentifier?: string;
|
|
52
|
-
documents?: plugins.bson.Document[];
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Parsed OP_QUERY message (legacy, but used for initial handshake)
|
|
56
|
-
*/
|
|
57
|
-
export interface IOpQueryMessage {
|
|
58
|
-
header: IMessageHeader;
|
|
59
|
-
flags: number;
|
|
60
|
-
fullCollectionName: string;
|
|
61
|
-
numberToSkip: number;
|
|
62
|
-
numberToReturn: number;
|
|
63
|
-
query: plugins.bson.Document;
|
|
64
|
-
returnFieldsSelector?: plugins.bson.Document;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Parsed command from any message type
|
|
68
|
-
*/
|
|
69
|
-
export interface IParsedCommand {
|
|
70
|
-
commandName: string;
|
|
71
|
-
command: plugins.bson.Document;
|
|
72
|
-
database: string;
|
|
73
|
-
requestID: number;
|
|
74
|
-
opCode: number;
|
|
75
|
-
documentSequences?: Map<string, plugins.bson.Document[]>;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Wire Protocol parser and encoder
|
|
79
|
-
*/
|
|
80
|
-
export declare class WireProtocol {
|
|
81
|
-
/**
|
|
82
|
-
* Parse a complete message from a buffer
|
|
83
|
-
* Returns the parsed command and the number of bytes consumed
|
|
84
|
-
*/
|
|
85
|
-
static parseMessage(buffer: Buffer): {
|
|
86
|
-
command: IParsedCommand;
|
|
87
|
-
bytesConsumed: number;
|
|
88
|
-
} | null;
|
|
89
|
-
/**
|
|
90
|
-
* Parse message header (16 bytes)
|
|
91
|
-
*/
|
|
92
|
-
private static parseHeader;
|
|
93
|
-
/**
|
|
94
|
-
* Parse OP_MSG message
|
|
95
|
-
*/
|
|
96
|
-
private static parseOpMsg;
|
|
97
|
-
/**
|
|
98
|
-
* Parse OP_QUERY message (legacy, used for initial handshake)
|
|
99
|
-
*/
|
|
100
|
-
private static parseOpQuery;
|
|
101
|
-
/**
|
|
102
|
-
* Encode a response as OP_MSG
|
|
103
|
-
*/
|
|
104
|
-
static encodeOpMsgResponse(responseTo: number, response: plugins.bson.Document, requestID?: number): Buffer;
|
|
105
|
-
/**
|
|
106
|
-
* Encode a response as OP_REPLY (legacy, for OP_QUERY responses)
|
|
107
|
-
*/
|
|
108
|
-
static encodeOpReplyResponse(responseTo: number, documents: plugins.bson.Document[], requestID?: number, cursorId?: bigint): Buffer;
|
|
109
|
-
/**
|
|
110
|
-
* Encode an error response
|
|
111
|
-
*/
|
|
112
|
-
static encodeErrorResponse(responseTo: number, errorCode: number, errorMessage: string, commandName?: string): Buffer;
|
|
113
|
-
/**
|
|
114
|
-
* Get error code name from error code
|
|
115
|
-
*/
|
|
116
|
-
private static getErrorCodeName;
|
|
117
|
-
}
|