import * as plugins from '../../plugins.js'; import type { UnifiedEmailServer } from '../routing/classes.unified.email.server.js'; interface Headers { [key: string]: string; } interface IEmailSignJobOptions { domain: string; selector: string; headers: Headers; body: string; } export class EmailSignJob { emailServerRef: UnifiedEmailServer; jobOptions: IEmailSignJobOptions; constructor(emailServerRef: UnifiedEmailServer, options: IEmailSignJobOptions) { this.emailServerRef = emailServerRef; this.jobOptions = options; } async loadPrivateKey(): Promise { const keyInfo = await this.emailServerRef.dkimCreator.readDKIMKeys(this.jobOptions.domain); return keyInfo.privateKey; } public async getSignatureHeader(emailMessage: string): Promise { const signResult = await plugins.dkimSign(emailMessage, { signingDomain: this.jobOptions.domain, selector: this.jobOptions.selector, privateKey: await this.loadPrivateKey(), canonicalization: 'relaxed/relaxed', algorithm: 'rsa-sha256', signTime: new Date(), }); const signature = signResult.signatures; return signature; } }