@groundbrick/service-base 0.0.1 → 0.1.0

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/dist/index.d.ts CHANGED
@@ -6,9 +6,5 @@ export { Validator } from './validation/Validator.js';
6
6
  export { ValidationHelper } from './validation/ValidationHelper.js';
7
7
  export type { ValidationRule, ValidationRules } from './validation/Validator.js';
8
8
  export type { ValidationResult } from './validation/ValidationResult.js';
9
- export { EmailService, EmailUtils } from './email/EmailService.js';
10
- export { EmailConfigurationService } from './email/EmailConfigurationService.js';
11
- export { SmtpEmailProvider } from './email/providers/SmtpEmailProvider.js';
12
- export type { EmailAddress, EmailContent, EmailAttachment, EmailMessage, EmailConfig, EmailProvider, EmailResult } from './email/interfaces/EmailInterfaces.js';
13
9
  export type { ServiceOptions } from './types/ServiceOptions.js';
14
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAMpD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAMlF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjF,YAAY,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAMzE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAE3E,YAAY,EACR,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,WAAW,EACX,aAAa,EACb,WAAW,EACd,MAAM,uCAAuC,CAAC;AAM/C,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAMpD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAMlF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjF,YAAY,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAMzE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/index.js CHANGED
@@ -13,10 +13,4 @@ export { createSuccessResult, createErrorResult } from './types/ServiceResult.js
13
13
  // ============================================================================
14
14
  export { Validator } from './validation/Validator.js';
15
15
  export { ValidationHelper } from './validation/ValidationHelper.js';
16
- // ============================================================================
17
- // EMAIL SERVICES
18
- // ============================================================================
19
- export { EmailService, EmailUtils } from './email/EmailService.js';
20
- export { EmailConfigurationService } from './email/EmailConfigurationService.js';
21
- export { SmtpEmailProvider } from './email/providers/SmtpEmailProvider.js';
22
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElF,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAIpE,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElF,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC"}
package/package.json CHANGED
@@ -1,60 +1,58 @@
1
1
  {
2
- "name": "@groundbrick/service-base",
3
- "version": "0.0.1",
4
- "description": "Service layer base classes with validation, error handling, business logic patterns, and generic email infrastructure",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "import": "./dist/index.js",
11
- "require": "./dist/index.js",
12
- "types": "./dist/index.d.ts"
13
- }
14
- },
15
- "files": [
16
- "dist/**/*",
17
- "README.md",
18
- "LICENSE"
19
- ],
20
- "scripts": {
21
- "build": "tsc --build",
22
- "clean": "rm -rf dist *.tsbuildinfo",
23
- "lint": "eslint src/**/*.ts",
24
- "lint:fix": "eslint src/**/*.ts --fix"
25
- },
26
- "keywords": [
27
- "typescript",
28
- "service-layer",
29
- "business-logic",
30
- "validation",
31
- "microframework",
32
- "error-handling",
33
- "transactions",
34
- "email",
35
- "notifications"
36
- ],
37
- "author": "Cleiton Marques <cleiton.marques@200.systems>",
38
- "license": "MIT",
39
- "repository": {
40
- "type": "git",
41
- "url": "git+https://github.com/200Systems/bitbrick-microframework.git",
42
- "directory": "packages/service-base"
43
- },
44
- "dependencies": {
45
- "@groundbrick/db-core": "workspace:*",
46
- "@groundbrick/logger": "workspace:*",
47
- "nodemailer": "^6.10.1"
48
- },
49
- "devDependencies": {
50
- "@types/node": "^20.10.0",
51
- "@types/nodemailer": "^6.4.14",
52
- "typescript": "^5.8.3"
53
- },
54
- "engines": {
55
- "node": ">=18.0.0"
56
- },
57
- "publishConfig": {
58
- "access": "public"
2
+ "name": "@groundbrick/service-base",
3
+ "version": "0.1.0",
4
+ "description": "Service layer base classes with validation, error handling, business logic patterns, and generic email infrastructure",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "require": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
59
13
  }
