From 959b150ebf64c9b00a4825fcde6d4ad7cc27025d Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 2 Jul 2026 10:29:15 -0700 Subject: [PATCH 1/4] fix migratin --- .../0007_migrateMaintenanceWindowMonitorIdToArray.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/src/db/migration/0007_migrateMaintenanceWindowMonitorIdToArray.ts b/server/src/db/migration/0007_migrateMaintenanceWindowMonitorIdToArray.ts index 437c66704..1d850872e 100644 --- a/server/src/db/migration/0007_migrateMaintenanceWindowMonitorIdToArray.ts +++ b/server/src/db/migration/0007_migrateMaintenanceWindowMonitorIdToArray.ts @@ -92,7 +92,10 @@ export async function migrateMaintenanceWindowMonitorIdToArray(logger: ILogger): } } - const result = await MaintenanceWindowModel.collection.bulkWrite(bulkOps, { ordered: true }); + // Use the raw driver collection (like migration 0002) rather than Model.collection: the latter is + // typed with Mongoose's bundled mongodb, which clashes with the top-level `mongodb` op types under + // a dual-package install (fresh Docker build) and fails to compile. + const result = await db.collection(MaintenanceWindowModel.collection.collectionName).bulkWrite(bulkOps, { ordered: true }); const deletedCount = originalDocCount - groups.length; logger.info({ From 39043f3945d29da289f1c3d1cbfa95f967375793 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 2 Jul 2026 10:43:22 -0700 Subject: [PATCH 2/4] migration fix --- .../0007_migrateMaintenanceWindowMonitorIdToArray.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/server/src/db/migration/0007_migrateMaintenanceWindowMonitorIdToArray.ts b/server/src/db/migration/0007_migrateMaintenanceWindowMonitorIdToArray.ts index 1d850872e..7f0d22e0e 100644 --- a/server/src/db/migration/0007_migrateMaintenanceWindowMonitorIdToArray.ts +++ b/server/src/db/migration/0007_migrateMaintenanceWindowMonitorIdToArray.ts @@ -1,5 +1,4 @@ import mongoose from "mongoose"; -import type { AnyBulkWriteOperation, Document } from "mongodb"; import type { ILogger } from "@/utils/logger.js"; import MaintenanceWindowModel from "../../domain/maintenance-windows/maintenance-window.model.js"; @@ -65,7 +64,11 @@ export async function migrateMaintenanceWindowMonitorIdToArray(logger: ILogger): return; } - const bulkOps: AnyBulkWriteOperation[] = []; + // Derive the op type from the exact bulkWrite we call, so it always matches whichever `mongodb` + // copy Mongoose resolves (a fresh Docker install nests its own under mongoose/node_modules, + // distinct from the top-level one — importing the type from "mongodb" picks the wrong copy). + type BulkOp = Parameters[0][number]; + const bulkOps: BulkOp[] = []; let originalDocCount = 0; for (const group of groups) { @@ -92,10 +95,7 @@ export async function migrateMaintenanceWindowMonitorIdToArray(logger: ILogger): } } - // Use the raw driver collection (like migration 0002) rather than Model.collection: the latter is - // typed with Mongoose's bundled mongodb, which clashes with the top-level `mongodb` op types under - // a dual-package install (fresh Docker build) and fails to compile. - const result = await db.collection(MaintenanceWindowModel.collection.collectionName).bulkWrite(bulkOps, { ordered: true }); + const result = await MaintenanceWindowModel.collection.bulkWrite(bulkOps, { ordered: true }); const deletedCount = originalDocCount - groups.length; logger.info({ From 807d7e10c395b6de977ecd587272e7db10224454 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 2 Jul 2026 10:55:57 -0700 Subject: [PATCH 3/4] type bulk op --- server/src/db/migration/0002_convertChecksToTimeSeries.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server/src/db/migration/0002_convertChecksToTimeSeries.ts b/server/src/db/migration/0002_convertChecksToTimeSeries.ts index 91170050b..0c171744f 100644 --- a/server/src/db/migration/0002_convertChecksToTimeSeries.ts +++ b/server/src/db/migration/0002_convertChecksToTimeSeries.ts @@ -1,5 +1,5 @@ import mongoose from "mongoose"; -import type { Document, AnyBulkWriteOperation } from "mongodb"; +import type { Document } from "mongodb"; const CHECKS_COLLECTION = "checks"; const BACKUP_COLLECTION = "checks_backup"; @@ -144,7 +144,11 @@ const migrateBackupData = async (backedUp: boolean): Promise => stats.totalSource = await source.countDocuments(); const cursor = source.find(); - const operations: AnyBulkWriteOperation[] = []; + // Derive the op type from the exact bulkWrite we call so it matches whichever `mongodb` copy + // Mongoose resolves (a fresh Docker/multiarch install nests its own under mongoose/node_modules, + // distinct from the top-level one — importing AnyBulkWriteOperation from "mongodb" picks the wrong copy). + type BulkOp = Parameters[0][number]; + const operations: BulkOp[] = []; const invalidDocs: Document[] = []; while (await cursor.hasNext()) { From a4ab7d662ec3a4a40cf3454a4f368242af3cb7db Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 2 Jul 2026 11:05:30 -0700 Subject: [PATCH 4/4] bump version fix --- client/package-lock.json | 4 ++-- client/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index c7d59b06c..4644d9370 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,12 +1,12 @@ { "name": "client", - "version": "3.9.0", + "version": "3.9.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "client", - "version": "3.9.0", + "version": "3.9.1", "dependencies": { "@csstools/css-tokenizer": "^3.0.4", "@emotion/react": "^11.13.3", diff --git a/client/package.json b/client/package.json index 685b37db1..4fc8b2634 100644 --- a/client/package.json +++ b/client/package.json @@ -1,7 +1,7 @@ { "name": "client", "private": true, - "version": "3.9.0", + "version": "3.9.1", "type": "module", "scripts": { "dev": "vite",