feat(storage): add comprehensive tests for StorageManager with memory, filesystem, and custom function backends
Some checks failed
CI / Type Check & Lint (push) Failing after 3s
CI / Build Test (Current Platform) (push) Failing after 3s
CI / Build All Platforms (push) Failing after 3s

feat(email): implement EmailSendJob class for robust email delivery with retry logic and MX record resolution

feat(mail): restructure mail module exports for simplified access to core and delivery functionalities
This commit is contained in:
2025-10-28 19:46:17 +00:00
parent 6523c55516
commit 17f5661636
271 changed files with 61736 additions and 6222 deletions

View File

@@ -3,16 +3,17 @@
* Provides utilities for managing TLS certificates
*/
import * as plugins from '../../../plugins.ts';
import * as fs from 'fs';
import * as tls from 'tls';
import { SmtpLogger } from './utils/logging.ts';
/**
* Certificate data
*/
export interface ICertificateData {
key: plugins.Buffer;
cert: plugins.Buffer;
ca?: plugins.Buffer;
key: Buffer;
cert: Buffer;
ca?: Buffer;
}
/**
@@ -154,7 +155,7 @@ export function loadCertificatesFromString(options: {
const caBuffer = caStr ? Buffer.from(caStr, 'utf8') : undefined;
// Test the certificates first
const secureContext = plugins.tls.createSecureContext({
const secureContext = tls.createSecureContext({
key: keyBuffer,
cert: certBuffer,
ca: caBuffer
@@ -205,7 +206,7 @@ export function loadCertificatesFromString(options: {
// Validate the certificates by attempting to create a secure context
try {
const secureContext = plugins.tls.createSecureContext({
const secureContext = tls.createSecureContext({
key: keyBuffer,
cert: certBuffer,
ca: caBuffer
@@ -252,9 +253,9 @@ export function loadCertificatesFromFiles(options: {
}): ICertificateData {
try {
// Read files directly as Buffers
const key = plugins.fs.readFileSync(options.keyPath);
const cert = plugins.fs.readFileSync(options.certPath);
const ca = options.caPath ? plugins.fs.readFileSync(options.caPath) : undefined;
const key = fs.readFileSync(options.keyPath);
const cert = fs.readFileSync(options.certPath);
const ca = options.caPath ? fs.readFileSync(options.caPath) : undefined;
// Log for debugging
SmtpLogger.debug('Certificate file properties', {
@@ -265,7 +266,7 @@ export function loadCertificatesFromFiles(options: {
// Validate the certificates by attempting to create a secure context
try {
const secureContext = plugins.tls.createSecureContext({
const secureContext = tls.createSecureContext({
key,
cert,
ca
@@ -363,8 +364,8 @@ ORWZbz+8rBL0JIeA7eFxEA==
export function createTlsOptions(
certificates: ICertificateData,
isServer: boolean = true
): plugins.tls.TlsOptions {
const options: plugins.tls.TlsOptions = {
): tls.TlsOptions {
const options: tls.TlsOptions = {
key: certificates.key,
cert: certificates.cert,
ca: certificates.ca,
@@ -377,7 +378,7 @@ export function createTlsOptions(
rejectUnauthorized: false,
// Longer handshake timeout for reliability
handshakeTimeout: 30000,
// TLS renegotiation option (removed - not supported in newer Node.ts)
// TLS renegotiation option (removed - not supported in newer Node.js)
// Increase timeout for better reliability under test conditions
sessionTimeout: 600,
// Let the client choose the cipher for better compatibility