@b2y/email-service 1.0.9 → 1.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/Config.js +40 -39
- package/Logger.js +5 -5
- package/README.md +18 -18
- package/constants/StatusMessageConstants.js +38 -38
- package/enum/EmailProvider.js +7 -7
- package/index.js +77 -77
- package/model/Connect.js +23 -23
- package/model/EmailTemplate.js +51 -51
- package/package.json +53 -53
- package/providers/AmazonSESProvider.js +83 -76
- package/providers/BaseProvider.js +85 -73
- package/providers/NodeMailerProvider.js +52 -51
- package/providers/PostmarkProvider.js +61 -61
- package/providers/SendgridProvider.js +60 -60
- package/service/EmailService.js +101 -98
- package/utils/TemplateEngine.js +98 -98
package/Config.js
CHANGED
|
@@ -1,40 +1,41 @@
|
|
|
1
|
-
// config.js
|
|
2
|
-
require('dotenv').config();
|
|
3
|
-
const Config = {
|
|
4
|
-
// Email Provider Configuration
|
|
5
|
-
emailProvider: process.env.EMAIL_PROVIDER,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
1
|
+
// config.js
|
|
2
|
+
require('dotenv').config();
|
|
3
|
+
const Config = {
|
|
4
|
+
// Email Provider Configuration
|
|
5
|
+
emailProvider: process.env.EMAIL_PROVIDER,
|
|
6
|
+
fromEmail: process.env.FROM_EMAIL,
|
|
7
|
+
fromName: process.env.FROM_NAME,
|
|
8
|
+
|
|
9
|
+
// Nodemailer Configuration
|
|
10
|
+
emailHost: process.env.EMAIL_HOST,
|
|
11
|
+
smtpPort: process.env.EMAIL_PORT,
|
|
12
|
+
emailUser: process.env.FROM_EMAIL,
|
|
13
|
+
emailPass: process.env.EMAIL_PASSWORD,
|
|
14
|
+
|
|
15
|
+
// SendGrid Configuration
|
|
16
|
+
sendGridApiKey: process.env.ACCESS_KEY,
|
|
17
|
+
|
|
18
|
+
// Postmark Configuration
|
|
19
|
+
postmarkApiKey: process.env.ACCESS_KEY,
|
|
20
|
+
postmarkFromEmail: process.env.FROM_EMAIL,
|
|
21
|
+
|
|
22
|
+
// Amazon SES Configuration
|
|
23
|
+
awsRegion: process.env.REGION,
|
|
24
|
+
awsAccessKeyId: process.env.ACCESS_KEY,
|
|
25
|
+
awsSecretAccessKey: process.env.ACCESS_SECRET,
|
|
26
|
+
awsFromEmail: process.env.FROM_EMAIL,
|
|
27
|
+
|
|
28
|
+
defaultLanguage: process.env.DEFAULT_LANGUAGE,
|
|
29
|
+
|
|
30
|
+
// Database Configuration (if using database for templates)
|
|
31
|
+
dbHost: process.env.DB_HOST,
|
|
32
|
+
dbPort: process.env.DB_PORT,
|
|
33
|
+
dbName: process.env.DB_DATABASE,
|
|
34
|
+
dbUser: process.env.DB_USER,
|
|
35
|
+
dbPass: process.env.DB_PASSWORD,
|
|
36
|
+
dbschema:process.env.DB_SCHEMA,
|
|
37
|
+
dbssl:process.env.DBSSL,
|
|
38
|
+
|
|
39
|
+
};
|
|
40
|
+
|
|
40
41
|
module.exports = Config;
|
package/Logger.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
require('dotenv').config();
|
|
2
|
-
const { createLogger } = require('b2y-logger');
|
|
3
|
-
|
|
4
|
-
const logger = createLogger();
|
|
5
|
-
|
|
1
|
+
require('dotenv').config();
|
|
2
|
+
const { createLogger } = require('b2y-logger');
|
|
3
|
+
|
|
4
|
+
const logger = createLogger();
|
|
5
|
+
|
|
6
6
|
module.exports = logger;
|
package/README.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
# email-service
|
|
2
|
-
|
|
3
|
-
A reusable, flexible Node.js email service supporting multiple providers like **Nodemailer (Gmail)** and **SendGrid**, with support for **dynamic HTML templates** using Handlebars.
|
|
4
|
-
|
|
5
|
-
# Features
|
|
6
|
-
|
|
7
|
-
- Common interface for multiple email providers
|
|
8
|
-
- Supports Gmail via Nodemailer and SendGrid (easy to extend more)
|
|
9
|
-
- Handlebars-based HTML templates with variables
|
|
10
|
-
- Easily switch between providers without changing your code
|
|
11
|
-
- Dynamic template loading from the filesystem
|
|
12
|
-
- Configurable via environment variables or direct parameters
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
# Installation
|
|
17
|
-
|
|
18
|
-
npm install @ourgitname/email-service
|
|
1
|
+
# email-service
|
|
2
|
+
|
|
3
|
+
A reusable, flexible Node.js email service supporting multiple providers like **Nodemailer (Gmail)** and **SendGrid**, with support for **dynamic HTML templates** using Handlebars.
|
|
4
|
+
|
|
5
|
+
# Features
|
|
6
|
+
|
|
7
|
+
- Common interface for multiple email providers
|
|
8
|
+
- Supports Gmail via Nodemailer and SendGrid (easy to extend more)
|
|
9
|
+
- Handlebars-based HTML templates with variables
|
|
10
|
+
- Easily switch between providers without changing your code
|
|
11
|
+
- Dynamic template loading from the filesystem
|
|
12
|
+
- Configurable via environment variables or direct parameters
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Installation
|
|
17
|
+
|
|
18
|
+
npm install @ourgitname/email-service
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
const StatusMessage = {
|
|
2
|
-
// Database messages
|
|
3
|
-
DB_CONNECTION_SUCCESS: 'Database connection has been established successfully.',
|
|
4
|
-
DB_CONNECTION_FAILED: 'Unable to connect to the database:',
|
|
5
|
-
|
|
6
|
-
// Email provider messages
|
|
7
|
-
PROVIDER_NOT_IMPLEMENTED: 'sendEmail method not implemented in BaseProvider',
|
|
8
|
-
PROVIDER_DEFAULT_FALLBACK: 'No valid provider specified, defaulting to Nodemailer',
|
|
9
|
-
|
|
10
|
-
// Validation messages
|
|
11
|
-
RECIPIENTS_REQUIRED: 'Recipients (to) are required',
|
|
12
|
-
SUBJECT_REQUIRED: 'Subject is required',
|
|
13
|
-
HTML_CONTENT_REQUIRED: 'Email content (html) is required',
|
|
14
|
-
TENANT_ID_REQUIRED: 'TenantID is required',
|
|
15
|
-
TEMPLATE_OR_HTML_REQUIRED: 'TemplateName or HTML content is required',
|
|
16
|
-
LANGCODE_IS_REQUIRED: 'Language code (langCode) is required',
|
|
17
|
-
|
|
18
|
-
// Template messages
|
|
19
|
-
TEMPLATE_NOT_FOUND: 'Template "${templateName}" not found for tenant ${tenantId}',
|
|
20
|
-
TEMPLATE_FETCH_ERROR: 'Error fetching template from DB: ${errorMessage}',
|
|
21
|
-
TEMPLATE_COMPILE_ERROR: 'Error compiling template "${templateName}": ${errorMessage}',
|
|
22
|
-
PLACEHOLDER_REPLACE_ERROR: 'Error replacing placeholders: ${errorMessage}',
|
|
23
|
-
|
|
24
|
-
// Email sending messages
|
|
25
|
-
EMAIL_SENT_SUCCESS: 'Email sent successfully for tenant: ${tenantId}',
|
|
26
|
-
EMAIL_SEND_FAILED: 'Failed to send email for tenant ${tenantId}: ${errorMessage}',
|
|
27
|
-
|
|
28
|
-
// Service initialization messages
|
|
29
|
-
PROVIDER_REQUIRED: 'Email provider is required',
|
|
30
|
-
DB_CLIENT_REQUIRED: 'Database client is required',
|
|
31
|
-
CANNOT_INSTANTIATE_BASE: 'Cannot instantiate BaseProvider directly',
|
|
32
|
-
|
|
33
|
-
NODEMAILER_SEND_ERROR:'Nodemailer failed to send email',
|
|
34
|
-
POSTMARK_SEND_ERROR:'Postmark failed to send email',
|
|
35
|
-
SENDGRID_SEND_ERROR:'SendGrid failed to send email',
|
|
36
|
-
AMAZON_SES_SEND_ERROR: 'Amazon SES failed to send email'
|
|
37
|
-
};
|
|
38
|
-
|
|
1
|
+
const StatusMessage = {
|
|
2
|
+
// Database messages
|
|
3
|
+
DB_CONNECTION_SUCCESS: 'Database connection has been established successfully.',
|
|
4
|
+
DB_CONNECTION_FAILED: 'Unable to connect to the database:',
|
|
5
|
+
|
|
6
|
+
// Email provider messages
|
|
7
|
+
PROVIDER_NOT_IMPLEMENTED: 'sendEmail method not implemented in BaseProvider',
|
|
8
|
+
PROVIDER_DEFAULT_FALLBACK: 'No valid provider specified, defaulting to Nodemailer',
|
|
9
|
+
|
|
10
|
+
// Validation messages
|
|
11
|
+
RECIPIENTS_REQUIRED: 'Recipients (to) are required',
|
|
12
|
+
SUBJECT_REQUIRED: 'Subject is required',
|
|
13
|
+
HTML_CONTENT_REQUIRED: 'Email content (html) is required',
|
|
14
|
+
TENANT_ID_REQUIRED: 'TenantID is required',
|
|
15
|
+
TEMPLATE_OR_HTML_REQUIRED: 'TemplateName or HTML content is required',
|
|
16
|
+
LANGCODE_IS_REQUIRED: 'Language code (langCode) is required',
|
|
17
|
+
|
|
18
|
+
// Template messages
|
|
19
|
+
TEMPLATE_NOT_FOUND: 'Template "${templateName}" not found for tenant ${tenantId}',
|
|
20
|
+
TEMPLATE_FETCH_ERROR: 'Error fetching template from DB: ${errorMessage}',
|
|
21
|
+
TEMPLATE_COMPILE_ERROR: 'Error compiling template "${templateName}": ${errorMessage}',
|
|
22
|
+
PLACEHOLDER_REPLACE_ERROR: 'Error replacing placeholders: ${errorMessage}',
|
|
23
|
+
|
|
24
|
+
// Email sending messages
|
|
25
|
+
EMAIL_SENT_SUCCESS: 'Email sent successfully for tenant: ${tenantId}',
|
|
26
|
+
EMAIL_SEND_FAILED: 'Failed to send email for tenant ${tenantId}: ${errorMessage}',
|
|
27
|
+
|
|
28
|
+
// Service initialization messages
|
|
29
|
+
PROVIDER_REQUIRED: 'Email provider is required',
|
|
30
|
+
DB_CLIENT_REQUIRED: 'Database client is required',
|
|
31
|
+
CANNOT_INSTANTIATE_BASE: 'Cannot instantiate BaseProvider directly',
|
|
32
|
+
|
|
33
|
+
NODEMAILER_SEND_ERROR:'Nodemailer failed to send email',
|
|
34
|
+
POSTMARK_SEND_ERROR:'Postmark failed to send email',
|
|
35
|
+
SENDGRID_SEND_ERROR:'SendGrid failed to send email',
|
|
36
|
+
AMAZON_SES_SEND_ERROR: 'Amazon SES failed to send email'
|
|
37
|
+
};
|
|
38
|
+
|
|
39
39
|
module.exports = StatusMessage;
|
package/enum/EmailProvider.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const EmailProvider = {
|
|
2
|
-
NODE_MAILER: 'nodemailer',
|
|
3
|
-
SENDGRID: 'sendgrid',
|
|
4
|
-
POSTMARK: 'postmark',
|
|
5
|
-
AMAZON_SES: 'amazonses'
|
|
6
|
-
};
|
|
7
|
-
|
|
1
|
+
const EmailProvider = {
|
|
2
|
+
NODE_MAILER: 'nodemailer',
|
|
3
|
+
SENDGRID: 'sendgrid',
|
|
4
|
+
POSTMARK: 'postmark',
|
|
5
|
+
AMAZON_SES: 'amazonses'
|
|
6
|
+
};
|
|
7
|
+
|
|
8
8
|
module.exports = { EmailProvider };
|
package/index.js
CHANGED
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
const BaseProvider = require('./providers/BaseProvider');
|
|
2
|
-
const NodeMailerProvider = require('./providers/NodeMailerProvider');
|
|
3
|
-
const SendgridProvider = require('./providers/SendgridProvider');
|
|
4
|
-
const PostmarkProvider = require('./providers/PostmarkProvider');
|
|
5
|
-
const AmazonSesProvider = require('./providers/AmazonSESProvider');
|
|
6
|
-
const TemplateEngine = require('./utils/TemplateEngine');
|
|
7
|
-
const EmailService = require('./service/EmailService');
|
|
8
|
-
const Config = require('./Config');
|
|
9
|
-
const logger = require('./Logger');
|
|
10
|
-
const { sequelize, EmailTemplate } = require('./model/Connect');
|
|
11
|
-
const { EmailProvider } = require('./enum/EmailProvider');
|
|
12
|
-
const StatusMessage = require('./constants/StatusMessageConstants');
|
|
13
|
-
// Initialize database connection
|
|
14
|
-
async function initializeDatabase() {
|
|
15
|
-
try {
|
|
16
|
-
await sequelize.authenticate();
|
|
17
|
-
logger.info(StatusMessage.DB_CONNECTION_SUCCESS);
|
|
18
|
-
return { EmailTemplate };
|
|
19
|
-
} catch (error) {
|
|
20
|
-
logger.error(StatusMessage.DB_CONNECTION_FAILED, error);
|
|
21
|
-
throw error;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// Factory function to create email provider
|
|
26
|
-
function createEmailProvider() {
|
|
27
|
-
const provider = (Config.emailProvider || '').toLowerCase().trim();
|
|
28
|
-
|
|
29
|
-
switch (provider) {
|
|
30
|
-
case EmailProvider.NODE_MAILER:
|
|
31
|
-
return new NodeMailerProvider();
|
|
32
|
-
case EmailProvider.SENDGRID:
|
|
33
|
-
return new SendgridProvider();
|
|
34
|
-
case EmailProvider.POSTMARK:
|
|
35
|
-
return new PostmarkProvider();
|
|
36
|
-
case EmailProvider.AMAZON_SES:
|
|
37
|
-
return new AmazonSesProvider();
|
|
38
|
-
default:
|
|
39
|
-
logger.warn(StatusMessage.PROVIDER_DEFAULT_FALLBACK);
|
|
40
|
-
return new NodeMailerProvider();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Factory function to create email service
|
|
45
|
-
async function createEmailService(options = {}) {
|
|
46
|
-
try {
|
|
47
|
-
const provider = options.provider || createEmailProvider();
|
|
48
|
-
const dbClient = options.dbClient || await initializeDatabase();
|
|
49
|
-
|
|
50
|
-
return new EmailService(provider, dbClient);
|
|
51
|
-
} catch (error) {
|
|
52
|
-
logger.error(`Failed to create email service: ${error.message}`);
|
|
53
|
-
throw error;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Create a singleton instance
|
|
58
|
-
let defaultEmailService;
|
|
59
|
-
async function getEmailService() {
|
|
60
|
-
if (!defaultEmailService) {
|
|
61
|
-
defaultEmailService = await createEmailService();
|
|
62
|
-
}
|
|
63
|
-
return defaultEmailService;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
module.exports = {
|
|
67
|
-
BaseProvider,
|
|
68
|
-
NodeMailerProvider,
|
|
69
|
-
SendgridProvider,
|
|
70
|
-
PostmarkProvider,
|
|
71
|
-
AmazonSesProvider,
|
|
72
|
-
EmailService,
|
|
73
|
-
TemplateEngine,
|
|
74
|
-
createEmailProvider,
|
|
75
|
-
createEmailService,
|
|
76
|
-
getEmailService,
|
|
77
|
-
Config
|
|
1
|
+
const BaseProvider = require('./providers/BaseProvider');
|
|
2
|
+
const NodeMailerProvider = require('./providers/NodeMailerProvider');
|
|
3
|
+
const SendgridProvider = require('./providers/SendgridProvider');
|
|
4
|
+
const PostmarkProvider = require('./providers/PostmarkProvider');
|
|
5
|
+
const AmazonSesProvider = require('./providers/AmazonSESProvider');
|
|
6
|
+
const TemplateEngine = require('./utils/TemplateEngine');
|
|
7
|
+
const EmailService = require('./service/EmailService');
|
|
8
|
+
const Config = require('./Config');
|
|
9
|
+
const logger = require('./Logger');
|
|
10
|
+
const { sequelize, EmailTemplate } = require('./model/Connect');
|
|
11
|
+
const { EmailProvider } = require('./enum/EmailProvider');
|
|
12
|
+
const StatusMessage = require('./constants/StatusMessageConstants');
|
|
13
|
+
// Initialize database connection
|
|
14
|
+
async function initializeDatabase() {
|
|
15
|
+
try {
|
|
16
|
+
await sequelize.authenticate();
|
|
17
|
+
logger.info(StatusMessage.DB_CONNECTION_SUCCESS);
|
|
18
|
+
return { EmailTemplate };
|
|
19
|
+
} catch (error) {
|
|
20
|
+
logger.error(StatusMessage.DB_CONNECTION_FAILED, error);
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Factory function to create email provider
|
|
26
|
+
function createEmailProvider() {
|
|
27
|
+
const provider = (Config.emailProvider || '').toLowerCase().trim();
|
|
28
|
+
|
|
29
|
+
switch (provider) {
|
|
30
|
+
case EmailProvider.NODE_MAILER:
|
|
31
|
+
return new NodeMailerProvider();
|
|
32
|
+
case EmailProvider.SENDGRID:
|
|
33
|
+
return new SendgridProvider();
|
|
34
|
+
case EmailProvider.POSTMARK:
|
|
35
|
+
return new PostmarkProvider();
|
|
36
|
+
case EmailProvider.AMAZON_SES:
|
|
37
|
+
return new AmazonSesProvider();
|
|
38
|
+
default:
|
|
39
|
+
logger.warn(StatusMessage.PROVIDER_DEFAULT_FALLBACK);
|
|
40
|
+
return new NodeMailerProvider();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Factory function to create email service
|
|
45
|
+
async function createEmailService(options = {}) {
|
|
46
|
+
try {
|
|
47
|
+
const provider = options.provider || createEmailProvider();
|
|
48
|
+
const dbClient = options.dbClient || await initializeDatabase();
|
|
49
|
+
|
|
50
|
+
return new EmailService(provider, dbClient);
|
|
51
|
+
} catch (error) {
|
|
52
|
+
logger.error(`Failed to create email service: ${error.message}`);
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Create a singleton instance
|
|
58
|
+
let defaultEmailService;
|
|
59
|
+
async function getEmailService() {
|
|
60
|
+
if (!defaultEmailService) {
|
|
61
|
+
defaultEmailService = await createEmailService();
|
|
62
|
+
}
|
|
63
|
+
return defaultEmailService;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
module.exports = {
|
|
67
|
+
BaseProvider,
|
|
68
|
+
NodeMailerProvider,
|
|
69
|
+
SendgridProvider,
|
|
70
|
+
PostmarkProvider,
|
|
71
|
+
AmazonSesProvider,
|
|
72
|
+
EmailService,
|
|
73
|
+
TemplateEngine,
|
|
74
|
+
createEmailProvider,
|
|
75
|
+
createEmailService,
|
|
76
|
+
getEmailService,
|
|
77
|
+
Config
|
|
78
78
|
};
|
package/model/Connect.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
const { Sequelize } = require('sequelize');
|
|
2
|
-
const Config = require('../Config');
|
|
3
|
-
|
|
4
|
-
const sequelize = new Sequelize({
|
|
5
|
-
database: Config.dbName,
|
|
6
|
-
username: Config.dbUser,
|
|
7
|
-
password: Config.dbPass,
|
|
8
|
-
host: Config.dbHost,
|
|
9
|
-
port: Config.dbPort,
|
|
10
|
-
dialect: 'postgres',
|
|
11
|
-
schema: Config.dbschema,
|
|
12
|
-
logging: false,
|
|
13
|
-
define: {
|
|
14
|
-
timestamps: false,
|
|
15
|
-
freezeTableName: true
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
const EmailTemplate = require('./EmailTemplate')(sequelize);
|
|
20
|
-
|
|
21
|
-
module.exports = {
|
|
22
|
-
sequelize,
|
|
23
|
-
EmailTemplate
|
|
1
|
+
const { Sequelize } = require('sequelize');
|
|
2
|
+
const Config = require('../Config');
|
|
3
|
+
|
|
4
|
+
const sequelize = new Sequelize({
|
|
5
|
+
database: Config.dbName,
|
|
6
|
+
username: Config.dbUser,
|
|
7
|
+
password: Config.dbPass,
|
|
8
|
+
host: Config.dbHost,
|
|
9
|
+
port: Config.dbPort,
|
|
10
|
+
dialect: 'postgres',
|
|
11
|
+
schema: Config.dbschema,
|
|
12
|
+
logging: false,
|
|
13
|
+
define: {
|
|
14
|
+
timestamps: false,
|
|
15
|
+
freezeTableName: true
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const EmailTemplate = require('./EmailTemplate')(sequelize);
|
|
20
|
+
|
|
21
|
+
module.exports = {
|
|
22
|
+
sequelize,
|
|
23
|
+
EmailTemplate
|
|
24
24
|
};
|
package/model/EmailTemplate.js
CHANGED
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
const { DataTypes } = require('sequelize');
|
|
2
|
-
require('dotenv').config();
|
|
3
|
-
|
|
4
|
-
module.exports = (sequelize) => {
|
|
5
|
-
return sequelize.define('EmailTemplate', {
|
|
6
|
-
TemplateID: {
|
|
7
|
-
type: DataTypes.INTEGER,
|
|
8
|
-
autoIncrement: true,
|
|
9
|
-
primaryKey: true,
|
|
10
|
-
},
|
|
11
|
-
TemplateName: {
|
|
12
|
-
type: DataTypes.STRING(100),
|
|
13
|
-
allowNull: false,
|
|
14
|
-
unique: true,
|
|
15
|
-
},
|
|
16
|
-
TenantID: {
|
|
17
|
-
type: DataTypes.INTEGER,
|
|
18
|
-
allowNull: false
|
|
19
|
-
},
|
|
20
|
-
LangCode: {
|
|
21
|
-
type: DataTypes.STRING(10),
|
|
22
|
-
allowNull: false,
|
|
23
|
-
defaultValue: 'en',
|
|
24
|
-
},
|
|
25
|
-
Subject: {
|
|
26
|
-
type: DataTypes.STRING(255),
|
|
27
|
-
allowNull: false,
|
|
28
|
-
},
|
|
29
|
-
Body: {
|
|
30
|
-
type: DataTypes.TEXT,
|
|
31
|
-
allowNull: false,
|
|
32
|
-
},
|
|
33
|
-
CreatedBy: {
|
|
34
|
-
type: DataTypes.STRING,
|
|
35
|
-
},
|
|
36
|
-
CreatedAt: {
|
|
37
|
-
type: DataTypes.DATE,
|
|
38
|
-
defaultValue: DataTypes.NOW,
|
|
39
|
-
},
|
|
40
|
-
UpdatedBy: {
|
|
41
|
-
type: DataTypes.STRING,
|
|
42
|
-
},
|
|
43
|
-
UpdatedAt: {
|
|
44
|
-
type: DataTypes.DATE,
|
|
45
|
-
defaultValue: DataTypes.NOW,
|
|
46
|
-
}
|
|
47
|
-
}, {
|
|
48
|
-
tableName: 'EmailTemplate',
|
|
49
|
-
timestamps: false,
|
|
50
|
-
});
|
|
51
|
-
};
|
|
1
|
+
const { DataTypes } = require('sequelize');
|
|
2
|
+
require('dotenv').config();
|
|
3
|
+
|
|
4
|
+
module.exports = (sequelize) => {
|
|
5
|
+
return sequelize.define('EmailTemplate', {
|
|
6
|
+
TemplateID: {
|
|
7
|
+
type: DataTypes.INTEGER,
|
|
8
|
+
autoIncrement: true,
|
|
9
|
+
primaryKey: true,
|
|
10
|
+
},
|
|
11
|
+
TemplateName: {
|
|
12
|
+
type: DataTypes.STRING(100),
|
|
13
|
+
allowNull: false,
|
|
14
|
+
unique: true,
|
|
15
|
+
},
|
|
16
|
+
TenantID: {
|
|
17
|
+
type: DataTypes.INTEGER,
|
|
18
|
+
allowNull: false
|
|
19
|
+
},
|
|
20
|
+
LangCode: {
|
|
21
|
+
type: DataTypes.STRING(10),
|
|
22
|
+
allowNull: false,
|
|
23
|
+
defaultValue: 'en',
|
|
24
|
+
},
|
|
25
|
+
Subject: {
|
|
26
|
+
type: DataTypes.STRING(255),
|
|
27
|
+
allowNull: false,
|
|
28
|
+
},
|
|
29
|
+
Body: {
|
|
30
|
+
type: DataTypes.TEXT,
|
|
31
|
+
allowNull: false,
|
|
32
|
+
},
|
|
33
|
+
CreatedBy: {
|
|
34
|
+
type: DataTypes.STRING,
|
|
35
|
+
},
|
|
36
|
+
CreatedAt: {
|
|
37
|
+
type: DataTypes.DATE,
|
|
38
|
+
defaultValue: DataTypes.NOW,
|
|
39
|
+
},
|
|
40
|
+
UpdatedBy: {
|
|
41
|
+
type: DataTypes.STRING,
|
|
42
|
+
},
|
|
43
|
+
UpdatedAt: {
|
|
44
|
+
type: DataTypes.DATE,
|
|
45
|
+
defaultValue: DataTypes.NOW,
|
|
46
|
+
}
|
|
47
|
+
}, {
|
|
48
|
+
tableName: 'EmailTemplate',
|
|
49
|
+
timestamps: false,
|
|
50
|
+
});
|
|
51
|
+
};
|
package/package.json
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@b2y/email-service",
|
|
3
|
-
"version": "1.0
|
|
4
|
-
"main": "index.js",
|
|
5
|
-
"exports": {
|
|
6
|
-
".": "./index.js",
|
|
7
|
-
"./providers": "./providers/index.js",
|
|
8
|
-
"./providers/base": "./providers/BaseProvider.js",
|
|
9
|
-
"./providers/nodemailer": "./providers/NodeMailerProvider.js",
|
|
10
|
-
"./providers/sendgrid": "./providers/SendGridProvider.js",
|
|
11
|
-
"./utils/templateEngine": "./utils/TemplateEngine.js",
|
|
12
|
-
"./EmailService": "./service/EmailService.js"
|
|
13
|
-
},
|
|
14
|
-
"files": [
|
|
15
|
-
"providers/",
|
|
16
|
-
"templates/",
|
|
17
|
-
"utils/",
|
|
18
|
-
"constants/",
|
|
19
|
-
"enum/",
|
|
20
|
-
"model/",
|
|
21
|
-
"service/",
|
|
22
|
-
"*.js"
|
|
23
|
-
],
|
|
24
|
-
"scripts": {
|
|
25
|
-
"test": "echo \"Error: no test specified\" && exit 1",
|
|
26
|
-
"start": "node test.js"
|
|
27
|
-
},
|
|
28
|
-
"author": "",
|
|
29
|
-
"license": "ISC",
|
|
30
|
-
"description": "A flexible email service with support for multiple providers and custom templates",
|
|
31
|
-
"keywords": [
|
|
32
|
-
"email",
|
|
33
|
-
"templates",
|
|
34
|
-
"nodemailer",
|
|
35
|
-
"sendgrid"
|
|
36
|
-
],
|
|
37
|
-
"publishConfig": {
|
|
38
|
-
"access": "public"
|
|
39
|
-
},
|
|
40
|
-
"dependencies": {
|
|
41
|
-
"@aws-sdk/client-ses": "^3.957.0",
|
|
42
|
-
"@sendgrid/mail": "^8.1.5",
|
|
43
|
-
"b2y-logger": "^1.1.0",
|
|
44
|
-
"dotenv": "^16.5.0",
|
|
45
|
-
"handlebars": "^4.7.8",
|
|
46
|
-
"log4js": "^6.9.1",
|
|
47
|
-
"nodemailer": "^6.10.0",
|
|
48
|
-
"pg": "^8.16.3",
|
|
49
|
-
"pg-hstore": "^2.3.4",
|
|
50
|
-
"postmark": "^4.0.5",
|
|
51
|
-
"sequelize": "^6.37.7"
|
|
52
|
-
}
|
|
53
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@b2y/email-service",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": "./index.js",
|
|
7
|
+
"./providers": "./providers/index.js",
|
|
8
|
+
"./providers/base": "./providers/BaseProvider.js",
|
|
9
|
+
"./providers/nodemailer": "./providers/NodeMailerProvider.js",
|
|
10
|
+
"./providers/sendgrid": "./providers/SendGridProvider.js",
|
|
11
|
+
"./utils/templateEngine": "./utils/TemplateEngine.js",
|
|
12
|
+
"./EmailService": "./service/EmailService.js"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"providers/",
|
|
16
|
+
"templates/",
|
|
17
|
+
"utils/",
|
|
18
|
+
"constants/",
|
|
19
|
+
"enum/",
|
|
20
|
+
"model/",
|
|
21
|
+
"service/",
|
|
22
|
+
"*.js"
|
|
23
|
+
],
|
|
24
|
+
"scripts": {
|
|
25
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
26
|
+
"start": "node test.js"
|
|
27
|
+
},
|
|
28
|
+
"author": "",
|
|
29
|
+
"license": "ISC",
|
|
30
|
+
"description": "A flexible email service with support for multiple providers and custom templates",
|
|
31
|
+
"keywords": [
|
|
32
|
+
"email",
|
|
33
|
+
"templates",
|
|
34
|
+
"nodemailer",
|
|
35
|
+
"sendgrid"
|
|
36
|
+
],
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@aws-sdk/client-ses": "^3.957.0",
|
|
42
|
+
"@sendgrid/mail": "^8.1.5",
|
|
43
|
+
"b2y-logger": "^1.1.0",
|
|
44
|
+
"dotenv": "^16.5.0",
|
|
45
|
+
"handlebars": "^4.7.8",
|
|
46
|
+
"log4js": "^6.9.1",
|
|
47
|
+
"nodemailer": "^6.10.0",
|
|
48
|
+
"pg": "^8.16.3",
|
|
49
|
+
"pg-hstore": "^2.3.4",
|
|
50
|
+
"postmark": "^4.0.5",
|
|
51
|
+
"sequelize": "^6.37.7"
|
|
52
|
+
}
|
|
53
|
+
}
|