96bed71022
* Improves error logging
- use pino error logger correctly by passing in error as first argument
* monitor deployment: Filter logging at INFO level and above
* Use structured logging to create parameters for monitoring results
* Add structured logging to obj fileimport service
* Fileimport service, fix and improve logging
- use child logger with additional context where possible
- select appropriate logging level
- fix duplicated context in log statement
* REST endpoints, add context to structured logging and remove same context from message
* Webhook service provides context to bound logger to properly use structured logging
- Pass bound logger containing context to `makeNetworkRequest`
- do not log url, as it may contain a secret (like Discord's webhook urls), instead log the webhook Id
- log error message when network call fails
* upload: make better use of structured logging when recording data
* pino-pretty when in dev or test mode
- pino-pretty configured to send to stderr
* LOG_PRETTY env var
* Silence structured logging during testing
- can not rely on determining the port number by reading from stdout/stderr
- instead we determine which port is free, then create our server on that port
- we then poll that port until the server is ready before commencing tests
* Allow puppeteer to install chromium
* Do not need to install chromium separately
48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import { logger, moduleLogger } from '@/logging/logging'
|
|
import { createTransport, Transporter } from 'nodemailer'
|
|
|
|
let transporter: Transporter | undefined = undefined
|
|
|
|
const createJsonEchoTransporter = () => createTransport({ jsonTransport: true })
|
|
|
|
const initSmtpTransporter = async () => {
|
|
try {
|
|
const smtpTransporter = createTransport({
|
|
host: process.env.EMAIL_HOST || 'localhost',
|
|
port: parseInt(process.env.EMAIL_PORT || '587'),
|
|
secure: process.env.EMAIL_SECURE === 'true',
|
|
auth: {
|
|
user: process.env.EMAIL_USERNAME,
|
|
pass: process.env.EMAIL_PASSWORD
|
|
},
|
|
pool: true,
|
|
maxConnections: 20,
|
|
maxMessages: Infinity
|
|
})
|
|
await smtpTransporter.verify()
|
|
return smtpTransporter
|
|
} catch (e) {
|
|
logger.error(e, '📧 Email provider is misconfigured, check config variables.')
|
|
}
|
|
}
|
|
|
|
export async function initializeTransporter(): Promise<Transporter | undefined> {
|
|
let newTransporter = undefined
|
|
|
|
if (process.env.NODE_ENV === 'test') newTransporter = createJsonEchoTransporter()
|
|
if (process.env.EMAIL === 'true') newTransporter = await initSmtpTransporter()
|
|
|
|
if (!newTransporter) {
|
|
moduleLogger.warn(
|
|
'📧 Email provider is not configured. Server functionality will be limited.'
|
|
)
|
|
}
|
|
|
|
transporter = newTransporter
|
|
return newTransporter
|
|
}
|
|
|
|
export function getTransporter(): Transporter | undefined {
|
|
return transporter
|
|
}
|