elseware-nodejs 1.6.0 → 1.7.1

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 CHANGED
@@ -1 +1 @@
1
- # elseware-nodejs
1
+ # elseware-nodejs
package/dist/index.cjs CHANGED
@@ -3,8 +3,12 @@
3
3
  var mongoose = require('mongoose');
4
4
  var dotenv = require('dotenv');
5
5
  var storageBlob = require('@azure/storage-blob');
6
- var fs = require('fs');
6
+ var fs3 = require('fs');
7
7
  var cloudinaryModule = require('cloudinary');
8
+ var nodemailer = require('nodemailer');
9
+ var path = require('path');
10
+ var Handlebars = require('handlebars');
11
+ var juice = require('juice');
8
12
  var jwt = require('jsonwebtoken');
9
13
  var multer = require('multer');
10
14
 
@@ -12,8 +16,12 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
16
 
13
17
  var mongoose__default = /*#__PURE__*/_interopDefault(mongoose);
14
18
  var dotenv__default = /*#__PURE__*/_interopDefault(dotenv);
15
- var fs__default = /*#__PURE__*/_interopDefault(fs);
19
+ var fs3__default = /*#__PURE__*/_interopDefault(fs3);
16
20
  var cloudinaryModule__default = /*#__PURE__*/_interopDefault(cloudinaryModule);
21
+ var nodemailer__default = /*#__PURE__*/_interopDefault(nodemailer);
22
+ var path__default = /*#__PURE__*/_interopDefault(path);
23
+ var Handlebars__default = /*#__PURE__*/_interopDefault(Handlebars);
24
+ var juice__default = /*#__PURE__*/_interopDefault(juice);
17
25
  var jwt__default = /*#__PURE__*/_interopDefault(jwt);
18
26
  var multer__default = /*#__PURE__*/_interopDefault(multer);
19
27
 