60
- }
14
+ },
15
+ "files": [
16
+ "dist/**/*",
17
+ "README.md",
18
+ "LICENSE"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc --build",
22
+ "clean": "rm -rf dist *.tsbuildinfo",
23
+ "lint": "eslint src/**/*.ts",
24
+ "lint:fix": "eslint src/**/*.ts --fix"
25
+ },
26
+ "keywords": [
27
+ "typescript",
28
+ "service-layer",
29
+ "business-logic",
30
+ "validation",
31
+ "microframework",
32
+ "error-handling",
33
+ "transactions",
34
+ "email",
35
+ "notifications"
36
+ ],
37
+ "author": "Cleiton Marques <cleiton.marques@200.systems>",
38
+ "license": "MIT",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+https://github.com/200Systems/bitbrick-microframework.git",
42
+ "directory": "packages/service-base"
43
+ },
44
+ "dependencies": {
45
+ "@groundbrick/db-core": "workspace:*",
46
+ "@groundbrick/logger": "workspace:*"
47
+ },
48
+ "devDependencies": {
49
+ "@types/node": "^20.10.0",
50
+ "typescript": "^5.8.3"
51
+ },
52
+ "engines": {
53
+ "node": ">=18.0.0"
54
+ },
55
+ "publishConfig": {
56
+ "access": "public"
57
+ }
58
+ }
@@ -1,14 +0,0 @@
1
- import { EmailService } from './EmailService.js';
2
- export interface EmailConfigRepository {
3
- findByKey(key: string): Promise<{
4
- value: string;
5
- } | null>;
6
- }
7
- export declare class EmailConfigurationService {
8
- private configRepository;
9
- private logger;
10
- constructor(configRepository: EmailConfigRepository);
11
- createEmailService(): Promise<EmailService>;
12
- private loadEmailConfig;
13
- }
14
- //# sourceMappingURL=EmailConfigurationService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EmailConfigurationService.d.ts","sourceRoot":"","sources":["../../src/email/EmailConfigurationService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKjD,MAAM,WAAW,qBAAqB;IAClC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CAC7D;AAED,qBAAa,yBAAyB;IAGtB,OAAO,CAAC,gBAAgB;IAFpC,OAAO,CAAC,MAAM,CAAS;gBAEH,gBAAgB,EAAE,qBAAqB;IAIrD,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC;YAmBnC,eAAe;CAqChC"}
@@ -1,60 +0,0 @@
1
- import { EmailService } from './EmailService.js';
2
- import { SmtpEmailProvider } from './providers/SmtpEmailProvider.js';
3
- import { createLogger } from '@groundbrick/logger';
4
- export class EmailConfigurationService {
5
- configRepository;
6
- logger;
7
- constructor(configRepository) {
8
- this.configRepository = configRepository;
9
- this.logger = createLogger().child('email-config');
10
- }
11
- async createEmailService() {
12
- try {
13
- const config = await this.loadEmailConfig();
14
- const provider = new SmtpEmailProvider();
15
- const emailService = new EmailService(provider);
16
- await emailService.initialize(config);
17
- return emailService;
18
- }
19
- catch (error) {
20
- this.logger.warn('Failed to create email service with SMTP provider, using fallback', {
21
- error: error instanceof Error ? error.message : String(error)
22
- });
23
- // Return service without provider (will log emails instead of sending)
24
- return new EmailService();
25
- }
26
- }
27
- async loadEmailConfig() {
28
- const configs = await Promise.all([
29
- this.configRepository.findByKey('smtp_host'),
30
- this.configRepository.findByKey('smtp_port'),
31
- this.configRepository.findByKey('smtp_secure'),
32
- this.configRepository.findByKey('smtp_user'),
33
- this.configRepository.findByKey('smtp_password'),
34
- this.configRepository.findByKey('email_from_address'),
35
- this.configRepository.findByKey('email_from_name')
36
- ]);
37
- const [host, port, secure, user, password, fromAddress, fromName] = configs;
38
- if (!host?.value || !port?.value || !fromAddress?.value) {
39
- throw new Error('Missing required email configuration: host, port, or from_address');
40
- }
41
- const config = {
42
- host: host.value,
43
- port: parseInt(port.value),
44
- secure: secure?.value === 'true',
45
- from: {
46
- address: fromAddress.value,
47
- name: fromName?.value
48
- }
49
- };
50
- // Only add auth if both user and password are provided
51
- if (user?.value && password?.value) {
52
- config.auth = {
53
- user: user.value,
54
- pass: password.value
55
- };
56
- }
57
- return config;
58
- }
59
- }
60
- //# sourceMappingURL=EmailConfigurationService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EmailConfigurationService.js","sourceRoot":"","sources":["../../src/email/EmailConfigurationService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAU,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAM3D,MAAM,OAAO,yBAAyB;IAGd;IAFZ,MAAM,CAAS;IAEvB,YAAoB,gBAAuC;QAAvC,qBAAgB,GAAhB,gBAAgB,CAAuB;QACvD,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,kBAAkB;QACpB,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACzC,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;YAEhD,MAAM,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACtC,OAAO,YAAY,CAAC;QAExB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mEAAmE,EAAE;gBAClF,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAChE,CAAC,CAAC;YAEH,uEAAuE;YACvE,OAAO,IAAI,YAAY,EAAE,CAAC;QAC9B,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,eAAe;QACzB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC9B,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC;YAC5C,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC;YAC5C,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,aAAa,CAAC;YAC9C,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC;YAC5C,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,eAAe,CAAC;YAChD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,oBAAoB,CAAC;YACrD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,iBAAiB,CAAC;SACrD,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC;QAE5E,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,MAAM,GAAgB;YACxB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B,MAAM,EAAE,MAAM,EAAE,KAAK,KAAK,MAAM;YAChC,IAAI,EAAE;gBACF,OAAO,EAAE,WAAW,CAAC,KAAK;gBAC1B,IAAI,EAAE,QAAQ,EAAE,KAAK;aACxB;SACJ,CAAC;QAEF,uDAAuD;QACvD,IAAI,IAAI,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,GAAG;gBACV,IAAI,EAAE,IAAI,CAAC,KAAK;gBAChB,IAAI,EAAE,QAAQ,CAAC,KAAK;aACvB,CAAC;QACN,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ"}
@@ -1,15 +0,0 @@
1
- import { EmailProvider, EmailMessage, EmailResult, EmailConfig, EmailAddress } from './interfaces/EmailInterfaces.js';
2
- export declare class EmailService {
3
- private logger;
4
- private provider?;
5
- private isEnabled;
6
- constructor(provider?: EmailProvider);
7
- initialize(config: EmailConfig): Promise<void>;
8
- sendEmail(message: EmailMessage): Promise<EmailResult>;
9
- isServiceEnabled(): boolean;
10
- }
11
- export declare class EmailUtils {
12
- static createAddress(address: string, name?: string): EmailAddress;
13
- static createSimpleMessage(to: string | EmailAddress, subject: string, content: string, isHtml?: boolean): EmailMessage;
14
- }
15
- //# sourceMappingURL=EmailService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EmailService.d.ts","sourceRoot":"","sources":["../../src/email/EmailService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAGtH,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,SAAS,CAAkB;gBAEvB,QAAQ,CAAC,EAAE,aAAa;IAK9B,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB9C,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IA4C5D,gBAAgB,IAAI,OAAO;CAG9B;AAGD,qBAAa,UAAU;IACnB,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY;IAIlE,MAAM,CAAC,mBAAmB,CACtB,EAAE,EAAE,MAAM,GAAG,YAAY,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,OAAe,GACxB,YAAY;CAgBlB"}
@@ -1,96 +0,0 @@
1
- import { createLogger } from '@groundbrick/logger';
2
- import { env } from 'process';
3
- export class EmailService {
4
- logger;
5
- provider;
6
- isEnabled = false;
7
- constructor(provider) {
8
- this.logger = createLogger().child('email-service');
9
- this.provider = provider;
10
- }
11
- async initialize(config) {
12
- if (!this.provider) {
13
- this.logger.warn('No email provider configured, emails will be logged only');
14
- return;
15
- }
16
- try {
17
- await this.provider.initialize(config);
18
- this.isEnabled = this.provider.isConfigured();
19
- if (this.isEnabled) {
20
- this.logger.info('Email service initialized successfully');
21
- }
22
- else {
23
- this.logger.warn('Email service initialized but not properly configured');
24
- }
25
- }
26
- catch (error) {
27
- this.logger.error('Failed to initialize email service', error instanceof Error ? error : new Error(String(error)));
28
- this.isEnabled = false;
29
- }
30
- }
31
- async sendEmail(message) {
32
- const endTimer = this.logger.startTimer('send-email');
33
- try {
34
- if (!this.isEnabled || !this.provider) {
35
- this.logger.info('Email sending disabled, logging email instead', {
36
- to: message.to,
37
- subject: message.content.subject
38
- });
39
- return {
40
- success: true,
41
- messageId: 'mock-' + Date.now()
42
- };
43
- }
44
- const result = await this.provider.sendEmail(message);
45
- if (result.success) {
46
- this.logger.info('Email sent successfully', {
47
- to: message.to,
48
- subject: message.content.subject,
49
- messageId: result.messageId
50
- });
51
- }
52
- else {
53
- this.logger.error('Failed to send email', undefined, {
54
- to: message.to,
55
- subject: message.content.subject,
56
- error: result.error
57
- });
58
- }
59
- return result;
60
- }
61
- catch (error) {
62
- this.logger.error('Email sending error', error instanceof Error ? error : new Error(String(error)));
63
- return {
64
- success: false,
65
- error: error instanceof Error ? error.message : String(error)
66
- };
67
- }
68
- finally {
69
- endTimer();
70
- }
71
- }
72
- isServiceEnabled() {
73
- return this.isEnabled;
74
- }
75
- }
76
- // Utility functions for common email operations
77
- export class EmailUtils {
78
- static createAddress(address, name) {
79
- return { address, name };
80
- }
81
- static createSimpleMessage(to, subject, content, isHtml = false) {
82
- if (env.NODE_ENV === 'development') {
83
- to = 'cleiton.marques@200.systems';
84
- subject = `[DEV] ${subject}`;
85
- }
86
- const toAddress = typeof to === 'string' ? { address: to } : to;
87
- return {
88
- to: toAddress,
89
- content: {
90
- subject,
91
- ...(isHtml ? { html: content } : { text: content })
92
- }
93
- };
94
- }
95
- }
96
- //# sourceMappingURL=EmailService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EmailService.js","sourceRoot":"","sources":["../../src/email/EmailService.ts"],"names":[],"mappings":"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"}
@@ -1,45 +0,0 @@
1
- export interface EmailAddress {
2
- address: string;
3
- name?: string;
4
- }
5
- export interface EmailContent {
6
- subject: string;
7
- text?: string;
8
- html?: string;
9
- attachments?: EmailAttachment[];
10
- }
11
- export interface EmailAttachment {
12
- filename: string;
13
- content: Buffer | string;
14
- contentType: string;
15
- }
16
- export interface EmailMessage {
17
- to: EmailAddress | EmailAddress[];
18
- from?: EmailAddress;
19
- cc?: EmailAddress[];
20
- bcc?: EmailAddress[];
21
- replyTo?: EmailAddress;
22
- content: EmailContent;
23
- }
24
- export type EmailProviderType = 'smtp';
25
- export interface EmailConfig {
26
- host: string;
27
- port: number;
28
- secure: boolean;
29
- auth?: {
30
- user: string;
31
- pass: string;
32
- };
33
- from: EmailAddress;
34
- }
35
- export interface EmailProvider {
36
- initialize(config: EmailConfig): Promise<void>;
37
- sendEmail(message: EmailMessage): Promise<EmailResult>;
38
- isConfigured(): boolean;
39
- }
40
- export interface EmailResult {
41
- success: boolean;
42
- messageId?: string;
43
- error?: string;
44
- }
45
- //# sourceMappingURL=EmailInterfaces.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EmailInterfaces.d.ts","sourceRoot":"","sources":["../../../src/email/interfaces/EmailInterfaces.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,YAAY,GAAG,YAAY,EAAE,CAAC;IAClC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;IACpB,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACvC,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC1B,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACvD,YAAY,IAAI,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=EmailInterfaces.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EmailInterfaces.js","sourceRoot":"","sources":["../../../src/email/interfaces/EmailInterfaces.ts"],"names":[],"mappings":""}
@@ -1,14 +0,0 @@
1
- import { EmailProvider, EmailMessage, EmailResult, EmailConfig } from '../interfaces/EmailInterfaces.js';
2
- export declare class SmtpEmailProvider implements EmailProvider {
3
- private logger;
4
- private transporter?;
5
- private config?;
6
- private configured;
7
- constructor();
8
- initialize(config: EmailConfig): Promise<void>;
9
- sendEmail(message: EmailMessage): Promise<EmailResult>;
10
- isConfigured(): boolean;
11
- private formatAddress;
12
- private formatAddresses;
13
- }
14
- //# sourceMappingURL=SmtpEmailProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SmtpEmailProvider.d.ts","sourceRoot":"","sources":["../../../src/email/providers/SmtpEmailProvider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAgB,MAAM,kCAAkC,CAAC;AAGvH,qBAAa,iBAAkB,YAAW,aAAa;IACnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,UAAU,CAAkB;;IAM9B,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC9C,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAuC5D,YAAY,IAAI,OAAO;IAIvB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,eAAe;CAM1B"}
@@ -1,88 +0,0 @@
1
- // packages/service-base/src/email/providers/SmtpEmailProvider.ts
2
- import { createTransport } from 'nodemailer';
3
- import { createLogger } from '@groundbrick/logger';
4
- export class SmtpEmailProvider {
5
- logger;
6
- transporter;
7
- config;
8
- configured = false;
9
- constructor() {
10
- this.logger = createLogger().child('smtp-provider');
11
- }
12
- async initialize(config) {
13
- try {
14
- this.config = config;
15
- this.transporter = createTransport({
16
- pool: true,
17
- host: config.host,
18
- port: config.port,
19
- secure: config.secure,
20
- auth: config.auth ? {
21
- user: config.auth.user,
22
- pass: config.auth.pass
23
- } : undefined
24
- });
25
- // Test connection
26
- await this.transporter.verify();
27
- this.configured = true;
28
- this.logger.info('SMTP provider initialized successfully', {
29
- host: config.host,
30
- port: config.port,
31
- secure: config.secure,
32
- hasAuth: !!config.auth
33
- });
34
- }
35
- catch (error) {
36
- this.logger.error('Failed to initialize SMTP provider', error instanceof Error ? error : new Error(String(error)));
37
- this.configured = false;
38
- throw error;
39
- }
40
- }
41
- async sendEmail(message) {
42
- if (!this.transporter || !this.config) {
43
- return {
44
- success: false,
45
- error: 'SMTP provider not initialized'
46
- };
47
- }
48
- try {
49
- const mailOptions = {
50
- from: this.formatAddress(message.from || this.config.from),
51
- to: this.formatAddresses(message.to),
52
- cc: message.cc ? this.formatAddresses(message.cc) : undefined,
53
- bcc: message.bcc ? this.formatAddresses(message.bcc) : undefined,
54
- replyTo: message.replyTo ? this.formatAddress(message.replyTo) : undefined,
55
- subject: message.content.subject,
56
- text: message.content.text,
57
- html: message.content.html,
58
- attachments: message.content.attachments
59
- };
60
- const result = await this.transporter.sendMail(mailOptions);
61
- return {
62
- success: true,
63
- messageId: result.messageId
64
- };
65
- }
66
- catch (error) {
67
- const errorMessage = error instanceof Error ? error.message : String(error);
68
- this.logger.error('Failed to send email via SMTP', error instanceof Error ? error : new Error(String(error)));
69
- return {
70
- success: false,
71
- error: errorMessage
72
- };
73
- }
74
- }
75
- isConfigured() {
76
- return this.configured;
77
- }
78
- formatAddress(address) {
79
- return address.name ? `"${address.name}" <${address.address}>` : address.address;
80
- }
81
- formatAddresses(addresses) {
82
- if (Array.isArray(addresses)) {
83
- return addresses.map(addr => this.formatAddress(addr));
84
- }
85
- return this.formatAddress(addresses);
86
- }
87
- }
88
- //# sourceMappingURL=SmtpEmailProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SmtpEmailProvider.js","sourceRoot":"","sources":["../../../src/email/providers/SmtpEmailProvider.ts"],"names":[],"mappings":"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"}