@resolveio/server-lib 22.3.91 → 22.3.93
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/collections/email-history.collection.js +7 -0
- package/collections/email-history.collection.js.map +1 -1
- package/managers/method.manager.d.ts +1 -0
- package/managers/method.manager.js +30 -7
- package/managers/method.manager.js.map +1 -1
- package/models/email-history.model.d.ts +1 -0
- package/models/email-history.model.js.map +1 -1
- package/package.json +1 -1
- package/services/codex-client.d.ts +1 -0
- package/services/codex-client.js +27 -26
- package/services/codex-client.js.map +1 -1
- package/util/ai-qa-policy.js +5 -1
- package/util/ai-qa-policy.js.map +1 -1
- package/util/ai-runner-qa-auth.js +66 -12
- package/util/ai-runner-qa-auth.js.map +1 -1
- package/util/ai-runner-qa-tools.js +91 -28
- package/util/ai-runner-qa-tools.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/managers/method.manager.ts"],"names":[],"mappings":"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","file":"method.manager.js","sourcesContent":["import { S3 } from '@aws-sdk/client-s3';\nimport { SESv2Client, SendEmailCommand } from '@aws-sdk/client-sesv2';\nimport { EventEmitter, once } from 'events';\nimport * as fs from 'fs';\nimport * as nodemailer from 'nodemailer';\nimport * as path from 'path';\nimport { setTimeout as delay } from 'timers/promises';\nimport { EmailHistories } from '../collections/email-history.collection';\nimport { Flags } from '../collections/flag.collection';\nimport { Logs } from '../collections/log.collection';\nimport { loadServerCronJobs } from '../fixtures/cron-jobs';\nimport { loadServerInit } from '../fixtures/init';\nimport { loadAccountMethods } from '../methods/accounts';\nimport { loadAppSettingsMethods } from '../methods/app-settings';\nimport { loadAWSMethods } from '../methods/aws';\nimport { loadAiTerminalMethods } from '../methods/ai-terminal';\nimport { loadCollectionMethods } from '../methods/collections';\nimport { loadCustomerNotificationMethods } from '../methods/customer-notifications';\nimport { loadCounterMethods } from '../methods/counters';\nimport { loadCronJobMethods } from '../methods/cron-jobs';\nimport { loadDiagnosticMethods } from '../methods/diagnostics';\nimport { loadFlagUpdatesMethods } from '../methods/flag-updates';\nimport { loadFlagMethods } from '../methods/flags';\nimport { loadLogMethods } from '../methods/logs';\nimport { loadMonitorMethods } from '../methods/monitor';\nimport { loadMongoExplorerMethods } from '../methods/mongo-explorer';\nimport { loadPublicationMethods } from '../methods/publications';\nimport { loadPDFMethods } from '../methods/pdf';\nimport { loadReportBuilderMethods } from '../methods/report-builder';\nimport { loadSupportMethods } from '../methods/support';\nimport { EmailHistoryModel, EmailHistoryOccurrence } from '../models/email-history.model';\nimport { MethodAllModel, MethodModel } from '../models/method.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { getBinarySize, objectIdHexString } from '../util/common';\nimport { ErrorReporter } from '../util/error-reporter';\nimport { ensureErrorWithCorrelation, getCorrelationId, runWithCorrelationContext } from '../util/error-tracking';\nimport { MonitorManagerFunction } from './monitor.manager';\nimport { WebSocketManager } from './websocket.manager';\nimport { recordEmailMetric, recordTextMessageMetric } from './communication-metric.manager';\n\ninterface SendEmailOptions {\n\tcorrelationId?: string;\n\tmeta?: Record<string, any>;\n\theaders?: Record<string, string>;\n\twaitForCompletion?: boolean;\n\twaitForCompletionTimeoutMs?: number;\n\twaitForCompletionPollMs?: number;\n}\n\nconst CALL_METHOD_LOG_SKIP_LIST = new Set([\n\t'countQuery',\n\t'getSignedUrls',\n\t'getSignedUrl',\n\t'getSignedUrlWithId',\n\t'getSignedUrlsAndFilesWithId',\n\t'updateDocumentProps',\n\t'insertDocument',\n\t'updateDocument',\n\t'uploadFileAndSave'\n]);\n\nfunction shouldWriteCallMethodLog(methodName: string, method?: MethodAllModel): boolean {\n\tif (method?.bypassLog || method?.bypassLogs) {\n\t\treturn false;\n\t}\n\n\tif (CALL_METHOD_LOG_SKIP_LIST.has(methodName)) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nfunction appendCorrelationIdToSubject(subject: string, correlationId?: string): string {\n\tif (!correlationId) {\n\t\treturn subject;\n\t}\n\n\tconst correlationTag = `[${correlationId}]`;\n\n\tif (subject && subject.includes(correlationTag)) {\n\t\treturn subject;\n\t}\n\n\treturn `${subject} ${correlationTag}`.trim();\n}\n\nfunction createEmailOccurrence(subject: string, text?: string, html?: string, meta?: Record<string, any>): EmailHistoryOccurrence {\n\treturn {\n\t\t_id: objectIdHexString(),\n\t\tcreatedAt: new Date(),\n\t\tsubject,\n\t\ttext,\n\t\thtml,\n\t\tmeta\n\t};\n}\n\nfunction formatGroupedEmailContent(correlationId: string, occurrences: EmailHistoryOccurrence[]): { text: string; html: string } {\n\tconst lines: string[] = [];\n\tlines.push(`Correlation ID: ${correlationId}`);\n\n\toccurrences.forEach((occurrence, index) => {\n\t\tconst timestamp = occurrence.createdAt instanceof Date ? occurrence.createdAt.toISOString() : new Date(occurrence.createdAt).toISOString();\n\t\tlines.push('');\n\t\tlines.push(`Occurrence #${index + 1} (${timestamp})`);\n\t\tlines.push(`Subject: ${occurrence.subject}`);\n\t\tif (occurrence.text) {\n\t\t\tlines.push(occurrence.text);\n\t\t}\n\t});\n\n\tconst htmlSections = occurrences.map((occurrence, index) => {\n\t\tconst timestamp = occurrence.createdAt instanceof Date ? occurrence.createdAt.toISOString() : new Date(occurrence.createdAt).toISOString();\n\t\tconst escapedText = occurrence.text ? occurrence.text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>') : '';\n\t\treturn `<div><h4>Occurrence #${index + 1} (${timestamp})</h4><p><strong>Subject:</strong> ${occurrence.subject}</p>${escapedText ? `<pre>${escapedText}</pre>` : ''}</div>`;\n\t});\n\n\tconst html = [\n\t\t`<p><strong>Correlation ID:</strong> ${correlationId}</p>`,\n\t\t...htmlSections\n\t].join('');\n\n\treturn {\n\t\ttext: lines.join('\\n'),\n\t\thtml\n\t};\n}\n\nconst EMAIL_HISTORY_TEXT_MAX_CHARS = 12000;\nconst EMAIL_HISTORY_HTML_MAX_CHARS = 20000;\nconst EMAIL_HISTORY_ERROR_MAX_CHARS = 8000;\nconst EMAIL_HISTORY_META_MAX_CHARS = 6000;\nconst EMAIL_HISTORY_ATTACHMENT_MAX_COUNT = 10;\nconst EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS = 1024;\nconst EMAIL_HISTORY_OCCURRENCE_MAX_COUNT = 20;\nconst EMAIL_HISTORY_OCCURRENCE_TEXT_MAX_CHARS = 4000;\nconst EMAIL_HISTORY_OCCURRENCE_HTML_MAX_CHARS = 6000;\n\nfunction truncateTextForHistory(value: unknown, maxChars: number): string {\n\tif (typeof value !== 'string') {\n\t\treturn '';\n\t}\n\n\tif (value.length <= maxChars) {\n\t\treturn value;\n\t}\n\n\tconst suffix = '...[truncated]';\n\tconst keepLength = Math.max(0, maxChars - suffix.length);\n\treturn `${value.slice(0, keepLength)}${suffix}`;\n}\n\nfunction sanitizeMetaForHistory(meta?: Record<string, any>): Record<string, any> | undefined {\n\tif (!meta || typeof meta !== 'object') {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst serialized = JSON.stringify(meta);\n\t\tif (!serialized) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (serialized.length <= EMAIL_HISTORY_META_MAX_CHARS) {\n\t\t\treturn JSON.parse(serialized);\n\t\t}\n\n\t\treturn {\n\t\t\ttruncated: true,\n\t\t\toriginalSize: serialized.length,\n\t\t\tpreview: truncateTextForHistory(serialized, EMAIL_HISTORY_META_MAX_CHARS)\n\t\t};\n\t}\n\tcatch {\n\t\treturn {\n\t\t\ttruncated: true,\n\t\t\tpreview: '[unserializable meta]'\n\t\t};\n\t}\n}\n\nfunction estimateAttachmentContentLength(content: any, encoding?: string): number | undefined {\n\tif (Buffer.isBuffer(content)) {\n\t\treturn content.length;\n\t}\n\n\tif (content instanceof Uint8Array) {\n\t\treturn content.byteLength;\n\t}\n\n\tif (content && typeof content === 'object') {\n\t\tif (content._bsontype === 'Binary' && content.buffer && typeof content.buffer.length === 'number') {\n\t\t\treturn content.buffer.length;\n\t\t}\n\n\t\tif (Array.isArray(content.data)) {\n\t\t\treturn content.data.length;\n\t\t}\n\t}\n\n\tif (typeof content === 'string') {\n\t\tif (encoding === 'base64') {\n\t\t\tconst normalized = content.replace(/\\s/g, '');\n\t\t\tconst padding = normalized.endsWith('==') ? 2 : normalized.endsWith('=') ? 1 : 0;\n\t\t\treturn Math.max(0, Math.floor((normalized.length * 3) / 4) - padding);\n\t\t}\n\n\t\treturn Buffer.byteLength(content, 'utf8');\n\t}\n\n\treturn undefined;\n}\n\nfunction sanitizeAttachmentForHistory(attachment: any): Record<string, any> {\n\tconst source = attachment && typeof attachment === 'object' ? attachment : {};\n\tconst summary: Record<string, any> = {\n\t\tcontentStored: false\n\t};\n\n\tif (typeof source.filename === 'string') {\n\t\tsummary.filename = truncateTextForHistory(source.filename, EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS);\n\t}\n\tif (typeof source.contentType === 'string') {\n\t\tsummary.contentType = truncateTextForHistory(source.contentType, EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS);\n\t}\n\tif (typeof source.contentDisposition === 'string') {\n\t\tsummary.contentDisposition = truncateTextForHistory(source.contentDisposition, EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS);\n\t}\n\tif (typeof source.cid === 'string') {\n\t\tsummary.cid = truncateTextForHistory(source.cid, EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS);\n\t}\n\tif (typeof source.path === 'string') {\n\t\tsummary.path = truncateTextForHistory(source.path, EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS);\n\t}\n\tif (typeof source.href === 'string') {\n\t\tsummary.href = truncateTextForHistory(source.href, EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS);\n\t}\n\tif (typeof source.encoding === 'string') {\n\t\tsummary.encoding = truncateTextForHistory(source.encoding, EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS);\n\t}\n\n\tconst contentLength = typeof source.size === 'number'\n\t\t? source.size\n\t\t: estimateAttachmentContentLength(source.content, source.encoding);\n\tif (typeof contentLength === 'number' && Number.isFinite(contentLength) && contentLength >= 0) {\n\t\tsummary.contentLength = contentLength;\n\t}\n\n\treturn summary;\n}\n\nfunction sanitizeAttachmentsForHistory(attachments: any[]): Record<string, any>[] {\n\tif (!Array.isArray(attachments) || !attachments.length) {\n\t\treturn [];\n\t}\n\n\tconst summarized = attachments\n\t\t.slice(0, EMAIL_HISTORY_ATTACHMENT_MAX_COUNT)\n\t\t.map((attachment) => sanitizeAttachmentForHistory(attachment));\n\n\tif (attachments.length > EMAIL_HISTORY_ATTACHMENT_MAX_COUNT) {\n\t\tsummarized.push({\n\t\t\tcontentStored: false,\n\t\t\tomittedCount: attachments.length - EMAIL_HISTORY_ATTACHMENT_MAX_COUNT\n\t\t});\n\t}\n\n\treturn summarized;\n}\n\nfunction sanitizeOccurrencesForHistory(occurrences?: EmailHistoryOccurrence[]): EmailHistoryOccurrence[] | undefined {\n\tif (!Array.isArray(occurrences) || !occurrences.length) {\n\t\treturn undefined;\n\t}\n\n\treturn occurrences.slice(-EMAIL_HISTORY_OCCURRENCE_MAX_COUNT).map((occurrence) => {\n\t\tconst createdAtCandidate = occurrence.createdAt instanceof Date ? occurrence.createdAt : new Date(occurrence.createdAt);\n\t\tconst createdAt = Number.isNaN(createdAtCandidate.getTime()) ? new Date() : createdAtCandidate;\n\t\tconst sanitized: EmailHistoryOccurrence = {\n\t\t\t_id: occurrence._id || objectIdHexString(),\n\t\t\tcreatedAt,\n\t\t\tsubject: truncateTextForHistory(occurrence.subject || '', EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS)\n\t\t};\n\n\t\tif (typeof occurrence.text === 'string' && occurrence.text.length > 0) {\n\t\t\tsanitized.text = truncateTextForHistory(occurrence.text, EMAIL_HISTORY_OCCURRENCE_TEXT_MAX_CHARS);\n\t\t}\n\t\tif (typeof occurrence.html === 'string' && occurrence.html.length > 0) {\n\t\t\tsanitized.html = truncateTextForHistory(occurrence.html, EMAIL_HISTORY_OCCURRENCE_HTML_MAX_CHARS);\n\t\t}\n\n\t\tconst sanitizedMeta = sanitizeMetaForHistory(occurrence.meta);\n\t\tif (sanitizedMeta) {\n\t\t\tsanitized.meta = sanitizedMeta;\n\t\t}\n\n\t\treturn sanitized;\n\t});\n}\n\nfunction createNodeMailerSESV2Transport(sesClient: SESv2Client): nodemailer.Transporter {\n\tconst transport: any = {\n\t\tname: 'resolveio-sesv2-transport',\n\t\tversion: '1.0.0',\n\t\tsend: (mail: any, callback: any) => {\n\t\t\tconst stream = mail.message.createReadStream();\n\t\t\tconst chunks: Uint8Array[] = [];\n\t\t\tlet didFinish = false;\n\n\t\t\tconst finish = (error: any, info?: any) => {\n\t\t\t\tif (didFinish) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdidFinish = true;\n\t\t\t\tcallback(error, info);\n\t\t\t};\n\n\t\t\tstream.on('data', (chunk) => {\n\t\t\t\tconst chunkData = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n\t\t\t\tchunks.push(new Uint8Array(chunkData));\n\t\t\t});\n\n\t\t\tstream.on('error', (error) => {\n\t\t\t\tfinish(error);\n\t\t\t});\n\n\t\t\tstream.on('end', async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst rawData = Buffer.concat(chunks);\n\t\t\t\t\tconst rawMessageData = new Uint8Array(rawData);\n\t\t\t\t\tconst envelope = typeof mail.message.getEnvelope === 'function' ? mail.message.getEnvelope() : mail.data?.envelope;\n\n\t\t\t\t\tconst fromEmailAddress = envelope?.from || undefined;\n\t\t\t\t\tconst toAddresses = envelope?.to\n\t\t\t\t\t\t? (Array.isArray(envelope.to) ? envelope.to : [envelope.to]).filter(Boolean)\n\t\t\t\t\t\t: [];\n\n\t\t\t\t\tconst replyToAddresses = mail.data?.replyTo\n\t\t\t\t\t\t? (Array.isArray(mail.data.replyTo) ? mail.data.replyTo : [mail.data.replyTo]).filter(Boolean)\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tconst response = await sesClient.send(new SendEmailCommand({\n\t\t\t\t\t\tFromEmailAddress: fromEmailAddress,\n\t\t\t\t\t\tDestination: toAddresses.length ? { ToAddresses: toAddresses } : undefined,\n\t\t\t\t\t\tReplyToAddresses: replyToAddresses,\n\t\t\t\t\t\t\tContent: {\n\t\t\t\t\t\t\t\tRaw: {\n\t\t\t\t\t\t\t\t\tData: rawMessageData\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\n\t\t\t\t\tfinish(null, {\n\t\t\t\t\t\tenvelope,\n\t\t\t\t\t\tmessageId: response.MessageId,\n\t\t\t\t\t\tresponse: response.MessageId\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcatch (error) {\n\t\t\t\t\tfinish(error);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\treturn nodemailer.createTransport(transport);\n}\n\nexport class AWS {\n\tprivate _s3: S3 = null;\n\tprivate _s3USEast1: S3 = null;\n\n\tconstructor() {}\n\n\tpublic create() {\n\t\tconst aws = new AWS();\n\t\taws.initialize();\n\t\treturn aws;\n\t}\n\n\tprivate initialize() {\n\n\t}\n\n\tpublic s3(): S3 {\n\t\tif (this._s3) {\n\t\t\treturn this._s3;\n\t\t}\n\n\t\tthis._s3 = new S3({\n\t\t\tcredentials: {\n\t\t\t\taccessKeyId: process.env.AWS_ACCESS_KEY,\n\t\t\t\tsecretAccessKey: process.env.AWS_SECRET_ACCESS_KEY\n\t\t\t},\n\t\t\tregion: process.env.AWS_REGION,\n\t\t\tapiVersion: '2006-03-01'\n\t\t});\n\n\t\treturn this._s3;\n\t}\n\n\tpublic s3USEast1(): S3 {\n\t\tif (process.env.AWS_REGION === 'us-east-1') {\n\t\t\treturn this.s3();\n\t\t}\n\t\telse {\n\t\t\tif (this._s3USEast1) {\n\t\t\t\treturn this._s3USEast1;\n\t\t\t}\n\t\t\t\n\t\t\tthis._s3USEast1 = new S3({\n\t\t\t\tcredentials: {\n\t\t\t\t\taccessKeyId: process.env.AWS_ACCESS_KEY,\n\t\t\t\t\tsecretAccessKey: process.env.AWS_SECRET_ACCESS_KEY\n\t\t\t\t},\n\t\t\t\tregion: 'us-east-1',\n\t\t\t\tapiVersion: '2006-03-01'\n\t\t\t});\n\t\n\t\t\treturn this._s3USEast1;\n\t\t}\n\t}\n}\n\nexport class MethodManager {\n\tprivate _websocketManager: WebSocketManager;\n\tpublic _methods: MethodModel = {};\n\tprivate _mailerSES: nodemailer.Transporter;\n\tprivate _mailerCustom: nodemailer.Transporter;\n\tprivate _aws: AWS;\n\tprivate _monitorManagerFunction: MonitorManagerFunction;\n\tprivate _isWorkersEnabled = false;\n\tprivate _isWorkerInstance = false;\n\n\tprivate emailQueue: Set<string> = new Set(); // Set to store pending email IDs\n\tprivate isEmailProcessing = false;\n\tprivate readonly _emailProcessingDelayMs = 5000;\n\n\tprivate _debugcallMethodHits = 0;\n\tprivate _debugCallMethodHits = 0;\n\tprivate _debugCallMethodCronJobHits = 0;\n\tprivate _debugSendQueueHits = 0;\n\tprivate _enableDebug = false;\n\tprivate _ready = false;\n\tprivate _readyEmitter = new EventEmitter();\n\tprivate _readyError: any = null;\n\n\tprivate _localActiveCounts: Map<string, number> = new Map();\n\tprivate _localWaitQueues: Map<string, Array<() => void>> = new Map();\n\n\tpublic clientDir = '';\n\tpublic serverConfig: Record<string, any> = {};\n\n\tconstructor() {}\n\n\tstatic create(websocketManager: WebSocketManager, monitorManagerFunction: MonitorManagerFunction, isWorkersEnabled, isWorkerInstance) {\n\t\tconst methodManager = new MethodManager();\n\t\tmethodManager.initialize(websocketManager, monitorManagerFunction, isWorkersEnabled, isWorkerInstance);\n\t\treturn methodManager;\n\t}\n\n\tprivate initialize(websocketManager: WebSocketManager, monitorManagerFunction: MonitorManagerFunction, isWorkersEnabled, isWorkerInstance) {\n\t\tthis._websocketManager = websocketManager;\n\t\tthis._monitorManagerFunction = monitorManagerFunction;\n\t\tthis._isWorkersEnabled = isWorkersEnabled;\n\t\tthis._isWorkerInstance = isWorkerInstance;\n\t\t\n\t\tthis.clientDir = ResolveIOServer.getClientDir();\n\t\tthis.serverConfig = ResolveIOServer.getServerConfig();\n\n\t\t// Fixtures\n\t\tif (!process.env.IS_WORKERS_ENABLED || process.env.IS_WORKERS_ENABLED === 'false' || (process.env.IS_WORKER_INSTANCE === 'true' && process.env.WORKER_INDEX === '0')) {\n\t\t\tif (process.env.IS_WORKERS_ENABLED === 'false' || process.env.NODE_APP_INSTANCE === '1') {\n\t\t\t\tsetTimeout(async () => {\n\t\t\t\t\tconsole.log(new Date(), 'Start Server Fixture');\n\t\t\t\t\tawait loadServerInit();\n\t\t\t\t\tconsole.log(new Date(), 'End Server Fixture');\n\t\t\t\t}, 5000);\n\t\t\t}\n\t\t}\n\t\t\n\t\tsetImmediate(async () => {\n\t\t\ttry {\n\t\t\t\t// Methods\n\t\t\t\tawait loadServerCronJobs();\n\n\t\t\t\tloadAccountMethods(this);\n\t\t\t\tloadAppSettingsMethods(this);\n\t\t\t\tloadAWSMethods(this);\n\t\t\t\tloadAiTerminalMethods(this);\n\t\t\t\tloadCollectionMethods(this);\n\t\t\t\tloadCustomerNotificationMethods(this);\n\t\t\t\tloadCounterMethods(this);\n\t\t\t\tloadLogMethods(this);\n\t\t\t\tloadPDFMethods(this);\n\t\t\t\tloadCronJobMethods(this);\n\t\t\t\tloadFlagMethods(this);\n\t\t\t\tloadFlagUpdatesMethods(this);\n\t\t\t\tloadReportBuilderMethods(this);\n\t\t\t\tloadSupportMethods(this);\n\t\t\t\tloadMonitorMethods(this);\n\t\t\t\tloadMongoExplorerMethods(this);\n\t\t\t\tloadPublicationMethods(this);\n\t\t\t\tloadDiagnosticMethods(this);\n\n\t\t\t\tlet flag = await Flags.findOne({type: 'Enable Debug'});\n\t\t\n\t\t\t\tif (flag && flag.value) {\n\t\t\t\t\tthis._enableDebug = true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._enableDebug = false;\n\t\t\t\t}\n\n\t\t\t\tawait this.loadPendingEmails();\n\t\t\t\tthis.markReady();\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Method Manager init failed', error);\n\t\t\t\tthis.markReadyFailure(error);\n\t\t\t}\n\t\t});\n\t\t\t\n\t\t\tthis._aws = new AWS();\n\n\t\t\tconst sesRegion = process.env.AWS_SES_REGION\n\t\t\t\t|| this.serverConfig?.AWS_SES_REGION\n\t\t\t\t|| this.serverConfig?.AWSSES_REGION\n\t\t\t\t|| process.env.AWS_REGION\n\t\t\t\t|| process.env.AWS_DEFAULT_REGION\n\t\t\t\t|| 'us-east-1';\n\t\t\tconst sesCredentials = process.env.AWS_ACCESS_KEY && process.env.AWS_SECRET_ACCESS_KEY ? {\n\t\t\t\taccessKeyId: process.env.AWS_ACCESS_KEY,\n\t\t\t\tsecretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,\n\t\t\t\tsessionToken: process.env.AWS_SESSION_TOKEN\n\t\t\t} : undefined;\n\n\t\t\tthis._mailerSES = createNodeMailerSESV2Transport(new SESv2Client({\n\t\t\t\tregion: sesRegion,\n\t\t\t\tcredentials: sesCredentials\n\t\t\t}));\n\t\t\t\n\t\t\tif (!ResolveIOServer.getSESMail()) {\n\t\t\t\tthis._mailerCustom = nodemailer.createTransport({\n\t\t\t\t\thost: ResolveIOServer.getServerConfig()['MAIL_HOST'], // 'smtp.office365.com', // Office 365 server\n\t\t\t\t\tport: ResolveIOServer.getServerConfig()['MAIL_PORT'], //587, // secure SMTP\n\t\t\t\tsecure: false, // false for TLS - as a boolean not string - but the default is false so just remove this completely\n\t\t\t\tauth: {\n\t\t\t\t\tuser: ResolveIOServer.getServerConfig()['MAIL_USERNAME'],\n\t\t\t\t\tpass: ResolveIOServer.getServerConfig()['MAIL_PASSWORD']\n\t\t\t\t},\n\t\t\t\ttls: {\n\t\t\t\t\tciphers: 'SSLv3'\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tsetInterval(async () => {\n\t\t\tlet flag = await Flags.findOne({type: 'Enable Debug'});\n\t\n\t\t\tif (flag && flag.value) {\n\t\t\t\tthis._enableDebug = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._enableDebug = false;\n\t\t\t}\n\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Method Manager', 'Send Queue Hits', this._debugSendQueueHits);\n\t\t\t\tconsole.log(new Date(), 'Method Manager', 'Call Method Internal Hits', this._debugcallMethodHits);\n\t\t\t\tconsole.log(new Date(), 'Method Manager', 'Call Method Hits', this._debugCallMethodHits);\n\t\t\t\tconsole.log(new Date(), 'Method Manager', 'Call Method Cron Hits', this._debugCallMethodCronJobHits);\n\t\t\t}\n\n\t\t\tthis._debugcallMethodHits = 0;\n\t\t\tthis._debugCallMethodHits = 0;\n\t\t\tthis._debugCallMethodCronJobHits = 0;\n\t\t\tthis._debugSendQueueHits = 0;\n\t\t}, 60000);\n\n\t\tif (!this._isWorkersEnabled || this._isWorkerInstance) {\n\t\t\tthis.setupEmailWatcher();\n\t\t}\n\t}\n\n\tprivate markReady(): void {\n\t\tif (this._ready) {\n\t\t\treturn;\n\t\t}\n\t\tthis._ready = true;\n\t\tthis._readyEmitter.emit('ready');\n\t\tthis._readyEmitter.removeAllListeners('ready');\n\t\tthis._readyEmitter.removeAllListeners('readyError');\n\t}\n\n\tprivate markReadyFailure(error: any): void {\n\t\tif (this._ready) {\n\t\t\treturn;\n\t\t}\n\t\tthis._readyError = error;\n\t\tthis._readyEmitter.emit('readyError', error);\n\t\tthis._readyEmitter.removeAllListeners('ready');\n\t\tthis._readyEmitter.removeAllListeners('readyError');\n\t}\n\n\tpublic onReady(callback: () => void): () => void {\n\t\tif (this._ready) {\n\t\t\tcallback();\n\t\t\treturn () => {};\n\t\t}\n\t\tif (this._readyError) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst handleReady = () => {\n\t\t\tcallback();\n\t\t};\n\n\t\tthis._readyEmitter.once('ready', handleReady);\n\n\t\treturn () => {\n\t\t\tthis._readyEmitter.removeListener('ready', handleReady);\n\t\t};\n\t}\n\n\tprivate async waitForReadyEvent(): Promise<void> {\n\t\tawait once(this._readyEmitter, 'ready');\n\t}\n\n\tprivate async waitForReadyError(): Promise<void> {\n\t\tconst [error] = await once(this._readyEmitter, 'readyError');\n\t\tthrow error || new Error('MethodManager failed to initialize');\n\t}\n\n\tprivate async waitForReadyTimeout(timeoutMs: number): Promise<void> {\n\t\tawait delay(timeoutMs);\n\t\tthrow new Error('MethodManager ready timeout');\n\t}\n\n\tpublic isReady(): boolean {\n\t\treturn this._ready;\n\t}\n\n\tpublic getReadyError(): any {\n\t\treturn this._readyError;\n\t}\n\n\tpublic async waitUntilReady(timeoutMs: number = 30000): Promise<void> {\n\t\tif (this._ready) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._readyError) {\n\t\t\tthrow this._readyError;\n\t\t}\n\t\tif (!timeoutMs || timeoutMs <= 0) {\n\t\t\tawait Promise.race([\n\t\t\t\tthis.waitForReadyEvent(),\n\t\t\t\tthis.waitForReadyError()\n\t\t\t]);\n\t\t\treturn;\n\t\t}\n\t\tawait Promise.race([\n\t\t\tthis.waitForReadyEvent(),\n\t\t\tthis.waitForReadyError(),\n\t\t\tthis.waitForReadyTimeout(timeoutMs)\n\t\t]);\n\t}\n\n\tpublic getMethod(methodName: string): MethodAllModel {\n\t\treturn this._methods[methodName];\n\t}\n\n\t// Add methods to private methods object\n\tpublic methods(method: MethodModel) {\n\t\tthis._methods = Object.assign(this._methods, method);\n\t}\n\n\tprivate async reportMethodError(\n\t\tsubject: string,\n\t\tcorrelationId: string,\n\t\tcontext: Record<string, any> | string,\n\t\tmeta: Record<string, any>,\n\t\tstack?: string\n\t) {\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: 'method-manager',\n\t\t\tmessage: subject,\n\t\t\tenvironment: this.serverConfig?.ROOT_URL,\n\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\tclientName: this.serverConfig?.CLIENT_NAME,\n\t\t\tseverity: 'error',\n\t\t\tstack,\n\t\t\tcontext,\n\t\t\tmetadata,\n\t\t\tcorrelationId\n\t\t});\n\t}\n\n\tpublic async callMethodCron(method: string, ...methodData: any[]) {\n\t\tthis._debugCallMethodCronJobHits += 1;\n\n\t\tconst existingCorrelationId = getCorrelationId();\n\t\tconst correlationId = existingCorrelationId || objectIdHexString();\n\n\t\tconst execute = async () => {\n\t\t\tconst cronMethod = this._methods[method];\n\n\t\t\tif (!cronMethod) {\n\t\t\t\tconsole.log('No Method: ' + method);\n\n\t\t\t\tawait this.reportMethodError(\n\t\t\t\t\t'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\t{ message: 'No Method registered for cron execution', method },\n\t\t\t\t\t{ context: 'callMethodCron', method }\n\t\t\t\t);\n\n\t\t\t\tthrow new Error('No Method: ' + method);\n\t\t\t}\n\t\t\t\n\t\t\tif ((methodData.length > 1 || methodData[0]) && !cronMethod.skipValidation) {\n\t\t\t\tif (!cronMethod.check) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Function For Cron Method ' + method);\n\n\t\t\t\t\tawait this.reportMethodError(\n\t\t\t\t\t\t'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\t\tcorrelationId,\n\t\t\t\t\t\t{ message: 'Missing check function for cron method', method },\n\t\t\t\t\t\t{ context: 'callMethodCron-validation', method }\n\t\t\t\t\t);\n\t\t\n\t\t\t\t\tthrow new Error('No Check Function For Cron Method ' + method);\n\t\t\t\t}\n\t\t\t\telse if (!cronMethod.check._schema) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Schema For Cron Method ' + method);\n\n\t\t\t\t\tawait this.reportMethodError(\n\t\t\t\t\t\t'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\t\tcorrelationId,\n\t\t\t\t\t\t{ message: 'Missing check schema for cron method', method },\n\t\t\t\t\t\t{ context: 'callMethodCron-validation', method }\n\t\t\t\t\t);\n\t\t\n\t\t\t\t\tthrow new Error('No Check Schema For Cron Method ' + method);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconst valObj = {};\n\t\t\t\t\tconst valKeys = Object.keys(cronMethod.check._schema);\n\n\t\t\t\t\tconst rootKeys = valKeys.filter(a => !a.includes('.'));\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 0; i < methodData.length; i++) {\n\t\t\t\t\t\tvalObj[rootKeys[i]] = methodData[i];\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcronMethod.check.validate(valObj);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tconsole.error(new Date(), 'Error in Cron Method Check (' + method + ')', err);\n\n\t\t\t\t\t\tconst { error: normalizedError, correlationId: resolvedCorrelationId } = ensureErrorWithCorrelation(err, correlationId);\n\n\t\t\t\t\t\tawait this.reportMethodError(\n\t\t\t\t\t\t\t'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\t\t\tresolvedCorrelationId,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmessage: 'Match error on cron method',\n\t\t\t\t\t\t\t\tmethod,\n\t\t\t\t\t\t\t\tdata: valObj,\n\t\t\t\t\t\t\t\tvalidationError: normalizedError\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ context: 'callMethodCron-validation-error', method },\n\t\t\t\t\t\t\tnormalizedError.stack\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnormalizedError.message = `${new Date().toISOString()} - Error in Cron Method Check (${method}): ${normalizedError.message}`;\n\n\t\t\t\t\t\tthrow normalizedError;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst monitor = this._monitorManagerFunction.startMonitorFunction('Cron Method', method, '', '', methodData);\n\n\t\t\ttry {\n\t\t\t\tconst res = await cronMethod.function.call(Object.assign({}, this, MethodManager.prototype, {id_user: '', user: '', id_ws: ''}), ...methodData);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconst { error: normalizedError, correlationId: resolvedCorrelationId } = ensureErrorWithCorrelation(err, correlationId);\n\n\t\t\t\tawait this.reportMethodError(\n\t\t\t\t\t'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\tresolvedCorrelationId,\n\t\t\t\t\t{\n\t\t\t\t\t\tmessage: 'Error detected during cron method execution',\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\tdata: methodData,\n\t\t\t\t\t\terror: normalizedError\n\t\t\t\t\t},\n\t\t\t\t\t{ context: 'callMethodCron-execution', method },\n\t\t\t\t\tnormalizedError.stack\n\t\t\t\t);\n\t\t\t\t\n\t\t\t\tnormalizedError.message = `${new Date().toISOString()} - Error in Cron Method (${method}): ${normalizedError.message}`;\n\t\t\t\t\n\t\t\t\tthrow normalizedError;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait this._monitorManagerFunction.finishMonitorFunction(monitor);\n\t\t\t}\n\t\t};\n\n\t\treturn await runWithCorrelationContext(correlationId, execute);\n\t}\n\n\t// Call/run method internal (No Emit on Socket)\n\tpublic async callMethod(methodName: string, ...methodData: any[]): Promise<any> {\n\t\tthis._debugcallMethodHits += 1;\n\n\t\tconst existingCorrelationId = getCorrelationId();\n\t\tconst correlationId = existingCorrelationId || objectIdHexString();\n\n\t\treturn await runWithCorrelationContext(correlationId, async () => await this.callMethodInternal(correlationId, methodName, methodData));\n\t}\n\n\tprivate async callMethodInternal(correlationId: string, methodName: string, methodData: any[]): Promise<any> {\n\t\tconst method = this.getMethod(methodName);\n\n\t\tif (!method) {\n\t\t\tconsole.log('No Method: ' + methodName);\n\t\t\tthrow new Error(`No Method: ${methodName}`);\n\t\t}\n\n\t\tconst shouldTrackTextMetric = this.shouldTrackTextMessageMetric(methodName);\n\t\tconst textMetricProvider = shouldTrackTextMetric ? this.getTextMessageProvider() : undefined;\n\n\t\tlet releaseLocalConcurrency = await this.acquireLocalConcurrency(methodName, method.maxConcurrency);\n\n\t\ttry {\n\t\t\tif ((methodData.length > 1 || (methodData[0] && typeof methodData[0] !== 'function')) && !method.skipValidation) {\n\t\t\t\tif (!method.check) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Function For Method ' + methodName);\n\t\t\t\t\tthrow new Error(`No Check Function For Method: ${methodName}`);\n\t\t\t\t}\n\t\t\t\telse if (!method.check._schema) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Schema For Method ' + methodName);\n\t\t\t\t\tthrow new Error(`No Check Schema For Method: ${methodName}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (shouldWriteCallMethodLog(methodName, method)) {\n\t\t\t\tif (\n\t\t\t\t\tResolveIOServer.shouldWriteLogsOffline()\n\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\t\t\ttype: 'callMethod',\n\t\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([methodData])) < 1000000 ? JSON.stringify([methodData], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\t\t\tid_user: this['id_user'] || '',\n\t\t\t\t\t\t\t\t\tuser: this['user'] || '', \n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0',\n\t\t\t\t\t\t\t\t\tcorrelationId\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait Logs.insertOne({\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\ttype: 'callMethod',\n\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([methodData])) < 1000000 ? JSON.stringify([methodData], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\tid_user: this['id_user'] || '',\n\t\t\t\t\t\tuser: this['user'] || '',\n\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\troute: '',\n\t\t\t\t\t\tclient: 'ResolveIO',\n\t\t\t\t\t\tinstance: ResolveIOServer.getInstanceHost(),\n\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0',\n\t\t\t\t\t\tcorrelationId\n\t\t\t\t\t})\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst methodCallback = typeof(methodData[methodData.length - 1]) === 'function' ? methodData[methodData.length - 1] : null;\n\t\t\tconst functionMethodData = methodCallback ? methodData.slice(0, -1) : methodData;\n\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tconst shouldStartTransaction = !method.bypassSession &&\n\t\t\t\t!session && \n\t\t\t\t![\n\t\t\t\t\t'insertErrorLog', // CIRCULAR LOOP - DO NOT REMOVE\n\t\t\t\t\t'countWithQuery', // MONGO SESSIONS/TRANSACTIONS DONT WORK WITH COUNTS\n\t\t\t\t\t'sendEmail' // ALWAYS SEND SO ALWAYS HAVE RECORD - DONT ROLL BACK - BYPASS SESSION\n\t\t\t\t].includes(methodName) &&\n\t\t\t\t!methodName.startsWith('monitor-') &&\n\t\t\t\t!methodName.startsWith('log');\n\n\t\t\tconst executeWithExistingSession = async () => {\n\t\t\t\t// console.log(new Date(), 'Calling Method - Existing Session', methodName);\n\t\t\t\tlet monitor = this._monitorManagerFunction.startMonitorFunction('Method', methodName, this['user'] || '', '', functionMethodData);\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await method.function.call(Object.assign({}, this, MethodManager.prototype), ...functionMethodData);\n\n\t\t\t\t\tif (methodCallback) {\n\t\t\t\t\t\tmethodCallback(null, res);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (shouldTrackTextMetric) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait recordTextMessageMetric({\n\t\t\t\t\t\t\t\tstatus: 'sent',\n\t\t\t\t\t\t\t\tprovider: textMetricProvider,\n\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\tmethod: methodName\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\tcatch (error) {\n\t\t\t\t\t\t\tconsole.error('Error recording text message metric:', error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tif (err.code === 112 || err.codeName === 'WriteConflict' || err.code === 251 || err.codeName === 'NoSuchTransaction') {\n\t\t\t\t\t\tthrow err; // Write error, retry\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { error: normalizedError, correlationId: resolvedCorrelationId } = ensureErrorWithCorrelation(err, correlationId);\n\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Method Manager - Run Method - Existing Session', methodName, {\n\t\t\t\t\t\tcode: normalizedError.code,\n\t\t\t\t\t\tcodeName: normalizedError.codeName,\n\t\t\t\t\t\tmessage: normalizedError.message,\n\t\t\t\t\t\tstack: normalizedError.stack,\n\t\t\t\t\t\tcorrelationId: resolvedCorrelationId\n\t\t\t\t\t}], null, 2));\n\n\t\t\t\t\tawait this.reportMethodError(\n\t\t\t\t\t\t'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\t\tresolvedCorrelationId,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmessage: 'Error detected during method execution (existing session)',\n\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\tdata: methodData,\n\t\t\t\t\t\t\terror: normalizedError\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ context: 'callMethod-existing-session', methodName },\n\t\t\t\t\t\tnormalizedError.stack\n\t\t\t\t\t);\n\t\t\t\t\tnormalizedError.message = `${new Date().toISOString()} - Error in Method (${methodName}) - Existing Session: ${normalizedError.message}`;\n\n\t\t\t\t\tif (methodCallback) {\n\t\t\t\t\t\tmethodCallback(normalizedError, null);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (shouldTrackTextMetric) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait recordTextMessageMetric({\n\t\t\t\t\t\t\t\tstatus: 'failed',\n\t\t\t\t\t\t\t\tprovider: textMetricProvider,\n\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\tmethod: methodName\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\tcatch (error) {\n\t\t\t\t\t\t\tconsole.error('Error recording text message metric:', error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!process.env.IS_WORKER_INSTANCE) {\n\t\t\t\t\t\tawait this.callMethod(\n\t\t\t\t\t\t\t'insertErrorLog',\n\t\t\t\t\t\t\t`Error in Method: ${methodName}`,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\t\tmethodData,\n\t\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\t\tmessage: normalizedError.message,\n\t\t\t\t\t\t\t\t\tstack: normalizedError.stack,\n\t\t\t\t\t\t\t\t\tcode: normalizedError.code,\n\t\t\t\t\t\t\t\t\tcodeName: normalizedError.codeName\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tcorrelationId: resolvedCorrelationId\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\t\n\t\t\t\t\tthrow normalizedError;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait this._monitorManagerFunction.finishMonitorFunction(monitor);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (shouldStartTransaction) {\n\t\t\t\tlet monitor = null;\n\t\t\t\t\n\t\t\t\treturn ResolveIOServer.getMongoManager().oneTimeTransaction(async () => {\n\t\t\t\t\t// console.log(new Date(), 'Calling Method - New Session', methodName);\n\n\t\t\t\t\tmonitor = this._monitorManagerFunction.startMonitorFunction('Method', methodName, this['user'] || '', '', functionMethodData);\n\t\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet res = await method.function.call(Object.assign({}, this, MethodManager.prototype), ...functionMethodData);\n\n\t\t\t\t\t\tif (methodCallback) {\n\t\t\t\t\t\t\tmethodCallback(null, res);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (shouldTrackTextMetric) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait recordTextMessageMetric({\n\t\t\t\t\t\t\t\t\tstatus: 'sent',\n\t\t\t\t\t\t\t\t\tprovider: textMetricProvider,\n\t\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\t\tmethod: methodName\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\tcatch (error) {\n\t\t\t\t\t\t\t\tconsole.error('Error recording text message metric:', error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn res;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tif (err.code === 112 || err.codeName === 'WriteConflict' || err.code === 251 || err.codeName === 'NoSuchTransaction') {\n\t\t\t\t\t\t\tthrow err; // Write error, retry\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst { error: normalizedError, correlationId: resolvedCorrelationId } = ensureErrorWithCorrelation(err, correlationId);\n\n\t\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Method Manager - Run Method - New Session', methodName, {\n\t\t\t\t\t\t\tcode: normalizedError.code,\n\t\t\t\t\t\t\tcodeName: normalizedError.codeName,\n\t\t\t\t\t\t\tmessage: normalizedError.message,\n\t\t\t\t\t\t\tstack: normalizedError.stack,\n\t\t\t\t\t\t\tcorrelationId: resolvedCorrelationId\n\t\t\t\t\t\t}], null, 2));\n\n\t\t\t\t\t\tawait this.reportMethodError(\n\t\t\t\t\t\t\t'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\t\t\tresolvedCorrelationId,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmessage: 'Error detected during method execution (new session)',\n\t\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\t\tdata: methodData,\n\t\t\t\t\t\t\t\terror: normalizedError\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ context: 'callMethod-new-session', methodName },\n\t\t\t\t\t\t\tnormalizedError.stack\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnormalizedError.message = `${new Date().toISOString()} - Error in Method With Session (${methodName}) - New Session: ${normalizedError.message}`;\n\n\t\t\t\t\t\tif (methodCallback) {\n\t\t\t\t\t\t\tmethodCallback(normalizedError, null);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (shouldTrackTextMetric) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait recordTextMessageMetric({\n\t\t\t\t\t\t\t\t\tstatus: 'failed',\n\t\t\t\t\t\t\t\t\tprovider: textMetricProvider,\n\t\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\t\tmethod: methodName\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\tcatch (error) {\n\t\t\t\t\t\t\t\tconsole.error('Error recording text message metric:', error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!process.env.IS_WORKER_INSTANCE) {\n\t\t\t\t\t\t\tawait this.callMethod(\n\t\t\t\t\t\t\t\t'insertErrorLog',\n\t\t\t\t\t\t\t\t`Error in Method: ${methodName}`,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\t\t\tmethodData,\n\t\t\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\t\t\tmessage: normalizedError.message,\n\t\t\t\t\t\t\t\t\t\tstack: normalizedError.stack,\n\t\t\t\t\t\t\t\t\t\tcode: normalizedError.code,\n\t\t\t\t\t\t\t\t\t\tcodeName: normalizedError.codeName\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcorrelationId: resolvedCorrelationId\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\n\t\t\t\t\t\tthrow normalizedError;\n\t\t\t\t\t}\n\t\t\t\t\tfinally {\n\t\t\t\t\t\tawait this._monitorManagerFunction.finishMonitorFunction(monitor);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (method.bypassSession && session) {\n\t\t\t\treturn ResolveIOServer.getMongoManager().runWithoutSession(async () => await executeWithExistingSession());\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn executeWithExistingSession();\n\t\t\t}\n\t\t}\n\t\tfinally {\n\t\t\treleaseLocalConcurrency();\n\t\t}\n\t}\n\n\tprivate async acquireLocalConcurrency(methodName: string, maxConcurrency?: number): Promise<() => void> {\n\t\tif (!maxConcurrency || maxConcurrency < 1) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tlet current = this._localActiveCounts.get(methodName) || 0;\n\n\t\tif (current < maxConcurrency) {\n\t\t\tthis._localActiveCounts.set(methodName, current + 1);\n\t\t\treturn this.createLocalRelease(methodName);\n\t\t}\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise((resolve) => {\n\t\t\tlet queue = this._localWaitQueues.get(methodName);\n\n\t\t\tif (!queue) {\n\t\t\t\tqueue = [];\n\t\t\t\tthis._localWaitQueues.set(methodName, queue);\n\t\t\t}\n\n\t\t\tqueue.push(() => {\n\t\t\t\tlet curr = this._localActiveCounts.get(methodName) || 0;\n\t\t\t\tthis._localActiveCounts.set(methodName, curr + 1);\n\t\t\t\tresolve(this.createLocalRelease(methodName));\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate createLocalRelease(methodName: string): () => void {\n\t\tlet released = false;\n\n\t\treturn () => {\n\t\t\tif (released) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treleased = true;\n\n\t\t\tlet current = this._localActiveCounts.get(methodName) || 0;\n\t\t\tthis._localActiveCounts.set(methodName, current > 0 ? current - 1 : 0);\n\n\t\t\tlet queue = this._localWaitQueues.get(methodName);\n\n\t\t\tif (queue && queue.length) {\n\t\t\t\tlet next = queue.shift();\n\n\t\t\t\tif (next) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tsetupEmailWatcher() {\n\t\tconst changeStream = EmailHistories.watchCollection([]);\n\n\t\tchangeStream.on('change', async (change) => {\n\t\t\tif (change.operationType === 'insert' && change.fullDocument && change.fullDocument.status === 'pending') {\n\t\t\t\tthis.emailQueue.add(change.fullDocument._id.toString());\n\t\t\t\tawait this.tryProcessEmail();\n\t\t\t}\n\t\t\telse if (change.operationType === 'update' || change.operationType === 'replace') {\n\t\t\t\tconst updatedEmail = change.fullDocument;\n\t\t\t\tif (updatedEmail && updatedEmail.status !== 'pending' && this.emailQueue.has(updatedEmail._id.toString())) {\n\t\t\t\t\tthis.emailQueue.delete(updatedEmail._id.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\t.on('error', async err => {\n\t\t\tconsole.error('Email history changestream error', err);\n\t\t\tawait changeStream.close();\n\t\t})\n\t\t.on('close', () => {\n\t\t\tthis.setupEmailWatcher();\n\t\t});\n\t}\n\n\tasync loadPendingEmails() {\n\t\t// Load any pending emails on startup\n\t\tconst pendingEmails = await EmailHistories.find({ status: 'pending' }, {sort: {_id: 1}});\n\t\tfor (const email of pendingEmails) {\n\t\t\tthis.emailQueue.add(email._id.toString());\n\t\t}\n\t\t// Try to process emails\n\t\tawait this.tryProcessEmail();\n\t}\n\n\tasync tryProcessEmail() {\n\t\tif (this.isEmailProcessing || this.emailQueue.size === 0) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tthis.isEmailProcessing = true;\n\t\n\t\ttry {\n\t\t\twhile (this.emailQueue.size > 0) {\n\t\t\t\tconst emailId = this.emailQueue.values().next().value;\n\t\t\t\tthis.emailQueue.delete(emailId);\n\t\n\t\t\t\tconst pendingEmail = await EmailHistories.findOne(\n\t\t\t\t\t{\n\t\t\t\t\t\t_id: emailId,\n\t\t\t\t\t\tstatus: 'pending',\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tif (!pendingEmail) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet queuedAt: Date;\n\t\t\t\tif (pendingEmail.date instanceof Date) {\n\t\t\t\t\tqueuedAt = pendingEmail.date;\n\t\t\t\t}\n\t\t\t\telse if (pendingEmail.createdAt instanceof Date) {\n\t\t\t\t\tqueuedAt = pendingEmail.createdAt;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tqueuedAt = new Date();\n\t\t\t\t}\n\n\t\t\t\tconst timeSinceQueued = Date.now() - queuedAt.getTime();\n\t\t\t\tconst remainingDelay = this._emailProcessingDelayMs - timeSinceQueued;\n\n\t\t\t\tif (remainingDelay > 0) {\n\t\t\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, remainingDelay));\n\t\t\t\t}\n\n\t\t\t\tconst emailHistory = await EmailHistories.findOneAndUpdate(\n\t\t\t\t\t{\n\t\t\t\t\t\t_id: emailId,\n\t\t\t\t\t\tstatus: 'pending',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$set: { status: 'processing', processingAt: new Date() },\n\t\t\t\t\t}\n\t\t\t\t);\n\t\n\t\t\t\tif (!emailHistory) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\n\t\t\t\t// Fetch and process attachments\n if (emailHistory.attachments && emailHistory.attachments.length > 0) {\n\t\t\t\t\tconst validAttachments: any[] = [];\n\t\t\t\t\tlet attachmentError = false;\n\n\t\t\t\t\tfor (const att of emailHistory.attachments) {\n\t\t\t\t\t\tif (att.path && att.path.startsWith('http')) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst response = await fetch(att.path);\n\t\t\t\t\t\t\t\tif (!response.ok) {\n\t\t\t\t\t\t\t\t\tattachmentError = true;\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\t\t\t\t\t\tconst buffer = Buffer.from(arrayBuffer);\n\n\t\t\t\t\t\t\t\t// Check the size of the attachment\n\t\t\t\t\t\t\t\tconst maxSize = 20 * 1024 * 1024; // 20MB in bytes\n\t\t\t\t\t\t\t\tif (buffer.length <= maxSize) {\n\t\t\t\t\t\t\t\t\t// Attachment is within size limits, include it\n\t\t\t\t\t\t\t\t\tatt.content = buffer;\n\t\t\t\t\t\t\t\t\tdelete att.path;\n\t\t\t\t\t\t\t\t\tvalidAttachments.push(att);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\t\tconsole.error('Failed to fetch attachment:', err);\n\t\t\t\t\t\t\t\tattachmentError = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvalidAttachments.push(att);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\temailHistory.attachments = validAttachments;\n\t\t\t\t\tif (attachmentError) {\n\t\t\t\t\t\t\temailHistory.text =\n\t\t\t\t\t\t\t\t\t(typeof emailHistory.text === 'string' ? emailHistory.text : '') +\n\t\t\t\t\t\t\t\t\t'\\n\\nCould not load attachments.';\n\t\t\t\t\t\t\temailHistory.html =\n\t\t\t\t\t\t\t\t\t(typeof emailHistory.html === 'string' ? emailHistory.html : '') +\n\t\t\t\t\t\t\t\t\t'<p>Could not load attachments.</p>';\n\t\t\t\t\t}\n }\n\t\n\t\t\t\t// Prepare email options\n\t\t\t\tconst mailOptions: any = {\n\t\t\t\t\treplyTo: emailHistory.reply_to || (ResolveIOServer.getServerConfig()['MAIL_REPLY_TO'] || undefined),\n\t\t\t\t\tfrom: emailHistory.send_from || ResolveIOServer.getServerConfig().MAIL_FROM,\n\t\t\t\t\tto: emailHistory.email,\n\t\t\t\t\tsubject:\n\t\t\t\t\t\t(ResolveIOServer.getServerConfig()['ROOT_URL'].match(/https:\\/\\/dev\\./) ||\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'].match(/https:\\/\\/www\\.dev\\./)\n\t\t\t\t\t\t\t? '(DEV SERVER) - '\n\t\t\t\t\t\t\t: '') + emailHistory.subject,\n\t\t\t\t\ttext: typeof emailHistory.text === 'string' ? emailHistory.text : '',\n\t\t\t\t\thtml: typeof emailHistory.html === 'string' ? emailHistory.html : '',\n\t\t\t\t\tattachments: emailHistory.attachments || [],\n\t\t\t\t\theaders: emailHistory.headers || undefined,\n\t\t\t\t\tforce_ses: emailHistory.force_ses\n\t\t\t\t};\n\t\n\t\t\t\t// Process attachments before sending\n\t\t\t\tif (mailOptions.attachments && mailOptions.attachments.length > 0) {\n\t\t\t\t\tmailOptions.attachments = mailOptions.attachments.map((att) => {\n\t\t\t\t\t\tconst newAtt = { ...att };\n\t\t\t\t\t\t// Handle attachments stored as BinData or Buffer\n\t\t\t\t\t\tif (newAtt.content && typeof newAtt.content === 'object' && !(newAtt.content instanceof Buffer)) {\n\t\t\t\t\t\t\t// Convert MongoDB's Binary data to Buffer\n\t\t\t\t\t\t\tif (newAtt.content._bsontype === 'Binary' && newAtt.content.sub_type === 0) {\n\t\t\t\t\t\t\t\tnewAtt.content = Buffer.from(newAtt.content.buffer);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// Handle other types if necessary\n\t\t\t\t\t\t\t\tnewAtt.content = Buffer.from(newAtt.content);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Handle attachments stored as Base64 strings\n\t\t\t\t\t\telse if (typeof newAtt.content === 'string' && newAtt.encoding === 'base64') {\n\t\t\t\t\t\t\tnewAtt.content = Buffer.from(newAtt.content, 'base64');\n\t\t\t\t\t\t\tdelete newAtt.encoding;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Ensure the content is a Buffer\n\t\t\t\t\t\telse if (typeof newAtt.content === 'string') {\n\t\t\t\t\t\t\tnewAtt.content = Buffer.from(newAtt.content);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn newAtt;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\n\t\t\t\t// Send the email\n\t\t\t\tconst emailProvider = (!mailOptions.force_ses && this._mailerCustom) ? 'custom' : 'ses';\n\t\t\t\t(!mailOptions.force_ses && this._mailerCustom ? this._mailerCustom : this._mailerSES).sendMail(mailOptions, async err => {\n\t\t\t\t\tconst metricStatus = err ? 'failed' : 'sent';\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\tconsole.error('Failed to send email:', err);\n\t\t\t\t\t\t\tawait this.finalizeEmailHistoryStorage(\n\t\t\t\t\t\t\t\temailHistory,\n\t\t\t\t\t\t\t\t'failed',\n\t\t\t\t\t\t\t\ttypeof err === 'string' ? err : this.safeStringify(err)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (emailHistory.email === 'dev@resolveio.com') {\n\t\t\t\t\t\t\t\tawait EmailHistories.deleteOne({ _id: emailHistory._id });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tawait this.finalizeEmailHistoryStorage(emailHistory, 'completed');\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\tcatch (error) {\n\t\t\t\t\t\tconsole.error('Error in sendMail callback:', error);\n\t\t\t\t\t\tawait this.finalizeEmailHistoryStorage(\n\t\t\t\t\t\t\temailHistory,\n\t\t\t\t\t\t\t'failed',\n\t\t\t\t\t\t\ttypeof error === 'string' ? error : this.safeStringify(error)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tfinally {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait recordEmailMetric({\n\t\t\t\t\t\t\t\tstatus: metricStatus,\n\t\t\t\t\t\t\t\tprovider: emailProvider,\n\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\tmethod: 'sendEmail'\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\tcatch (error) {\n\t\t\t\t\t\t\tconsole.error('Error recording email metric:', error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\n\t\t\t\t// Wait for at least one second before sending the next email\n\t\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 1000));\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('Error processing email queue:', err);\n\t\t}\n\t\tfinally {\n\t\t\tthis.isEmailProcessing = false;\n\t\t\t// Check if new emails arrived while processing\n\t\t\tif (this.emailQueue.size > 0) {\n\t\t\t\tawait this.tryProcessEmail();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate shouldTrackTextMessageMetric(methodName: string): boolean {\n\t\tconst normalized = String(methodName || '').trim().toLowerCase();\n\t\tif (!normalized) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn normalized.startsWith('sendsms') || normalized.startsWith('sendtext');\n\t}\n\n\tprivate getTextMessageProvider(): string | undefined {\n\t\tconst provider = this.serverConfig?.['SMS_PROVIDER'] || '';\n\t\tif (typeof provider === 'string' && provider.trim().length) {\n\t\t\treturn provider.trim().toLowerCase();\n\t\t}\n\n\t\tif (this.serverConfig?.['TWILIO_SID'] || this.serverConfig?.['TWILIO_AUTH_TOKEN']) {\n\t\t\treturn 'twilio';\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tsafeStringify(obj)\n\t{\n\t\ttry\n\t\t{\n\t\t\treturn JSON.stringify(obj, this.getCircularReplacer());\n\t\t}\n\t\tcatch (e)\n\t\t{\n\t\t\treturn `Error in JSON stringifying: ${e.message}`;\n\t\t}\n\t}\n\n\tgetCircularReplacer()\n\t{\n\t\tconst seen = new WeakSet();\n\t\treturn (key, value) =>\n\t\t{\n\t\t\tif (typeof value === \"object\" && value !== null)\n\t\t\t{\n\t\t\t\tif (seen.has(value))\n\t\t\t\t{\n\t\t\t\t\treturn \"[Circular]\";\n\t\t\t\t}\n\t\t\t\tseen.add(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t};\n\t}\n\n\tprivate async finalizeEmailHistoryStorage(\n\t\temailHistory: EmailHistoryModel,\n\t\tstatus: 'completed' | 'failed',\n\t\terror?: string\n\t): Promise<void> {\n\t\tconst setValues: Record<string, any> = {\n\t\t\tstatus,\n\t\t\ttext: truncateTextForHistory(emailHistory.text, EMAIL_HISTORY_TEXT_MAX_CHARS),\n\t\t\thtml: truncateTextForHistory(emailHistory.html, EMAIL_HISTORY_HTML_MAX_CHARS),\n\t\t\tattachments: sanitizeAttachmentsForHistory(emailHistory.attachments),\n\t\t\tcompletedAt: new Date()\n\t\t};\n\n\t\tconst sanitizedOccurrences = sanitizeOccurrencesForHistory(emailHistory.occurrences);\n\t\tif (sanitizedOccurrences) {\n\t\t\tsetValues.occurrences = sanitizedOccurrences;\n\t\t}\n\n\t\tif (status === 'failed') {\n\t\t\tsetValues.error = truncateTextForHistory(error || '', EMAIL_HISTORY_ERROR_MAX_CHARS);\n\t\t}\n\t\telse {\n\t\t\tsetValues.error = '';\n\t\t}\n\n\t\tawait EmailHistories.updateOne(\n\t\t\t{ _id: emailHistory._id },\n\t\t\t{\n\t\t\t\t$set: setValues\n\t\t\t}\n\t\t);\n\t}\n\n\tprivate async tryMergeEmailOccurrence(\n\t\temail: string,\n\t\tsubject: string,\n\t\tcorrelationId: string,\n\t\toccurrence: EmailHistoryOccurrence,\n\t\tmeta?: Record<string, any>\n\t): Promise<EmailHistoryModel | null> {\n\t\tconst existing = await EmailHistories.findOne(\n\t\t\t{\n\t\t\t\temail,\n\t\t\t\tcorrelationId,\n\t\t\t\tstatus: 'pending'\n\t\t\t},\n\t\t\t{ sort: { date: 1 } }\n\t\t);\n\n\t\tif (!existing) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst normalizedOccurrences: EmailHistoryOccurrence[] = Array.isArray(existing.occurrences) && existing.occurrences.length\n\t\t\t? existing.occurrences.map((item: EmailHistoryOccurrence) => ({\n\t\t\t\t_id: item._id || objectIdHexString(),\n\t\t\t\tcreatedAt: item.createdAt instanceof Date ? item.createdAt : new Date(item.createdAt),\n\t\t\t\tsubject: item.subject || existing.subject || '',\n\t\t\t\ttext: item.text,\n\t\t\t\thtml: item.html,\n\t\t\t\tmeta: item.meta\n\t\t\t}))\n\t\t\t: [createEmailOccurrence(\n\t\t\t\texisting.subject || '',\n\t\t\t\ttypeof existing.text === 'string' ? existing.text : undefined,\n\t\t\t\ttypeof existing.html === 'string' ? existing.html : undefined,\n\t\t\t\texisting.meta\n\t\t\t)];\n\n\t\tnormalizedOccurrences.push(occurrence);\n\n\t\tconst { text: aggregatedText, html: aggregatedHtml } = formatGroupedEmailContent(correlationId, normalizedOccurrences);\n\n\t\tconst updated = await EmailHistories.findOneAndUpdate(\n\t\t\t{\n\t\t\t\t_id: existing._id,\n\t\t\t\tstatus: 'pending'\n\t\t\t},\n\t\t\t{\n\t\t\t\t$set: {\n\t\t\t\t\tsubject,\n\t\t\t\t\ttext: aggregatedText,\n\t\t\t\t\thtml: aggregatedHtml,\n\t\t\t\t\toccurrences: normalizedOccurrences,\n\t\t\t\t\tmeta: meta || existing.meta,\n\t\t\t\t\tupdatedAt: new Date()\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ returnDocument: 'after' }\n\t\t);\n\n\t\treturn updated || null;\n\t}\n\n\tprivate async waitForEmailCompletion(emailHistory: EmailHistoryModel, options?: SendEmailOptions): Promise<EmailHistoryModel> {\n\t\tconst timeoutMs = Math.max(1000, Number(options?.waitForCompletionTimeoutMs) || 30000);\n\t\tconst pollMs = Math.max(100, Number(options?.waitForCompletionPollMs) || 250);\n\t\tconst deadline = Date.now() + timeoutMs;\n\n\t\twhile (Date.now() <= deadline) {\n\t\t\tconst latest = await EmailHistories.findOne({_id: emailHistory._id}, {\n\t\t\t\tprojection: {\n\t\t\t\t\tstatus: 1,\n\t\t\t\t\terror: 1,\n\t\t\t\t\tdate: 1,\n\t\t\t\t\tid_user: 1,\n\t\t\t\t\tuser: 1,\n\t\t\t\t\temail: 1,\n\t\t\t\t\tsubject: 1,\n\t\t\t\t\ttext: 1,\n\t\t\t\t\thtml: 1,\n\t\t\t\t\tattachments: 1,\n\t\t\t\t\tsend_from: 1,\n\t\t\t\t\treply_to: 1,\n\t\t\t\t\tforce_ses: 1,\n\t\t\t\t\theaders: 1,\n\t\t\t\t\tcorrelationId: 1,\n\t\t\t\t\tmeta: 1,\n\t\t\t\t\toccurrences: 1,\n\t\t\t\t\tprocessingAt: 1,\n\t\t\t\t\tcompletedAt: 1\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!latest) {\n\t\t\t\treturn {\n\t\t\t\t\t...emailHistory,\n\t\t\t\t\tstatus: 'completed',\n\t\t\t\t\terror: '',\n\t\t\t\t\tcompletedAt: new Date()\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (latest.status === 'completed') {\n\t\t\t\treturn latest;\n\t\t\t}\n\n\t\t\tif (latest.status === 'failed') {\n\t\t\t\tthrow new Error(latest.error || `Email failed to send: ${latest.subject}`);\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\tawait new Promise(resolve => setTimeout(resolve, pollMs));\n\t\t}\n\n\t\tthrow new Error(`Email send timed out waiting for completion: ${emailHistory.subject}`);\n\t}\n\n\tpublic async sendEmail(\n\t\tsendTo: string,\n\t\tsubject: string,\n\t\ttext?: string | null,\n\t\thtml?: string | null,\n\t\tattachments?: any[] | null,\n\t\tsend_from?: string | null,\n\t\treply_to?: string | null,\n\t\tforce_ses = false,\n\t\tlocal_override = false,\n\t\toptions?: SendEmailOptions\n\t) {\n\t\t// Modify sendTo in development environments\n\t\tif (\n\t\t\t(ResolveIOServer.getServerConfig()['ROOT_URL'].match(/https:\\/\\/dev\\./) ||\n\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'].match(/https:\\/\\/www\\.dev\\./) ||\n\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] === 'http://localhost:4200') &&\n\t\t\t!sendTo.match(/\\@resolveio\\.com/)\n\t\t) {\n\t\t\tsendTo = 'dev@resolveio.com';\n\t\t}\n\n\t\tconst normalizedSubject = subject || '';\n\t\tconst correlationId = options?.correlationId;\n\t\tconst finalSubject = appendCorrelationIdToSubject(normalizedSubject, correlationId);\n\t\tconst groupByCorrelationId = !!correlationId;\n\t\tconst normalizedText = typeof text === 'string' ? text : '';\n\t\tconst normalizedHtml = typeof html === 'string' ? html : '';\n\t\tconst occurrence = groupByCorrelationId\n\t\t\t? createEmailOccurrence(normalizedSubject, normalizedText, normalizedHtml, options?.meta)\n\t\t\t: null;\n\t\tlet allowGrouping = groupByCorrelationId;\n\n\t\tif (sendTo) {\n\t\t\tif (\n\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200' ||\n\t\t\t\tlocal_override\n\t\t\t) {\n\t\t\t\tlet normalizedAttachments: any[] = [];\n\t\t\t\tif (Array.isArray(attachments)) {\n\t\t\t\t\tnormalizedAttachments = attachments.slice();\n\t\t\t\t}\n\t\t\t\telse if (attachments) {\n\t\t\t\t\tnormalizedAttachments = [attachments];\n\t\t\t\t}\n\n\t\t\t\tnormalizedAttachments = normalizedAttachments.map(att => {\n\t\t\t\t\tconst newAtt = { ...att };\n\t\t\t\t\tif (Buffer.isBuffer(newAtt.content)) {\n\t\t\t\t\t\tnewAtt.content = newAtt.content.toString('base64');\n\t\t\t\t\t\tnewAtt.encoding = 'base64';\n\t\t\t\t\t}\n\t\t\t\t\treturn newAtt;\n\t\t\t\t});\n\n\t\t\t\tif (normalizedAttachments.length > 0) {\n\t\t\t\t\tallowGrouping = false;\n\t\t\t\t}\n\n\t\t\t\tif (allowGrouping && occurrence && correlationId) {\n\t\t\t\t\tconst merged = await this.tryMergeEmailOccurrence(sendTo, finalSubject, correlationId, occurrence, options?.meta);\n\t\t\t\t\tif (merged) {\n\t\t\t\t\t\treturn merged;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst emailHistory: EmailHistoryModel = {\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t__v: 0,\n\t\t\t\t\tdate: new Date(),\n\t\t\t\t\tid_user: this['id_user'] || '',\n\t\t\t\t\tuser: this['user'] || '',\n\t\t\t\t\temail: sendTo,\n\t\t\t\t\tsubject: finalSubject,\n\t\t\t\t\ttext: normalizedText,\n\t\t\t\t\thtml: normalizedHtml,\n\t\t\t\t\tattachments: normalizedAttachments,\n\t\t\t\t\tsend_from: send_from || '',\n\t\t\t\t\treply_to: reply_to || '',\n\t\t\t\t\tstatus: 'pending',\n\t\t\t\t\terror: '',\n\t\t\t\t\tforce_ses,\n\t\t\t\t\theaders: options?.headers\n\t\t\t\t};\n\n\t\t\t\tif (allowGrouping && occurrence && correlationId) {\n\t\t\t\t\tconst { text: aggregatedText, html: aggregatedHtml } = formatGroupedEmailContent(correlationId, [occurrence]);\n\t\t\t\t\temailHistory.text = aggregatedText;\n\t\t\t\t\temailHistory.html = aggregatedHtml;\n\t\t\t\t\temailHistory.occurrences = [occurrence];\n\t\t\t\t\temailHistory.correlationId = correlationId;\n\t\t\t\t\tif (options?.meta) {\n\t\t\t\t\t\temailHistory.meta = options.meta;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (correlationId) {\n\t\t\t\t\t\temailHistory.correlationId = correlationId;\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.meta) {\n\t\t\t\t\t\temailHistory.meta = options.meta;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tlet history = await EmailHistories.insertOne(emailHistory);\n\t\t\t\t\tif (options?.waitForCompletion) {\n\t\t\t\t\t\treturn await this.waitForEmailCompletion(history, options);\n\t\t\t\t\t}\n\t\t\t\t\treturn history;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.error('Failed to queue email:', err);\n\t\t\t\t\terr.message = `Failed to queue email: ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.log(\n\t\t\t\t\t'Send email',\n\t\t\t\t\tsendTo,\n\t\t\t\t\tfinalSubject,\n\t\t\t\t\tnormalizedText,\n\t\t\t\t\tnormalizedHtml,\n\t\t\t\t\tattachments,\n\t\t\t\t\tsend_from,\n\t\t\t\t\tforce_ses,\n\t\t\t\t\tcorrelationId\n\t\t\t\t);\n\t\t\t\t\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic getAWS(): AWS {\n\t\treturn this._aws;\n\t}\n\n\tpublic readFile(fileName) {\n\t\tif (fs.existsSync(path.join(__dirname, ('../private/' + fileName)))) {\n\t\t\ttry {\n\t\t\t\treturn fs.readFileSync(path.join(__dirname, ('../private/' + fileName)), 'utf-8');\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\terr.message = `Error in readFile: ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (fs.existsSync(path.join(ResolveIOServer.getClientDir(), ('./private/' + fileName)))) {\n\t\t\t\ttry {\n\t\t\t\t\treturn fs.readFileSync(path.join(ResolveIOServer.getClientDir(), ('./private/' + fileName)), 'utf-8');\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.message = `Error in readFile: ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error ('Error in readFile: File Not Found');\n\t}\n\n\tpublic readImage(fileName) {\n\t\tif (fs.existsSync(path.join(__dirname, ('../private/' + fileName)))) {\n\t\t\ttry {\n\t\t\t\treturn fs.readFileSync(path.join(__dirname, ('../private/' + fileName)), 'base64');\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\terr.message = `Error in readImage: ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (fs.existsSync(path.join(ResolveIOServer.getClientDir(), ('./private/' + fileName)))) {\n\t\t\t\ttry {\n\t\t\t\t\treturn fs.readFileSync(path.join(ResolveIOServer.getClientDir(), ('./private/' + fileName)), 'base64');\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.message = `Error in readImage: ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error ('Error in readImage: File Not Found');\n\t}\n\n\tpublic getEnableDebug() {\n\t\treturn this._enableDebug;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/managers/method.manager.ts"],"names":[],"mappings":"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","file":"method.manager.js","sourcesContent":["import { S3 } from '@aws-sdk/client-s3';\nimport { SESv2Client, SendEmailCommand } from '@aws-sdk/client-sesv2';\nimport { EventEmitter, once } from 'events';\nimport * as fs from 'fs';\nimport * as nodemailer from 'nodemailer';\nimport * as path from 'path';\nimport { setTimeout as delay } from 'timers/promises';\nimport { EmailHistories } from '../collections/email-history.collection';\nimport { Flags } from '../collections/flag.collection';\nimport { Logs } from '../collections/log.collection';\nimport { loadServerCronJobs } from '../fixtures/cron-jobs';\nimport { loadServerInit } from '../fixtures/init';\nimport { loadAccountMethods } from '../methods/accounts';\nimport { loadAppSettingsMethods } from '../methods/app-settings';\nimport { loadAWSMethods } from '../methods/aws';\nimport { loadAiTerminalMethods } from '../methods/ai-terminal';\nimport { loadCollectionMethods } from '../methods/collections';\nimport { loadCustomerNotificationMethods } from '../methods/customer-notifications';\nimport { loadCounterMethods } from '../methods/counters';\nimport { loadCronJobMethods } from '../methods/cron-jobs';\nimport { loadDiagnosticMethods } from '../methods/diagnostics';\nimport { loadFlagUpdatesMethods } from '../methods/flag-updates';\nimport { loadFlagMethods } from '../methods/flags';\nimport { loadLogMethods } from '../methods/logs';\nimport { loadMonitorMethods } from '../methods/monitor';\nimport { loadMongoExplorerMethods } from '../methods/mongo-explorer';\nimport { loadPublicationMethods } from '../methods/publications';\nimport { loadPDFMethods } from '../methods/pdf';\nimport { loadReportBuilderMethods } from '../methods/report-builder';\nimport { loadSupportMethods } from '../methods/support';\nimport { EmailHistoryModel, EmailHistoryOccurrence } from '../models/email-history.model';\nimport { MethodAllModel, MethodModel } from '../models/method.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { getBinarySize, objectIdHexString } from '../util/common';\nimport { ErrorReporter } from '../util/error-reporter';\nimport { ensureErrorWithCorrelation, getCorrelationId, runWithCorrelationContext } from '../util/error-tracking';\nimport { MonitorManagerFunction } from './monitor.manager';\nimport { WebSocketManager } from './websocket.manager';\nimport { recordEmailMetric, recordTextMessageMetric } from './communication-metric.manager';\n\ninterface SendEmailOptions {\n\tcorrelationId?: string;\n\tmeta?: Record<string, any>;\n\theaders?: Record<string, string>;\n\tcc?: string | string[];\n\twaitForCompletion?: boolean;\n\twaitForCompletionTimeoutMs?: number;\n\twaitForCompletionPollMs?: number;\n}\n\nconst CALL_METHOD_LOG_SKIP_LIST = new Set([\n\t'countQuery',\n\t'getSignedUrls',\n\t'getSignedUrl',\n\t'getSignedUrlWithId',\n\t'getSignedUrlsAndFilesWithId',\n\t'updateDocumentProps',\n\t'insertDocument',\n\t'updateDocument',\n\t'uploadFileAndSave'\n]);\n\nfunction shouldWriteCallMethodLog(methodName: string, method?: MethodAllModel): boolean {\n\tif (method?.bypassLog || method?.bypassLogs) {\n\t\treturn false;\n\t}\n\n\tif (CALL_METHOD_LOG_SKIP_LIST.has(methodName)) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nfunction appendCorrelationIdToSubject(subject: string, correlationId?: string): string {\n\tif (!correlationId) {\n\t\treturn subject;\n\t}\n\n\tconst correlationTag = `[${correlationId}]`;\n\n\tif (subject && subject.includes(correlationTag)) {\n\t\treturn subject;\n\t}\n\n\treturn `${subject} ${correlationTag}`.trim();\n}\n\nfunction isDevEmailRedirectEnvironment(): boolean {\n\tconst rootUrl = ResolveIOServer.getServerConfig()['ROOT_URL'];\n\treturn !!(\n\t\trootUrl.match(/https:\\/\\/dev\\./) ||\n\t\trootUrl.match(/https:\\/\\/www\\.dev\\./) ||\n\t\trootUrl === 'http://localhost:4200'\n\t);\n}\n\nfunction normalizeEmailRecipients(recipients?: string | string[] | null): string[] {\n\tif (!recipients) {\n\t\treturn [];\n\t}\n\n\tconst list = Array.isArray(recipients) ? recipients : [recipients];\n\treturn list\n\t\t.flatMap(recipient => String(recipient).split(/[;,]/))\n\t\t.map(recipient => recipient.trim())\n\t\t.filter(Boolean);\n}\n\nfunction createEmailOccurrence(subject: string, text?: string, html?: string, meta?: Record<string, any>): EmailHistoryOccurrence {\n\treturn {\n\t\t_id: objectIdHexString(),\n\t\tcreatedAt: new Date(),\n\t\tsubject,\n\t\ttext,\n\t\thtml,\n\t\tmeta\n\t};\n}\n\nfunction formatGroupedEmailContent(correlationId: string, occurrences: EmailHistoryOccurrence[]): { text: string; html: string } {\n\tconst lines: string[] = [];\n\tlines.push(`Correlation ID: ${correlationId}`);\n\n\toccurrences.forEach((occurrence, index) => {\n\t\tconst timestamp = occurrence.createdAt instanceof Date ? occurrence.createdAt.toISOString() : new Date(occurrence.createdAt).toISOString();\n\t\tlines.push('');\n\t\tlines.push(`Occurrence #${index + 1} (${timestamp})`);\n\t\tlines.push(`Subject: ${occurrence.subject}`);\n\t\tif (occurrence.text) {\n\t\t\tlines.push(occurrence.text);\n\t\t}\n\t});\n\n\tconst htmlSections = occurrences.map((occurrence, index) => {\n\t\tconst timestamp = occurrence.createdAt instanceof Date ? occurrence.createdAt.toISOString() : new Date(occurrence.createdAt).toISOString();\n\t\tconst escapedText = occurrence.text ? occurrence.text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>') : '';\n\t\treturn `<div><h4>Occurrence #${index + 1} (${timestamp})</h4><p><strong>Subject:</strong> ${occurrence.subject}</p>${escapedText ? `<pre>${escapedText}</pre>` : ''}</div>`;\n\t});\n\n\tconst html = [\n\t\t`<p><strong>Correlation ID:</strong> ${correlationId}</p>`,\n\t\t...htmlSections\n\t].join('');\n\n\treturn {\n\t\ttext: lines.join('\\n'),\n\t\thtml\n\t};\n}\n\nconst EMAIL_HISTORY_TEXT_MAX_CHARS = 12000;\nconst EMAIL_HISTORY_HTML_MAX_CHARS = 20000;\nconst EMAIL_HISTORY_ERROR_MAX_CHARS = 8000;\nconst EMAIL_HISTORY_META_MAX_CHARS = 6000;\nconst EMAIL_HISTORY_ATTACHMENT_MAX_COUNT = 10;\nconst EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS = 1024;\nconst EMAIL_HISTORY_OCCURRENCE_MAX_COUNT = 20;\nconst EMAIL_HISTORY_OCCURRENCE_TEXT_MAX_CHARS = 4000;\nconst EMAIL_HISTORY_OCCURRENCE_HTML_MAX_CHARS = 6000;\n\nfunction truncateTextForHistory(value: unknown, maxChars: number): string {\n\tif (typeof value !== 'string') {\n\t\treturn '';\n\t}\n\n\tif (value.length <= maxChars) {\n\t\treturn value;\n\t}\n\n\tconst suffix = '...[truncated]';\n\tconst keepLength = Math.max(0, maxChars - suffix.length);\n\treturn `${value.slice(0, keepLength)}${suffix}`;\n}\n\nfunction sanitizeMetaForHistory(meta?: Record<string, any>): Record<string, any> | undefined {\n\tif (!meta || typeof meta !== 'object') {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst serialized = JSON.stringify(meta);\n\t\tif (!serialized) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (serialized.length <= EMAIL_HISTORY_META_MAX_CHARS) {\n\t\t\treturn JSON.parse(serialized);\n\t\t}\n\n\t\treturn {\n\t\t\ttruncated: true,\n\t\t\toriginalSize: serialized.length,\n\t\t\tpreview: truncateTextForHistory(serialized, EMAIL_HISTORY_META_MAX_CHARS)\n\t\t};\n\t}\n\tcatch {\n\t\treturn {\n\t\t\ttruncated: true,\n\t\t\tpreview: '[unserializable meta]'\n\t\t};\n\t}\n}\n\nfunction estimateAttachmentContentLength(content: any, encoding?: string): number | undefined {\n\tif (Buffer.isBuffer(content)) {\n\t\treturn content.length;\n\t}\n\n\tif (content instanceof Uint8Array) {\n\t\treturn content.byteLength;\n\t}\n\n\tif (content && typeof content === 'object') {\n\t\tif (content._bsontype === 'Binary' && content.buffer && typeof content.buffer.length === 'number') {\n\t\t\treturn content.buffer.length;\n\t\t}\n\n\t\tif (Array.isArray(content.data)) {\n\t\t\treturn content.data.length;\n\t\t}\n\t}\n\n\tif (typeof content === 'string') {\n\t\tif (encoding === 'base64') {\n\t\t\tconst normalized = content.replace(/\\s/g, '');\n\t\t\tconst padding = normalized.endsWith('==') ? 2 : normalized.endsWith('=') ? 1 : 0;\n\t\t\treturn Math.max(0, Math.floor((normalized.length * 3) / 4) - padding);\n\t\t}\n\n\t\treturn Buffer.byteLength(content, 'utf8');\n\t}\n\n\treturn undefined;\n}\n\nfunction sanitizeAttachmentForHistory(attachment: any): Record<string, any> {\n\tconst source = attachment && typeof attachment === 'object' ? attachment : {};\n\tconst summary: Record<string, any> = {\n\t\tcontentStored: false\n\t};\n\n\tif (typeof source.filename === 'string') {\n\t\tsummary.filename = truncateTextForHistory(source.filename, EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS);\n\t}\n\tif (typeof source.contentType === 'string') {\n\t\tsummary.contentType = truncateTextForHistory(source.contentType, EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS);\n\t}\n\tif (typeof source.contentDisposition === 'string') {\n\t\tsummary.contentDisposition = truncateTextForHistory(source.contentDisposition, EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS);\n\t}\n\tif (typeof source.cid === 'string') {\n\t\tsummary.cid = truncateTextForHistory(source.cid, EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS);\n\t}\n\tif (typeof source.path === 'string') {\n\t\tsummary.path = truncateTextForHistory(source.path, EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS);\n\t}\n\tif (typeof source.href === 'string') {\n\t\tsummary.href = truncateTextForHistory(source.href, EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS);\n\t}\n\tif (typeof source.encoding === 'string') {\n\t\tsummary.encoding = truncateTextForHistory(source.encoding, EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS);\n\t}\n\n\tconst contentLength = typeof source.size === 'number'\n\t\t? source.size\n\t\t: estimateAttachmentContentLength(source.content, source.encoding);\n\tif (typeof contentLength === 'number' && Number.isFinite(contentLength) && contentLength >= 0) {\n\t\tsummary.contentLength = contentLength;\n\t}\n\n\treturn summary;\n}\n\nfunction sanitizeAttachmentsForHistory(attachments: any[]): Record<string, any>[] {\n\tif (!Array.isArray(attachments) || !attachments.length) {\n\t\treturn [];\n\t}\n\n\tconst summarized = attachments\n\t\t.slice(0, EMAIL_HISTORY_ATTACHMENT_MAX_COUNT)\n\t\t.map((attachment) => sanitizeAttachmentForHistory(attachment));\n\n\tif (attachments.length > EMAIL_HISTORY_ATTACHMENT_MAX_COUNT) {\n\t\tsummarized.push({\n\t\t\tcontentStored: false,\n\t\t\tomittedCount: attachments.length - EMAIL_HISTORY_ATTACHMENT_MAX_COUNT\n\t\t});\n\t}\n\n\treturn summarized;\n}\n\nfunction sanitizeOccurrencesForHistory(occurrences?: EmailHistoryOccurrence[]): EmailHistoryOccurrence[] | undefined {\n\tif (!Array.isArray(occurrences) || !occurrences.length) {\n\t\treturn undefined;\n\t}\n\n\treturn occurrences.slice(-EMAIL_HISTORY_OCCURRENCE_MAX_COUNT).map((occurrence) => {\n\t\tconst createdAtCandidate = occurrence.createdAt instanceof Date ? occurrence.createdAt : new Date(occurrence.createdAt);\n\t\tconst createdAt = Number.isNaN(createdAtCandidate.getTime()) ? new Date() : createdAtCandidate;\n\t\tconst sanitized: EmailHistoryOccurrence = {\n\t\t\t_id: occurrence._id || objectIdHexString(),\n\t\t\tcreatedAt,\n\t\t\tsubject: truncateTextForHistory(occurrence.subject || '', EMAIL_HISTORY_ATTACHMENT_FIELD_MAX_CHARS)\n\t\t};\n\n\t\tif (typeof occurrence.text === 'string' && occurrence.text.length > 0) {\n\t\t\tsanitized.text = truncateTextForHistory(occurrence.text, EMAIL_HISTORY_OCCURRENCE_TEXT_MAX_CHARS);\n\t\t}\n\t\tif (typeof occurrence.html === 'string' && occurrence.html.length > 0) {\n\t\t\tsanitized.html = truncateTextForHistory(occurrence.html, EMAIL_HISTORY_OCCURRENCE_HTML_MAX_CHARS);\n\t\t}\n\n\t\tconst sanitizedMeta = sanitizeMetaForHistory(occurrence.meta);\n\t\tif (sanitizedMeta) {\n\t\t\tsanitized.meta = sanitizedMeta;\n\t\t}\n\n\t\treturn sanitized;\n\t});\n}\n\nfunction createNodeMailerSESV2Transport(sesClient: SESv2Client): nodemailer.Transporter {\n\tconst transport: any = {\n\t\tname: 'resolveio-sesv2-transport',\n\t\tversion: '1.0.0',\n\t\tsend: (mail: any, callback: any) => {\n\t\t\tconst stream = mail.message.createReadStream();\n\t\t\tconst chunks: Uint8Array[] = [];\n\t\t\tlet didFinish = false;\n\n\t\t\tconst finish = (error: any, info?: any) => {\n\t\t\t\tif (didFinish) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdidFinish = true;\n\t\t\t\tcallback(error, info);\n\t\t\t};\n\n\t\t\tstream.on('data', (chunk) => {\n\t\t\t\tconst chunkData = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n\t\t\t\tchunks.push(new Uint8Array(chunkData));\n\t\t\t});\n\n\t\t\tstream.on('error', (error) => {\n\t\t\t\tfinish(error);\n\t\t\t});\n\n\t\t\tstream.on('end', async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst rawData = Buffer.concat(chunks);\n\t\t\t\t\tconst rawMessageData = new Uint8Array(rawData);\n\t\t\t\t\tconst envelope = typeof mail.message.getEnvelope === 'function' ? mail.message.getEnvelope() : mail.data?.envelope;\n\n\t\t\t\t\tconst fromEmailAddress = envelope?.from || undefined;\n\t\t\t\t\tconst toAddresses = envelope?.to\n\t\t\t\t\t\t? (Array.isArray(envelope.to) ? envelope.to : [envelope.to]).filter(Boolean)\n\t\t\t\t\t\t: [];\n\n\t\t\t\t\tconst replyToAddresses = mail.data?.replyTo\n\t\t\t\t\t\t? (Array.isArray(mail.data.replyTo) ? mail.data.replyTo : [mail.data.replyTo]).filter(Boolean)\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tconst response = await sesClient.send(new SendEmailCommand({\n\t\t\t\t\t\tFromEmailAddress: fromEmailAddress,\n\t\t\t\t\t\tDestination: toAddresses.length ? { ToAddresses: toAddresses } : undefined,\n\t\t\t\t\t\tReplyToAddresses: replyToAddresses,\n\t\t\t\t\t\t\tContent: {\n\t\t\t\t\t\t\t\tRaw: {\n\t\t\t\t\t\t\t\t\tData: rawMessageData\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\n\t\t\t\t\tfinish(null, {\n\t\t\t\t\t\tenvelope,\n\t\t\t\t\t\tmessageId: response.MessageId,\n\t\t\t\t\t\tresponse: response.MessageId\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcatch (error) {\n\t\t\t\t\tfinish(error);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\treturn nodemailer.createTransport(transport);\n}\n\nexport class AWS {\n\tprivate _s3: S3 = null;\n\tprivate _s3USEast1: S3 = null;\n\n\tconstructor() {}\n\n\tpublic create() {\n\t\tconst aws = new AWS();\n\t\taws.initialize();\n\t\treturn aws;\n\t}\n\n\tprivate initialize() {\n\n\t}\n\n\tpublic s3(): S3 {\n\t\tif (this._s3) {\n\t\t\treturn this._s3;\n\t\t}\n\n\t\tthis._s3 = new S3({\n\t\t\tcredentials: {\n\t\t\t\taccessKeyId: process.env.AWS_ACCESS_KEY,\n\t\t\t\tsecretAccessKey: process.env.AWS_SECRET_ACCESS_KEY\n\t\t\t},\n\t\t\tregion: process.env.AWS_REGION,\n\t\t\tapiVersion: '2006-03-01'\n\t\t});\n\n\t\treturn this._s3;\n\t}\n\n\tpublic s3USEast1(): S3 {\n\t\tif (process.env.AWS_REGION === 'us-east-1') {\n\t\t\treturn this.s3();\n\t\t}\n\t\telse {\n\t\t\tif (this._s3USEast1) {\n\t\t\t\treturn this._s3USEast1;\n\t\t\t}\n\t\t\t\n\t\t\tthis._s3USEast1 = new S3({\n\t\t\t\tcredentials: {\n\t\t\t\t\taccessKeyId: process.env.AWS_ACCESS_KEY,\n\t\t\t\t\tsecretAccessKey: process.env.AWS_SECRET_ACCESS_KEY\n\t\t\t\t},\n\t\t\t\tregion: 'us-east-1',\n\t\t\t\tapiVersion: '2006-03-01'\n\t\t\t});\n\t\n\t\t\treturn this._s3USEast1;\n\t\t}\n\t}\n}\n\nexport class MethodManager {\n\tprivate _websocketManager: WebSocketManager;\n\tpublic _methods: MethodModel = {};\n\tprivate _mailerSES: nodemailer.Transporter;\n\tprivate _mailerCustom: nodemailer.Transporter;\n\tprivate _aws: AWS;\n\tprivate _monitorManagerFunction: MonitorManagerFunction;\n\tprivate _isWorkersEnabled = false;\n\tprivate _isWorkerInstance = false;\n\n\tprivate emailQueue: Set<string> = new Set(); // Set to store pending email IDs\n\tprivate isEmailProcessing = false;\n\tprivate readonly _emailProcessingDelayMs = 5000;\n\n\tprivate _debugcallMethodHits = 0;\n\tprivate _debugCallMethodHits = 0;\n\tprivate _debugCallMethodCronJobHits = 0;\n\tprivate _debugSendQueueHits = 0;\n\tprivate _enableDebug = false;\n\tprivate _ready = false;\n\tprivate _readyEmitter = new EventEmitter();\n\tprivate _readyError: any = null;\n\n\tprivate _localActiveCounts: Map<string, number> = new Map();\n\tprivate _localWaitQueues: Map<string, Array<() => void>> = new Map();\n\n\tpublic clientDir = '';\n\tpublic serverConfig: Record<string, any> = {};\n\n\tconstructor() {}\n\n\tstatic create(websocketManager: WebSocketManager, monitorManagerFunction: MonitorManagerFunction, isWorkersEnabled, isWorkerInstance) {\n\t\tconst methodManager = new MethodManager();\n\t\tmethodManager.initialize(websocketManager, monitorManagerFunction, isWorkersEnabled, isWorkerInstance);\n\t\treturn methodManager;\n\t}\n\n\tprivate initialize(websocketManager: WebSocketManager, monitorManagerFunction: MonitorManagerFunction, isWorkersEnabled, isWorkerInstance) {\n\t\tthis._websocketManager = websocketManager;\n\t\tthis._monitorManagerFunction = monitorManagerFunction;\n\t\tthis._isWorkersEnabled = isWorkersEnabled;\n\t\tthis._isWorkerInstance = isWorkerInstance;\n\t\t\n\t\tthis.clientDir = ResolveIOServer.getClientDir();\n\t\tthis.serverConfig = ResolveIOServer.getServerConfig();\n\n\t\t// Fixtures\n\t\tif (!process.env.IS_WORKERS_ENABLED || process.env.IS_WORKERS_ENABLED === 'false' || (process.env.IS_WORKER_INSTANCE === 'true' && process.env.WORKER_INDEX === '0')) {\n\t\t\tif (process.env.IS_WORKERS_ENABLED === 'false' || process.env.NODE_APP_INSTANCE === '1') {\n\t\t\t\tsetTimeout(async () => {\n\t\t\t\t\tconsole.log(new Date(), 'Start Server Fixture');\n\t\t\t\t\tawait loadServerInit();\n\t\t\t\t\tconsole.log(new Date(), 'End Server Fixture');\n\t\t\t\t}, 5000);\n\t\t\t}\n\t\t}\n\t\t\n\t\tsetImmediate(async () => {\n\t\t\ttry {\n\t\t\t\t// Methods\n\t\t\t\tawait loadServerCronJobs();\n\n\t\t\t\tloadAccountMethods(this);\n\t\t\t\tloadAppSettingsMethods(this);\n\t\t\t\tloadAWSMethods(this);\n\t\t\t\tloadAiTerminalMethods(this);\n\t\t\t\tloadCollectionMethods(this);\n\t\t\t\tloadCustomerNotificationMethods(this);\n\t\t\t\tloadCounterMethods(this);\n\t\t\t\tloadLogMethods(this);\n\t\t\t\tloadPDFMethods(this);\n\t\t\t\tloadCronJobMethods(this);\n\t\t\t\tloadFlagMethods(this);\n\t\t\t\tloadFlagUpdatesMethods(this);\n\t\t\t\tloadReportBuilderMethods(this);\n\t\t\t\tloadSupportMethods(this);\n\t\t\t\tloadMonitorMethods(this);\n\t\t\t\tloadMongoExplorerMethods(this);\n\t\t\t\tloadPublicationMethods(this);\n\t\t\t\tloadDiagnosticMethods(this);\n\n\t\t\t\tlet flag = await Flags.findOne({type: 'Enable Debug'});\n\t\t\n\t\t\t\tif (flag && flag.value) {\n\t\t\t\t\tthis._enableDebug = true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._enableDebug = false;\n\t\t\t\t}\n\n\t\t\t\tawait this.loadPendingEmails();\n\t\t\t\tthis.markReady();\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Method Manager init failed', error);\n\t\t\t\tthis.markReadyFailure(error);\n\t\t\t}\n\t\t});\n\t\t\t\n\t\t\tthis._aws = new AWS();\n\n\t\t\tconst sesRegion = process.env.AWS_SES_REGION\n\t\t\t\t|| this.serverConfig?.AWS_SES_REGION\n\t\t\t\t|| this.serverConfig?.AWSSES_REGION\n\t\t\t\t|| process.env.AWS_REGION\n\t\t\t\t|| process.env.AWS_DEFAULT_REGION\n\t\t\t\t|| 'us-east-1';\n\t\t\tconst sesCredentials = process.env.AWS_ACCESS_KEY && process.env.AWS_SECRET_ACCESS_KEY ? {\n\t\t\t\taccessKeyId: process.env.AWS_ACCESS_KEY,\n\t\t\t\tsecretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,\n\t\t\t\tsessionToken: process.env.AWS_SESSION_TOKEN\n\t\t\t} : undefined;\n\n\t\t\tthis._mailerSES = createNodeMailerSESV2Transport(new SESv2Client({\n\t\t\t\tregion: sesRegion,\n\t\t\t\tcredentials: sesCredentials\n\t\t\t}));\n\t\t\t\n\t\t\tif (!ResolveIOServer.getSESMail()) {\n\t\t\t\tthis._mailerCustom = nodemailer.createTransport({\n\t\t\t\t\thost: ResolveIOServer.getServerConfig()['MAIL_HOST'], // 'smtp.office365.com', // Office 365 server\n\t\t\t\t\tport: ResolveIOServer.getServerConfig()['MAIL_PORT'], //587, // secure SMTP\n\t\t\t\tsecure: false, // false for TLS - as a boolean not string - but the default is false so just remove this completely\n\t\t\t\tauth: {\n\t\t\t\t\tuser: ResolveIOServer.getServerConfig()['MAIL_USERNAME'],\n\t\t\t\t\tpass: ResolveIOServer.getServerConfig()['MAIL_PASSWORD']\n\t\t\t\t},\n\t\t\t\ttls: {\n\t\t\t\t\tciphers: 'SSLv3'\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tsetInterval(async () => {\n\t\t\tlet flag = await Flags.findOne({type: 'Enable Debug'});\n\t\n\t\t\tif (flag && flag.value) {\n\t\t\t\tthis._enableDebug = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._enableDebug = false;\n\t\t\t}\n\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Method Manager', 'Send Queue Hits', this._debugSendQueueHits);\n\t\t\t\tconsole.log(new Date(), 'Method Manager', 'Call Method Internal Hits', this._debugcallMethodHits);\n\t\t\t\tconsole.log(new Date(), 'Method Manager', 'Call Method Hits', this._debugCallMethodHits);\n\t\t\t\tconsole.log(new Date(), 'Method Manager', 'Call Method Cron Hits', this._debugCallMethodCronJobHits);\n\t\t\t}\n\n\t\t\tthis._debugcallMethodHits = 0;\n\t\t\tthis._debugCallMethodHits = 0;\n\t\t\tthis._debugCallMethodCronJobHits = 0;\n\t\t\tthis._debugSendQueueHits = 0;\n\t\t}, 60000);\n\n\t\tif (!this._isWorkersEnabled || this._isWorkerInstance) {\n\t\t\tthis.setupEmailWatcher();\n\t\t}\n\t}\n\n\tprivate markReady(): void {\n\t\tif (this._ready) {\n\t\t\treturn;\n\t\t}\n\t\tthis._ready = true;\n\t\tthis._readyEmitter.emit('ready');\n\t\tthis._readyEmitter.removeAllListeners('ready');\n\t\tthis._readyEmitter.removeAllListeners('readyError');\n\t}\n\n\tprivate markReadyFailure(error: any): void {\n\t\tif (this._ready) {\n\t\t\treturn;\n\t\t}\n\t\tthis._readyError = error;\n\t\tthis._readyEmitter.emit('readyError', error);\n\t\tthis._readyEmitter.removeAllListeners('ready');\n\t\tthis._readyEmitter.removeAllListeners('readyError');\n\t}\n\n\tpublic onReady(callback: () => void): () => void {\n\t\tif (this._ready) {\n\t\t\tcallback();\n\t\t\treturn () => {};\n\t\t}\n\t\tif (this._readyError) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst handleReady = () => {\n\t\t\tcallback();\n\t\t};\n\n\t\tthis._readyEmitter.once('ready', handleReady);\n\n\t\treturn () => {\n\t\t\tthis._readyEmitter.removeListener('ready', handleReady);\n\t\t};\n\t}\n\n\tprivate async waitForReadyEvent(): Promise<void> {\n\t\tawait once(this._readyEmitter, 'ready');\n\t}\n\n\tprivate async waitForReadyError(): Promise<void> {\n\t\tconst [error] = await once(this._readyEmitter, 'readyError');\n\t\tthrow error || new Error('MethodManager failed to initialize');\n\t}\n\n\tprivate async waitForReadyTimeout(timeoutMs: number): Promise<void> {\n\t\tawait delay(timeoutMs);\n\t\tthrow new Error('MethodManager ready timeout');\n\t}\n\n\tpublic isReady(): boolean {\n\t\treturn this._ready;\n\t}\n\n\tpublic getReadyError(): any {\n\t\treturn this._readyError;\n\t}\n\n\tpublic async waitUntilReady(timeoutMs: number = 30000): Promise<void> {\n\t\tif (this._ready) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._readyError) {\n\t\t\tthrow this._readyError;\n\t\t}\n\t\tif (!timeoutMs || timeoutMs <= 0) {\n\t\t\tawait Promise.race([\n\t\t\t\tthis.waitForReadyEvent(),\n\t\t\t\tthis.waitForReadyError()\n\t\t\t]);\n\t\t\treturn;\n\t\t}\n\t\tawait Promise.race([\n\t\t\tthis.waitForReadyEvent(),\n\t\t\tthis.waitForReadyError(),\n\t\t\tthis.waitForReadyTimeout(timeoutMs)\n\t\t]);\n\t}\n\n\tpublic getMethod(methodName: string): MethodAllModel {\n\t\treturn this._methods[methodName];\n\t}\n\n\t// Add methods to private methods object\n\tpublic methods(method: MethodModel) {\n\t\tthis._methods = Object.assign(this._methods, method);\n\t}\n\n\tprivate async reportMethodError(\n\t\tsubject: string,\n\t\tcorrelationId: string,\n\t\tcontext: Record<string, any> | string,\n\t\tmeta: Record<string, any>,\n\t\tstack?: string\n\t) {\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: 'method-manager',\n\t\t\tmessage: subject,\n\t\t\tenvironment: this.serverConfig?.ROOT_URL,\n\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\tclientName: this.serverConfig?.CLIENT_NAME,\n\t\t\tseverity: 'error',\n\t\t\tstack,\n\t\t\tcontext,\n\t\t\tmetadata,\n\t\t\tcorrelationId\n\t\t});\n\t}\n\n\tpublic async callMethodCron(method: string, ...methodData: any[]) {\n\t\tthis._debugCallMethodCronJobHits += 1;\n\n\t\tconst existingCorrelationId = getCorrelationId();\n\t\tconst correlationId = existingCorrelationId || objectIdHexString();\n\n\t\tconst execute = async () => {\n\t\t\tconst cronMethod = this._methods[method];\n\n\t\t\tif (!cronMethod) {\n\t\t\t\tconsole.log('No Method: ' + method);\n\n\t\t\t\tawait this.reportMethodError(\n\t\t\t\t\t'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\t{ message: 'No Method registered for cron execution', method },\n\t\t\t\t\t{ context: 'callMethodCron', method }\n\t\t\t\t);\n\n\t\t\t\tthrow new Error('No Method: ' + method);\n\t\t\t}\n\t\t\t\n\t\t\tif ((methodData.length > 1 || methodData[0]) && !cronMethod.skipValidation) {\n\t\t\t\tif (!cronMethod.check) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Function For Cron Method ' + method);\n\n\t\t\t\t\tawait this.reportMethodError(\n\t\t\t\t\t\t'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\t\tcorrelationId,\n\t\t\t\t\t\t{ message: 'Missing check function for cron method', method },\n\t\t\t\t\t\t{ context: 'callMethodCron-validation', method }\n\t\t\t\t\t);\n\t\t\n\t\t\t\t\tthrow new Error('No Check Function For Cron Method ' + method);\n\t\t\t\t}\n\t\t\t\telse if (!cronMethod.check._schema) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Schema For Cron Method ' + method);\n\n\t\t\t\t\tawait this.reportMethodError(\n\t\t\t\t\t\t'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\t\tcorrelationId,\n\t\t\t\t\t\t{ message: 'Missing check schema for cron method', method },\n\t\t\t\t\t\t{ context: 'callMethodCron-validation', method }\n\t\t\t\t\t);\n\t\t\n\t\t\t\t\tthrow new Error('No Check Schema For Cron Method ' + method);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconst valObj = {};\n\t\t\t\t\tconst valKeys = Object.keys(cronMethod.check._schema);\n\n\t\t\t\t\tconst rootKeys = valKeys.filter(a => !a.includes('.'));\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 0; i < methodData.length; i++) {\n\t\t\t\t\t\tvalObj[rootKeys[i]] = methodData[i];\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcronMethod.check.validate(valObj);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tconsole.error(new Date(), 'Error in Cron Method Check (' + method + ')', err);\n\n\t\t\t\t\t\tconst { error: normalizedError, correlationId: resolvedCorrelationId } = ensureErrorWithCorrelation(err, correlationId);\n\n\t\t\t\t\t\tawait this.reportMethodError(\n\t\t\t\t\t\t\t'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\t\t\tresolvedCorrelationId,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmessage: 'Match error on cron method',\n\t\t\t\t\t\t\t\tmethod,\n\t\t\t\t\t\t\t\tdata: valObj,\n\t\t\t\t\t\t\t\tvalidationError: normalizedError\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ context: 'callMethodCron-validation-error', method },\n\t\t\t\t\t\t\tnormalizedError.stack\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnormalizedError.message = `${new Date().toISOString()} - Error in Cron Method Check (${method}): ${normalizedError.message}`;\n\n\t\t\t\t\t\tthrow normalizedError;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst monitor = this._monitorManagerFunction.startMonitorFunction('Cron Method', method, '', '', methodData);\n\n\t\t\ttry {\n\t\t\t\tconst res = await cronMethod.function.call(Object.assign({}, this, MethodManager.prototype, {id_user: '', user: '', id_ws: ''}), ...methodData);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconst { error: normalizedError, correlationId: resolvedCorrelationId } = ensureErrorWithCorrelation(err, correlationId);\n\n\t\t\t\tawait this.reportMethodError(\n\t\t\t\t\t'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\tresolvedCorrelationId,\n\t\t\t\t\t{\n\t\t\t\t\t\tmessage: 'Error detected during cron method execution',\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\tdata: methodData,\n\t\t\t\t\t\terror: normalizedError\n\t\t\t\t\t},\n\t\t\t\t\t{ context: 'callMethodCron-execution', method },\n\t\t\t\t\tnormalizedError.stack\n\t\t\t\t);\n\t\t\t\t\n\t\t\t\tnormalizedError.message = `${new Date().toISOString()} - Error in Cron Method (${method}): ${normalizedError.message}`;\n\t\t\t\t\n\t\t\t\tthrow normalizedError;\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait this._monitorManagerFunction.finishMonitorFunction(monitor);\n\t\t\t}\n\t\t};\n\n\t\treturn await runWithCorrelationContext(correlationId, execute);\n\t}\n\n\t// Call/run method internal (No Emit on Socket)\n\tpublic async callMethod(methodName: string, ...methodData: any[]): Promise<any> {\n\t\tthis._debugcallMethodHits += 1;\n\n\t\tconst existingCorrelationId = getCorrelationId();\n\t\tconst correlationId = existingCorrelationId || objectIdHexString();\n\n\t\treturn await runWithCorrelationContext(correlationId, async () => await this.callMethodInternal(correlationId, methodName, methodData));\n\t}\n\n\tprivate async callMethodInternal(correlationId: string, methodName: string, methodData: any[]): Promise<any> {\n\t\tconst method = this.getMethod(methodName);\n\n\t\tif (!method) {\n\t\t\tconsole.log('No Method: ' + methodName);\n\t\t\tthrow new Error(`No Method: ${methodName}`);\n\t\t}\n\n\t\tconst shouldTrackTextMetric = this.shouldTrackTextMessageMetric(methodName);\n\t\tconst textMetricProvider = shouldTrackTextMetric ? this.getTextMessageProvider() : undefined;\n\n\t\tlet releaseLocalConcurrency = await this.acquireLocalConcurrency(methodName, method.maxConcurrency);\n\n\t\ttry {\n\t\t\tif ((methodData.length > 1 || (methodData[0] && typeof methodData[0] !== 'function')) && !method.skipValidation) {\n\t\t\t\tif (!method.check) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Function For Method ' + methodName);\n\t\t\t\t\tthrow new Error(`No Check Function For Method: ${methodName}`);\n\t\t\t\t}\n\t\t\t\telse if (!method.check._schema) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Schema For Method ' + methodName);\n\t\t\t\t\tthrow new Error(`No Check Schema For Method: ${methodName}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (shouldWriteCallMethodLog(methodName, method)) {\n\t\t\t\tif (\n\t\t\t\t\tResolveIOServer.shouldWriteLogsOffline()\n\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\t\t\ttype: 'callMethod',\n\t\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([methodData])) < 1000000 ? JSON.stringify([methodData], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\t\t\tid_user: this['id_user'] || '',\n\t\t\t\t\t\t\t\t\tuser: this['user'] || '', \n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: '',\n\t\t\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0',\n\t\t\t\t\t\t\t\t\tcorrelationId\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait Logs.insertOne({\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\ttype: 'callMethod',\n\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([methodData])) < 1000000 ? JSON.stringify([methodData], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\tid_user: this['id_user'] || '',\n\t\t\t\t\t\tuser: this['user'] || '',\n\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\troute: '',\n\t\t\t\t\t\tclient: 'ResolveIO',\n\t\t\t\t\t\tinstance: ResolveIOServer.getInstanceHost(),\n\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0',\n\t\t\t\t\t\tcorrelationId\n\t\t\t\t\t})\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst methodCallback = typeof(methodData[methodData.length - 1]) === 'function' ? methodData[methodData.length - 1] : null;\n\t\t\tconst functionMethodData = methodCallback ? methodData.slice(0, -1) : methodData;\n\n\t\t\tconst session = ResolveIOServer.getMongoManager().getSession();\n\t\t\tconst shouldStartTransaction = !method.bypassSession &&\n\t\t\t\t!session && \n\t\t\t\t![\n\t\t\t\t\t'insertErrorLog', // CIRCULAR LOOP - DO NOT REMOVE\n\t\t\t\t\t'countWithQuery', // MONGO SESSIONS/TRANSACTIONS DONT WORK WITH COUNTS\n\t\t\t\t\t'sendEmail' // ALWAYS SEND SO ALWAYS HAVE RECORD - DONT ROLL BACK - BYPASS SESSION\n\t\t\t\t].includes(methodName) &&\n\t\t\t\t!methodName.startsWith('monitor-') &&\n\t\t\t\t!methodName.startsWith('log');\n\n\t\t\tconst executeWithExistingSession = async () => {\n\t\t\t\t// console.log(new Date(), 'Calling Method - Existing Session', methodName);\n\t\t\t\tlet monitor = this._monitorManagerFunction.startMonitorFunction('Method', methodName, this['user'] || '', '', functionMethodData);\n\n\t\t\t\ttry {\n\t\t\t\t\tlet res = await method.function.call(Object.assign({}, this, MethodManager.prototype), ...functionMethodData);\n\n\t\t\t\t\tif (methodCallback) {\n\t\t\t\t\t\tmethodCallback(null, res);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (shouldTrackTextMetric) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait recordTextMessageMetric({\n\t\t\t\t\t\t\t\tstatus: 'sent',\n\t\t\t\t\t\t\t\tprovider: textMetricProvider,\n\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\tmethod: methodName\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\tcatch (error) {\n\t\t\t\t\t\t\tconsole.error('Error recording text message metric:', error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tif (err.code === 112 || err.codeName === 'WriteConflict' || err.code === 251 || err.codeName === 'NoSuchTransaction') {\n\t\t\t\t\t\tthrow err; // Write error, retry\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { error: normalizedError, correlationId: resolvedCorrelationId } = ensureErrorWithCorrelation(err, correlationId);\n\n\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Method Manager - Run Method - Existing Session', methodName, {\n\t\t\t\t\t\tcode: normalizedError.code,\n\t\t\t\t\t\tcodeName: normalizedError.codeName,\n\t\t\t\t\t\tmessage: normalizedError.message,\n\t\t\t\t\t\tstack: normalizedError.stack,\n\t\t\t\t\t\tcorrelationId: resolvedCorrelationId\n\t\t\t\t\t}], null, 2));\n\n\t\t\t\t\tawait this.reportMethodError(\n\t\t\t\t\t\t'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\t\tresolvedCorrelationId,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmessage: 'Error detected during method execution (existing session)',\n\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\tdata: methodData,\n\t\t\t\t\t\t\terror: normalizedError\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ context: 'callMethod-existing-session', methodName },\n\t\t\t\t\t\tnormalizedError.stack\n\t\t\t\t\t);\n\t\t\t\t\tnormalizedError.message = `${new Date().toISOString()} - Error in Method (${methodName}) - Existing Session: ${normalizedError.message}`;\n\n\t\t\t\t\tif (methodCallback) {\n\t\t\t\t\t\tmethodCallback(normalizedError, null);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (shouldTrackTextMetric) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait recordTextMessageMetric({\n\t\t\t\t\t\t\t\tstatus: 'failed',\n\t\t\t\t\t\t\t\tprovider: textMetricProvider,\n\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\tmethod: methodName\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\tcatch (error) {\n\t\t\t\t\t\t\tconsole.error('Error recording text message metric:', error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!process.env.IS_WORKER_INSTANCE) {\n\t\t\t\t\t\tawait this.callMethod(\n\t\t\t\t\t\t\t'insertErrorLog',\n\t\t\t\t\t\t\t`Error in Method: ${methodName}`,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\t\tmethodData,\n\t\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\t\tmessage: normalizedError.message,\n\t\t\t\t\t\t\t\t\tstack: normalizedError.stack,\n\t\t\t\t\t\t\t\t\tcode: normalizedError.code,\n\t\t\t\t\t\t\t\t\tcodeName: normalizedError.codeName\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tcorrelationId: resolvedCorrelationId\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\t\n\t\t\t\t\tthrow normalizedError;\n\t\t\t\t}\n\t\t\t\tfinally {\n\t\t\t\t\tawait this._monitorManagerFunction.finishMonitorFunction(monitor);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (shouldStartTransaction) {\n\t\t\t\tlet monitor = null;\n\t\t\t\t\n\t\t\t\treturn ResolveIOServer.getMongoManager().oneTimeTransaction(async () => {\n\t\t\t\t\t// console.log(new Date(), 'Calling Method - New Session', methodName);\n\n\t\t\t\t\tmonitor = this._monitorManagerFunction.startMonitorFunction('Method', methodName, this['user'] || '', '', functionMethodData);\n\t\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet res = await method.function.call(Object.assign({}, this, MethodManager.prototype), ...functionMethodData);\n\n\t\t\t\t\t\tif (methodCallback) {\n\t\t\t\t\t\t\tmethodCallback(null, res);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (shouldTrackTextMetric) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait recordTextMessageMetric({\n\t\t\t\t\t\t\t\t\tstatus: 'sent',\n\t\t\t\t\t\t\t\t\tprovider: textMetricProvider,\n\t\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\t\tmethod: methodName\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\tcatch (error) {\n\t\t\t\t\t\t\t\tconsole.error('Error recording text message metric:', error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn res;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tif (err.code === 112 || err.codeName === 'WriteConflict' || err.code === 251 || err.codeName === 'NoSuchTransaction') {\n\t\t\t\t\t\t\tthrow err; // Write error, retry\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst { error: normalizedError, correlationId: resolvedCorrelationId } = ensureErrorWithCorrelation(err, correlationId);\n\n\t\t\t\t\t\tconsole.log(JSON.stringify([new Date(), 'Error Method Manager - Run Method - New Session', methodName, {\n\t\t\t\t\t\t\tcode: normalizedError.code,\n\t\t\t\t\t\t\tcodeName: normalizedError.codeName,\n\t\t\t\t\t\t\tmessage: normalizedError.message,\n\t\t\t\t\t\t\tstack: normalizedError.stack,\n\t\t\t\t\t\t\tcorrelationId: resolvedCorrelationId\n\t\t\t\t\t\t}], null, 2));\n\n\t\t\t\t\t\tawait this.reportMethodError(\n\t\t\t\t\t\t\t'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\t\t\t\tresolvedCorrelationId,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmessage: 'Error detected during method execution (new session)',\n\t\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\t\tdata: methodData,\n\t\t\t\t\t\t\t\terror: normalizedError\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ context: 'callMethod-new-session', methodName },\n\t\t\t\t\t\t\tnormalizedError.stack\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnormalizedError.message = `${new Date().toISOString()} - Error in Method With Session (${methodName}) - New Session: ${normalizedError.message}`;\n\n\t\t\t\t\t\tif (methodCallback) {\n\t\t\t\t\t\t\tmethodCallback(normalizedError, null);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (shouldTrackTextMetric) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait recordTextMessageMetric({\n\t\t\t\t\t\t\t\t\tstatus: 'failed',\n\t\t\t\t\t\t\t\t\tprovider: textMetricProvider,\n\t\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\t\tmethod: methodName\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\tcatch (error) {\n\t\t\t\t\t\t\t\tconsole.error('Error recording text message metric:', error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!process.env.IS_WORKER_INSTANCE) {\n\t\t\t\t\t\t\tawait this.callMethod(\n\t\t\t\t\t\t\t\t'insertErrorLog',\n\t\t\t\t\t\t\t\t`Error in Method: ${methodName}`,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\t\t\tmethodData,\n\t\t\t\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\t\t\t\tmessage: normalizedError.message,\n\t\t\t\t\t\t\t\t\t\tstack: normalizedError.stack,\n\t\t\t\t\t\t\t\t\t\tcode: normalizedError.code,\n\t\t\t\t\t\t\t\t\t\tcodeName: normalizedError.codeName\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcorrelationId: resolvedCorrelationId\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\n\t\t\t\t\t\tthrow normalizedError;\n\t\t\t\t\t}\n\t\t\t\t\tfinally {\n\t\t\t\t\t\tawait this._monitorManagerFunction.finishMonitorFunction(monitor);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (method.bypassSession && session) {\n\t\t\t\treturn ResolveIOServer.getMongoManager().runWithoutSession(async () => await executeWithExistingSession());\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn executeWithExistingSession();\n\t\t\t}\n\t\t}\n\t\tfinally {\n\t\t\treleaseLocalConcurrency();\n\t\t}\n\t}\n\n\tprivate async acquireLocalConcurrency(methodName: string, maxConcurrency?: number): Promise<() => void> {\n\t\tif (!maxConcurrency || maxConcurrency < 1) {\n\t\t\treturn () => {};\n\t\t}\n\n\t\tlet current = this._localActiveCounts.get(methodName) || 0;\n\n\t\tif (current < maxConcurrency) {\n\t\t\tthis._localActiveCounts.set(methodName, current + 1);\n\t\t\treturn this.createLocalRelease(methodName);\n\t\t}\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise((resolve) => {\n\t\t\tlet queue = this._localWaitQueues.get(methodName);\n\n\t\t\tif (!queue) {\n\t\t\t\tqueue = [];\n\t\t\t\tthis._localWaitQueues.set(methodName, queue);\n\t\t\t}\n\n\t\t\tqueue.push(() => {\n\t\t\t\tlet curr = this._localActiveCounts.get(methodName) || 0;\n\t\t\t\tthis._localActiveCounts.set(methodName, curr + 1);\n\t\t\t\tresolve(this.createLocalRelease(methodName));\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate createLocalRelease(methodName: string): () => void {\n\t\tlet released = false;\n\n\t\treturn () => {\n\t\t\tif (released) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treleased = true;\n\n\t\t\tlet current = this._localActiveCounts.get(methodName) || 0;\n\t\t\tthis._localActiveCounts.set(methodName, current > 0 ? current - 1 : 0);\n\n\t\t\tlet queue = this._localWaitQueues.get(methodName);\n\n\t\t\tif (queue && queue.length) {\n\t\t\t\tlet next = queue.shift();\n\n\t\t\t\tif (next) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tsetupEmailWatcher() {\n\t\tconst changeStream = EmailHistories.watchCollection([]);\n\n\t\tchangeStream.on('change', async (change) => {\n\t\t\tif (change.operationType === 'insert' && change.fullDocument && change.fullDocument.status === 'pending') {\n\t\t\t\tthis.emailQueue.add(change.fullDocument._id.toString());\n\t\t\t\tawait this.tryProcessEmail();\n\t\t\t}\n\t\t\telse if (change.operationType === 'update' || change.operationType === 'replace') {\n\t\t\t\tconst updatedEmail = change.fullDocument;\n\t\t\t\tif (updatedEmail && updatedEmail.status !== 'pending' && this.emailQueue.has(updatedEmail._id.toString())) {\n\t\t\t\t\tthis.emailQueue.delete(updatedEmail._id.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\t.on('error', async err => {\n\t\t\tconsole.error('Email history changestream error', err);\n\t\t\tawait changeStream.close();\n\t\t})\n\t\t.on('close', () => {\n\t\t\tthis.setupEmailWatcher();\n\t\t});\n\t}\n\n\tasync loadPendingEmails() {\n\t\t// Load any pending emails on startup\n\t\tconst pendingEmails = await EmailHistories.find({ status: 'pending' }, {sort: {_id: 1}});\n\t\tfor (const email of pendingEmails) {\n\t\t\tthis.emailQueue.add(email._id.toString());\n\t\t}\n\t\t// Try to process emails\n\t\tawait this.tryProcessEmail();\n\t}\n\n\tasync tryProcessEmail() {\n\t\tif (this.isEmailProcessing || this.emailQueue.size === 0) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tthis.isEmailProcessing = true;\n\t\n\t\ttry {\n\t\t\twhile (this.emailQueue.size > 0) {\n\t\t\t\tconst emailId = this.emailQueue.values().next().value;\n\t\t\t\tthis.emailQueue.delete(emailId);\n\t\n\t\t\t\tconst pendingEmail = await EmailHistories.findOne(\n\t\t\t\t\t{\n\t\t\t\t\t\t_id: emailId,\n\t\t\t\t\t\tstatus: 'pending',\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tif (!pendingEmail) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet queuedAt: Date;\n\t\t\t\tif (pendingEmail.date instanceof Date) {\n\t\t\t\t\tqueuedAt = pendingEmail.date;\n\t\t\t\t}\n\t\t\t\telse if (pendingEmail.createdAt instanceof Date) {\n\t\t\t\t\tqueuedAt = pendingEmail.createdAt;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tqueuedAt = new Date();\n\t\t\t\t}\n\n\t\t\t\tconst timeSinceQueued = Date.now() - queuedAt.getTime();\n\t\t\t\tconst remainingDelay = this._emailProcessingDelayMs - timeSinceQueued;\n\n\t\t\t\tif (remainingDelay > 0) {\n\t\t\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, remainingDelay));\n\t\t\t\t}\n\n\t\t\t\tconst emailHistory = await EmailHistories.findOneAndUpdate(\n\t\t\t\t\t{\n\t\t\t\t\t\t_id: emailId,\n\t\t\t\t\t\tstatus: 'pending',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$set: { status: 'processing', processingAt: new Date() },\n\t\t\t\t\t}\n\t\t\t\t);\n\t\n\t\t\t\tif (!emailHistory) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\n\t\t\t\t// Fetch and process attachments\n if (emailHistory.attachments && emailHistory.attachments.length > 0) {\n\t\t\t\t\tconst validAttachments: any[] = [];\n\t\t\t\t\tlet attachmentError = false;\n\n\t\t\t\t\tfor (const att of emailHistory.attachments) {\n\t\t\t\t\t\tif (att.path && att.path.startsWith('http')) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst response = await fetch(att.path);\n\t\t\t\t\t\t\t\tif (!response.ok) {\n\t\t\t\t\t\t\t\t\tattachmentError = true;\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\t\t\t\t\t\tconst buffer = Buffer.from(arrayBuffer);\n\n\t\t\t\t\t\t\t\t// Check the size of the attachment\n\t\t\t\t\t\t\t\tconst maxSize = 20 * 1024 * 1024; // 20MB in bytes\n\t\t\t\t\t\t\t\tif (buffer.length <= maxSize) {\n\t\t\t\t\t\t\t\t\t// Attachment is within size limits, include it\n\t\t\t\t\t\t\t\t\tatt.content = buffer;\n\t\t\t\t\t\t\t\t\tdelete att.path;\n\t\t\t\t\t\t\t\t\tvalidAttachments.push(att);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\t\tconsole.error('Failed to fetch attachment:', err);\n\t\t\t\t\t\t\t\tattachmentError = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvalidAttachments.push(att);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\temailHistory.attachments = validAttachments;\n\t\t\t\t\tif (attachmentError) {\n\t\t\t\t\t\t\temailHistory.text =\n\t\t\t\t\t\t\t\t\t(typeof emailHistory.text === 'string' ? emailHistory.text : '') +\n\t\t\t\t\t\t\t\t\t'\\n\\nCould not load attachments.';\n\t\t\t\t\t\t\temailHistory.html =\n\t\t\t\t\t\t\t\t\t(typeof emailHistory.html === 'string' ? emailHistory.html : '') +\n\t\t\t\t\t\t\t\t\t'<p>Could not load attachments.</p>';\n\t\t\t\t\t}\n }\n\t\n\t\t\t\t// Prepare email options\n\t\t\t\tconst mailOptions: any = {\n\t\t\t\t\treplyTo: emailHistory.reply_to || (ResolveIOServer.getServerConfig()['MAIL_REPLY_TO'] || undefined),\n\t\t\t\t\tfrom: emailHistory.send_from || ResolveIOServer.getServerConfig().MAIL_FROM,\n\t\t\t\t\tto: emailHistory.email,\n\t\t\t\t\tcc: emailHistory.cc && emailHistory.cc.length ? emailHistory.cc : undefined,\n\t\t\t\t\tsubject:\n\t\t\t\t\t\t(ResolveIOServer.getServerConfig()['ROOT_URL'].match(/https:\\/\\/dev\\./) ||\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'].match(/https:\\/\\/www\\.dev\\./)\n\t\t\t\t\t\t\t? '(DEV SERVER) - '\n\t\t\t\t\t\t\t: '') + emailHistory.subject,\n\t\t\t\t\ttext: typeof emailHistory.text === 'string' ? emailHistory.text : '',\n\t\t\t\t\thtml: typeof emailHistory.html === 'string' ? emailHistory.html : '',\n\t\t\t\t\tattachments: emailHistory.attachments || [],\n\t\t\t\t\theaders: emailHistory.headers || undefined,\n\t\t\t\t\tforce_ses: emailHistory.force_ses\n\t\t\t\t};\n\t\n\t\t\t\t// Process attachments before sending\n\t\t\t\tif (mailOptions.attachments && mailOptions.attachments.length > 0) {\n\t\t\t\t\tmailOptions.attachments = mailOptions.attachments.map((att) => {\n\t\t\t\t\t\tconst newAtt = { ...att };\n\t\t\t\t\t\t// Handle attachments stored as BinData or Buffer\n\t\t\t\t\t\tif (newAtt.content && typeof newAtt.content === 'object' && !(newAtt.content instanceof Buffer)) {\n\t\t\t\t\t\t\t// Convert MongoDB's Binary data to Buffer\n\t\t\t\t\t\t\tif (newAtt.content._bsontype === 'Binary' && newAtt.content.sub_type === 0) {\n\t\t\t\t\t\t\t\tnewAtt.content = Buffer.from(newAtt.content.buffer);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// Handle other types if necessary\n\t\t\t\t\t\t\t\tnewAtt.content = Buffer.from(newAtt.content);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Handle attachments stored as Base64 strings\n\t\t\t\t\t\telse if (typeof newAtt.content === 'string' && newAtt.encoding === 'base64') {\n\t\t\t\t\t\t\tnewAtt.content = Buffer.from(newAtt.content, 'base64');\n\t\t\t\t\t\t\tdelete newAtt.encoding;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Ensure the content is a Buffer\n\t\t\t\t\t\telse if (typeof newAtt.content === 'string') {\n\t\t\t\t\t\t\tnewAtt.content = Buffer.from(newAtt.content);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn newAtt;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\n\t\t\t\t// Send the email\n\t\t\t\tconst emailProvider = (!mailOptions.force_ses && this._mailerCustom) ? 'custom' : 'ses';\n\t\t\t\t(!mailOptions.force_ses && this._mailerCustom ? this._mailerCustom : this._mailerSES).sendMail(mailOptions, async err => {\n\t\t\t\t\tconst metricStatus = err ? 'failed' : 'sent';\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\tconsole.error('Failed to send email:', err);\n\t\t\t\t\t\t\tawait this.finalizeEmailHistoryStorage(\n\t\t\t\t\t\t\t\temailHistory,\n\t\t\t\t\t\t\t\t'failed',\n\t\t\t\t\t\t\t\ttypeof err === 'string' ? err : this.safeStringify(err)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (emailHistory.email === 'dev@resolveio.com') {\n\t\t\t\t\t\t\t\tawait EmailHistories.deleteOne({ _id: emailHistory._id });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tawait this.finalizeEmailHistoryStorage(emailHistory, 'completed');\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\tcatch (error) {\n\t\t\t\t\t\tconsole.error('Error in sendMail callback:', error);\n\t\t\t\t\t\tawait this.finalizeEmailHistoryStorage(\n\t\t\t\t\t\t\temailHistory,\n\t\t\t\t\t\t\t'failed',\n\t\t\t\t\t\t\ttypeof error === 'string' ? error : this.safeStringify(error)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tfinally {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait recordEmailMetric({\n\t\t\t\t\t\t\t\tstatus: metricStatus,\n\t\t\t\t\t\t\t\tprovider: emailProvider,\n\t\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\t\tmethod: 'sendEmail'\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\tcatch (error) {\n\t\t\t\t\t\t\tconsole.error('Error recording email metric:', error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\n\t\t\t\t// Wait for at least one second before sending the next email\n\t\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 1000));\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('Error processing email queue:', err);\n\t\t}\n\t\tfinally {\n\t\t\tthis.isEmailProcessing = false;\n\t\t\t// Check if new emails arrived while processing\n\t\t\tif (this.emailQueue.size > 0) {\n\t\t\t\tawait this.tryProcessEmail();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate shouldTrackTextMessageMetric(methodName: string): boolean {\n\t\tconst normalized = String(methodName || '').trim().toLowerCase();\n\t\tif (!normalized) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn normalized.startsWith('sendsms') || normalized.startsWith('sendtext');\n\t}\n\n\tprivate getTextMessageProvider(): string | undefined {\n\t\tconst provider = this.serverConfig?.['SMS_PROVIDER'] || '';\n\t\tif (typeof provider === 'string' && provider.trim().length) {\n\t\t\treturn provider.trim().toLowerCase();\n\t\t}\n\n\t\tif (this.serverConfig?.['TWILIO_SID'] || this.serverConfig?.['TWILIO_AUTH_TOKEN']) {\n\t\t\treturn 'twilio';\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tsafeStringify(obj)\n\t{\n\t\ttry\n\t\t{\n\t\t\treturn JSON.stringify(obj, this.getCircularReplacer());\n\t\t}\n\t\tcatch (e)\n\t\t{\n\t\t\treturn `Error in JSON stringifying: ${e.message}`;\n\t\t}\n\t}\n\n\tgetCircularReplacer()\n\t{\n\t\tconst seen = new WeakSet();\n\t\treturn (key, value) =>\n\t\t{\n\t\t\tif (typeof value === \"object\" && value !== null)\n\t\t\t{\n\t\t\t\tif (seen.has(value))\n\t\t\t\t{\n\t\t\t\t\treturn \"[Circular]\";\n\t\t\t\t}\n\t\t\t\tseen.add(value);\n\t\t\t}\n\t\t\treturn value;\n\t\t};\n\t}\n\n\tprivate async finalizeEmailHistoryStorage(\n\t\temailHistory: EmailHistoryModel,\n\t\tstatus: 'completed' | 'failed',\n\t\terror?: string\n\t): Promise<void> {\n\t\tconst setValues: Record<string, any> = {\n\t\t\tstatus,\n\t\t\ttext: truncateTextForHistory(emailHistory.text, EMAIL_HISTORY_TEXT_MAX_CHARS),\n\t\t\thtml: truncateTextForHistory(emailHistory.html, EMAIL_HISTORY_HTML_MAX_CHARS),\n\t\t\tattachments: sanitizeAttachmentsForHistory(emailHistory.attachments),\n\t\t\tcompletedAt: new Date()\n\t\t};\n\n\t\tconst sanitizedOccurrences = sanitizeOccurrencesForHistory(emailHistory.occurrences);\n\t\tif (sanitizedOccurrences) {\n\t\t\tsetValues.occurrences = sanitizedOccurrences;\n\t\t}\n\n\t\tif (status === 'failed') {\n\t\t\tsetValues.error = truncateTextForHistory(error || '', EMAIL_HISTORY_ERROR_MAX_CHARS);\n\t\t}\n\t\telse {\n\t\t\tsetValues.error = '';\n\t\t}\n\n\t\tawait EmailHistories.updateOne(\n\t\t\t{ _id: emailHistory._id },\n\t\t\t{\n\t\t\t\t$set: setValues\n\t\t\t}\n\t\t);\n\t}\n\n\tprivate async tryMergeEmailOccurrence(\n\t\temail: string,\n\t\tsubject: string,\n\t\tcorrelationId: string,\n\t\toccurrence: EmailHistoryOccurrence,\n\t\tmeta?: Record<string, any>\n\t): Promise<EmailHistoryModel | null> {\n\t\tconst existing = await EmailHistories.findOne(\n\t\t\t{\n\t\t\t\temail,\n\t\t\t\tcorrelationId,\n\t\t\t\tstatus: 'pending'\n\t\t\t},\n\t\t\t{ sort: { date: 1 } }\n\t\t);\n\n\t\tif (!existing) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst normalizedOccurrences: EmailHistoryOccurrence[] = Array.isArray(existing.occurrences) && existing.occurrences.length\n\t\t\t? existing.occurrences.map((item: EmailHistoryOccurrence) => ({\n\t\t\t\t_id: item._id || objectIdHexString(),\n\t\t\t\tcreatedAt: item.createdAt instanceof Date ? item.createdAt : new Date(item.createdAt),\n\t\t\t\tsubject: item.subject || existing.subject || '',\n\t\t\t\ttext: item.text,\n\t\t\t\thtml: item.html,\n\t\t\t\tmeta: item.meta\n\t\t\t}))\n\t\t\t: [createEmailOccurrence(\n\t\t\t\texisting.subject || '',\n\t\t\t\ttypeof existing.text === 'string' ? existing.text : undefined,\n\t\t\t\ttypeof existing.html === 'string' ? existing.html : undefined,\n\t\t\t\texisting.meta\n\t\t\t)];\n\n\t\tnormalizedOccurrences.push(occurrence);\n\n\t\tconst { text: aggregatedText, html: aggregatedHtml } = formatGroupedEmailContent(correlationId, normalizedOccurrences);\n\n\t\tconst updated = await EmailHistories.findOneAndUpdate(\n\t\t\t{\n\t\t\t\t_id: existing._id,\n\t\t\t\tstatus: 'pending'\n\t\t\t},\n\t\t\t{\n\t\t\t\t$set: {\n\t\t\t\t\tsubject,\n\t\t\t\t\ttext: aggregatedText,\n\t\t\t\t\thtml: aggregatedHtml,\n\t\t\t\t\toccurrences: normalizedOccurrences,\n\t\t\t\t\tmeta: meta || existing.meta,\n\t\t\t\t\tupdatedAt: new Date()\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ returnDocument: 'after' }\n\t\t);\n\n\t\treturn updated || null;\n\t}\n\n\tprivate async waitForEmailCompletion(emailHistory: EmailHistoryModel, options?: SendEmailOptions): Promise<EmailHistoryModel> {\n\t\tconst timeoutMs = Math.max(1000, Number(options?.waitForCompletionTimeoutMs) || 30000);\n\t\tconst pollMs = Math.max(100, Number(options?.waitForCompletionPollMs) || 250);\n\t\tconst deadline = Date.now() + timeoutMs;\n\n\t\twhile (Date.now() <= deadline) {\n\t\t\tconst latest = await EmailHistories.findOne({_id: emailHistory._id}, {\n\t\t\t\tprojection: {\n\t\t\t\t\tstatus: 1,\n\t\t\t\t\terror: 1,\n\t\t\t\t\tdate: 1,\n\t\t\t\t\tid_user: 1,\n\t\t\t\t\tuser: 1,\n\t\t\t\t\temail: 1,\n\t\t\t\t\tsubject: 1,\n\t\t\t\t\ttext: 1,\n\t\t\t\t\thtml: 1,\n\t\t\t\t\tattachments: 1,\n\t\t\t\t\tsend_from: 1,\n\t\t\t\t\treply_to: 1,\n\t\t\t\t\tforce_ses: 1,\n\t\t\t\t\tcc: 1,\n\t\t\t\t\theaders: 1,\n\t\t\t\t\tcorrelationId: 1,\n\t\t\t\t\tmeta: 1,\n\t\t\t\t\toccurrences: 1,\n\t\t\t\t\tprocessingAt: 1,\n\t\t\t\t\tcompletedAt: 1\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!latest) {\n\t\t\t\treturn {\n\t\t\t\t\t...emailHistory,\n\t\t\t\t\tstatus: 'completed',\n\t\t\t\t\terror: '',\n\t\t\t\t\tcompletedAt: new Date()\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (latest.status === 'completed') {\n\t\t\t\treturn latest;\n\t\t\t}\n\n\t\t\tif (latest.status === 'failed') {\n\t\t\t\tthrow new Error(latest.error || `Email failed to send: ${latest.subject}`);\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\tawait new Promise(resolve => setTimeout(resolve, pollMs));\n\t\t}\n\n\t\tthrow new Error(`Email send timed out waiting for completion: ${emailHistory.subject}`);\n\t}\n\n\tpublic async sendEmail(\n\t\tsendTo: string,\n\t\tsubject: string,\n\t\ttext?: string | null,\n\t\thtml?: string | null,\n\t\tattachments?: any[] | null,\n\t\tsend_from?: string | null,\n\t\treply_to?: string | null,\n\t\tforce_ses = false,\n\t\tlocal_override = false,\n\t\toptions?: SendEmailOptions\n\t) {\n\t\t// Modify sendTo in development environments\n\t\tconst isDevEmailEnvironment = isDevEmailRedirectEnvironment();\n\t\tlet cc = normalizeEmailRecipients(options?.cc);\n\t\tif (isDevEmailEnvironment) {\n\t\t\tcc = cc.filter(email => email.match(/\\@resolveio\\.com/));\n\t\t}\n\n\t\tif (isDevEmailEnvironment && !sendTo.match(/\\@resolveio\\.com/)) {\n\t\t\tsendTo = 'dev@resolveio.com';\n\t\t}\n\n\t\tconst normalizedSubject = subject || '';\n\t\tconst correlationId = options?.correlationId;\n\t\tconst finalSubject = appendCorrelationIdToSubject(normalizedSubject, correlationId);\n\t\tconst groupByCorrelationId = !!correlationId;\n\t\tconst normalizedText = typeof text === 'string' ? text : '';\n\t\tconst normalizedHtml = typeof html === 'string' ? html : '';\n\t\tconst occurrence = groupByCorrelationId\n\t\t\t? createEmailOccurrence(normalizedSubject, normalizedText, normalizedHtml, options?.meta)\n\t\t\t: null;\n\t\tlet allowGrouping = groupByCorrelationId;\n\n\t\tif (sendTo) {\n\t\t\tif (\n\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200' ||\n\t\t\t\tlocal_override\n\t\t\t) {\n\t\t\t\tlet normalizedAttachments: any[] = [];\n\t\t\t\tif (Array.isArray(attachments)) {\n\t\t\t\t\tnormalizedAttachments = attachments.slice();\n\t\t\t\t}\n\t\t\t\telse if (attachments) {\n\t\t\t\t\tnormalizedAttachments = [attachments];\n\t\t\t\t}\n\n\t\t\t\tnormalizedAttachments = normalizedAttachments.map(att => {\n\t\t\t\t\tconst newAtt = { ...att };\n\t\t\t\t\tif (Buffer.isBuffer(newAtt.content)) {\n\t\t\t\t\t\tnewAtt.content = newAtt.content.toString('base64');\n\t\t\t\t\t\tnewAtt.encoding = 'base64';\n\t\t\t\t\t}\n\t\t\t\t\treturn newAtt;\n\t\t\t\t});\n\n\t\t\t\tif (normalizedAttachments.length > 0) {\n\t\t\t\t\tallowGrouping = false;\n\t\t\t\t}\n\t\t\t\tif (cc.length > 0) {\n\t\t\t\t\tallowGrouping = false;\n\t\t\t\t}\n\n\t\t\t\tif (allowGrouping && occurrence && correlationId) {\n\t\t\t\t\tconst merged = await this.tryMergeEmailOccurrence(sendTo, finalSubject, correlationId, occurrence, options?.meta);\n\t\t\t\t\tif (merged) {\n\t\t\t\t\t\treturn merged;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst emailHistory: EmailHistoryModel = {\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t__v: 0,\n\t\t\t\t\tdate: new Date(),\n\t\t\t\t\tid_user: this['id_user'] || '',\n\t\t\t\t\tuser: this['user'] || '',\n\t\t\t\t\temail: sendTo,\n\t\t\t\t\tsubject: finalSubject,\n\t\t\t\t\ttext: normalizedText,\n\t\t\t\t\thtml: normalizedHtml,\n\t\t\t\t\tattachments: normalizedAttachments,\n\t\t\t\t\tcc: cc,\n\t\t\t\t\tsend_from: send_from || '',\n\t\t\t\t\treply_to: reply_to || '',\n\t\t\t\t\tstatus: 'pending',\n\t\t\t\t\terror: '',\n\t\t\t\t\tforce_ses,\n\t\t\t\t\theaders: options?.headers\n\t\t\t\t};\n\n\t\t\t\tif (allowGrouping && occurrence && correlationId) {\n\t\t\t\t\tconst { text: aggregatedText, html: aggregatedHtml } = formatGroupedEmailContent(correlationId, [occurrence]);\n\t\t\t\t\temailHistory.text = aggregatedText;\n\t\t\t\t\temailHistory.html = aggregatedHtml;\n\t\t\t\t\temailHistory.occurrences = [occurrence];\n\t\t\t\t\temailHistory.correlationId = correlationId;\n\t\t\t\t\tif (options?.meta) {\n\t\t\t\t\t\temailHistory.meta = options.meta;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (correlationId) {\n\t\t\t\t\t\temailHistory.correlationId = correlationId;\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.meta) {\n\t\t\t\t\t\temailHistory.meta = options.meta;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tlet history = await EmailHistories.insertOne(emailHistory);\n\t\t\t\t\tif (options?.waitForCompletion) {\n\t\t\t\t\t\treturn await this.waitForEmailCompletion(history, options);\n\t\t\t\t\t}\n\t\t\t\t\treturn history;\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.error('Failed to queue email:', err);\n\t\t\t\t\terr.message = `Failed to queue email: ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.log(\n\t\t\t\t\t'Send email',\n\t\t\t\t\tsendTo,\n\t\t\t\t\tfinalSubject,\n\t\t\t\t\tnormalizedText,\n\t\t\t\t\tnormalizedHtml,\n\t\t\t\t\tattachments,\n\t\t\t\t\tsend_from,\n\t\t\t\t\tforce_ses,\n\t\t\t\t\tcorrelationId, \n\t\t\t\t\tcc\n\t\t\t\t);\n\t\t\t\t\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tpublic getAWS(): AWS {\n\t\treturn this._aws;\n\t}\n\n\tpublic readFile(fileName) {\n\t\tif (fs.existsSync(path.join(__dirname, ('../private/' + fileName)))) {\n\t\t\ttry {\n\t\t\t\treturn fs.readFileSync(path.join(__dirname, ('../private/' + fileName)), 'utf-8');\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\terr.message = `Error in readFile: ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (fs.existsSync(path.join(ResolveIOServer.getClientDir(), ('./private/' + fileName)))) {\n\t\t\t\ttry {\n\t\t\t\t\treturn fs.readFileSync(path.join(ResolveIOServer.getClientDir(), ('./private/' + fileName)), 'utf-8');\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.message = `Error in readFile: ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error ('Error in readFile: File Not Found');\n\t}\n\n\tpublic readImage(fileName) {\n\t\tif (fs.existsSync(path.join(__dirname, ('../private/' + fileName)))) {\n\t\t\ttry {\n\t\t\t\treturn fs.readFileSync(path.join(__dirname, ('../private/' + fileName)), 'base64');\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\terr.message = `Error in readImage: ${err.message}`;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (fs.existsSync(path.join(ResolveIOServer.getClientDir(), ('./private/' + fileName)))) {\n\t\t\t\ttry {\n\t\t\t\t\treturn fs.readFileSync(path.join(ResolveIOServer.getClientDir(), ('./private/' + fileName)), 'base64');\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\terr.message = `Error in readImage: ${err.message}`;\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error ('Error in readImage: File Not Found');\n\t}\n\n\tpublic getEnableDebug() {\n\t\treturn this._enableDebug;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/models/email-history.model.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"sources":["../../src/models/email-history.model.ts"],"names":[],"mappings":";;AAoCA,yDAAyD;AACzD,kGAAkG;AAClG,mEAAmE;AACnE,iHAAiH;AACjH,4DAA4D;AAC5D,0GAA0G;AAC1G,gHAAgH;AAChH,sGAAsG;AACtG,2EAA2E;AAC3E,4OAA4O;AAC5O,uFAAuF;AACvF,sKAAsK","file":"email-history.model.js","sourcesContent":["import { CollectionDocument } from './collection-document.model';\n\nexport interface EmailHistoryOccurrence {\n\t_id: string;\n\tcreatedAt: Date;\n\tsubject: string;\n\ttext?: string;\n\thtml?: string;\n\tmeta?: Record<string, any>;\n}\n\nexport interface EmailHistoryModel extends CollectionDocument {\n\tdate: Date;\n\tid_user: string;\n\tuser: string;\n\temail: string;\n\tsubject: string;\n\ttext: string;\n\thtml: string;\n\tattachments: any[];\n\tcc?: string[];\n\tsend_from: string;\n\treply_to: string;\n\tstatus: EmailHistoryStatusType;\n\terror: string;\n\tprocessingAt?: Date;\n\tcompletedAt?: Date;\n\tforce_ses?: boolean;\n\theaders?: Record<string, string>;\n\tcorrelationId?: string;\n\tmeta?: Record<string, any>;\n\toccurrences?: EmailHistoryOccurrence[];\n}\n\nexport type EmailHistoryStatusType = 'pending' | 'processing' | 'completed' | 'failed';\n\n// ------------------ Nodemailer Attachments ------------\n// filename - filename to be reported as the name of the attached file. Use of unicode is allowed.\n// content - String, Buffer or a Stream contents for the attachment\n// path - path to the file if you want to stream the file instead of including it (better for larger attachments)\n// href – an URL to the file (data uris are allowed as well)\n// httpHeaders - optional HTTP headers to pass on with the href request, eg. {authorization: \"bearer ...\"}\n// contentType - optional content type for the attachment, if not set will be derived from the filename property\n// contentDisposition - optional content disposition type for the attachment, defaults to ‘attachment’\n// cid - optional content id for using inline images in HTML message source\n// encoding - If set and content is string, then encodes the content to a Buffer using the specified encoding. Example values: ‘base64’, ‘hex’, ‘binary’ etc. Useful if you want to use binary attachments in a JSON formatted email object.\n// headers - custom headers for the attachment node. Same usage as with message headers\n// raw - is an optional special value that overrides entire contents of current mime node including mime headers. Useful if you want to prepare node contents yourself\n"]}
|
package/package.json
CHANGED
|
@@ -13,6 +13,7 @@ type UsageHandler = (usage: CodexUsageSummary | null) => void | Promise<void>;
|
|
|
13
13
|
export interface CodexRunOptions {
|
|
14
14
|
timeoutMs?: number;
|
|
15
15
|
streamIdleTimeoutMs?: number;
|
|
16
|
+
maxRetries?: number;
|
|
16
17
|
processWorkingDirectory?: string;
|
|
17
18
|
threadOptions?: CodexThreadOptions;
|
|
18
19
|
threadKey?: string;
|