UNPKG

cloudflare-email-kit

Version:
88 lines (87 loc) 2.22 kB
// src/kit.ts var EmailKitCore = class { name = "EmailKit"; middlewares = []; use(middleware) { if (typeof middleware === "function") { this.middlewares.push({ name: middleware.name, handle: middleware }); } else { this.middlewares.push(middleware); } return this; } async handle(ctx) { const execute = async (index) => { if (index < this.middlewares.length) { let used = false; const middleware = this.middlewares[index]; await middleware.handle(ctx, () => { if (used) { throw new Error( `next() called multiple times in middleware ${middleware.name}` ); } used = true; return execute(index + 1); }); } }; await execute(0); } }; var EmailKit = class extends EmailKitCore { use(middleware) { super.use(middleware); return this; } async process(message) { let _raw; const ctx = { message: { raw: () => { if (!_raw) { _raw = stream2buffer(message.raw, message.rawSize); } return _raw; }, size: message.rawSize, headers: message.headers, from: message.from, to: message.to, reject: message.setReject.bind(message), forward: message.forward.bind(message), reply: async (mime) => { const { EmailMessage } = await import("cloudflare:email"); const msg = new EmailMessage(message.to, message.from, mime.asRaw()); return message.reply(msg); }, isAuto() { const auto = message.headers.get("Auto-Submitted") || ""; return ["auto-generated", "auto-replied", "auto-notified"].includes(auto); } } }; return this.handle(ctx); } }; async function stream2buffer(stream, size) { const result = new Uint8Array(size); const reader = stream.getReader(); let bytes_read = 0; while (true) { const { done, value } = await reader.read(); if (done) { break; } result.set(value, bytes_read); bytes_read += value.length; } return result; } export { EmailKit, EmailKitCore };