const archiver = require('archiver'); const fs = require('fs'); const path = require('path'); async function assemblePacket(config, clientDir) { const zipPath = path.join(clientDir, 'compliance-packet.zip'); const output = fs.createWriteStream(zipPath); const archive = archiver('zip', { zlib: { level: 9 } }); return new Promise((resolve, reject) => { output.on('close', () => { console.log(` → Zip created: ${archive.pointer()} bytes`); resolve(zipPath); }); archive.on('error', (err) => reject(err)); archive.pipe(output); // Add screenshots const screenshotsDir = path.join(clientDir, 'screenshots'); if (fs.existsSync(screenshotsDir)) { archive.directory(screenshotsDir, 'screenshots'); } // Create compliance packet text file const packetText = generatePacketText(config); archive.append(packetText, { name: 'compliance-packet.txt' }); // Create a formatted HTML version const packetHtml = generatePacketHtml(config); archive.append(packetHtml, { name: 'compliance-packet.html' }); // Add config archive.append(JSON.stringify(config, null, 2), { name: 'config.json' }); archive.finalize(); }); } function generatePacketText(config) { const p = config.a2pPacket; const siteUrl = config.siteUrl; return `═══════════════════════════════════════════════════════ A2P 10DLC COMPLIANCE PACKET ${config.businessName} Generated: ${new Date().toLocaleDateString()} ═══════════════════════════════════════════════════════ CAMPAIGN DESCRIPTION ───────────────────── ${p.campaignDescription} SAMPLE MESSAGES ───────────────────── Message 1: ${p.sampleMessages[0]} Message 2: ${p.sampleMessages[1]} Message 3: ${p.sampleMessages[2]} OPT-IN FLOW DESCRIPTION ───────────────────── ${p.optInFlowDescription} Website URL: ${siteUrl} Contact/Opt-in Page: ${siteUrl}/contact Privacy Policy: ${siteUrl}/privacy-policy Terms of Service: ${siteUrl}/terms OPT-IN CONFIRMATION MESSAGE ───────────────────── ${p.optInConfirmation} OPT-OUT CONFIRMATION MESSAGE ───────────────────── ${p.optOutConfirmation} HELP MESSAGE ───────────────────── ${p.helpMessage} KEYWORDS ───────────────────── Opt-in Keywords: ${p.optInKeywords} Opt-out Keywords: ${p.optOutKeywords} Help Keywords: ${p.helpKeywords} CONSENT TEXT (on website form) ───────────────────── ${p.consentText} SCREENSHOTS INCLUDED ───────────────────── 1. homepage.png - Full homepage screenshot 2. contact-optin.png - Opt-in form with consent checkbox 3. privacy-policy.png - Privacy Policy page 4. terms-of-service.png - Terms of Service page ═══════════════════════════════════════════════════════ Generated by A2P Compliance Wizard ═══════════════════════════════════════════════════════ `; } function generatePacketHtml(config) { const p = config.a2pPacket; const siteUrl = config.siteUrl; return ` A2P Compliance Packet - ${config.businessName}

A2P 10DLC Compliance Packet

${config.businessName} · Generated ${new Date().toLocaleDateString()}

Campaign Description

${p.campaignDescription}

Sample Messages

${p.sampleMessages[0]}
${p.sampleMessages[1]}
${p.sampleMessages[2]}

Opt-In Flow Description

${p.optInFlowDescription}

Website URLs

Homepage
${siteUrl}
Contact/Opt-in
${siteUrl}/contact
Privacy Policy
${siteUrl}/privacy-policy
Terms of Service
${siteUrl}/terms

Opt-In Confirmation Message

${p.optInConfirmation}

Opt-Out Confirmation Message

${p.optOutConfirmation}

Help Message

${p.helpMessage}

Keywords

Opt-in
${p.optInKeywords}
Opt-out
${p.optOutKeywords}
Help
${p.helpKeywords}

Consent Text

${p.consentText}
`; } module.exports = { assemblePacket };