@bernierllc/email-manager 0.1.1 → 0.1.4
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/README.md +6 -0
- package/dist/config/loadConfiguration.d.ts +60 -0
- package/dist/config/loadConfiguration.d.ts.map +1 -0
- package/dist/config/loadConfiguration.js +468 -0
- package/dist/config/loadConfiguration.js.map +1 -0
- package/dist/config/schema.d.ts +867 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +301 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/types.d.ts +826 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +9 -0
- package/dist/config/types.js.map +1 -0
- package/dist/email-manager.d.ts.map +1 -1
- package/dist/email-manager.js +9 -13
- package/dist/email-manager.js.map +1 -1
- package/dist/enhanced-email-manager.d.ts +173 -0
- package/dist/enhanced-email-manager.d.ts.map +1 -0
- package/dist/enhanced-email-manager.js +866 -0
- package/dist/enhanced-email-manager.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +356 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +46 -18
package/README.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
A comprehensive email management service that orchestrates email sending, template management, scheduling, and analytics. This service integrates with `@bernierllc/email-sender`, `@bernierllc/template-engine`, and `@bernierllc/magic-link` to provide a complete email solution.
|
|
4
4
|
|
|
5
|
+
## ⚠️ Node.js Only
|
|
6
|
+
|
|
7
|
+
**This package is Node.js-only** and cannot be bundled for browser use due to Node.js dependencies (nodemailer, etc.).
|
|
8
|
+
|
|
9
|
+
**For browser/frontend applications**, use [`@bernierllc/email-manager-client`](../email-manager-client/README.md) instead, which provides the same API via HTTP calls.
|
|
10
|
+
|
|
5
11
|
## Features
|
|
6
12
|
|
|
7
13
|
### 🚀 **Email Orchestration**
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { ResolvedEmailManagerConfig, ConfigurationSource } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration loader with source tracking and validation
|
|
4
|
+
*/
|
|
5
|
+
export declare class EmailManagerConfigurationLoader {
|
|
6
|
+
private sources;
|
|
7
|
+
/**
|
|
8
|
+
* Parse environment variable value to appropriate type
|
|
9
|
+
*/
|
|
10
|
+
private parseEnvironmentValue;
|
|
11
|
+
/**
|
|
12
|
+
* Set nested object value using dot notation
|
|
13
|
+
*/
|
|
14
|
+
private setNestedValue;
|
|
15
|
+
/**
|
|
16
|
+
* Merge configuration objects recursively
|
|
17
|
+
*/
|
|
18
|
+
private mergeConfiguration;
|
|
19
|
+
/**
|
|
20
|
+
* Get default configuration values
|
|
21
|
+
*/
|
|
22
|
+
private getDefaultConfiguration;
|
|
23
|
+
/**
|
|
24
|
+
* Load configuration from all sources with validation
|
|
25
|
+
*/
|
|
26
|
+
loadConfiguration(): ResolvedEmailManagerConfig;
|
|
27
|
+
/**
|
|
28
|
+
* Configure core package dependencies with overrides
|
|
29
|
+
*/
|
|
30
|
+
private configureCorePackageDependencies;
|
|
31
|
+
/**
|
|
32
|
+
* Get configuration sources for debugging
|
|
33
|
+
*/
|
|
34
|
+
getConfigurationSources(): ConfigurationSource[];
|
|
35
|
+
/**
|
|
36
|
+
* Get environment variable documentation
|
|
37
|
+
*/
|
|
38
|
+
getEnvironmentVariableDocumentation(): Record<string, string>;
|
|
39
|
+
/**
|
|
40
|
+
* Print resolved configuration with sensitive data redacted
|
|
41
|
+
*/
|
|
42
|
+
printConfiguration(config: ResolvedEmailManagerConfig, redactSecrets?: boolean): string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Load email manager suite configuration
|
|
46
|
+
* Main entry point for configuration loading
|
|
47
|
+
*/
|
|
48
|
+
export declare function loadEmailManagerConfiguration(): ResolvedEmailManagerConfig;
|
|
49
|
+
/**
|
|
50
|
+
* Load configuration with source tracking for debugging
|
|
51
|
+
*/
|
|
52
|
+
export declare function loadEmailManagerConfigurationWithSources(): {
|
|
53
|
+
config: ResolvedEmailManagerConfig;
|
|
54
|
+
sources: ConfigurationSource[];
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Get environment variable documentation
|
|
58
|
+
*/
|
|
59
|
+
export declare function getEmailManagerEnvironmentDocumentation(): Record<string, string>;
|
|
60
|
+
//# sourceMappingURL=loadConfiguration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadConfiguration.d.ts","sourceRoot":"","sources":["../../src/config/loadConfiguration.ts"],"names":[],"mappings":"AASA,OAAO,EAA6B,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA+FxG;;GAEG;AACH,qBAAa,+BAA+B;IAC1C,OAAO,CAAC,OAAO,CAA6B;IAE5C;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA4I/B;;OAEG;IACH,iBAAiB,IAAI,0BAA0B;IAuF/C;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAwBxC;;OAEG;IACH,uBAAuB,IAAI,mBAAmB,EAAE;IAIhD;;OAEG;IACH,mCAAmC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAU7D;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,0BAA0B,EAAE,aAAa,GAAE,OAAc,GAAG,MAAM;CAqB9F;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,IAAI,0BAA0B,CAG1E;AAED;;GAEG;AACH,wBAAgB,wCAAwC,IAAI;IAC1D,MAAM,EAAE,0BAA0B,CAAC;IACnC,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC,CAMA;AAED;;GAEG;AACH,wBAAgB,uCAAuC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGhF"}
|
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (c) 2025 Bernier LLC
|
|
3
|
+
|
|
4
|
+
This file is licensed to the client under a limited-use license.
|
|
5
|
+
The client may use and modify this code *only within the scope of the project it was delivered for*.
|
|
6
|
+
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
|
|
7
|
+
*/
|
|
8
|
+
import { cosmiconfigSync } from 'cosmiconfig';
|
|
9
|
+
import { emailManagerConfigSchema, validateEmailManagerConfig } from './schema.js';
|
|
10
|
+
/**
|
|
11
|
+
* Environment variable mappings for email manager suite
|
|
12
|
+
*/
|
|
13
|
+
const ENV_MAPPINGS = {
|
|
14
|
+
enabled: 'EMAIL_MANAGER_ENABLED',
|
|
15
|
+
defaultProvider: 'EMAIL_MANAGER_DEFAULT_PROVIDER',
|
|
16
|
+
'providers.configDir': 'EMAIL_MANAGER_PROVIDERS_DIR',
|
|
17
|
+
'providers.failover.enabled': 'EMAIL_MANAGER_FAILOVER_ENABLED',
|
|
18
|
+
'providers.failover.maxAttempts': 'EMAIL_MANAGER_FAILOVER_MAX_ATTEMPTS',
|
|
19
|
+
'providers.failover.delayMs': 'EMAIL_MANAGER_FAILOVER_DELAY_MS',
|
|
20
|
+
'providers.healthCheck.enabled': 'EMAIL_MANAGER_HEALTH_CHECK_ENABLED',
|
|
21
|
+
'providers.healthCheck.intervalMs': 'EMAIL_MANAGER_HEALTH_CHECK_INTERVAL_MS',
|
|
22
|
+
'providers.healthCheck.timeoutMs': 'EMAIL_MANAGER_HEALTH_CHECK_TIMEOUT_MS',
|
|
23
|
+
'templates.storageDir': 'EMAIL_MANAGER_TEMPLATES_DIR',
|
|
24
|
+
'templates.maxPerCategory': 'EMAIL_MANAGER_TEMPLATES_MAX_PER_CATEGORY',
|
|
25
|
+
'templates.cacheTtlMs': 'EMAIL_MANAGER_TEMPLATES_CACHE_TTL_MS',
|
|
26
|
+
'templates.versioningEnabled': 'EMAIL_MANAGER_TEMPLATES_VERSIONING_ENABLED',
|
|
27
|
+
'templates.validationEnabled': 'EMAIL_MANAGER_TEMPLATES_VALIDATION_ENABLED',
|
|
28
|
+
'templates.compilation.enabled': 'EMAIL_MANAGER_TEMPLATES_PRECOMPILE',
|
|
29
|
+
'templates.compilation.engine': 'EMAIL_MANAGER_TEMPLATES_ENGINE',
|
|
30
|
+
'templates.compilation.cacheSize': 'EMAIL_MANAGER_TEMPLATES_COMPILE_CACHE_SIZE',
|
|
31
|
+
'scheduling.enabled': 'EMAIL_MANAGER_SCHEDULING_ENABLED',
|
|
32
|
+
'scheduling.maxQueueSize': 'EMAIL_MANAGER_SCHEDULING_MAX_QUEUE_SIZE',
|
|
33
|
+
'scheduling.pollIntervalMs': 'EMAIL_MANAGER_SCHEDULING_POLL_INTERVAL_MS',
|
|
34
|
+
'scheduling.maxAheadMs': 'EMAIL_MANAGER_SCHEDULING_MAX_AHEAD_MS',
|
|
35
|
+
'scheduling.persistence.enabled': 'EMAIL_MANAGER_SCHEDULING_PERSISTENCE_ENABLED',
|
|
36
|
+
'scheduling.persistence.provider': 'EMAIL_MANAGER_SCHEDULING_PERSISTENCE_PROVIDER',
|
|
37
|
+
'scheduling.persistence.path': 'EMAIL_MANAGER_SCHEDULING_PERSISTENCE_PATH',
|
|
38
|
+
'analytics.enabled': 'EMAIL_MANAGER_ANALYTICS_ENABLED',
|
|
39
|
+
'analytics.retentionDays': 'EMAIL_MANAGER_ANALYTICS_RETENTION_DAYS',
|
|
40
|
+
'analytics.aggregationIntervalMs': 'EMAIL_MANAGER_ANALYTICS_AGGREGATION_INTERVAL_MS',
|
|
41
|
+
'analytics.detailedTracking': 'EMAIL_MANAGER_ANALYTICS_DETAILED_TRACKING',
|
|
42
|
+
'analytics.webhooks.enabled': 'EMAIL_MANAGER_ANALYTICS_WEBHOOKS_ENABLED',
|
|
43
|
+
'analytics.webhooks.url': 'EMAIL_MANAGER_ANALYTICS_WEBHOOK_URL',
|
|
44
|
+
'analytics.webhooks.secret': 'EMAIL_MANAGER_ANALYTICS_WEBHOOK_SECRET',
|
|
45
|
+
'rateLimiting.enabled': 'EMAIL_MANAGER_RATE_LIMITING_ENABLED',
|
|
46
|
+
'rateLimiting.emailsPerMinute': 'EMAIL_MANAGER_RATE_LIMIT_EMAILS_PER_MINUTE',
|
|
47
|
+
'rateLimiting.windowMs': 'EMAIL_MANAGER_RATE_LIMIT_WINDOW_MS',
|
|
48
|
+
'rateLimiting.perRecipient.enabled': 'EMAIL_MANAGER_PER_RECIPIENT_RATE_LIMITING',
|
|
49
|
+
'rateLimiting.perRecipient.emailsPerHour': 'EMAIL_MANAGER_PER_RECIPIENT_EMAILS_PER_HOUR',
|
|
50
|
+
'rateLimiting.perTemplate.enabled': 'EMAIL_MANAGER_PER_TEMPLATE_RATE_LIMITING',
|
|
51
|
+
'security.dkimEnabled': 'EMAIL_MANAGER_SECURITY_DKIM_ENABLED',
|
|
52
|
+
'security.dkimPrivateKeyPath': 'EMAIL_MANAGER_SECURITY_DKIM_PRIVATE_KEY_PATH',
|
|
53
|
+
'security.dkimSelector': 'EMAIL_MANAGER_SECURITY_DKIM_SELECTOR',
|
|
54
|
+
'security.spfCheckEnabled': 'EMAIL_MANAGER_SECURITY_SPF_CHECK_ENABLED',
|
|
55
|
+
'security.contentFiltering.enabled': 'EMAIL_MANAGER_CONTENT_FILTERING_ENABLED',
|
|
56
|
+
'security.contentFiltering.blockSuspicious': 'EMAIL_MANAGER_CONTENT_FILTERING_BLOCK_SUSPICIOUS',
|
|
57
|
+
'security.contentFiltering.customFiltersDir': 'EMAIL_MANAGER_CONTENT_FILTERING_CUSTOM_FILTERS_DIR',
|
|
58
|
+
'security.privacy.piiDetection': 'EMAIL_MANAGER_PRIVACY_PII_DETECTION',
|
|
59
|
+
'security.privacy.autoRedactLogs': 'EMAIL_MANAGER_PRIVACY_AUTO_REDACT_LOGS',
|
|
60
|
+
'security.privacy.dataRetentionDays': 'EMAIL_MANAGER_PRIVACY_DATA_RETENTION_DAYS',
|
|
61
|
+
'delivery.optimizationEnabled': 'EMAIL_MANAGER_DELIVERY_OPTIMIZATION_ENABLED',
|
|
62
|
+
'delivery.batching.enabled': 'EMAIL_MANAGER_DELIVERY_BATCHING_ENABLED',
|
|
63
|
+
'delivery.batching.size': 'EMAIL_MANAGER_DELIVERY_BATCH_SIZE',
|
|
64
|
+
'delivery.batching.intervalMs': 'EMAIL_MANAGER_DELIVERY_BATCH_INTERVAL_MS',
|
|
65
|
+
'delivery.retry.enabled': 'EMAIL_MANAGER_DELIVERY_RETRY_ENABLED',
|
|
66
|
+
'delivery.retry.maxAttempts': 'EMAIL_MANAGER_DELIVERY_RETRY_MAX_ATTEMPTS',
|
|
67
|
+
'delivery.retry.initialDelayMs': 'EMAIL_MANAGER_DELIVERY_RETRY_INITIAL_DELAY_MS',
|
|
68
|
+
'delivery.retry.maxDelayMs': 'EMAIL_MANAGER_DELIVERY_RETRY_MAX_DELAY_MS',
|
|
69
|
+
'delivery.retry.backoffFactor': 'EMAIL_MANAGER_DELIVERY_RETRY_BACKOFF_FACTOR',
|
|
70
|
+
'cache.enabled': 'EMAIL_MANAGER_CACHE_ENABLED',
|
|
71
|
+
'cache.provider': 'EMAIL_MANAGER_CACHE_PROVIDER',
|
|
72
|
+
'cache.templatesTtlMs': 'EMAIL_MANAGER_CACHE_TEMPLATES_TTL_MS',
|
|
73
|
+
'cache.providerStatusTtlMs': 'EMAIL_MANAGER_CACHE_PROVIDER_STATUS_TTL_MS',
|
|
74
|
+
'cache.analyticsTtlMs': 'EMAIL_MANAGER_CACHE_ANALYTICS_TTL_MS',
|
|
75
|
+
'cache.url': 'EMAIL_MANAGER_CACHE_URL',
|
|
76
|
+
'database.provider': 'EMAIL_MANAGER_DATABASE_PROVIDER',
|
|
77
|
+
'database.url': 'EMAIL_MANAGER_DATABASE_URL',
|
|
78
|
+
'database.pool.min': 'EMAIL_MANAGER_DATABASE_POOL_MIN',
|
|
79
|
+
'database.pool.max': 'EMAIL_MANAGER_DATABASE_POOL_MAX',
|
|
80
|
+
'database.pool.timeoutMs': 'EMAIL_MANAGER_DATABASE_POOL_TIMEOUT_MS',
|
|
81
|
+
'database.logQueries': 'EMAIL_MANAGER_DATABASE_LOG_QUERIES',
|
|
82
|
+
'logger.level': 'EMAIL_MANAGER_LOG_LEVEL',
|
|
83
|
+
'logger.enabled': 'EMAIL_MANAGER_LOG_ENABLED',
|
|
84
|
+
'logger.includeEmails': 'EMAIL_MANAGER_LOG_INCLUDE_EMAILS',
|
|
85
|
+
'logger.includeContent': 'EMAIL_MANAGER_LOG_INCLUDE_CONTENT',
|
|
86
|
+
'logger.logDeliveryEvents': 'EMAIL_MANAGER_LOG_DELIVERY_EVENTS',
|
|
87
|
+
'logger.logTemplateOperations': 'EMAIL_MANAGER_LOG_TEMPLATE_OPERATIONS',
|
|
88
|
+
'monitoring.enabled': 'EMAIL_MANAGER_MONITORING_ENABLED',
|
|
89
|
+
'monitoring.metricsIntervalMs': 'EMAIL_MANAGER_MONITORING_METRICS_INTERVAL_MS',
|
|
90
|
+
'monitoring.performanceEnabled': 'EMAIL_MANAGER_MONITORING_PERFORMANCE_ENABLED',
|
|
91
|
+
'monitoring.alertingEnabled': 'EMAIL_MANAGER_MONITORING_ALERTING_ENABLED',
|
|
92
|
+
'monitoring.alertThresholds.deliveryFailureRate': 'EMAIL_MANAGER_MONITORING_ALERT_FAILURE_RATE',
|
|
93
|
+
'monitoring.alertThresholds.queueSize': 'EMAIL_MANAGER_MONITORING_ALERT_QUEUE_SIZE',
|
|
94
|
+
'monitoring.alertThresholds.processingDelayMs': 'EMAIL_MANAGER_MONITORING_ALERT_PROCESSING_DELAY_MS',
|
|
95
|
+
'corePackages.emailSender.timeoutMs': 'EMAIL_MANAGER_EMAIL_SENDER_TIMEOUT_MS',
|
|
96
|
+
'corePackages.emailSender.deliveryConfirmation': 'EMAIL_MANAGER_EMAIL_SENDER_DELIVERY_CONFIRMATION',
|
|
97
|
+
'corePackages.templateEngine.strictMode': 'EMAIL_MANAGER_TEMPLATE_ENGINE_STRICT_MODE',
|
|
98
|
+
'corePackages.templateEngine.cacheSize': 'EMAIL_MANAGER_TEMPLATE_ENGINE_CACHE_SIZE',
|
|
99
|
+
'corePackages.cryptoUtils.algorithm': 'EMAIL_MANAGER_CRYPTO_UTILS_ALGORITHM',
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Configuration loader with source tracking and validation
|
|
103
|
+
*/
|
|
104
|
+
export class EmailManagerConfigurationLoader {
|
|
105
|
+
constructor() {
|
|
106
|
+
this.sources = [];
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Parse environment variable value to appropriate type
|
|
110
|
+
*/
|
|
111
|
+
parseEnvironmentValue(value, key) {
|
|
112
|
+
// Boolean values
|
|
113
|
+
if (value === 'true')
|
|
114
|
+
return true;
|
|
115
|
+
if (value === 'false')
|
|
116
|
+
return false;
|
|
117
|
+
// Array values (comma-separated)
|
|
118
|
+
if (key.includes('events')) {
|
|
119
|
+
return value.split(',').map(event => event.trim());
|
|
120
|
+
}
|
|
121
|
+
// Number values
|
|
122
|
+
if (/^\d+$/.test(value))
|
|
123
|
+
return parseInt(value);
|
|
124
|
+
if (/^\d+\.\d+$/.test(value))
|
|
125
|
+
return parseFloat(value);
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Set nested object value using dot notation
|
|
130
|
+
*/
|
|
131
|
+
setNestedValue(obj, path, value) {
|
|
132
|
+
const keys = path.split('.');
|
|
133
|
+
let current = obj;
|
|
134
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
135
|
+
const key = keys[i];
|
|
136
|
+
if (key && !(key in current)) {
|
|
137
|
+
current[key] = {};
|
|
138
|
+
}
|
|
139
|
+
if (key) {
|
|
140
|
+
current = current[key];
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const lastKey = keys[keys.length - 1];
|
|
144
|
+
if (lastKey) {
|
|
145
|
+
current[lastKey] = value;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Merge configuration objects recursively
|
|
150
|
+
*/
|
|
151
|
+
mergeConfiguration(target, source) {
|
|
152
|
+
Object.keys(source).forEach(key => {
|
|
153
|
+
if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
|
|
154
|
+
if (!target[key])
|
|
155
|
+
target[key] = {};
|
|
156
|
+
this.mergeConfiguration(target[key], source[key]);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
target[key] = source[key];
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get default configuration values
|
|
165
|
+
*/
|
|
166
|
+
getDefaultConfiguration() {
|
|
167
|
+
return {
|
|
168
|
+
enabled: true,
|
|
169
|
+
providers: {
|
|
170
|
+
configDir: './providers',
|
|
171
|
+
failover: {
|
|
172
|
+
enabled: true,
|
|
173
|
+
maxAttempts: 3,
|
|
174
|
+
delayMs: 5000,
|
|
175
|
+
},
|
|
176
|
+
healthCheck: {
|
|
177
|
+
enabled: true,
|
|
178
|
+
intervalMs: 300000, // 5 minutes
|
|
179
|
+
timeoutMs: 10000,
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
templates: {
|
|
183
|
+
storageDir: './templates',
|
|
184
|
+
maxPerCategory: 100,
|
|
185
|
+
cacheTtlMs: 3600000, // 1 hour
|
|
186
|
+
versioningEnabled: true,
|
|
187
|
+
validationEnabled: true,
|
|
188
|
+
compilation: {
|
|
189
|
+
enabled: true,
|
|
190
|
+
engine: 'handlebars',
|
|
191
|
+
cacheSize: 1000,
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
scheduling: {
|
|
195
|
+
enabled: true,
|
|
196
|
+
maxQueueSize: 10000,
|
|
197
|
+
pollIntervalMs: 60000, // 1 minute
|
|
198
|
+
maxAheadMs: 2592000000, // 30 days
|
|
199
|
+
persistence: {
|
|
200
|
+
enabled: true,
|
|
201
|
+
provider: 'file',
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
analytics: {
|
|
205
|
+
enabled: true,
|
|
206
|
+
retentionDays: 90,
|
|
207
|
+
aggregationIntervalMs: 300000, // 5 minutes
|
|
208
|
+
detailedTracking: true,
|
|
209
|
+
webhooks: {
|
|
210
|
+
enabled: true,
|
|
211
|
+
events: ['sent', 'delivered', 'opened', 'clicked', 'bounced', 'complained'],
|
|
212
|
+
},
|
|
213
|
+
},
|
|
214
|
+
rateLimiting: {
|
|
215
|
+
enabled: true,
|
|
216
|
+
emailsPerMinute: 1000,
|
|
217
|
+
windowMs: 60000,
|
|
218
|
+
perRecipient: {
|
|
219
|
+
enabled: true,
|
|
220
|
+
emailsPerHour: 10,
|
|
221
|
+
},
|
|
222
|
+
perTemplate: {
|
|
223
|
+
enabled: false,
|
|
224
|
+
limits: {},
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
security: {
|
|
228
|
+
dkimEnabled: false,
|
|
229
|
+
spfCheckEnabled: false,
|
|
230
|
+
contentFiltering: {
|
|
231
|
+
enabled: true,
|
|
232
|
+
blockSuspicious: true,
|
|
233
|
+
},
|
|
234
|
+
privacy: {
|
|
235
|
+
piiDetection: true,
|
|
236
|
+
autoRedactLogs: true,
|
|
237
|
+
dataRetentionDays: 30,
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
delivery: {
|
|
241
|
+
optimizationEnabled: true,
|
|
242
|
+
batching: {
|
|
243
|
+
enabled: true,
|
|
244
|
+
size: 100,
|
|
245
|
+
intervalMs: 10000,
|
|
246
|
+
},
|
|
247
|
+
retry: {
|
|
248
|
+
enabled: true,
|
|
249
|
+
maxAttempts: 5,
|
|
250
|
+
initialDelayMs: 30000,
|
|
251
|
+
maxDelayMs: 3600000, // 1 hour
|
|
252
|
+
backoffFactor: 2,
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
cache: {
|
|
256
|
+
enabled: true,
|
|
257
|
+
provider: 'memory',
|
|
258
|
+
templatesTtlMs: 3600000, // 1 hour
|
|
259
|
+
providerStatusTtlMs: 300000, // 5 minutes
|
|
260
|
+
analyticsTtlMs: 900000, // 15 minutes
|
|
261
|
+
},
|
|
262
|
+
database: {
|
|
263
|
+
provider: 'sqlite',
|
|
264
|
+
pool: {
|
|
265
|
+
min: 2,
|
|
266
|
+
max: 20,
|
|
267
|
+
timeoutMs: 30000,
|
|
268
|
+
},
|
|
269
|
+
logQueries: false,
|
|
270
|
+
},
|
|
271
|
+
logger: {
|
|
272
|
+
level: 'info',
|
|
273
|
+
enabled: true,
|
|
274
|
+
includeEmails: false,
|
|
275
|
+
includeContent: false,
|
|
276
|
+
logDeliveryEvents: true,
|
|
277
|
+
logTemplateOperations: true,
|
|
278
|
+
},
|
|
279
|
+
monitoring: {
|
|
280
|
+
enabled: true,
|
|
281
|
+
metricsIntervalMs: 60000, // 1 minute
|
|
282
|
+
performanceEnabled: true,
|
|
283
|
+
alertingEnabled: true,
|
|
284
|
+
alertThresholds: {
|
|
285
|
+
deliveryFailureRate: 10,
|
|
286
|
+
queueSize: 5000,
|
|
287
|
+
processingDelayMs: 300000, // 5 minutes
|
|
288
|
+
},
|
|
289
|
+
},
|
|
290
|
+
corePackages: {
|
|
291
|
+
emailSender: {
|
|
292
|
+
timeoutMs: 30000,
|
|
293
|
+
deliveryConfirmation: true,
|
|
294
|
+
},
|
|
295
|
+
templateEngine: {
|
|
296
|
+
strictMode: true,
|
|
297
|
+
cacheSize: 1000,
|
|
298
|
+
},
|
|
299
|
+
cryptoUtils: {
|
|
300
|
+
algorithm: 'aes-256-gcm',
|
|
301
|
+
},
|
|
302
|
+
},
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Load configuration from all sources with validation
|
|
307
|
+
*/
|
|
308
|
+
loadConfiguration() {
|
|
309
|
+
const config = this.getDefaultConfiguration();
|
|
310
|
+
this.sources = [];
|
|
311
|
+
// Add default configuration source
|
|
312
|
+
this.sources.push({
|
|
313
|
+
key: 'defaults',
|
|
314
|
+
value: config,
|
|
315
|
+
source: 'default',
|
|
316
|
+
description: 'Default email manager suite configuration'
|
|
317
|
+
});
|
|
318
|
+
// Load configuration file if it exists
|
|
319
|
+
const explorer = cosmiconfigSync('email-manager', {
|
|
320
|
+
searchPlaces: [
|
|
321
|
+
'email-manager.config.js',
|
|
322
|
+
'email-manager.config.json',
|
|
323
|
+
'email-manager-suite.config.js',
|
|
324
|
+
'email-manager-suite.config.json',
|
|
325
|
+
'.email-managerrc',
|
|
326
|
+
'.email-managerrc.js',
|
|
327
|
+
'.email-managerrc.json'
|
|
328
|
+
]
|
|
329
|
+
});
|
|
330
|
+
try {
|
|
331
|
+
const result = explorer.search();
|
|
332
|
+
if (result && result.config) {
|
|
333
|
+
this.mergeConfiguration(config, result.config);
|
|
334
|
+
this.sources.push({
|
|
335
|
+
key: 'file',
|
|
336
|
+
value: result.config,
|
|
337
|
+
source: 'file',
|
|
338
|
+
description: `Configuration file: ${result.filepath}`
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
catch (error) {
|
|
343
|
+
console.warn('⚠️ Email Manager Suite: Failed to load configuration file', error);
|
|
344
|
+
}
|
|
345
|
+
// Apply environment variable overrides
|
|
346
|
+
const envOverrides = [];
|
|
347
|
+
Object.entries(ENV_MAPPINGS).forEach(([configPath, envVar]) => {
|
|
348
|
+
const envValue = process.env[envVar];
|
|
349
|
+
if (envValue !== undefined) {
|
|
350
|
+
const parsedValue = this.parseEnvironmentValue(envValue, configPath);
|
|
351
|
+
this.setNestedValue(config, configPath, parsedValue);
|
|
352
|
+
envOverrides.push({
|
|
353
|
+
key: configPath,
|
|
354
|
+
value: parsedValue,
|
|
355
|
+
source: 'environment',
|
|
356
|
+
description: `Environment variable: ${envVar}=${envValue}`
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
if (envOverrides.length > 0) {
|
|
361
|
+
this.sources.push(...envOverrides);
|
|
362
|
+
}
|
|
363
|
+
// Configure core package dependencies
|
|
364
|
+
this.configureCorePackageDependencies(config);
|
|
365
|
+
// Validate the configuration
|
|
366
|
+
const validation = validateEmailManagerConfig(config);
|
|
367
|
+
if (!validation.isValid) {
|
|
368
|
+
console.error('❌ Email Manager Suite: Configuration validation failed');
|
|
369
|
+
validation.errors.forEach(error => console.error(` └── ${error}`));
|
|
370
|
+
throw new Error('Invalid email manager suite configuration');
|
|
371
|
+
}
|
|
372
|
+
// Apply schema defaults and validate types
|
|
373
|
+
const resolvedConfig = emailManagerConfigSchema.parse(config);
|
|
374
|
+
// Log configuration sources for transparency
|
|
375
|
+
if (this.sources.length > 1) { // More than just defaults
|
|
376
|
+
console.log('⚙️ Email Manager Suite: Configuration loaded');
|
|
377
|
+
this.sources.slice(1).forEach(source => {
|
|
378
|
+
console.log(` └── ${source.source}: ${source.description}`);
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
return resolvedConfig;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Configure core package dependencies with overrides
|
|
385
|
+
*/
|
|
386
|
+
configureCorePackageDependencies(config) {
|
|
387
|
+
// Log core package configuration overrides for transparency
|
|
388
|
+
const coreOverrides = [];
|
|
389
|
+
if (config.corePackages?.emailSender) {
|
|
390
|
+
coreOverrides.push('@bernierllc/email-sender configuration');
|
|
391
|
+
}
|
|
392
|
+
if (config.corePackages?.templateEngine) {
|
|
393
|
+
coreOverrides.push('@bernierllc/template-engine configuration');
|
|
394
|
+
}
|
|
395
|
+
if (config.corePackages?.cryptoUtils) {
|
|
396
|
+
coreOverrides.push('@bernierllc/crypto-utils configuration');
|
|
397
|
+
}
|
|
398
|
+
if (coreOverrides.length > 0) {
|
|
399
|
+
console.log('⚙️ Email Manager Suite: Configuring core package dependencies');
|
|
400
|
+
coreOverrides.forEach(override => {
|
|
401
|
+
console.log(` └── Overriding: ${override}`);
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Get configuration sources for debugging
|
|
407
|
+
*/
|
|
408
|
+
getConfigurationSources() {
|
|
409
|
+
return [...this.sources];
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Get environment variable documentation
|
|
413
|
+
*/
|
|
414
|
+
getEnvironmentVariableDocumentation() {
|
|
415
|
+
const docs = {};
|
|
416
|
+
Object.entries(ENV_MAPPINGS).forEach(([configPath, envVar]) => {
|
|
417
|
+
docs[envVar] = `Controls ${configPath} configuration`;
|
|
418
|
+
});
|
|
419
|
+
return docs;
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Print resolved configuration with sensitive data redacted
|
|
423
|
+
*/
|
|
424
|
+
printConfiguration(config, redactSecrets = true) {
|
|
425
|
+
const configCopy = JSON.parse(JSON.stringify(config));
|
|
426
|
+
if (redactSecrets) {
|
|
427
|
+
// Redact sensitive configuration values
|
|
428
|
+
if (configCopy.security?.dkimPrivateKeyPath) {
|
|
429
|
+
configCopy.security.dkimPrivateKeyPath = '[REDACTED]';
|
|
430
|
+
}
|
|
431
|
+
if (configCopy.analytics?.webhooks?.secret) {
|
|
432
|
+
configCopy.analytics.webhooks.secret = '[REDACTED]';
|
|
433
|
+
}
|
|
434
|
+
if (configCopy.database?.url) {
|
|
435
|
+
configCopy.database.url = configCopy.database.url.replace(/:\/\/[^:]+:[^@]+@/, '://[REDACTED]:[REDACTED]@');
|
|
436
|
+
}
|
|
437
|
+
if (configCopy.cache?.url) {
|
|
438
|
+
configCopy.cache.url = configCopy.cache.url.replace(/:\/\/[^:]+:[^@]+@/, '://[REDACTED]:[REDACTED]@');
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
return JSON.stringify(configCopy, null, 2);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Load email manager suite configuration
|
|
446
|
+
* Main entry point for configuration loading
|
|
447
|
+
*/
|
|
448
|
+
export function loadEmailManagerConfiguration() {
|
|
449
|
+
const loader = new EmailManagerConfigurationLoader();
|
|
450
|
+
return loader.loadConfiguration();
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Load configuration with source tracking for debugging
|
|
454
|
+
*/
|
|
455
|
+
export function loadEmailManagerConfigurationWithSources() {
|
|
456
|
+
const loader = new EmailManagerConfigurationLoader();
|
|
457
|
+
const config = loader.loadConfiguration();
|
|
458
|
+
const sources = loader.getConfigurationSources();
|
|
459
|
+
return { config, sources };
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Get environment variable documentation
|
|
463
|
+
*/
|
|
464
|
+
export function getEmailManagerEnvironmentDocumentation() {
|
|
465
|
+
const loader = new EmailManagerConfigurationLoader();
|
|
466
|
+
return loader.getEnvironmentVariableDocumentation();
|
|
467
|
+
}
|
|
468
|
+
//# sourceMappingURL=loadConfiguration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadConfiguration.js","sourceRoot":"","sources":["../../src/config/loadConfiguration.ts"],"names":[],"mappings":"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"}
|