@resolveio/server-lib 22.2.41 → 22.2.43
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/managers/method.manager.d.ts +1 -0
- package/managers/method.manager.js +180 -20
- package/managers/method.manager.js.map +1 -1
- package/managers/monitor.manager.d.ts +1 -0
- package/managers/monitor.manager.js +18 -2
- package/managers/monitor.manager.js.map +1 -1
- package/managers/worker-dispatcher.manager.js +3 -2
- package/managers/worker-dispatcher.manager.js.map +1 -1
- package/methods/ai-terminal.js +2 -7
- package/methods/ai-terminal.js.map +1 -1
- package/methods/mongo-explorer.js +4 -7
- package/methods/mongo-explorer.js.map +1 -1
- package/methods/report-builder.js +2 -7
- package/methods/report-builder.js.map +1 -1
- package/models/support-ticket.model.d.ts +1 -1
- package/models/support-ticket.model.js.map +1 -1
- package/package.json +1 -1
- package/server-app.js +39 -16
- package/server-app.js.map +1 -1
- package/services/codex-client.d.ts +0 -1
- package/services/codex-client.js +0 -4
- package/services/codex-client.js.map +1 -1
|
@@ -102,12 +102,9 @@ var MAX_REVIEW_LIST_ITEMS = 6;
|
|
|
102
102
|
var MAX_REVIEW_CHANGED_FIELDS = 60;
|
|
103
103
|
var DEFAULT_RISK_REVIEW_TIMEOUT_MS = 30000;
|
|
104
104
|
var DEFAULT_RISK_REVIEW_MAX_TOKENS = 700;
|
|
105
|
-
var DEFAULT_RISK_REVIEW_MODEL = 'gpt-5.3-codex';
|
|
106
105
|
var SENSITIVE_REVIEW_FIELD_REGEX = /(password|secret|token|api[_-]?key|salt|hash|email|phone|address|ssn|services|roles)/i;
|
|
107
106
|
var DEFAULT_AI_SUGGEST_TIMEOUT_MS = 60000;
|
|
108
107
|
var DEFAULT_AI_SUGGEST_MAX_TOKENS = 1000;
|
|
109
|
-
var DEFAULT_AI_SUGGEST_MODEL = 'gpt-5.3-codex';
|
|
110
|
-
var DEFAULT_AI_SUGGEST_FALLBACK_MODEL = 'gpt-5.2-codex';
|
|
111
108
|
var MAX_AI_SUGGEST_FIELDS = 700;
|
|
112
109
|
var MAX_AI_SUGGEST_COLLECTIONS = 800;
|
|
113
110
|
var MAX_AI_SUGGEST_RESULTS = 500;
|
|
@@ -757,7 +754,7 @@ function resolveRiskReviewSettings() {
|
|
|
757
754
|
|| serverConfig['AI_ASSISTANT_CODEX_MODEL']
|
|
758
755
|
|| process.env.AI_ASSISTANT_CODEX_MODEL
|
|
759
756
|
|| serverConfig['AI_DASHBOARD_CODEX_MODEL']
|
|
760
|
-
|| process.env.AI_DASHBOARD_CODEX_MODEL)
|
|
757
|
+
|| process.env.AI_DASHBOARD_CODEX_MODEL);
|
|
761
758
|
var fallbackModel = normalizeOptionalString(serverConfig['MONGO_EXPLORER_RISK_REVIEW_FALLBACK_MODEL']
|
|
762
759
|
|| process.env.MONGO_EXPLORER_RISK_REVIEW_FALLBACK_MODEL
|
|
763
760
|
|| serverConfig['AI_ASSISTANT_CODEX_FALLBACK_MODEL']
|
|
@@ -791,7 +788,7 @@ function buildCodexClient(settings) {
|
|
|
791
788
|
if (fallback && fallback !== settings.model) {
|
|
792
789
|
fallbackModels.push(fallback);
|
|
793
790
|
}
|
|
794
|
-
return new codex_client_1.CodexClient(__assign(__assign({ apiKey: settings.apiKey, baseUrl: settings.baseUrl, model: settings.model }, (fallbackModels.length ? { fallbackModel: fallbackModels[0], fallbackModels: fallbackModels } : {})), { maxRetries: (0, common_1.round)(settings.maxRetries || 0), retryDelayMs: (0, common_1.round)(settings.retryDelayMs || 0) }));
|
|
791
|
+
return new codex_client_1.CodexClient(__assign(__assign(__assign({ apiKey: settings.apiKey, baseUrl: settings.baseUrl }, (settings.model ? { model: settings.model } : {})), (fallbackModels.length ? { fallbackModel: fallbackModels[0], fallbackModels: fallbackModels } : {})), { maxRetries: (0, common_1.round)(settings.maxRetries || 0), retryDelayMs: (0, common_1.round)(settings.retryDelayMs || 0) }));
|
|
795
792
|
}
|
|
796
793
|
function estimateCodexUsage(messages, responseText, model) {
|
|
797
794
|
var inputTokens = (0, tokenizer_1.countChatTokens)(messages, model);
|
|
@@ -1012,11 +1009,11 @@ function resolveMongoExplorerAiSettings() {
|
|
|
1012
1009
|
var model = normalizeOptionalString(serverConfig['MONGO_EXPLORER_AI_MODEL']
|
|
1013
1010
|
|| process.env.MONGO_EXPLORER_AI_MODEL
|
|
1014
1011
|
|| serverConfig['AI_ASSISTANT_CODEX_MODEL']
|
|
1015
|
-
|| process.env.AI_ASSISTANT_CODEX_MODEL)
|
|
1012
|
+
|| process.env.AI_ASSISTANT_CODEX_MODEL);
|
|
1016
1013
|
var fallbackModel = normalizeOptionalString(serverConfig['MONGO_EXPLORER_AI_FALLBACK_MODEL']
|
|
1017
1014
|
|| process.env.MONGO_EXPLORER_AI_FALLBACK_MODEL
|
|
1018
1015
|
|| serverConfig['AI_ASSISTANT_CODEX_FALLBACK_MODEL']
|
|
1019
|
-
|| process.env.AI_ASSISTANT_CODEX_FALLBACK_MODEL)
|
|
1016
|
+
|| process.env.AI_ASSISTANT_CODEX_FALLBACK_MODEL);
|
|
1020
1017
|
var timeoutMs = normalizePositiveNumber((_a = serverConfig['MONGO_EXPLORER_AI_TIMEOUT_MS']) !== null && _a !== void 0 ? _a : process.env.MONGO_EXPLORER_AI_TIMEOUT_MS, DEFAULT_AI_SUGGEST_TIMEOUT_MS);
|
|
1021
1018
|
var maxTokens = normalizePositiveNumber((_b = serverConfig['MONGO_EXPLORER_AI_MAX_TOKENS']) !== null && _b !== void 0 ? _b : process.env.MONGO_EXPLORER_AI_MAX_TOKENS, DEFAULT_AI_SUGGEST_MAX_TOKENS);
|
|
1022
1019
|
var maxRetries = normalizePositiveNumber((_c = serverConfig['OPENAI_MAX_RETRIES']) !== null && _c !== void 0 ? _c : process.env.OPENAI_MAX_RETRIES, 1);
|
|
@@ -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 { recordOpenAIUsage } from '../managers/openai-usage-ledger.manager';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { CodexClient } from '../services/codex-client';\nimport { objectIdHexString, round } from '../util/common';\nimport { countChatTokens, countTokens } from '../util/tokenizer';\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;\nconst DEFAULT_AI_SUGGEST_TIMEOUT_MS = 60000;\nconst DEFAULT_AI_SUGGEST_MAX_TOKENS = 1000;\nconst DEFAULT_AI_SUGGEST_MODEL = 'gpt-5.3-codex';\nconst DEFAULT_AI_SUGGEST_FALLBACK_MODEL = 'gpt-5.2-codex';\nconst MAX_AI_SUGGEST_FIELDS = 700;\nconst MAX_AI_SUGGEST_COLLECTIONS = 800;\nconst MAX_AI_SUGGEST_RESULTS = 500;\nconst RESTRICTED_AGGREGATE_STAGES = new Set(['$out', '$merge']);\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\ntype MongoExplorerAiAction = 'find' | 'aggregate';\n\ntype MongoExplorerAiPayload = {\n\tprompt?: string;\n\tdatabase?: string;\n\tselected_collection?: string;\n\tavailable_collections?: Array<{ name?: string; collection?: string; type?: string }>;\n\tavailable_fields?: Array<{ path?: string; label?: string; type?: string; collection?: string }>;\n\tpermission_view?: string;\n\tmode?: string;\n\tid_client?: string;\n\tmax_results?: number;\n};\n\ntype MongoExplorerAiField = {\n\tpath: string;\n\tlabel: string;\n\ttype: string;\n\tcollection: string;\n};\n\ntype MongoExplorerAiPlan = {\n\taction: MongoExplorerAiAction;\n\tcollection: string;\n\tquery?: Record<string, any>;\n\tpipeline?: any[];\n\toptions?: Record<string, any>;\n\tdocuments?: any[];\n\ttotal?: number | null;\n\tnotes?: string;\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 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') {\n\t\tthrow new Error('Mongo Explorer: ResolveIO mode is read only');\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|| `AI 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) || 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 buildCodexPrompt(systemPrompt: string, userPrompt: string): string {\n\treturn `System:\\n${systemPrompt}\\n\\nUser:\\n${userPrompt}`.trim();\n}\n\nfunction buildCodexClient(settings: {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tmodel: string;\n\tfallbackModel?: string;\n\tmaxRetries?: number;\n\tretryDelayMs?: number;\n}): CodexClient {\n\tconst fallbackModels: string[] = [];\n\tconst fallback = normalizeOptionalString(settings.fallbackModel);\n\tif (fallback && fallback !== settings.model) {\n\t\tfallbackModels.push(fallback);\n\t}\n\treturn new CodexClient({\n\t\tapiKey: settings.apiKey,\n\t\tbaseUrl: settings.baseUrl,\n\t\tmodel: settings.model,\n\t\t...(fallbackModels.length ? { fallbackModel: fallbackModels[0], fallbackModels } : {}),\n\t\tmaxRetries: round(settings.maxRetries || 0),\n\t\tretryDelayMs: round(settings.retryDelayMs || 0)\n\t});\n}\n\nfunction estimateCodexUsage(messages: Array<{ role: string; content: string }>, responseText: string, model: string) {\n\tconst inputTokens = countChatTokens(messages, model);\n\tconst outputTokens = countTokens(responseText || '', model);\n\treturn {\n\t\tinputTokens,\n\t\toutputTokens,\n\t\ttotalTokens: inputTokens + outputTokens\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: AI API key is missing.');\n\t}\n\n\tconst client = buildCodexClient(settings);\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\tconst userPrompt = buildRiskReviewPrompt(input);\n\tconst prompt = buildCodexPrompt(systemPrompt, userPrompt);\n\n\ttry {\n\t\tconst responseText = await client.run(prompt, {\n\t\t\ttimeoutMs: round(settings.timeoutMs),\n\t\t\tthreadOptions: {\n\t\t\t\tmodel: settings.model,\n\t\t\t\tsandboxMode: 'read-only',\n\t\t\t\tskipGitRepoCheck: true,\n\t\t\t\tnetworkAccessEnabled: false,\n\t\t\t\twebSearchMode: 'disabled',\n\t\t\t\twebSearchEnabled: false,\n\t\t\t\tapprovalPolicy: 'never'\n\t\t\t}\n\t\t});\n\n\t\tconst payload = parseRiskReviewPayload(responseText);\n\t\treturn normalizeRiskReview(input.operation, payload, settings.model, '');\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\nfunction normalizeAiAction(value: any): MongoExplorerAiAction {\n\tconst normalized = normalizeOptionalString(value) || '';\n\treturn normalized.toLowerCase() === 'aggregate' ? 'aggregate' : 'find';\n}\n\nfunction sanitizeAiCollections(raw: any[]): string[] {\n\tconst values: string[] = [];\n\tconst seen = new Set<string>();\n\t(raw || []).forEach((entry) => {\n\t\tconst normalized = normalizeOptionalString((entry as any)?.collection || (entry as any)?.name || entry);\n\t\tif (!normalized) {\n\t\t\treturn;\n\t\t}\n\t\tconst key = normalized.toLowerCase();\n\t\tif (seen.has(key)) {\n\t\t\treturn;\n\t\t}\n\t\tseen.add(key);\n\t\tvalues.push(normalized);\n\t});\n\treturn values.slice(0, MAX_AI_SUGGEST_COLLECTIONS);\n}\n\nfunction sanitizeAiFields(raw: any[], fallbackCollection: string): MongoExplorerAiField[] {\n\tconst fields: MongoExplorerAiField[] = [];\n\tconst seen = new Set<string>();\n\t(raw || []).forEach((entry) => {\n\t\tconst path = normalizeOptionalString(entry?.path || entry?.field_path || entry?.fieldPath);\n\t\tif (!path) {\n\t\t\treturn;\n\t\t}\n\t\tconst collection = normalizeOptionalString(\n\t\t\tentry?.collection || entry?.collection_name || entry?.collectionName\n\t\t) || fallbackCollection || '';\n\t\tconst key = `${collection.toLowerCase()}::${path.toLowerCase()}`;\n\t\tif (seen.has(key)) {\n\t\t\treturn;\n\t\t}\n\t\tseen.add(key);\n\t\tfields.push({\n\t\t\tpath,\n\t\t\tlabel: normalizeOptionalString(entry?.label || entry?.field_path_name || entry?.fieldPathName) || path,\n\t\t\ttype: normalizeOptionalString(entry?.type || entry?.field_type || entry?.fieldType) || 'Any',\n\t\t\tcollection\n\t\t});\n\t});\n\treturn fields.slice(0, MAX_AI_SUGGEST_FIELDS);\n}\n\nfunction deriveAiFieldsFromCollection(database: string, collection: string): MongoExplorerAiField[] {\n\tif (!collection) {\n\t\treturn [];\n\t}\n\tconst { managerCollection } = resolveCollectionHandle(database, collection);\n\tif (!managerCollection) {\n\t\treturn [];\n\t}\n\tconst schema = getSchemaDefinition(managerCollection);\n\treturn Object.keys(schema)\n\t\t.sort((a, b) => a.localeCompare(b))\n\t\t.slice(0, MAX_AI_SUGGEST_FIELDS)\n\t\t.map((path) => {\n\t\t\tconst definition = schema[path];\n\t\t\treturn {\n\t\t\t\tpath,\n\t\t\t\tlabel: toLabel(path),\n\t\t\t\ttype: getSchemaTypeName(definition),\n\t\t\t\tcollection\n\t\t\t};\n\t\t});\n}\n\nfunction resolveCollectionFromList(value: any, collections: string[], fallback = ''): string {\n\tconst normalized = normalizeOptionalString(value);\n\tif (normalized) {\n\t\tconst matched = (collections || []).find(entry => entry.toLowerCase() === normalized.toLowerCase());\n\t\tif (matched) {\n\t\t\treturn matched;\n\t\t}\n\t}\n\tif (fallback) {\n\t\treturn fallback;\n\t}\n\treturn collections?.[0] || '';\n}\n\nfunction normalizeAiResultLimit(value: any, fallback = 100): number {\n\tconst fallbackValue = Math.min(Math.max(fallback, 1), MAX_AI_SUGGEST_RESULTS);\n\tconst parsed = Number(value);\n\tif (!Number.isFinite(parsed) || parsed <= 0) {\n\t\treturn fallbackValue;\n\t}\n\treturn Math.min(Math.max(round(parsed), 1), MAX_AI_SUGGEST_RESULTS);\n}\n\nfunction normalizeAiSkip(value: any): number {\n\tconst parsed = Number(value);\n\tif (!Number.isFinite(parsed) || parsed < 0) {\n\t\treturn 0;\n\t}\n\treturn Math.max(0, round(parsed));\n}\n\nfunction normalizeAiObject(value: any): Record<string, any> {\n\tif (!value || typeof value !== 'object' || Array.isArray(value)) {\n\t\treturn {};\n\t}\n\treturn value;\n}\n\nfunction hasObjectKeys(value: any): boolean {\n\treturn !!value && typeof value === 'object' && !Array.isArray(value) && Object.keys(value).length > 0;\n}\n\nfunction parseAiPlanPayload(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 parse embedded JSON object.\n\t}\n\n\tconst start = normalized.indexOf('{');\n\tconst end = normalized.lastIndexOf('}');\n\tif (start !== -1 && end > start) {\n\t\ttry {\n\t\t\treturn JSON.parse(normalized.slice(start, end + 1));\n\t\t}\n\t\tcatch {\n\t\t\treturn {};\n\t\t}\n\t}\n\n\treturn {};\n}\n\nfunction resolveMongoExplorerAiSettings() {\n\tconst serverConfig = ResolveIOServer.getServerConfig() || {};\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\tconst model = normalizeOptionalString(\n\t\tserverConfig['MONGO_EXPLORER_AI_MODEL']\n\t\t|| process.env.MONGO_EXPLORER_AI_MODEL\n\t\t|| serverConfig['AI_ASSISTANT_CODEX_MODEL']\n\t\t|| process.env.AI_ASSISTANT_CODEX_MODEL\n\t) || DEFAULT_AI_SUGGEST_MODEL;\n\n\tconst fallbackModel = normalizeOptionalString(\n\t\tserverConfig['MONGO_EXPLORER_AI_FALLBACK_MODEL']\n\t\t|| process.env.MONGO_EXPLORER_AI_FALLBACK_MODEL\n\t\t|| serverConfig['AI_ASSISTANT_CODEX_FALLBACK_MODEL']\n\t\t|| process.env.AI_ASSISTANT_CODEX_FALLBACK_MODEL\n\t) || DEFAULT_AI_SUGGEST_FALLBACK_MODEL;\n\n\tconst timeoutMs = normalizePositiveNumber(\n\t\tserverConfig['MONGO_EXPLORER_AI_TIMEOUT_MS'] ?? process.env.MONGO_EXPLORER_AI_TIMEOUT_MS,\n\t\tDEFAULT_AI_SUGGEST_TIMEOUT_MS\n\t);\n\n\tconst maxTokens = normalizePositiveNumber(\n\t\tserverConfig['MONGO_EXPLORER_AI_MAX_TOKENS'] ?? process.env.MONGO_EXPLORER_AI_MAX_TOKENS,\n\t\tDEFAULT_AI_SUGGEST_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\treturn {\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 buildMongoExplorerAiSystemPrompt(): string {\n\treturn [\n\t\t'You are a MongoDB query planner for a read-only Mongo Explorer UI.',\n\t\t'Return a single JSON object and nothing else.',\n\t\t'Supported schema:',\n\t\t'{',\n\t\t' \"action\": \"find|aggregate\",',\n\t\t' \"collection\": \"string\",',\n\t\t' \"query\": { ... },',\n\t\t' \"pipeline\": [{ ... }],',\n\t\t' \"options\": {',\n\t\t' \"projection\": { \"field\": 1 },',\n\t\t' \"sort\": { \"field\": -1 },',\n\t\t' \"limit\": 100,',\n\t\t' \"skip\": 0,',\n\t\t' \"includeTotal\": true,',\n\t\t' \"allowDiskUse\": true',\n\t\t' },',\n\t\t' \"notes\": \"short summary\"',\n\t\t'}',\n\t\t'Rules:',\n\t\t'- Use only provided collection names and field paths.',\n\t\t'- Read-only only. Never output write operations, update/delete commands, or aggregation stages $out/$merge.',\n\t\t'- Prefer action=find for direct lookups and simple filters.',\n\t\t'- Use action=aggregate for grouped totals, rankings, or trend buckets.',\n\t\t'- Keep options.limit between 1 and 500.',\n\t\t'- If request is ambiguous, use selected_collection and a conservative limit.'\n\t].join('\\n');\n}\n\nfunction buildMongoExplorerAiUserPrompt(input: {\n\tprompt: string;\n\tselectedCollection: string;\n\tavailableCollections: string[];\n\tavailableFields: MongoExplorerAiField[];\n\tmaxResults: number;\n}): string {\n\tconst payload = {\n\t\trequest: input.prompt,\n\t\tselected_collection: input.selectedCollection || '',\n\t\tmax_results: input.maxResults,\n\t\tavailable_collections: input.availableCollections || [],\n\t\tavailable_fields: input.availableFields || []\n\t};\n\treturn JSON.stringify(payload);\n}\n\nfunction sanitizeAggregatePipeline(rawPipeline: any, limit: number): { pipeline: any[]; removedRestricted: boolean } {\n\tconst source = Array.isArray(rawPipeline) ? rawPipeline : [];\n\tconst sanitized: any[] = [];\n\tlet removedRestricted = false;\n\n\tsource.forEach((stage) => {\n\t\tif (!stage || typeof stage !== 'object' || Array.isArray(stage)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst keys = Object.keys(stage);\n\t\tif (!keys.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst stageName = keys[0];\n\t\tif (RESTRICTED_AGGREGATE_STAGES.has(String(stageName).toLowerCase())) {\n\t\t\tremovedRestricted = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (stageName === '$limit') {\n\t\t\tsanitized.push({ $limit: normalizeAiResultLimit((stage as any).$limit, limit) });\n\t\t\treturn;\n\t\t}\n\n\t\tsanitized.push(stage);\n\t});\n\n\tif (!sanitized.some(stage => Object.keys(stage || {})[0] === '$limit')) {\n\t\tsanitized.push({ $limit: limit });\n\t}\n\n\treturn {\n\t\tpipeline: sanitized,\n\t\tremovedRestricted\n\t};\n}\n\nfunction sanitizeFindOptions(raw: any, fallbackLimit: number): {\n\tprojection?: Record<string, any>;\n\tsort?: Record<string, any>;\n\tlimit: number;\n\tskip: number;\n\tincludeTotal: boolean;\n} {\n\tconst options = normalizeAiObject(raw);\n\treturn {\n\t\tprojection: hasObjectKeys(options.projection) ? options.projection : undefined,\n\t\tsort: hasObjectKeys(options.sort) ? options.sort : undefined,\n\t\tlimit: normalizeAiResultLimit(options.limit, fallbackLimit),\n\t\tskip: normalizeAiSkip(options.skip),\n\t\tincludeTotal: options.includeTotal === true\n\t};\n}\n\nfunction buildMongoExplorerAiNotes(\n\trawNotes: any,\n\taction: MongoExplorerAiAction,\n\tcollection: string,\n\trowCount: number,\n\ttotal: number | null,\n\tremovedRestricted: boolean\n): string {\n\tconst notes: string[] = [];\n\tconst base = normalizeOptionalString(rawNotes);\n\tif (base) {\n\t\tnotes.push(base);\n\t}\n\n\tconst actionLabel = action === 'aggregate' ? 'aggregate pipeline' : 'query';\n\tif (typeof total === 'number' && total >= 0) {\n\t\tnotes.push(`Applied ${actionLabel} on ${collection}. Loaded ${rowCount} of ${total} rows.`);\n\t}\n\telse {\n\t\tnotes.push(`Applied ${actionLabel} on ${collection}. Loaded ${rowCount} rows.`);\n\t}\n\n\tif (removedRestricted) {\n\t\tnotes.push('Removed restricted write stages from the generated pipeline.');\n\t}\n\n\treturn notes.join(' ').trim();\n}\n\nasync function resolveUsageClientId(idClientInput?: string, idUser?: string): Promise<string> {\n\tconst normalized = normalizeOptionalString(idClientInput);\n\tif (normalized) {\n\t\treturn normalized;\n\t}\n\tif (!idUser) {\n\t\treturn '';\n\t}\n\ttry {\n\t\tconst user = await Users.findById(idUser);\n\t\treturn normalizeOptionalString(user?.other?.id_client || user?.other?.idClient) || '';\n\t}\n\tcatch {\n\t\treturn '';\n\t}\n}\n\nasync function executeMongoExplorerAi(payload: MongoExplorerAiPayload, context: any) {\n\tconst input = payload || {};\n\tconst prompt = normalizeOptionalString(input.prompt);\n\tif (!prompt) {\n\t\tthrow new Error('Prompt is required.');\n\t}\n\n\tconst database = resolveDatabaseName(input.database);\n\tconst db = resolveDatabase(database);\n\n\tlet availableCollections = sanitizeAiCollections(input.available_collections || []);\n\tif (!availableCollections.length) {\n\t\tconst listed = await db.listCollections().toArray();\n\t\tavailableCollections = listed\n\t\t\t.map(collection => normalizeOptionalString(collection?.name))\n\t\t\t.filter((collection): collection is string => !!collection)\n\t\t\t.slice(0, MAX_AI_SUGGEST_COLLECTIONS);\n\t}\n\n\tif (!availableCollections.length) {\n\t\tthrow new Error('Mongo Explorer AI assistant: no collections available.');\n\t}\n\n\tconst selectedCollection = resolveCollectionFromList(\n\t\tinput.selected_collection,\n\t\tavailableCollections,\n\t\tavailableCollections[0]\n\t);\n\n\tlet availableFields = sanitizeAiFields(input.available_fields || [], selectedCollection);\n\tif (!availableFields.length && selectedCollection) {\n\t\tavailableFields = deriveAiFieldsFromCollection(database, selectedCollection);\n\t}\n\n\tconst settings = resolveMongoExplorerAiSettings();\n\tif (!settings.apiKey) {\n\t\tthrow new Error('AI API key missing. Add an AI API key to server config.');\n\t}\n\n\tconst maxResults = normalizeAiResultLimit(input.max_results, 100);\n\tconst client = buildCodexClient(settings);\n\tconst messages: Array<{ role: 'system' | 'user'; content: string }> = [\n\t\t{ role: 'system', content: buildMongoExplorerAiSystemPrompt() },\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: buildMongoExplorerAiUserPrompt({\n\t\t\t\tprompt,\n\t\t\t\tselectedCollection,\n\t\t\t\tavailableCollections,\n\t\t\t\tavailableFields,\n\t\t\t\tmaxResults\n\t\t\t})\n\t\t}\n\t];\n\tconst responseText = await client.run(\n\t\tbuildCodexPrompt(messages[0].content, messages[1].content),\n\t\t{\n\t\t\ttimeoutMs: round(settings.timeoutMs),\n\t\t\tthreadOptions: {\n\t\t\t\tmodel: settings.model,\n\t\t\t\tsandboxMode: 'read-only',\n\t\t\t\tskipGitRepoCheck: true,\n\t\t\t\tnetworkAccessEnabled: false,\n\t\t\t\twebSearchMode: 'disabled',\n\t\t\t\twebSearchEnabled: false,\n\t\t\t\tapprovalPolicy: 'never'\n\t\t\t}\n\t\t}\n\t);\n\n\tconst parsed = parseAiPlanPayload(responseText);\n\tconst action = normalizeAiAction(parsed?.action || (Array.isArray(parsed?.pipeline) ? 'aggregate' : 'find'));\n\tconst collection = resolveCollectionFromList(\n\t\tparsed?.collection || parsed?.collection_name,\n\t\tavailableCollections,\n\t\tselectedCollection || availableCollections[0]\n\t);\n\n\tif (!collection) {\n\t\tthrow new Error('Mongo Explorer AI assistant could not resolve a collection.');\n\t}\n\n\tlet plan: MongoExplorerAiPlan = {\n\t\taction,\n\t\tcollection,\n\t\toptions: {}\n\t};\n\tlet removedRestrictedStages = false;\n\n\tif (action === 'aggregate') {\n\t\tconst optionsRaw = normalizeAiObject(parsed?.options);\n\t\tconst aggregateLimit = normalizeAiResultLimit(optionsRaw.limit ?? parsed?.limit, maxResults);\n\t\tconst pipelineResult = sanitizeAggregatePipeline(parsed?.pipeline, aggregateLimit);\n\t\tremovedRestrictedStages = pipelineResult.removedRestricted;\n\n\t\tconst aggregateOptions = {\n\t\t\tallowDiskUse: optionsRaw.allowDiskUse === true\n\t\t};\n\n\t\tconst aggregateRows = await db.collection(collection).aggregate(pipelineResult.pipeline, aggregateOptions).toArray();\n\t\tconst rows = (aggregateRows || []).slice(0, aggregateLimit);\n\n\t\tplan = {\n\t\t\taction,\n\t\t\tcollection,\n\t\t\tpipeline: pipelineResult.pipeline,\n\t\t\toptions: {\n\t\t\t\tallowDiskUse: aggregateOptions.allowDiskUse,\n\t\t\t\tlimit: aggregateLimit\n\t\t\t},\n\t\t\tdocuments: rows,\n\t\t\ttotal: null\n\t\t};\n\t}\n\telse {\n\t\tconst query = normalizeAiObject(parsed?.query);\n\t\tconst options = sanitizeFindOptions(parsed?.options, maxResults);\n\t\tconst findOptions: any = {\n\t\t\tlimit: options.limit,\n\t\t\tskip: options.skip\n\t\t};\n\t\tif (options.projection) {\n\t\t\tfindOptions.projection = options.projection;\n\t\t}\n\t\tif (options.sort) {\n\t\t\tfindOptions.sort = options.sort;\n\t\t}\n\n\t\tconst rows = await db.collection(collection).find(query, findOptions).toArray();\n\t\tconst total = options.includeTotal ? await db.collection(collection).countDocuments(query) : null;\n\n\t\tplan = {\n\t\t\taction,\n\t\t\tcollection,\n\t\t\tquery,\n\t\t\toptions: {\n\t\t\t\t...(options.projection ? { projection: options.projection } : {}),\n\t\t\t\t...(options.sort ? { sort: options.sort } : {}),\n\t\t\t\tlimit: options.limit,\n\t\t\t\tskip: options.skip,\n\t\t\t\tincludeTotal: options.includeTotal\n\t\t\t},\n\t\t\tdocuments: rows,\n\t\t\ttotal\n\t\t};\n\t}\n\n\tplan.notes = buildMongoExplorerAiNotes(\n\t\tparsed?.notes,\n\t\tplan.action,\n\t\tplan.collection,\n\t\tArray.isArray(plan.documents) ? plan.documents.length : 0,\n\t\ttypeof plan.total === 'number' ? plan.total : null,\n\t\tremovedRestrictedStages\n\t);\n\n\tconst usage = estimateCodexUsage(messages, responseText, settings.model);\n\tconst idClient = await resolveUsageClientId(input.id_client, context?.id_user);\n\tif (usage.totalTokens) {\n\t\tawait recordOpenAIUsage({\n\t\t\tid_client: idClient || '',\n\t\t\tmodel: settings.model || 'unknown',\n\t\t\tinput_tokens: usage.inputTokens || 0,\n\t\t\toutput_tokens: usage.outputTokens || 0,\n\t\t\ttotal_tokens: usage.totalTokens || 0,\n\t\t\tcategory: 'mongo-explorer-ai',\n\t\t\tid_request: ''\n\t\t});\n\t}\n\n\treturn {\n\t\tnotes: plan.notes,\n\t\tplan,\n\t\tmodel: settings.model,\n\t\tusage: {\n\t\t\tinput_tokens: usage.inputTokens || 0,\n\t\t\toutput_tokens: usage.outputTokens || 0,\n\t\t\ttotal_tokens: usage.totalTokens || 0\n\t\t}\n\t};\n}\n\nexport function loadMongoExplorerMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tmongoExplorerAiSuggest: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(payload: any) {\n\t\t\t\treturn executeMongoExplorerAi(payload || {}, this);\n\t\t\t}\n\t\t},\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"]}
|
|
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 { recordOpenAIUsage } from '../managers/openai-usage-ledger.manager';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { CodexClient } from '../services/codex-client';\nimport { objectIdHexString, round } from '../util/common';\nimport { countChatTokens, countTokens } from '../util/tokenizer';\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 SENSITIVE_REVIEW_FIELD_REGEX = /(password|secret|token|api[_-]?key|salt|hash|email|phone|address|ssn|services|roles)/i;\nconst DEFAULT_AI_SUGGEST_TIMEOUT_MS = 60000;\nconst DEFAULT_AI_SUGGEST_MAX_TOKENS = 1000;\nconst MAX_AI_SUGGEST_FIELDS = 700;\nconst MAX_AI_SUGGEST_COLLECTIONS = 800;\nconst MAX_AI_SUGGEST_RESULTS = 500;\nconst RESTRICTED_AGGREGATE_STAGES = new Set(['$out', '$merge']);\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\ntype MongoExplorerAiAction = 'find' | 'aggregate';\n\ntype MongoExplorerAiPayload = {\n\tprompt?: string;\n\tdatabase?: string;\n\tselected_collection?: string;\n\tavailable_collections?: Array<{ name?: string; collection?: string; type?: string }>;\n\tavailable_fields?: Array<{ path?: string; label?: string; type?: string; collection?: string }>;\n\tpermission_view?: string;\n\tmode?: string;\n\tid_client?: string;\n\tmax_results?: number;\n};\n\ntype MongoExplorerAiField = {\n\tpath: string;\n\tlabel: string;\n\ttype: string;\n\tcollection: string;\n};\n\ntype MongoExplorerAiPlan = {\n\taction: MongoExplorerAiAction;\n\tcollection: string;\n\tquery?: Record<string, any>;\n\tpipeline?: any[];\n\toptions?: Record<string, any>;\n\tdocuments?: any[];\n\ttotal?: number | null;\n\tnotes?: string;\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 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') {\n\t\tthrow new Error('Mongo Explorer: ResolveIO mode is read only');\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|| `AI 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);\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 buildCodexPrompt(systemPrompt: string, userPrompt: string): string {\n\treturn `System:\\n${systemPrompt}\\n\\nUser:\\n${userPrompt}`.trim();\n}\n\nfunction buildCodexClient(settings: {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tmodel?: string;\n\tfallbackModel?: string;\n\tmaxRetries?: number;\n\tretryDelayMs?: number;\n}): CodexClient {\n\tconst fallbackModels: string[] = [];\n\tconst fallback = normalizeOptionalString(settings.fallbackModel);\n\tif (fallback && fallback !== settings.model) {\n\t\tfallbackModels.push(fallback);\n\t}\n\treturn new CodexClient({\n\t\tapiKey: settings.apiKey,\n\t\tbaseUrl: settings.baseUrl,\n\t\t...(settings.model ? { model: settings.model } : {}),\n\t\t...(fallbackModels.length ? { fallbackModel: fallbackModels[0], fallbackModels } : {}),\n\t\tmaxRetries: round(settings.maxRetries || 0),\n\t\tretryDelayMs: round(settings.retryDelayMs || 0)\n\t});\n}\n\nfunction estimateCodexUsage(messages: Array<{ role: string; content: string }>, responseText: string, model: string) {\n\tconst inputTokens = countChatTokens(messages, model);\n\tconst outputTokens = countTokens(responseText || '', model);\n\treturn {\n\t\tinputTokens,\n\t\toutputTokens,\n\t\ttotalTokens: inputTokens + outputTokens\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: AI API key is missing.');\n\t}\n\n\tconst client = buildCodexClient(settings);\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\tconst userPrompt = buildRiskReviewPrompt(input);\n\tconst prompt = buildCodexPrompt(systemPrompt, userPrompt);\n\n\ttry {\n\t\tconst responseText = await client.run(prompt, {\n\t\t\ttimeoutMs: round(settings.timeoutMs),\n\t\t\tthreadOptions: {\n\t\t\t\tmodel: settings.model,\n\t\t\t\tsandboxMode: 'read-only',\n\t\t\t\tskipGitRepoCheck: true,\n\t\t\t\tnetworkAccessEnabled: false,\n\t\t\t\twebSearchMode: 'disabled',\n\t\t\t\twebSearchEnabled: false,\n\t\t\t\tapprovalPolicy: 'never'\n\t\t\t}\n\t\t});\n\n\t\tconst payload = parseRiskReviewPayload(responseText);\n\t\treturn normalizeRiskReview(input.operation, payload, settings.model, '');\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\nfunction normalizeAiAction(value: any): MongoExplorerAiAction {\n\tconst normalized = normalizeOptionalString(value) || '';\n\treturn normalized.toLowerCase() === 'aggregate' ? 'aggregate' : 'find';\n}\n\nfunction sanitizeAiCollections(raw: any[]): string[] {\n\tconst values: string[] = [];\n\tconst seen = new Set<string>();\n\t(raw || []).forEach((entry) => {\n\t\tconst normalized = normalizeOptionalString((entry as any)?.collection || (entry as any)?.name || entry);\n\t\tif (!normalized) {\n\t\t\treturn;\n\t\t}\n\t\tconst key = normalized.toLowerCase();\n\t\tif (seen.has(key)) {\n\t\t\treturn;\n\t\t}\n\t\tseen.add(key);\n\t\tvalues.push(normalized);\n\t});\n\treturn values.slice(0, MAX_AI_SUGGEST_COLLECTIONS);\n}\n\nfunction sanitizeAiFields(raw: any[], fallbackCollection: string): MongoExplorerAiField[] {\n\tconst fields: MongoExplorerAiField[] = [];\n\tconst seen = new Set<string>();\n\t(raw || []).forEach((entry) => {\n\t\tconst path = normalizeOptionalString(entry?.path || entry?.field_path || entry?.fieldPath);\n\t\tif (!path) {\n\t\t\treturn;\n\t\t}\n\t\tconst collection = normalizeOptionalString(\n\t\t\tentry?.collection || entry?.collection_name || entry?.collectionName\n\t\t) || fallbackCollection || '';\n\t\tconst key = `${collection.toLowerCase()}::${path.toLowerCase()}`;\n\t\tif (seen.has(key)) {\n\t\t\treturn;\n\t\t}\n\t\tseen.add(key);\n\t\tfields.push({\n\t\t\tpath,\n\t\t\tlabel: normalizeOptionalString(entry?.label || entry?.field_path_name || entry?.fieldPathName) || path,\n\t\t\ttype: normalizeOptionalString(entry?.type || entry?.field_type || entry?.fieldType) || 'Any',\n\t\t\tcollection\n\t\t});\n\t});\n\treturn fields.slice(0, MAX_AI_SUGGEST_FIELDS);\n}\n\nfunction deriveAiFieldsFromCollection(database: string, collection: string): MongoExplorerAiField[] {\n\tif (!collection) {\n\t\treturn [];\n\t}\n\tconst { managerCollection } = resolveCollectionHandle(database, collection);\n\tif (!managerCollection) {\n\t\treturn [];\n\t}\n\tconst schema = getSchemaDefinition(managerCollection);\n\treturn Object.keys(schema)\n\t\t.sort((a, b) => a.localeCompare(b))\n\t\t.slice(0, MAX_AI_SUGGEST_FIELDS)\n\t\t.map((path) => {\n\t\t\tconst definition = schema[path];\n\t\t\treturn {\n\t\t\t\tpath,\n\t\t\t\tlabel: toLabel(path),\n\t\t\t\ttype: getSchemaTypeName(definition),\n\t\t\t\tcollection\n\t\t\t};\n\t\t});\n}\n\nfunction resolveCollectionFromList(value: any, collections: string[], fallback = ''): string {\n\tconst normalized = normalizeOptionalString(value);\n\tif (normalized) {\n\t\tconst matched = (collections || []).find(entry => entry.toLowerCase() === normalized.toLowerCase());\n\t\tif (matched) {\n\t\t\treturn matched;\n\t\t}\n\t}\n\tif (fallback) {\n\t\treturn fallback;\n\t}\n\treturn collections?.[0] || '';\n}\n\nfunction normalizeAiResultLimit(value: any, fallback = 100): number {\n\tconst fallbackValue = Math.min(Math.max(fallback, 1), MAX_AI_SUGGEST_RESULTS);\n\tconst parsed = Number(value);\n\tif (!Number.isFinite(parsed) || parsed <= 0) {\n\t\treturn fallbackValue;\n\t}\n\treturn Math.min(Math.max(round(parsed), 1), MAX_AI_SUGGEST_RESULTS);\n}\n\nfunction normalizeAiSkip(value: any): number {\n\tconst parsed = Number(value);\n\tif (!Number.isFinite(parsed) || parsed < 0) {\n\t\treturn 0;\n\t}\n\treturn Math.max(0, round(parsed));\n}\n\nfunction normalizeAiObject(value: any): Record<string, any> {\n\tif (!value || typeof value !== 'object' || Array.isArray(value)) {\n\t\treturn {};\n\t}\n\treturn value;\n}\n\nfunction hasObjectKeys(value: any): boolean {\n\treturn !!value && typeof value === 'object' && !Array.isArray(value) && Object.keys(value).length > 0;\n}\n\nfunction parseAiPlanPayload(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 parse embedded JSON object.\n\t}\n\n\tconst start = normalized.indexOf('{');\n\tconst end = normalized.lastIndexOf('}');\n\tif (start !== -1 && end > start) {\n\t\ttry {\n\t\t\treturn JSON.parse(normalized.slice(start, end + 1));\n\t\t}\n\t\tcatch {\n\t\t\treturn {};\n\t\t}\n\t}\n\n\treturn {};\n}\n\nfunction resolveMongoExplorerAiSettings() {\n\tconst serverConfig = ResolveIOServer.getServerConfig() || {};\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\tconst model = normalizeOptionalString(\n\t\tserverConfig['MONGO_EXPLORER_AI_MODEL']\n\t\t|| process.env.MONGO_EXPLORER_AI_MODEL\n\t\t|| serverConfig['AI_ASSISTANT_CODEX_MODEL']\n\t\t|| process.env.AI_ASSISTANT_CODEX_MODEL\n\t);\n\n\tconst fallbackModel = normalizeOptionalString(\n\t\tserverConfig['MONGO_EXPLORER_AI_FALLBACK_MODEL']\n\t\t|| process.env.MONGO_EXPLORER_AI_FALLBACK_MODEL\n\t\t|| serverConfig['AI_ASSISTANT_CODEX_FALLBACK_MODEL']\n\t\t|| process.env.AI_ASSISTANT_CODEX_FALLBACK_MODEL\n\t);\n\n\tconst timeoutMs = normalizePositiveNumber(\n\t\tserverConfig['MONGO_EXPLORER_AI_TIMEOUT_MS'] ?? process.env.MONGO_EXPLORER_AI_TIMEOUT_MS,\n\t\tDEFAULT_AI_SUGGEST_TIMEOUT_MS\n\t);\n\n\tconst maxTokens = normalizePositiveNumber(\n\t\tserverConfig['MONGO_EXPLORER_AI_MAX_TOKENS'] ?? process.env.MONGO_EXPLORER_AI_MAX_TOKENS,\n\t\tDEFAULT_AI_SUGGEST_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\treturn {\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 buildMongoExplorerAiSystemPrompt(): string {\n\treturn [\n\t\t'You are a MongoDB query planner for a read-only Mongo Explorer UI.',\n\t\t'Return a single JSON object and nothing else.',\n\t\t'Supported schema:',\n\t\t'{',\n\t\t' \"action\": \"find|aggregate\",',\n\t\t' \"collection\": \"string\",',\n\t\t' \"query\": { ... },',\n\t\t' \"pipeline\": [{ ... }],',\n\t\t' \"options\": {',\n\t\t' \"projection\": { \"field\": 1 },',\n\t\t' \"sort\": { \"field\": -1 },',\n\t\t' \"limit\": 100,',\n\t\t' \"skip\": 0,',\n\t\t' \"includeTotal\": true,',\n\t\t' \"allowDiskUse\": true',\n\t\t' },',\n\t\t' \"notes\": \"short summary\"',\n\t\t'}',\n\t\t'Rules:',\n\t\t'- Use only provided collection names and field paths.',\n\t\t'- Read-only only. Never output write operations, update/delete commands, or aggregation stages $out/$merge.',\n\t\t'- Prefer action=find for direct lookups and simple filters.',\n\t\t'- Use action=aggregate for grouped totals, rankings, or trend buckets.',\n\t\t'- Keep options.limit between 1 and 500.',\n\t\t'- If request is ambiguous, use selected_collection and a conservative limit.'\n\t].join('\\n');\n}\n\nfunction buildMongoExplorerAiUserPrompt(input: {\n\tprompt: string;\n\tselectedCollection: string;\n\tavailableCollections: string[];\n\tavailableFields: MongoExplorerAiField[];\n\tmaxResults: number;\n}): string {\n\tconst payload = {\n\t\trequest: input.prompt,\n\t\tselected_collection: input.selectedCollection || '',\n\t\tmax_results: input.maxResults,\n\t\tavailable_collections: input.availableCollections || [],\n\t\tavailable_fields: input.availableFields || []\n\t};\n\treturn JSON.stringify(payload);\n}\n\nfunction sanitizeAggregatePipeline(rawPipeline: any, limit: number): { pipeline: any[]; removedRestricted: boolean } {\n\tconst source = Array.isArray(rawPipeline) ? rawPipeline : [];\n\tconst sanitized: any[] = [];\n\tlet removedRestricted = false;\n\n\tsource.forEach((stage) => {\n\t\tif (!stage || typeof stage !== 'object' || Array.isArray(stage)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst keys = Object.keys(stage);\n\t\tif (!keys.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst stageName = keys[0];\n\t\tif (RESTRICTED_AGGREGATE_STAGES.has(String(stageName).toLowerCase())) {\n\t\t\tremovedRestricted = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (stageName === '$limit') {\n\t\t\tsanitized.push({ $limit: normalizeAiResultLimit((stage as any).$limit, limit) });\n\t\t\treturn;\n\t\t}\n\n\t\tsanitized.push(stage);\n\t});\n\n\tif (!sanitized.some(stage => Object.keys(stage || {})[0] === '$limit')) {\n\t\tsanitized.push({ $limit: limit });\n\t}\n\n\treturn {\n\t\tpipeline: sanitized,\n\t\tremovedRestricted\n\t};\n}\n\nfunction sanitizeFindOptions(raw: any, fallbackLimit: number): {\n\tprojection?: Record<string, any>;\n\tsort?: Record<string, any>;\n\tlimit: number;\n\tskip: number;\n\tincludeTotal: boolean;\n} {\n\tconst options = normalizeAiObject(raw);\n\treturn {\n\t\tprojection: hasObjectKeys(options.projection) ? options.projection : undefined,\n\t\tsort: hasObjectKeys(options.sort) ? options.sort : undefined,\n\t\tlimit: normalizeAiResultLimit(options.limit, fallbackLimit),\n\t\tskip: normalizeAiSkip(options.skip),\n\t\tincludeTotal: options.includeTotal === true\n\t};\n}\n\nfunction buildMongoExplorerAiNotes(\n\trawNotes: any,\n\taction: MongoExplorerAiAction,\n\tcollection: string,\n\trowCount: number,\n\ttotal: number | null,\n\tremovedRestricted: boolean\n): string {\n\tconst notes: string[] = [];\n\tconst base = normalizeOptionalString(rawNotes);\n\tif (base) {\n\t\tnotes.push(base);\n\t}\n\n\tconst actionLabel = action === 'aggregate' ? 'aggregate pipeline' : 'query';\n\tif (typeof total === 'number' && total >= 0) {\n\t\tnotes.push(`Applied ${actionLabel} on ${collection}. Loaded ${rowCount} of ${total} rows.`);\n\t}\n\telse {\n\t\tnotes.push(`Applied ${actionLabel} on ${collection}. Loaded ${rowCount} rows.`);\n\t}\n\n\tif (removedRestricted) {\n\t\tnotes.push('Removed restricted write stages from the generated pipeline.');\n\t}\n\n\treturn notes.join(' ').trim();\n}\n\nasync function resolveUsageClientId(idClientInput?: string, idUser?: string): Promise<string> {\n\tconst normalized = normalizeOptionalString(idClientInput);\n\tif (normalized) {\n\t\treturn normalized;\n\t}\n\tif (!idUser) {\n\t\treturn '';\n\t}\n\ttry {\n\t\tconst user = await Users.findById(idUser);\n\t\treturn normalizeOptionalString(user?.other?.id_client || user?.other?.idClient) || '';\n\t}\n\tcatch {\n\t\treturn '';\n\t}\n}\n\nasync function executeMongoExplorerAi(payload: MongoExplorerAiPayload, context: any) {\n\tconst input = payload || {};\n\tconst prompt = normalizeOptionalString(input.prompt);\n\tif (!prompt) {\n\t\tthrow new Error('Prompt is required.');\n\t}\n\n\tconst database = resolveDatabaseName(input.database);\n\tconst db = resolveDatabase(database);\n\n\tlet availableCollections = sanitizeAiCollections(input.available_collections || []);\n\tif (!availableCollections.length) {\n\t\tconst listed = await db.listCollections().toArray();\n\t\tavailableCollections = listed\n\t\t\t.map(collection => normalizeOptionalString(collection?.name))\n\t\t\t.filter((collection): collection is string => !!collection)\n\t\t\t.slice(0, MAX_AI_SUGGEST_COLLECTIONS);\n\t}\n\n\tif (!availableCollections.length) {\n\t\tthrow new Error('Mongo Explorer AI assistant: no collections available.');\n\t}\n\n\tconst selectedCollection = resolveCollectionFromList(\n\t\tinput.selected_collection,\n\t\tavailableCollections,\n\t\tavailableCollections[0]\n\t);\n\n\tlet availableFields = sanitizeAiFields(input.available_fields || [], selectedCollection);\n\tif (!availableFields.length && selectedCollection) {\n\t\tavailableFields = deriveAiFieldsFromCollection(database, selectedCollection);\n\t}\n\n\tconst settings = resolveMongoExplorerAiSettings();\n\tif (!settings.apiKey) {\n\t\tthrow new Error('AI API key missing. Add an AI API key to server config.');\n\t}\n\n\tconst maxResults = normalizeAiResultLimit(input.max_results, 100);\n\tconst client = buildCodexClient(settings);\n\tconst messages: Array<{ role: 'system' | 'user'; content: string }> = [\n\t\t{ role: 'system', content: buildMongoExplorerAiSystemPrompt() },\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: buildMongoExplorerAiUserPrompt({\n\t\t\t\tprompt,\n\t\t\t\tselectedCollection,\n\t\t\t\tavailableCollections,\n\t\t\t\tavailableFields,\n\t\t\t\tmaxResults\n\t\t\t})\n\t\t}\n\t];\n\tconst responseText = await client.run(\n\t\tbuildCodexPrompt(messages[0].content, messages[1].content),\n\t\t{\n\t\t\ttimeoutMs: round(settings.timeoutMs),\n\t\t\tthreadOptions: {\n\t\t\t\tmodel: settings.model,\n\t\t\t\tsandboxMode: 'read-only',\n\t\t\t\tskipGitRepoCheck: true,\n\t\t\t\tnetworkAccessEnabled: false,\n\t\t\t\twebSearchMode: 'disabled',\n\t\t\t\twebSearchEnabled: false,\n\t\t\t\tapprovalPolicy: 'never'\n\t\t\t}\n\t\t}\n\t);\n\n\tconst parsed = parseAiPlanPayload(responseText);\n\tconst action = normalizeAiAction(parsed?.action || (Array.isArray(parsed?.pipeline) ? 'aggregate' : 'find'));\n\tconst collection = resolveCollectionFromList(\n\t\tparsed?.collection || parsed?.collection_name,\n\t\tavailableCollections,\n\t\tselectedCollection || availableCollections[0]\n\t);\n\n\tif (!collection) {\n\t\tthrow new Error('Mongo Explorer AI assistant could not resolve a collection.');\n\t}\n\n\tlet plan: MongoExplorerAiPlan = {\n\t\taction,\n\t\tcollection,\n\t\toptions: {}\n\t};\n\tlet removedRestrictedStages = false;\n\n\tif (action === 'aggregate') {\n\t\tconst optionsRaw = normalizeAiObject(parsed?.options);\n\t\tconst aggregateLimit = normalizeAiResultLimit(optionsRaw.limit ?? parsed?.limit, maxResults);\n\t\tconst pipelineResult = sanitizeAggregatePipeline(parsed?.pipeline, aggregateLimit);\n\t\tremovedRestrictedStages = pipelineResult.removedRestricted;\n\n\t\tconst aggregateOptions = {\n\t\t\tallowDiskUse: optionsRaw.allowDiskUse === true\n\t\t};\n\n\t\tconst aggregateRows = await db.collection(collection).aggregate(pipelineResult.pipeline, aggregateOptions).toArray();\n\t\tconst rows = (aggregateRows || []).slice(0, aggregateLimit);\n\n\t\tplan = {\n\t\t\taction,\n\t\t\tcollection,\n\t\t\tpipeline: pipelineResult.pipeline,\n\t\t\toptions: {\n\t\t\t\tallowDiskUse: aggregateOptions.allowDiskUse,\n\t\t\t\tlimit: aggregateLimit\n\t\t\t},\n\t\t\tdocuments: rows,\n\t\t\ttotal: null\n\t\t};\n\t}\n\telse {\n\t\tconst query = normalizeAiObject(parsed?.query);\n\t\tconst options = sanitizeFindOptions(parsed?.options, maxResults);\n\t\tconst findOptions: any = {\n\t\t\tlimit: options.limit,\n\t\t\tskip: options.skip\n\t\t};\n\t\tif (options.projection) {\n\t\t\tfindOptions.projection = options.projection;\n\t\t}\n\t\tif (options.sort) {\n\t\t\tfindOptions.sort = options.sort;\n\t\t}\n\n\t\tconst rows = await db.collection(collection).find(query, findOptions).toArray();\n\t\tconst total = options.includeTotal ? await db.collection(collection).countDocuments(query) : null;\n\n\t\tplan = {\n\t\t\taction,\n\t\t\tcollection,\n\t\t\tquery,\n\t\t\toptions: {\n\t\t\t\t...(options.projection ? { projection: options.projection } : {}),\n\t\t\t\t...(options.sort ? { sort: options.sort } : {}),\n\t\t\t\tlimit: options.limit,\n\t\t\t\tskip: options.skip,\n\t\t\t\tincludeTotal: options.includeTotal\n\t\t\t},\n\t\t\tdocuments: rows,\n\t\t\ttotal\n\t\t};\n\t}\n\n\tplan.notes = buildMongoExplorerAiNotes(\n\t\tparsed?.notes,\n\t\tplan.action,\n\t\tplan.collection,\n\t\tArray.isArray(plan.documents) ? plan.documents.length : 0,\n\t\ttypeof plan.total === 'number' ? plan.total : null,\n\t\tremovedRestrictedStages\n\t);\n\n\tconst usage = estimateCodexUsage(messages, responseText, settings.model);\n\tconst idClient = await resolveUsageClientId(input.id_client, context?.id_user);\n\tif (usage.totalTokens) {\n\t\tawait recordOpenAIUsage({\n\t\t\tid_client: idClient || '',\n\t\t\tmodel: settings.model || 'unknown',\n\t\t\tinput_tokens: usage.inputTokens || 0,\n\t\t\toutput_tokens: usage.outputTokens || 0,\n\t\t\ttotal_tokens: usage.totalTokens || 0,\n\t\t\tcategory: 'mongo-explorer-ai',\n\t\t\tid_request: ''\n\t\t});\n\t}\n\n\treturn {\n\t\tnotes: plan.notes,\n\t\tplan,\n\t\tmodel: settings.model,\n\t\tusage: {\n\t\t\tinput_tokens: usage.inputTokens || 0,\n\t\t\toutput_tokens: usage.outputTokens || 0,\n\t\t\ttotal_tokens: usage.totalTokens || 0\n\t\t}\n\t};\n}\n\nexport function loadMongoExplorerMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tmongoExplorerAiSuggest: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(payload: any) {\n\t\t\t\treturn executeMongoExplorerAi(payload || {}, this);\n\t\t\t}\n\t\t},\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"]}
|