@5minds/node-red-contrib-processcube-tools 7.6.0-develop-33a7d7-mk3ppwhj → 7.6.0-develop-675064-mk3sdkbf

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.
@@ -406,7 +406,7 @@ const nodeInit = (RED, dependencies = defaultDependencies) => {
406
406
  from: ((_a = parsed.replyTo) === null || _a === void 0 ? void 0 : _a.text) || ((_b = parsed.from) === null || _b === void 0 ? void 0 : _b.text) || '',
407
407
  date: parsed.date,
408
408
  folder,
409
- header: parsed.headers,
409
+ header: Object.fromEntries(parsed.headers),
410
410
  attachments: (parsed.attachments || []).map((att) => ({
411
411
  contentType: att.contentType,
412
412
  fileName: att.filename,
@@ -1 +1 @@
1
- {"version":3,"file":"email-receiver.js","sourceRoot":"","sources":["../../src/email-receiver/email-receiver.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeInitializer, Node, NodeDef, NodeMessageInFlow, NodeMessage } from 'node-red';\nimport Imap, { ImapMessageAttributes } from 'node-imap';\nimport { simpleParser, ParsedMail, Attachment } from 'mailparser';\nimport type { ImapConnectionConfig } from '../interfaces/ImapConnectionConfig';\nimport type { FetchState } from '../interfaces/FetchState';\nimport type { EmailReceiverMessage } from '../interfaces/EmailReceiverMessage';\n\ninterface EmailReceiverNodeProperties extends NodeDef {\n imapConfig: string; // Reference to imap-config node\n folder: string | string[];\n folderType: string;\n markseen: boolean;\n markseenType: string;\n}\n\ninterface EmailReceiverNodeMessage extends NodeMessageInFlow {}\n\n// Dependency injection interface\ninterface Dependencies {\n ImapClient: typeof Imap;\n mailParser: typeof simpleParser;\n}\n\n// Default dependencies - production values\nconst defaultDependencies: Dependencies = {\n ImapClient: Imap,\n mailParser: simpleParser,\n};\n\n// Connection pool for IMAP connections\ninterface PooledConnection {\n imap: Imap;\n lastUsed: number;\n timeout: NodeJS.Timeout;\n}\n\nconst imapConnectionPool = new Map<string, PooledConnection>();\n\n// Helper function to get or create IMAP connection from pool\nfunction getOrCreateImapConnection(\n poolKey: string,\n config: ImapConnectionConfig,\n ImapClient: typeof Imap,\n poolEnabled: boolean,\n poolTimeout: number,\n): Imap {\n // If pooling is disabled, always create a new connection\n if (!poolEnabled) {\n return new ImapClient({\n user: config.user,\n password: config.password,\n host: config.host,\n port: config.port,\n tls: config.tls,\n connTimeout: config.connTimeout,\n authTimeout: config.authTimeout,\n keepalive: config.keepalive,\n autotls: config.autotls as 'always' | 'never' | 'required',\n tlsOptions: config.tlsOptions,\n });\n }\n\n // Check if we have a valid connection in the pool\n const pooled = imapConnectionPool.get(poolKey);\n if (pooled && pooled.imap.state !== 'disconnected') {\n // Clear the existing timeout\n clearTimeout(pooled.timeout);\n\n // Update last used time\n pooled.lastUsed = Date.now();\n\n // Set new timeout\n pooled.timeout = setTimeout(() => {\n if (pooled.imap && pooled.imap.state !== 'disconnected') {\n pooled.imap.end();\n }\n imapConnectionPool.delete(poolKey);\n }, poolTimeout);\n\n return pooled.imap;\n }\n\n // Create new connection\n const imap = new ImapClient({\n user: config.user,\n password: config.password,\n host: config.host,\n port: config.port,\n tls: config.tls,\n connTimeout: config.connTimeout,\n authTimeout: config.authTimeout,\n keepalive: config.keepalive,\n autotls: config.autotls as 'always' | 'never' | 'required',\n tlsOptions: config.tlsOptions,\n });\n\n // Store in pool with timeout\n const timeout = setTimeout(() => {\n if (imap && imap.state !== 'disconnected') {\n imap.end();\n }\n imapConnectionPool.delete(poolKey);\n }, poolTimeout);\n\n imapConnectionPool.set(poolKey, {\n imap,\n lastUsed: Date.now(),\n timeout,\n });\n\n return imap;\n}\n\n// Helper function to cleanup connection from pool\nfunction cleanupImapConnection(poolKey: string, poolEnabled: boolean): void {\n if (!poolEnabled) {\n return; // Non-pooled connections clean up themselves\n }\n\n const pooled = imapConnectionPool.get(poolKey);\n if (pooled) {\n clearTimeout(pooled.timeout);\n if (pooled.imap && pooled.imap.state !== 'disconnected') {\n pooled.imap.end();\n }\n imapConnectionPool.delete(poolKey);\n }\n}\n\nfunction toBoolean(val: any, defaultValue = false) {\n if (typeof val === 'boolean') return val;\n if (typeof val === 'number') return val !== 0;\n if (typeof val === 'string') {\n const v = val.trim().toLowerCase();\n if (['true', '1', 'yes', 'on'].includes(v)) return true;\n if (['false', '0', 'no', 'off'].includes(v)) return false;\n }\n return defaultValue;\n}\n\nfunction parseDynamicProperty(input: any): string[] {\n if (input === null || input === undefined) return input;\n\n // Wenn der Wert bereits ein Array oder Objekt ist, direkt zurückgeben\n if (typeof input === \"object\") return input;\n\n // Wenn String → prüfen ob JSON oder CSV\n if (typeof input === \"string\") {\n const trimmed: string = input.trim();\n\n // Versuche JSON zu parsen\n if ((trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))) {\n try {\n return JSON.parse(trimmed);\n } catch {\n // Wenn es wie JSON aussieht, aber nicht parsebar ist → als String zurückgeben\n return [trimmed];\n }\n }\n\n // CSV-Fallback (Trennzeichen , oder ;)\n if (trimmed.includes(\",\") || trimmed.includes(\";\")) {\n return trimmed\n .split(/[,;]/)\n .map(v => v.trim())\n .filter(Boolean);\n }\n\n // Kein JSON, kein CSV → einfacher String\n return [trimmed];\n }\n\n // Fallback: primitive Werte (number, boolean etc.)\n return [String(input)];\n}\n\nconst nodeInit: NodeInitializer = (RED, dependencies: Dependencies = defaultDependencies) => {\n function EmailReceiverNode(this: Node, config: EmailReceiverNodeProperties) {\n RED.nodes.createNode(this, config);\n const node = this;\n\n // Store configuration validation error without failing construction\n let configError: Error | null = null;\n\n // Get the IMAP config node\n const imapConfigNode = RED.nodes.getNode(config.imapConfig) as any;\n\n try {\n // Validate IMAP config node exists\n if (!imapConfigNode) {\n throw new Error('IMAP configuration node is not configured');\n }\n } catch (error) {\n configError = error instanceof Error ? error : new Error(String(error));\n node.status({ fill: 'red', shape: 'ring', text: 'config error' });\n\n // Store error for test framework to detect\n (node as any).configError = configError;\n\n // Emit error immediately during construction for test framework\n // Use setImmediate to ensure node is fully constructed first\n setImmediate(() => {\n node.error(configError!.message);\n });\n }\n\n node.on('input', (msg: EmailReceiverNodeMessage, send: Function, done: Function) => {\n send =\n send ||\n function (m: NodeMessage | NodeMessage[]) {\n node.send(m);\n };\n done =\n done ||\n function (err?: Error) {\n if (err) node.error(err, msg);\n };\n\n // If there's a configuration error, report it and don't proceed\n if (configError) {\n node.error(configError.message);\n done(configError);\n return;\n }\n\n try {\n // Get configuration from config node\n const imap_markSeen = RED.util.evaluateNodeProperty(\n String(config.markseen),\n config.markseenType,\n node,\n msg,\n );\n\n // Validate folder configuration\n const evaluatedFolder = RED.util.evaluateNodeProperty(config.folder as any, config.folderType, node, msg);\n const parsedFolders: string[] = parseDynamicProperty(evaluatedFolder);\n\n // Early validation of folders - before any IMAP connection attempts\n if (!parsedFolders || parsedFolders.length === 0) {\n if (process.env.NODE_ENV === 'development') {\n console.log('[DEBUG] Parsed folders:', parsedFolders);\n console.log('[DEBUG] Original folder config:', config.folder);\n console.log('[DEBUG] Evaluated folder:', evaluatedFolder);\n }\n throw new Error('No valid folders specified. At least one folder must be provided.');\n }\n\n // Check for empty folder names\n const emptyFolders = parsedFolders.filter(folder => !folder || folder.trim().length === 0);\n if (emptyFolders.length > 0) {\n if (process.env.NODE_ENV === 'development') {\n console.log('[DEBUG] Empty folders detected:', emptyFolders);\n console.log('[DEBUG] All parsed folders:', parsedFolders);\n }\n throw new Error('Empty folder names are not allowed. Please provide valid folder names.');\n }\n\n // Check for potentially problematic folder names\n const problematicFolders = parsedFolders.filter(folder => {\n const trimmed = folder.trim();\n return /^\\d+$/.test(trimmed) || trimmed.length === 0;\n });\n if (problematicFolders.length > 0) {\n if (process.env.NODE_ENV === 'development') {\n console.log('[DEBUG] Problematic folders detected:', problematicFolders);\n console.log('[DEBUG] All parsed folders:', parsedFolders);\n }\n throw new Error(`Invalid folder names detected: ${problematicFolders.join(', ')}. Folder names should be valid strings.`);\n }\n\n // Evaluate user and password from config node (supports env and global)\n const imap_host = RED.util.evaluateNodeProperty(\n imapConfigNode.host,\n imapConfigNode.hostType || 'env',\n imapConfigNode,\n msg,\n );\n const imap_port = RED.util.evaluateNodeProperty(\n imapConfigNode.port,\n imapConfigNode.portType || 'env',\n imapConfigNode,\n msg,\n );\n const imap_user = RED.util.evaluateNodeProperty(\n imapConfigNode.user,\n imapConfigNode.userType || 'env',\n imapConfigNode,\n msg,\n );\n const imap_password = RED.util.evaluateNodeProperty(\n imapConfigNode.password,\n imapConfigNode.passwordType || 'env',\n imapConfigNode,\n msg,\n );\n\n const finalConfig: ImapConnectionConfig = {\n host: imap_host as string,\n port: Number(imap_port),\n tls: imapConfigNode.tls,\n user: imap_user as string,\n password: imap_password as string,\n folders: parsedFolders,\n markSeen: toBoolean(imap_markSeen, true),\n connTimeout: Number(imapConfigNode.connTimeout),\n authTimeout: Number(imapConfigNode.authTimeout),\n keepalive: imapConfigNode.keepalive,\n autotls: imapConfigNode.autotls,\n tlsOptions: { rejectUnauthorized: imapConfigNode.rejectUnauthorized },\n };\n\n // Debug output for development environment (always show when NODE_ENV=development)\n if (process.env.NODE_ENV === 'development') {\n const debugConfig = {\n ...finalConfig,\n password: finalConfig.password ? '[REDACTED]' : finalConfig.password\n };\n console.log('[DEBUG] Email Receiver - Final IMAP Configuration:', JSON.stringify(debugConfig, null, 2));\n }\n\n // Enhanced validation after property evaluation\n if (\n !finalConfig.user ||\n !finalConfig.password ||\n !finalConfig.port ||\n !finalConfig.host ||\n !finalConfig.folders ||\n finalConfig.folders.length === 0\n ) {\n const missingFields: string[] = [];\n if (!finalConfig.user) missingFields.push('user');\n if (!finalConfig.password) missingFields.push('password');\n if (!finalConfig.port) missingFields.push('port');\n if (!finalConfig.host) missingFields.push('host');\n if (!finalConfig.folders || finalConfig.folders.length === 0) missingFields.push('folders');\n\n // Additional debug output for missing fields in development\n if (process.env.NODE_ENV === 'development') {\n console.log('[DEBUG] Missing fields:', missingFields);\n }\n\n throw new Error(`Missing required IMAP config: ${missingFields.join(', ')}. Aborting.`);\n }\n\n const fetchEmails = (\n fetchConfig: ImapConnectionConfig,\n onMail: (mail: EmailReceiverMessage) => void,\n ) => {\n // Get pooling configuration\n const poolTimeout = imapConfigNode.poolTimeout || 60000;\n const poolKey = `${config.imapConfig}`;\n\n // Get or create IMAP connection from pool\n const imap = getOrCreateImapConnection(\n poolKey,\n fetchConfig,\n dependencies.ImapClient,\n imapConfigNode.poolEnabled,\n poolTimeout,\n );\n\n const state: FetchState = {\n totalFolders: fetchConfig.folders.length,\n processedFolders: 0,\n folderCount: {},\n successes: 0,\n failures: 0,\n totalMails: 0,\n errors: [],\n };\n\n const updateStatus = (color: string, text: string) => {\n node.status({ fill: color as any, shape: 'dot', text });\n };\n\n const finalizeSession = (error: Error | null = null) => {\n if (error) {\n state.errors.push(error);\n node.error('IMAP session terminated: ' + error.message);\n node.status({ fill: 'red', shape: 'ring', text: 'connection error' });\n node.send([\n null,\n {\n payload: {\n status: 'error',\n message: error.message,\n errors: state.errors,\n },\n },\n ]);\n done(error);\n } else if (state.errors.length > 0) {\n // Propagate accumulated errors to catch node\n node.status({\n fill: 'red',\n shape: 'dot',\n text: `Done, ${state.totalMails} mails from ${state.successes}/${state.totalFolders} folders. ${state.errors.length} errors.`,\n });\n node.send([\n null,\n {\n payload: {\n status: 'error',\n total: state.totalMails,\n successes: state.successes,\n errors: state.errors,\n totalFolders: state.totalFolders,\n },\n },\n ]);\n done(state.errors[0]);\n } else if (state.failures > 0) {\n node.status({\n fill: 'red',\n shape: 'dot',\n text: `Done, ${state.totalMails} mails from ${state.successes}/${state.totalFolders} folders. ${state.failures} failed.`,\n });\n node.send([\n null,\n {\n payload: {\n status: 'warning',\n total: state.totalMails,\n successes: state.successes,\n failures: state.failures,\n totalFolders: state.totalFolders,\n errors: state.errors,\n },\n },\n ]);\n } else {\n node.status({\n fill: 'green',\n shape: 'dot',\n text: `Done, fetched ${state.totalMails} mails from ${fetchConfig.folders.join(', ')}.`,\n });\n\n node.send([\n null,\n {\n payload: {\n status: 'success',\n total: state.totalMails,\n folderCount: state.folderCount,\n folders: fetchConfig.folders.join(', '),\n },\n },\n ]);\n }\n\n // Only close connection if pooling is disabled or there's an error\n if (!imapConfigNode.poolEnabled || error) {\n if (imap && imap.state !== 'disconnected') {\n imap.end();\n }\n }\n // If pooling is enabled, keep connection alive for reuse\n };\n\n const fetchFromFolder = (folder: string) => {\n updateStatus('yellow', `Fetching from \"${folder}\"...`);\n\n imap.openBox(folder, false, (err: Error | null, box: Imap.Box | null) => {\n if (err) {\n node.error(`Could not open folder \"${folder}\": ${err.message}`);\n state.errors.push(err);\n state.failures++;\n state.processedFolders++;\n return startNextFolder();\n }\n\n state.folderCount[folder] = 0;\n\n imap.search(['UNSEEN'], (err: Error | null, results: number[]) => {\n if (err) {\n node.error(`Search failed in folder \"${folder}\": ${err.message}`);\n state.errors.push(err);\n state.failures++;\n state.processedFolders++;\n return startNextFolder();\n }\n\n if (!results || !results.length) {\n state.successes++;\n state.processedFolders++;\n return startNextFolder();\n }\n\n state.totalMails += results.length;\n\n const fetch = imap.fetch(results, { bodies: '', markSeen: finalConfig.markSeen });\n\n fetch.on('message', (msg: Imap.ImapMessage, seqno: number) => {\n msg.on('body', (stream: NodeJS.ReadableStream) => {\n // Use injected dependency instead of direct import\n dependencies.mailParser(\n stream as any,\n (err: Error | null, parsed: ParsedMail) => {\n if (err) {\n node.error(\n `Parse error for email from folder \"${folder}\": ${err.message}`,\n );\n state.errors.push(err);\n return;\n }\n\n const outMsg: EmailReceiverMessage = {\n topic: parsed.subject || '',\n payload: parsed.text || '',\n html: parsed.html || '',\n from: parsed.replyTo?.text || parsed.from?.text || '',\n date: parsed.date,\n folder,\n header: parsed.headers,\n attachments: (parsed.attachments || []).map((att: Attachment) => ({\n contentType: att.contentType,\n fileName: att.filename,\n contentDisposition: att.contentDisposition as string,\n generatedFileName: att.cid || att.checksum,\n contentId: att.cid,\n checksum: att.checksum as string,\n length: att.size as number,\n content: att.content as Buffer,\n })),\n };\n state.folderCount[folder] = (state.folderCount[folder] || 0) + 1;\n onMail(outMsg);\n },\n );\n });\n\n if (fetchConfig.markSeen) {\n msg.once('attributes', (attrs: ImapMessageAttributes) => {\n imap.addFlags(attrs.uid, 'SEEN', (err: Error | null) => {\n if (err) {\n node.error(\n `Failed to mark message UID ${attrs.uid} as seen: ${err.message}`,\n );\n state.errors.push(err);\n }\n });\n });\n }\n });\n\n fetch.once('error', (err: Error) => {\n node.error(`Fetch error in folder \"${folder}\": ${err.message}`);\n finalizeSession(err);\n });\n\n fetch.once('end', () => {\n state.successes++;\n state.processedFolders++;\n updateStatus('green', `Fetched ${results.length} from \"${folder}\".`);\n startNextFolder();\n });\n });\n });\n };\n\n const startNextFolder = () => {\n if (state.processedFolders >= state.totalFolders) {\n finalizeSession();\n } else {\n fetchFromFolder(fetchConfig.folders[state.processedFolders]);\n }\n };\n\n // Check if connection is already established (from pool)\n const isAlreadyConnected = imap.state === 'authenticated';\n\n if (isAlreadyConnected) {\n // Connection already ready, start fetching immediately\n node.status({ fill: 'green', shape: 'dot', text: 'connected (pooled)' });\n startNextFolder();\n } else {\n // Set up event handlers for new connection\n imap.once('ready', () => {\n node.status({ fill: 'green', shape: 'dot', text: 'connected' });\n startNextFolder();\n });\n\n imap.once('error', (err: Error) => {\n finalizeSession(err);\n });\n\n imap.once('end', () => {\n updateStatus('green', 'IMAP connection ended.');\n });\n\n try {\n updateStatus('yellow', 'Connecting to IMAP...');\n imap.connect();\n } catch (err: any) {\n const error = err instanceof Error ? err : new Error(String(err));\n updateStatus('red', 'Connection error: ' + error.message);\n done(error);\n return;\n }\n }\n };\n\n fetchEmails(finalConfig, (mail) => {\n send(mail as any);\n });\n done();\n } catch (error) {\n node.status({ fill: 'red', shape: 'ring', text: 'config error' });\n done(error instanceof Error ? error : new Error(String(error)));\n }\n });\n\n node.on('close', (done: () => void) => {\n const imapConfigNode = RED.nodes.getNode(config.imapConfig) as any;\n if (imapConfigNode) {\n const poolEnabled = imapConfigNode.poolEnabled !== false;\n const poolKey = `${config.imapConfig}`;\n cleanupImapConnection(poolKey, poolEnabled);\n }\n done();\n });\n }\n RED.nodes.registerType('email-receiver', EmailReceiverNode);\n};\n\nexport = nodeInit;\n"]}
1
+ {"version":3,"file":"email-receiver.js","sourceRoot":"","sources":["../../src/email-receiver/email-receiver.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeInitializer, Node, NodeDef, NodeMessageInFlow, NodeMessage } from 'node-red';\nimport Imap, { ImapMessageAttributes } from 'node-imap';\nimport { simpleParser, ParsedMail, Attachment } from 'mailparser';\nimport type { ImapConnectionConfig } from '../interfaces/ImapConnectionConfig';\nimport type { FetchState } from '../interfaces/FetchState';\nimport type { EmailReceiverMessage } from '../interfaces/EmailReceiverMessage';\n\ninterface EmailReceiverNodeProperties extends NodeDef {\n imapConfig: string; // Reference to imap-config node\n folder: string | string[];\n folderType: string;\n markseen: boolean;\n markseenType: string;\n}\n\ninterface EmailReceiverNodeMessage extends NodeMessageInFlow {}\n\n// Dependency injection interface\ninterface Dependencies {\n ImapClient: typeof Imap;\n mailParser: typeof simpleParser;\n}\n\n// Default dependencies - production values\nconst defaultDependencies: Dependencies = {\n ImapClient: Imap,\n mailParser: simpleParser,\n};\n\n// Connection pool for IMAP connections\ninterface PooledConnection {\n imap: Imap;\n lastUsed: number;\n timeout: NodeJS.Timeout;\n}\n\nconst imapConnectionPool = new Map<string, PooledConnection>();\n\n// Helper function to get or create IMAP connection from pool\nfunction getOrCreateImapConnection(\n poolKey: string,\n config: ImapConnectionConfig,\n ImapClient: typeof Imap,\n poolEnabled: boolean,\n poolTimeout: number,\n): Imap {\n // If pooling is disabled, always create a new connection\n if (!poolEnabled) {\n return new ImapClient({\n user: config.user,\n password: config.password,\n host: config.host,\n port: config.port,\n tls: config.tls,\n connTimeout: config.connTimeout,\n authTimeout: config.authTimeout,\n keepalive: config.keepalive,\n autotls: config.autotls as 'always' | 'never' | 'required',\n tlsOptions: config.tlsOptions,\n });\n }\n\n // Check if we have a valid connection in the pool\n const pooled = imapConnectionPool.get(poolKey);\n if (pooled && pooled.imap.state !== 'disconnected') {\n // Clear the existing timeout\n clearTimeout(pooled.timeout);\n\n // Update last used time\n pooled.lastUsed = Date.now();\n\n // Set new timeout\n pooled.timeout = setTimeout(() => {\n if (pooled.imap && pooled.imap.state !== 'disconnected') {\n pooled.imap.end();\n }\n imapConnectionPool.delete(poolKey);\n }, poolTimeout);\n\n return pooled.imap;\n }\n\n // Create new connection\n const imap = new ImapClient({\n user: config.user,\n password: config.password,\n host: config.host,\n port: config.port,\n tls: config.tls,\n connTimeout: config.connTimeout,\n authTimeout: config.authTimeout,\n keepalive: config.keepalive,\n autotls: config.autotls as 'always' | 'never' | 'required',\n tlsOptions: config.tlsOptions,\n });\n\n // Store in pool with timeout\n const timeout = setTimeout(() => {\n if (imap && imap.state !== 'disconnected') {\n imap.end();\n }\n imapConnectionPool.delete(poolKey);\n }, poolTimeout);\n\n imapConnectionPool.set(poolKey, {\n imap,\n lastUsed: Date.now(),\n timeout,\n });\n\n return imap;\n}\n\n// Helper function to cleanup connection from pool\nfunction cleanupImapConnection(poolKey: string, poolEnabled: boolean): void {\n if (!poolEnabled) {\n return; // Non-pooled connections clean up themselves\n }\n\n const pooled = imapConnectionPool.get(poolKey);\n if (pooled) {\n clearTimeout(pooled.timeout);\n if (pooled.imap && pooled.imap.state !== 'disconnected') {\n pooled.imap.end();\n }\n imapConnectionPool.delete(poolKey);\n }\n}\n\nfunction toBoolean(val: any, defaultValue = false) {\n if (typeof val === 'boolean') return val;\n if (typeof val === 'number') return val !== 0;\n if (typeof val === 'string') {\n const v = val.trim().toLowerCase();\n if (['true', '1', 'yes', 'on'].includes(v)) return true;\n if (['false', '0', 'no', 'off'].includes(v)) return false;\n }\n return defaultValue;\n}\n\nfunction parseDynamicProperty(input: any): string[] {\n if (input === null || input === undefined) return input;\n\n // Wenn der Wert bereits ein Array oder Objekt ist, direkt zurückgeben\n if (typeof input === \"object\") return input;\n\n // Wenn String → prüfen ob JSON oder CSV\n if (typeof input === \"string\") {\n const trimmed: string = input.trim();\n\n // Versuche JSON zu parsen\n if ((trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))) {\n try {\n return JSON.parse(trimmed);\n } catch {\n // Wenn es wie JSON aussieht, aber nicht parsebar ist → als String zurückgeben\n return [trimmed];\n }\n }\n\n // CSV-Fallback (Trennzeichen , oder ;)\n if (trimmed.includes(\",\") || trimmed.includes(\";\")) {\n return trimmed\n .split(/[,;]/)\n .map(v => v.trim())\n .filter(Boolean);\n }\n\n // Kein JSON, kein CSV → einfacher String\n return [trimmed];\n }\n\n // Fallback: primitive Werte (number, boolean etc.)\n return [String(input)];\n}\n\nconst nodeInit: NodeInitializer = (RED, dependencies: Dependencies = defaultDependencies) => {\n function EmailReceiverNode(this: Node, config: EmailReceiverNodeProperties) {\n RED.nodes.createNode(this, config);\n const node = this;\n\n // Store configuration validation error without failing construction\n let configError: Error | null = null;\n\n // Get the IMAP config node\n const imapConfigNode = RED.nodes.getNode(config.imapConfig) as any;\n\n try {\n // Validate IMAP config node exists\n if (!imapConfigNode) {\n throw new Error('IMAP configuration node is not configured');\n }\n } catch (error) {\n configError = error instanceof Error ? error : new Error(String(error));\n node.status({ fill: 'red', shape: 'ring', text: 'config error' });\n\n // Store error for test framework to detect\n (node as any).configError = configError;\n\n // Emit error immediately during construction for test framework\n // Use setImmediate to ensure node is fully constructed first\n setImmediate(() => {\n node.error(configError!.message);\n });\n }\n\n node.on('input', (msg: EmailReceiverNodeMessage, send: Function, done: Function) => {\n send =\n send ||\n function (m: NodeMessage | NodeMessage[]) {\n node.send(m);\n };\n done =\n done ||\n function (err?: Error) {\n if (err) node.error(err, msg);\n };\n\n // If there's a configuration error, report it and don't proceed\n if (configError) {\n node.error(configError.message);\n done(configError);\n return;\n }\n\n try {\n // Get configuration from config node\n const imap_markSeen = RED.util.evaluateNodeProperty(\n String(config.markseen),\n config.markseenType,\n node,\n msg,\n );\n\n // Validate folder configuration\n const evaluatedFolder = RED.util.evaluateNodeProperty(config.folder as any, config.folderType, node, msg);\n const parsedFolders: string[] = parseDynamicProperty(evaluatedFolder);\n\n // Early validation of folders - before any IMAP connection attempts\n if (!parsedFolders || parsedFolders.length === 0) {\n if (process.env.NODE_ENV === 'development') {\n console.log('[DEBUG] Parsed folders:', parsedFolders);\n console.log('[DEBUG] Original folder config:', config.folder);\n console.log('[DEBUG] Evaluated folder:', evaluatedFolder);\n }\n throw new Error('No valid folders specified. At least one folder must be provided.');\n }\n\n // Check for empty folder names\n const emptyFolders = parsedFolders.filter(folder => !folder || folder.trim().length === 0);\n if (emptyFolders.length > 0) {\n if (process.env.NODE_ENV === 'development') {\n console.log('[DEBUG] Empty folders detected:', emptyFolders);\n console.log('[DEBUG] All parsed folders:', parsedFolders);\n }\n throw new Error('Empty folder names are not allowed. Please provide valid folder names.');\n }\n\n // Check for potentially problematic folder names\n const problematicFolders = parsedFolders.filter(folder => {\n const trimmed = folder.trim();\n return /^\\d+$/.test(trimmed) || trimmed.length === 0;\n });\n if (problematicFolders.length > 0) {\n if (process.env.NODE_ENV === 'development') {\n console.log('[DEBUG] Problematic folders detected:', problematicFolders);\n console.log('[DEBUG] All parsed folders:', parsedFolders);\n }\n throw new Error(`Invalid folder names detected: ${problematicFolders.join(', ')}. Folder names should be valid strings.`);\n }\n\n // Evaluate user and password from config node (supports env and global)\n const imap_host = RED.util.evaluateNodeProperty(\n imapConfigNode.host,\n imapConfigNode.hostType || 'env',\n imapConfigNode,\n msg,\n );\n const imap_port = RED.util.evaluateNodeProperty(\n imapConfigNode.port,\n imapConfigNode.portType || 'env',\n imapConfigNode,\n msg,\n );\n const imap_user = RED.util.evaluateNodeProperty(\n imapConfigNode.user,\n imapConfigNode.userType || 'env',\n imapConfigNode,\n msg,\n );\n const imap_password = RED.util.evaluateNodeProperty(\n imapConfigNode.password,\n imapConfigNode.passwordType || 'env',\n imapConfigNode,\n msg,\n );\n\n const finalConfig: ImapConnectionConfig = {\n host: imap_host as string,\n port: Number(imap_port),\n tls: imapConfigNode.tls,\n user: imap_user as string,\n password: imap_password as string,\n folders: parsedFolders,\n markSeen: toBoolean(imap_markSeen, true),\n connTimeout: Number(imapConfigNode.connTimeout),\n authTimeout: Number(imapConfigNode.authTimeout),\n keepalive: imapConfigNode.keepalive,\n autotls: imapConfigNode.autotls,\n tlsOptions: { rejectUnauthorized: imapConfigNode.rejectUnauthorized },\n };\n\n // Debug output for development environment (always show when NODE_ENV=development)\n if (process.env.NODE_ENV === 'development') {\n const debugConfig = {\n ...finalConfig,\n password: finalConfig.password ? '[REDACTED]' : finalConfig.password\n };\n console.log('[DEBUG] Email Receiver - Final IMAP Configuration:', JSON.stringify(debugConfig, null, 2));\n }\n\n // Enhanced validation after property evaluation\n if (\n !finalConfig.user ||\n !finalConfig.password ||\n !finalConfig.port ||\n !finalConfig.host ||\n !finalConfig.folders ||\n finalConfig.folders.length === 0\n ) {\n const missingFields: string[] = [];\n if (!finalConfig.user) missingFields.push('user');\n if (!finalConfig.password) missingFields.push('password');\n if (!finalConfig.port) missingFields.push('port');\n if (!finalConfig.host) missingFields.push('host');\n if (!finalConfig.folders || finalConfig.folders.length === 0) missingFields.push('folders');\n\n // Additional debug output for missing fields in development\n if (process.env.NODE_ENV === 'development') {\n console.log('[DEBUG] Missing fields:', missingFields);\n }\n\n throw new Error(`Missing required IMAP config: ${missingFields.join(', ')}. Aborting.`);\n }\n\n const fetchEmails = (\n fetchConfig: ImapConnectionConfig,\n onMail: (mail: EmailReceiverMessage) => void,\n ) => {\n // Get pooling configuration\n const poolTimeout = imapConfigNode.poolTimeout || 60000;\n const poolKey = `${config.imapConfig}`;\n\n // Get or create IMAP connection from pool\n const imap = getOrCreateImapConnection(\n poolKey,\n fetchConfig,\n dependencies.ImapClient,\n imapConfigNode.poolEnabled,\n poolTimeout,\n );\n\n const state: FetchState = {\n totalFolders: fetchConfig.folders.length,\n processedFolders: 0,\n folderCount: {},\n successes: 0,\n failures: 0,\n totalMails: 0,\n errors: [],\n };\n\n const updateStatus = (color: string, text: string) => {\n node.status({ fill: color as any, shape: 'dot', text });\n };\n\n const finalizeSession = (error: Error | null = null) => {\n if (error) {\n state.errors.push(error);\n node.error('IMAP session terminated: ' + error.message);\n node.status({ fill: 'red', shape: 'ring', text: 'connection error' });\n node.send([\n null,\n {\n payload: {\n status: 'error',\n message: error.message,\n errors: state.errors,\n },\n },\n ]);\n done(error);\n } else if (state.errors.length > 0) {\n // Propagate accumulated errors to catch node\n node.status({\n fill: 'red',\n shape: 'dot',\n text: `Done, ${state.totalMails} mails from ${state.successes}/${state.totalFolders} folders. ${state.errors.length} errors.`,\n });\n node.send([\n null,\n {\n payload: {\n status: 'error',\n total: state.totalMails,\n successes: state.successes,\n errors: state.errors,\n totalFolders: state.totalFolders,\n },\n },\n ]);\n done(state.errors[0]);\n } else if (state.failures > 0) {\n node.status({\n fill: 'red',\n shape: 'dot',\n text: `Done, ${state.totalMails} mails from ${state.successes}/${state.totalFolders} folders. ${state.failures} failed.`,\n });\n node.send([\n null,\n {\n payload: {\n status: 'warning',\n total: state.totalMails,\n successes: state.successes,\n failures: state.failures,\n totalFolders: state.totalFolders,\n errors: state.errors,\n },\n },\n ]);\n } else {\n node.status({\n fill: 'green',\n shape: 'dot',\n text: `Done, fetched ${state.totalMails} mails from ${fetchConfig.folders.join(', ')}.`,\n });\n\n node.send([\n null,\n {\n payload: {\n status: 'success',\n total: state.totalMails,\n folderCount: state.folderCount,\n folders: fetchConfig.folders.join(', '),\n },\n },\n ]);\n }\n\n // Only close connection if pooling is disabled or there's an error\n if (!imapConfigNode.poolEnabled || error) {\n if (imap && imap.state !== 'disconnected') {\n imap.end();\n }\n }\n // If pooling is enabled, keep connection alive for reuse\n };\n\n const fetchFromFolder = (folder: string) => {\n updateStatus('yellow', `Fetching from \"${folder}\"...`);\n\n imap.openBox(folder, false, (err: Error | null, box: Imap.Box | null) => {\n if (err) {\n node.error(`Could not open folder \"${folder}\": ${err.message}`);\n state.errors.push(err);\n state.failures++;\n state.processedFolders++;\n return startNextFolder();\n }\n\n state.folderCount[folder] = 0;\n\n imap.search(['UNSEEN'], (err: Error | null, results: number[]) => {\n if (err) {\n node.error(`Search failed in folder \"${folder}\": ${err.message}`);\n state.errors.push(err);\n state.failures++;\n state.processedFolders++;\n return startNextFolder();\n }\n\n if (!results || !results.length) {\n state.successes++;\n state.processedFolders++;\n return startNextFolder();\n }\n\n state.totalMails += results.length;\n\n const fetch = imap.fetch(results, { bodies: '', markSeen: finalConfig.markSeen });\n\n fetch.on('message', (msg: Imap.ImapMessage, seqno: number) => {\n msg.on('body', (stream: NodeJS.ReadableStream) => {\n // Use injected dependency instead of direct import\n dependencies.mailParser(\n stream as any,\n (err: Error | null, parsed: ParsedMail) => {\n if (err) {\n node.error(\n `Parse error for email from folder \"${folder}\": ${err.message}`,\n );\n state.errors.push(err);\n return;\n }\n\n const outMsg: EmailReceiverMessage = {\n topic: parsed.subject || '',\n payload: parsed.text || '',\n html: parsed.html || '',\n from: parsed.replyTo?.text || parsed.from?.text || '',\n date: parsed.date,\n folder,\n header: Object.fromEntries(parsed.headers),\n attachments: (parsed.attachments || []).map((att: Attachment) => ({\n contentType: att.contentType,\n fileName: att.filename,\n contentDisposition: att.contentDisposition as string,\n generatedFileName: att.cid || att.checksum,\n contentId: att.cid,\n checksum: att.checksum as string,\n length: att.size as number,\n content: att.content as Buffer,\n })),\n };\n state.folderCount[folder] = (state.folderCount[folder] || 0) + 1;\n onMail(outMsg);\n },\n );\n });\n\n if (fetchConfig.markSeen) {\n msg.once('attributes', (attrs: ImapMessageAttributes) => {\n imap.addFlags(attrs.uid, 'SEEN', (err: Error | null) => {\n if (err) {\n node.error(\n `Failed to mark message UID ${attrs.uid} as seen: ${err.message}`,\n );\n state.errors.push(err);\n }\n });\n });\n }\n });\n\n fetch.once('error', (err: Error) => {\n node.error(`Fetch error in folder \"${folder}\": ${err.message}`);\n finalizeSession(err);\n });\n\n fetch.once('end', () => {\n state.successes++;\n state.processedFolders++;\n updateStatus('green', `Fetched ${results.length} from \"${folder}\".`);\n startNextFolder();\n });\n });\n });\n };\n\n const startNextFolder = () => {\n if (state.processedFolders >= state.totalFolders) {\n finalizeSession();\n } else {\n fetchFromFolder(fetchConfig.folders[state.processedFolders]);\n }\n };\n\n // Check if connection is already established (from pool)\n const isAlreadyConnected = imap.state === 'authenticated';\n\n if (isAlreadyConnected) {\n // Connection already ready, start fetching immediately\n node.status({ fill: 'green', shape: 'dot', text: 'connected (pooled)' });\n startNextFolder();\n } else {\n // Set up event handlers for new connection\n imap.once('ready', () => {\n node.status({ fill: 'green', shape: 'dot', text: 'connected' });\n startNextFolder();\n });\n\n imap.once('error', (err: Error) => {\n finalizeSession(err);\n });\n\n imap.once('end', () => {\n updateStatus('green', 'IMAP connection ended.');\n });\n\n try {\n updateStatus('yellow', 'Connecting to IMAP...');\n imap.connect();\n } catch (err: any) {\n const error = err instanceof Error ? err : new Error(String(err));\n updateStatus('red', 'Connection error: ' + error.message);\n done(error);\n return;\n }\n }\n };\n\n fetchEmails(finalConfig, (mail) => {\n send(mail as any);\n });\n done();\n } catch (error) {\n node.status({ fill: 'red', shape: 'ring', text: 'config error' });\n done(error instanceof Error ? error : new Error(String(error)));\n }\n });\n\n node.on('close', (done: () => void) => {\n const imapConfigNode = RED.nodes.getNode(config.imapConfig) as any;\n if (imapConfigNode) {\n const poolEnabled = imapConfigNode.poolEnabled !== false;\n const poolKey = `${config.imapConfig}`;\n cleanupImapConnection(poolKey, poolEnabled);\n }\n done();\n });\n }\n RED.nodes.registerType('email-receiver', EmailReceiverNode);\n};\n\nexport = nodeInit;\n"]}
@@ -1,4 +1,4 @@
1
- import type { ParsedMail } from 'mailparser';
1
+ import type { HeaderValue } from 'mailparser';
2
2
  export interface EmailReceiverMessage {
3
3
  topic: string | undefined;
4
4
  payload: string | undefined;
@@ -6,7 +6,7 @@ export interface EmailReceiverMessage {
6
6
  from: string | undefined;
7
7
  date: Date | undefined;
8
8
  folder: string;
9
- header: ParsedMail['headers'];
9
+ header: Record<string, HeaderValue>;
10
10
  attachments: Array<{
11
11
  contentType: string;
12
12
  fileName: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"EmailReceiverMessage.js","sourceRoot":"","sources":["../../src/interfaces/EmailReceiverMessage.ts"],"names":[],"mappings":"","sourcesContent":["import type { ParsedMail } from 'mailparser';\n\n// Custom type for the output message\nexport interface EmailReceiverMessage {\n topic: string | undefined;\n payload: string | undefined;\n html: string | boolean | undefined;\n from: string | undefined;\n date: Date | undefined;\n folder: string;\n header: ParsedMail['headers'];\n attachments: Array<{\n contentType: string;\n fileName: string | undefined;\n contentDisposition: string;\n generatedFileName: string | undefined;\n contentId: string | undefined;\n checksum: string;\n length: number;\n content: Buffer;\n }>;\n}\n"]}
1
+ {"version":3,"file":"EmailReceiverMessage.js","sourceRoot":"","sources":["../../src/interfaces/EmailReceiverMessage.ts"],"names":[],"mappings":"","sourcesContent":["import type { HeaderValue } from 'mailparser';\n\n// Custom type for the output message\nexport interface EmailReceiverMessage {\n topic: string | undefined;\n payload: string | undefined;\n html: string | boolean | undefined;\n from: string | undefined;\n date: Date | undefined;\n folder: string;\n header: Record<string, HeaderValue>;\n attachments: Array<{\n contentType: string;\n fileName: string | undefined;\n contentDisposition: string;\n generatedFileName: string | undefined;\n contentId: string | undefined;\n checksum: string;\n length: number;\n content: Buffer;\n }>;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@5minds/node-red-contrib-processcube-tools",
3
- "version": "7.6.0-develop-33a7d7-mk3ppwhj",
3
+ "version": "7.6.0-develop-675064-mk3sdkbf",
4
4
  "license": "MIT",
5
5
  "description": "Node-RED tools nodes for ProcessCube",
6
6
  "authors": [