Skip to content

Commit 06109fe

Browse files
chore rename SessionExportsManager to ExportsManager
1 parent a2a38c5 commit 06109fe

File tree

9 files changed

+42
-45
lines changed

9 files changed

+42
-45
lines changed

src/common/sessionExportsManager.ts renamed to src/common/exportsManager.ts

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -55,25 +55,22 @@ type StoredExport = ReadyExport | InProgressExport;
5555
* JIRA: https://jira.mongodb.org/browse/MCP-104 */
5656
type AvailableExport = Pick<StoredExport, "exportName" | "exportURI" | "exportPath">;
5757

58-
export type SessionExportsManagerConfig = Pick<
59-
UserConfig,
60-
"exportsPath" | "exportTimeoutMs" | "exportCleanupIntervalMs"
61-
>;
58+
export type ExportsManagerConfig = Pick<UserConfig, "exportsPath" | "exportTimeoutMs" | "exportCleanupIntervalMs">;
6259

63-
type SessionExportsManagerEvents = {
60+
type ExportsManagerEvents = {
6461
"export-expired": [string];
6562
"export-available": [string];
6663
};
6764

68-
export class SessionExportsManager extends EventEmitter<SessionExportsManagerEvents> {
69-
private sessionExports: Record<StoredExport["exportName"], StoredExport> = {};
65+
export class ExportsManager extends EventEmitter<ExportsManagerEvents> {
66+
private storedExports: Record<StoredExport["exportName"], StoredExport> = {};
7067
private exportsCleanupInProgress: boolean = false;
7168
private exportsCleanupInterval: NodeJS.Timeout;
7269
private exportsDirectoryPath: string;
7370

7471
constructor(
7572
sessionId: string,
76-
private readonly config: SessionExportsManagerConfig,
73+
private readonly config: ExportsManagerConfig,
7774
private readonly logger: LoggerBase
7875
) {
7976
super();
@@ -85,11 +82,11 @@ export class SessionExportsManager extends EventEmitter<SessionExportsManagerEve
8582
}
8683

8784
public get availableExports(): AvailableExport[] {
88-
return Object.values(this.sessionExports)
89-
.filter((sessionExport) => {
85+
return Object.values(this.storedExports)
86+
.filter((storedExport) => {
9087
return (
91-
sessionExport.exportStatus === "ready" &&
92-
!isExportExpired(sessionExport.exportCreatedAt, this.config.exportTimeoutMs)
88+
storedExport.exportStatus === "ready" &&
89+
!isExportExpired(storedExport.exportCreatedAt, this.config.exportTimeoutMs)
9390
);
9491
})
9592
.map(({ exportName, exportURI, exportPath }) => ({
@@ -106,7 +103,7 @@ export class SessionExportsManager extends EventEmitter<SessionExportsManagerEve
106103
} catch (error) {
107104
this.logger.error({
108105
id: LogId.exportCloseError,
109-
context: "Error while closing SessionExportManager",
106+
context: "Error while closing ExportsManager",
110107
message: error instanceof Error ? error.message : String(error),
111108
});
112109
}
@@ -115,7 +112,7 @@ export class SessionExportsManager extends EventEmitter<SessionExportsManagerEve
115112
public async readExport(exportName: string): Promise<string> {
116113
try {
117114
const exportNameWithExtension = validateExportName(exportName);
118-
const exportHandle = this.sessionExports[exportNameWithExtension];
115+
const exportHandle = this.storedExports[exportNameWithExtension];
119116
if (!exportHandle) {
120117
throw new Error("Requested export has either expired or does not exist!");
121118
}
@@ -157,7 +154,7 @@ export class SessionExportsManager extends EventEmitter<SessionExportsManagerEve
157154
const exportNameWithExtension = validateExportName(ensureExtension(exportName, "json"));
158155
const exportURI = `exported-data://${encodeURIComponent(exportNameWithExtension)}`;
159156
const exportFilePath = path.join(this.exportsDirectoryPath, exportNameWithExtension);
160-
const inProgressExport: InProgressExport = (this.sessionExports[exportNameWithExtension] = {
157+
const inProgressExport: InProgressExport = (this.storedExports[exportNameWithExtension] = {
161158
exportName: exportNameWithExtension,
162159
exportPath: exportFilePath,
163160
exportURI: exportURI,
@@ -210,10 +207,10 @@ export class SessionExportsManager extends EventEmitter<SessionExportsManagerEve
210207
LogId.exportCreationCleanupError,
211208
`Error when removing incomplete export ${inProgressExport.exportName}`
212209
);
213-
delete this.sessionExports[inProgressExport.exportName];
210+
delete this.storedExports[inProgressExport.exportName];
214211
} finally {
215212
if (pipeSuccessful) {
216-
this.sessionExports[inProgressExport.exportName] = {
213+
this.storedExports[inProgressExport.exportName] = {
217214
...inProgressExport,
218215
exportCreatedAt: Date.now(),
219216
exportStatus: "ready",
@@ -263,13 +260,13 @@ export class SessionExportsManager extends EventEmitter<SessionExportsManagerEve
263260
}
264261

265262
this.exportsCleanupInProgress = true;
266-
const exportsForCleanup = Object.values({ ...this.sessionExports }).filter(
267-
(sessionExport): sessionExport is ReadyExport => sessionExport.exportStatus === "ready"
263+
const exportsForCleanup = Object.values({ ...this.storedExports }).filter(
264+
(storedExport): storedExport is ReadyExport => storedExport.exportStatus === "ready"
268265
);
269266
try {
270267
for (const { exportPath, exportCreatedAt, exportURI, exportName } of exportsForCleanup) {
271268
if (isExportExpired(exportCreatedAt, this.config.exportTimeoutMs)) {
272-
delete this.sessionExports[exportName];
269+
delete this.storedExports[exportName];
273270
await this.silentlyRemoveExport(
274271
exportPath,
275272
LogId.exportCleanupError,

src/common/session.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ import {
1010
} from "./connectionManager.js";
1111
import { NodeDriverServiceProvider } from "@mongosh/service-provider-node-driver";
1212
import { ErrorCodes, MongoDBError } from "./errors.js";
13-
import { SessionExportsManager } from "./sessionExportsManager.js";
13+
import { ExportsManager } from "./exportsManager.js";
1414

1515
export interface SessionOptions {
1616
apiBaseUrl: string;
1717
apiClientId?: string;
1818
apiClientSecret?: string;
1919
logger: CompositeLogger;
2020
sessionId: string;
21-
exportsManager: SessionExportsManager;
21+
exportsManager: ExportsManager;
2222
connectionManager: ConnectionManager;
2323
}
2424

@@ -31,7 +31,7 @@ export type SessionEvents = {
3131

3232
export class Session extends EventEmitter<SessionEvents> {
3333
readonly sessionId: string;
34-
readonly exportsManager: SessionExportsManager;
34+
readonly exportsManager: ExportsManager;
3535
readonly connectionManager: ConnectionManager;
3636
readonly apiClient: ApiClient;
3737
agentRunner?: {

src/tools/mongodb/read/export.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
22
import { OperationType, ToolArgs } from "../../tool.js";
33
import { DbOperationArgs, MongoDBToolBase } from "../mongodbTool.js";
44
import { FindArgs } from "./find.js";
5-
import { jsonExportFormat } from "../../../common/sessionExportsManager.js";
5+
import { jsonExportFormat } from "../../../common/exportsManager.js";
66
import z from "zod";
77

88
export class ExportTool extends MongoDBToolBase {

src/transports/base.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { Telemetry } from "../telemetry/telemetry.js";
66
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
77
import { CompositeLogger, ConsoleLogger, DiskLogger, LoggerBase, McpLogger } from "../common/logger.js";
88
import { ObjectId } from "bson";
9-
import { SessionExportsManager } from "../common/sessionExportsManager.js";
9+
import { ExportsManager } from "../common/exportsManager.js";
1010
import { ConnectionManager } from "../common/connectionManager.js";
1111

1212
export abstract class TransportRunnerBase {
@@ -44,7 +44,7 @@ export abstract class TransportRunnerBase {
4444

4545
const logger = new CompositeLogger(...loggers);
4646
const sessionId = new ObjectId().toString();
47-
const exportsManager = new SessionExportsManager(sessionId, userConfig, logger);
47+
const exportsManager = new ExportsManager(sessionId, userConfig, logger);
4848
const connectionManager = new ConnectionManager();
4949

5050
const session = new Session({

tests/integration/helpers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { config } from "../../src/common/config.js";
1111
import { afterAll, afterEach, beforeAll, describe, expect, it, vi } from "vitest";
1212
import { ConnectionManager } from "../../src/common/connectionManager.js";
1313
import { CompositeLogger } from "../../src/common/logger.js";
14-
import { SessionExportsManager } from "../../src/common/sessionExportsManager.js";
14+
import { ExportsManager } from "../../src/common/exportsManager.js";
1515

1616
interface ParameterInfo {
1717
name: string;
@@ -59,7 +59,7 @@ export function setupIntegrationTest(getUserConfig: () => UserConfig): Integrati
5959

6060
const logger = new CompositeLogger();
6161
const sessionId = new ObjectId().toString();
62-
const exportsManager = new SessionExportsManager(sessionId, userConfig, logger);
62+
const exportsManager = new ExportsManager(sessionId, userConfig, logger);
6363
const connectionManager = new ConnectionManager();
6464

6565
const session = new Session({

tests/integration/telemetry.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import nodeMachineId from "node-machine-id";
66
import { describe, expect, it } from "vitest";
77
import { CompositeLogger } from "../../src/common/logger.js";
88
import { ConnectionManager } from "../../src/common/connectionManager.js";
9-
import { SessionExportsManager } from "../../src/common/sessionExportsManager.js";
9+
import { ExportsManager } from "../../src/common/exportsManager.js";
1010

1111
describe("Telemetry", () => {
1212
it("should resolve the actual machine ID", async () => {
@@ -20,7 +20,7 @@ describe("Telemetry", () => {
2020
apiBaseUrl: "",
2121
logger: new CompositeLogger(),
2222
sessionId: "1FOO",
23-
exportsManager: new SessionExportsManager("1FOO", config, logger),
23+
exportsManager: new ExportsManager("1FOO", config, logger),
2424
connectionManager: new ConnectionManager(),
2525
}),
2626
config

tests/unit/common/sessionExportsManager.test.ts renamed to tests/unit/common/exportsManager.test.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import { beforeEach, describe, expect, it, vi } from "vitest";
66
import {
77
ensureExtension,
88
isExportExpired,
9-
SessionExportsManager,
10-
SessionExportsManagerConfig,
9+
ExportsManager,
10+
ExportsManagerConfig,
1111
validateExportName,
12-
} from "../../../src/common/sessionExportsManager.js";
12+
} from "../../../src/common/exportsManager.js";
1313

1414
import { config } from "../../../src/common/config.js";
1515
import { Session } from "../../../src/common/session.js";
@@ -20,7 +20,7 @@ import { CompositeLogger } from "../../../src/common/logger.js";
2020
import { ConnectionManager } from "../../../src/common/connectionManager.js";
2121

2222
const exportsPath = path.join(ROOT_DIR, "tests", "tmp", "exports");
23-
const exportsManagerConfig: SessionExportsManagerConfig = {
23+
const exportsManagerConfig: ExportsManagerConfig = {
2424
exportsPath,
2525
exportTimeoutMs: config.exportTimeoutMs,
2626
exportCleanupIntervalMs: config.exportCleanupIntervalMs,
@@ -99,9 +99,9 @@ async function fileExists(filePath: string): Promise<boolean> {
9999
}
100100
}
101101

102-
describe("SessionExportsManager unit test", () => {
102+
describe("ExportsManager unit test", () => {
103103
let session: Session;
104-
let manager: SessionExportsManager;
104+
let manager: ExportsManager;
105105

106106
beforeEach(async () => {
107107
await manager?.close();
@@ -113,7 +113,7 @@ describe("SessionExportsManager unit test", () => {
113113
apiBaseUrl: "",
114114
logger,
115115
sessionId,
116-
exportsManager: new SessionExportsManager(sessionId, config, logger),
116+
exportsManager: new ExportsManager(sessionId, config, logger),
117117
connectionManager: new ConnectionManager(),
118118
});
119119
manager = session.exportsManager;
@@ -366,7 +366,7 @@ describe("SessionExportsManager unit test", () => {
366366

367367
it("should not clean up in-progress exports", async () => {
368368
const { exportName } = getExportNameAndPath(session.sessionId, Date.now());
369-
const manager = new SessionExportsManager(
369+
const manager = new ExportsManager(
370370
session.sessionId,
371371
{
372372
...exportsManagerConfig,
@@ -383,17 +383,17 @@ describe("SessionExportsManager unit test", () => {
383383
});
384384

385385
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
386-
expect((manager as any).sessionExports[exportName]?.exportStatus).toEqual("in-progress");
386+
expect((manager as any).storedExports[exportName]?.exportStatus).toEqual("in-progress");
387387

388388
// After clean up interval the export should still be there
389389
await timeout(200);
390390
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
391-
expect((manager as any).sessionExports[exportName]?.exportStatus).toEqual("in-progress");
391+
expect((manager as any).storedExports[exportName]?.exportStatus).toEqual("in-progress");
392392
});
393393

394394
it("should cleanup expired exports", async () => {
395395
const { exportName, exportPath, exportURI } = getExportNameAndPath(session.sessionId, Date.now());
396-
const manager = new SessionExportsManager(
396+
const manager = new ExportsManager(
397397
session.sessionId,
398398
{
399399
...exportsManagerConfig,

tests/unit/common/session.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Session } from "../../../src/common/session.js";
44
import { config } from "../../../src/common/config.js";
55
import { CompositeLogger } from "../../../src/common/logger.js";
66
import { ConnectionManager } from "../../../src/common/connectionManager.js";
7-
import { SessionExportsManager } from "../../../src/common/sessionExportsManager.js";
7+
import { ExportsManager } from "../../../src/common/exportsManager.js";
88

99
vi.mock("@mongosh/service-provider-node-driver");
1010
const MockNodeDriverServiceProvider = vi.mocked(NodeDriverServiceProvider);
@@ -18,7 +18,7 @@ describe("Session", () => {
1818
apiBaseUrl: "https://api.test.com",
1919
logger,
2020
sessionId: "1FOO",
21-
exportsManager: new SessionExportsManager("1FOO", config, logger),
21+
exportsManager: new ExportsManager("1FOO", config, logger),
2222
connectionManager: new ConnectionManager(),
2323
});
2424

tests/unit/resources/common/debug.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import { Telemetry } from "../../../../src/telemetry/telemetry.js";
55
import { config } from "../../../../src/common/config.js";
66
import { CompositeLogger } from "../../../../src/common/logger.js";
77
import { ConnectionManager } from "../../../../src/common/connectionManager.js";
8-
import { SessionExportsManager } from "../../../../src/common/sessionExportsManager.js";
8+
import { ExportsManager } from "../../../../src/common/exportsManager.js";
99

1010
describe("debug resource", () => {
1111
const logger = new CompositeLogger();
1212
const session = new Session({
1313
apiBaseUrl: "",
1414
logger,
1515
sessionId: "1FOO",
16-
exportsManager: new SessionExportsManager("1FOO", config, logger),
16+
exportsManager: new ExportsManager("1FOO", config, logger),
1717
connectionManager: new ConnectionManager(),
1818
});
1919
const telemetry = Telemetry.create(session, { ...config, telemetry: "disabled" });

0 commit comments

Comments
 (0)