/** * Invio email transazionali via Resend. * * sendLicenseEmail(to, key, { plan, expiresAt, periodEnd }) * - plan: codice piano ("basic" | "pro" | "premium" | "annual") * - expiresAt: epoch seconds (annual one-time) o null * - periodEnd: epoch seconds (subscription mensile) o null * * Variabili env richieste: * RESEND_API_KEY dal dashboard Resend * EMAIL_FROM "MusicTools " (dominio verificato) */ import { getPlan } from "./plans.js"; const FROM = process.env.EMAIL_FROM || "MusicTools "; const BASE = process.env.PUBLIC_BASE_URL || "https://musictools.djluza.com"; function fmtItalianDate(epochSeconds) { if (!epochSeconds) return ""; const d = new Date(Number(epochSeconds) * 1000); return new Intl.DateTimeFormat("it-IT", { timeZone: "Europe/Rome", day: "2-digit", month: "long", year: "numeric", }).format(d); } function describePlan(planCode, expiresAt, periodEnd) { const p = getPlan(planCode); if (!p) { return { name: "MusicTools", summary: "La tua licenza e' attiva.", }; } const features = { audio: "download brani audio", video: "download video", record: "registrazione audio", metadata: "editor metadati", upgrade: "upgrade qualita' libreria", }; const featList = p.features.map((f) => features[f] || f).join(", "); const limit = p.daily_limit === null ? "senza limiti giornalieri" : `fino a ${p.daily_limit} download al giorno`; let validity = ""; if (planCode === "annual" && expiresAt) { validity = `Validita': 1 anno, scade il ${fmtItalianDate(expiresAt)}.`; } else if (p.is_subscription && periodEnd) { validity = `Prossimo rinnovo: ${fmtItalianDate(periodEnd)}.`; } return { name: p.name, summary: `Piano ${p.name} — ${limit}. Funzioni incluse: ${featList}. ${validity}`, }; } export async function sendLicenseEmail(to, licenseKey, opts = {}) { if (!process.env.RESEND_API_KEY) { console.warn("[email] RESEND_API_KEY non impostata, skip invio a", to); return; } const { plan: planCode, expiresAt, periodEnd } = opts; const planInfo = describePlan(planCode, expiresAt, periodEnd); const q = `key=${encodeURIComponent(licenseKey)}&email=${encodeURIComponent(to)}`; const macUrl = `${BASE}/api/download/macos?${q}`; const winUrl = `${BASE}/api/download/windows?${q}`; const html = `

Grazie per aver scelto MusicTools!

${planInfo.summary}

Ecco la tua chiave di licenza. Conservala con cura — ti servira' per attivare l'app.

${licenseKey}

Scarica l'app:

Scarica per Mac Scarica per Windows

Come attivare:

  1. Clicca uno dei bottoni qui sopra per scaricare l'installer
  2. Installa l'app (su Mac: tasto destro → Apri → Apri; su Windows: Esegui comunque)
  3. Apri MusicTools: la prima schermata ti chiede email e chiave
  4. Inserisci ${to} e la chiave qui sopra

Puoi attivare la licenza fino a 3 dispositivi (Mac e Windows mixati).

Hai bisogno di riscaricare in futuro? Vai su ${BASE.replace(/^https?:\/\//, "")}/download e inserisci email + chiave.


Hai problemi? Scrivici a info@djluza.com

`; const subject = planInfo.name === "MusicTools" ? "La tua licenza MusicTools" : `La tua licenza MusicTools ${planInfo.name}`; const resp = await fetch("https://api.resend.com/emails", { method: "POST", headers: { "Authorization": `Bearer ${process.env.RESEND_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ from: FROM, to: [to], subject, html, }), }); if (!resp.ok) { const txt = await resp.text(); throw new Error(`Resend ${resp.status}: ${txt}`); } }