@resolveio/server-lib 20.14.7 → 20.14.8
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/methods/ai-terminal.js +1 -0
- package/methods/ai-terminal.js.map +1 -1
- package/models/method.model.d.ts +1 -0
- package/models/method.model.js.map +1 -1
- package/package.json +1 -1
- package/server-app.js +42 -28
- package/server-app.js.map +1 -1
package/methods/ai-terminal.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/methods/ai-terminal.ts"],"names":[],"mappings":"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","file":"ai-terminal.js","sourcesContent":["import { promises as fs } from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport SimpleSchema from 'simpl-schema';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { Users } from '../collections/user.collection';\nimport { AiTerminalConversations } from '../collections/ai-terminal-conversation.collection';\nimport { AiTerminalMessages } from '../collections/ai-terminal-message.collection';\nimport { AiTerminalConversationModel, AiTerminalConversationStatus, AiTerminalMode } from '../models/ai-terminal-conversation.model';\nimport { AiTerminalMessageModel } from '../models/ai-terminal-message.model';\nimport { deepCopy, objectIdHexString, round } from '../util/common';\nimport { countChatTokens, countTokens } from '../util/tokenizer';\nimport { OpenAIClient } from '../services/openai-client';\nimport { CodexClient, CodexConfig, CodexRunOptions } from '../services/codex-client';\nimport { recordOpenAIUsage } from '../managers/openai-usage-ledger.manager';\n\nconst DEFAULT_MAX_FILE_MB = 50;\nconst DEFAULT_MAX_TOTAL_MB = 100;\nconst DEFAULT_MAX_ATTACHMENT_CHARS = 12000;\nconst DEFAULT_MAX_TOTAL_ATTACHMENT_CHARS = 40000;\nconst DEFAULT_CODEX_MODEL = 'gpt-5.2-codex';\nconst DEFAULT_CODEX_TIMEOUT_MS = 180000;\nconst AI_ASSISTANT_MONGO_DEFAULT_LIMIT = 20;\nconst AI_ASSISTANT_MONGO_MAX_LIMIT = 200;\n\nconst AI_ASSISTANT_BLOCKED_COLLECTIONS = new Set([\n\t'user-groups',\n\t'logged-in-users',\n\t'ai-terminal-messages',\n\t'ai-terminal-conversations',\n\t'openai-usage-ledger',\n\t'logs',\n\t'notifications',\n\t'email-history'\n]);\n\nconst AI_ASSISTANT_SENSITIVE_FIELDS = [\n\t'password',\n\t'salt',\n\t'hash',\n\t'secret',\n\t'token',\n\t'api_key',\n\t'email',\n\t'phonenumber',\n\t'phone',\n\t'ssn',\n\t'address',\n\t'services',\n\t'roles'\n];\n\nconst AI_ASSISTANT_SYSTEM_PROMPT = [\n\t'You are the ResolveIO in-app AI assistant running with read-only access to the codebase.',\n\t'- Never share code or file contents. All code is proprietary.',\n\t'- Do not modify files, run destructive commands, or access databases directly.',\n\t'- Read-only Mongo access is allowed only via the MONGO_READ directive (see below).',\n\t'- Do not access secrets, credentials, or user data.',\n\t'- Do not assist with hacking, bypassing security, or abuse.',\n\t'- Prefer high-level explanations and point to routes instead of code. Only mention file paths if explicitly requested.',\n\t'- When asked where to do something, give the exact screen name and the in-app route as a standalone path starting with \"/\" so it can be clicked.',\n\t'- When asked \"why is this happening,\" respond with: cause, trigger, data source(s), and expected vs actual outcome.',\n\t'- For troubleshooting, ask 2-3 targeted questions first, then give a short decision tree (If X, do Y; If not, do Z).',\n\t'- Provide checklists for common tasks, highlighting required fields and common pitfalls.',\n\t'- If asked \"where is this set,\" give the screen/workflow name and navigation steps to reach it.',\n\t'- If asked \"what changed,\" summarize release notes if known; if not available, say so and suggest where to check or offer a support ticket.',\n\t'- Suggest 1-2 related screens or next steps when it helps.',\n\t'- If access is blocked, name the permission/role needed and how to request it.',\n\t'- Avoid vague labels like \"Operations app\"; use the specific screen/workflow name.',\n\t'- Do not mention other client projects or ask which client; stay within the current project context.',\n\t'- Respond with a single concise message. Do not add labels like \"Customer-facing summary\" or \"Work ticket summary\" and do not include estimated hours.',\n\t'- Use structured responses by default: short heading, then bullet points. For \"how do I\" questions, provide a step-by-step list (numbered) with explicit page/screen names and actions.',\n\t'- When giving steps, include navigation guidance like \"Go to <screen>\" and \"Click/Select/Enter <field>\" so the user can follow it exactly.',\n\t'- If context scope is provided (ex: current page), prioritize that screen in your answer.',\n\t'- If a request is out of scope, offer to create a support ticket with a short summary.',\n\t'- If the user explicitly asks to create/open/file a support ticket, end your response with a single line exactly in this format:',\n\t'- SUPPORT_TICKET_CREATE: <one-line summary>',\n\t'- Only include that line when the user clearly wants a ticket created. Do not claim a ticket is created unless you include that line.',\n\t'- If you need database data to answer, end your response with a single line exactly in this format:',\n\t'- MONGO_READ: {\"collection\":\"<name>\",\"query\":{...},\"options\":{\"projection\":{...},\"sort\":{...},\"limit\":20},\"permissionView\":\"</route>\"}',\n\t'- For invoice data, set permissionView to an invoice route (ex: /invoice/list or /report/invoice).',\n\t'- Keep queries minimal, read-only, and avoid user/credential data unless the user is a super admin.',\n\t'- Assume you are not a super admin unless explicitly told otherwise.',\n\t'- Only request data when the user has permission for that module; invoice data requires invoice view access.',\n\t'- If the user lacks permission, answer without data and explain how to view it in the app or request access.',\n\t'- Use MONGO_READ only to produce summaries/snapshots/health checks (not raw dumps) when permitted.',\n\t'- When referencing data, summarize it in bullets and avoid raw JSON or dumps.',\n\t'- Keep responses concise and use low reasoning effort.'\n].join('\\n');\n\nconst AI_FORM_PATCH_SYSTEM_PROMPT = [\n\t'You are the ResolveIO form patch assistant.',\n\t'- Your job is to map the user request to the provided form fields.',\n\t'- Only use the allowed fields and their types.',\n\t'- Return ONLY valid JSON and nothing else.',\n\t'- If you cannot map the request, return an empty patch with a short note.',\n\t'- Use ISO 8601 for dates and true/false for booleans.',\n\t'- Use medium reasoning effort.'\n].join('\\n');\n\nlet assistantCodexClient: CodexClient | null = null;\n\ntype GuardrailResult = { blocked: boolean; response: string; reason: string };\n\ntype AttachmentInput = {\n\tid?: string;\n\tname?: string;\n\ttype?: string;\n\tsize?: number;\n\tlocal_path?: string;\n};\n\ntype AiTerminalRunInput = {\n\tid_conversation?: string;\n\tid_client?: string;\n\tid_app?: string;\n\tmessage: string;\n\tprofile_id?: string;\n\tconfig?: {\n\t\tmode?: string;\n\t\tmodel?: string;\n\t\tsystem_prompt?: string;\n\t\tuser_prompt_template?: string;\n\t\tresponse_format?: string;\n\t\ttemperature?: number;\n\t\tmax_tokens?: number;\n\t};\n\tguardrails?: boolean;\n\tattachments?: AttachmentInput[];\n\tmax_history?: number;\n\tdelete_files_after_run?: boolean;\n};\n\ntype AiCodexRunInput = {\n\tid_conversation?: string;\n\tid_client?: string;\n\tid_app?: string;\n\tmessage: string;\n\tcontext?: {\n\t\tmode?: string;\n\t\troute?: string;\n\t};\n\tmongo?: {\n\t\tdatabase?: string;\n\t\tdatabases?: string[];\n\t\taccess?: string;\n\t\treadonly?: boolean;\n\t};\n\tattachments?: AttachmentInput[];\n\tdelete_files_after_run?: boolean;\n\tmax_history?: number;\n};\n\nexport type AiAssistantMongoReadInput = {\n\tdatabase?: string;\n\tcollection?: string;\n\tquery?: Record<string, any>;\n\toptions?: {\n\t\tprojection?: Record<string, number>;\n\t\tsort?: Record<string, any>;\n\t\tlimit?: number;\n\t\tskip?: number;\n\t\tincludeTotal?: boolean;\n\t};\n\tpermissionView?: string;\n\tid_client?: string;\n\tmongo?: {\n\t\tdatabase?: string;\n\t\tdatabases?: string[];\n\t\taccess?: string;\n\t\treadonly?: boolean;\n\t};\n};\n\ntype AiFormPatchInput = {\n\tmessage: string;\n\tallowed_fields?: Array<{ name?: string; path?: string; type?: string; label?: string; enums?: string[] }>;\n\tfields?: Array<{ name?: string; path?: string; type?: string; label?: string; enums?: string[] }>;\n\tpatch_format?: string;\n\troute?: string;\n\tid_client?: string;\n\tid_app?: string;\n\tconfig?: {\n\t\tmodel?: string;\n\t\ttemperature?: number;\n\t\tmax_tokens?: number;\n\t};\n};\n\ntype AiFormField = {\n\tname: string;\n\ttype?: string;\n\tlabel?: string;\n\tenums?: string[];\n};\n\nexport function loadAiTerminalMethods(methodManager) {\n\tmethodManager.methods({\n\t\taiTerminalConversationCreate: {\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) {\n\t\t\t\tconst now = new Date();\n\t\t\t\tconst doc: Partial<AiTerminalConversationModel> = {\n\t\t\t\t\tid_client: normalizeOptionalString(payload.id_client),\n\t\t\t\t\tid_app: normalizeOptionalString(payload.id_app),\n\t\t\t\t\ttitle: normalizeOptionalString(payload.title) || 'New Conversation',\n\t\t\t\t\tmode: normalizeConversationMode(payload.mode),\n\t\t\t\t\tbranch_enabled: payload.branch_enabled === true,\n\t\t\t\t\tbranch_name: normalizeOptionalString(payload.branch_name),\n\t\t\t\t\tstatus: normalizeConversationStatus(payload.status),\n\t\t\t\t\tprofile_id: normalizeOptionalString(payload.profile_id),\n\t\t\t\t\tmetadata: payload.metadata || {},\n\t\t\t\t\tlast_message_at: undefined,\n\t\t\t\t\tlast_message_id: undefined,\n\t\t\t\t\tcreatedAt: now,\n\t\t\t\t\tupdatedAt: now\n\t\t\t\t};\n\t\t\t\tconst result = await AiTerminalConversations.insertOne(doc as any);\n\t\t\t\treturn { id_conversation: result._id as string };\n\t\t\t}\n\t\t},\n\t\taiTerminalConversationUpdate: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpatch: {\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(id_conversation: string, patch) {\n\t\t\t\tconst update: Partial<AiTerminalConversationModel> & { updatedAt: Date } = {\n\t\t\t\t\tupdatedAt: new Date()\n\t\t\t\t};\n\t\t\t\tif (patch.title !== undefined) {\n\t\t\t\t\tupdate.title = normalizeOptionalString(patch.title);\n\t\t\t\t}\n\t\t\t\t\tif (patch.status !== undefined) {\n\t\t\t\t\t\tupdate.status = normalizeConversationStatus(patch.status);\n\t\t\t\t\t}\n\t\t\t\tif (patch.branch_enabled !== undefined) {\n\t\t\t\t\tupdate.branch_enabled = !!patch.branch_enabled;\n\t\t\t\t}\n\t\t\t\tif (patch.branch_name !== undefined) {\n\t\t\t\t\tupdate.branch_name = normalizeOptionalString(patch.branch_name);\n\t\t\t\t}\n\t\t\t\tif (patch.profile_id !== undefined) {\n\t\t\t\t\tupdate.profile_id = normalizeOptionalString(patch.profile_id);\n\t\t\t\t}\n\t\t\t\tif (patch.metadata !== undefined) {\n\t\t\t\t\tupdate.metadata = patch.metadata || {};\n\t\t\t\t}\n\n\t\t\t\tawait AiTerminalConversations.updateOne({ _id: id_conversation }, { $set: update });\n\t\t\t\treturn { id_conversation };\n\t\t\t}\n\t\t},\n\t\taiTerminalConversationDelete: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_conversation: string) {\n\t\t\t\tawait AiTerminalMessages.deleteMany({ id_conversation });\n\t\t\t\tawait AiTerminalConversations.deleteOne({ _id: id_conversation });\n\t\t\t\treturn { id_conversation };\n\t\t\t}\n\t\t},\n\t\taiTerminalUploadFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfile_name: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcontent_base64: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcontent_type: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tsize: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_conversation: string, file_name: string, content_base64: string, size: number, content_type?: string) {\n\t\t\t\tconst limits = resolveUploadLimits();\n\t\t\t\tif (size > limits.maxFileBytes) {\n\t\t\t\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t\t\t\t}\n\t\t\t\tconst safeName = sanitizeFilename(file_name);\n\t\t\t\tconst uploadRoot = resolveUploadRoot();\n\t\t\t\tconst targetDir = path.join(uploadRoot, id_conversation);\n\t\t\t\tawait fs.mkdir(targetDir, { recursive: true });\n\t\t\t\tconst targetPath = path.join(targetDir, safeName);\n\t\t\t\t\tconst dataBuffer = Buffer.from(content_base64, 'base64');\n\t\t\t\t\tconst data = new Uint8Array(dataBuffer);\n\t\t\t\t\tif (data.byteLength !== size) {\n\t\t\t\t\t\tif (data.byteLength > limits.maxFileBytes) {\n\t\t\t\t\t\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tawait fs.writeFile(targetPath, data);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid_file: objectIdHexString(),\n\t\t\t\t\t\tname: safeName,\n\t\t\t\t\tsize: data.byteLength,\n\t\t\t\t\ttype: normalizeOptionalString(content_type),\n\t\t\t\t\tlocal_path: targetPath\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\taiTerminalRun: {\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) {\n\t\t\t\treturn await executeAiTerminalRun(payload, this);\n\t\t\t}\n\t\t},\n\t\taiFormPatch: {\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) {\n\t\t\t\treturn await executeAiFormPatch(payload, this);\n\t\t\t}\n\t\t},\n\t\taiCoderTerminalUploadFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfile_name: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcontent_base64: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tsize: {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\tcontent_type: {\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(id_conversation: string, file_name: string, content_base64: string, size: number, content_type?: string) {\n\t\t\t\treturn await handleCodexUpload(id_conversation, file_name, content_base64, size, content_type);\n\t\t\t}\n\t\t},\n\t\taiCoderTerminalRunCodex: {\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) {\n\t\t\t\treturn await executeAiAssistantCodexRun(payload, this);\n\t\t\t}\n\t\t},\n\t\taiAssistantMongoRead: {\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) {\n\t\t\t\treturn await executeAiAssistantMongoRead(payload, this);\n\t\t\t}\n\t\t},\n\t\t\taiCoderTerminalDeployTest: {\n\t\t\t\tcheck: new SimpleSchema({\n\t\t\t\t\tid_conversation: {\n\t\t\t\t\t\ttype: String\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tfunction: function() {\n\t\t\t\t\tthrow new Error('Test deploys are not supported for AI assistant sessions.');\n\t\t\t\t}\n\t\t\t}\n\t});\n}\n\nasync function executeAiTerminalRun(payload: AiTerminalRunInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiTerminalRunInput);\n\tconst message = normalizeOptionalString(input.message);\n\tif (!message) {\n\t\tthrow new Error('Message is required.');\n\t}\n\n\tconst isSuperAdmin = await resolveIsSuperAdmin(context?.id_user);\n\tconst guardrailsEnabled = input.guardrails !== false && !isSuperAdmin;\n\tif (guardrailsEnabled) {\n\t\tconst guardrail = evaluateGuardrails(message);\n\t\tif (guardrail?.blocked) {\n\t\t\tconst conversation = await ensureConversation(input, 'openai');\n\t\t\tconst now = new Date();\n\t\t\tconst userMsg: Partial<AiTerminalMessageModel> = {\n\t\t\t\tid_conversation: conversation._id,\n\t\t\t\trole: 'user',\n\t\t\t\tcontent: message,\n\t\t\t\tcreatedAt: now,\n\t\t\t\tupdatedAt: now\n\t\t\t};\n\t\t\tconst assistantMsg: Partial<AiTerminalMessageModel> = {\n\t\t\t\tid_conversation: conversation._id,\n\t\t\t\trole: 'assistant',\n\t\t\t\tcontent: guardrail.response,\n\t\t\t\tmetadata: {\n\t\t\t\t\tblocked: true,\n\t\t\t\t\treason: guardrail.reason\n\t\t\t\t},\n\t\t\t\tcreatedAt: now,\n\t\t\t\tupdatedAt: now\n\t\t\t};\n\t\t\tawait AiTerminalMessages.insertOne(userMsg as any);\n\t\t\tawait AiTerminalMessages.insertOne(assistantMsg as any);\n\t\t\tawait touchConversation(conversation._id, now);\n\t\t\treturn {\n\t\t\t\tconversation,\n\t\t\t\tmessage: assistantMsg,\n\t\t\t\tguardrails: { blocked: true, reason: guardrail.reason }\n\t\t\t};\n\t\t}\n\t}\n\n\tconst conversation = await ensureConversation(input, 'openai');\n\tconst now = new Date();\n\tconst attachments = Array.isArray(input.attachments) ? input.attachments : [];\n\tconst attachmentData = await readAttachmentContents(attachments);\n\tconst config = sanitizeConfig(input.config || {});\n\tconst systemPrompt = normalizeOptionalString(config.system_prompt) || '';\n\tconst userPromptTemplate = normalizeOptionalString(config.user_prompt_template);\n\tconst userPrompt = buildUserPrompt(userPromptTemplate, message, attachmentData.promptText);\n\n\tconst historyLimit = normalizeHistoryLimit(input.max_history);\n\tconst history = historyLimit > 0\n\t\t? await AiTerminalMessages.find(\n\t\t\t{ id_conversation: conversation._id, role: { $in: ['user', 'assistant'] } },\n\t\t\t{ sort: { createdAt: 1 }, limit: historyLimit * 2 }\n\t\t)\n\t\t: [];\n\n\tconst messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [];\n\tif (systemPrompt) {\n\t\tmessages.push({ role: 'system', content: systemPrompt });\n\t}\n\n\thistory.forEach((entry: AiTerminalMessageModel) => {\n\t\tconst role = entry.role === 'assistant' ? 'assistant' : 'user';\n\t\tconst content = normalizeOptionalString(entry.content);\n\t\tif (content) {\n\t\t\tmessages.push({ role, content });\n\t\t}\n\t});\n\n\tif (userPrompt) {\n\t\tmessages.push({ role: 'user', content: userPrompt });\n\t}\n\n\tconst openaiSettings = resolveOpenAISettings(config);\n\tconst client = new OpenAIClient(openaiSettings);\n\tconst response = await client.chat(messages, { timeoutMs: 60000, responseFormat: config.response_format });\n\n\tconst usage = response.usage || estimateUsage(messages, response.content, openaiSettings.model);\n\tconst idClient = resolveClientId(conversation, input.id_client);\n\tif (idClient) {\n\t\tawait recordOpenAIUsage({\n\t\t\tid_client: idClient,\n\t\t\tmodel: response.model || openaiSettings.model || 'unknown',\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens,\n\t\t\tcategory: 'ai-terminal',\n\t\t\tid_conversation: conversation._id\n\t\t});\n\t}\n\n\tconst userDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'user',\n\t\tcontent: message,\n\t\tattachments: attachmentData.attachments,\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tconst assistantDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'assistant',\n\t\tcontent: response.content,\n\t\tusage: {\n\t\t\tmodel: response.model || openaiSettings.model,\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens\n\t\t},\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tawait AiTerminalMessages.insertOne(userDoc as any);\n\tconst insertResult = await AiTerminalMessages.insertOne(assistantDoc as any);\n\tawait touchConversation(conversation._id, now, insertResult._id as string);\n\n\tif (input.delete_files_after_run !== false) {\n\t\tawait cleanupAttachments(attachmentData.attachments);\n\t}\n\n\treturn {\n\t\tconversation,\n\t\tmessage: assistantDoc,\n\t\tusage: assistantDoc.usage\n\t};\n}\n\nasync function executeAiFormPatch(payload: AiFormPatchInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiFormPatchInput);\n\tconst message = normalizeOptionalString(input.message);\n\tif (!message) {\n\t\tthrow new Error('Message is required.');\n\t}\n\tif (!context?.id_user) {\n\t\tthrow new Error('Unauthorized.');\n\t}\n\n\tconst allowedFields = normalizeAiFormFields(input.allowed_fields || input.fields);\n\tif (!allowedFields.length) {\n\t\tthrow new Error('Allowed fields are required.');\n\t}\n\n\tconst guardrail = evaluateGuardrails(message);\n\tif (guardrail?.blocked) {\n\t\treturn { error: guardrail.response, blocked: true };\n\t}\n\n\tconst systemPrompt = buildAiFormSystemPrompt();\n\tconst userPrompt = buildAiFormUserPrompt(message, allowedFields, input.patch_format, input.route);\n\tconst messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [\n\t\t{ role: 'system', content: systemPrompt },\n\t\t{ role: 'user', content: userPrompt }\n\t];\n\n\tconst openaiSettings = resolveOpenAISettings(input.config || {});\n\tconst client = new OpenAIClient(openaiSettings);\n\tconst response = await client.chat(messages, { timeoutMs: 60000, responseFormat: 'json_object' });\n\n\tconst usage = response.usage || estimateUsage(messages, response.content, response.model || openaiSettings.model);\n\tconst idClient = normalizeOptionalString(input.id_client);\n\tif (idClient) {\n\t\tawait recordOpenAIUsage({\n\t\t\tid_client: idClient,\n\t\t\tmodel: response.model || openaiSettings.model || 'unknown',\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens,\n\t\t\tcategory: 'ai-form'\n\t\t});\n\t}\n\n\tconst parsed = parseJsonObject(response.content);\n\tif (!parsed || typeof parsed !== 'object') {\n\t\tthrow new Error('AI form patch response was not valid JSON.');\n\t}\n\n\treturn {\n\t\tpatch: parsed.patch ?? parsed,\n\t\tnotes: normalizeOptionalString(parsed.notes) || undefined,\n\t\tusage: {\n\t\t\tmodel: response.model || openaiSettings.model,\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens\n\t\t}\n\t};\n}\n\nasync function executeAiAssistantCodexRun(payload: AiCodexRunInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiCodexRunInput);\n\tconst message = normalizeOptionalString(input.message);\n\tif (!message) {\n\t\tthrow new Error('Message is required.');\n\t}\n\tif (!context?.id_user) {\n\t\tthrow new Error('Unauthorized.');\n\t}\n\n\tconst guardrail = evaluateAssistantGuardrails(message);\n\tif (guardrail?.blocked) {\n\t\tconst conversation = await ensureConversation(input as any, 'codex');\n\t\tconst now = new Date();\n\t\tconst userMsg: Partial<AiTerminalMessageModel> = {\n\t\t\tid_conversation: conversation._id,\n\t\t\trole: 'user',\n\t\t\tcontent: message,\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now\n\t\t};\n\t\tconst assistantMsg: Partial<AiTerminalMessageModel> = {\n\t\t\tid_conversation: conversation._id,\n\t\t\trole: 'assistant',\n\t\t\tcontent: guardrail.response,\n\t\t\tmetadata: {\n\t\t\t\tblocked: true,\n\t\t\t\treason: guardrail.reason\n\t\t\t},\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now\n\t\t};\n\t\tawait AiTerminalMessages.insertOne(userMsg as any);\n\t\tawait AiTerminalMessages.insertOne(assistantMsg as any);\n\t\tawait touchConversation(conversation._id, now);\n\t\treturn {\n\t\t\tconversation,\n\t\t\tmessage: assistantMsg,\n\t\t\tguardrails: { blocked: true, reason: guardrail.reason }\n\t\t};\n\t}\n\n\tconst user = await Users.findById(context?.id_user);\n\tconst isSuperAdmin = !!user?.roles?.super_admin;\n\tconst hasInvoiceAccess = userHasInvoiceAccess(user);\n\tconst conversation = await ensureConversation(input as any, 'codex');\n\tconst now = new Date();\n\tconst attachments = Array.isArray(input.attachments) ? input.attachments : [];\n\tconst attachmentData = await readAttachmentContents(attachments);\n\tconst historyLimit = normalizeHistoryLimit(input.max_history);\n\tconst history = historyLimit > 0\n\t\t? await AiTerminalMessages.find(\n\t\t\t{ id_conversation: conversation._id, role: { $in: ['user', 'assistant'] } },\n\t\t\t{ sort: { createdAt: 1 }, limit: historyLimit * 2 }\n\t\t)\n\t\t: [];\n\n\tconst historyLines: string[] = [];\n\thistory.forEach((entry: AiTerminalMessageModel) => {\n\t\tconst role = entry.role === 'assistant' ? 'Assistant' : 'User';\n\t\tconst content = normalizeOptionalString(entry.content);\n\t\tif (content) {\n\t\t\thistoryLines.push(`${role}: ${content}`);\n\t\t}\n\t});\n\n\tconst prompt = buildAssistantCodexPrompt(\n\t\tmessage,\n\t\tattachmentData.promptText,\n\t\thistoryLines.join('\\n'),\n\t\tbuildAssistantContext(input, { isSuperAdmin, hasInvoiceAccess })\n\t);\n\tconst workspaceRoot = await resolveAssistantWorkspaceRoot();\n\tconst codexClient = getAssistantCodexClient();\n\tconst runOptions: CodexRunOptions = {\n\t\ttimeoutMs: resolveCodexTimeoutMs(),\n\t\tthreadOptions: {\n\t\t\tworkingDirectory: workspaceRoot,\n\t\t\tsandboxMode: 'read-only',\n\t\t\tskipGitRepoCheck: true,\n\t\t\tmodelReasoningEffort: 'low',\n\t\t\tnetworkAccessEnabled: false,\n\t\t\twebSearchMode: 'disabled',\n\t\t\twebSearchEnabled: false,\n\t\t\tapprovalPolicy: 'never'\n\t\t}\n\t};\n\n\tconst responseText = await codexClient.run(prompt, runOptions);\n\tconst assistantContent = sanitizeAssistantResponse(responseText);\n\n\tconst userDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'user',\n\t\tcontent: message,\n\t\tattachments: attachmentData.attachments,\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tconst assistantDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'assistant',\n\t\tcontent: assistantContent,\n\t\tmetadata: {\n\t\t\tmodel: resolveCodexModel()\n\t\t},\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tawait AiTerminalMessages.insertOne(userDoc as any);\n\tconst insertResult = await AiTerminalMessages.insertOne(assistantDoc as any);\n\tawait touchConversation(conversation._id, now, insertResult._id as string);\n\n\tif (input.delete_files_after_run !== false) {\n\t\tawait cleanupAttachments(attachmentData.attachments);\n\t}\n\n\treturn {\n\t\tconversation,\n\t\tmessage: assistantDoc\n\t};\n}\n\nexport async function executeAiAssistantMongoRead(payload: AiAssistantMongoReadInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiAssistantMongoReadInput);\n\tconst collection = normalizeOptionalString(input.collection);\n\tif (!collection) {\n\t\tthrow new Error('AI assistant mongo read: Collection is required.');\n\t}\n\tconst { user, isSuperAdmin } = await ensureAssistantReadAccess(context, input.permissionView, collection);\n\tif (!isSuperAdmin && AI_ASSISTANT_BLOCKED_COLLECTIONS.has(collection)) {\n\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t}\n\n\tconst dbName = resolveAssistantDatabaseName(input.database, input.mongo);\n\tconst db = ResolveIOServer.getMongoConnection().db(dbName);\n\tlet baseQuery = normalizeMongoQuery(input.query);\n\tif (!isSuperAdmin && (collection === 'users' || collection === 'user-versions')) {\n\t\tconst userId = normalizeOptionalString(user?._id);\n\t\tif (!userId) {\n\t\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t\t}\n\t\tbaseQuery = {\n\t\t\t$and: [baseQuery, { _id: userId }]\n\t\t};\n\t}\n\tconst scopedQuery = applyClientScopeFilter(baseQuery, input.id_client, isSuperAdmin);\n\tconst normalized = normalizeAssistantFindOptions(input.options);\n\tconst documents = await db.collection(collection).find(scopedQuery, normalized.findOptions).toArray();\n\tlet total = null;\n\tif (normalized.includeTotal) {\n\t\ttotal = await db.collection(collection).countDocuments(scopedQuery);\n\t}\n\n\tconst sanitizedDocuments = isSuperAdmin\n\t\t? documents\n\t\t: documents.map(doc => redactSensitiveFields(deepCopy(doc)));\n\n\treturn {\n\t\tdocuments: sanitizedDocuments,\n\t\ttotal\n\t};\n}\n\nasync function ensureAssistantReadAccess(context: any, permissionView?: string, collection?: string): Promise<{ user: any; isSuperAdmin: boolean }> {\n\tconst idUser = context?.id_user;\n\tif (!idUser) {\n\t\tthrow new Error('AI assistant mongo read: Unauthorized.');\n\t}\n\tconst user = await Users.findById(idUser);\n\tif (!user) {\n\t\tthrow new Error('AI assistant mongo read: Unauthorized.');\n\t}\n\tconst isSuperAdmin = !!user?.roles?.super_admin;\n\tconst normalizedPermission = normalizeOptionalString(permissionView);\n\tif (!isSuperAdmin) {\n\t\tif (!normalizedPermission) {\n\t\t\tthrow new Error('AI assistant mongo read: Permission scope required.');\n\t\t}\n\t\tif (!userHasViewPermission(user, normalizedPermission)) {\n\t\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t\t}\n\t\tconst normalizedCollection = normalizeOptionalString(collection);\n\t\tif (normalizedCollection && requiresInvoicePermission(normalizedCollection) && !userHasInvoiceAccess(user)) {\n\t\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t\t}\n\t}\n\telse if (normalizedPermission && !userHasViewPermission(user, normalizedPermission)) {\n\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t}\n\treturn { user, isSuperAdmin };\n}\n\nfunction resolveAssistantDatabaseName(database?: string, mongoConfig?: AiAssistantMongoReadInput['mongo']): string {\n\tconst defaultDb = normalizeOptionalString(mongoConfig?.database) || ResolveIOServer.getServerConfig()?.DATABASE || '';\n\tconst dbName = normalizeOptionalString(database) || defaultDb;\n\tif (!dbName) {\n\t\tthrow new Error('AI assistant mongo read: Database is required.');\n\t}\n\tconst allowedFromConfig = Array.isArray(mongoConfig?.databases)\n\t\t? mongoConfig?.databases.map(value => normalizeOptionalString(value)).filter(Boolean)\n\t\t: [];\n\tif (allowedFromConfig.length && !allowedFromConfig.includes(dbName)) {\n\t\tthrow new Error('AI assistant mongo read: Database access denied.');\n\t}\n\tconst allowedDatabases = ResolveIOServer.getMongoManager()?.getWatchedDatabases() || [];\n\tif (allowedDatabases.length && !allowedDatabases.includes(dbName)) {\n\t\tthrow new Error('AI assistant mongo read: Database access denied.');\n\t}\n\treturn dbName;\n}\n\nfunction normalizeAssistantFindOptions(options?: AiAssistantMongoReadInput['options']) {\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'\n\t\t? Math.min(Math.max(normalized.limit, 0), AI_ASSISTANT_MONGO_MAX_LIMIT)\n\t\t: AI_ASSISTANT_MONGO_DEFAULT_LIMIT;\n\tconst skip = typeof normalized.skip === 'number' ? Math.max(normalized.skip, 0) : 0;\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 normalizeMongoQuery(query?: Record<string, any>) {\n\tconst normalized = query && typeof query === 'object' ? query : {};\n\tif (containsForbiddenMongoOperators(normalized)) {\n\t\tthrow new Error('AI assistant mongo read: Query contains restricted operators.');\n\t}\n\treturn normalized;\n}\n\nfunction containsForbiddenMongoOperators(value: any): boolean {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.some(entry => containsForbiddenMongoOperators(entry));\n\t}\n\tfor (const key of Object.keys(value)) {\n\t\tconst normalized = key.toLowerCase();\n\t\tif (normalized === '$where' || normalized === '$function' || normalized === '$accumulator') {\n\t\t\treturn true;\n\t\t}\n\t\tif (containsForbiddenMongoOperators(value[key])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction applyClientScopeFilter(query: Record<string, any>, idClient?: string, isSuperAdmin = false): Record<string, any> {\n\tif (isSuperAdmin) {\n\t\treturn query;\n\t}\n\tconst normalizedClient = normalizeOptionalString(idClient);\n\tif (!normalizedClient) {\n\t\treturn query;\n\t}\n\treturn {\n\t\t$and: [query, { id_client: normalizedClient }]\n\t};\n}\n\nfunction userHasViewPermission(user: any, view: string): boolean {\n\tif (!user || !view) {\n\t\treturn false;\n\t}\n\tif (user.roles?.super_admin) {\n\t\treturn true;\n\t}\n\tconst groups = Array.isArray(user.roles?.groups) ? user.roles.groups : [];\n\tconst miscs = Array.isArray(user.roles?.miscs) ? user.roles.miscs : [];\n\tif (groups.some(group => Array.isArray(group.views) && group.views.some(v => v.startsWith(view)))) {\n\t\treturn true;\n\t}\n\tif (miscs.some(v => v.startsWith(view))) {\n\t\treturn true;\n\t}\n\tif (groups.some(group => group.name === view)) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction userHasAnyViewPermission(user: any, views: string[]): boolean {\n\tif (!user || !Array.isArray(views)) {\n\t\treturn false;\n\t}\n\treturn views.some(view => view && userHasViewPermission(user, view));\n}\n\nfunction userHasInvoiceAccess(user: any): boolean {\n\treturn userHasAnyViewPermission(user, ['/invoice', '/report/invoice']);\n}\n\nfunction requiresInvoicePermission(collection: string): boolean {\n\tconst normalized = normalizeOptionalString(collection).toLowerCase();\n\tif (!normalized) {\n\t\treturn false;\n\t}\n\treturn normalized.includes('invoice');\n}\n\nfunction redactSensitiveFields(value: any): any {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(entry => redactSensitiveFields(entry));\n\t}\n\tif (!value || typeof value !== 'object') {\n\t\treturn value;\n\t}\n\tconst result: Record<string, any> = {};\n\tObject.keys(value).forEach((key) => {\n\t\tif (shouldRedactField(key)) {\n\t\t\treturn;\n\t\t}\n\t\tresult[key] = redactSensitiveFields(value[key]);\n\t});\n\treturn result;\n}\n\nfunction shouldRedactField(key: string): boolean {\n\tconst normalized = String(key || '').trim().toLowerCase();\n\tif (!normalized) {\n\t\treturn false;\n\t}\n\treturn AI_ASSISTANT_SENSITIVE_FIELDS.some((field) => normalized === field || normalized.includes(field));\n}\n\nfunction resolveCodexTimeoutMs(): number {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst raw = normalizeOptionalNumber(config['AI_ASSISTANT_CODEX_TIMEOUT_MS'] || process.env.AI_ASSISTANT_CODEX_TIMEOUT_MS);\n\tif (raw && raw > 0) {\n\t\treturn round(raw);\n\t}\n\treturn DEFAULT_CODEX_TIMEOUT_MS;\n}\n\nfunction resolveCodexModel(): string {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst raw = normalizeOptionalString(\n\t\tconfig['AI_ASSISTANT_CODEX_MODEL']\n\t\t|| process.env.AI_ASSISTANT_CODEX_MODEL\n\t\t|| config['AI_TERMINAL_CODEX_MODEL']\n\t\t|| process.env.AI_TERMINAL_CODEX_MODEL\n\t\t|| config['AI_DASHBOARD_CODEX_MODEL']\n\t\t|| process.env.AI_DASHBOARD_CODEX_MODEL\n\t);\n\treturn raw || DEFAULT_CODEX_MODEL;\n}\n\nfunction resolveCodexSettings(): CodexConfig {\n\tconst serverConfig = ResolveIOServer.getServerConfig() || {};\n\tconst apiKey = (serverConfig['OPENAI_API_KEY'] || process.env.OPENAI_API_KEY || '').trim();\n\tif (!apiKey) {\n\t\tthrow new Error('OpenAI API key missing. Add OPENAI_API_KEY to server config.');\n\t}\n\treturn {\n\t\tapiKey,\n\t\tbaseUrl: (serverConfig['OPENAI_BASE_URL'] || process.env.OPENAI_BASE_URL || '').trim() || undefined,\n\t\tmodel: resolveCodexModel(),\n\t\tmaxRetries: normalizeOptionalNumber(serverConfig['OPENAI_MAX_RETRIES'] || process.env.OPENAI_MAX_RETRIES),\n\t\tretryDelayMs: normalizeOptionalNumber(serverConfig['OPENAI_RETRY_DELAY_MS'] || process.env.OPENAI_RETRY_DELAY_MS)\n\t};\n}\n\nfunction getAssistantCodexClient(): CodexClient {\n\tif (!assistantCodexClient) {\n\t\tassistantCodexClient = new CodexClient(resolveCodexSettings());\n\t}\n\treturn assistantCodexClient;\n}\n\nasync function resolveAssistantWorkspaceRoot(): Promise<string> {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst configured = normalizeOptionalString(\n\t\tconfig['AI_ASSISTANT_WORKSPACE_ROOT']\n\t\t|| process.env.AI_ASSISTANT_WORKSPACE_ROOT\n\t\t|| config['CODEX_WORKSPACE_ROOT']\n\t\t|| process.env.CODEX_WORKSPACE_ROOT\n\t);\n\tconst candidate = configured || ResolveIOServer.getClientDir() || process.cwd();\n\tlet stat = null;\n\ttry {\n\t\tstat = await fs.stat(candidate);\n\t}\n\tcatch {\n\t\tstat = null;\n\t}\n\tif (!stat || !stat.isDirectory()) {\n\t\tthrow new Error('AI assistant workspace root not found.');\n\t}\n\treturn candidate;\n}\n\nfunction buildAssistantCodexPrompt(message: string, attachmentText: string, historyText: string, contextText?: string): string {\n\tconst trimmedContext = normalizeOptionalString(contextText);\n\tconst contextBlock = trimmedContext ? `\\n\\nContext:\\n${trimmedContext}` : '';\n\tconst trimmedHistory = normalizeOptionalString(historyText);\n\tconst historyBlock = trimmedHistory ? `\\n\\nConversation so far:\\n${trimmedHistory}` : '';\n\treturn `System:\\n${AI_ASSISTANT_SYSTEM_PROMPT}${contextBlock}${historyBlock}\\n\\nUser:\\n${message}${attachmentText || ''}`.trim();\n}\n\nfunction buildAssistantContext(input: AiCodexRunInput, userContext?: { isSuperAdmin?: boolean; hasInvoiceAccess?: boolean }): string {\n\tconst lines: string[] = [];\n\tconst idApp = normalizeOptionalString(input?.id_app);\n\tif (idApp) {\n\t\tlines.push(`Current app id: ${idApp}`);\n\t}\n\tif (typeof userContext?.isSuperAdmin === 'boolean') {\n\t\tlines.push(`User is super admin: ${userContext.isSuperAdmin ? 'yes' : 'no'}`);\n\t}\n\tif (typeof userContext?.hasInvoiceAccess === 'boolean') {\n\t\tlines.push(`User has invoice access: ${userContext.hasInvoiceAccess ? 'yes' : 'no'}`);\n\t}\n\tconst contextMode = normalizeOptionalString(input?.context?.mode);\n\tconst contextRoute = normalizeOptionalString(input?.context?.route);\n\tif (contextMode) {\n\t\tlines.push(`Context scope: ${contextMode === 'current' ? 'current page' : contextMode}`);\n\t}\n\tif (contextRoute) {\n\t\tlines.push(`Current page route: ${contextRoute}`);\n\t}\n\tconst mongoDb = normalizeOptionalString(input?.mongo?.database);\n\tconst mongoDbs = Array.isArray(input?.mongo?.databases)\n\t\t? input.mongo.databases.map(value => normalizeOptionalString(value)).filter(Boolean)\n\t\t: [];\n\tconst mongoAccess = normalizeOptionalString(input?.mongo?.access)\n\t\t|| (input?.mongo?.readonly === true ? 'read' : '');\n\tif (mongoDb) {\n\t\tlines.push(`Mongo database: ${mongoDb}`);\n\t}\n\tif (mongoDbs.length) {\n\t\tlines.push(`Mongo databases allowed: ${mongoDbs.join(', ')}`);\n\t}\n\tif (mongoAccess) {\n\t\tlines.push(`Mongo access: ${mongoAccess}`);\n\t}\n\treturn lines.join('\\n');\n}\n\ntype ClientRouteIndex = {\n\tset: Set<string>;\n\tmap: Map<string, string>;\n\tsize: number;\n};\n\nlet cachedClientRouteIndex: ClientRouteIndex | null = null;\n\nfunction normalizeRouteKey(value: string): string {\n\tconst trimmed = normalizeOptionalString(value);\n\tif (!trimmed) {\n\t\treturn '';\n\t}\n\tconst withSlash = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n\treturn withSlash.replace(/\\/+$/, '');\n}\n\nfunction normalizeRouteMatchKey(value: string): string {\n\treturn normalizeRouteKey(value).toLowerCase();\n}\n\nfunction buildClientRouteIndex(): ClientRouteIndex {\n\tconst routes = ResolveIOServer.getClientRoutes?.() || [];\n\tconst set = new Set<string>();\n\tconst map = new Map<string, string>();\n\tfor (const route of routes) {\n\t\tconst normalized = normalizeRouteKey(route);\n\t\tif (!normalized) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst matchKey = normalized.toLowerCase();\n\t\tset.add(matchKey);\n\t\tif (!map.has(matchKey)) {\n\t\t\tmap.set(matchKey, normalized);\n\t\t}\n\t}\n\treturn { set, map, size: routes.length };\n}\n\nfunction getClientRouteIndex(): ClientRouteIndex {\n\tconst routes = ResolveIOServer.getClientRoutes?.() || [];\n\tif (cachedClientRouteIndex && cachedClientRouteIndex.size === routes.length) {\n\t\treturn cachedClientRouteIndex;\n\t}\n\tcachedClientRouteIndex = buildClientRouteIndex();\n\treturn cachedClientRouteIndex;\n}\n\nfunction splitRouteSuffix(value: string): { base: string; suffix: string } {\n\tconst matchIndex = value.search(/[?#]/);\n\tif (matchIndex === -1) {\n\t\treturn { base: value, suffix: '' };\n\t}\n\treturn { base: value.slice(0, matchIndex), suffix: value.slice(matchIndex) };\n}\n\nfunction isClientRoute(value: string, index: ClientRouteIndex): boolean {\n\tconst normalized = normalizeRouteMatchKey(value);\n\tif (!normalized) {\n\t\treturn false;\n\t}\n\tif (index.set.has(normalized)) {\n\t\treturn true;\n\t}\n\tconst parts = normalized.split('/').filter(Boolean);\n\twhile (parts.length > 1) {\n\t\tparts.pop();\n\t\tconst prefix = `/${parts.join('/')}`;\n\t\tif (index.set.has(prefix)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction getCanonicalRoute(value: string, index: ClientRouteIndex): string | null {\n\tconst normalized = normalizeRouteMatchKey(value);\n\tif (!normalized) {\n\t\treturn null;\n\t}\n\treturn index.map.get(normalized) || null;\n}\n\nfunction swapTwoSegmentRoute(value: string): string | null {\n\tconst normalized = normalizeRouteKey(value);\n\tif (!normalized) {\n\t\treturn null;\n\t}\n\tconst parts = normalized.split('/').filter(Boolean);\n\tif (parts.length !== 2) {\n\t\treturn null;\n\t}\n\treturn `/${parts[1]}/${parts[0]}`;\n}\n\nfunction normalizeAssistantRoutes(value: string): string {\n\tconst index = getClientRouteIndex();\n\tif (!index.set.size) {\n\t\treturn value;\n\t}\n\tconst routePattern = /\\/[a-z0-9][a-z0-9/_-]*(?:\\?[a-z0-9=&%._-]+)?(?:#[a-z0-9._-]+)?/gi;\n\treturn value.replace(routePattern, (match) => {\n\t\tconst { base, suffix } = splitRouteSuffix(match);\n\t\tif (isClientRoute(base, index)) {\n\t\t\tconst canonical = getCanonicalRoute(base, index);\n\t\t\treturn canonical ? `${canonical}${suffix}` : match;\n\t\t}\n\t\tconst swapped = swapTwoSegmentRoute(base);\n\t\tif (!swapped || !isClientRoute(swapped, index)) {\n\t\t\treturn match;\n\t\t}\n\t\tconst canonical = getCanonicalRoute(swapped, index) || swapped;\n\t\treturn `${canonical}${suffix}`;\n\t});\n}\n\nfunction sanitizeAssistantResponse(value: string): string {\n\tconst raw = normalizeOptionalString(value);\n\tif (!raw) {\n\t\treturn 'I could not generate a response. Please try again.';\n\t}\n\tconst withoutBlocks = raw.replace(/```[\\\\s\\\\S]*?```/g, '').replace(/`([^`]+)`/g, '$1').trim();\n\tconst stripEstimated = (line: string) => line.replace(/\\bEstimated (human )?hours:\\s*.*$/i, '').trimEnd();\n\tconst cleanedLines: string[] = [];\n\twithoutBlocks.split('\\n').forEach((line) => {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) {\n\t\t\tcleanedLines.push(line);\n\t\t\treturn;\n\t\t}\n\t\tif (/^work ticket summary:/i.test(trimmed)) {\n\t\t\treturn;\n\t\t}\n\t\tif (/^estimated (human )?hours:/i.test(trimmed)) {\n\t\t\treturn;\n\t\t}\n\t\tif (/^customer-facing summary:/i.test(trimmed)) {\n\t\t\tconst stripped = line.replace(/^(\\s*)customer-facing summary:\\s*/i, '$1');\n\t\t\tconst cleaned = stripEstimated(stripped);\n\t\t\tif (cleaned.trim()) {\n\t\t\t\tcleanedLines.push(cleaned);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tcleanedLines.push(stripEstimated(line));\n\t});\n\tconst cleaned = cleanedLines.join('\\n').trim();\n\tif (!cleaned) {\n\t\treturn 'I can’t share code, but I can point you to files or explain behavior at a high level.';\n\t}\n\treturn normalizeAssistantRoutes(cleaned);\n}\n\nfunction evaluateAssistantGuardrails(message: string): GuardrailResult | null {\n\tconst normalized = String(message || '').toLowerCase();\n\tconst patterns: Array<{ pattern: RegExp; reason: string; response: string }> = [\n\t\t{\n\t\t\tpattern: /\\b(show|share|paste|provide|dump|output)\\b.*\\b(code|snippet|file|function|class|script|sql)\\b/i,\n\t\t\treason: 'Code sharing is restricted.',\n\t\t\tresponse: 'I can’t share code or file contents. All code is proprietary. I can explain behavior and point you to screens or routes.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(write|generate|create|implement|fix)\\b.*\\b(code|script|function|class|endpoint|sql)\\b/i,\n\t\t\treason: 'Code generation is restricted.',\n\t\t\tresponse: 'I can’t generate code. All code is proprietary. I can explain how the feature works and where to look in the product.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(credentials?|passwords?|secrets?|tokens?)\\b/i,\n\t\t\treason: 'Credentials and secrets are restricted.',\n\t\t\tresponse: 'I can’t help with credentials or secrets. If you need access, please contact support.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(delete|drop|truncate)\\s+(database|db|schema)\\b/i,\n\t\t\treason: 'Database operations are restricted.',\n\t\t\tresponse: 'I can’t help with database operations. I can explain system behavior or file locations.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(shell|terminal|ssh|sudo|rm\\\\s+-rf|chmod|chown)\\b/i,\n\t\t\treason: 'System operations are restricted.',\n\t\t\tresponse: 'I can’t help with system operations. I can explain workflows and where to find related code.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(exploit|bypass|malware|phishing|ransomware|ddos|hack)\\b/i,\n\t\t\treason: 'Security abuse is restricted.',\n\t\t\tresponse: 'I can’t assist with that request.'\n\t\t}\n\t];\n\tfor (const entry of patterns) {\n\t\tif (entry.pattern.test(normalized)) {\n\t\t\treturn {\n\t\t\t\tblocked: true,\n\t\t\t\treason: entry.reason,\n\t\t\t\tresponse: entry.response\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction resolveOpenAISettings(config: any) {\n\tconst serverConfig = ResolveIOServer.getServerConfig() || {};\n\tconst apiKey = (serverConfig['OPENAI_API_KEY'] || process.env.OPENAI_API_KEY || '').trim();\n\tif (!apiKey) {\n\t\tthrow new Error('OpenAI API key missing. Add OPENAI_API_KEY to server config.');\n\t}\n\treturn {\n\t\tapiKey,\n\t\tbaseUrl: (serverConfig['OPENAI_BASE_URL'] || process.env.OPENAI_BASE_URL || '').trim() || undefined,\n\t\tmodel: normalizeOptionalString(config?.model) || (serverConfig['OPENAI_MODEL'] || process.env.OPENAI_MODEL || 'gpt-5.1').trim(),\n\t\ttemperature: normalizeOptionalNumber(config?.temperature),\n\t\tmaxTokens: normalizeOptionalNumber(config?.max_tokens),\n\t\tmaxRetries: normalizeOptionalNumber(serverConfig['OPENAI_MAX_RETRIES'] || process.env.OPENAI_MAX_RETRIES),\n\t\tretryDelayMs: normalizeOptionalNumber(serverConfig['OPENAI_RETRY_DELAY_MS'] || process.env.OPENAI_RETRY_DELAY_MS)\n\t};\n}\n\nfunction buildAiFormSystemPrompt(): string {\n\treturn AI_FORM_PATCH_SYSTEM_PROMPT;\n}\n\nfunction buildAiFormUserPrompt(\n\tmessage: string,\n\tfields: Array<AiFormField>,\n\tpatchFormat?: string,\n\troute?: string\n): string {\n\tconst lines: string[] = [];\n\tlines.push(`User request: ${message}`);\n\tconst normalizedRoute = normalizeOptionalString(route);\n\tif (normalizedRoute) {\n\t\tlines.push(`Current route: ${normalizedRoute}`);\n\t}\n\tif (patchFormat) {\n\t\tlines.push('Patch format:');\n\t\tlines.push(patchFormat);\n\t}\n\tlines.push('Allowed fields:');\n\tfields.forEach((field) => {\n\t\tconst name = field.name || '';\n\t\tif (!name) {\n\t\t\treturn;\n\t\t}\n\t\tconst parts = [name];\n\t\tif (field.type) {\n\t\t\tparts.push(`type=${field.type}`);\n\t\t}\n\t\tif (field.label) {\n\t\t\tparts.push(`label=\"${field.label}\"`);\n\t\t}\n\t\tif (Array.isArray(field.enums) && field.enums.length) {\n\t\t\tparts.push(`enums=${field.enums.join('|')}`);\n\t\t}\n\t\tlines.push(`- ${parts.join(' ')}`);\n\t});\n\tlines.push('Return JSON only.');\n\treturn lines.join('\\n');\n}\n\nfunction normalizeAiFormFields(fields: any): Array<AiFormField> {\n\tif (!Array.isArray(fields)) {\n\t\treturn [];\n\t}\n\treturn fields\n\t\t.map((field) => {\n\t\t\tif (!field || typeof field !== 'object') {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst name = normalizeOptionalString(field.name) || normalizeOptionalString(field.path);\n\t\t\tif (!name) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst type = normalizeOptionalString(field.type);\n\t\t\tconst label = normalizeOptionalString(field.label);\n\t\t\tconst enums = Array.isArray(field.enums)\n\t\t\t\t? field.enums.map((value: any) => normalizeOptionalString(value)).filter(Boolean)\n\t\t\t\t: undefined;\n\t\t\tconst normalizedField: AiFormField = { name };\n\t\t\tif (type) {\n\t\t\t\tnormalizedField.type = type;\n\t\t\t}\n\t\t\tif (label) {\n\t\t\t\tnormalizedField.label = label;\n\t\t\t}\n\t\t\tif (enums && enums.length) {\n\t\t\t\tnormalizedField.enums = enums;\n\t\t\t}\n\t\t\treturn normalizedField;\n\t\t})\n\t\t.filter((field): field is AiFormField => !!field);\n}\n\nfunction parseJsonObject(content: string): any | null {\n\tif (!content || typeof content !== 'string') {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn JSON.parse(content);\n\t}\n\tcatch {\n\t\tconst match = content.match(/\\{[\\s\\S]*\\}/);\n\t\tif (!match) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\treturn JSON.parse(match[0]);\n\t\t}\n\t\tcatch {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\nfunction resolveUploadLimits(): { maxFileBytes: number; maxFileMb: number; maxTotalBytes: number; maxTotalMb: number } {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst maxFileMb = normalizeOptionalNumber(config['AI_TERMINAL_MAX_FILE_MB'] || process.env.AI_TERMINAL_MAX_FILE_MB) || DEFAULT_MAX_FILE_MB;\n\tconst maxTotalMb = normalizeOptionalNumber(config['AI_TERMINAL_MAX_TOTAL_MB'] || process.env.AI_TERMINAL_MAX_TOTAL_MB) || DEFAULT_MAX_TOTAL_MB;\n\treturn {\n\t\tmaxFileBytes: round(maxFileMb * 1024 * 1024),\n\t\tmaxFileMb,\n\t\tmaxTotalBytes: round(maxTotalMb * 1024 * 1024),\n\t\tmaxTotalMb\n\t};\n}\n\nfunction resolveUploadRoot(): string {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst configured = normalizeOptionalString(config['AI_TERMINAL_UPLOAD_ROOT'] || process.env.AI_TERMINAL_UPLOAD_ROOT);\n\tif (configured) {\n\t\treturn configured;\n\t}\n\treturn path.join(os.tmpdir(), 'resolveio-ai-terminal-uploads');\n}\n\nasync function handleCodexUpload(id_conversation: string, file_name: string, content_base64: string, size: number, content_type?: string) {\n\tconst limits = resolveUploadLimits();\n\tif (size > limits.maxFileBytes) {\n\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t}\n\tconst safeName = sanitizeFilename(file_name);\n\tconst uploadRoot = resolveUploadRoot();\n\tconst targetDir = path.join(uploadRoot, id_conversation);\n\tawait fs.mkdir(targetDir, { recursive: true });\n\tconst targetPath = path.join(targetDir, safeName);\n\tconst dataBuffer = Buffer.from(content_base64, 'base64');\n\tconst data = new Uint8Array(dataBuffer);\n\tif (data.byteLength > limits.maxFileBytes) {\n\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t}\n\tawait fs.writeFile(targetPath, data);\n\treturn {\n\t\tid_file: objectIdHexString(),\n\t\tname: safeName,\n\t\tsize: data.byteLength,\n\t\ttype: normalizeOptionalString(content_type),\n\t\tlocal_path: targetPath\n\t};\n}\n\nasync function readAttachmentContents(attachments: AttachmentInput[]): Promise<{ promptText: string; attachments: AttachmentInput[] }> {\n\tif (!attachments || !attachments.length) {\n\t\treturn { promptText: '', attachments: [] };\n\t}\n\tconst limits = resolveAttachmentLimits();\n\tlet totalBytes = 0;\n\tlet totalChars = 0;\n\tconst chunks: string[] = [];\n\tconst cleaned: AttachmentInput[] = [];\n\n\tfor (const attachment of attachments) {\n\t\tconst localPath = normalizeOptionalString(attachment.local_path);\n\t\tif (!localPath) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst safe = ensurePathUnderRoot(localPath, resolveUploadRoot());\n\t\tif (!safe) {\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tconst stat = await fs.stat(localPath);\n\t\t\tif (!stat.isFile()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttotalBytes += stat.size;\n\t\t\tif (totalBytes > limits.maxTotalBytes) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst ext = path.extname(localPath).toLowerCase();\n\t\t\tconst name = normalizeOptionalString(attachment.name) || path.basename(localPath);\n\t\t\tconst type = normalizeOptionalString(attachment.type);\n\t\t\tconst readable = isReadableAttachment(type, ext);\n\t\t\tlet content = '';\n\t\t\tif (readable) {\n\t\t\t\tcontent = await fs.readFile(localPath, 'utf8');\n\t\t\t\tif (content.length > limits.maxAttachmentChars) {\n\t\t\t\t\tcontent = content.slice(0, limits.maxAttachmentChars) + '\\n[...truncated]';\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcontent = `[${name} attached; binary content omitted]`;\n\t\t\t}\n\t\t\ttotalChars += content.length;\n\t\t\tif (totalChars > limits.maxTotalAttachmentChars) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tchunks.push(`File: ${name}\\n${content}`);\n\t\t\tcleaned.push({\n\t\t\t\tid: attachment.id,\n\t\t\t\tname,\n\t\t\t\ttype,\n\t\t\t\tsize: stat.size,\n\t\t\t\tlocal_path: localPath\n\t\t\t});\n\t\t}\n\t\tcatch {}\n\t}\n\n\treturn {\n\t\tpromptText: chunks.length ? `\\n\\nAttachments:\\n${chunks.join('\\n\\n')}` : '',\n\t\tattachments: cleaned\n\t};\n}\n\nfunction resolveAttachmentLimits(): { maxAttachmentChars: number; maxTotalAttachmentChars: number; maxTotalBytes: number } {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst maxAttachmentChars = normalizeOptionalNumber(config['AI_TERMINAL_MAX_ATTACHMENT_CHARS'] || process.env.AI_TERMINAL_MAX_ATTACHMENT_CHARS)\n\t\t|| DEFAULT_MAX_ATTACHMENT_CHARS;\n\tconst maxTotalAttachmentChars = normalizeOptionalNumber(config['AI_TERMINAL_MAX_TOTAL_ATTACHMENT_CHARS'] || process.env.AI_TERMINAL_MAX_TOTAL_ATTACHMENT_CHARS)\n\t\t|| DEFAULT_MAX_TOTAL_ATTACHMENT_CHARS;\n\tconst limits = resolveUploadLimits();\n\treturn {\n\t\tmaxAttachmentChars,\n\t\tmaxTotalAttachmentChars,\n\t\tmaxTotalBytes: limits.maxTotalBytes\n\t};\n}\n\nfunction buildUserPrompt(template: string | undefined, inputText: string, attachmentText: string): string {\n\tconst data = {\n\t\tinput: inputText || '',\n\t\ttoday: new Date().toISOString().slice(0, 10)\n\t};\n\tif (template) {\n\t\treturn applyTemplate(template, data).trim() + attachmentText;\n\t}\n\treturn `${inputText || ''}${attachmentText}`.trim();\n}\n\nfunction applyTemplate(template: string, data: Record<string, string>): string {\n\tlet output = template;\n\tObject.keys(data).forEach(key => {\n\t\tconst value = data[key] || '';\n\t\tconst pattern = new RegExp(`{{\\\\s*${key}\\\\s*}}`, 'gi');\n\t\toutput = output.replace(pattern, value);\n\t});\n\treturn output;\n}\n\nfunction sanitizeConfig(source: any): any {\n\treturn {\n\t\tmode: normalizeOptionalString(source?.mode),\n\t\tmodel: normalizeOptionalString(source?.model),\n\t\tsystem_prompt: normalizeOptionalString(source?.system_prompt),\n\t\tuser_prompt_template: normalizeOptionalString(source?.user_prompt_template),\n\t\tresponse_format: normalizeOptionalString(source?.response_format),\n\t\ttemperature: normalizeOptionalNumber(source?.temperature),\n\t\tmax_tokens: normalizeOptionalNumber(source?.max_tokens)\n\t};\n}\n\nasync function ensureConversation(input: AiTerminalRunInput, mode: 'openai' | 'codex'): Promise<AiTerminalConversationModel> {\n\tconst idConversation = normalizeOptionalString(input.id_conversation);\n\tif (idConversation) {\n\t\tconst existing = await AiTerminalConversations.findById(idConversation);\n\t\tif (existing) {\n\t\t\treturn existing as AiTerminalConversationModel;\n\t\t}\n\t}\n\tconst now = new Date();\n\tconst doc: Partial<AiTerminalConversationModel> = {\n\t\tid_client: normalizeOptionalString(input.id_client),\n\t\tid_app: normalizeOptionalString(input.id_app),\n\t\ttitle: 'New Conversation',\n\t\tmode,\n\t\tbranch_enabled: mode === 'codex',\n\t\tstatus: normalizeConversationStatus('active'),\n\t\tprofile_id: normalizeOptionalString(input.profile_id),\n\t\tmetadata: {},\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\tconst result = await AiTerminalConversations.insertOne(doc as any);\n\treturn result as AiTerminalConversationModel;\n}\n\nasync function touchConversation(idConversation: string, timestamp: Date, lastMessageId?: string): Promise<void> {\n\tconst update: any = {\n\t\tupdatedAt: timestamp,\n\t\tlast_message_at: timestamp\n\t};\n\tif (lastMessageId) {\n\t\tupdate.last_message_id = lastMessageId;\n\t}\n\tawait AiTerminalConversations.updateOne({ _id: idConversation }, { $set: update });\n}\n\nfunction normalizeOptionalString(value: any): string {\n\tconst raw = typeof value === 'string' ? value.trim() : '';\n\treturn raw || '';\n}\n\nfunction normalizeConversationMode(value: any): AiTerminalMode {\n\tconst normalized = normalizeOptionalString(value).toLowerCase();\n\tif (normalized === 'codex') {\n\t\treturn 'codex';\n\t}\n\treturn 'openai';\n}\n\nfunction normalizeConversationStatus(value: any): AiTerminalConversationStatus {\n\tconst normalized = normalizeOptionalString(value).toLowerCase();\n\tif (normalized === 'archived') {\n\t\treturn 'archived';\n\t}\n\treturn 'active';\n}\n\nfunction normalizeOptionalNumber(value: any): number | undefined {\n\tconst parsed = Number(value);\n\treturn Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction normalizeHistoryLimit(value: any): number {\n\tconst parsed = Number(value);\n\tif (!Number.isFinite(parsed)) {\n\t\treturn 12;\n\t}\n\treturn Math.min(Math.max(round(parsed), 0), 30);\n}\n\nfunction resolveClientId(conversation: AiTerminalConversationModel, inputClientId?: string): string {\n\treturn normalizeOptionalString(inputClientId) || normalizeOptionalString(conversation?.id_client);\n}\n\nfunction estimateUsage(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 evaluateGuardrails(message: string): GuardrailResult | null {\n\tconst normalized = String(message || '').toLowerCase();\n\tconst patterns: Array<{ pattern: RegExp; reason: string }> = [\n\t\t{ pattern: /\\b(source\\s*code|full\\s*code|entire\\s*code|repo\\s*dump|repository|git\\s*clone)\\b/i, reason: 'Code access is restricted.' },\n\t\t{ pattern: /\\b(show|share|paste|provide|dump|output)\\b.*\\b(code|file|contents|snippet)\\b/i, reason: 'Code access is restricted.' },\n\t\t{ pattern: /\\b(credentials?|passwords?|secrets?|tokens?)\\b/i, reason: 'Credentials and secrets are restricted.' },\n\t\t{ pattern: /\\b(delete|drop)\\s+(database|db|schema)\\b/i, reason: 'Database operations are restricted.' },\n\t\t{ pattern: /\\b(shell|terminal|ssh|sudo|rm\\s+-rf|chmod|chown)\\b/i, reason: 'Server operations are restricted.' },\n\t\t{ pattern: /\\b(exploit|bypass|malware|phishing|ransomware|ddos)\\b/i, reason: 'Security abuse is restricted.' }\n\t];\n\tfor (const entry of patterns) {\n\t\tif (entry.pattern.test(normalized)) {\n\t\t\treturn {\n\t\t\t\tblocked: true,\n\t\t\t\treason: entry.reason,\n\t\t\t\tresponse: 'I can’t help with that request because it could expose proprietary code or protected information. If you need a change, describe the outcome and I can help within approved workflows.'\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n}\n\nasync function resolveIsSuperAdmin(id_user?: string): Promise<boolean> {\n\tif (!id_user) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst user = await Users.findById(id_user);\n\t\treturn !!user?.roles?.super_admin;\n\t}\n\tcatch {\n\t\treturn false;\n\t}\n}\n\nfunction sanitizeFilename(value: string): string {\n\tconst trimmed = (value || '').trim();\n\tconst base = path.basename(trimmed);\n\treturn base.replace(/[^\\w.\\-]/g, '_') || `upload_${Date.now()}`;\n}\n\nfunction isReadableAttachment(type: string, ext: string): boolean {\n\tconst normalizedType = (type || '').toLowerCase();\n\tif (normalizedType.startsWith('text/')) {\n\t\treturn true;\n\t}\n\tif (['application/json', 'application/xml', 'application/csv'].includes(normalizedType)) {\n\t\treturn true;\n\t}\n\treturn ['.txt', '.md', '.json', '.csv', '.xml', '.log', '.yml', '.yaml', '.ts', '.tsx', '.js', '.jsx', '.css', '.scss', '.html', '.htm', '.sql'].includes(ext);\n}\n\nfunction ensurePathUnderRoot(targetPath: string, root: string): boolean {\n\tconst resolvedRoot = path.resolve(root);\n\tconst resolvedTarget = path.resolve(targetPath);\n\treturn resolvedTarget.startsWith(resolvedRoot);\n}\n\nasync function cleanupAttachments(attachments: AttachmentInput[]): Promise<void> {\n\tif (!attachments || !attachments.length) {\n\t\treturn;\n\t}\n\tconst uploadRoot = resolveUploadRoot();\n\tconst removals = attachments.map(async (attachment) => {\n\t\tconst localPath = normalizeOptionalString(attachment.local_path);\n\t\tif (!localPath) {\n\t\t\treturn;\n\t\t}\n\t\tconst safe = ensurePathUnderRoot(localPath, uploadRoot);\n\t\tif (!safe) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait fs.rm(localPath, { force: true });\n\t\t}\n\t\tcatch {}\n\t});\n\tawait Promise.all(removals);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/methods/ai-terminal.ts"],"names":[],"mappings":"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","file":"ai-terminal.js","sourcesContent":["import { promises as fs } from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport SimpleSchema from 'simpl-schema';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { Users } from '../collections/user.collection';\nimport { AiTerminalConversations } from '../collections/ai-terminal-conversation.collection';\nimport { AiTerminalMessages } from '../collections/ai-terminal-message.collection';\nimport { AiTerminalConversationModel, AiTerminalConversationStatus, AiTerminalMode } from '../models/ai-terminal-conversation.model';\nimport { AiTerminalMessageModel } from '../models/ai-terminal-message.model';\nimport { deepCopy, objectIdHexString, round } from '../util/common';\nimport { countChatTokens, countTokens } from '../util/tokenizer';\nimport { OpenAIClient } from '../services/openai-client';\nimport { CodexClient, CodexConfig, CodexRunOptions } from '../services/codex-client';\nimport { recordOpenAIUsage } from '../managers/openai-usage-ledger.manager';\n\nconst DEFAULT_MAX_FILE_MB = 50;\nconst DEFAULT_MAX_TOTAL_MB = 100;\nconst DEFAULT_MAX_ATTACHMENT_CHARS = 12000;\nconst DEFAULT_MAX_TOTAL_ATTACHMENT_CHARS = 40000;\nconst DEFAULT_CODEX_MODEL = 'gpt-5.2-codex';\nconst DEFAULT_CODEX_TIMEOUT_MS = 180000;\nconst AI_ASSISTANT_MONGO_DEFAULT_LIMIT = 20;\nconst AI_ASSISTANT_MONGO_MAX_LIMIT = 200;\n\nconst AI_ASSISTANT_BLOCKED_COLLECTIONS = new Set([\n\t'user-groups',\n\t'logged-in-users',\n\t'ai-terminal-messages',\n\t'ai-terminal-conversations',\n\t'openai-usage-ledger',\n\t'logs',\n\t'notifications',\n\t'email-history'\n]);\n\nconst AI_ASSISTANT_SENSITIVE_FIELDS = [\n\t'password',\n\t'salt',\n\t'hash',\n\t'secret',\n\t'token',\n\t'api_key',\n\t'email',\n\t'phonenumber',\n\t'phone',\n\t'ssn',\n\t'address',\n\t'services',\n\t'roles'\n];\n\nconst AI_ASSISTANT_SYSTEM_PROMPT = [\n\t'You are the ResolveIO in-app AI assistant running with read-only access to the codebase.',\n\t'- Never share code or file contents. All code is proprietary.',\n\t'- Do not modify files, run destructive commands, or access databases directly.',\n\t'- Read-only Mongo access is allowed only via the MONGO_READ directive (see below).',\n\t'- Do not access secrets, credentials, or user data.',\n\t'- Do not assist with hacking, bypassing security, or abuse.',\n\t'- Prefer high-level explanations and point to routes instead of code. Only mention file paths if explicitly requested.',\n\t'- When asked where to do something, give the exact screen name and the in-app route as a standalone path starting with \"/\" so it can be clicked.',\n\t'- When asked \"why is this happening,\" respond with: cause, trigger, data source(s), and expected vs actual outcome.',\n\t'- For troubleshooting, ask 2-3 targeted questions first, then give a short decision tree (If X, do Y; If not, do Z).',\n\t'- Provide checklists for common tasks, highlighting required fields and common pitfalls.',\n\t'- If asked \"where is this set,\" give the screen/workflow name and navigation steps to reach it.',\n\t'- If asked \"what changed,\" summarize release notes if known; if not available, say so and suggest where to check or offer a support ticket.',\n\t'- Suggest 1-2 related screens or next steps when it helps.',\n\t'- If access is blocked, name the permission/role needed and how to request it.',\n\t'- Avoid vague labels like \"Operations app\"; use the specific screen/workflow name.',\n\t'- Do not mention other client projects or ask which client; stay within the current project context.',\n\t'- Respond with a single concise message. Do not add labels like \"Customer-facing summary\" or \"Work ticket summary\" and do not include estimated hours.',\n\t'- Use structured responses by default: short heading, then bullet points. For \"how do I\" questions, provide a step-by-step list (numbered) with explicit page/screen names and actions.',\n\t'- When giving steps, include navigation guidance like \"Go to <screen>\" and \"Click/Select/Enter <field>\" so the user can follow it exactly.',\n\t'- If context scope is provided (ex: current page), prioritize that screen in your answer.',\n\t'- If a request is out of scope, offer to create a support ticket with a short summary.',\n\t'- If the user explicitly asks to create/open/file a support ticket, end your response with a single line exactly in this format:',\n\t'- SUPPORT_TICKET_CREATE: <one-line summary>',\n\t'- Only include that line when the user clearly wants a ticket created. Do not claim a ticket is created unless you include that line.',\n\t'- If you need database data to answer, end your response with a single line exactly in this format:',\n\t'- MONGO_READ: {\"collection\":\"<name>\",\"query\":{...},\"options\":{\"projection\":{...},\"sort\":{...},\"limit\":20},\"permissionView\":\"</route>\"}',\n\t'- For invoice data, set permissionView to an invoice route (ex: /invoice/list or /report/invoice).',\n\t'- Keep queries minimal, read-only, and avoid user/credential data unless the user is a super admin.',\n\t'- Assume you are not a super admin unless explicitly told otherwise.',\n\t'- Only request data when the user has permission for that module; invoice data requires invoice view access.',\n\t'- If the user lacks permission, answer without data and explain how to view it in the app or request access.',\n\t'- Use MONGO_READ only to produce summaries/snapshots/health checks (not raw dumps) when permitted.',\n\t'- When referencing data, summarize it in bullets and avoid raw JSON or dumps.',\n\t'- Keep responses concise and use low reasoning effort.'\n].join('\\n');\n\nconst AI_FORM_PATCH_SYSTEM_PROMPT = [\n\t'You are the ResolveIO form patch assistant.',\n\t'- Your job is to map the user request to the provided form fields.',\n\t'- Only use the allowed fields and their types.',\n\t'- Return ONLY valid JSON and nothing else.',\n\t'- If you cannot map the request, return an empty patch with a short note.',\n\t'- Use ISO 8601 for dates and true/false for booleans.',\n\t'- Use medium reasoning effort.'\n].join('\\n');\n\nlet assistantCodexClient: CodexClient | null = null;\n\ntype GuardrailResult = { blocked: boolean; response: string; reason: string };\n\ntype AttachmentInput = {\n\tid?: string;\n\tname?: string;\n\ttype?: string;\n\tsize?: number;\n\tlocal_path?: string;\n};\n\ntype AiTerminalRunInput = {\n\tid_conversation?: string;\n\tid_client?: string;\n\tid_app?: string;\n\tmessage: string;\n\tprofile_id?: string;\n\tconfig?: {\n\t\tmode?: string;\n\t\tmodel?: string;\n\t\tsystem_prompt?: string;\n\t\tuser_prompt_template?: string;\n\t\tresponse_format?: string;\n\t\ttemperature?: number;\n\t\tmax_tokens?: number;\n\t};\n\tguardrails?: boolean;\n\tattachments?: AttachmentInput[];\n\tmax_history?: number;\n\tdelete_files_after_run?: boolean;\n};\n\ntype AiCodexRunInput = {\n\tid_conversation?: string;\n\tid_client?: string;\n\tid_app?: string;\n\tmessage: string;\n\tcontext?: {\n\t\tmode?: string;\n\t\troute?: string;\n\t};\n\tmongo?: {\n\t\tdatabase?: string;\n\t\tdatabases?: string[];\n\t\taccess?: string;\n\t\treadonly?: boolean;\n\t};\n\tattachments?: AttachmentInput[];\n\tdelete_files_after_run?: boolean;\n\tmax_history?: number;\n};\n\nexport type AiAssistantMongoReadInput = {\n\tdatabase?: string;\n\tcollection?: string;\n\tquery?: Record<string, any>;\n\toptions?: {\n\t\tprojection?: Record<string, number>;\n\t\tsort?: Record<string, any>;\n\t\tlimit?: number;\n\t\tskip?: number;\n\t\tincludeTotal?: boolean;\n\t};\n\tpermissionView?: string;\n\tid_client?: string;\n\tmongo?: {\n\t\tdatabase?: string;\n\t\tdatabases?: string[];\n\t\taccess?: string;\n\t\treadonly?: boolean;\n\t};\n};\n\ntype AiFormPatchInput = {\n\tmessage: string;\n\tallowed_fields?: Array<{ name?: string; path?: string; type?: string; label?: string; enums?: string[] }>;\n\tfields?: Array<{ name?: string; path?: string; type?: string; label?: string; enums?: string[] }>;\n\tpatch_format?: string;\n\troute?: string;\n\tid_client?: string;\n\tid_app?: string;\n\tconfig?: {\n\t\tmodel?: string;\n\t\ttemperature?: number;\n\t\tmax_tokens?: number;\n\t};\n};\n\ntype AiFormField = {\n\tname: string;\n\ttype?: string;\n\tlabel?: string;\n\tenums?: string[];\n};\n\nexport function loadAiTerminalMethods(methodManager) {\n\tmethodManager.methods({\n\t\taiTerminalConversationCreate: {\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) {\n\t\t\t\tconst now = new Date();\n\t\t\t\tconst doc: Partial<AiTerminalConversationModel> = {\n\t\t\t\t\tid_client: normalizeOptionalString(payload.id_client),\n\t\t\t\t\tid_app: normalizeOptionalString(payload.id_app),\n\t\t\t\t\ttitle: normalizeOptionalString(payload.title) || 'New Conversation',\n\t\t\t\t\tmode: normalizeConversationMode(payload.mode),\n\t\t\t\t\tbranch_enabled: payload.branch_enabled === true,\n\t\t\t\t\tbranch_name: normalizeOptionalString(payload.branch_name),\n\t\t\t\t\tstatus: normalizeConversationStatus(payload.status),\n\t\t\t\t\tprofile_id: normalizeOptionalString(payload.profile_id),\n\t\t\t\t\tmetadata: payload.metadata || {},\n\t\t\t\t\tlast_message_at: undefined,\n\t\t\t\t\tlast_message_id: undefined,\n\t\t\t\t\tcreatedAt: now,\n\t\t\t\t\tupdatedAt: now\n\t\t\t\t};\n\t\t\t\tconst result = await AiTerminalConversations.insertOne(doc as any);\n\t\t\t\treturn { id_conversation: result._id as string };\n\t\t\t}\n\t\t},\n\t\taiTerminalConversationUpdate: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpatch: {\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(id_conversation: string, patch) {\n\t\t\t\tconst update: Partial<AiTerminalConversationModel> & { updatedAt: Date } = {\n\t\t\t\t\tupdatedAt: new Date()\n\t\t\t\t};\n\t\t\t\tif (patch.title !== undefined) {\n\t\t\t\t\tupdate.title = normalizeOptionalString(patch.title);\n\t\t\t\t}\n\t\t\t\t\tif (patch.status !== undefined) {\n\t\t\t\t\t\tupdate.status = normalizeConversationStatus(patch.status);\n\t\t\t\t\t}\n\t\t\t\tif (patch.branch_enabled !== undefined) {\n\t\t\t\t\tupdate.branch_enabled = !!patch.branch_enabled;\n\t\t\t\t}\n\t\t\t\tif (patch.branch_name !== undefined) {\n\t\t\t\t\tupdate.branch_name = normalizeOptionalString(patch.branch_name);\n\t\t\t\t}\n\t\t\t\tif (patch.profile_id !== undefined) {\n\t\t\t\t\tupdate.profile_id = normalizeOptionalString(patch.profile_id);\n\t\t\t\t}\n\t\t\t\tif (patch.metadata !== undefined) {\n\t\t\t\t\tupdate.metadata = patch.metadata || {};\n\t\t\t\t}\n\n\t\t\t\tawait AiTerminalConversations.updateOne({ _id: id_conversation }, { $set: update });\n\t\t\t\treturn { id_conversation };\n\t\t\t}\n\t\t},\n\t\taiTerminalConversationDelete: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_conversation: string) {\n\t\t\t\tawait AiTerminalMessages.deleteMany({ id_conversation });\n\t\t\t\tawait AiTerminalConversations.deleteOne({ _id: id_conversation });\n\t\t\t\treturn { id_conversation };\n\t\t\t}\n\t\t},\n\t\taiTerminalUploadFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfile_name: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcontent_base64: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcontent_type: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tsize: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_conversation: string, file_name: string, content_base64: string, size: number, content_type?: string) {\n\t\t\t\tconst limits = resolveUploadLimits();\n\t\t\t\tif (size > limits.maxFileBytes) {\n\t\t\t\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t\t\t\t}\n\t\t\t\tconst safeName = sanitizeFilename(file_name);\n\t\t\t\tconst uploadRoot = resolveUploadRoot();\n\t\t\t\tconst targetDir = path.join(uploadRoot, id_conversation);\n\t\t\t\tawait fs.mkdir(targetDir, { recursive: true });\n\t\t\t\tconst targetPath = path.join(targetDir, safeName);\n\t\t\t\t\tconst dataBuffer = Buffer.from(content_base64, 'base64');\n\t\t\t\t\tconst data = new Uint8Array(dataBuffer);\n\t\t\t\t\tif (data.byteLength !== size) {\n\t\t\t\t\t\tif (data.byteLength > limits.maxFileBytes) {\n\t\t\t\t\t\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tawait fs.writeFile(targetPath, data);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid_file: objectIdHexString(),\n\t\t\t\t\t\tname: safeName,\n\t\t\t\t\tsize: data.byteLength,\n\t\t\t\t\ttype: normalizeOptionalString(content_type),\n\t\t\t\t\tlocal_path: targetPath\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\taiTerminalRun: {\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) {\n\t\t\t\treturn await executeAiTerminalRun(payload, this);\n\t\t\t}\n\t\t},\n\t\taiFormPatch: {\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) {\n\t\t\t\treturn await executeAiFormPatch(payload, this);\n\t\t\t}\n\t\t},\n\t\taiCoderTerminalUploadFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfile_name: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcontent_base64: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tsize: {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\tcontent_type: {\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(id_conversation: string, file_name: string, content_base64: string, size: number, content_type?: string) {\n\t\t\t\treturn await handleCodexUpload(id_conversation, file_name, content_base64, size, content_type);\n\t\t\t}\n\t\t},\n\t\taiCoderTerminalRunCodex: {\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\tforceWorker: true,\n\t\t\tfunction: async function(payload) {\n\t\t\t\treturn await executeAiAssistantCodexRun(payload, this);\n\t\t\t}\n\t\t},\n\t\taiAssistantMongoRead: {\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) {\n\t\t\t\treturn await executeAiAssistantMongoRead(payload, this);\n\t\t\t}\n\t\t},\n\t\t\taiCoderTerminalDeployTest: {\n\t\t\t\tcheck: new SimpleSchema({\n\t\t\t\t\tid_conversation: {\n\t\t\t\t\t\ttype: String\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tfunction: function() {\n\t\t\t\t\tthrow new Error('Test deploys are not supported for AI assistant sessions.');\n\t\t\t\t}\n\t\t\t}\n\t});\n}\n\nasync function executeAiTerminalRun(payload: AiTerminalRunInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiTerminalRunInput);\n\tconst message = normalizeOptionalString(input.message);\n\tif (!message) {\n\t\tthrow new Error('Message is required.');\n\t}\n\n\tconst isSuperAdmin = await resolveIsSuperAdmin(context?.id_user);\n\tconst guardrailsEnabled = input.guardrails !== false && !isSuperAdmin;\n\tif (guardrailsEnabled) {\n\t\tconst guardrail = evaluateGuardrails(message);\n\t\tif (guardrail?.blocked) {\n\t\t\tconst conversation = await ensureConversation(input, 'openai');\n\t\t\tconst now = new Date();\n\t\t\tconst userMsg: Partial<AiTerminalMessageModel> = {\n\t\t\t\tid_conversation: conversation._id,\n\t\t\t\trole: 'user',\n\t\t\t\tcontent: message,\n\t\t\t\tcreatedAt: now,\n\t\t\t\tupdatedAt: now\n\t\t\t};\n\t\t\tconst assistantMsg: Partial<AiTerminalMessageModel> = {\n\t\t\t\tid_conversation: conversation._id,\n\t\t\t\trole: 'assistant',\n\t\t\t\tcontent: guardrail.response,\n\t\t\t\tmetadata: {\n\t\t\t\t\tblocked: true,\n\t\t\t\t\treason: guardrail.reason\n\t\t\t\t},\n\t\t\t\tcreatedAt: now,\n\t\t\t\tupdatedAt: now\n\t\t\t};\n\t\t\tawait AiTerminalMessages.insertOne(userMsg as any);\n\t\t\tawait AiTerminalMessages.insertOne(assistantMsg as any);\n\t\t\tawait touchConversation(conversation._id, now);\n\t\t\treturn {\n\t\t\t\tconversation,\n\t\t\t\tmessage: assistantMsg,\n\t\t\t\tguardrails: { blocked: true, reason: guardrail.reason }\n\t\t\t};\n\t\t}\n\t}\n\n\tconst conversation = await ensureConversation(input, 'openai');\n\tconst now = new Date();\n\tconst attachments = Array.isArray(input.attachments) ? input.attachments : [];\n\tconst attachmentData = await readAttachmentContents(attachments);\n\tconst config = sanitizeConfig(input.config || {});\n\tconst systemPrompt = normalizeOptionalString(config.system_prompt) || '';\n\tconst userPromptTemplate = normalizeOptionalString(config.user_prompt_template);\n\tconst userPrompt = buildUserPrompt(userPromptTemplate, message, attachmentData.promptText);\n\n\tconst historyLimit = normalizeHistoryLimit(input.max_history);\n\tconst history = historyLimit > 0\n\t\t? await AiTerminalMessages.find(\n\t\t\t{ id_conversation: conversation._id, role: { $in: ['user', 'assistant'] } },\n\t\t\t{ sort: { createdAt: 1 }, limit: historyLimit * 2 }\n\t\t)\n\t\t: [];\n\n\tconst messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [];\n\tif (systemPrompt) {\n\t\tmessages.push({ role: 'system', content: systemPrompt });\n\t}\n\n\thistory.forEach((entry: AiTerminalMessageModel) => {\n\t\tconst role = entry.role === 'assistant' ? 'assistant' : 'user';\n\t\tconst content = normalizeOptionalString(entry.content);\n\t\tif (content) {\n\t\t\tmessages.push({ role, content });\n\t\t}\n\t});\n\n\tif (userPrompt) {\n\t\tmessages.push({ role: 'user', content: userPrompt });\n\t}\n\n\tconst openaiSettings = resolveOpenAISettings(config);\n\tconst client = new OpenAIClient(openaiSettings);\n\tconst response = await client.chat(messages, { timeoutMs: 60000, responseFormat: config.response_format });\n\n\tconst usage = response.usage || estimateUsage(messages, response.content, openaiSettings.model);\n\tconst idClient = resolveClientId(conversation, input.id_client);\n\tif (idClient) {\n\t\tawait recordOpenAIUsage({\n\t\t\tid_client: idClient,\n\t\t\tmodel: response.model || openaiSettings.model || 'unknown',\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens,\n\t\t\tcategory: 'ai-terminal',\n\t\t\tid_conversation: conversation._id\n\t\t});\n\t}\n\n\tconst userDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'user',\n\t\tcontent: message,\n\t\tattachments: attachmentData.attachments,\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tconst assistantDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'assistant',\n\t\tcontent: response.content,\n\t\tusage: {\n\t\t\tmodel: response.model || openaiSettings.model,\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens\n\t\t},\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tawait AiTerminalMessages.insertOne(userDoc as any);\n\tconst insertResult = await AiTerminalMessages.insertOne(assistantDoc as any);\n\tawait touchConversation(conversation._id, now, insertResult._id as string);\n\n\tif (input.delete_files_after_run !== false) {\n\t\tawait cleanupAttachments(attachmentData.attachments);\n\t}\n\n\treturn {\n\t\tconversation,\n\t\tmessage: assistantDoc,\n\t\tusage: assistantDoc.usage\n\t};\n}\n\nasync function executeAiFormPatch(payload: AiFormPatchInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiFormPatchInput);\n\tconst message = normalizeOptionalString(input.message);\n\tif (!message) {\n\t\tthrow new Error('Message is required.');\n\t}\n\tif (!context?.id_user) {\n\t\tthrow new Error('Unauthorized.');\n\t}\n\n\tconst allowedFields = normalizeAiFormFields(input.allowed_fields || input.fields);\n\tif (!allowedFields.length) {\n\t\tthrow new Error('Allowed fields are required.');\n\t}\n\n\tconst guardrail = evaluateGuardrails(message);\n\tif (guardrail?.blocked) {\n\t\treturn { error: guardrail.response, blocked: true };\n\t}\n\n\tconst systemPrompt = buildAiFormSystemPrompt();\n\tconst userPrompt = buildAiFormUserPrompt(message, allowedFields, input.patch_format, input.route);\n\tconst messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [\n\t\t{ role: 'system', content: systemPrompt },\n\t\t{ role: 'user', content: userPrompt }\n\t];\n\n\tconst openaiSettings = resolveOpenAISettings(input.config || {});\n\tconst client = new OpenAIClient(openaiSettings);\n\tconst response = await client.chat(messages, { timeoutMs: 60000, responseFormat: 'json_object' });\n\n\tconst usage = response.usage || estimateUsage(messages, response.content, response.model || openaiSettings.model);\n\tconst idClient = normalizeOptionalString(input.id_client);\n\tif (idClient) {\n\t\tawait recordOpenAIUsage({\n\t\t\tid_client: idClient,\n\t\t\tmodel: response.model || openaiSettings.model || 'unknown',\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens,\n\t\t\tcategory: 'ai-form'\n\t\t});\n\t}\n\n\tconst parsed = parseJsonObject(response.content);\n\tif (!parsed || typeof parsed !== 'object') {\n\t\tthrow new Error('AI form patch response was not valid JSON.');\n\t}\n\n\treturn {\n\t\tpatch: parsed.patch ?? parsed,\n\t\tnotes: normalizeOptionalString(parsed.notes) || undefined,\n\t\tusage: {\n\t\t\tmodel: response.model || openaiSettings.model,\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens\n\t\t}\n\t};\n}\n\nasync function executeAiAssistantCodexRun(payload: AiCodexRunInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiCodexRunInput);\n\tconst message = normalizeOptionalString(input.message);\n\tif (!message) {\n\t\tthrow new Error('Message is required.');\n\t}\n\tif (!context?.id_user) {\n\t\tthrow new Error('Unauthorized.');\n\t}\n\n\tconst guardrail = evaluateAssistantGuardrails(message);\n\tif (guardrail?.blocked) {\n\t\tconst conversation = await ensureConversation(input as any, 'codex');\n\t\tconst now = new Date();\n\t\tconst userMsg: Partial<AiTerminalMessageModel> = {\n\t\t\tid_conversation: conversation._id,\n\t\t\trole: 'user',\n\t\t\tcontent: message,\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now\n\t\t};\n\t\tconst assistantMsg: Partial<AiTerminalMessageModel> = {\n\t\t\tid_conversation: conversation._id,\n\t\t\trole: 'assistant',\n\t\t\tcontent: guardrail.response,\n\t\t\tmetadata: {\n\t\t\t\tblocked: true,\n\t\t\t\treason: guardrail.reason\n\t\t\t},\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now\n\t\t};\n\t\tawait AiTerminalMessages.insertOne(userMsg as any);\n\t\tawait AiTerminalMessages.insertOne(assistantMsg as any);\n\t\tawait touchConversation(conversation._id, now);\n\t\treturn {\n\t\t\tconversation,\n\t\t\tmessage: assistantMsg,\n\t\t\tguardrails: { blocked: true, reason: guardrail.reason }\n\t\t};\n\t}\n\n\tconst user = await Users.findById(context?.id_user);\n\tconst isSuperAdmin = !!user?.roles?.super_admin;\n\tconst hasInvoiceAccess = userHasInvoiceAccess(user);\n\tconst conversation = await ensureConversation(input as any, 'codex');\n\tconst now = new Date();\n\tconst attachments = Array.isArray(input.attachments) ? input.attachments : [];\n\tconst attachmentData = await readAttachmentContents(attachments);\n\tconst historyLimit = normalizeHistoryLimit(input.max_history);\n\tconst history = historyLimit > 0\n\t\t? await AiTerminalMessages.find(\n\t\t\t{ id_conversation: conversation._id, role: { $in: ['user', 'assistant'] } },\n\t\t\t{ sort: { createdAt: 1 }, limit: historyLimit * 2 }\n\t\t)\n\t\t: [];\n\n\tconst historyLines: string[] = [];\n\thistory.forEach((entry: AiTerminalMessageModel) => {\n\t\tconst role = entry.role === 'assistant' ? 'Assistant' : 'User';\n\t\tconst content = normalizeOptionalString(entry.content);\n\t\tif (content) {\n\t\t\thistoryLines.push(`${role}: ${content}`);\n\t\t}\n\t});\n\n\tconst prompt = buildAssistantCodexPrompt(\n\t\tmessage,\n\t\tattachmentData.promptText,\n\t\thistoryLines.join('\\n'),\n\t\tbuildAssistantContext(input, { isSuperAdmin, hasInvoiceAccess })\n\t);\n\tconst workspaceRoot = await resolveAssistantWorkspaceRoot();\n\tconst codexClient = getAssistantCodexClient();\n\tconst runOptions: CodexRunOptions = {\n\t\ttimeoutMs: resolveCodexTimeoutMs(),\n\t\tthreadOptions: {\n\t\t\tworkingDirectory: workspaceRoot,\n\t\t\tsandboxMode: 'read-only',\n\t\t\tskipGitRepoCheck: true,\n\t\t\tmodelReasoningEffort: 'low',\n\t\t\tnetworkAccessEnabled: false,\n\t\t\twebSearchMode: 'disabled',\n\t\t\twebSearchEnabled: false,\n\t\t\tapprovalPolicy: 'never'\n\t\t}\n\t};\n\n\tconst responseText = await codexClient.run(prompt, runOptions);\n\tconst assistantContent = sanitizeAssistantResponse(responseText);\n\n\tconst userDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'user',\n\t\tcontent: message,\n\t\tattachments: attachmentData.attachments,\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tconst assistantDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'assistant',\n\t\tcontent: assistantContent,\n\t\tmetadata: {\n\t\t\tmodel: resolveCodexModel()\n\t\t},\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tawait AiTerminalMessages.insertOne(userDoc as any);\n\tconst insertResult = await AiTerminalMessages.insertOne(assistantDoc as any);\n\tawait touchConversation(conversation._id, now, insertResult._id as string);\n\n\tif (input.delete_files_after_run !== false) {\n\t\tawait cleanupAttachments(attachmentData.attachments);\n\t}\n\n\treturn {\n\t\tconversation,\n\t\tmessage: assistantDoc\n\t};\n}\n\nexport async function executeAiAssistantMongoRead(payload: AiAssistantMongoReadInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiAssistantMongoReadInput);\n\tconst collection = normalizeOptionalString(input.collection);\n\tif (!collection) {\n\t\tthrow new Error('AI assistant mongo read: Collection is required.');\n\t}\n\tconst { user, isSuperAdmin } = await ensureAssistantReadAccess(context, input.permissionView, collection);\n\tif (!isSuperAdmin && AI_ASSISTANT_BLOCKED_COLLECTIONS.has(collection)) {\n\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t}\n\n\tconst dbName = resolveAssistantDatabaseName(input.database, input.mongo);\n\tconst db = ResolveIOServer.getMongoConnection().db(dbName);\n\tlet baseQuery = normalizeMongoQuery(input.query);\n\tif (!isSuperAdmin && (collection === 'users' || collection === 'user-versions')) {\n\t\tconst userId = normalizeOptionalString(user?._id);\n\t\tif (!userId) {\n\t\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t\t}\n\t\tbaseQuery = {\n\t\t\t$and: [baseQuery, { _id: userId }]\n\t\t};\n\t}\n\tconst scopedQuery = applyClientScopeFilter(baseQuery, input.id_client, isSuperAdmin);\n\tconst normalized = normalizeAssistantFindOptions(input.options);\n\tconst documents = await db.collection(collection).find(scopedQuery, normalized.findOptions).toArray();\n\tlet total = null;\n\tif (normalized.includeTotal) {\n\t\ttotal = await db.collection(collection).countDocuments(scopedQuery);\n\t}\n\n\tconst sanitizedDocuments = isSuperAdmin\n\t\t? documents\n\t\t: documents.map(doc => redactSensitiveFields(deepCopy(doc)));\n\n\treturn {\n\t\tdocuments: sanitizedDocuments,\n\t\ttotal\n\t};\n}\n\nasync function ensureAssistantReadAccess(context: any, permissionView?: string, collection?: string): Promise<{ user: any; isSuperAdmin: boolean }> {\n\tconst idUser = context?.id_user;\n\tif (!idUser) {\n\t\tthrow new Error('AI assistant mongo read: Unauthorized.');\n\t}\n\tconst user = await Users.findById(idUser);\n\tif (!user) {\n\t\tthrow new Error('AI assistant mongo read: Unauthorized.');\n\t}\n\tconst isSuperAdmin = !!user?.roles?.super_admin;\n\tconst normalizedPermission = normalizeOptionalString(permissionView);\n\tif (!isSuperAdmin) {\n\t\tif (!normalizedPermission) {\n\t\t\tthrow new Error('AI assistant mongo read: Permission scope required.');\n\t\t}\n\t\tif (!userHasViewPermission(user, normalizedPermission)) {\n\t\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t\t}\n\t\tconst normalizedCollection = normalizeOptionalString(collection);\n\t\tif (normalizedCollection && requiresInvoicePermission(normalizedCollection) && !userHasInvoiceAccess(user)) {\n\t\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t\t}\n\t}\n\telse if (normalizedPermission && !userHasViewPermission(user, normalizedPermission)) {\n\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t}\n\treturn { user, isSuperAdmin };\n}\n\nfunction resolveAssistantDatabaseName(database?: string, mongoConfig?: AiAssistantMongoReadInput['mongo']): string {\n\tconst defaultDb = normalizeOptionalString(mongoConfig?.database) || ResolveIOServer.getServerConfig()?.DATABASE || '';\n\tconst dbName = normalizeOptionalString(database) || defaultDb;\n\tif (!dbName) {\n\t\tthrow new Error('AI assistant mongo read: Database is required.');\n\t}\n\tconst allowedFromConfig = Array.isArray(mongoConfig?.databases)\n\t\t? mongoConfig?.databases.map(value => normalizeOptionalString(value)).filter(Boolean)\n\t\t: [];\n\tif (allowedFromConfig.length && !allowedFromConfig.includes(dbName)) {\n\t\tthrow new Error('AI assistant mongo read: Database access denied.');\n\t}\n\tconst allowedDatabases = ResolveIOServer.getMongoManager()?.getWatchedDatabases() || [];\n\tif (allowedDatabases.length && !allowedDatabases.includes(dbName)) {\n\t\tthrow new Error('AI assistant mongo read: Database access denied.');\n\t}\n\treturn dbName;\n}\n\nfunction normalizeAssistantFindOptions(options?: AiAssistantMongoReadInput['options']) {\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'\n\t\t? Math.min(Math.max(normalized.limit, 0), AI_ASSISTANT_MONGO_MAX_LIMIT)\n\t\t: AI_ASSISTANT_MONGO_DEFAULT_LIMIT;\n\tconst skip = typeof normalized.skip === 'number' ? Math.max(normalized.skip, 0) : 0;\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 normalizeMongoQuery(query?: Record<string, any>) {\n\tconst normalized = query && typeof query === 'object' ? query : {};\n\tif (containsForbiddenMongoOperators(normalized)) {\n\t\tthrow new Error('AI assistant mongo read: Query contains restricted operators.');\n\t}\n\treturn normalized;\n}\n\nfunction containsForbiddenMongoOperators(value: any): boolean {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.some(entry => containsForbiddenMongoOperators(entry));\n\t}\n\tfor (const key of Object.keys(value)) {\n\t\tconst normalized = key.toLowerCase();\n\t\tif (normalized === '$where' || normalized === '$function' || normalized === '$accumulator') {\n\t\t\treturn true;\n\t\t}\n\t\tif (containsForbiddenMongoOperators(value[key])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction applyClientScopeFilter(query: Record<string, any>, idClient?: string, isSuperAdmin = false): Record<string, any> {\n\tif (isSuperAdmin) {\n\t\treturn query;\n\t}\n\tconst normalizedClient = normalizeOptionalString(idClient);\n\tif (!normalizedClient) {\n\t\treturn query;\n\t}\n\treturn {\n\t\t$and: [query, { id_client: normalizedClient }]\n\t};\n}\n\nfunction userHasViewPermission(user: any, view: string): boolean {\n\tif (!user || !view) {\n\t\treturn false;\n\t}\n\tif (user.roles?.super_admin) {\n\t\treturn true;\n\t}\n\tconst groups = Array.isArray(user.roles?.groups) ? user.roles.groups : [];\n\tconst miscs = Array.isArray(user.roles?.miscs) ? user.roles.miscs : [];\n\tif (groups.some(group => Array.isArray(group.views) && group.views.some(v => v.startsWith(view)))) {\n\t\treturn true;\n\t}\n\tif (miscs.some(v => v.startsWith(view))) {\n\t\treturn true;\n\t}\n\tif (groups.some(group => group.name === view)) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction userHasAnyViewPermission(user: any, views: string[]): boolean {\n\tif (!user || !Array.isArray(views)) {\n\t\treturn false;\n\t}\n\treturn views.some(view => view && userHasViewPermission(user, view));\n}\n\nfunction userHasInvoiceAccess(user: any): boolean {\n\treturn userHasAnyViewPermission(user, ['/invoice', '/report/invoice']);\n}\n\nfunction requiresInvoicePermission(collection: string): boolean {\n\tconst normalized = normalizeOptionalString(collection).toLowerCase();\n\tif (!normalized) {\n\t\treturn false;\n\t}\n\treturn normalized.includes('invoice');\n}\n\nfunction redactSensitiveFields(value: any): any {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(entry => redactSensitiveFields(entry));\n\t}\n\tif (!value || typeof value !== 'object') {\n\t\treturn value;\n\t}\n\tconst result: Record<string, any> = {};\n\tObject.keys(value).forEach((key) => {\n\t\tif (shouldRedactField(key)) {\n\t\t\treturn;\n\t\t}\n\t\tresult[key] = redactSensitiveFields(value[key]);\n\t});\n\treturn result;\n}\n\nfunction shouldRedactField(key: string): boolean {\n\tconst normalized = String(key || '').trim().toLowerCase();\n\tif (!normalized) {\n\t\treturn false;\n\t}\n\treturn AI_ASSISTANT_SENSITIVE_FIELDS.some((field) => normalized === field || normalized.includes(field));\n}\n\nfunction resolveCodexTimeoutMs(): number {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst raw = normalizeOptionalNumber(config['AI_ASSISTANT_CODEX_TIMEOUT_MS'] || process.env.AI_ASSISTANT_CODEX_TIMEOUT_MS);\n\tif (raw && raw > 0) {\n\t\treturn round(raw);\n\t}\n\treturn DEFAULT_CODEX_TIMEOUT_MS;\n}\n\nfunction resolveCodexModel(): string {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst raw = normalizeOptionalString(\n\t\tconfig['AI_ASSISTANT_CODEX_MODEL']\n\t\t|| process.env.AI_ASSISTANT_CODEX_MODEL\n\t\t|| config['AI_TERMINAL_CODEX_MODEL']\n\t\t|| process.env.AI_TERMINAL_CODEX_MODEL\n\t\t|| config['AI_DASHBOARD_CODEX_MODEL']\n\t\t|| process.env.AI_DASHBOARD_CODEX_MODEL\n\t);\n\treturn raw || DEFAULT_CODEX_MODEL;\n}\n\nfunction resolveCodexSettings(): CodexConfig {\n\tconst serverConfig = ResolveIOServer.getServerConfig() || {};\n\tconst apiKey = (serverConfig['OPENAI_API_KEY'] || process.env.OPENAI_API_KEY || '').trim();\n\tif (!apiKey) {\n\t\tthrow new Error('OpenAI API key missing. Add OPENAI_API_KEY to server config.');\n\t}\n\treturn {\n\t\tapiKey,\n\t\tbaseUrl: (serverConfig['OPENAI_BASE_URL'] || process.env.OPENAI_BASE_URL || '').trim() || undefined,\n\t\tmodel: resolveCodexModel(),\n\t\tmaxRetries: normalizeOptionalNumber(serverConfig['OPENAI_MAX_RETRIES'] || process.env.OPENAI_MAX_RETRIES),\n\t\tretryDelayMs: normalizeOptionalNumber(serverConfig['OPENAI_RETRY_DELAY_MS'] || process.env.OPENAI_RETRY_DELAY_MS)\n\t};\n}\n\nfunction getAssistantCodexClient(): CodexClient {\n\tif (!assistantCodexClient) {\n\t\tassistantCodexClient = new CodexClient(resolveCodexSettings());\n\t}\n\treturn assistantCodexClient;\n}\n\nasync function resolveAssistantWorkspaceRoot(): Promise<string> {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst configured = normalizeOptionalString(\n\t\tconfig['AI_ASSISTANT_WORKSPACE_ROOT']\n\t\t|| process.env.AI_ASSISTANT_WORKSPACE_ROOT\n\t\t|| config['CODEX_WORKSPACE_ROOT']\n\t\t|| process.env.CODEX_WORKSPACE_ROOT\n\t);\n\tconst candidate = configured || ResolveIOServer.getClientDir() || process.cwd();\n\tlet stat = null;\n\ttry {\n\t\tstat = await fs.stat(candidate);\n\t}\n\tcatch {\n\t\tstat = null;\n\t}\n\tif (!stat || !stat.isDirectory()) {\n\t\tthrow new Error('AI assistant workspace root not found.');\n\t}\n\treturn candidate;\n}\n\nfunction buildAssistantCodexPrompt(message: string, attachmentText: string, historyText: string, contextText?: string): string {\n\tconst trimmedContext = normalizeOptionalString(contextText);\n\tconst contextBlock = trimmedContext ? `\\n\\nContext:\\n${trimmedContext}` : '';\n\tconst trimmedHistory = normalizeOptionalString(historyText);\n\tconst historyBlock = trimmedHistory ? `\\n\\nConversation so far:\\n${trimmedHistory}` : '';\n\treturn `System:\\n${AI_ASSISTANT_SYSTEM_PROMPT}${contextBlock}${historyBlock}\\n\\nUser:\\n${message}${attachmentText || ''}`.trim();\n}\n\nfunction buildAssistantContext(input: AiCodexRunInput, userContext?: { isSuperAdmin?: boolean; hasInvoiceAccess?: boolean }): string {\n\tconst lines: string[] = [];\n\tconst idApp = normalizeOptionalString(input?.id_app);\n\tif (idApp) {\n\t\tlines.push(`Current app id: ${idApp}`);\n\t}\n\tif (typeof userContext?.isSuperAdmin === 'boolean') {\n\t\tlines.push(`User is super admin: ${userContext.isSuperAdmin ? 'yes' : 'no'}`);\n\t}\n\tif (typeof userContext?.hasInvoiceAccess === 'boolean') {\n\t\tlines.push(`User has invoice access: ${userContext.hasInvoiceAccess ? 'yes' : 'no'}`);\n\t}\n\tconst contextMode = normalizeOptionalString(input?.context?.mode);\n\tconst contextRoute = normalizeOptionalString(input?.context?.route);\n\tif (contextMode) {\n\t\tlines.push(`Context scope: ${contextMode === 'current' ? 'current page' : contextMode}`);\n\t}\n\tif (contextRoute) {\n\t\tlines.push(`Current page route: ${contextRoute}`);\n\t}\n\tconst mongoDb = normalizeOptionalString(input?.mongo?.database);\n\tconst mongoDbs = Array.isArray(input?.mongo?.databases)\n\t\t? input.mongo.databases.map(value => normalizeOptionalString(value)).filter(Boolean)\n\t\t: [];\n\tconst mongoAccess = normalizeOptionalString(input?.mongo?.access)\n\t\t|| (input?.mongo?.readonly === true ? 'read' : '');\n\tif (mongoDb) {\n\t\tlines.push(`Mongo database: ${mongoDb}`);\n\t}\n\tif (mongoDbs.length) {\n\t\tlines.push(`Mongo databases allowed: ${mongoDbs.join(', ')}`);\n\t}\n\tif (mongoAccess) {\n\t\tlines.push(`Mongo access: ${mongoAccess}`);\n\t}\n\treturn lines.join('\\n');\n}\n\ntype ClientRouteIndex = {\n\tset: Set<string>;\n\tmap: Map<string, string>;\n\tsize: number;\n};\n\nlet cachedClientRouteIndex: ClientRouteIndex | null = null;\n\nfunction normalizeRouteKey(value: string): string {\n\tconst trimmed = normalizeOptionalString(value);\n\tif (!trimmed) {\n\t\treturn '';\n\t}\n\tconst withSlash = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n\treturn withSlash.replace(/\\/+$/, '');\n}\n\nfunction normalizeRouteMatchKey(value: string): string {\n\treturn normalizeRouteKey(value).toLowerCase();\n}\n\nfunction buildClientRouteIndex(): ClientRouteIndex {\n\tconst routes = ResolveIOServer.getClientRoutes?.() || [];\n\tconst set = new Set<string>();\n\tconst map = new Map<string, string>();\n\tfor (const route of routes) {\n\t\tconst normalized = normalizeRouteKey(route);\n\t\tif (!normalized) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst matchKey = normalized.toLowerCase();\n\t\tset.add(matchKey);\n\t\tif (!map.has(matchKey)) {\n\t\t\tmap.set(matchKey, normalized);\n\t\t}\n\t}\n\treturn { set, map, size: routes.length };\n}\n\nfunction getClientRouteIndex(): ClientRouteIndex {\n\tconst routes = ResolveIOServer.getClientRoutes?.() || [];\n\tif (cachedClientRouteIndex && cachedClientRouteIndex.size === routes.length) {\n\t\treturn cachedClientRouteIndex;\n\t}\n\tcachedClientRouteIndex = buildClientRouteIndex();\n\treturn cachedClientRouteIndex;\n}\n\nfunction splitRouteSuffix(value: string): { base: string; suffix: string } {\n\tconst matchIndex = value.search(/[?#]/);\n\tif (matchIndex === -1) {\n\t\treturn { base: value, suffix: '' };\n\t}\n\treturn { base: value.slice(0, matchIndex), suffix: value.slice(matchIndex) };\n}\n\nfunction isClientRoute(value: string, index: ClientRouteIndex): boolean {\n\tconst normalized = normalizeRouteMatchKey(value);\n\tif (!normalized) {\n\t\treturn false;\n\t}\n\tif (index.set.has(normalized)) {\n\t\treturn true;\n\t}\n\tconst parts = normalized.split('/').filter(Boolean);\n\twhile (parts.length > 1) {\n\t\tparts.pop();\n\t\tconst prefix = `/${parts.join('/')}`;\n\t\tif (index.set.has(prefix)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction getCanonicalRoute(value: string, index: ClientRouteIndex): string | null {\n\tconst normalized = normalizeRouteMatchKey(value);\n\tif (!normalized) {\n\t\treturn null;\n\t}\n\treturn index.map.get(normalized) || null;\n}\n\nfunction swapTwoSegmentRoute(value: string): string | null {\n\tconst normalized = normalizeRouteKey(value);\n\tif (!normalized) {\n\t\treturn null;\n\t}\n\tconst parts = normalized.split('/').filter(Boolean);\n\tif (parts.length !== 2) {\n\t\treturn null;\n\t}\n\treturn `/${parts[1]}/${parts[0]}`;\n}\n\nfunction normalizeAssistantRoutes(value: string): string {\n\tconst index = getClientRouteIndex();\n\tif (!index.set.size) {\n\t\treturn value;\n\t}\n\tconst routePattern = /\\/[a-z0-9][a-z0-9/_-]*(?:\\?[a-z0-9=&%._-]+)?(?:#[a-z0-9._-]+)?/gi;\n\treturn value.replace(routePattern, (match) => {\n\t\tconst { base, suffix } = splitRouteSuffix(match);\n\t\tif (isClientRoute(base, index)) {\n\t\t\tconst canonical = getCanonicalRoute(base, index);\n\t\t\treturn canonical ? `${canonical}${suffix}` : match;\n\t\t}\n\t\tconst swapped = swapTwoSegmentRoute(base);\n\t\tif (!swapped || !isClientRoute(swapped, index)) {\n\t\t\treturn match;\n\t\t}\n\t\tconst canonical = getCanonicalRoute(swapped, index) || swapped;\n\t\treturn `${canonical}${suffix}`;\n\t});\n}\n\nfunction sanitizeAssistantResponse(value: string): string {\n\tconst raw = normalizeOptionalString(value);\n\tif (!raw) {\n\t\treturn 'I could not generate a response. Please try again.';\n\t}\n\tconst withoutBlocks = raw.replace(/```[\\\\s\\\\S]*?```/g, '').replace(/`([^`]+)`/g, '$1').trim();\n\tconst stripEstimated = (line: string) => line.replace(/\\bEstimated (human )?hours:\\s*.*$/i, '').trimEnd();\n\tconst cleanedLines: string[] = [];\n\twithoutBlocks.split('\\n').forEach((line) => {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) {\n\t\t\tcleanedLines.push(line);\n\t\t\treturn;\n\t\t}\n\t\tif (/^work ticket summary:/i.test(trimmed)) {\n\t\t\treturn;\n\t\t}\n\t\tif (/^estimated (human )?hours:/i.test(trimmed)) {\n\t\t\treturn;\n\t\t}\n\t\tif (/^customer-facing summary:/i.test(trimmed)) {\n\t\t\tconst stripped = line.replace(/^(\\s*)customer-facing summary:\\s*/i, '$1');\n\t\t\tconst cleaned = stripEstimated(stripped);\n\t\t\tif (cleaned.trim()) {\n\t\t\t\tcleanedLines.push(cleaned);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tcleanedLines.push(stripEstimated(line));\n\t});\n\tconst cleaned = cleanedLines.join('\\n').trim();\n\tif (!cleaned) {\n\t\treturn 'I can’t share code, but I can point you to files or explain behavior at a high level.';\n\t}\n\treturn normalizeAssistantRoutes(cleaned);\n}\n\nfunction evaluateAssistantGuardrails(message: string): GuardrailResult | null {\n\tconst normalized = String(message || '').toLowerCase();\n\tconst patterns: Array<{ pattern: RegExp; reason: string; response: string }> = [\n\t\t{\n\t\t\tpattern: /\\b(show|share|paste|provide|dump|output)\\b.*\\b(code|snippet|file|function|class|script|sql)\\b/i,\n\t\t\treason: 'Code sharing is restricted.',\n\t\t\tresponse: 'I can’t share code or file contents. All code is proprietary. I can explain behavior and point you to screens or routes.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(write|generate|create|implement|fix)\\b.*\\b(code|script|function|class|endpoint|sql)\\b/i,\n\t\t\treason: 'Code generation is restricted.',\n\t\t\tresponse: 'I can’t generate code. All code is proprietary. I can explain how the feature works and where to look in the product.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(credentials?|passwords?|secrets?|tokens?)\\b/i,\n\t\t\treason: 'Credentials and secrets are restricted.',\n\t\t\tresponse: 'I can’t help with credentials or secrets. If you need access, please contact support.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(delete|drop|truncate)\\s+(database|db|schema)\\b/i,\n\t\t\treason: 'Database operations are restricted.',\n\t\t\tresponse: 'I can’t help with database operations. I can explain system behavior or file locations.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(shell|terminal|ssh|sudo|rm\\\\s+-rf|chmod|chown)\\b/i,\n\t\t\treason: 'System operations are restricted.',\n\t\t\tresponse: 'I can’t help with system operations. I can explain workflows and where to find related code.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(exploit|bypass|malware|phishing|ransomware|ddos|hack)\\b/i,\n\t\t\treason: 'Security abuse is restricted.',\n\t\t\tresponse: 'I can’t assist with that request.'\n\t\t}\n\t];\n\tfor (const entry of patterns) {\n\t\tif (entry.pattern.test(normalized)) {\n\t\t\treturn {\n\t\t\t\tblocked: true,\n\t\t\t\treason: entry.reason,\n\t\t\t\tresponse: entry.response\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction resolveOpenAISettings(config: any) {\n\tconst serverConfig = ResolveIOServer.getServerConfig() || {};\n\tconst apiKey = (serverConfig['OPENAI_API_KEY'] || process.env.OPENAI_API_KEY || '').trim();\n\tif (!apiKey) {\n\t\tthrow new Error('OpenAI API key missing. Add OPENAI_API_KEY to server config.');\n\t}\n\treturn {\n\t\tapiKey,\n\t\tbaseUrl: (serverConfig['OPENAI_BASE_URL'] || process.env.OPENAI_BASE_URL || '').trim() || undefined,\n\t\tmodel: normalizeOptionalString(config?.model) || (serverConfig['OPENAI_MODEL'] || process.env.OPENAI_MODEL || 'gpt-5.1').trim(),\n\t\ttemperature: normalizeOptionalNumber(config?.temperature),\n\t\tmaxTokens: normalizeOptionalNumber(config?.max_tokens),\n\t\tmaxRetries: normalizeOptionalNumber(serverConfig['OPENAI_MAX_RETRIES'] || process.env.OPENAI_MAX_RETRIES),\n\t\tretryDelayMs: normalizeOptionalNumber(serverConfig['OPENAI_RETRY_DELAY_MS'] || process.env.OPENAI_RETRY_DELAY_MS)\n\t};\n}\n\nfunction buildAiFormSystemPrompt(): string {\n\treturn AI_FORM_PATCH_SYSTEM_PROMPT;\n}\n\nfunction buildAiFormUserPrompt(\n\tmessage: string,\n\tfields: Array<AiFormField>,\n\tpatchFormat?: string,\n\troute?: string\n): string {\n\tconst lines: string[] = [];\n\tlines.push(`User request: ${message}`);\n\tconst normalizedRoute = normalizeOptionalString(route);\n\tif (normalizedRoute) {\n\t\tlines.push(`Current route: ${normalizedRoute}`);\n\t}\n\tif (patchFormat) {\n\t\tlines.push('Patch format:');\n\t\tlines.push(patchFormat);\n\t}\n\tlines.push('Allowed fields:');\n\tfields.forEach((field) => {\n\t\tconst name = field.name || '';\n\t\tif (!name) {\n\t\t\treturn;\n\t\t}\n\t\tconst parts = [name];\n\t\tif (field.type) {\n\t\t\tparts.push(`type=${field.type}`);\n\t\t}\n\t\tif (field.label) {\n\t\t\tparts.push(`label=\"${field.label}\"`);\n\t\t}\n\t\tif (Array.isArray(field.enums) && field.enums.length) {\n\t\t\tparts.push(`enums=${field.enums.join('|')}`);\n\t\t}\n\t\tlines.push(`- ${parts.join(' ')}`);\n\t});\n\tlines.push('Return JSON only.');\n\treturn lines.join('\\n');\n}\n\nfunction normalizeAiFormFields(fields: any): Array<AiFormField> {\n\tif (!Array.isArray(fields)) {\n\t\treturn [];\n\t}\n\treturn fields\n\t\t.map((field) => {\n\t\t\tif (!field || typeof field !== 'object') {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst name = normalizeOptionalString(field.name) || normalizeOptionalString(field.path);\n\t\t\tif (!name) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst type = normalizeOptionalString(field.type);\n\t\t\tconst label = normalizeOptionalString(field.label);\n\t\t\tconst enums = Array.isArray(field.enums)\n\t\t\t\t? field.enums.map((value: any) => normalizeOptionalString(value)).filter(Boolean)\n\t\t\t\t: undefined;\n\t\t\tconst normalizedField: AiFormField = { name };\n\t\t\tif (type) {\n\t\t\t\tnormalizedField.type = type;\n\t\t\t}\n\t\t\tif (label) {\n\t\t\t\tnormalizedField.label = label;\n\t\t\t}\n\t\t\tif (enums && enums.length) {\n\t\t\t\tnormalizedField.enums = enums;\n\t\t\t}\n\t\t\treturn normalizedField;\n\t\t})\n\t\t.filter((field): field is AiFormField => !!field);\n}\n\nfunction parseJsonObject(content: string): any | null {\n\tif (!content || typeof content !== 'string') {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn JSON.parse(content);\n\t}\n\tcatch {\n\t\tconst match = content.match(/\\{[\\s\\S]*\\}/);\n\t\tif (!match) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\treturn JSON.parse(match[0]);\n\t\t}\n\t\tcatch {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\nfunction resolveUploadLimits(): { maxFileBytes: number; maxFileMb: number; maxTotalBytes: number; maxTotalMb: number } {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst maxFileMb = normalizeOptionalNumber(config['AI_TERMINAL_MAX_FILE_MB'] || process.env.AI_TERMINAL_MAX_FILE_MB) || DEFAULT_MAX_FILE_MB;\n\tconst maxTotalMb = normalizeOptionalNumber(config['AI_TERMINAL_MAX_TOTAL_MB'] || process.env.AI_TERMINAL_MAX_TOTAL_MB) || DEFAULT_MAX_TOTAL_MB;\n\treturn {\n\t\tmaxFileBytes: round(maxFileMb * 1024 * 1024),\n\t\tmaxFileMb,\n\t\tmaxTotalBytes: round(maxTotalMb * 1024 * 1024),\n\t\tmaxTotalMb\n\t};\n}\n\nfunction resolveUploadRoot(): string {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst configured = normalizeOptionalString(config['AI_TERMINAL_UPLOAD_ROOT'] || process.env.AI_TERMINAL_UPLOAD_ROOT);\n\tif (configured) {\n\t\treturn configured;\n\t}\n\treturn path.join(os.tmpdir(), 'resolveio-ai-terminal-uploads');\n}\n\nasync function handleCodexUpload(id_conversation: string, file_name: string, content_base64: string, size: number, content_type?: string) {\n\tconst limits = resolveUploadLimits();\n\tif (size > limits.maxFileBytes) {\n\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t}\n\tconst safeName = sanitizeFilename(file_name);\n\tconst uploadRoot = resolveUploadRoot();\n\tconst targetDir = path.join(uploadRoot, id_conversation);\n\tawait fs.mkdir(targetDir, { recursive: true });\n\tconst targetPath = path.join(targetDir, safeName);\n\tconst dataBuffer = Buffer.from(content_base64, 'base64');\n\tconst data = new Uint8Array(dataBuffer);\n\tif (data.byteLength > limits.maxFileBytes) {\n\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t}\n\tawait fs.writeFile(targetPath, data);\n\treturn {\n\t\tid_file: objectIdHexString(),\n\t\tname: safeName,\n\t\tsize: data.byteLength,\n\t\ttype: normalizeOptionalString(content_type),\n\t\tlocal_path: targetPath\n\t};\n}\n\nasync function readAttachmentContents(attachments: AttachmentInput[]): Promise<{ promptText: string; attachments: AttachmentInput[] }> {\n\tif (!attachments || !attachments.length) {\n\t\treturn { promptText: '', attachments: [] };\n\t}\n\tconst limits = resolveAttachmentLimits();\n\tlet totalBytes = 0;\n\tlet totalChars = 0;\n\tconst chunks: string[] = [];\n\tconst cleaned: AttachmentInput[] = [];\n\n\tfor (const attachment of attachments) {\n\t\tconst localPath = normalizeOptionalString(attachment.local_path);\n\t\tif (!localPath) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst safe = ensurePathUnderRoot(localPath, resolveUploadRoot());\n\t\tif (!safe) {\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tconst stat = await fs.stat(localPath);\n\t\t\tif (!stat.isFile()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttotalBytes += stat.size;\n\t\t\tif (totalBytes > limits.maxTotalBytes) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst ext = path.extname(localPath).toLowerCase();\n\t\t\tconst name = normalizeOptionalString(attachment.name) || path.basename(localPath);\n\t\t\tconst type = normalizeOptionalString(attachment.type);\n\t\t\tconst readable = isReadableAttachment(type, ext);\n\t\t\tlet content = '';\n\t\t\tif (readable) {\n\t\t\t\tcontent = await fs.readFile(localPath, 'utf8');\n\t\t\t\tif (content.length > limits.maxAttachmentChars) {\n\t\t\t\t\tcontent = content.slice(0, limits.maxAttachmentChars) + '\\n[...truncated]';\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcontent = `[${name} attached; binary content omitted]`;\n\t\t\t}\n\t\t\ttotalChars += content.length;\n\t\t\tif (totalChars > limits.maxTotalAttachmentChars) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tchunks.push(`File: ${name}\\n${content}`);\n\t\t\tcleaned.push({\n\t\t\t\tid: attachment.id,\n\t\t\t\tname,\n\t\t\t\ttype,\n\t\t\t\tsize: stat.size,\n\t\t\t\tlocal_path: localPath\n\t\t\t});\n\t\t}\n\t\tcatch {}\n\t}\n\n\treturn {\n\t\tpromptText: chunks.length ? `\\n\\nAttachments:\\n${chunks.join('\\n\\n')}` : '',\n\t\tattachments: cleaned\n\t};\n}\n\nfunction resolveAttachmentLimits(): { maxAttachmentChars: number; maxTotalAttachmentChars: number; maxTotalBytes: number } {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst maxAttachmentChars = normalizeOptionalNumber(config['AI_TERMINAL_MAX_ATTACHMENT_CHARS'] || process.env.AI_TERMINAL_MAX_ATTACHMENT_CHARS)\n\t\t|| DEFAULT_MAX_ATTACHMENT_CHARS;\n\tconst maxTotalAttachmentChars = normalizeOptionalNumber(config['AI_TERMINAL_MAX_TOTAL_ATTACHMENT_CHARS'] || process.env.AI_TERMINAL_MAX_TOTAL_ATTACHMENT_CHARS)\n\t\t|| DEFAULT_MAX_TOTAL_ATTACHMENT_CHARS;\n\tconst limits = resolveUploadLimits();\n\treturn {\n\t\tmaxAttachmentChars,\n\t\tmaxTotalAttachmentChars,\n\t\tmaxTotalBytes: limits.maxTotalBytes\n\t};\n}\n\nfunction buildUserPrompt(template: string | undefined, inputText: string, attachmentText: string): string {\n\tconst data = {\n\t\tinput: inputText || '',\n\t\ttoday: new Date().toISOString().slice(0, 10)\n\t};\n\tif (template) {\n\t\treturn applyTemplate(template, data).trim() + attachmentText;\n\t}\n\treturn `${inputText || ''}${attachmentText}`.trim();\n}\n\nfunction applyTemplate(template: string, data: Record<string, string>): string {\n\tlet output = template;\n\tObject.keys(data).forEach(key => {\n\t\tconst value = data[key] || '';\n\t\tconst pattern = new RegExp(`{{\\\\s*${key}\\\\s*}}`, 'gi');\n\t\toutput = output.replace(pattern, value);\n\t});\n\treturn output;\n}\n\nfunction sanitizeConfig(source: any): any {\n\treturn {\n\t\tmode: normalizeOptionalString(source?.mode),\n\t\tmodel: normalizeOptionalString(source?.model),\n\t\tsystem_prompt: normalizeOptionalString(source?.system_prompt),\n\t\tuser_prompt_template: normalizeOptionalString(source?.user_prompt_template),\n\t\tresponse_format: normalizeOptionalString(source?.response_format),\n\t\ttemperature: normalizeOptionalNumber(source?.temperature),\n\t\tmax_tokens: normalizeOptionalNumber(source?.max_tokens)\n\t};\n}\n\nasync function ensureConversation(input: AiTerminalRunInput, mode: 'openai' | 'codex'): Promise<AiTerminalConversationModel> {\n\tconst idConversation = normalizeOptionalString(input.id_conversation);\n\tif (idConversation) {\n\t\tconst existing = await AiTerminalConversations.findById(idConversation);\n\t\tif (existing) {\n\t\t\treturn existing as AiTerminalConversationModel;\n\t\t}\n\t}\n\tconst now = new Date();\n\tconst doc: Partial<AiTerminalConversationModel> = {\n\t\tid_client: normalizeOptionalString(input.id_client),\n\t\tid_app: normalizeOptionalString(input.id_app),\n\t\ttitle: 'New Conversation',\n\t\tmode,\n\t\tbranch_enabled: mode === 'codex',\n\t\tstatus: normalizeConversationStatus('active'),\n\t\tprofile_id: normalizeOptionalString(input.profile_id),\n\t\tmetadata: {},\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\tconst result = await AiTerminalConversations.insertOne(doc as any);\n\treturn result as AiTerminalConversationModel;\n}\n\nasync function touchConversation(idConversation: string, timestamp: Date, lastMessageId?: string): Promise<void> {\n\tconst update: any = {\n\t\tupdatedAt: timestamp,\n\t\tlast_message_at: timestamp\n\t};\n\tif (lastMessageId) {\n\t\tupdate.last_message_id = lastMessageId;\n\t}\n\tawait AiTerminalConversations.updateOne({ _id: idConversation }, { $set: update });\n}\n\nfunction normalizeOptionalString(value: any): string {\n\tconst raw = typeof value === 'string' ? value.trim() : '';\n\treturn raw || '';\n}\n\nfunction normalizeConversationMode(value: any): AiTerminalMode {\n\tconst normalized = normalizeOptionalString(value).toLowerCase();\n\tif (normalized === 'codex') {\n\t\treturn 'codex';\n\t}\n\treturn 'openai';\n}\n\nfunction normalizeConversationStatus(value: any): AiTerminalConversationStatus {\n\tconst normalized = normalizeOptionalString(value).toLowerCase();\n\tif (normalized === 'archived') {\n\t\treturn 'archived';\n\t}\n\treturn 'active';\n}\n\nfunction normalizeOptionalNumber(value: any): number | undefined {\n\tconst parsed = Number(value);\n\treturn Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction normalizeHistoryLimit(value: any): number {\n\tconst parsed = Number(value);\n\tif (!Number.isFinite(parsed)) {\n\t\treturn 12;\n\t}\n\treturn Math.min(Math.max(round(parsed), 0), 30);\n}\n\nfunction resolveClientId(conversation: AiTerminalConversationModel, inputClientId?: string): string {\n\treturn normalizeOptionalString(inputClientId) || normalizeOptionalString(conversation?.id_client);\n}\n\nfunction estimateUsage(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 evaluateGuardrails(message: string): GuardrailResult | null {\n\tconst normalized = String(message || '').toLowerCase();\n\tconst patterns: Array<{ pattern: RegExp; reason: string }> = [\n\t\t{ pattern: /\\b(source\\s*code|full\\s*code|entire\\s*code|repo\\s*dump|repository|git\\s*clone)\\b/i, reason: 'Code access is restricted.' },\n\t\t{ pattern: /\\b(show|share|paste|provide|dump|output)\\b.*\\b(code|file|contents|snippet)\\b/i, reason: 'Code access is restricted.' },\n\t\t{ pattern: /\\b(credentials?|passwords?|secrets?|tokens?)\\b/i, reason: 'Credentials and secrets are restricted.' },\n\t\t{ pattern: /\\b(delete|drop)\\s+(database|db|schema)\\b/i, reason: 'Database operations are restricted.' },\n\t\t{ pattern: /\\b(shell|terminal|ssh|sudo|rm\\s+-rf|chmod|chown)\\b/i, reason: 'Server operations are restricted.' },\n\t\t{ pattern: /\\b(exploit|bypass|malware|phishing|ransomware|ddos)\\b/i, reason: 'Security abuse is restricted.' }\n\t];\n\tfor (const entry of patterns) {\n\t\tif (entry.pattern.test(normalized)) {\n\t\t\treturn {\n\t\t\t\tblocked: true,\n\t\t\t\treason: entry.reason,\n\t\t\t\tresponse: 'I can’t help with that request because it could expose proprietary code or protected information. If you need a change, describe the outcome and I can help within approved workflows.'\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n}\n\nasync function resolveIsSuperAdmin(id_user?: string): Promise<boolean> {\n\tif (!id_user) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst user = await Users.findById(id_user);\n\t\treturn !!user?.roles?.super_admin;\n\t}\n\tcatch {\n\t\treturn false;\n\t}\n}\n\nfunction sanitizeFilename(value: string): string {\n\tconst trimmed = (value || '').trim();\n\tconst base = path.basename(trimmed);\n\treturn base.replace(/[^\\w.\\-]/g, '_') || `upload_${Date.now()}`;\n}\n\nfunction isReadableAttachment(type: string, ext: string): boolean {\n\tconst normalizedType = (type || '').toLowerCase();\n\tif (normalizedType.startsWith('text/')) {\n\t\treturn true;\n\t}\n\tif (['application/json', 'application/xml', 'application/csv'].includes(normalizedType)) {\n\t\treturn true;\n\t}\n\treturn ['.txt', '.md', '.json', '.csv', '.xml', '.log', '.yml', '.yaml', '.ts', '.tsx', '.js', '.jsx', '.css', '.scss', '.html', '.htm', '.sql'].includes(ext);\n}\n\nfunction ensurePathUnderRoot(targetPath: string, root: string): boolean {\n\tconst resolvedRoot = path.resolve(root);\n\tconst resolvedTarget = path.resolve(targetPath);\n\treturn resolvedTarget.startsWith(resolvedRoot);\n}\n\nasync function cleanupAttachments(attachments: AttachmentInput[]): Promise<void> {\n\tif (!attachments || !attachments.length) {\n\t\treturn;\n\t}\n\tconst uploadRoot = resolveUploadRoot();\n\tconst removals = attachments.map(async (attachment) => {\n\t\tconst localPath = normalizeOptionalString(attachment.local_path);\n\t\tif (!localPath) {\n\t\t\treturn;\n\t\t}\n\t\tconst safe = ensurePathUnderRoot(localPath, uploadRoot);\n\t\tif (!safe) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait fs.rm(localPath, { force: true });\n\t\t}\n\t\tcatch {}\n\t});\n\tawait Promise.all(removals);\n}\n"]}
|
package/models/method.model.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/models/method.model.ts"],"names":[],"mappings":"","file":"method.model.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { MethodManager } from '../managers/method.manager';\n\nexport interface MethodModel {\n\t[key: string]: MethodAllModel;\n}\n\nexport interface MethodAllModel {\n\tcheck?: SimpleSchema;\n\t// eslint-disable-next-line no-unused-vars\n\tfunction: (this: MethodManager & {id_ws: string, id_user: string, user: string}, ...parameters: any[]) => Promise<any | any[]>;\n\tskipValidation?: boolean;\n\tworkerTaskWeight?: number;\n\tskipWorker?: boolean;\n\ttargetWorkerIndex?: string | number;\n\ttargetWorkerInstance?: string | number;\n\tbypassSession?: boolean;\n\ttimeoutOverride?: number;\n\tmaxConcurrency?: number;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/models/method.model.ts"],"names":[],"mappings":"","file":"method.model.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { MethodManager } from '../managers/method.manager';\n\nexport interface MethodModel {\n\t[key: string]: MethodAllModel;\n}\n\nexport interface MethodAllModel {\n\tcheck?: SimpleSchema;\n\t// eslint-disable-next-line no-unused-vars\n\tfunction: (this: MethodManager & {id_ws: string, id_user: string, user: string}, ...parameters: any[]) => Promise<any | any[]>;\n\tskipValidation?: boolean;\n\tworkerTaskWeight?: number;\n\tskipWorker?: boolean;\n\tforceWorker?: boolean;\n\ttargetWorkerIndex?: string | number;\n\ttargetWorkerInstance?: string | number;\n\tbypassSession?: boolean;\n\ttimeoutOverride?: number;\n\tmaxConcurrency?: number;\n}\n"]}
|
package/package.json
CHANGED
package/server-app.js
CHANGED
|
@@ -1216,7 +1216,7 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1216
1216
|
};
|
|
1217
1217
|
ResolveIOMainServer.prototype.handleClientMessage = function (ws, msg) {
|
|
1218
1218
|
return __awaiter(this, void 0, void 0, function () {
|
|
1219
|
-
var messageRoute, messageDate, messageId, type, subType, pub, serverRes, offlineUpdates, i, update, data, updateRoute, updateDate, updateMessageId, updateType, method, serverResMethod, err_2, dataCopy, route, date, msgId, msgType, methodName, ack, method, targetWorkerIndex, hasWorkerForMethod, errorRes;
|
|
1219
|
+
var messageRoute, messageDate, messageId, type, subType, pub, serverRes, offlineUpdates, i, update, data, updateRoute, updateDate, updateMessageId, updateType, method, serverResMethod, err_2, dataCopy, route, date, msgId, msgType, methodName, ack, method, forceWorker, targetWorkerIndex, hasWorkerForMethod, isExcludedFromWorker, errorRes, shouldDispatchToWorker, errorRes;
|
|
1220
1220
|
var _a;
|
|
1221
1221
|
return __generator(this, function (_b) {
|
|
1222
1222
|
switch (_b.label) {
|
|
@@ -1239,7 +1239,7 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1239
1239
|
case 2:
|
|
1240
1240
|
this._subscriptionManager.unsubscribe(messageRoute, messageDate, ws, messageId, pub, msg.slice(6));
|
|
1241
1241
|
_b.label = 3;
|
|
1242
|
-
case 3: return [3 /*break*/,
|
|
1242
|
+
case 3: return [3 /*break*/, 23];
|
|
1243
1243
|
case 4:
|
|
1244
1244
|
if (!(!this.publicProgram && type === 'offline')) return [3 /*break*/, 16];
|
|
1245
1245
|
serverRes = {
|
|
@@ -1339,14 +1339,14 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1339
1339
|
return [3 /*break*/, 5];
|
|
1340
1340
|
case 15:
|
|
1341
1341
|
this._offlineUpdates.splice(this._offlineUpdates.map(function (a) { return a['id_socket']; }).indexOf(ws['id_socket']), 1);
|
|
1342
|
-
return [3 /*break*/,
|
|
1342
|
+
return [3 /*break*/, 23];
|
|
1343
1343
|
case 16:
|
|
1344
1344
|
dataCopy = __spreadArray([], __read(msg), false);
|
|
1345
1345
|
route = dataCopy.shift();
|
|
1346
1346
|
date = dataCopy.shift();
|
|
1347
1347
|
msgId = dataCopy.shift();
|
|
1348
1348
|
msgType = dataCopy.shift();
|
|
1349
|
-
if (!(msgType === 'method')) return [3 /*break*/,
|
|
1349
|
+
if (!(msgType === 'method')) return [3 /*break*/, 23];
|
|
1350
1350
|
methodName = dataCopy.shift();
|
|
1351
1351
|
if (ws['user_readonly']) {
|
|
1352
1352
|
return [2 /*return*/];
|
|
@@ -1400,8 +1400,26 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1400
1400
|
this._websocketManager.send(ws, ack);
|
|
1401
1401
|
}
|
|
1402
1402
|
method = this._methodManager.getMethod(methodName);
|
|
1403
|
+
forceWorker = this._isWorkersEnabled && !!(method === null || method === void 0 ? void 0 : method.forceWorker);
|
|
1403
1404
|
targetWorkerIndex = this._isWorkersEnabled && method ? method.targetWorkerIndex : null;
|
|
1404
1405
|
hasWorkerForMethod = this._workerDispatcherManager ? this._workerDispatcherManager.hasWorkersForMethod(methodName) : false;
|
|
1406
|
+
isExcludedFromWorker = (methodName === 'find' ||
|
|
1407
|
+
methodName === 'insertDocument' ||
|
|
1408
|
+
methodName === 'countWithQuery' ||
|
|
1409
|
+
methodName === 'findOne' ||
|
|
1410
|
+
methodName === 'updateDocumentProps' ||
|
|
1411
|
+
methodName === 'findWithOptions' ||
|
|
1412
|
+
methodName === 'updateDocument' ||
|
|
1413
|
+
methodName === 'insertErrorLog' ||
|
|
1414
|
+
methodName === 'removeDocument' ||
|
|
1415
|
+
methodName === 'supportCreateBillingUser' ||
|
|
1416
|
+
methodName === 'getSignedUrl' ||
|
|
1417
|
+
methodName === 'getSignedUrls' ||
|
|
1418
|
+
methodName === 'getSignedUrlWithId' ||
|
|
1419
|
+
methodName === 'incorrectUser' ||
|
|
1420
|
+
methodName === 'reloadWS' ||
|
|
1421
|
+
methodName === 'reconnectWS' ||
|
|
1422
|
+
methodName === 'disconnectWS');
|
|
1405
1423
|
if (targetWorkerIndex && this._isWorkersEnabled && !hasWorkerForMethod) {
|
|
1406
1424
|
errorRes = {
|
|
1407
1425
|
messageId: msgId,
|
|
@@ -1413,42 +1431,38 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1413
1431
|
}
|
|
1414
1432
|
return [2 /*return*/];
|
|
1415
1433
|
}
|
|
1416
|
-
|
|
1434
|
+
shouldDispatchToWorker = (method &&
|
|
1417
1435
|
!method.skipWorker &&
|
|
1418
1436
|
this._isWorkersEnabled &&
|
|
1419
1437
|
this._workerDispatcherManager &&
|
|
1420
|
-
hasWorkerForMethod &&
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
methodName !== 'countWithQuery' &&
|
|
1424
|
-
methodName !== 'findOne' &&
|
|
1425
|
-
methodName !== 'updateDocumentProps' &&
|
|
1426
|
-
methodName !== 'findWithOptions' &&
|
|
1427
|
-
methodName !== 'updateDocument' &&
|
|
1428
|
-
methodName !== 'insertErrorLog' &&
|
|
1429
|
-
methodName !== 'removeDocument' &&
|
|
1430
|
-
methodName !== 'supportCreateBillingUser' &&
|
|
1431
|
-
methodName !== 'getSignedUrl' &&
|
|
1432
|
-
methodName !== 'getSignedUrls' &&
|
|
1433
|
-
methodName !== 'getSignedUrlWithId' &&
|
|
1434
|
-
methodName !== 'incorrectUser' &&
|
|
1435
|
-
methodName !== 'reloadWS' &&
|
|
1436
|
-
methodName !== 'reconnectWS' &&
|
|
1437
|
-
methodName !== 'disconnectWS')) return [3 /*break*/, 20];
|
|
1438
|
+
(hasWorkerForMethod || forceWorker) &&
|
|
1439
|
+
(forceWorker || !isExcludedFromWorker));
|
|
1440
|
+
if (!shouldDispatchToWorker) return [3 /*break*/, 20];
|
|
1438
1441
|
this._workerDispatcherManager.sendClientTask(msgId, methodName, dataCopy, {
|
|
1439
1442
|
id_user: ws['id_user'],
|
|
1440
1443
|
user: ws['user'],
|
|
1441
1444
|
id_ws: ws['id_socket']
|
|
1442
1445
|
});
|
|
1443
|
-
return [3 /*break*/,
|
|
1444
|
-
case 20:
|
|
1446
|
+
return [3 /*break*/, 23];
|
|
1447
|
+
case 20:
|
|
1448
|
+
if (!(forceWorker && this._isWorkersEnabled)) return [3 /*break*/, 21];
|
|
1449
|
+
errorRes = {
|
|
1450
|
+
messageId: msgId,
|
|
1451
|
+
hasError: true,
|
|
1452
|
+
data: "Worker dispatch required for method ".concat(methodName, ", but no worker dispatcher is available.")
|
|
1453
|
+
};
|
|
1454
|
+
if (ws && ws.readyState === ws.OPEN) {
|
|
1455
|
+
this._websocketManager.send(ws, errorRes);
|
|
1456
|
+
}
|
|
1457
|
+
return [3 /*break*/, 23];
|
|
1458
|
+
case 21:
|
|
1445
1459
|
// No worker available: do method locally
|
|
1446
1460
|
return [4 /*yield*/, this.callMethodLocally(ws, msgId, methodName, dataCopy)];
|
|
1447
|
-
case
|
|
1461
|
+
case 22:
|
|
1448
1462
|
// No worker available: do method locally
|
|
1449
1463
|
_b.sent();
|
|
1450
|
-
_b.label =
|
|
1451
|
-
case
|
|
1464
|
+
_b.label = 23;
|
|
1465
|
+
case 23: return [2 /*return*/];
|
|
1452
1466
|
}
|
|
1453
1467
|
});
|
|
1454
1468
|
});
|
package/server-app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server-app.ts"],"names":[],"mappings":"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","file":"server-app.js","sourcesContent":["import * as express from 'express';\nimport * as xmlParser from 'express-xml-bodyparser';\nimport { createServer, Server } from 'http';\nimport * as jwt from 'jsonwebtoken';\nimport * as moment from 'moment-timezone';\nimport { unpack } from 'msgpackr';\nimport { URL } from 'url';\nimport * as WebSocket from 'ws';\n\nimport { Logs } from './collections/log.collection';\nimport { Users } from './collections/user.collection';\nimport { CronManager } from './managers/cron.manager';\nimport { MethodManager } from './managers/method.manager';\nimport { MonitorManager, MonitorManagerFunction } from './managers/monitor.manager';\nimport { SubscriptionManager } from './managers/subscription.manager';\nimport { ServerResponseModel } from './models/server-message.model';\nimport { dateReviver, getBinarySize, isAllowedOrigin, objectIdHexString } from './util/common';\nimport { ErrorReporter } from './util/error-reporter';\nimport { ensureErrorWithCorrelation } from './util/error-tracking';\n\nimport { MongoNetworkTimeoutError } from 'mongodb';\nimport { setupAuthRoutes } from './http/auth';\nimport { setupHealthRoutes } from './http/health';\nimport { setupHomeRoutes } from './http/home';\nimport { setupSlowQueryPublicationRoutes } from './http/slow-query-publication';\n\nimport { WebSocketManager } from './managers/websocket.manager';\nimport { WorkerDispatcherManager } from './managers/worker-dispatcher.manager';\nimport { WorkerServerManager } from './managers/worker-server.manager';\nimport { ResolveIOServer } from './resolveio-server-app';\n\nexport class ResolveIOMainServer {\n\tprivate _app: express.Application;\n\tprivate _serverHTTP: Server;\n\tprivate _portHTTP: number;\n\tprivate _serverWSS: WebSocket.Server;\n\tprivate _offlineUpdates = [];\n\tpublic sesMail = false;\n\tprivate publicProgram = false;\n\tprivate _rebootFlag = false;\n\n\tprivate LOGGER = 'ERROR'; //ERROR / DEBUG\n\n\tprivate _websocketManager: WebSocketManager;\n\tprivate _monitorManager: MonitorManager;\n\tprivate _monitorManagerFunction: MonitorManagerFunction;\n\tprivate _subscriptionManager: SubscriptionManager;\n\tprivate _methodManager: MethodManager;\n\tprivate _cronManager: CronManager;\n\tprivate _clientRoutes: string[] = [];\n\tprivate _workerDispatcherManager: WorkerDispatcherManager;\n\tprivate _workerServerManager: WorkerServerManager;\n\tprivate _httpServerClosePromise: Promise<void> | null = null;\n\tprivate _websocketServerClosePromise: Promise<void> | null = null;\n\n\tprivate _serverStartTime: Date;\n\tprivate _lastErrorMsg: Date = null;\n\n\tprivate _debugMsgRecv = 0;\n\tprivate _debugMsgQueue = 0;\n\n\tprivate _isWorkersEnabled = false;\n\tprivate _isWorkerInstance = false;\n\n\tprivate _safeShutdown = false;\n\n\tprivate readonly _clientHeartbeatIntervalMs = 20000;\n\tprivate readonly _clientHeartbeatInitialDelayMs = 5000;\n\tprivate readonly _clientHeartbeatBackpressureBytes = 5 * 1024 * 1024;\n\n\tconstructor() {}\n\n\tstatic async create() {\n\t\tconst resolveioMainServer = new ResolveIOMainServer();\n\t\tawait resolveioMainServer.initialize();\n\t\treturn resolveioMainServer;\n\t}\n\n\tprivate async initialize() {\n\t\tthis._serverStartTime = new Date();\n\t\tthis._lastErrorMsg = null;\n\t\tthis._monitorManager = await MonitorManager.create();\n\t\tthis._monitorManagerFunction = new MonitorManagerFunction();\n\n\t\t// Check for workers and decide what to start\n\t\tthis._isWorkersEnabled = process.env.IS_WORKERS_ENABLED === 'true';\n\t\tthis._isWorkerInstance = process.env.IS_WORKER_INSTANCE === 'true';\n\n\t\tsetInterval(() => {\n\t\t\tif (this._methodManager && this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Msg Recv Hits', this._debugMsgRecv);\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Msg Queue Hits', this._debugMsgQueue);\n\t\t\t}\n\n\t\t\tthis._debugMsgQueue = 0;\n\t\t\tthis._debugMsgRecv = 0;\n\t\t}, 60000);\n\n\t\tprocess.removeAllListeners('unhandledRejection');\n\n\t\tprocess.on('unhandledRejection', async (error, rej) => {\n\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(error);\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.error(new Date(), 'ERROR DETECTED w/ Debug Flag Active: unhandledRejection', [normalizedError, rej, { correlationId }]);\n\t\t\t}\n\n\t\t\t// Condition to filter out the MongoError with specific codes\n\t\t\tif (normalizedError && normalizedError['name'] === 'MongoError' && (normalizedError['code'] === 48 || normalizedError['code'] === 26 || normalizedError['code'] === 11000 || normalizedError['code'] === 251)) {\n\t\t\t\treturn; // Simply return without doing anything further\n\t\t\t}\n\n\t\t\t// if (normalizedError && normalizedError['name'] === 'MongoServerError' && (!initServerFlag || normalizedError['code'] === 26 || normalizedError['code'] === 11000 || normalizedError['code'] === 86 || normalizedError['code'] === 251)) {\n\t\t\t// \treturn; // Simply return without doing anything further\n\t\t\t// }\n\n\t\t\tif (normalizedError && normalizedError['name'] === 'MongoServerError') {\n\t\t\t\treturn; // Simply return without doing anything further\n\t\t\t}\n\n\t\t\tconst errorDetails = {\n\t\t\t\tid: correlationId,\n\t\t\t\tname: normalizedError?.name,\n\t\t\t\tmessage: normalizedError?.message,\n\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\tcode: normalizedError?.code,\n\t\t\t\tcodeName: normalizedError?.codeName\n\t\t\t};\n\n\t\t\tconsole.error(new Date(), 'Unhandled Rejection at Promise', [errorDetails]);\n\t\t\t\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\t// If this is a MongoNetworkTimeoutError, handle it specifically\n\t\t\tif (normalizedError && (normalizedError['name'] === 'MongoNetworkTimeoutError' || normalizedError instanceof MongoNetworkTimeoutError)) {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\t// Exiting the process\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (normalizedError && normalizedError['name'] === 'MongoError' && normalizedError['message'] === 'not master') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (normalizedError && normalizedError['name'] === 'MongoError' && normalizedError['message'] === 'not master and slaveOk=false') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (normalizedError && normalizedError['name'] !== 'StatusError' && normalizedError['message'] !== '') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this.reportServerError(\n\t\t\t\t\t\t'SERVER - Unhandled Rejection - ' + ResolveIOServer.getServerConfig()['CLIENT_NAME'],\n\t\t\t\t\t\tcorrelationId,\n\t\t\t\t\t\terrorDetails,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontext: 'unhandledRejection',\n\t\t\t\t\t\t\tscenario: 'General'\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tprocess.on('uncaughtException', async error => {\n\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(error);\n\t\t\tconsole.error(normalizedError, 'Uncaught Exception thrown', { correlationId });\n\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t}, 60000);\n\t\t\t\t\n\t\t\t\tconst errorDetails = {\n\t\t\t\t\tid: correlationId,\n\t\t\t\t\tname: normalizedError?.name,\n\t\t\t\t\tmessage: normalizedError?.message,\n\t\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\t\tcode: normalizedError?.code,\n\t\t\t\t\tcodeName: normalizedError?.codeName\n\t\t\t\t};\n\n\t\t\t\tawait this.reportServerError(\n\t\t\t\t\t'SERVER - Unhandled Exception - ' + ResolveIOServer.getServerConfig()['CLIENT_NAME'],\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\terrorDetails,\n\t\t\t\t\t{\n\t\t\t\t\t\tcontext: 'uncaughtException'\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t//PM2 wants to reboot/restart\n\t\tprocess.on('SIGINT', async () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\ttry {\n\t\t\t\tawait this.shutdownNetworkServers();\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing network servers (SIGINT)', error);\n\t\t\t}\n\t\t\tawait this.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGTERM', async () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\ttry {\n\t\t\t\tawait this.shutdownNetworkServers();\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing network servers (SIGTERM)', error);\n\t\t\t}\n\t\t\tawait this.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGQUIT', async () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\ttry {\n\t\t\t\tawait this.shutdownNetworkServers();\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing network servers (SIGQUIT)', error);\n\t\t\t}\n\t\t\tawait this.safeShutdown();\n\t\t});\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Starting ResolveIO Server');\n\t\t}\n\n\t\tif (this._isWorkersEnabled) {\n\t\t\tif (this._isWorkerInstance) {\n\t\t\t\tconsole.log('Running as a Worker instance', process.env.NODE_APP_INSTANCE);\n\t\t\t\tthis._methodManager = MethodManager.create(null, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\t\tthis._workerServerManager = WorkerServerManager.create(this._methodManager, this.getServerConfig());\n\n\t\t\t\tif (process.env.WORKER_INDEX === '0') {\n\t\t\t\t\tthis._cronManager = CronManager.create();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.log('Running as a Server instance', process.env.NODE_APP_INSTANCE);\n\t\t\t\tthis._websocketManager = WebSocketManager.create(this);\n\t\t\t\tthis._methodManager = MethodManager.create(this._websocketManager, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\t\tthis._workerDispatcherManager = WorkerDispatcherManager.create(this._websocketManager, this._methodManager);\n\t\t\t\tthis._subscriptionManager = SubscriptionManager.create(this._serverWSS, ResolveIOServer.getServerConfig(), this._monitorManagerFunction);\n\t\t\t\tthis.startServerInstance();\n\t\t\t\tthis.listen();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconsole.log('Running with Workers Disabled', process.env.NODE_APP_INSTANCE);\n\t\t\tthis._websocketManager = WebSocketManager.create(this);\n\t\t\tthis._methodManager = MethodManager.create(this._websocketManager, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\tthis._subscriptionManager = SubscriptionManager.create(this._serverWSS, ResolveIOServer.getServerConfig(), this._monitorManagerFunction);\n\t\t\tthis._cronManager = CronManager.create();\n\t\t\tthis.startServerInstance();\n\t\t\tthis.listen();\n\t\t}\n\t}\n\n\tprivate async shutdownNetworkServers() {\n\t\tawait this.closeWebSocketServerGracefully();\n\t\tawait this.closeHttpServerGracefully();\n\t}\n\n\tprivate async closeHttpServerGracefully() {\n\t\tif (!this._serverHTTP) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._httpServerClosePromise !== null) {\n\t\t\tawait this._httpServerClosePromise;\n\t\t\treturn;\n\t\t}\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tthis._httpServerClosePromise = new Promise(resolve => {\n\t\t\ttry {\n\t\t\t\tthis._serverHTTP.close(error => {\n\t\t\t\t\tif (error && error['code'] !== 'ERR_SERVER_NOT_RUNNING') {\n\t\t\t\t\t\tconsole.error(new Date(), 'Error closing HTTP server before shutdown', error);\n\t\t\t\t\t}\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tif (error && error['code'] !== 'ERR_SERVER_NOT_RUNNING') {\n\t\t\t\t\tconsole.error(new Date(), 'Error closing HTTP server before shutdown', error);\n\t\t\t\t}\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\n\t\tawait this._httpServerClosePromise;\n\t}\n\n\tprivate async closeWebSocketServerGracefully() {\n\t\tif (!this._serverWSS) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._websocketServerClosePromise !== null) {\n\t\t\tawait this._websocketServerClosePromise;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._serverWSS.clients.forEach(ws => {\n\t\t\ttry {\n\t\t\t\tws.close(1001, 'Server restarting');\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing WebSocket client before shutdown', error);\n\t\t\t}\n\t\t});\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tthis._websocketServerClosePromise = new Promise(resolve => {\n\t\t\ttry {\n\t\t\t\tthis._serverWSS.close(error => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tconsole.error(new Date(), 'Error closing WebSocket server before shutdown', error);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing WebSocket server before shutdown', error);\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\n\t\tawait this._websocketServerClosePromise;\n\t}\n\n\tprivate startServerInstance() {\n\t\t// Start express app\n\t\tthis._app = express();\n\n\t\t// Use built-in express JSON parser\n\t\tthis._app.use(express.json({\n\t\t\tlimit: '50mb',\n\t\t\treviver: dateReviver // Note: 'reviver' is an option for JSON.parse, which can be passed here\n\t\t}));\n\n\t\t// Use built-in express URL-encoded parser\n\t\tthis._app.use(express.urlencoded({\n\t\t\tlimit: '50mb',\n\t\t\textended: true, // `extended` must be explicitly true or false\n\t\t\tparameterLimit: 1000000\n\t\t}));\n\n\n\t\tthis._app.use(xmlParser());\n\t\t\n\t\t// Set port\n\t\tthis._portHTTP = process.env.NODE_APP_INSTANCE ? parseInt('808' + process.env.NODE_APP_INSTANCE) : 8080;\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup ports');\n\t\t}\n\n\t\t// Create http server and websock server\n\t\tthis.createServer();\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Create server');\n\t\t}\n\n\t\t// Set CORS\n\t\tthis._app.use(function (req, res, next) {\n\t\t\tres.setHeader('Access-Control-Allow-Origin', '*');\n\t\t\tres.setHeader('Access-Control-Allow-Methods', 'GET, POST');\n\t\t\tres.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');\n\t\t\tres.setHeader('Access-Control-Allow-Credentials', 'false');\n\t\t\tnext();\n\t\t});\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup cors');\n\t\t}\n\n\t\t// Set up http login route\n\t\tsetupAuthRoutes(this, this._app, ResolveIOServer.getServerConfig());\n\t\tsetupHealthRoutes(this._app);\n\t\tsetupSlowQueryPublicationRoutes(this._app);\n\n\t\tif (ResolveIOServer.getServerConfig()['CLIENT_NAME'] === 'ResolveIO' || this.publicProgram) {\n\t\t\tsetupHomeRoutes(this, this._app, ResolveIOServer.getServerConfig());\n\t\t}\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup express routes');\n\t\t}\n\t}\n\n\tprivate async safeShutdown() {\n\t\tif (!this._safeShutdown) {\n\t\t\tconsole.log(new Date(), 'Safe Shutdown Command Received');\n\t\t}\n\n\t\tif (\n\t\t\t!this._monitorManagerFunction.getActiveMonitorFunctions().length\n\t\t\t&& !this._offlineUpdates.length && (!this._workerDispatcherManager || this._workerDispatcherManager.isSafeShutdown())\n\t\t) {\n\t\t\tif (ResolveIOServer.getMongoConnection()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait ResolveIOServer.getMongoConnection().close(false);\n\t\t\t\t\tconsole.log(new Date(), 'Safe Exit Complete, Process Exit');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\t\t\t\tcatch { \n\t\t\t\t\tprocess.exit(1); \n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (!this._safeShutdown) {\n\t\t\t\tthis._safeShutdown = true;\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._safeShutdown = false;\n\t\t\t\t}, 1000);\n\n\t\t\t\tconsole.log(new Date(), 'Safe Exit In Progress', \n\t\t\t\t\tthis._monitorManagerFunction.getActiveMonitorFunctions().length,\n\t\t\t\t\tthis._offlineUpdates.length\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsetImmediate(async () => {\n\t\t\t\tawait this.safeShutdown();\n\t\t\t});\n\t\t}\n\t}\n\n\tgetIsWorkersEnabled() {\n\t\treturn this._isWorkersEnabled;\n\t}\n\n\tgetIsWorkerInstance() {\n\t\treturn this._isWorkerInstance;\n\t}\n\n\tpublic getWSList() {\n\t\tlet res = [];\n\t\tthis._serverWSS.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_socket']);\n\t\t});\n\t\treturn res;\n\t}\n\n\tpublic getWSUserList() {\n\t\tlet res = [];\n\t\tthis._serverWSS.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_user']);\n\t\t});\n\t\treturn res;\n\t}\n\n\tpublic getHTTPServer() {\n\t\treturn this._serverHTTP;\n\t}\n\n\tpublic getCronManager() {\n\t\treturn this._cronManager;\n\t}\n\n\tprivate async reportServerError(\n\t\tsubject: string,\n\t\tcorrelationId: string,\n\t\tcontext: Record<string, any>,\n\t\tmeta?: Record<string, any>,\n\t\tseverity = 'error',\n\t\tstackOverride?: string\n\t) {\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\tconst metadata = Object.assign({}, meta || {});\n\t\tif (correlationId && !metadata.correlationId) {\n\t\t\tmetadata.correlationId = correlationId;\n\t\t}\n\n\t\tawait ErrorReporter.report({\n\t\t\tsourceApp: 'server-app',\n\t\t\tmessage: subject,\n\t\t\tenvironment: config?.ROOT_URL || process.env.NODE_ENV || 'unknown',\n\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\tclientName: config?.CLIENT_NAME,\n\t\t\tseverity,\n\t\t\tstack: stackOverride || (typeof context?.stack === 'string' ? context.stack : undefined),\n\t\t\tcontext,\n\t\t\tmetadata,\n\t\t\tcorrelationId\n\t\t});\n\t}\n\n\tpublic getMethodManager() {\n\t\treturn this._methodManager;\n\t}\n\n\tpublic getSubscriptionManager() {\n\t\treturn this._subscriptionManager;\n\t}\n\n\tpublic getMonitorManager() {\n\t\treturn this._monitorManager;\n\t}\n\n\tpublic getRebootFlag() {\n\t\treturn this._rebootFlag;\n\t}\n\n\tpublic getWebSocketManager(): WebSocketManager {\n\t\treturn this._websocketManager;\n\t}\n\n\tprivate createServer(): void {\n\t\tthis._serverHTTP = createServer(this._app);\n\t\tthis._serverHTTP.keepAliveTimeout = 65000;\n\t\tthis._serverHTTP.headersTimeout = 66000;\n\n\t\tthis._serverWSS = new WebSocket.Server({\n\t\t\tserver: this._serverHTTP,\n\t\t\tverifyClient: this.publicProgram ? null : (info, cb) => {\n\t\t\t\tif (this._rebootFlag) {\n\t\t\t\t\tcb(false, 409, 'Unable To Process');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\t\tconsole.log('Verify Client', info, cb);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If it's a worker, we might skip token checks or do a simple check:\n\t\t\t\t\tif (info.req.url && info.req.url.includes('workerToken=')) {\n\t\t\t\t\t\tlet requestUrl: URL;\n\t\t\t\t\t\tlet rootUrl = ResolveIOServer.getServerConfig()['ROOT_URL'] || 'http://localhost';\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequestUrl = new URL(info.req.url, rootUrl);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\tcb(false, 400, 'Bad Request');\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet workerToken = requestUrl.searchParams.get('workerToken') || '';\n\t\t\t\t\t\tlet workerIndex = requestUrl.searchParams.get('workerIndex');\n\t\t\t\t\t\tlet workerInstance = requestUrl.searchParams.get('workerInstance');\n\n\t\t\t\t\t\tif (workerToken === ResolveIOServer.getServerConfig()['WORKER_TOKEN']) {\n\t\t\t\t\t\t\tif (workerIndex) {\n\t\t\t\t\t\t\t\tinfo.req['workerIndex'] = workerIndex;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (workerInstance) {\n\t\t\t\t\t\t\t\tinfo.req['workerInstance'] = workerInstance;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet infoData = (<string>info.req.headers['sec-websocket-protocol']).split(/,/);\n\n\t\t\t\t\tif (!isAllowedOrigin(info.origin, ResolveIOServer.getServerConfig())) {\n\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet token = infoData[0];\n\t\t\t\t\t\tif (!token) {\n\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tjwt.verify(token, ResolveIOServer.getServerConfig()['JWT_SECRET'], async (err, decoded) => {\n\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinfo.req['id_user'] = decoded['id_user'];\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tlet user = await Users.findById(decoded['id_user']);\n\t\t\t\t\t\t\t\t\t\tif (user) {\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user'] = user.fullname;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user_readonly'] = user.readonly || false;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['doc_user'] = user;\n\t\t\t\t\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Listen for connections from clients or workers.\n\t */\n\tprivate listen(): void {\n\t\tconst host = process.env.RESOLVEIO_BIND_HOST || '127.0.0.1';\n\t\tthis._serverHTTP.listen(this._portHTTP, host, () => {\n\t\t\tconsole.log('Running HTTP/WS server on port %s', this._portHTTP);\n\t\t});\n\n\t\t\tthis._serverWSS.on('connection', async (ws, req) => {\n\t\t\t\tif (req.url && req.url.includes('workerToken=')) {\n\t\t\t\t\t// It's a WORKER\n\t\t\t\t\tlet workerId = objectIdHexString();\n\t\t\t\t\tws['id_worker'] = workerId;\n\t\t\t\t\tlet workerIndex = null;\n\t\t\t\t\tlet workerInstance = null;\n\t\t\t\t\tws['supportsBinary'] = true;\n\n\t\t\t\t\tif (req.url) {\n\t\t\t\t\t\tlet rootUrl = ResolveIOServer.getServerConfig()['ROOT_URL'] || 'http://localhost';\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlet requestUrl = new URL(req.url, rootUrl);\n\t\t\t\t\t\t\tworkerIndex = requestUrl.searchParams.get('workerIndex');\n\t\t\t\t\t\t\tworkerInstance = requestUrl.searchParams.get('workerInstance');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\tworkerIndex = null;\n\t\t\t\t\t\t\tworkerInstance = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!workerIndex && req['workerIndex']) {\n\t\t\t\t\t\tworkerIndex = req['workerIndex'];\n\t\t\t\t\t}\n\t\t\t\t\tif (!workerInstance && req['workerInstance']) {\n\t\t\t\t\t\tworkerInstance = req['workerInstance'];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (workerIndex !== null && workerIndex !== undefined) {\n\t\t\t\t\t\tws['workerIndex'] = workerIndex;\n\t\t\t\t\t}\n\t\t\t\t\tif (workerInstance !== null && workerInstance !== undefined) {\n\t\t\t\t\t\tws['workerInstance'] = workerInstance;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet workerIndexForLog = ws['workerIndex'] || 'UNKNOWN';\n\t\t\t\t\tlet workerInstanceForLog = ws['workerInstance'] || 'UNKNOWN';\n\t\t\t\t\tconsole.log(new Date(), 'Worker Connected', workerIndexForLog, workerInstanceForLog);\n\n\t\t\t\t\tthis._workerDispatcherManager.addWorker(ws);\n\n\t\t\t\tlet interval = null;\n\t\t\t\tlet lastComm = null;\n\n\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'ping');\n\t\n\t\t\t\tinterval = setInterval(() => {\n\t\t\t\t\tif (!lastComm) {\n\t\t\t\t\t\tthis._workerDispatcherManager.disconnectWorker(ws['id_worker']);\n\t\t\t\t\t\tws.close();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlastComm = null;\n\t\t\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'ping');\n\t\t\t\t\t}\n\t\t\t\t}, 30000);\n\n\t\t\t\t\tws.on('message', (message: WebSocket.RawData) => {\n\t\t\t\t\t\tif (typeof message === 'string') {\n\t\t\t\t\t\t\tif (message === 'ping') {\n\t\t\t\t\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'pong');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (message === 'pong') {\n\t\t\t\t\t\t\t\tlastComm = new Date();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthis._workerDispatcherManager.handleWorkerMessage(ws['id_worker'], message);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet buffer: Buffer;\n\n\t\t\t\t\t\tif (Buffer.isBuffer(message)) {\n\t\t\t\t\t\t\tbuffer = message;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (Array.isArray(message)) {\n\t\t\t\t\t\t\tconst chunks = message as unknown as ReadonlyArray<Uint8Array>;\n\t\t\t\t\t\t\tbuffer = Buffer.concat(chunks);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (message instanceof ArrayBuffer) {\n\t\t\t\t\t\t\tbuffer = Buffer.from(message);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (ArrayBuffer.isView(message)) {\n\t\t\t\t\t\t\tconst view = message as NodeJS.ArrayBufferView;\n\t\t\t\t\t\t\tbuffer = Buffer.from(view.buffer, view.byteOffset, view.byteLength);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tbuffer = Buffer.from(message as any);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (buffer.length === 4) {\n\t\t\t\t\t\t\tlet heartbeat = buffer.toString('utf8');\n\n\t\t\t\t\t\t\tif (heartbeat === 'ping') {\n\t\t\t\t\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'pong');\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (heartbeat === 'pong') {\n\t\t\t\t\t\t\t\tlastComm = new Date();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._workerDispatcherManager.handleWorkerMessage(ws['id_worker'], buffer);\n\t\t\t\t\t});\n\n\t\t\t\tws.on('close', () => {\n\t\t\t\t\tthis._workerDispatcherManager.disconnectWorker(ws['id_worker']);\n\n\t\t\t\t\tconsole.log(new Date(), 'Worker disconnected:', workerId);\n\t\t\t\t\t\n\t\t\t\t\tif (interval) {\n\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tws.on('error', (error) => {\n\t\t\t\t\tthis._workerDispatcherManager.disconnectWorker(ws['id_worker']);\n\n\t\t\t\t\tconsole.error('Error on WS Worker', error);\n\t\t\t\t\tws.close();\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Normal client\n\t\t\t\tws['id_socket'] = objectIdHexString();\n\t\t\t\tws['supportsBinary'] = true;\n\t\t\t\tws['id_user'] = req['id_user'];\n\t\t\t\tws['user'] = req['user'];\n\t\t\t\tws['user_readonly'] = req['user_readonly'];\n\t\t\t\tws['doc_user'] = req['doc_user'];\n\n\t\t\t\tthis._websocketManager.addWebSocket(ws);\n\n\t\t\t\tawait this._subscriptionManager.createLoggedInUser(ws['id_socket']);\n\t\t\t\t\n\t\t\t\tsetTimeout(async () => {\n\t\t\t\t\tawait this.triggerClientHeartbeat(ws);\n\t\t\t\t}, this._clientHeartbeatInitialDelayMs);\n\n\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\tconsole.log('Connection from user: ' + req['user']);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tws['isAlive'] = true;\n\t\t\t\tws['retryCnt'] = 0;\n\t\t\t\tws.on('pong', () => {\n\t\t\t\t\tws['isAlive'] = true;\n\t\t\t\t\tws['pongTime'] = new Date();\n\t\t\t\t\tif (ws['pingTime']) {\n\t\t\t\t\t\tws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();\n\t\t\t\t\t\tthis._subscriptionManager.loggedInLatency(ws);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tws.on('message', async (message: WebSocket.RawData) => {\n\t\t\t\t\tthis._debugMsgRecv += 1;\n\t\t\t\t\tlet socketData = [];\n\t\t\t\t\tlet usedBinary = false;\n\t\t\t\t\tlet bufferPayload: Buffer;\n\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (typeof message === 'string') {\n\t\t\t\t\t\t\tif (message === 'ping' || message === 'pong') {\n\t\t\t\t\t\t\t\tsocketData = message;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tsocketData = JSON.parse(message, dateReviver);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (Buffer.isBuffer(message)) {\n\t\t\t\t\t\t\tbufferPayload = message;\n\t\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (Array.isArray(message)) {\n\t\t\t\t\t\t\tbufferPayload = Buffer.concat(message as unknown as ReadonlyArray<Uint8Array>);\n\t\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (message instanceof ArrayBuffer) {\n\t\t\t\t\t\t\tbufferPayload = Buffer.from(message);\n\t\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t\t}\n\t\t\t\t\telse if (ArrayBuffer.isView(message)) {\n\t\t\t\t\t\tconst view = message as NodeJS.ArrayBufferView;\n\t\t\t\t\t\tbufferPayload = Buffer.from(view.buffer, view.byteOffset, view.byteLength);\n\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Unsupported WebSocket message type: ' + typeof message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (e) {\n\t\t\t\t\tconsole.log('Error - WS message parse', e);\n\t\t\t\t\tconst correlationId = objectIdHexString();\n\t\t\t\t\tconst context = {\n\t\t\t\t\t\trawBinary: bufferPayload ? bufferPayload.toString('base64') : undefined,\n\t\t\t\t\t\trawMessage: typeof message === 'string' ? message : undefined,\n\t\t\t\t\t\terror: e instanceof Error ? { name: e.name, message: e.message, stack: e.stack } : e\n\t\t\t\t\t};\n\t\t\t\t\tawait this.reportServerError(\n\t\t\t\t\t\t'SERVER - JSON Parse Error - ' + ResolveIOServer.getServerConfig()['CLIENT_NAME'],\n\t\t\t\t\t\tcorrelationId,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t{ context: 'websocket-message-parse' },\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\te instanceof Error ? e.stack : undefined\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t\tif (usedBinary) {\n\t\t\t\t\t\tws['supportsBinary'] = true;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// call our existing processSocketMessage\n\t\t\t\t\tawait this.processSocketMessage(ws, socketData);\n\t\t\t\t})\n\t\t\t\t.on('end', () => {\n\t\t\t\t\tws.close();\n\t\t\t\t})\n\t\t\t\t.on('error', () => {\n\t\t\t\t\tws.close()\n\t\t\t\t})\n\t\t\t\t.on('close', async () => {\n\t\t\t\t\tawait this.unsubscribeWS(ws);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// Keep alive timer\n\t\tsetInterval(async () => {\n\t\t\tfor (let ws of this._serverWSS.clients) {\n\t\t\t\tif (ws['pingTime'] && Date.now() - ws['pingTime'].getTime() >= this._clientHeartbeatIntervalMs) {\n\t\t\t\t\tif (this.shouldDeferHeartbeat(ws)) {\n\t\t\t\t\t\tws['isAlive'] = true;\n\t\t\t\t\t\tws['retryCnt'] = 0;\n\t\t\t\t\t\tws['pingTime'] = new Date();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ws['isAlive'] === false) {\n\t\t\t\t\t\tws['retryCnt']++;\n\t\t\t\t\t\tif (ws['retryCnt'] >= 3) {\n\t\t\t\t\t\t\tawait this.unsubscribeWS(ws);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait this.triggerClientHeartbeat(ws);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tws['retryCnt'] = 0;\n\t\t\t\t\t\tws['isAlive'] = false;\n\t\t\t\t\t\tawait this.triggerClientHeartbeat(ws);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, this._clientHeartbeatIntervalMs);\n\t}\n\n\tprivate async processSocketMessage(ws: WebSocket, socketData: any) {\n\t\tif (typeof socketData === 'string' && socketData === 'ping') {\n\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\tws.send('pong');\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\telse if (typeof socketData === 'string' && socketData === 'pong') {\n\t\t\tws['isAlive'] = true;\n\t\t\tws['pongTime'] = new Date();\n\t\t\tws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();\n\t\t\tthis._subscriptionManager.loggedInLatency(ws);\n\t\t\treturn;\n\t\t}\n\n\t\t// If the top level is not an array, let's skip\n\t\tif (!Array.isArray(socketData[0])) {\n\t\t\tconsole.log('Invalid message format (expected array of arrays)', socketData);\n\t\t\treturn;\n\t\t}\n\n\t\t// Handle each sub-message\n\t\tfor (let message of socketData) {\n\t\t\tawait this.handleClientMessage(ws, message);\n\t\t}\n\t}\n\n\tprivate decodeBufferPayload(buffer: Buffer): { data: any; usedBinary: boolean } {\n\t\tconst textPayload = buffer.toString('utf8');\n\n\t\tif (this.looksLikeTextPayload(textPayload)) {\n\t\t\ttry {\n\t\t\t\treturn { data: this.parseTextFallback(textPayload), usedBinary: false };\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\t// fall through to attempt MessagePack decode\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\treturn { data: unpack(buffer), usedBinary: true };\n\t\t}\n\t\tcatch (binaryErr) {\n\t\t\ttry {\n\t\t\t\treturn { data: this.parseTextFallback(textPayload), usedBinary: false };\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\tthrow binaryErr;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate parseTextFallback(rawMessage: string): any {\n\t\tif (rawMessage === 'ping' || rawMessage === 'pong') {\n\t\t\treturn rawMessage;\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.parse(rawMessage, dateReviver);\n\t\t}\n\t\tcatch (err) {\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tprivate looksLikeTextPayload(text: string): boolean {\n\t\tif (!text) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst trimmed = text.trim();\n\t\tif (!trimmed) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst first = trimmed[0];\n\t\treturn first === '[' || first === '{' || first === '\"' || first === 'p' || first === 'P';\n\t}\n\n\tprivate async triggerClientHeartbeat(ws: WebSocket): Promise<void> {\n\t\tif (!ws || ws.readyState !== ws.OPEN) {\n\t\t\treturn;\n\t\t}\n\n\t\tws['pingTime'] = new Date();\n\n\t\ttry {\n\t\t\tif (typeof ws.ping === 'function') {\n\t\t\t\tws.ping();\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tif (this._methodManager?.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Ping Frame', err);\n\t\t\t}\n\t\t\tawait this.unsubscribeWS(ws);\n\t\t\treturn;\n\t\t}\n\n\t\tws.send('ping', async (error) => {\n\t\t\tif (error) {\n\t\t\t\tif (this._methodManager?.getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Ping');\n\t\t\t\t}\n\t\t\t\tawait this.unsubscribeWS(ws);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate shouldDeferHeartbeat(ws: WebSocket): boolean {\n\t\tif (!ws || ws.readyState !== ws.OPEN) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst bufferedAmount = typeof ws.bufferedAmount === 'number' ? ws.bufferedAmount : 0;\n\t\treturn bufferedAmount >= this._clientHeartbeatBackpressureBytes;\n\t}\n\n\tprivate async handleClientMessage(ws: WebSocket, msg: any[]): Promise<void> {\n\t\t// This is basically your old logic from processSocketMessage,\n\t\t// but we'll insert our worker-queue logic for \"method\" calls.\n\n\t\tlet messageRoute = msg[0];\n\t\tlet messageDate = msg[1];\n\t\tlet messageId = msg[2];\n\t\tlet type = msg[3];\n\n\t\tif (!this.publicProgram && this._clientRoutes.some(a => messageRoute.includes(a)) && !ws['doc_user'].roles.groups.some(a => a.views.some(b => messageRoute.includes(b) || b.includes(messageRoute))) && !ws['doc_user'].roles.super_admin) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (type === 'subscription') {\n\t\t\tlet subType = msg[4];\n\t\t\tlet pub = msg[5];\n\n\t\t\tif (subType === 'sub') {\n\t\t\t\tawait this._subscriptionManager.subscribe(messageRoute, messageDate, ws, messageId, pub, msg.slice(6));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._subscriptionManager.unsubscribe(messageRoute, messageDate, ws, messageId, pub, msg.slice(6));\n\t\t\t}\n\t\t}\n\t\telse if (!this.publicProgram && type === 'offline') {\n\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\tmessageId: messageId,\n\t\t\t\thasError: false,\n\t\t\t\tdata: 'ACK'\n\t\t\t};\n\n\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\tthis._websocketManager.send(ws, serverRes);\n\t\t\t}\n\n\t\t\tthis._offlineUpdates.push(ws);\n\t\t\tlet offlineUpdates = msg[4];\n\n\t\t\tfor (let i = 0; i < offlineUpdates.length; i++) {\n\t\t\t\tlet update = offlineUpdates[i];\n\n\t\t\t\tlet data = update.data;\n\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet updateRoute = data.shift();\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet updateDate = data.shift();\n\t\t\t\tlet updateMessageId = data.shift();\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet updateType = data.shift();\n\t\t\t\tlet method = data.shift();\n\n\t\t\t\tlet serverResMethod: ServerResponseModel = {\n\t\t\t\t\tmessageId: updateMessageId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: 'ACK'\n\t\t\t\t};\n\n\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\tthis._websocketManager.send(ws, serverResMethod);\n\t\t\t\t}\n\n\t\t\t\tif (method === 'insertDocument' && data[0] === 'driver-gps') {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'getDrivers' && method !== 'processAirdropDistribution' && method !== 'qbHandleResponse') {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([data])) < 1000000 ? JSON.stringify([data], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait Logs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([data])) < 1000000 ? JSON.stringify([data], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\tclient: 'ResolveIO',\n\t\t\t\t\t\t\tinstance: 'backend.resolveio.com',\n\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this._methodManager.callMethod.call(Object.assign({}, this._methodManager, MethodManager.prototype, {id_user: ws['id_user'], user: ws['user'], id_ws: ws['id_socket']}), method, ...data);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tconsole.log(new Date(), 'Offline Error', JSON.stringify(err, null, 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (method === 'updateDocumentOffline' || method === 'updateDocumentPropsOffline') {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(data[0]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log('Offline - Could not find method: ' + method);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._offlineUpdates.splice(this._offlineUpdates.map(a => a['id_socket']).indexOf(ws['id_socket']), 1);\n\t\t}\n\t\telse {\n\t\t\t// It's presumably a 'method' or something else\n\t\t\tlet dataCopy = [...msg];\n\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tlet route = dataCopy.shift();\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tlet date = dataCopy.shift();\n\t\t\tlet msgId = dataCopy.shift();\n\t\t\tlet msgType = dataCopy.shift();\n\t\t\t\n\t\t\tif (msgType === 'method') {\n\t\t\t\tlet methodName = dataCopy.shift();\n\n\t\t\t\tif (ws['user_readonly']) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (methodName !== 'reportBuilderGetResults' && methodName !== 'reportBuilderGetDistinctValue' && methodName !== 'reportBuilderBuildTree' && methodName !== 'generatePDF' && methodName !== 'getWOOfflineData' && methodName !== 'countQuery' && methodName !== 'countWithQuery' && methodName !== 'countCollectionWithQuery' && methodName !== 'find' && methodName !== 'findOne' && methodName !== 'findWithOptions' && methodName !== 'getDrivers' && methodName !== 'processAirdropDistribution') {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([dataCopy])) < 1000000 ? JSON.stringify([dataCopy], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait Logs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([dataCopy])) < 1000000 ? JSON.stringify([dataCopy], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\tclient: 'ResolveIO',\n\t\t\t\t\t\t\tinstance: 'backend.resolveio.com',\n\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Immediately ACK\n\t\t\t\tlet ack: ServerResponseModel = {\n\t\t\t\t\tmessageId: msgId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: 'ACK'\n\t\t\t\t};\n\n\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\tthis._websocketManager.send(ws, ack);\n\t\t\t\t}\n\n\t\t\t\tlet method = this._methodManager.getMethod(methodName);\n\t\t\t\tconst targetWorkerIndex = this._isWorkersEnabled && method ? method.targetWorkerIndex : null;\n\t\t\t\tconst hasWorkerForMethod = this._workerDispatcherManager ? this._workerDispatcherManager.hasWorkersForMethod(methodName) : false;\n\n\t\t\t\tif (targetWorkerIndex && this._isWorkersEnabled && !hasWorkerForMethod) {\n\t\t\t\t\tconst errorRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: msgId,\n\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\tdata: `Target worker ${targetWorkerIndex} not available for method ${methodName}`\n\t\t\t\t\t};\n\n\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\tthis._websocketManager.send(ws, errorRes);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (method &&\n\t\t\t\t\t!method.skipWorker &&\n\t\t\t\t\tthis._isWorkersEnabled &&\n\t\t\t\t\tthis._workerDispatcherManager &&\n\t\t\t\t\thasWorkerForMethod &&\n\t\t\t\t\tmethodName !== 'find' &&\n\t\t\t\t\tmethodName !== 'insertDocument' &&\n\t\t\t\t\tmethodName !== 'countWithQuery' &&\n\t\t\t\t\tmethodName !== 'findOne' &&\n\t\t\t\t\tmethodName !== 'updateDocumentProps' &&\n\t\t\t\t\tmethodName !== 'findWithOptions' &&\n\t\t\t\t\tmethodName !== 'updateDocument' &&\n\t\t\t\t\tmethodName !== 'insertErrorLog' &&\n\t\t\t\t\tmethodName !== 'removeDocument' &&\n\t\t\t\t\tmethodName !== 'supportCreateBillingUser' &&\n\t\t\t\t\tmethodName !== 'getSignedUrl' &&\n\t\t\t\t\tmethodName !== 'getSignedUrls' &&\n\t\t\t\t\tmethodName !== 'getSignedUrlWithId' &&\n\t\t\t\t\tmethodName !== 'incorrectUser' &&\n\t\t\t\t\tmethodName !== 'reloadWS' &&\n\t\t\t\t\tmethodName !== 'reconnectWS' &&\n\t\t\t\t\tmethodName !== 'disconnectWS'\n\t\t\t\t) {\n\t\t\t\t\tthis._workerDispatcherManager.sendClientTask(msgId, methodName, dataCopy, {\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\t\tid_ws: ws['id_socket']\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// No worker available: do method locally\n\t\t\t\t\tawait this.callMethodLocally(ws, msgId, methodName, dataCopy);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * callMethodLocally is your old approach for invoking the method in-process.\n\t */\n\tprivate async callMethodLocally(ws: WebSocket, messageId: number, method: string, params: any[]) {\n\t\tlet serverRes: ServerResponseModel = {\n\t\t\tmessageId: messageId,\n\t\t\thasError: false,\n\t\t\tdata: null\n\t\t};\n\n\t\ttry {\n\t\t\t// You can keep your logging code (LogMethodLatencies, Logs.insertOne, etc.)\n\t\t\tlet result = await this._methodManager.callMethod.call(\n\t\t\t\tObject.assign({}, this._methodManager, MethodManager.prototype, {\n\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\tid_ws: ws['id_socket']\n\t\t\t\t}),\n\t\t\t\tmethod,\n\t\t\t\t...params\n\t\t\t);\n\n\t\t\tserverRes.data = result;\n\t\t}\n\t\tcatch (err) {\n\t\t\tserverRes.hasError = true;\n\t\t\tserverRes.data = err || 'Unknown error';\n\t\t}\n\n\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\tthis._websocketManager.send(ws, serverRes);\n\t\t}\n\t}\n\n\t\n\n\t/**\n\t * Cleanly remove a client from the subscription manager, etc.\n\t */\n\tpublic async unsubscribeWS(ws: WebSocket) {\n\t\tif (this._subscriptionManager && this._methodManager.getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Server App', 'Unsub WS', ws['user'], ws['id_socket']);\n\t\t}\n\t\tawait this._subscriptionManager.unsubscribeAll(ws);\n\t\tws.removeAllListeners();\n\t\tws = null;\n\t}\n\n\tpublic getApp() {\n\t\treturn this._app;\n\t}\n\n\tpublic getServerConfig() {\n\t\treturn ResolveIOServer.getServerConfig();\n\t}\n\n\tpublic getWorkerDispatcherManager() {\n\t\treturn this._workerDispatcherManager;\n\t}\n\n\tpublic getWorkerServerManager() {\n\t\treturn this._workerServerManager;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/server-app.ts"],"names":[],"mappings":"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","file":"server-app.js","sourcesContent":["import * as express from 'express';\nimport * as xmlParser from 'express-xml-bodyparser';\nimport { createServer, Server } from 'http';\nimport * as jwt from 'jsonwebtoken';\nimport * as moment from 'moment-timezone';\nimport { unpack } from 'msgpackr';\nimport { URL } from 'url';\nimport * as WebSocket from 'ws';\n\nimport { Logs } from './collections/log.collection';\nimport { Users } from './collections/user.collection';\nimport { CronManager } from './managers/cron.manager';\nimport { MethodManager } from './managers/method.manager';\nimport { MonitorManager, MonitorManagerFunction } from './managers/monitor.manager';\nimport { SubscriptionManager } from './managers/subscription.manager';\nimport { ServerResponseModel } from './models/server-message.model';\nimport { dateReviver, getBinarySize, isAllowedOrigin, objectIdHexString } from './util/common';\nimport { ErrorReporter } from './util/error-reporter';\nimport { ensureErrorWithCorrelation } from './util/error-tracking';\n\nimport { MongoNetworkTimeoutError } from 'mongodb';\nimport { setupAuthRoutes } from './http/auth';\nimport { setupHealthRoutes } from './http/health';\nimport { setupHomeRoutes } from './http/home';\nimport { setupSlowQueryPublicationRoutes } from './http/slow-query-publication';\n\nimport { WebSocketManager } from './managers/websocket.manager';\nimport { WorkerDispatcherManager } from './managers/worker-dispatcher.manager';\nimport { WorkerServerManager } from './managers/worker-server.manager';\nimport { ResolveIOServer } from './resolveio-server-app';\n\nexport class ResolveIOMainServer {\n\tprivate _app: express.Application;\n\tprivate _serverHTTP: Server;\n\tprivate _portHTTP: number;\n\tprivate _serverWSS: WebSocket.Server;\n\tprivate _offlineUpdates = [];\n\tpublic sesMail = false;\n\tprivate publicProgram = false;\n\tprivate _rebootFlag = false;\n\n\tprivate LOGGER = 'ERROR'; //ERROR / DEBUG\n\n\tprivate _websocketManager: WebSocketManager;\n\tprivate _monitorManager: MonitorManager;\n\tprivate _monitorManagerFunction: MonitorManagerFunction;\n\tprivate _subscriptionManager: SubscriptionManager;\n\tprivate _methodManager: MethodManager;\n\tprivate _cronManager: CronManager;\n\tprivate _clientRoutes: string[] = [];\n\tprivate _workerDispatcherManager: WorkerDispatcherManager;\n\tprivate _workerServerManager: WorkerServerManager;\n\tprivate _httpServerClosePromise: Promise<void> | null = null;\n\tprivate _websocketServerClosePromise: Promise<void> | null = null;\n\n\tprivate _serverStartTime: Date;\n\tprivate _lastErrorMsg: Date = null;\n\n\tprivate _debugMsgRecv = 0;\n\tprivate _debugMsgQueue = 0;\n\n\tprivate _isWorkersEnabled = false;\n\tprivate _isWorkerInstance = false;\n\n\tprivate _safeShutdown = false;\n\n\tprivate readonly _clientHeartbeatIntervalMs = 20000;\n\tprivate readonly _clientHeartbeatInitialDelayMs = 5000;\n\tprivate readonly _clientHeartbeatBackpressureBytes = 5 * 1024 * 1024;\n\n\tconstructor() {}\n\n\tstatic async create() {\n\t\tconst resolveioMainServer = new ResolveIOMainServer();\n\t\tawait resolveioMainServer.initialize();\n\t\treturn resolveioMainServer;\n\t}\n\n\tprivate async initialize() {\n\t\tthis._serverStartTime = new Date();\n\t\tthis._lastErrorMsg = null;\n\t\tthis._monitorManager = await MonitorManager.create();\n\t\tthis._monitorManagerFunction = new MonitorManagerFunction();\n\n\t\t// Check for workers and decide what to start\n\t\tthis._isWorkersEnabled = process.env.IS_WORKERS_ENABLED === 'true';\n\t\tthis._isWorkerInstance = process.env.IS_WORKER_INSTANCE === 'true';\n\n\t\tsetInterval(() => {\n\t\t\tif (this._methodManager && this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Msg Recv Hits', this._debugMsgRecv);\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Msg Queue Hits', this._debugMsgQueue);\n\t\t\t}\n\n\t\t\tthis._debugMsgQueue = 0;\n\t\t\tthis._debugMsgRecv = 0;\n\t\t}, 60000);\n\n\t\tprocess.removeAllListeners('unhandledRejection');\n\n\t\tprocess.on('unhandledRejection', async (error, rej) => {\n\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(error);\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.error(new Date(), 'ERROR DETECTED w/ Debug Flag Active: unhandledRejection', [normalizedError, rej, { correlationId }]);\n\t\t\t}\n\n\t\t\t// Condition to filter out the MongoError with specific codes\n\t\t\tif (normalizedError && normalizedError['name'] === 'MongoError' && (normalizedError['code'] === 48 || normalizedError['code'] === 26 || normalizedError['code'] === 11000 || normalizedError['code'] === 251)) {\n\t\t\t\treturn; // Simply return without doing anything further\n\t\t\t}\n\n\t\t\t// if (normalizedError && normalizedError['name'] === 'MongoServerError' && (!initServerFlag || normalizedError['code'] === 26 || normalizedError['code'] === 11000 || normalizedError['code'] === 86 || normalizedError['code'] === 251)) {\n\t\t\t// \treturn; // Simply return without doing anything further\n\t\t\t// }\n\n\t\t\tif (normalizedError && normalizedError['name'] === 'MongoServerError') {\n\t\t\t\treturn; // Simply return without doing anything further\n\t\t\t}\n\n\t\t\tconst errorDetails = {\n\t\t\t\tid: correlationId,\n\t\t\t\tname: normalizedError?.name,\n\t\t\t\tmessage: normalizedError?.message,\n\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\tcode: normalizedError?.code,\n\t\t\t\tcodeName: normalizedError?.codeName\n\t\t\t};\n\n\t\t\tconsole.error(new Date(), 'Unhandled Rejection at Promise', [errorDetails]);\n\t\t\t\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\t// If this is a MongoNetworkTimeoutError, handle it specifically\n\t\t\tif (normalizedError && (normalizedError['name'] === 'MongoNetworkTimeoutError' || normalizedError instanceof MongoNetworkTimeoutError)) {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\t// Exiting the process\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (normalizedError && normalizedError['name'] === 'MongoError' && normalizedError['message'] === 'not master') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (normalizedError && normalizedError['name'] === 'MongoError' && normalizedError['message'] === 'not master and slaveOk=false') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (normalizedError && normalizedError['name'] !== 'StatusError' && normalizedError['message'] !== '') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this.reportServerError(\n\t\t\t\t\t\t'SERVER - Unhandled Rejection - ' + ResolveIOServer.getServerConfig()['CLIENT_NAME'],\n\t\t\t\t\t\tcorrelationId,\n\t\t\t\t\t\terrorDetails,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontext: 'unhandledRejection',\n\t\t\t\t\t\t\tscenario: 'General'\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tprocess.on('uncaughtException', async error => {\n\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(error);\n\t\t\tconsole.error(normalizedError, 'Uncaught Exception thrown', { correlationId });\n\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t}, 60000);\n\t\t\t\t\n\t\t\t\tconst errorDetails = {\n\t\t\t\t\tid: correlationId,\n\t\t\t\t\tname: normalizedError?.name,\n\t\t\t\t\tmessage: normalizedError?.message,\n\t\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\t\tcode: normalizedError?.code,\n\t\t\t\t\tcodeName: normalizedError?.codeName\n\t\t\t\t};\n\n\t\t\t\tawait this.reportServerError(\n\t\t\t\t\t'SERVER - Unhandled Exception - ' + ResolveIOServer.getServerConfig()['CLIENT_NAME'],\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\terrorDetails,\n\t\t\t\t\t{\n\t\t\t\t\t\tcontext: 'uncaughtException'\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t//PM2 wants to reboot/restart\n\t\tprocess.on('SIGINT', async () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\ttry {\n\t\t\t\tawait this.shutdownNetworkServers();\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing network servers (SIGINT)', error);\n\t\t\t}\n\t\t\tawait this.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGTERM', async () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\ttry {\n\t\t\t\tawait this.shutdownNetworkServers();\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing network servers (SIGTERM)', error);\n\t\t\t}\n\t\t\tawait this.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGQUIT', async () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\ttry {\n\t\t\t\tawait this.shutdownNetworkServers();\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing network servers (SIGQUIT)', error);\n\t\t\t}\n\t\t\tawait this.safeShutdown();\n\t\t});\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Starting ResolveIO Server');\n\t\t}\n\n\t\tif (this._isWorkersEnabled) {\n\t\t\tif (this._isWorkerInstance) {\n\t\t\t\tconsole.log('Running as a Worker instance', process.env.NODE_APP_INSTANCE);\n\t\t\t\tthis._methodManager = MethodManager.create(null, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\t\tthis._workerServerManager = WorkerServerManager.create(this._methodManager, this.getServerConfig());\n\n\t\t\t\tif (process.env.WORKER_INDEX === '0') {\n\t\t\t\t\tthis._cronManager = CronManager.create();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.log('Running as a Server instance', process.env.NODE_APP_INSTANCE);\n\t\t\t\tthis._websocketManager = WebSocketManager.create(this);\n\t\t\t\tthis._methodManager = MethodManager.create(this._websocketManager, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\t\tthis._workerDispatcherManager = WorkerDispatcherManager.create(this._websocketManager, this._methodManager);\n\t\t\t\tthis._subscriptionManager = SubscriptionManager.create(this._serverWSS, ResolveIOServer.getServerConfig(), this._monitorManagerFunction);\n\t\t\t\tthis.startServerInstance();\n\t\t\t\tthis.listen();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconsole.log('Running with Workers Disabled', process.env.NODE_APP_INSTANCE);\n\t\t\tthis._websocketManager = WebSocketManager.create(this);\n\t\t\tthis._methodManager = MethodManager.create(this._websocketManager, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\tthis._subscriptionManager = SubscriptionManager.create(this._serverWSS, ResolveIOServer.getServerConfig(), this._monitorManagerFunction);\n\t\t\tthis._cronManager = CronManager.create();\n\t\t\tthis.startServerInstance();\n\t\t\tthis.listen();\n\t\t}\n\t}\n\n\tprivate async shutdownNetworkServers() {\n\t\tawait this.closeWebSocketServerGracefully();\n\t\tawait this.closeHttpServerGracefully();\n\t}\n\n\tprivate async closeHttpServerGracefully() {\n\t\tif (!this._serverHTTP) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._httpServerClosePromise !== null) {\n\t\t\tawait this._httpServerClosePromise;\n\t\t\treturn;\n\t\t}\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tthis._httpServerClosePromise = new Promise(resolve => {\n\t\t\ttry {\n\t\t\t\tthis._serverHTTP.close(error => {\n\t\t\t\t\tif (error && error['code'] !== 'ERR_SERVER_NOT_RUNNING') {\n\t\t\t\t\t\tconsole.error(new Date(), 'Error closing HTTP server before shutdown', error);\n\t\t\t\t\t}\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tif (error && error['code'] !== 'ERR_SERVER_NOT_RUNNING') {\n\t\t\t\t\tconsole.error(new Date(), 'Error closing HTTP server before shutdown', error);\n\t\t\t\t}\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\n\t\tawait this._httpServerClosePromise;\n\t}\n\n\tprivate async closeWebSocketServerGracefully() {\n\t\tif (!this._serverWSS) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._websocketServerClosePromise !== null) {\n\t\t\tawait this._websocketServerClosePromise;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._serverWSS.clients.forEach(ws => {\n\t\t\ttry {\n\t\t\t\tws.close(1001, 'Server restarting');\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing WebSocket client before shutdown', error);\n\t\t\t}\n\t\t});\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tthis._websocketServerClosePromise = new Promise(resolve => {\n\t\t\ttry {\n\t\t\t\tthis._serverWSS.close(error => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tconsole.error(new Date(), 'Error closing WebSocket server before shutdown', error);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing WebSocket server before shutdown', error);\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\n\t\tawait this._websocketServerClosePromise;\n\t}\n\n\tprivate startServerInstance() {\n\t\t// Start express app\n\t\tthis._app = express();\n\n\t\t// Use built-in express JSON parser\n\t\tthis._app.use(express.json({\n\t\t\tlimit: '50mb',\n\t\t\treviver: dateReviver // Note: 'reviver' is an option for JSON.parse, which can be passed here\n\t\t}));\n\n\t\t// Use built-in express URL-encoded parser\n\t\tthis._app.use(express.urlencoded({\n\t\t\tlimit: '50mb',\n\t\t\textended: true, // `extended` must be explicitly true or false\n\t\t\tparameterLimit: 1000000\n\t\t}));\n\n\n\t\tthis._app.use(xmlParser());\n\t\t\n\t\t// Set port\n\t\tthis._portHTTP = process.env.NODE_APP_INSTANCE ? parseInt('808' + process.env.NODE_APP_INSTANCE) : 8080;\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup ports');\n\t\t}\n\n\t\t// Create http server and websock server\n\t\tthis.createServer();\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Create server');\n\t\t}\n\n\t\t// Set CORS\n\t\tthis._app.use(function (req, res, next) {\n\t\t\tres.setHeader('Access-Control-Allow-Origin', '*');\n\t\t\tres.setHeader('Access-Control-Allow-Methods', 'GET, POST');\n\t\t\tres.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');\n\t\t\tres.setHeader('Access-Control-Allow-Credentials', 'false');\n\t\t\tnext();\n\t\t});\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup cors');\n\t\t}\n\n\t\t// Set up http login route\n\t\tsetupAuthRoutes(this, this._app, ResolveIOServer.getServerConfig());\n\t\tsetupHealthRoutes(this._app);\n\t\tsetupSlowQueryPublicationRoutes(this._app);\n\n\t\tif (ResolveIOServer.getServerConfig()['CLIENT_NAME'] === 'ResolveIO' || this.publicProgram) {\n\t\t\tsetupHomeRoutes(this, this._app, ResolveIOServer.getServerConfig());\n\t\t}\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup express routes');\n\t\t}\n\t}\n\n\tprivate async safeShutdown() {\n\t\tif (!this._safeShutdown) {\n\t\t\tconsole.log(new Date(), 'Safe Shutdown Command Received');\n\t\t}\n\n\t\tif (\n\t\t\t!this._monitorManagerFunction.getActiveMonitorFunctions().length\n\t\t\t&& !this._offlineUpdates.length && (!this._workerDispatcherManager || this._workerDispatcherManager.isSafeShutdown())\n\t\t) {\n\t\t\tif (ResolveIOServer.getMongoConnection()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait ResolveIOServer.getMongoConnection().close(false);\n\t\t\t\t\tconsole.log(new Date(), 'Safe Exit Complete, Process Exit');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\t\t\t\tcatch { \n\t\t\t\t\tprocess.exit(1); \n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (!this._safeShutdown) {\n\t\t\t\tthis._safeShutdown = true;\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._safeShutdown = false;\n\t\t\t\t}, 1000);\n\n\t\t\t\tconsole.log(new Date(), 'Safe Exit In Progress', \n\t\t\t\t\tthis._monitorManagerFunction.getActiveMonitorFunctions().length,\n\t\t\t\t\tthis._offlineUpdates.length\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsetImmediate(async () => {\n\t\t\t\tawait this.safeShutdown();\n\t\t\t});\n\t\t}\n\t}\n\n\tgetIsWorkersEnabled() {\n\t\treturn this._isWorkersEnabled;\n\t}\n\n\tgetIsWorkerInstance() {\n\t\treturn this._isWorkerInstance;\n\t}\n\n\tpublic getWSList() {\n\t\tlet res = [];\n\t\tthis._serverWSS.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_socket']);\n\t\t});\n\t\treturn res;\n\t}\n\n\tpublic getWSUserList() {\n\t\tlet res = [];\n\t\tthis._serverWSS.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_user']);\n\t\t});\n\t\treturn res;\n\t}\n\n\tpublic getHTTPServer() {\n\t\treturn this._serverHTTP;\n\t}\n\n\tpublic getCronManager() {\n\t\treturn this._cronManager;\n\t}\n\n\tprivate async reportServerError(\n\t\tsubject: string,\n\t\tcorrelationId: string,\n\t\tcontext: Record<string, any>,\n\t\tmeta?: Record<string, any>,\n\t\tseverity = 'error',\n\t\tstackOverride?: string\n\t) {\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\tconst metadata = Object.assign({}, meta || {});\n\t\tif (correlationId && !metadata.correlationId) {\n\t\t\tmetadata.correlationId = correlationId;\n\t\t}\n\n\t\tawait ErrorReporter.report({\n\t\t\tsourceApp: 'server-app',\n\t\t\tmessage: subject,\n\t\t\tenvironment: config?.ROOT_URL || process.env.NODE_ENV || 'unknown',\n\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\tclientName: config?.CLIENT_NAME,\n\t\t\tseverity,\n\t\t\tstack: stackOverride || (typeof context?.stack === 'string' ? context.stack : undefined),\n\t\t\tcontext,\n\t\t\tmetadata,\n\t\t\tcorrelationId\n\t\t});\n\t}\n\n\tpublic getMethodManager() {\n\t\treturn this._methodManager;\n\t}\n\n\tpublic getSubscriptionManager() {\n\t\treturn this._subscriptionManager;\n\t}\n\n\tpublic getMonitorManager() {\n\t\treturn this._monitorManager;\n\t}\n\n\tpublic getRebootFlag() {\n\t\treturn this._rebootFlag;\n\t}\n\n\tpublic getWebSocketManager(): WebSocketManager {\n\t\treturn this._websocketManager;\n\t}\n\n\tprivate createServer(): void {\n\t\tthis._serverHTTP = createServer(this._app);\n\t\tthis._serverHTTP.keepAliveTimeout = 65000;\n\t\tthis._serverHTTP.headersTimeout = 66000;\n\n\t\tthis._serverWSS = new WebSocket.Server({\n\t\t\tserver: this._serverHTTP,\n\t\t\tverifyClient: this.publicProgram ? null : (info, cb) => {\n\t\t\t\tif (this._rebootFlag) {\n\t\t\t\t\tcb(false, 409, 'Unable To Process');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\t\tconsole.log('Verify Client', info, cb);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If it's a worker, we might skip token checks or do a simple check:\n\t\t\t\t\tif (info.req.url && info.req.url.includes('workerToken=')) {\n\t\t\t\t\t\tlet requestUrl: URL;\n\t\t\t\t\t\tlet rootUrl = ResolveIOServer.getServerConfig()['ROOT_URL'] || 'http://localhost';\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequestUrl = new URL(info.req.url, rootUrl);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\tcb(false, 400, 'Bad Request');\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet workerToken = requestUrl.searchParams.get('workerToken') || '';\n\t\t\t\t\t\tlet workerIndex = requestUrl.searchParams.get('workerIndex');\n\t\t\t\t\t\tlet workerInstance = requestUrl.searchParams.get('workerInstance');\n\n\t\t\t\t\t\tif (workerToken === ResolveIOServer.getServerConfig()['WORKER_TOKEN']) {\n\t\t\t\t\t\t\tif (workerIndex) {\n\t\t\t\t\t\t\t\tinfo.req['workerIndex'] = workerIndex;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (workerInstance) {\n\t\t\t\t\t\t\t\tinfo.req['workerInstance'] = workerInstance;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet infoData = (<string>info.req.headers['sec-websocket-protocol']).split(/,/);\n\n\t\t\t\t\tif (!isAllowedOrigin(info.origin, ResolveIOServer.getServerConfig())) {\n\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet token = infoData[0];\n\t\t\t\t\t\tif (!token) {\n\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tjwt.verify(token, ResolveIOServer.getServerConfig()['JWT_SECRET'], async (err, decoded) => {\n\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinfo.req['id_user'] = decoded['id_user'];\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tlet user = await Users.findById(decoded['id_user']);\n\t\t\t\t\t\t\t\t\t\tif (user) {\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user'] = user.fullname;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user_readonly'] = user.readonly || false;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['doc_user'] = user;\n\t\t\t\t\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Listen for connections from clients or workers.\n\t */\n\tprivate listen(): void {\n\t\tconst host = process.env.RESOLVEIO_BIND_HOST || '127.0.0.1';\n\t\tthis._serverHTTP.listen(this._portHTTP, host, () => {\n\t\t\tconsole.log('Running HTTP/WS server on port %s', this._portHTTP);\n\t\t});\n\n\t\t\tthis._serverWSS.on('connection', async (ws, req) => {\n\t\t\t\tif (req.url && req.url.includes('workerToken=')) {\n\t\t\t\t\t// It's a WORKER\n\t\t\t\t\tlet workerId = objectIdHexString();\n\t\t\t\t\tws['id_worker'] = workerId;\n\t\t\t\t\tlet workerIndex = null;\n\t\t\t\t\tlet workerInstance = null;\n\t\t\t\t\tws['supportsBinary'] = true;\n\n\t\t\t\t\tif (req.url) {\n\t\t\t\t\t\tlet rootUrl = ResolveIOServer.getServerConfig()['ROOT_URL'] || 'http://localhost';\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlet requestUrl = new URL(req.url, rootUrl);\n\t\t\t\t\t\t\tworkerIndex = requestUrl.searchParams.get('workerIndex');\n\t\t\t\t\t\t\tworkerInstance = requestUrl.searchParams.get('workerInstance');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\tworkerIndex = null;\n\t\t\t\t\t\t\tworkerInstance = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!workerIndex && req['workerIndex']) {\n\t\t\t\t\t\tworkerIndex = req['workerIndex'];\n\t\t\t\t\t}\n\t\t\t\t\tif (!workerInstance && req['workerInstance']) {\n\t\t\t\t\t\tworkerInstance = req['workerInstance'];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (workerIndex !== null && workerIndex !== undefined) {\n\t\t\t\t\t\tws['workerIndex'] = workerIndex;\n\t\t\t\t\t}\n\t\t\t\t\tif (workerInstance !== null && workerInstance !== undefined) {\n\t\t\t\t\t\tws['workerInstance'] = workerInstance;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet workerIndexForLog = ws['workerIndex'] || 'UNKNOWN';\n\t\t\t\t\tlet workerInstanceForLog = ws['workerInstance'] || 'UNKNOWN';\n\t\t\t\t\tconsole.log(new Date(), 'Worker Connected', workerIndexForLog, workerInstanceForLog);\n\n\t\t\t\t\tthis._workerDispatcherManager.addWorker(ws);\n\n\t\t\t\tlet interval = null;\n\t\t\t\tlet lastComm = null;\n\n\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'ping');\n\t\n\t\t\t\tinterval = setInterval(() => {\n\t\t\t\t\tif (!lastComm) {\n\t\t\t\t\t\tthis._workerDispatcherManager.disconnectWorker(ws['id_worker']);\n\t\t\t\t\t\tws.close();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlastComm = null;\n\t\t\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'ping');\n\t\t\t\t\t}\n\t\t\t\t}, 30000);\n\n\t\t\t\t\tws.on('message', (message: WebSocket.RawData) => {\n\t\t\t\t\t\tif (typeof message === 'string') {\n\t\t\t\t\t\t\tif (message === 'ping') {\n\t\t\t\t\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'pong');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (message === 'pong') {\n\t\t\t\t\t\t\t\tlastComm = new Date();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthis._workerDispatcherManager.handleWorkerMessage(ws['id_worker'], message);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet buffer: Buffer;\n\n\t\t\t\t\t\tif (Buffer.isBuffer(message)) {\n\t\t\t\t\t\t\tbuffer = message;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (Array.isArray(message)) {\n\t\t\t\t\t\t\tconst chunks = message as unknown as ReadonlyArray<Uint8Array>;\n\t\t\t\t\t\t\tbuffer = Buffer.concat(chunks);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (message instanceof ArrayBuffer) {\n\t\t\t\t\t\t\tbuffer = Buffer.from(message);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (ArrayBuffer.isView(message)) {\n\t\t\t\t\t\t\tconst view = message as NodeJS.ArrayBufferView;\n\t\t\t\t\t\t\tbuffer = Buffer.from(view.buffer, view.byteOffset, view.byteLength);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tbuffer = Buffer.from(message as any);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (buffer.length === 4) {\n\t\t\t\t\t\t\tlet heartbeat = buffer.toString('utf8');\n\n\t\t\t\t\t\t\tif (heartbeat === 'ping') {\n\t\t\t\t\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'pong');\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (heartbeat === 'pong') {\n\t\t\t\t\t\t\t\tlastComm = new Date();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._workerDispatcherManager.handleWorkerMessage(ws['id_worker'], buffer);\n\t\t\t\t\t});\n\n\t\t\t\tws.on('close', () => {\n\t\t\t\t\tthis._workerDispatcherManager.disconnectWorker(ws['id_worker']);\n\n\t\t\t\t\tconsole.log(new Date(), 'Worker disconnected:', workerId);\n\t\t\t\t\t\n\t\t\t\t\tif (interval) {\n\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tws.on('error', (error) => {\n\t\t\t\t\tthis._workerDispatcherManager.disconnectWorker(ws['id_worker']);\n\n\t\t\t\t\tconsole.error('Error on WS Worker', error);\n\t\t\t\t\tws.close();\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Normal client\n\t\t\t\tws['id_socket'] = objectIdHexString();\n\t\t\t\tws['supportsBinary'] = true;\n\t\t\t\tws['id_user'] = req['id_user'];\n\t\t\t\tws['user'] = req['user'];\n\t\t\t\tws['user_readonly'] = req['user_readonly'];\n\t\t\t\tws['doc_user'] = req['doc_user'];\n\n\t\t\t\tthis._websocketManager.addWebSocket(ws);\n\n\t\t\t\tawait this._subscriptionManager.createLoggedInUser(ws['id_socket']);\n\t\t\t\t\n\t\t\t\tsetTimeout(async () => {\n\t\t\t\t\tawait this.triggerClientHeartbeat(ws);\n\t\t\t\t}, this._clientHeartbeatInitialDelayMs);\n\n\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\tconsole.log('Connection from user: ' + req['user']);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tws['isAlive'] = true;\n\t\t\t\tws['retryCnt'] = 0;\n\t\t\t\tws.on('pong', () => {\n\t\t\t\t\tws['isAlive'] = true;\n\t\t\t\t\tws['pongTime'] = new Date();\n\t\t\t\t\tif (ws['pingTime']) {\n\t\t\t\t\t\tws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();\n\t\t\t\t\t\tthis._subscriptionManager.loggedInLatency(ws);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tws.on('message', async (message: WebSocket.RawData) => {\n\t\t\t\t\tthis._debugMsgRecv += 1;\n\t\t\t\t\tlet socketData = [];\n\t\t\t\t\tlet usedBinary = false;\n\t\t\t\t\tlet bufferPayload: Buffer;\n\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (typeof message === 'string') {\n\t\t\t\t\t\t\tif (message === 'ping' || message === 'pong') {\n\t\t\t\t\t\t\t\tsocketData = message;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tsocketData = JSON.parse(message, dateReviver);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (Buffer.isBuffer(message)) {\n\t\t\t\t\t\t\tbufferPayload = message;\n\t\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (Array.isArray(message)) {\n\t\t\t\t\t\t\tbufferPayload = Buffer.concat(message as unknown as ReadonlyArray<Uint8Array>);\n\t\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (message instanceof ArrayBuffer) {\n\t\t\t\t\t\t\tbufferPayload = Buffer.from(message);\n\t\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t\t}\n\t\t\t\t\telse if (ArrayBuffer.isView(message)) {\n\t\t\t\t\t\tconst view = message as NodeJS.ArrayBufferView;\n\t\t\t\t\t\tbufferPayload = Buffer.from(view.buffer, view.byteOffset, view.byteLength);\n\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Unsupported WebSocket message type: ' + typeof message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (e) {\n\t\t\t\t\tconsole.log('Error - WS message parse', e);\n\t\t\t\t\tconst correlationId = objectIdHexString();\n\t\t\t\t\tconst context = {\n\t\t\t\t\t\trawBinary: bufferPayload ? bufferPayload.toString('base64') : undefined,\n\t\t\t\t\t\trawMessage: typeof message === 'string' ? message : undefined,\n\t\t\t\t\t\terror: e instanceof Error ? { name: e.name, message: e.message, stack: e.stack } : e\n\t\t\t\t\t};\n\t\t\t\t\tawait this.reportServerError(\n\t\t\t\t\t\t'SERVER - JSON Parse Error - ' + ResolveIOServer.getServerConfig()['CLIENT_NAME'],\n\t\t\t\t\t\tcorrelationId,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t{ context: 'websocket-message-parse' },\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\te instanceof Error ? e.stack : undefined\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t\tif (usedBinary) {\n\t\t\t\t\t\tws['supportsBinary'] = true;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// call our existing processSocketMessage\n\t\t\t\t\tawait this.processSocketMessage(ws, socketData);\n\t\t\t\t})\n\t\t\t\t.on('end', () => {\n\t\t\t\t\tws.close();\n\t\t\t\t})\n\t\t\t\t.on('error', () => {\n\t\t\t\t\tws.close()\n\t\t\t\t})\n\t\t\t\t.on('close', async () => {\n\t\t\t\t\tawait this.unsubscribeWS(ws);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// Keep alive timer\n\t\tsetInterval(async () => {\n\t\t\tfor (let ws of this._serverWSS.clients) {\n\t\t\t\tif (ws['pingTime'] && Date.now() - ws['pingTime'].getTime() >= this._clientHeartbeatIntervalMs) {\n\t\t\t\t\tif (this.shouldDeferHeartbeat(ws)) {\n\t\t\t\t\t\tws['isAlive'] = true;\n\t\t\t\t\t\tws['retryCnt'] = 0;\n\t\t\t\t\t\tws['pingTime'] = new Date();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ws['isAlive'] === false) {\n\t\t\t\t\t\tws['retryCnt']++;\n\t\t\t\t\t\tif (ws['retryCnt'] >= 3) {\n\t\t\t\t\t\t\tawait this.unsubscribeWS(ws);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait this.triggerClientHeartbeat(ws);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tws['retryCnt'] = 0;\n\t\t\t\t\t\tws['isAlive'] = false;\n\t\t\t\t\t\tawait this.triggerClientHeartbeat(ws);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, this._clientHeartbeatIntervalMs);\n\t}\n\n\tprivate async processSocketMessage(ws: WebSocket, socketData: any) {\n\t\tif (typeof socketData === 'string' && socketData === 'ping') {\n\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\tws.send('pong');\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\telse if (typeof socketData === 'string' && socketData === 'pong') {\n\t\t\tws['isAlive'] = true;\n\t\t\tws['pongTime'] = new Date();\n\t\t\tws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();\n\t\t\tthis._subscriptionManager.loggedInLatency(ws);\n\t\t\treturn;\n\t\t}\n\n\t\t// If the top level is not an array, let's skip\n\t\tif (!Array.isArray(socketData[0])) {\n\t\t\tconsole.log('Invalid message format (expected array of arrays)', socketData);\n\t\t\treturn;\n\t\t}\n\n\t\t// Handle each sub-message\n\t\tfor (let message of socketData) {\n\t\t\tawait this.handleClientMessage(ws, message);\n\t\t}\n\t}\n\n\tprivate decodeBufferPayload(buffer: Buffer): { data: any; usedBinary: boolean } {\n\t\tconst textPayload = buffer.toString('utf8');\n\n\t\tif (this.looksLikeTextPayload(textPayload)) {\n\t\t\ttry {\n\t\t\t\treturn { data: this.parseTextFallback(textPayload), usedBinary: false };\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\t// fall through to attempt MessagePack decode\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\treturn { data: unpack(buffer), usedBinary: true };\n\t\t}\n\t\tcatch (binaryErr) {\n\t\t\ttry {\n\t\t\t\treturn { data: this.parseTextFallback(textPayload), usedBinary: false };\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\tthrow binaryErr;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate parseTextFallback(rawMessage: string): any {\n\t\tif (rawMessage === 'ping' || rawMessage === 'pong') {\n\t\t\treturn rawMessage;\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.parse(rawMessage, dateReviver);\n\t\t}\n\t\tcatch (err) {\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tprivate looksLikeTextPayload(text: string): boolean {\n\t\tif (!text) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst trimmed = text.trim();\n\t\tif (!trimmed) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst first = trimmed[0];\n\t\treturn first === '[' || first === '{' || first === '\"' || first === 'p' || first === 'P';\n\t}\n\n\tprivate async triggerClientHeartbeat(ws: WebSocket): Promise<void> {\n\t\tif (!ws || ws.readyState !== ws.OPEN) {\n\t\t\treturn;\n\t\t}\n\n\t\tws['pingTime'] = new Date();\n\n\t\ttry {\n\t\t\tif (typeof ws.ping === 'function') {\n\t\t\t\tws.ping();\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tif (this._methodManager?.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Ping Frame', err);\n\t\t\t}\n\t\t\tawait this.unsubscribeWS(ws);\n\t\t\treturn;\n\t\t}\n\n\t\tws.send('ping', async (error) => {\n\t\t\tif (error) {\n\t\t\t\tif (this._methodManager?.getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Ping');\n\t\t\t\t}\n\t\t\t\tawait this.unsubscribeWS(ws);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate shouldDeferHeartbeat(ws: WebSocket): boolean {\n\t\tif (!ws || ws.readyState !== ws.OPEN) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst bufferedAmount = typeof ws.bufferedAmount === 'number' ? ws.bufferedAmount : 0;\n\t\treturn bufferedAmount >= this._clientHeartbeatBackpressureBytes;\n\t}\n\n\tprivate async handleClientMessage(ws: WebSocket, msg: any[]): Promise<void> {\n\t\t// This is basically your old logic from processSocketMessage,\n\t\t// but we'll insert our worker-queue logic for \"method\" calls.\n\n\t\tlet messageRoute = msg[0];\n\t\tlet messageDate = msg[1];\n\t\tlet messageId = msg[2];\n\t\tlet type = msg[3];\n\n\t\tif (!this.publicProgram && this._clientRoutes.some(a => messageRoute.includes(a)) && !ws['doc_user'].roles.groups.some(a => a.views.some(b => messageRoute.includes(b) || b.includes(messageRoute))) && !ws['doc_user'].roles.super_admin) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (type === 'subscription') {\n\t\t\tlet subType = msg[4];\n\t\t\tlet pub = msg[5];\n\n\t\t\tif (subType === 'sub') {\n\t\t\t\tawait this._subscriptionManager.subscribe(messageRoute, messageDate, ws, messageId, pub, msg.slice(6));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._subscriptionManager.unsubscribe(messageRoute, messageDate, ws, messageId, pub, msg.slice(6));\n\t\t\t}\n\t\t}\n\t\telse if (!this.publicProgram && type === 'offline') {\n\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\tmessageId: messageId,\n\t\t\t\thasError: false,\n\t\t\t\tdata: 'ACK'\n\t\t\t};\n\n\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\tthis._websocketManager.send(ws, serverRes);\n\t\t\t}\n\n\t\t\tthis._offlineUpdates.push(ws);\n\t\t\tlet offlineUpdates = msg[4];\n\n\t\t\tfor (let i = 0; i < offlineUpdates.length; i++) {\n\t\t\t\tlet update = offlineUpdates[i];\n\n\t\t\t\tlet data = update.data;\n\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet updateRoute = data.shift();\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet updateDate = data.shift();\n\t\t\t\tlet updateMessageId = data.shift();\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet updateType = data.shift();\n\t\t\t\tlet method = data.shift();\n\n\t\t\t\tlet serverResMethod: ServerResponseModel = {\n\t\t\t\t\tmessageId: updateMessageId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: 'ACK'\n\t\t\t\t};\n\n\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\tthis._websocketManager.send(ws, serverResMethod);\n\t\t\t\t}\n\n\t\t\t\tif (method === 'insertDocument' && data[0] === 'driver-gps') {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'getDrivers' && method !== 'processAirdropDistribution' && method !== 'qbHandleResponse') {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([data])) < 1000000 ? JSON.stringify([data], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait Logs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([data])) < 1000000 ? JSON.stringify([data], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\tclient: 'ResolveIO',\n\t\t\t\t\t\t\tinstance: 'backend.resolveio.com',\n\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this._methodManager.callMethod.call(Object.assign({}, this._methodManager, MethodManager.prototype, {id_user: ws['id_user'], user: ws['user'], id_ws: ws['id_socket']}), method, ...data);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tconsole.log(new Date(), 'Offline Error', JSON.stringify(err, null, 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (method === 'updateDocumentOffline' || method === 'updateDocumentPropsOffline') {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(data[0]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log('Offline - Could not find method: ' + method);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._offlineUpdates.splice(this._offlineUpdates.map(a => a['id_socket']).indexOf(ws['id_socket']), 1);\n\t\t}\n\t\telse {\n\t\t\t// It's presumably a 'method' or something else\n\t\t\tlet dataCopy = [...msg];\n\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tlet route = dataCopy.shift();\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tlet date = dataCopy.shift();\n\t\t\tlet msgId = dataCopy.shift();\n\t\t\tlet msgType = dataCopy.shift();\n\t\t\t\n\t\t\tif (msgType === 'method') {\n\t\t\t\tlet methodName = dataCopy.shift();\n\n\t\t\t\tif (ws['user_readonly']) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (methodName !== 'reportBuilderGetResults' && methodName !== 'reportBuilderGetDistinctValue' && methodName !== 'reportBuilderBuildTree' && methodName !== 'generatePDF' && methodName !== 'getWOOfflineData' && methodName !== 'countQuery' && methodName !== 'countWithQuery' && methodName !== 'countCollectionWithQuery' && methodName !== 'find' && methodName !== 'findOne' && methodName !== 'findWithOptions' && methodName !== 'getDrivers' && methodName !== 'processAirdropDistribution') {\n\t\t\t\t\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([dataCopy])) < 1000000 ? JSON.stringify([dataCopy], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait Logs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([dataCopy])) < 1000000 ? JSON.stringify([dataCopy], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\tclient: 'ResolveIO',\n\t\t\t\t\t\t\tinstance: 'backend.resolveio.com',\n\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Immediately ACK\n\t\t\t\tlet ack: ServerResponseModel = {\n\t\t\t\t\tmessageId: msgId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: 'ACK'\n\t\t\t\t};\n\n\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\tthis._websocketManager.send(ws, ack);\n\t\t\t\t}\n\n\t\t\t\tlet method = this._methodManager.getMethod(methodName);\n\t\t\t\tconst forceWorker = this._isWorkersEnabled && !!method?.forceWorker;\n\t\t\t\tconst targetWorkerIndex = this._isWorkersEnabled && method ? method.targetWorkerIndex : null;\n\t\t\t\tconst hasWorkerForMethod = this._workerDispatcherManager ? this._workerDispatcherManager.hasWorkersForMethod(methodName) : false;\n\t\t\t\tconst isExcludedFromWorker = (\n\t\t\t\t\tmethodName === 'find' ||\n\t\t\t\t\tmethodName === 'insertDocument' ||\n\t\t\t\t\tmethodName === 'countWithQuery' ||\n\t\t\t\t\tmethodName === 'findOne' ||\n\t\t\t\t\tmethodName === 'updateDocumentProps' ||\n\t\t\t\t\tmethodName === 'findWithOptions' ||\n\t\t\t\t\tmethodName === 'updateDocument' ||\n\t\t\t\t\tmethodName === 'insertErrorLog' ||\n\t\t\t\t\tmethodName === 'removeDocument' ||\n\t\t\t\t\tmethodName === 'supportCreateBillingUser' ||\n\t\t\t\t\tmethodName === 'getSignedUrl' ||\n\t\t\t\t\tmethodName === 'getSignedUrls' ||\n\t\t\t\t\tmethodName === 'getSignedUrlWithId' ||\n\t\t\t\t\tmethodName === 'incorrectUser' ||\n\t\t\t\t\tmethodName === 'reloadWS' ||\n\t\t\t\t\tmethodName === 'reconnectWS' ||\n\t\t\t\t\tmethodName === 'disconnectWS'\n\t\t\t\t);\n\n\t\t\t\tif (targetWorkerIndex && this._isWorkersEnabled && !hasWorkerForMethod) {\n\t\t\t\t\tconst errorRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: msgId,\n\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\tdata: `Target worker ${targetWorkerIndex} not available for method ${methodName}`\n\t\t\t\t\t};\n\n\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\tthis._websocketManager.send(ws, errorRes);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst shouldDispatchToWorker = (\n\t\t\t\t\tmethod &&\n\t\t\t\t\t!method.skipWorker &&\n\t\t\t\t\tthis._isWorkersEnabled &&\n\t\t\t\t\tthis._workerDispatcherManager &&\n\t\t\t\t\t(hasWorkerForMethod || forceWorker) &&\n\t\t\t\t\t(forceWorker || !isExcludedFromWorker)\n\t\t\t\t);\n\n\t\t\t\tif (shouldDispatchToWorker) {\n\t\t\t\t\tthis._workerDispatcherManager.sendClientTask(msgId, methodName, dataCopy, {\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\t\tid_ws: ws['id_socket']\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (forceWorker && this._isWorkersEnabled) {\n\t\t\t\t\tconst errorRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: msgId,\n\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\tdata: `Worker dispatch required for method ${methodName}, but no worker dispatcher is available.`\n\t\t\t\t\t};\n\n\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\tthis._websocketManager.send(ws, errorRes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// No worker available: do method locally\n\t\t\t\t\tawait this.callMethodLocally(ws, msgId, methodName, dataCopy);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * callMethodLocally is your old approach for invoking the method in-process.\n\t */\n\tprivate async callMethodLocally(ws: WebSocket, messageId: number, method: string, params: any[]) {\n\t\tlet serverRes: ServerResponseModel = {\n\t\t\tmessageId: messageId,\n\t\t\thasError: false,\n\t\t\tdata: null\n\t\t};\n\n\t\ttry {\n\t\t\t// You can keep your logging code (LogMethodLatencies, Logs.insertOne, etc.)\n\t\t\tlet result = await this._methodManager.callMethod.call(\n\t\t\t\tObject.assign({}, this._methodManager, MethodManager.prototype, {\n\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\tid_ws: ws['id_socket']\n\t\t\t\t}),\n\t\t\t\tmethod,\n\t\t\t\t...params\n\t\t\t);\n\n\t\t\tserverRes.data = result;\n\t\t}\n\t\tcatch (err) {\n\t\t\tserverRes.hasError = true;\n\t\t\tserverRes.data = err || 'Unknown error';\n\t\t}\n\n\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\tthis._websocketManager.send(ws, serverRes);\n\t\t}\n\t}\n\n\t\n\n\t/**\n\t * Cleanly remove a client from the subscription manager, etc.\n\t */\n\tpublic async unsubscribeWS(ws: WebSocket) {\n\t\tif (this._subscriptionManager && this._methodManager.getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Server App', 'Unsub WS', ws['user'], ws['id_socket']);\n\t\t}\n\t\tawait this._subscriptionManager.unsubscribeAll(ws);\n\t\tws.removeAllListeners();\n\t\tws = null;\n\t}\n\n\tpublic getApp() {\n\t\treturn this._app;\n\t}\n\n\tpublic getServerConfig() {\n\t\treturn ResolveIOServer.getServerConfig();\n\t}\n\n\tpublic getWorkerDispatcherManager() {\n\t\treturn this._workerDispatcherManager;\n\t}\n\n\tpublic getWorkerServerManager() {\n\t\treturn this._workerServerManager;\n\t}\n}\n"]}
|