@resolveio/server-lib 22.1.19 → 22.1.21
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/methods/mongo-explorer.ts"],"names":[],"mappings":"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","file":"mongo-explorer.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { Db } from 'mongodb';\nimport { Users } from '../collections/user.collection';\nimport { MethodManager } from '../managers/method.manager';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { objectIdHexString } from '../util/common';\n\nconst DEFAULT_LIMIT = 100;\nconst MAX_LIMIT = 2000;\n\ntype ExplorerFindOptions = {\n\tprojection?: Record<string, number>;\n\tsort?: Record<string, any>;\n\tlimit?: number;\n\tskip?: number;\n\tincludeTotal?: boolean;\n};\n\nfunction parseMongoExplorerWriteUsers(): string[] {\n\tconst raw = typeof process.env.MONGO_EXPLORER_WRITE_USERS === 'string' ? process.env.MONGO_EXPLORER_WRITE_USERS.trim() : '';\n\tif (!raw) {\n\t\treturn [];\n\t}\n\n\ttry {\n\t\tconst parsed = JSON.parse(raw);\n\t\tif (Array.isArray(parsed)) {\n\t\t\treturn parsed.map(value => String(value)).filter(value => value.trim().length);\n\t\t}\n\t\tif (typeof parsed === 'string') {\n\t\t\treturn [parsed.trim()].filter(Boolean);\n\t\t}\n\t}\n\tcatch {\n\t\t// Fall back to comma-separated list.\n\t}\n\n\treturn raw\n\t\t.split(',')\n\t\t.map(value => value.trim())\n\t\t.filter(Boolean);\n}\n\nfunction resolveDatabaseName(database?: string): string {\n\tconst defaultDb = ResolveIOServer.getServerConfig()?.DATABASE || '';\n\tconst dbName = typeof database === 'string' && database.trim().length ? database.trim() : defaultDb;\n\n\tif (!dbName) {\n\t\tthrow new Error('Mongo Explorer: Database is required');\n\t}\n\n\tconst allowedDatabases = ResolveIOServer.getMongoManager()?.getWatchedDatabases() || [];\n\tif (allowedDatabases.length && !allowedDatabases.includes(dbName)) {\n\t\tthrow new Error('Mongo Explorer: Database access denied');\n\t}\n\n\treturn dbName;\n}\n\nfunction resolveDatabase(database?: string): Db {\n\tconst dbName = resolveDatabaseName(database);\n\treturn ResolveIOServer.getMongoConnection().db(dbName);\n}\n\nfunction resolveCollectionHandle(database: string, collection: string) {\n\tconst mainDb = ResolveIOServer.getServerConfig()?.DATABASE || '';\n\tconst isMainDb = database === mainDb;\n\tconst managerCollection = isMainDb ? ResolveIOServer.getMongoManager()?.collection(collection) : null;\n\tconst db = ResolveIOServer.getMongoConnection().db(database);\n\n\treturn {\n\t\tmanagerCollection,\n\t\tdbCollection: db.collection(collection)\n\t};\n}\n\nfunction normalizeFindOptions(options?: ExplorerFindOptions) {\n\tconst normalized = options || {};\n\tconst projection = normalized.projection && Object.keys(normalized.projection).length ? normalized.projection : undefined;\n\tconst sort = normalized.sort && Object.keys(normalized.sort).length ? normalized.sort : undefined;\n\tconst limit = typeof normalized.limit === 'number' ? Math.min(Math.max(normalized.limit, 0), MAX_LIMIT) : DEFAULT_LIMIT;\n\tconst skip = typeof normalized.skip === 'number' ? Math.max(normalized.skip, 0) : 0;\n\n\treturn {\n\t\tfindOptions: {\n\t\t\tprojection,\n\t\t\tsort,\n\t\t\tlimit,\n\t\t\tskip\n\t\t},\n\t\tincludeTotal: normalized.includeTotal === true\n\t};\n}\n\nfunction userHasView(user, view: string): boolean {\n\tif (!user || !view) {\n\t\treturn false;\n\t}\n\n\tif (user.roles?.super_admin) {\n\t\treturn true;\n\t}\n\n\tconst groups = Array.isArray(user.roles?.groups) ? user.roles.groups : [];\n\tconst miscs = Array.isArray(user.roles?.miscs) ? user.roles.miscs : [];\n\n\tif (groups.some(group => Array.isArray(group.views) && group.views.some(v => v.startsWith(view)))) {\n\t\treturn true;\n\t}\n\n\tif (miscs.some(v => v.startsWith(view))) {\n\t\treturn true;\n\t}\n\n\tif (groups.some(group => group.name === view)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nasync function ensureWriteAccess(context: any, permissionView?: string) {\n\tconst idUser = context?.id_user;\n\tif (!idUser) {\n\t\tthrow new Error('Mongo Explorer: Unauthorized');\n\t}\n\n\tconst user = await Users.findOne({_id: idUser});\n\tif (!user) {\n\t\tthrow new Error('Mongo Explorer: Unauthorized');\n\t}\n\n\tif (user.readonly) {\n\t\tthrow new Error('Mongo Explorer: Readonly user');\n\t}\n\n\tconst allowedUsers = parseMongoExplorerWriteUsers();\n\tif (allowedUsers.length) {\n\t\tconst username = String(user.username || '').trim().toLowerCase();\n\t\tconst email = String(user.email || '').trim().toLowerCase();\n\t\tconst id = String(user._id || '').trim();\n\t\tconst isAllowed = allowedUsers.some(entry => {\n\t\t\tconst normalized = String(entry || '').trim().toLowerCase();\n\t\t\tif (!normalized) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn normalized === username || (email && normalized === email) || (id && entry === id);\n\t\t});\n\n\t\tif (!isAllowed) {\n\t\t\tthrow new Error('Mongo Explorer: Write access denied');\n\t\t}\n\t}\n\n\tif (user.roles?.super_admin) {\n\t\treturn;\n\t}\n\n\tconst normalizedPermission = typeof permissionView === 'string' ? permissionView.trim() : '';\n\n\tif (!normalizedPermission) {\n\t\treturn;\n\t}\n\n\tif (userHasView(user, normalizedPermission)) {\n\t\treturn;\n\t}\n\n\tthrow new Error('Mongo Explorer: Write access denied');\n}\n\nexport function loadMongoExplorerMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tmongoExplorerListCollections: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database?: string) {\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\tconst collections = await db.listCollections().toArray();\n\t\t\t\treturn collections\n\t\t\t\t\t.map(col => ({\n\t\t\t\t\t\tname: col.name,\n\t\t\t\t\t\ttype: col.type || 'collection'\n\t\t\t\t\t}))\n\t\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name));\n\t\t\t}\n\t\t},\n\t\tmongoExplorerFind: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tquery: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, query: any = {}, options?) {\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\tconst normalized = normalizeFindOptions(options);\n\t\t\t\tconst documents = await db.collection(collection).find(query || {}, normalized.findOptions).toArray();\n\t\t\t\tlet total = null;\n\n\t\t\t\tif (normalized.includeTotal) {\n\t\t\t\t\ttotal = await db.collection(collection).countDocuments(query || {});\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tdocuments,\n\t\t\t\t\ttotal\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\tmongoExplorerAggregate: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpipeline: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'pipeline.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, pipeline: any[], options: any = {}) {\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\treturn db.collection(collection).aggregate(pipeline || [], options || undefined).toArray();\n\t\t\t}\n\t\t},\n\t\tmongoExplorerCommand: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcommand: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, command: any, permissionView?: string) {\n\t\t\t\tawait ensureWriteAccess(this, permissionView);\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\treturn db.command(command);\n\t\t\t}\n\t\t},\n\t\tmongoExplorerInsertDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdocument: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, document: any, permissionView?: string) {\n\t\t\t\tawait ensureWriteAccess(this, permissionView);\n\t\t\t\tconst dbName = resolveDatabaseName(database);\n\t\t\t\tconst { managerCollection, dbCollection } = resolveCollectionHandle(dbName, collection);\n\n\t\t\t\tif (!document || typeof document !== 'object') {\n\t\t\t\t\tthrow new Error('Mongo Explorer: Document is required');\n\t\t\t\t}\n\n\t\t\t\tif (!document._id) {\n\t\t\t\t\tdocument._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\tif (document.__v === undefined) {\n\t\t\t\t\tdocument.__v = 0;\n\t\t\t\t}\n\n\t\t\t\tif (managerCollection) {\n\t\t\t\t\tawait managerCollection.insertOne(document);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait dbCollection.insertOne(document);\n\t\t\t\t}\n\n\t\t\t\treturn document._id;\n\t\t\t}\n\t\t},\n\t\tmongoExplorerReplaceDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdocument: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, document: any, permissionView?: string) {\n\t\t\t\tawait ensureWriteAccess(this, permissionView);\n\t\t\t\tconst dbName = resolveDatabaseName(database);\n\t\t\t\tconst { managerCollection, dbCollection } = resolveCollectionHandle(dbName, collection);\n\n\t\t\t\tif (!document || typeof document !== 'object' || !document._id) {\n\t\t\t\t\tthrow new Error('Mongo Explorer: Document with _id is required');\n\t\t\t\t}\n\n\t\t\t\tif (managerCollection) {\n\t\t\t\t\tawait managerCollection.replaceOne({_id: document._id}, document);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait dbCollection.replaceOne({_id: document._id}, document);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tmongoExplorerDeleteDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdoc_id: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\t\tfunction: async function(database: string, collection: string, doc_id: string, permissionView?: string) {\n\t\t\t\t\tawait ensureWriteAccess(this, permissionView);\n\t\t\t\t\tconst dbName = resolveDatabaseName(database);\n\t\t\t\t\tconst { managerCollection, dbCollection } = resolveCollectionHandle(dbName, collection);\n\t\t\t\t\tconst deleteFilter = { _id: doc_id } as any;\n\n\t\t\t\t\tif (managerCollection) {\n\t\t\t\t\t\tawait managerCollection.deleteOne(deleteFilter);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait dbCollection.deleteOne(deleteFilter);\n\t\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/methods/mongo-explorer.ts"],"names":[],"mappings":"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","file":"mongo-explorer.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { Db } from 'mongodb';\nimport { Users } from '../collections/user.collection';\nimport { MethodManager } from '../managers/method.manager';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { OpenAIClient } from '../services/openai-client';\nimport { objectIdHexString, round } from '../util/common';\n\nconst DEFAULT_LIMIT = 100;\nconst MAX_LIMIT = 2000;\nconst ISO_DATE_REGEX = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$/;\nconst MAX_REVIEW_STRING_LENGTH = 500;\nconst MAX_REVIEW_ARRAY_ITEMS = 10;\nconst MAX_REVIEW_OBJECT_KEYS = 40;\nconst MAX_REVIEW_DEPTH = 4;\nconst MAX_REVIEW_LIST_ITEMS = 6;\nconst MAX_REVIEW_CHANGED_FIELDS = 60;\nconst DEFAULT_RISK_REVIEW_TIMEOUT_MS = 30000;\nconst DEFAULT_RISK_REVIEW_MAX_TOKENS = 700;\nconst DEFAULT_RISK_REVIEW_MODEL = 'gpt-5.3-codex';\nconst SENSITIVE_REVIEW_FIELD_REGEX = /(password|secret|token|api[_-]?key|salt|hash|email|phone|address|ssn|services|roles)/i;\n\ntype ExplorerFindOptions = {\n\tprojection?: Record<string, number>;\n\tsort?: Record<string, any>;\n\tlimit?: number;\n\tskip?: number;\n\tincludeTotal?: boolean;\n};\n\ntype ExplorerMode = 'resolveio' | 'aicoder';\n\ntype MongoExplorerDeleteImpactCollection = {\n\tcollection: string;\n\treferences: number;\n\tsample_ids: string[];\n};\n\ntype MongoExplorerDeleteImpact = {\n\thas_references: boolean;\n\tunresolved: boolean;\n\tcollections: MongoExplorerDeleteImpactCollection[];\n};\n\ntype MongoExplorerRiskOperation = 'insert' | 'replace' | 'delete' | 'command';\ntype MongoExplorerRiskLevel = 'low' | 'medium' | 'high' | 'critical';\ntype MongoExplorerRiskReviewStatus = 'ok' | 'fallback' | 'disabled';\n\ntype MongoExplorerRiskReview = {\n\toperation: MongoExplorerRiskOperation;\n\trisk_level: MongoExplorerRiskLevel;\n\tshould_block: boolean;\n\tsummary: string;\n\treasons: string[];\n\tsuggested_checks: string[];\n\tconfidence: number;\n\tmodel: string;\n\trequest_id: string;\n\treview_status: MongoExplorerRiskReviewStatus;\n\treviewed_at: string;\n};\n\ntype MongoExplorerRiskReviewInput = {\n\tdatabase: string;\n\tcollection: string;\n\toperation: MongoExplorerRiskOperation;\n\tmode: ExplorerMode;\n\tbefore_document?: any;\n\tafter_document?: any;\n\tdelete_impact?: MongoExplorerDeleteImpact;\n};\n\nfunction parseMongoExplorerWriteUsers(): string[] {\n\tconst raw = typeof process.env.MONGO_EXPLORER_WRITE_USERS === 'string' ? process.env.MONGO_EXPLORER_WRITE_USERS.trim() : '';\n\tif (!raw) {\n\t\treturn [];\n\t}\n\n\ttry {\n\t\tconst parsed = JSON.parse(raw);\n\t\tif (Array.isArray(parsed)) {\n\t\t\treturn parsed.map(value => String(value)).filter(value => value.trim().length);\n\t\t}\n\t\tif (typeof parsed === 'string') {\n\t\t\treturn [parsed.trim()].filter(Boolean);\n\t\t}\n\t}\n\tcatch {\n\t\t// Fall back to comma-separated list.\n\t}\n\n\treturn raw\n\t\t.split(',')\n\t\t.map(value => value.trim())\n\t\t.filter(Boolean);\n}\n\nfunction normalizeExplorerMode(mode?: string): ExplorerMode {\n\tconst normalizedMode = String(mode || '').trim().toLowerCase();\n\tif (normalizedMode === 'resolveio') {\n\t\treturn 'resolveio';\n\t}\n\treturn 'aicoder';\n}\n\nfunction isAdminUser(user: any): boolean {\n\tif (!user) {\n\t\treturn false;\n\t}\n\n\tconst username = String(user.username || '').trim().toLowerCase();\n\treturn username === 'admin' || user.roles?.super_admin === true;\n}\n\nfunction allowUnschemaizedWrites(): boolean {\n\treturn process.env.MONGO_EXPLORER_ALLOW_UNSCHEMATIZED_WRITE === 'true';\n}\n\nfunction resolveDatabaseName(database?: string): string {\n\tconst defaultDb = ResolveIOServer.getServerConfig()?.DATABASE || '';\n\tconst dbName = typeof database === 'string' && database.trim().length ? database.trim() : defaultDb;\n\n\tif (!dbName) {\n\t\tthrow new Error('Mongo Explorer: Database is required');\n\t}\n\n\tconst allowedDatabases = ResolveIOServer.getMongoManager()?.getWatchedDatabases() || [];\n\tif (allowedDatabases.length && !allowedDatabases.includes(dbName)) {\n\t\tthrow new Error('Mongo Explorer: Database access denied');\n\t}\n\n\treturn dbName;\n}\n\nfunction resolveDatabase(database?: string): Db {\n\tconst dbName = resolveDatabaseName(database);\n\treturn ResolveIOServer.getMongoConnection().db(dbName);\n}\n\nfunction resolveCollectionHandle(database: string, collection: string) {\n\tconst mainDb = ResolveIOServer.getServerConfig()?.DATABASE || '';\n\tconst isMainDb = database === mainDb;\n\tconst managerCollection = isMainDb ? ResolveIOServer.getMongoManager()?.collection(collection) : null;\n\tconst db = ResolveIOServer.getMongoConnection().db(database);\n\n\treturn {\n\t\tmanagerCollection,\n\t\tdbCollection: db.collection(collection)\n\t};\n}\n\nfunction getSchemaDefinition(collectionRef: any): Record<string, any> {\n\tif (!collectionRef || !collectionRef.simplschema || typeof collectionRef.simplschema.schema !== 'function') {\n\t\treturn {};\n\t}\n\n\tconst schema = collectionRef.simplschema.schema();\n\treturn schema && typeof schema === 'object' ? schema : {};\n}\n\nfunction getSchemaTypeName(definition: any): string {\n\tconst typeDefs = definition?.type?.definitions;\n\tif (!Array.isArray(typeDefs) || !typeDefs.length) {\n\t\treturn 'Any';\n\t}\n\n\tconst firstType = typeDefs[0]?.type;\n\tif (!firstType) {\n\t\treturn 'Any';\n\t}\n\n\tif (firstType === String) {\n\t\treturn 'String';\n\t}\n\tif (firstType === Number) {\n\t\treturn 'Number';\n\t}\n\tif (firstType === Boolean) {\n\t\treturn 'Boolean';\n\t}\n\tif (firstType === Date) {\n\t\treturn 'Date';\n\t}\n\tif (firstType === Object) {\n\t\treturn 'Object';\n\t}\n\tif (firstType === Array) {\n\t\treturn 'Array';\n\t}\n\n\tconst typeName = firstType.name || String(firstType);\n\tif (typeName === 'Integer') {\n\t\treturn 'Number';\n\t}\n\treturn typeName;\n}\n\nfunction toLabel(path: string): string {\n\tconst last = path.split('.').pop() || path;\n\treturn last\n\t\t.replace(/\\$/g, '')\n\t\t.replace(/_/g, ' ')\n\t\t.replace(/\\s+/g, ' ')\n\t\t.trim();\n}\n\nfunction isProtectedFieldSegment(segment: string): boolean {\n\tif (!segment) {\n\t\treturn false;\n\t}\n\n\tif (segment === '_id') {\n\t\treturn true;\n\t}\n\n\tconst normalizedSegment = segment.replace(/\\[\\d+\\]/g, '');\n\treturn normalizedSegment.toLowerCase().startsWith('id_');\n}\n\nfunction isProtectedFieldPath(path: string): boolean {\n\tconst segments = String(path || '').split('.').filter(Boolean);\n\treturn segments.some(segment => isProtectedFieldSegment(segment));\n}\n\nfunction safeStringify(value: unknown): string {\n\ttry {\n\t\treturn JSON.stringify(value);\n\t}\n\tcatch {\n\t\treturn String(value);\n\t}\n}\n\nfunction collectProtectedFieldPaths(value: any, prefix = '', out: Record<string, any> = {}): Record<string, any> {\n\tif (Array.isArray(value)) {\n\t\tvalue.forEach((item, index) => {\n\t\t\tconst nextPrefix = prefix ? `${prefix}[${index}]` : `[${index}]`;\n\t\t\tcollectProtectedFieldPaths(item, nextPrefix, out);\n\t\t});\n\t\treturn out;\n\t}\n\n\tif (!value || typeof value !== 'object') {\n\t\treturn out;\n\t}\n\n\tObject.keys(value).forEach((key) => {\n\t\tconst nextPrefix = prefix ? `${prefix}.${key}` : key;\n\t\tif (isProtectedFieldSegment(key)) {\n\t\t\tout[nextPrefix] = value[key];\n\t\t}\n\t\tcollectProtectedFieldPaths(value[key], nextPrefix, out);\n\t});\n\n\treturn out;\n}\n\nfunction ensureProtectedFieldsUnchanged(originalDoc: any, updatedDoc: any) {\n\tconst originalProtected = collectProtectedFieldPaths(originalDoc || {});\n\tconst updatedProtected = collectProtectedFieldPaths(updatedDoc || {});\n\tconst violations: string[] = [];\n\n\tObject.keys(originalProtected).forEach((path) => {\n\t\tif (!Object.prototype.hasOwnProperty.call(updatedProtected, path)) {\n\t\t\tviolations.push(path);\n\t\t\treturn;\n\t\t}\n\n\t\tconst originalValue = safeStringify(originalProtected[path]);\n\t\tconst updatedValue = safeStringify(updatedProtected[path]);\n\t\tif (originalValue !== updatedValue) {\n\t\t\tviolations.push(path);\n\t\t}\n\t});\n\n\tObject.keys(updatedProtected).forEach((path) => {\n\t\tif (!Object.prototype.hasOwnProperty.call(originalProtected, path)) {\n\t\t\tviolations.push(path);\n\t\t}\n\t});\n\n\tif (violations.length) {\n\t\tconst preview = violations.slice(0, 4).join(', ');\n\t\tthrow new Error(`Mongo Explorer: Protected fields cannot be edited (${preview}${violations.length > 4 ? ', ...' : ''})`);\n\t}\n}\n\nfunction coerceDateValue(value: unknown): unknown {\n\tif (value instanceof Date) {\n\t\treturn value;\n\t}\n\n\tif (typeof value !== 'string' || !ISO_DATE_REGEX.test(value)) {\n\t\treturn value;\n\t}\n\n\tconst parsed = new Date(value);\n\treturn Number.isNaN(parsed.getTime()) ? value : parsed;\n}\n\nfunction coerceDatePath(target: any, segments: string[]) {\n\tif (!target || !segments.length) {\n\t\treturn;\n\t}\n\n\tconst [segment, ...rest] = segments;\n\n\tif (segment === '$') {\n\t\tif (Array.isArray(target)) {\n\t\t\ttarget.forEach(item => coerceDatePath(item, rest));\n\t\t}\n\t\treturn;\n\t}\n\n\tif (!Object.prototype.hasOwnProperty.call(target, segment)) {\n\t\treturn;\n\t}\n\n\tif (rest.length === 0) {\n\t\tconst updatedValue = coerceDateValue(target[segment]);\n\t\tif (updatedValue !== target[segment]) {\n\t\t\ttarget[segment] = updatedValue;\n\t\t}\n\t\treturn;\n\t}\n\n\tcoerceDatePath(target[segment], rest);\n}\n\nfunction coerceDateFields(collectionRef: any, doc: any) {\n\tif (!collectionRef || !collectionRef.simplschema || !doc) {\n\t\treturn;\n\t}\n\n\tconst schema = getSchemaDefinition(collectionRef);\n\tObject.keys(schema).forEach((schemaKey) => {\n\t\tconst definition = schema[schemaKey];\n\t\tconst typeDefs = definition?.type?.definitions;\n\t\tif (!Array.isArray(typeDefs) || !typeDefs.some(typeDef => typeDef.type === Date)) {\n\t\t\treturn;\n\t\t}\n\n\t\tcoerceDatePath(doc, schemaKey.split('.'));\n\t});\n}\n\nfunction normalizeFindOptions(options?: ExplorerFindOptions) {\n\tconst normalized = options || {};\n\tconst projection = normalized.projection && Object.keys(normalized.projection).length ? normalized.projection : undefined;\n\tconst sort = normalized.sort && Object.keys(normalized.sort).length ? normalized.sort : undefined;\n\tconst limit = typeof normalized.limit === 'number' ? Math.min(Math.max(normalized.limit, 0), MAX_LIMIT) : DEFAULT_LIMIT;\n\tconst skip = typeof normalized.skip === 'number' ? Math.max(normalized.skip, 0) : 0;\n\n\treturn {\n\t\tfindOptions: {\n\t\t\tprojection,\n\t\t\tsort,\n\t\t\tlimit,\n\t\t\tskip\n\t\t},\n\t\tincludeTotal: normalized.includeTotal === true\n\t};\n}\n\nfunction userHasView(user, view: string): boolean {\n\tif (!user || !view) {\n\t\treturn false;\n\t}\n\n\tif (user.roles?.super_admin) {\n\t\treturn true;\n\t}\n\n\tconst groups = Array.isArray(user.roles?.groups) ? user.roles.groups : [];\n\tconst miscs = Array.isArray(user.roles?.miscs) ? user.roles.miscs : [];\n\n\tif (groups.some(group => Array.isArray(group.views) && group.views.some(v => v.startsWith(view)))) {\n\t\treturn true;\n\t}\n\n\tif (miscs.some(v => v.startsWith(view))) {\n\t\treturn true;\n\t}\n\n\tif (groups.some(group => group.name === view)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nasync function ensureWriteAccess(context: any, permissionView?: string, mode?: string) {\n\tconst idUser = context?.id_user;\n\tif (!idUser) {\n\t\tthrow new Error('Mongo Explorer: Unauthorized');\n\t}\n\n\tconst user = await Users.findOne({_id: idUser});\n\tif (!user) {\n\t\tthrow new Error('Mongo Explorer: Unauthorized');\n\t}\n\n\tif (user.readonly) {\n\t\tthrow new Error('Mongo Explorer: Readonly user');\n\t}\n\n\tconst normalizedMode = normalizeExplorerMode(mode);\n\tif (normalizedMode === 'resolveio' && !isAdminUser(user)) {\n\t\tthrow new Error('Mongo Explorer: ResolveIO mode is read only for non-admin users');\n\t}\n\n\tconst allowedUsers = parseMongoExplorerWriteUsers();\n\tif (allowedUsers.length) {\n\t\tconst username = String(user.username || '').trim().toLowerCase();\n\t\tconst email = String(user.email || '').trim().toLowerCase();\n\t\tconst id = String(user._id || '').trim();\n\t\tconst isAllowed = allowedUsers.some(entry => {\n\t\t\tconst normalized = String(entry || '').trim().toLowerCase();\n\t\t\tif (!normalized) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn normalized === username || (email && normalized === email) || (id && entry === id);\n\t\t});\n\n\t\tif (!isAllowed) {\n\t\t\tthrow new Error('Mongo Explorer: Write access denied');\n\t\t}\n\t}\n\n\tif (user.roles?.super_admin) {\n\t\treturn;\n\t}\n\n\tconst normalizedPermission = typeof permissionView === 'string' ? permissionView.trim() : '';\n\n\tif (!normalizedPermission) {\n\t\treturn;\n\t}\n\n\tif (userHasView(user, normalizedPermission)) {\n\t\treturn;\n\t}\n\n\tthrow new Error('Mongo Explorer: Write access denied');\n}\n\nfunction buildDeleteSafetyCollections(collectionRef: any): string[] {\n\tconst schema = getSchemaDefinition(collectionRef);\n\treturn Object.keys(schema).filter(path => isProtectedFieldPath(path) && path !== '_id');\n}\n\nasync function buildDeleteImpact(database: string, sourceCollection: string, docId: string): Promise<MongoExplorerDeleteImpact> {\n\tconst mainDb = ResolveIOServer.getServerConfig()?.DATABASE || '';\n\tif (database !== mainDb) {\n\t\treturn {\n\t\t\thas_references: false,\n\t\t\tunresolved: true,\n\t\t\tcollections: []\n\t\t};\n\t}\n\n\tconst mongoManager = ResolveIOServer.getMongoManager();\n\tconst collections = mongoManager?.collections ? mongoManager.collections() : [];\n\tconst impacts: MongoExplorerDeleteImpactCollection[] = [];\n\tlet unresolved = false;\n\n\tfor (const collectionRef of collections) {\n\t\tconst collectionName = collectionRef?.collectionName;\n\t\tif (!collectionName) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (collectionName === `${sourceCollection}.versions`) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst referencePaths = buildDeleteSafetyCollections(collectionRef);\n\t\tif (!referencePaths.length) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst query = {\n\t\t\t$or: referencePaths.map(path => ({ [path]: docId }))\n\t\t};\n\n\t\ttry {\n\t\t\tconst docs = await collectionRef.find(query, { projection: { _id: 1 }, limit: 3 });\n\t\t\tif (Array.isArray(docs) && docs.length) {\n\t\t\t\timpacts.push({\n\t\t\t\t\tcollection: collectionName,\n\t\t\t\t\treferences: docs.length,\n\t\t\t\t\tsample_ids: docs.map(doc => String(doc?._id || '')).filter(Boolean)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tcatch {\n\t\t\tunresolved = true;\n\t\t}\n\t}\n\n\treturn {\n\t\thas_references: impacts.length > 0,\n\t\tunresolved,\n\t\tcollections: impacts.sort((a, b) => a.collection.localeCompare(b.collection))\n\t};\n}\n\nfunction normalizeOptionalString(value: any): string | undefined {\n\tif (typeof value === 'string') {\n\t\tconst trimmed = value.trim();\n\t\treturn trimmed.length ? trimmed : undefined;\n\t}\n\tif (value === null || value === undefined) {\n\t\treturn undefined;\n\t}\n\tconst normalized = String(value).trim();\n\treturn normalized.length ? normalized : undefined;\n}\n\nfunction normalizePositiveNumber(value: any, fallback: number): number {\n\tconst parsed = Number(value);\n\tif (!Number.isFinite(parsed) || parsed <= 0) {\n\t\treturn fallback;\n\t}\n\treturn parsed;\n}\n\nfunction parseBooleanValue(value: any, fallback: boolean): boolean {\n\tif (typeof value === 'boolean') {\n\t\treturn value;\n\t}\n\tconst normalized = String(value || '').trim().toLowerCase();\n\tif (!normalized.length) {\n\t\treturn fallback;\n\t}\n\tif (['1', 'true', 'yes', 'on'].includes(normalized)) {\n\t\treturn true;\n\t}\n\tif (['0', 'false', 'no', 'off'].includes(normalized)) {\n\t\treturn false;\n\t}\n\treturn fallback;\n}\n\nfunction truncateForRiskReview(value: string, maxLength = MAX_REVIEW_STRING_LENGTH): string {\n\tconst normalized = String(value || '');\n\tif (normalized.length <= maxLength) {\n\t\treturn normalized;\n\t}\n\tconst diff = normalized.length - maxLength;\n\treturn `${normalized.slice(0, maxLength)}...[+${diff} chars]`;\n}\n\nfunction sanitizeForRiskReview(value: any, depth = 0): any {\n\tif (value === null || value === undefined) {\n\t\treturn value;\n\t}\n\n\tif (depth > MAX_REVIEW_DEPTH) {\n\t\treturn '[Truncated depth]';\n\t}\n\n\tif (value instanceof Date) {\n\t\treturn value.toISOString();\n\t}\n\n\tif (typeof value === 'string') {\n\t\treturn truncateForRiskReview(value);\n\t}\n\n\tif (typeof value === 'number' || typeof value === 'boolean') {\n\t\treturn value;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tconst sanitized = value\n\t\t\t.slice(0, MAX_REVIEW_ARRAY_ITEMS)\n\t\t\t.map(item => sanitizeForRiskReview(item, depth + 1));\n\t\tif (value.length > MAX_REVIEW_ARRAY_ITEMS) {\n\t\t\tsanitized.push(`[${value.length - MAX_REVIEW_ARRAY_ITEMS} more item(s)]`);\n\t\t}\n\t\treturn sanitized;\n\t}\n\n\tif (typeof value === 'object') {\n\t\tconst output: Record<string, any> = {};\n\t\tconst keys = Object.keys(value);\n\t\tconst limitedKeys = keys.slice(0, MAX_REVIEW_OBJECT_KEYS);\n\t\tlimitedKeys.forEach((key) => {\n\t\t\tif (SENSITIVE_REVIEW_FIELD_REGEX.test(key)) {\n\t\t\t\toutput[key] = '[REDACTED]';\n\t\t\t\treturn;\n\t\t\t}\n\t\t\toutput[key] = sanitizeForRiskReview(value[key], depth + 1);\n\t\t});\n\t\tif (keys.length > MAX_REVIEW_OBJECT_KEYS) {\n\t\t\toutput.__truncated_keys = keys.length - MAX_REVIEW_OBJECT_KEYS;\n\t\t}\n\t\treturn output;\n\t}\n\n\treturn truncateForRiskReview(String(value));\n}\n\nfunction pickChangedFields(beforeDocument: any, afterDocument: any): string[] {\n\tif (!beforeDocument || typeof beforeDocument !== 'object' || !afterDocument || typeof afterDocument !== 'object') {\n\t\treturn [];\n\t}\n\n\tconst changed: string[] = [];\n\tconst fieldNames = new Set<string>([\n\t\t...Object.keys(beforeDocument),\n\t\t...Object.keys(afterDocument)\n\t]);\n\n\tfor (const field of fieldNames) {\n\t\tif (changed.length >= MAX_REVIEW_CHANGED_FIELDS) {\n\t\t\tbreak;\n\t\t}\n\t\tconst beforeValue = safeStringify(beforeDocument[field]);\n\t\tconst afterValue = safeStringify(afterDocument[field]);\n\t\tif (beforeValue !== afterValue) {\n\t\t\tchanged.push(field);\n\t\t}\n\t}\n\n\treturn changed;\n}\n\nfunction normalizeRiskLevel(value: any): MongoExplorerRiskLevel {\n\tconst normalized = String(value || '').trim().toLowerCase();\n\tif (normalized === 'low') {\n\t\treturn 'low';\n\t}\n\tif (normalized === 'medium') {\n\t\treturn 'medium';\n\t}\n\tif (normalized === 'high') {\n\t\treturn 'high';\n\t}\n\tif (normalized === 'critical') {\n\t\treturn 'critical';\n\t}\n\treturn 'high';\n}\n\nfunction normalizeRiskList(value: any): string[] {\n\tif (!Array.isArray(value)) {\n\t\treturn [];\n\t}\n\treturn value\n\t\t.map(item => normalizeOptionalString(item))\n\t\t.filter((item): item is string => !!item)\n\t\t.slice(0, MAX_REVIEW_LIST_ITEMS)\n\t\t.map(item => truncateForRiskReview(item, 220));\n}\n\nfunction buildFallbackRiskReview(operation: MongoExplorerRiskOperation, summary: string, model = ''): MongoExplorerRiskReview {\n\treturn {\n\t\toperation,\n\t\trisk_level: 'high',\n\t\tshould_block: true,\n\t\tsummary: truncateForRiskReview(summary, 220),\n\t\treasons: [\n\t\t\t'AI review could not produce a reliable result.',\n\t\t\t'Proceed only with explicit approval and manual dependency checks.'\n\t\t],\n\t\tsuggested_checks: [\n\t\t\t'Confirm related records and id_* references before writing.',\n\t\t\t'Validate that schema-required fields and date values remain valid.'\n\t\t],\n\t\tconfidence: 0,\n\t\tmodel: model || '',\n\t\trequest_id: '',\n\t\treview_status: 'fallback',\n\t\treviewed_at: new Date().toISOString()\n\t};\n}\n\nfunction buildDisabledRiskReview(operation: MongoExplorerRiskOperation): MongoExplorerRiskReview {\n\treturn {\n\t\toperation,\n\t\trisk_level: 'low',\n\t\tshould_block: false,\n\t\tsummary: 'AI risk review is disabled by configuration.',\n\t\treasons: [],\n\t\tsuggested_checks: [],\n\t\tconfidence: 1,\n\t\tmodel: '',\n\t\trequest_id: '',\n\t\treview_status: 'disabled',\n\t\treviewed_at: new Date().toISOString()\n\t};\n}\n\nfunction parseRiskReviewPayload(content: string): any {\n\tconst normalized = String(content || '').trim();\n\tif (!normalized.length) {\n\t\treturn {};\n\t}\n\n\ttry {\n\t\treturn JSON.parse(normalized);\n\t}\n\tcatch {\n\t\t// Fall through and try to parse a JSON object embedded in plain text.\n\t}\n\n\tconst start = normalized.indexOf('{');\n\tconst end = normalized.lastIndexOf('}');\n\tif (start !== -1 && end > start) {\n\t\tconst candidate = normalized.slice(start, end + 1);\n\t\ttry {\n\t\t\treturn JSON.parse(candidate);\n\t\t}\n\t\tcatch {\n\t\t\treturn {};\n\t\t}\n\t}\n\n\treturn {};\n}\n\nfunction normalizeRiskReview(\n\toperation: MongoExplorerRiskOperation,\n\tpayload: any,\n\tmodel: string,\n\trequestId: string\n): MongoExplorerRiskReview {\n\tconst riskLevel = normalizeRiskLevel(payload?.risk_level);\n\tconst normalizedConfidence = Number(payload?.confidence);\n\tconst confidence = Number.isFinite(normalizedConfidence)\n\t\t? Math.max(0, Math.min(1, normalizedConfidence))\n\t\t: 0.6;\n\tconst summary = normalizeOptionalString(payload?.summary)\n\t\t|| `Codex review marked this operation as ${riskLevel} risk.`;\n\tconst reasons = normalizeRiskList(payload?.reasons);\n\tconst suggestedChecks = normalizeRiskList(payload?.suggested_checks);\n\tconst shouldBlock = payload?.should_block === true || riskLevel === 'critical';\n\n\treturn {\n\t\toperation,\n\t\trisk_level: riskLevel,\n\t\tshould_block: !!shouldBlock,\n\t\tsummary: truncateForRiskReview(summary, 220),\n\t\treasons,\n\t\tsuggested_checks: suggestedChecks,\n\t\tconfidence,\n\t\tmodel: model || '',\n\t\trequest_id: requestId || '',\n\t\treview_status: 'ok',\n\t\treviewed_at: new Date().toISOString()\n\t};\n}\n\nfunction resolveRiskReviewSettings() {\n\tconst serverConfig = ResolveIOServer.getServerConfig() || {};\n\n\tconst enabled = parseBooleanValue(\n\t\tserverConfig['MONGO_EXPLORER_ENABLE_AI_RISK_REVIEW'] ?? process.env.MONGO_EXPLORER_ENABLE_AI_RISK_REVIEW,\n\t\ttrue\n\t);\n\n\tconst model = normalizeOptionalString(\n\t\tserverConfig['MONGO_EXPLORER_RISK_REVIEW_MODEL']\n\t\t|| process.env.MONGO_EXPLORER_RISK_REVIEW_MODEL\n\t\t|| serverConfig['AI_ASSISTANT_CODEX_MODEL']\n\t\t|| process.env.AI_ASSISTANT_CODEX_MODEL\n\t\t|| serverConfig['AI_DASHBOARD_CODEX_MODEL']\n\t\t|| process.env.AI_DASHBOARD_CODEX_MODEL\n\t\t|| serverConfig['OPENAI_MODEL']\n\t\t|| process.env.OPENAI_MODEL\n\t) || DEFAULT_RISK_REVIEW_MODEL;\n\n\tconst fallbackModel = normalizeOptionalString(\n\t\tserverConfig['MONGO_EXPLORER_RISK_REVIEW_FALLBACK_MODEL']\n\t\t|| process.env.MONGO_EXPLORER_RISK_REVIEW_FALLBACK_MODEL\n\t\t|| serverConfig['AI_ASSISTANT_CODEX_FALLBACK_MODEL']\n\t\t|| process.env.AI_ASSISTANT_CODEX_FALLBACK_MODEL\n\t\t|| serverConfig['AI_DASHBOARD_CODEX_FALLBACK_MODEL']\n\t\t|| process.env.AI_DASHBOARD_CODEX_FALLBACK_MODEL\n\t);\n\n\tconst timeoutMs = normalizePositiveNumber(\n\t\tserverConfig['MONGO_EXPLORER_RISK_REVIEW_TIMEOUT_MS'] ?? process.env.MONGO_EXPLORER_RISK_REVIEW_TIMEOUT_MS,\n\t\tDEFAULT_RISK_REVIEW_TIMEOUT_MS\n\t);\n\n\tconst maxTokens = normalizePositiveNumber(\n\t\tserverConfig['MONGO_EXPLORER_RISK_REVIEW_MAX_TOKENS'] ?? process.env.MONGO_EXPLORER_RISK_REVIEW_MAX_TOKENS,\n\t\tDEFAULT_RISK_REVIEW_MAX_TOKENS\n\t);\n\n\tconst maxRetries = normalizePositiveNumber(\n\t\tserverConfig['OPENAI_MAX_RETRIES'] ?? process.env.OPENAI_MAX_RETRIES,\n\t\t1\n\t);\n\n\tconst retryDelayMs = normalizePositiveNumber(\n\t\tserverConfig['OPENAI_RETRY_DELAY_MS'] ?? process.env.OPENAI_RETRY_DELAY_MS,\n\t\t750\n\t);\n\n\tconst apiKey = normalizeOptionalString(serverConfig['OPENAI_API_KEY'] || process.env.OPENAI_API_KEY) || '';\n\tconst baseUrl = normalizeOptionalString(serverConfig['OPENAI_BASE_URL'] || process.env.OPENAI_BASE_URL);\n\n\treturn {\n\t\tenabled,\n\t\tapiKey,\n\t\tbaseUrl,\n\t\tmodel,\n\t\tfallbackModel,\n\t\ttimeoutMs,\n\t\tmaxTokens,\n\t\tmaxRetries,\n\t\tretryDelayMs\n\t};\n}\n\nfunction buildRiskReviewPrompt(input: MongoExplorerRiskReviewInput): string {\n\tconst payload = {\n\t\tdatabase: input.database,\n\t\tcollection: input.collection,\n\t\toperation: input.operation,\n\t\tmode: input.mode,\n\t\tchanged_fields: pickChangedFields(input.before_document, input.after_document),\n\t\tdelete_impact: sanitizeForRiskReview(input.delete_impact || null),\n\t\tbefore_document: sanitizeForRiskReview(input.before_document || null),\n\t\tafter_document: sanitizeForRiskReview(input.after_document || null)\n\t};\n\n\treturn [\n\t\t'Review this MongoDB write operation for runtime and data integrity risk.',\n\t\t'Focus on foreign-key style id_* dependencies, schema compatibility, destructive impact, and financial/operational record safety.',\n\t\t'Return JSON only.',\n\t\tJSON.stringify(payload, null, 2)\n\t].join('\\n');\n}\n\nasync function reviewOperationRisk(input: MongoExplorerRiskReviewInput): Promise<MongoExplorerRiskReview> {\n\tconst settings = resolveRiskReviewSettings();\n\tif (!settings.enabled) {\n\t\treturn buildDisabledRiskReview(input.operation);\n\t}\n\n\tif (!settings.apiKey) {\n\t\treturn buildFallbackRiskReview(input.operation, 'AI risk review unavailable: OPENAI_API_KEY is missing.');\n\t}\n\n\tconst client = new OpenAIClient({\n\t\tapiKey: settings.apiKey,\n\t\tbaseUrl: settings.baseUrl,\n\t\tmodel: settings.model,\n\t\tfallbackModel: settings.fallbackModel,\n\t\ttemperature: 0.1,\n\t\tmaxTokens: settings.maxTokens,\n\t\tmaxRetries: round(settings.maxRetries),\n\t\tretryDelayMs: round(settings.retryDelayMs),\n\t\tresponseFormat: 'json'\n\t});\n\n\tconst systemPrompt = [\n\t\t'You are a MongoDB operation safety reviewer for a production SaaS application.',\n\t\t'Respond with a single JSON object only.',\n\t\t'Required keys:',\n\t\t'risk_level (\"low\" | \"medium\" | \"high\" | \"critical\"),',\n\t\t'should_block (boolean),',\n\t\t'summary (string),',\n\t\t'reasons (string[]),',\n\t\t'suggested_checks (string[]),',\n\t\t'confidence (number between 0 and 1).',\n\t\t'Keep summary concise (<= 220 chars).'\n\t].join(' ');\n\n\ttry {\n\t\tconst response = await client.chat(\n\t\t\t[\n\t\t\t\t{ role: 'system', content: systemPrompt },\n\t\t\t\t{ role: 'user', content: buildRiskReviewPrompt(input) }\n\t\t\t],\n\t\t\t{\n\t\t\t\ttimeoutMs: round(settings.timeoutMs),\n\t\t\t\tresponseFormat: 'json'\n\t\t\t}\n\t\t);\n\n\t\tconst payload = parseRiskReviewPayload(response.content);\n\t\treturn normalizeRiskReview(input.operation, payload, response.model || settings.model, response.requestId || '');\n\t}\n\tcatch (err) {\n\t\tconst detail = err?.message ? String(err.message) : 'Unknown AI review error';\n\t\treturn buildFallbackRiskReview(input.operation, `AI risk review failed: ${truncateForRiskReview(detail, 160)}`, settings.model);\n\t}\n}\n\nexport function loadMongoExplorerMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tmongoExplorerListCollections: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database?: string) {\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\tconst collections = await db.listCollections().toArray();\n\t\t\t\treturn collections\n\t\t\t\t\t.map(col => ({\n\t\t\t\t\t\tname: col.name,\n\t\t\t\t\t\ttype: col.type || 'collection'\n\t\t\t\t\t}))\n\t\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name));\n\t\t\t}\n\t\t},\n\t\tmongoExplorerFind: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tquery: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, query: any = {}, options?) {\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\tconst normalized = normalizeFindOptions(options);\n\t\t\t\tconst documents = await db.collection(collection).find(query || {}, normalized.findOptions).toArray();\n\t\t\t\tlet total = null;\n\n\t\t\t\tif (normalized.includeTotal) {\n\t\t\t\t\ttotal = await db.collection(collection).countDocuments(query || {});\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tdocuments,\n\t\t\t\t\ttotal\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\tmongoExplorerGetCollectionSchema: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(database: string, collection: string) {\n\t\t\t\tconst dbName = resolveDatabaseName(database);\n\t\t\t\tconst { managerCollection } = resolveCollectionHandle(dbName, collection);\n\t\t\t\tif (!managerCollection) {\n\t\t\t\t\treturn Promise.resolve({\n\t\t\t\t\t\tcollection,\n\t\t\t\t\t\thas_schema: false,\n\t\t\t\t\t\tfields: []\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst schema = getSchemaDefinition(managerCollection);\n\t\t\t\tconst fields = Object.keys(schema)\n\t\t\t\t\t.sort((a, b) => a.localeCompare(b))\n\t\t\t\t\t.map((path) => {\n\t\t\t\t\t\tconst definition = schema[path];\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\tlabel: toLabel(path),\n\t\t\t\t\t\t\ttype: getSchemaTypeName(definition),\n\t\t\t\t\t\t\toptional: definition?.optional === true,\n\t\t\t\t\t\t\tprotected: isProtectedFieldPath(path),\n\t\t\t\t\t\t\tdepth: path.split('.').filter((segment: string) => segment !== '$').length - 1\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\n\t\t\t\treturn Promise.resolve({\n\t\t\t\t\tcollection,\n\t\t\t\t\thas_schema: true,\n\t\t\t\t\tfields\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tmongoExplorerAggregate: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpipeline: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'pipeline.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, pipeline: any[], options: any = {}) {\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\treturn db.collection(collection).aggregate(pipeline || [], options || undefined).toArray();\n\t\t\t}\n\t\t},\n\t\tmongoExplorerCommand: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcommand: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tmode: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, command: any, permissionView?: string, mode?: string) {\n\t\t\t\tawait ensureWriteAccess(this, permissionView, mode);\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\treturn db.command(command);\n\t\t\t}\n\t\t},\n\t\tmongoExplorerInsertDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdocument: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tmode: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, document: any, permissionView?: string, mode?: string) {\n\t\t\t\tawait ensureWriteAccess(this, permissionView, mode);\n\t\t\t\tconst dbName = resolveDatabaseName(database);\n\t\t\t\tconst { managerCollection, dbCollection } = resolveCollectionHandle(dbName, collection);\n\n\t\t\t\tif (!document || typeof document !== 'object') {\n\t\t\t\t\tthrow new Error('Mongo Explorer: Document is required');\n\t\t\t\t}\n\n\t\t\t\tif (!managerCollection && !allowUnschemaizedWrites()) {\n\t\t\t\t\tthrow new Error('Mongo Explorer: Writes require schema-backed collections. Set MONGO_EXPLORER_ALLOW_UNSCHEMATIZED_WRITE=true to bypass.');\n\t\t\t\t}\n\n\t\t\t\tif (!document._id) {\n\t\t\t\t\tdocument._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\tif (document.__v === undefined) {\n\t\t\t\t\tdocument.__v = 0;\n\t\t\t\t}\n\n\t\t\t\tif (managerCollection) {\n\t\t\t\t\tcoerceDateFields(managerCollection, document);\n\t\t\t\t\tawait managerCollection.insertOne(document);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait dbCollection.insertOne(document);\n\t\t\t\t}\n\n\t\t\t\treturn document._id;\n\t\t\t}\n\t\t},\n\t\t\tmongoExplorerReplaceDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdocument: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tmode: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, document: any, permissionView?: string, mode?: string) {\n\t\t\t\tawait ensureWriteAccess(this, permissionView, mode);\n\t\t\t\tconst dbName = resolveDatabaseName(database);\n\t\t\t\tconst { managerCollection, dbCollection } = resolveCollectionHandle(dbName, collection);\n\n\t\t\t\tif (!document || typeof document !== 'object' || !document._id) {\n\t\t\t\t\tthrow new Error('Mongo Explorer: Document with _id is required');\n\t\t\t\t}\n\n\t\t\t\tconst currentDoc = managerCollection\n\t\t\t\t\t? await managerCollection.findOne({_id: document._id})\n\t\t\t\t\t: await dbCollection.findOne({_id: document._id});\n\t\t\t\tif (!currentDoc) {\n\t\t\t\t\tthrow new Error('Mongo Explorer: Document not found');\n\t\t\t\t}\n\n\t\t\t\tensureProtectedFieldsUnchanged(currentDoc, document);\n\n\t\t\t\tif (!managerCollection && !allowUnschemaizedWrites()) {\n\t\t\t\t\tthrow new Error('Mongo Explorer: Writes require schema-backed collections. Set MONGO_EXPLORER_ALLOW_UNSCHEMATIZED_WRITE=true to bypass.');\n\t\t\t\t}\n\n\t\t\t\tif (managerCollection) {\n\t\t\t\t\tcoerceDateFields(managerCollection, document);\n\t\t\t\t\tawait managerCollection.replaceOne({_id: document._id}, document);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait dbCollection.replaceOne({_id: document._id}, document);\n\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t},\n\t\t\tmongoExplorerReviewOperationRisk: {\n\t\t\t\tcheck: new SimpleSchema({\n\t\t\t\t\tdatabase: {\n\t\t\t\t\t\ttype: String,\n\t\t\t\t\t\toptional: true\n\t\t\t\t\t},\n\t\t\t\t\tcollection: {\n\t\t\t\t\t\ttype: String\n\t\t\t\t\t},\n\t\t\t\t\toperation: {\n\t\t\t\t\t\ttype: String,\n\t\t\t\t\t\tallowedValues: ['insert', 'replace', 'delete', 'command']\n\t\t\t\t\t},\n\t\t\t\t\tbefore_document: {\n\t\t\t\t\t\ttype: Object,\n\t\t\t\t\t\tblackbox: true,\n\t\t\t\t\t\toptional: true\n\t\t\t\t\t},\n\t\t\t\t\tafter_document: {\n\t\t\t\t\t\ttype: Object,\n\t\t\t\t\t\tblackbox: true,\n\t\t\t\t\t\toptional: true\n\t\t\t\t\t},\n\t\t\t\t\tdelete_impact: {\n\t\t\t\t\t\ttype: Object,\n\t\t\t\t\t\tblackbox: true,\n\t\t\t\t\t\toptional: true\n\t\t\t\t\t},\n\t\t\t\t\tpermissionView: {\n\t\t\t\t\t\ttype: String,\n\t\t\t\t\t\toptional: true\n\t\t\t\t\t},\n\t\t\t\t\tmode: {\n\t\t\t\t\t\ttype: String,\n\t\t\t\t\t\toptional: true\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tfunction: async function(\n\t\t\t\t\tdatabase: string,\n\t\t\t\t\tcollection: string,\n\t\t\t\t\toperation: MongoExplorerRiskOperation,\n\t\t\t\t\tbefore_document?: any,\n\t\t\t\t\tafter_document?: any,\n\t\t\t\t\tdelete_impact?: MongoExplorerDeleteImpact,\n\t\t\t\t\tpermissionView?: string,\n\t\t\t\t\tmode?: string\n\t\t\t\t) {\n\t\t\t\t\tawait ensureWriteAccess(this, permissionView, mode);\n\t\t\t\t\tconst dbName = resolveDatabaseName(database);\n\n\t\t\t\t\treturn reviewOperationRisk({\n\t\t\t\t\t\tdatabase: dbName,\n\t\t\t\t\t\tcollection,\n\t\t\t\t\t\toperation,\n\t\t\t\t\t\tmode: normalizeExplorerMode(mode),\n\t\t\t\t\t\tbefore_document,\n\t\t\t\t\t\tafter_document,\n\t\t\t\t\t\tdelete_impact\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tmongoExplorerDeleteDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdoc_id: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tforce: {\n\t\t\t\t\ttype: Boolean,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tmode: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, doc_id: string, permissionView?: string, force = false, mode?: string) {\n\t\t\t\tawait ensureWriteAccess(this, permissionView, mode);\n\t\t\t\tconst dbName = resolveDatabaseName(database);\n\t\t\t\tconst impact = await buildDeleteImpact(dbName, collection, doc_id);\n\t\t\t\tif (!force && (impact.unresolved || impact.has_references)) {\n\t\t\t\t\tconst collectionPreview = impact.collections.slice(0, 3).map(item => item.collection).join(', ');\n\t\t\t\t\tif (impact.unresolved) {\n\t\t\t\t\t\tthrow new Error('Mongo Explorer: Delete blocked because dependency checks could not complete. Use force delete after review.');\n\t\t\t\t\t}\n\t\t\t\t\tthrow new Error(`Mongo Explorer: Delete blocked. Document is referenced by ${collectionPreview}${impact.collections.length > 3 ? ', ...' : ''}`);\n\t\t\t\t}\n\n\t\t\t\tconst { managerCollection, dbCollection } = resolveCollectionHandle(dbName, collection);\n\t\t\t\tconst deleteFilter = { _id: doc_id } as any;\n\n\t\t\t\tif (managerCollection) {\n\t\t\t\t\tawait managerCollection.deleteOne(deleteFilter);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait dbCollection.deleteOne(deleteFilter);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tmongoExplorerDeleteImpact: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdoc_id: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, doc_id: string) {\n\t\t\t\tconst dbName = resolveDatabaseName(database);\n\t\t\t\treturn buildDeleteImpact(dbName, collection, doc_id);\n\t\t\t}\n\t\t}\n\t});\n}\n"]}
|
package/methods.ts
CHANGED
|
@@ -147,23 +147,29 @@ export function SERVER_METHODS(resolveioServer) {
|
|
|
147
147
|
mongoExplorerAggregate: (database: string, collection: string, pipeline: any[], options: any = {}, cb?: Function): Promise<any> => {
|
|
148
148
|
return resolveioServer.call('mongoExplorerAggregate', database, collection, pipeline, options, cb);
|
|
149
149
|
},
|
|
150
|
-
mongoExplorerCommand: (database: string, command: any, permissionView?: string, cb?: Function): Promise<any> => {
|
|
151
|
-
return resolveioServer.call('mongoExplorerCommand', database, command, permissionView, cb);
|
|
150
|
+
mongoExplorerCommand: (database: string, command: any, permissionView?: string, mode?: string, cb?: Function): Promise<any> => {
|
|
151
|
+
return resolveioServer.call('mongoExplorerCommand', database, command, permissionView, mode, cb);
|
|
152
152
|
},
|
|
153
|
-
mongoExplorerDeleteDocument: (database: string, collection: string, doc_id: string, permissionView?: string, cb?: Function): Promise<any> => {
|
|
154
|
-
return resolveioServer.call('mongoExplorerDeleteDocument', database, collection, doc_id, permissionView, cb);
|
|
153
|
+
mongoExplorerDeleteDocument: (database: string, collection: string, doc_id: string, permissionView?: string, force = false, mode?: string, cb?: Function): Promise<any> => {
|
|
154
|
+
return resolveioServer.call('mongoExplorerDeleteDocument', database, collection, doc_id, permissionView, force, mode, cb);
|
|
155
|
+
},
|
|
156
|
+
mongoExplorerDeleteImpact: (database: string, collection: string, doc_id: string, cb?: Function): Promise<any> => {
|
|
157
|
+
return resolveioServer.call('mongoExplorerDeleteImpact', database, collection, doc_id, cb);
|
|
155
158
|
},
|
|
156
159
|
mongoExplorerFind: (database: string, collection: string, query: any = {}, options?, cb?: Function): Promise<any> => {
|
|
157
160
|
return resolveioServer.call('mongoExplorerFind', database, collection, query, options, cb);
|
|
158
161
|
},
|
|
159
|
-
|
|
160
|
-
return resolveioServer.call('
|
|
162
|
+
mongoExplorerGetCollectionSchema: (database: string, collection: string, cb?: Function): Promise<any> => {
|
|
163
|
+
return resolveioServer.call('mongoExplorerGetCollectionSchema', database, collection, cb);
|
|
164
|
+
},
|
|
165
|
+
mongoExplorerInsertDocument: (database: string, collection: string, document: any, permissionView?: string, mode?: string, cb?: Function): Promise<any> => {
|
|
166
|
+
return resolveioServer.call('mongoExplorerInsertDocument', database, collection, document, permissionView, mode, cb);
|
|
161
167
|
},
|
|
162
168
|
mongoExplorerListCollections: (database?: string, cb?: Function): Promise<any> => {
|
|
163
169
|
return resolveioServer.call('mongoExplorerListCollections', database, cb);
|
|
164
170
|
},
|
|
165
|
-
mongoExplorerReplaceDocument: (database: string, collection: string, document: any, permissionView?: string, cb?: Function): Promise<any> => {
|
|
166
|
-
return resolveioServer.call('mongoExplorerReplaceDocument', database, collection, document, permissionView, cb);
|
|
171
|
+
mongoExplorerReplaceDocument: (database: string, collection: string, document: any, permissionView?: string, mode?: string, cb?: Function): Promise<any> => {
|
|
172
|
+
return resolveioServer.call('mongoExplorerReplaceDocument', database, collection, document, permissionView, mode, cb);
|
|
167
173
|
},
|
|
168
174
|
monitorCPUs: (cb?: Function): Promise<any> => {
|
|
169
175
|
return resolveioServer.call('monitorCPUs', cb);
|