@@ -5163,8 +5171,8 @@ var AzureBlobStorageService = class {
5163
5171
  // Upload file
5164
5172
  async uploadFile(localPath, blobName, onProgress) {
5165
5173
  const blockBlobClient = this.containerClient.getBlockBlobClient(blobName);
5166
- const fileSize = fs__default.default.statSync(localPath).size;
5167
- const readStream = fs__default.default.createReadStream(localPath);
5174
+ const fileSize = fs3__default.default.statSync(localPath).size;
5175
+ const readStream = fs3__default.default.createReadStream(localPath);
5168
5176
  await blockBlobClient.uploadStream(
5169
5177
  readStream,
5170
5178
  4 * 1024 * 1024,
@@ -5189,7 +5197,7 @@ var AzureBlobStorageService = class {
5189
5197
  const fileSize = response.contentLength || 0;
5190
5198
  let downloaded = 0;
5191
5199
  return new Promise((resolve, reject) => {
5192
- const writable = fs__default.default.createWriteStream(downloadPath);
5200
+ const writable = fs3__default.default.createWriteStream(downloadPath);
5193
5201
  response.readableStreamBody?.on("data", (chunk) => {
5194
5202
  downloaded += chunk.length;
5195
5203
  if (onProgress && fileSize > 0) {
@@ -5252,7 +5260,7 @@ var CloudinaryService = class {
5252
5260
  }
5253
5261
  // Upload file to Cloudinary
5254
5262
  async uploadFile(filePath, options = {}) {
5255
- if (!fs__default.default.existsSync(filePath)) {
5263
+ if (!fs3__default.default.existsSync(filePath)) {
5256
5264
  throw new Error(`File not found: ${filePath}`);
5257
5265
  }
5258
5266
  const folderPath = this.buildFolderPath(options.folder);
@@ -5299,6 +5307,86 @@ var CloudinaryService = class {
5299
5307
  return this.rootFolder || subFolder;
5300
5308
  }
5301
5309
  };
5310
+ var SMTPProvider = class {
5311
+ transporter;
5312
+ constructor(config) {
5313
+ this.transporter = nodemailer__default.default.createTransport({
5314
+ host: config.host,
5315
+ port: config.port,
5316
+ secure: config.port === 465,
5317
+ auth: {
5318
+ user: config.user,
5319
+ pass: config.pass
5320
+ }
5321
+ });
5322
+ }
5323
+ async sendMail({ to, subject, html, from }) {
5324
+ await this.transporter.sendMail({
5325
+ from,
5326
+ to,
5327
+ subject,
5328
+ html
5329
+ });
5330
+ }
5331
+ };
5332
+ var TemplateEngine = class {
5333
+ static templateCache = {};
5334
+ static cssCache = {};
5335
+ // Load ALL CSS files from styles folder
5336
+ static loadAllCSS(stylesDir) {
5337
+ if (!fs3__default.default.existsSync(stylesDir)) return "";
5338
+ const files = fs3__default.default.readdirSync(stylesDir).filter((f) => f.endsWith(".css"));
5339
+ let combinedCSS = "";
5340
+ for (const file of files) {
5341
+ const filePath = path__default.default.join(stylesDir, file);
5342
+ if (!this.cssCache[filePath]) {
5343
+ this.cssCache[filePath] = fs3__default.default.readFileSync(filePath, "utf-8");
5344
+ }
5345
+ combinedCSS += this.cssCache[filePath] + "\n";
5346
+ }
5347
+ return combinedCSS;
5348
+ }
5349
+ static render(templateName, data, templateDir) {
5350
+ const templateKey = `${templateDir}:${templateName}`;
5351
+ if (!this.templateCache[templateKey]) {
5352
+ const filePath = path__default.default.join(templateDir, `${templateName}.hbs`);
5353
+ const source = fs3__default.default.readFileSync(filePath, "utf-8");
5354
+ this.templateCache[templateKey] = Handlebars__default.default.compile(source);
5355
+ }
5356
+ const stylesDir = path__default.default.join(templateDir, "styles");
5357
+ const css = this.loadAllCSS(stylesDir);
5358
+ const rawHtml = this.templateCache[templateKey]({
5359
+ ...data,
5360
+ styles: css
5361
+ });
5362
+ return juice__default.default(rawHtml);
5363
+ }
5364
+ };
5365
+
5366
+ // src/services/email/email.service.ts
5367
+ var EmailService = class {
5368
+ provider;
5369
+ from;
5370
+ templateDir;
5371
+ constructor(provider, from, templateDir) {
5372
+ this.provider = provider;
5373
+ this.from = from;
5374
+ this.templateDir = templateDir;
5375
+ }
5376
+ async send(options) {
5377
+ const html = TemplateEngine.render(
5378
+ options.template,
5379
+ options.data,
5380
+ this.templateDir
5381
+ );
5382
+ await this.provider.sendMail({
5383
+ to: options.to,
5384
+ subject: options.subject,
5385
+ html,
5386
+ from: this.from
5387
+ });
5388
+ }
5389
+ };
5302
5390
  var JWTService = class {
5303
5391
  accessSecret;
5304
5392
  refreshSecret;
@@ -5524,6 +5612,7 @@ exports.DirectedGraph = DirectedGraph;
5524
5612
  exports.DisjointSetUnion = DisjointSetUnion;
5525
5613
  exports.DoublyLinkedList = DoublyLinkedList;
5526
5614
  exports.DynamicArray = DynamicArray;
5615
+ exports.EmailService = EmailService;
5527
5616
  exports.FenwickTree = FenwickTree;
5528
5617
  exports.FibNode = FibNode;
5529
5618
  exports.FibonacciHeap = FibonacciHeap;
@@ -5552,6 +5641,7 @@ exports.QuadTree = QuadTree;
5552
5641
  exports.Queue = Queue;
5553
5642
  exports.RadixTree = RadixTree;
5554
5643
  exports.RedBlackTree = RedBlackTree;
5644
+ exports.SMTPProvider = SMTPProvider;
5555
5645
  exports.SegmentTree = SegmentTree;
5556
5646
  exports.Set = Set2;
5557
5647
  exports.SinglyLinkedList = SinglyLinkedList;
@@ -5561,6 +5651,7 @@ exports.Stack = Stack;
5561
5651
  exports.StaticArray = StaticArray;
5562
5652
  exports.SuffixArray = SuffixArray;
5563
5653
  exports.SuffixTree = SuffixTree;
5654
+ exports.TemplateEngine = TemplateEngine;
5564
5655
  exports.TernarySearchTree = TernarySearchTree;
5565
5656
  exports.TreeNode = TreeNode;
5566
5657
  exports.Trie = Trie;