email-doc-sender 1.0.1 → 1.0.2

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.
@@ -0,0 +1,14 @@
1
+ import type { EmailConfig, ValidationResult } from '../types/index.js';
2
+ export declare class ConfigManager {
3
+ private configPath;
4
+ private config;
5
+ constructor(configPath?: string);
6
+ load(): Promise<EmailConfig>;
7
+ validate(config: Partial<EmailConfig>): ValidationResult;
8
+ getConfig(): EmailConfig;
9
+ private isValidEmail;
10
+ static maskPassword(password: string): string;
11
+ logConfig(): void;
12
+ }
13
+ export declare function getConfigManager(configPath?: string): ConfigManager;
14
+ //# sourceMappingURL=email.config.d.ts.map
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  import { createServer, startServer } from './server.js';
2
3
  import { getConfigManager } from './config/email.config.js';
3
4
  /**
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,kCAAkC;QAClC,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;QACzC,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;QAE3B,uCAAuC;QACvC,aAAa,CAAC,SAAS,EAAE,CAAC;QAE1B,yBAAyB;QACzB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACxE,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;QAE1D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,gGAAgG,CAAC,CAAC;QAClH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC1D,CAAC;QAED,8BAA8B;QAC9B,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QACpC,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAE1B,2BAA2B;QAC3B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,0DAA0D;QAC1D,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EAAE,CAAC;gBAC9D,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBAC/C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7B,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAChE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBACrE,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBAC/D,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;gBACjD,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,MAAe;IAC5C,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;QACvD,OAAO,CAAC,KAAK,CAAC,cAAc,MAAM,+BAA+B,CAAC,CAAC;QACnE,IAAI,CAAC;YACH,wCAAwC;YACxC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;gBAC9D,MAAO,MAAyC,CAAC,KAAK,EAAE,CAAC;YAC3D,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,yBAAyB;AACzB,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAY,EAAE,EAAE;IAC/C,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAe,EAAE,EAAE;IACnD,MAAM,KAAK,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxE,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,mBAAmB;AACnB,IAAI,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ /**
3
+ * Create and configure MCP server
4
+ */
5
+ export declare function createServer(): Promise<Server>;
6
+ /**
7
+ * Start the MCP server with stdio transport
8
+ */
9
+ export declare function startServer(server: Server): Promise<void>;
10
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1,53 @@
1
+ import type { ConvertedDoc, DocFormat } from '../types/index.js';
2
+ /**
3
+ * Document converter service
4
+ * Handles conversion between different document formats for email sending
5
+ */
6
+ export declare class DocumentConverter {
7
+ constructor();
8
+ /**
9
+ * Convert document content to email-ready format
10
+ * @param content - The document content to convert
11
+ * @param format - The format of the input content
12
+ * @param filename - Required when format is 'attachment'
13
+ * @returns ConvertedDoc with HTML, text, and optional attachment
14
+ */
15
+ convert(content: string, format: DocFormat, filename?: string): Promise<ConvertedDoc>;
16
+ /**
17
+ * Convert Markdown to HTML
18
+ */
19
+ private convertMarkdown;
20
+ /**
21
+ * Validate and wrap HTML content
22
+ */
23
+ private convertHtml;
24
+ /**
25
+ * Handle plain text content
26
+ */
27
+ private convertText;
28
+ /**
29
+ * Handle attachment format
30
+ */
31
+ private convertAttachment;
32
+ /**
33
+ * Wrap HTML content in email-friendly container
34
+ */
35
+ private wrapEmailHtml;
36
+ /**
37
+ * Basic HTML validation
38
+ */
39
+ private validateHtml;
40
+ /**
41
+ * Convert HTML to plain text (fallback)
42
+ */
43
+ private htmlToPlainText;
44
+ /**
45
+ * Escape HTML special characters
46
+ */
47
+ private escapeHtml;
48
+ }
49
+ /**
50
+ * Get or create the singleton DocumentConverter instance
51
+ */
52
+ export declare function getDocumentConverter(): DocumentConverter;
53
+ //# sourceMappingURL=converter.service.d.ts.map
@@ -0,0 +1,59 @@
1
+ import type { EmailConfig, EmailOptions, EmailResult, ConvertedDoc } from '../types/index.js';
2
+ /**
3
+ * Email sending service
4
+ * Handles SMTP connection and email sending with retry logic
5
+ */
6
+ export declare class EmailService {
7
+ private transporter;
8
+ private config;
9
+ constructor(config: EmailConfig);
10
+ /**
11
+ * Create nodemailer transporter with SMTP config
12
+ */
13
+ private createTransporter;
14
+ /**
15
+ * Send email with retry logic (exponential backoff)
16
+ * @param options - Email sending options
17
+ * @param maxRetries - Maximum number of retry attempts (default: 3)
18
+ * @returns EmailResult with success status and message ID
19
+ */
20
+ send(options: EmailOptions, maxRetries?: number): Promise<EmailResult>;
21
+ /**
22
+ * Send converted document
23
+ * @param to - Recipient email address
24
+ * @param subject - Email subject
25
+ * @param doc - Converted document
26
+ * @returns EmailResult
27
+ */
28
+ sendDocument(to: string, subject: string, doc: ConvertedDoc): Promise<EmailResult>;
29
+ /**
30
+ * Verify SMTP connection
31
+ * @returns true if connection successful
32
+ */
33
+ verifyConnection(): Promise<boolean>;
34
+ /**
35
+ * Check if error is authentication related
36
+ */
37
+ private isAuthError;
38
+ /**
39
+ * Get safe error message (don't expose sensitive info)
40
+ */
41
+ private getSafeErrorMessage;
42
+ /**
43
+ * Sleep for specified milliseconds
44
+ */
45
+ private sleep;
46
+ /**
47
+ * Recreate transporter (e.g., after config change)
48
+ */
49
+ recreateTransporter(config: EmailConfig): void;
50
+ }
51
+ /**
52
+ * Get or create the singleton EmailService instance
53
+ */
54
+ export declare function getEmailService(): Promise<EmailService>;
55
+ /**
56
+ * Reset the singleton instance (for testing)
57
+ */
58
+ export declare function resetEmailService(): void;
59
+ //# sourceMappingURL=email.service.d.ts.map
@@ -0,0 +1,10 @@
1
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ export declare const sendEmailTool: Tool;
3
+ export declare function handleSendEmail(params: Record<string, unknown>): Promise<{
4
+ content: Array<{
5
+ type: 'text';
6
+ text: string;
7
+ }>;
8
+ isError?: boolean;
9
+ }>;
10
+ //# sourceMappingURL=send-email.d.ts.map
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Document format types supported by the email service
3
+ */
4
+ export type DocFormat = 'markdown' | 'html' | 'text' | 'attachment';
5
+ /**
6
+ * Email server configuration for SMTP connection
7
+ */
8
+ export interface EmailConfig {
9
+ /** SMTP server hostname (e.g., smtp.gmail.com) */
10
+ host: string;
11
+ /** SMTP server port (usually 465 for SSL, 587 for TLS) */
12
+ port: number;
13
+ /** Whether to use SSL/TLS for secure connection */
14
+ secure: boolean;
15
+ /** SMTP authentication credentials */
16
+ auth: {
17
+ /** Email account username */
18
+ user: string;
19
+ /** Email password or app-specific password */
20
+ pass: string;
21
+ };
22
+ /** Default sender email address */
23
+ from: string;
24
+ }
25
+ /**
26
+ * Parameters for sending an email with document content
27
+ */
28
+ export interface SendEmailParams {
29
+ /** Recipient email address (required) */
30
+ to: string;
31
+ /** Email subject line (required) */
32
+ subject: string;
33
+ /** Document content to send (required) */
34
+ content: string;
35
+ /** Format of the document content (required) */
36
+ format: DocFormat;
37
+ /** Attachment filename (required when format='attachment') */
38
+ filename?: string;
39
+ }
40
+ /**
41
+ * Result of an email send operation
42
+ */
43
+ export interface EmailResult {
44
+ /** Whether the email was sent successfully */
45
+ success: boolean;
46
+ /** SMTP message ID if successful */
47
+ messageId?: string;
48
+ /** Error message if failed */
49
+ error?: string;
50
+ }
51
+ /**
52
+ * Converted document ready for email sending
53
+ */
54
+ export interface ConvertedDoc {
55
+ /** HTML content for email body */
56
+ html: string;
57
+ /** Plain text fallback content */
58
+ text: string;
59
+ /** Attachment data if format='attachment' */
60
+ attachment?: {
61
+ /** Attachment filename */
62
+ filename: string;
63
+ /** Attachment content as buffer */
64
+ content: Buffer;
65
+ };
66
+ }
67
+ /**
68
+ * Email sending options (internal)
69
+ */
70
+ export interface EmailOptions {
71
+ /** Recipient address */
72
+ to: string;
73
+ /** Email subject */
74
+ subject: string;
75
+ /** HTML body content */
76
+ html?: string;
77
+ /** Plain text body content */
78
+ text?: string;
79
+ /** Attachments */
80
+ attachments?: Array<{
81
+ filename: string;
82
+ content: Buffer;
83
+ }>;
84
+ }
85
+ /**
86
+ * Configuration validation result
87
+ */
88
+ export interface ValidationResult {
89
+ /** Whether configuration is valid */
90
+ valid: boolean;
91
+ /** Validation errors if invalid */
92
+ errors: string[];
93
+ }
94
+ //# sourceMappingURL=index.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "email-doc-sender",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "MCP server for sending generated documents to email",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -36,5 +36,10 @@
36
36
  },
37
37
  "engines": {
38
38
  "node": ">=18.0.0"
39
- }
39
+ },
40
+ "files": [
41
+ "dist",
42
+ "README.md",
43
+ "LICENSE"
44
+ ]
40
45
  }