whale-code 6.5.8 → 6.5.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/services/agent-loop.js +26 -2
- package/dist/cli/services/agent-loop.js.map +1 -1
- package/dist/cli/services/hooks.js +2 -1
- package/dist/cli/services/hooks.js.map +1 -1
- package/dist/cli/services/telemetry-spans.js +1 -0
- package/dist/cli/services/telemetry-spans.js.map +1 -1
- package/dist/cli/services/telemetry.d.ts +23 -0
- package/dist/cli/services/telemetry.js +45 -1
- package/dist/cli/services/telemetry.js.map +1 -1
- package/dist/server/handlers/__test-utils__/test-db.d.ts +17 -3
- package/dist/server/handlers/__test-utils__/test-db.js +113 -14
- package/dist/server/handlers/__test-utils__/test-db.js.map +1 -1
- package/dist/server/handlers/affiliates.d.ts +9 -0
- package/dist/server/handlers/affiliates.js +197 -0
- package/dist/server/handlers/affiliates.js.map +1 -0
- package/dist/server/handlers/api-docs.d.ts +4 -2
- package/dist/server/handlers/api-docs.js +204 -1681
- package/dist/server/handlers/api-docs.js.map +1 -1
- package/dist/server/handlers/campaigns.d.ts +9 -0
- package/dist/server/handlers/campaigns.js +237 -0
- package/dist/server/handlers/campaigns.js.map +1 -0
- package/dist/server/handlers/catalog-schemas.js +9 -9
- package/dist/server/handlers/catalog-schemas.js.map +1 -1
- package/dist/server/handlers/catalog.js +1 -1
- package/dist/server/handlers/catalog.js.map +1 -1
- package/dist/server/handlers/comms-documents.js +28 -2
- package/dist/server/handlers/comms-documents.js.map +1 -1
- package/dist/server/handlers/comms-pdf-generation.js +25 -3
- package/dist/server/handlers/comms-pdf-generation.js.map +1 -1
- package/dist/server/handlers/comms-pdf-helpers.js +4 -4
- package/dist/server/handlers/comms-pdf-helpers.js.map +1 -1
- package/dist/server/handlers/comms.d.ts +100 -0
- package/dist/server/handlers/comms.js +146 -12
- package/dist/server/handlers/comms.js.map +1 -1
- package/dist/server/handlers/coupons.d.ts +9 -0
- package/dist/server/handlers/coupons.js +220 -0
- package/dist/server/handlers/coupons.js.map +1 -0
- package/dist/server/handlers/embeddings.js +1 -1
- package/dist/server/handlers/embeddings.js.map +1 -1
- package/dist/server/handlers/enrichment.js +2 -622
- package/dist/server/handlers/enrichment.js.map +1 -1
- package/dist/server/handlers/fulfillment.d.ts +9 -0
- package/dist/server/handlers/fulfillment.js +209 -0
- package/dist/server/handlers/fulfillment.js.map +1 -0
- package/dist/server/handlers/google-ads.d.ts +24 -0
- package/dist/server/handlers/google-ads.js +2199 -0
- package/dist/server/handlers/google-ads.js.map +1 -0
- package/dist/server/handlers/invoices.d.ts +9 -0
- package/dist/server/handlers/invoices.js +252 -0
- package/dist/server/handlers/invoices.js.map +1 -0
- package/dist/server/handlers/loyalty.d.ts +9 -0
- package/dist/server/handlers/loyalty.js +197 -0
- package/dist/server/handlers/loyalty.js.map +1 -0
- package/dist/server/handlers/meta-ads-graph-api.js +18 -3
- package/dist/server/handlers/meta-ads-graph-api.js.map +1 -1
- package/dist/server/handlers/phone.d.ts +9 -0
- package/dist/server/handlers/phone.js +197 -0
- package/dist/server/handlers/phone.js.map +1 -0
- package/dist/server/handlers/pipeline.d.ts +9 -0
- package/dist/server/handlers/pipeline.js +277 -0
- package/dist/server/handlers/pipeline.js.map +1 -0
- package/dist/server/handlers/qr-codes.d.ts +9 -0
- package/dist/server/handlers/qr-codes.js +198 -0
- package/dist/server/handlers/qr-codes.js.map +1 -0
- package/dist/server/handlers/reviews.d.ts +9 -0
- package/dist/server/handlers/reviews.js +171 -0
- package/dist/server/handlers/reviews.js.map +1 -0
- package/dist/server/handlers/segments.d.ts +9 -0
- package/dist/server/handlers/segments.js +229 -0
- package/dist/server/handlers/segments.js.map +1 -0
- package/dist/server/handlers/social.d.ts +9 -0
- package/dist/server/handlers/social.js +81 -0
- package/dist/server/handlers/social.js.map +1 -0
- package/dist/server/handlers/tax.d.ts +9 -0
- package/dist/server/handlers/tax.js +182 -0
- package/dist/server/handlers/tax.js.map +1 -0
- package/dist/server/handlers/wallet.d.ts +9 -0
- package/dist/server/handlers/wallet.js +203 -0
- package/dist/server/handlers/wallet.js.map +1 -0
- package/dist/server/handlers/webhooks-mgmt.d.ts +9 -0
- package/dist/server/handlers/webhooks-mgmt.js +181 -0
- package/dist/server/handlers/webhooks-mgmt.js.map +1 -0
- package/dist/server/handlers/wholesale.d.ts +9 -0
- package/dist/server/handlers/wholesale.js +219 -0
- package/dist/server/handlers/wholesale.js.map +1 -0
- package/dist/server/index.js +20 -9
- package/dist/server/index.js.map +1 -1
- package/dist/server/lib/clickhouse-buffer.js +1 -0
- package/dist/server/lib/clickhouse-buffer.js.map +1 -1
- package/dist/server/lib/coa-renderer.d.ts +1 -1
- package/dist/server/lib/coa-renderer.js +32 -10
- package/dist/server/lib/coa-renderer.js.map +1 -1
- package/dist/server/server-worker.d.ts +1 -0
- package/dist/server/server-worker.js +464 -3
- package/dist/server/server-worker.js.map +1 -1
- package/dist/server/tool-router.js +118 -4
- package/dist/server/tool-router.js.map +1 -1
- package/package.json +26 -3
- package/vendor/ink/package.json +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comms.js","names":["sanitizeFilterValue","escapeCSV","fillTemplate","groupBy","validateUrl","applyGenerationRules","generateCannabinoidData","applyCalculations","runValidation","generateFullPanelData","renderLayoutToPdf","renderHtmlToPdf","renderLabelToPdf","renderCOAToPdf","QRCode","handleBrowser","MAX_ATTACHMENT_BYTES","MAX_TOTAL_ATTACHMENT_BYTES","MAX_ATTACHMENT_COUNT","generateThumbnail","sb","docId","pdfUrl","viewerUrl","encodeURIComponent","result","action","url","b64","data","screenshot_base64","thumbBuffer","Buffer","from","thumbPath","storage","upload","contentType","upsert","thumbUrlData","getPublicUrl","update","thumbnail_url","publicUrl","eq","handleEmail","args","storeId","success","error","sid","q","select","order","ascending","limit","status","mailbox","priority","message","flattened","map","row","latest_message","rest","subject","from_email","thread_id","single","messages","thread","lines","msg","sort","a","b","Date","created_at","getTime","push","to_email","slice","body","body_text","length","join","oneHourAgo","now","toISOString","count","recentSends","head","gte","sbUrl","process","env","sbKey","attachments","rawAttachments","Error","totalBytes","att","ssrfErr","fileResp","fetch","ok","buffer","arrayBuffer","byteLength","toFixed","base64","toString","filename","split","pop","content","contentBytes","Math","ceil","emailHtml","html","emailSubject","emailText","text","template_data","tplData","payload","to","resp","method","headers","JSON","stringify","json","err","template","email_id","updates","intent","ai_intent","ai_summary","stats","total","by_status","by_mailbox","by_priority","name","slug","toLowerCase","replace","insert","store_id","category","description","html_content","preview_text","text_content","is_active","template_id","undefined","Object","keys","deleted","handleDocuments","docType","document_type","extMap","csv","markdown","pdf","mimeMap","ext","mime","safeName","fileName","storagePath","uploadBuffer","htmlContent","pdfBuffer","format","landscape","Uint8Array","String","rows","Array","isArray","h","jsonData","TextEncoder","encode","uploadErr","urlData","fileUrl","sizeBytes","record","insertErr","file_name","file_url","file_size","file_type","document_name","source_name","document_date","metadata","size_bytes","endsWith","id","catch","type","size","query","sn","ilike","documents","d","reference","reference_number","created","confirm","delete","schema","or","templates","t","fields","templateId","tErr","tData","date","docName","template_name","from_template","stores","profiles","p","sample_type","has_config","config","items","results","item","itemArgs","succeeded","filter","r","failed","templateSlug","template_slug","tplQuery","tpl","tplErr","profileConfig","profileConstants","profileClientData","resolvedClientStoreId","profile_id","profile","cfg","constants","client_store_id","clientStore","clientName","legal_name","store_name","clientAddress","address","city","state","zip","Boolean","licenseNumber","distributor_license_number","clientPhone","phone","clientEmail","email","sampleName","sampleType","default_size","sampleSize","clientData","customer_id","rel","pu","platform_users","prof","maybeSingle","first_name","last_name","street_address","postal_code","clientLicense","drivers_license_number","clientMedicalCard","medical_card_number","tplConstants","mergedConstants","cannabinoidCfg","cannabinoids","_cfgRanges","profileDataOnly","mergedData","approvalDate","generation_rules","key","percentWeight","calculations","rowCtx","rowCalcs","row_calculations","computed","assign","fullPanel","microbialResults","heavyMetalsResults","mycotoxinResults","pesticidesCat1","pesticidesCat2","testsResidualSolvents","residualSolventsResults","totalPages","complianceResults","heavyMetals","microbial","pesticides","mycotoxins","residualSolvents","testsCannabinoids","moisture","testsMoisture","dateTested","testsBatch","startsWith","qrCodeDataUrl","productSlug","coaUrl","toDataURL","width","margin","validationResults","validation_rules","errors","v","severity","passed","warnings","force","e","layout","isLabel","version","elements","field","page_config","styles","productName","bucketName","coaMetadata","from_pdf_template","template_version","sample_name","sample_id","sampleId","strain","sample_size","batch_number","batchId","lab_name","labName","lab_contact","labContact","lab_website","labWebsite","lab_director","labDirector","director_title","directorTitle","logo_url","logoUrl","signature_url","signatureUrl","client_name","client_address","date_collected","dateCollected","date_received","dateReceived","date_tested","date_reported","dateReported","thc_total","totalTHC","cbd_total","totalCBD","cannabinoids_total","totalCannabinoids","fromEntries","c","cannabinoids_detailed","percent","mg_per_g","mgPerG","lod","loq","test_panels","heavy_metals","residual_solvents","safety_tests","w","docIds","document_ids","document_id","customerId","relErr","customerEmail","customerName","updateErr","in","docs","emailSent","skip_email","portalUrl","portal_url","docList","store","emailResult","customer_name","document_count","document_list","customer_email","email_sent"],"sources":["../../../src/server/handlers/comms.ts"],"sourcesContent":["import type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { sanitizeFilterValue, escapeCSV, fillTemplate, groupBy } from \"../lib/utils.js\";\nimport { validateUrl } from \"../lib/ssrf-guard.js\";\nimport {\n applyGenerationRules,\n generateCannabinoidData,\n applyCalculations,\n runValidation,\n generateFullPanelData,\n} from \"../lib/pdf-renderer.js\";\nimport { renderLayoutToPdf, renderHtmlToPdf, renderLabelToPdf } from \"../lib/react-pdf-layout.js\";\nimport { renderCOAToPdf } from \"../lib/coa-renderer.js\";\nimport type { COAData } from \"../lib/coa-renderer.js\";\nimport QRCode from \"qrcode\";\nimport { handleBrowser } from \"./browser.js\";\n\nconst MAX_ATTACHMENT_BYTES = 10 * 1024 * 1024; // 10MB per attachment\nconst MAX_TOTAL_ATTACHMENT_BYTES = 25 * 1024 * 1024; // 25MB total\nconst MAX_ATTACHMENT_COUNT = 10;\n\n/** Generate a PNG thumbnail for a PDF document via Playwright screenshot and store it in Supabase. */\nasync function generateThumbnail(sb: SupabaseClient, docId: string, pdfUrl: string): Promise<void> {\n // Wrap in Google Docs viewer — headless Chromium downloads raw PDFs instead of rendering them\n const viewerUrl = `https://docs.google.com/gview?url=${encodeURIComponent(pdfUrl)}&embedded=true`;\n const result = await handleBrowser(sb, { action: \"screenshot\", url: viewerUrl });\n const b64 = (result.data as { screenshot_base64?: string })?.screenshot_base64;\n if (!b64) return;\n const thumbBuffer = Buffer.from(b64, 'base64');\n const thumbPath = `thumbs/${docId}.png`;\n await sb.storage.from('screenshots').upload(thumbPath, thumbBuffer, {\n contentType: 'image/png', upsert: true,\n });\n const { data: thumbUrlData } = sb.storage.from('screenshots').getPublicUrl(thumbPath);\n await sb.from('store_documents').update({ thumbnail_url: thumbUrlData.publicUrl }).eq('id', docId);\n}\n\nexport async function handleEmail(sb: SupabaseClient, args: Record<string, unknown>, storeId?: string) {\n if (!storeId) return { success: false, error: \"store_id required\" };\n const sid = storeId as string;\n switch (args.action) {\n case \"inbox\": {\n let q = sb.from(\"email_threads\").select(\"*, latest_message:email_inbox(subject, from_email, created_at)\")\n .eq(\"store_id\", sid).order(\"updated_at\", { ascending: false }).limit(args.limit as number || 25);\n if (args.status) q = q.eq(\"status\", args.status as string);\n if (args.mailbox) q = q.eq(\"mailbox\", args.mailbox as string);\n if (args.priority) q = q.eq(\"priority\", args.priority as string);\n const { data, error } = await q;\n if (error) return { success: false, error: error.message };\n // Flatten latest_message join so subject/from appear as table columns\n const flattened = (data || []).map((row: any) => {\n const { latest_message, ...rest } = row;\n return { ...rest, subject: latest_message?.subject || null, from_email: latest_message?.from_email || null };\n });\n return { success: true, data: flattened };\n }\n case \"inbox_get\": {\n const { data, error } = await sb.from(\"email_threads\")\n .select(\"*, messages:email_inbox(id, subject, from_email, to_email, body_text, created_at)\").eq(\"id\", args.thread_id as string).eq(\"store_id\", sid).single();\n if (error) return { success: false, error: error.message };\n // Pre-format so messages are visible (formatter handles sub-tables but body gets truncated)\n const { messages, ...thread } = data as any;\n const lines: string[] = [\n `## Email Thread`,\n `**Status**: ${thread.status || \"—\"} | **Mailbox**: ${thread.mailbox || \"—\"} | **Priority**: ${thread.priority || \"—\"}`,\n \"\",\n ];\n for (const msg of (messages || []).sort((a: any, b: any) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime())) {\n lines.push(`### ${msg.from_email} → ${msg.to_email || \"—\"} (${msg.created_at?.slice(0, 16) || \"—\"})`);\n lines.push(`**Subject**: ${msg.subject || \"(no subject)\"}`);\n const body = (msg.body_text || \"\").slice(0, 500);\n lines.push(body + (msg.body_text?.length > 500 ? \"...\" : \"\"));\n lines.push(\"\");\n }\n return { success: true, data: lines.join(\"\\n\") };\n }\n case \"send\": {\n // P0 FIX: Per-store email rate limit (100 emails/hour)\n const oneHourAgo = new Date(Date.now() - 3600_000).toISOString();\n const { count: recentSends } = await sb.from(\"email_sends\")\n .select(\"id\", { count: \"exact\", head: true })\n .eq(\"store_id\", sid)\n .gte(\"created_at\", oneHourAgo);\n if ((recentSends || 0) >= 100) {\n return { success: false, error: \"Email rate limit exceeded (100/hour). Try again later.\" };\n }\n\n // Invoke send-email edge function\n const sbUrl = process.env[\"SUPABASE_URL\"]!;\n const sbKey = process.env[\"SUPABASE_SERVICE_ROLE_KEY\"]!;\n try {\n // Resolve URL-based attachments to base64 for Resend API\n let attachments: { filename: string; content: string }[] | undefined;\n const rawAttachments = args.attachments as { url?: string; filename?: string; content?: string }[] | undefined;\n if (rawAttachments && rawAttachments.length > 0) {\n // P0 FIX: Enforce attachment count limit\n if (rawAttachments.length > MAX_ATTACHMENT_COUNT) {\n throw new Error(`Too many attachments: ${rawAttachments.length} (max ${MAX_ATTACHMENT_COUNT})`);\n }\n attachments = [];\n let totalBytes = 0;\n for (const att of rawAttachments) {\n if (att.url) {\n // P0 FIX: Validate URL to prevent SSRF via attachment URLs\n const ssrfErr = await validateUrl(att.url);\n if (ssrfErr) throw new Error(`Attachment URL blocked: ${ssrfErr}`);\n // Fetch the file and convert to base64\n const fileResp = await fetch(att.url);\n if (!fileResp.ok) throw new Error(`Failed to fetch attachment: ${att.url} (${fileResp.status})`);\n const buffer = await fileResp.arrayBuffer();\n // P0 FIX: Enforce 10MB per-attachment size limit\n if (buffer.byteLength > MAX_ATTACHMENT_BYTES) {\n throw new Error(`Attachment too large: ${(buffer.byteLength / 1024 / 1024).toFixed(1)}MB (max 10MB)`);\n }\n // P0 FIX: Enforce 25MB total attachment size limit\n totalBytes += buffer.byteLength;\n if (totalBytes > MAX_TOTAL_ATTACHMENT_BYTES) {\n throw new Error(`Total attachment size exceeds limit: ${(totalBytes / 1024 / 1024).toFixed(1)}MB (max 25MB)`);\n }\n const base64 = Buffer.from(buffer).toString(\"base64\");\n const filename = att.filename || att.url.split(\"/\").pop() || \"attachment\";\n attachments.push({ filename, content: base64 });\n } else if (att.content && att.filename) {\n // Already base64 — decode length to check size\n const contentBytes = Math.ceil((att.content.length * 3) / 4);\n if (contentBytes > MAX_ATTACHMENT_BYTES) {\n throw new Error(`Attachment too large: ${(contentBytes / 1024 / 1024).toFixed(1)}MB (max 10MB)`);\n }\n totalBytes += contentBytes;\n if (totalBytes > MAX_TOTAL_ATTACHMENT_BYTES) {\n throw new Error(`Total attachment size exceeds limit: ${(totalBytes / 1024 / 1024).toFixed(1)}MB (max 25MB)`);\n }\n attachments.push({ filename: att.filename, content: att.content });\n }\n }\n }\n\n // Resolve {{variable}} placeholders in email fields against template_data\n let emailHtml = args.html as string | undefined;\n let emailSubject = args.subject as string | undefined;\n let emailText = args.text as string | undefined;\n if (args.template_data && typeof args.template_data === \"object\") {\n const tplData = args.template_data as Record<string, unknown>;\n if (emailHtml) emailHtml = fillTemplate(emailHtml, tplData);\n if (emailSubject) emailSubject = fillTemplate(emailSubject, tplData);\n if (emailText) emailText = fillTemplate(emailText, tplData);\n }\n\n const payload: Record<string, unknown> = { to: args.to, subject: emailSubject, html: emailHtml, text: emailText, storeId: sid };\n if (attachments && attachments.length > 0) payload.attachments = attachments;\n\n const resp = await fetch(`${sbUrl}/functions/v1/send-email`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", \"Authorization\": `Bearer ${sbKey}` },\n body: JSON.stringify(payload)\n });\n const result = await resp.json();\n return resp.ok ? { success: true, data: result } : { success: false, error: result.error || \"Send failed\" };\n } catch (err) {\n return { success: false, error: `Email send failed: ${err}` };\n }\n }\n case \"send_template\": {\n const sbUrl = process.env[\"SUPABASE_URL\"]!;\n const sbKey = process.env[\"SUPABASE_SERVICE_ROLE_KEY\"]!;\n try {\n const resp = await fetch(`${sbUrl}/functions/v1/send-email`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", \"Authorization\": `Bearer ${sbKey}` },\n body: JSON.stringify({ to: args.to, template: args.template, template_data: args.template_data, storeId: sid })\n });\n const result = await resp.json();\n return resp.ok ? { success: true, data: result } : { success: false, error: result.error || \"Send failed\" };\n } catch (err) {\n return { success: false, error: `Template send failed: ${err}` };\n }\n }\n case \"list\": {\n const { data, error } = await sb.from(\"email_sends\").select(\"*\")\n .eq(\"store_id\", sid).order(\"created_at\", { ascending: false }).limit(args.limit as number || 50);\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n case \"get\": {\n const { data, error } = await sb.from(\"email_sends\")\n .select(\"*\").eq(\"id\", args.email_id as string).eq(\"store_id\", sid).single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n case \"templates\": {\n const { data, error } = await sb.from(\"email_templates\").select(\"*\")\n .eq(\"store_id\", sid).eq(\"is_active\", true).limit(100);\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n case \"inbox_reply\": {\n const sbUrl = process.env[\"SUPABASE_URL\"]!;\n const sbKey = process.env[\"SUPABASE_SERVICE_ROLE_KEY\"]!;\n try {\n const resp = await fetch(`${sbUrl}/functions/v1/send-email`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", \"Authorization\": `Bearer ${sbKey}` },\n body: JSON.stringify({ to: args.to, subject: args.subject, html: args.html, text: args.text, thread_id: args.thread_id, storeId: sid })\n });\n const result = await resp.json();\n return resp.ok ? { success: true, data: result } : { success: false, error: result.error || \"Reply failed\" };\n } catch (err) {\n return { success: false, error: `Reply failed: ${err}` };\n }\n }\n case \"inbox_update\": {\n const updates: Record<string, unknown> = {};\n if (args.status) updates.status = args.status;\n if (args.priority) updates.priority = args.priority;\n if (args.intent) updates.ai_intent = args.intent;\n if (args.ai_summary) updates.ai_summary = args.ai_summary;\n const { data, error } = await sb.from(\"email_threads\")\n .update(updates).eq(\"id\", args.thread_id as string).eq(\"store_id\", sid).select().single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n case \"inbox_stats\": {\n const { data, error } = await sb.from(\"email_threads\")\n .select(\"status, mailbox, priority\").eq(\"store_id\", sid).limit(1000);\n if (error) return { success: false, error: error.message };\n const stats = {\n total: data.length,\n by_status: groupBy(data, \"status\"),\n by_mailbox: groupBy(data, \"mailbox\"),\n by_priority: groupBy(data, \"priority\")\n };\n return { success: true, data: stats };\n }\n case \"create_template\": {\n if (!args.name) return { success: false, error: \"name is required\" };\n if (!args.subject) return { success: false, error: \"subject is required\" };\n const slug = (args.slug as string) || (args.name as string).toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\");\n const { data, error } = await sb.from(\"email_templates\").insert({\n store_id: sid,\n name: args.name as string,\n slug,\n subject: args.subject as string,\n category: (args.category as string) || \"general\",\n description: (args.description as string) || null,\n html_content: (args.html_content as string) || null,\n preview_text: (args.preview_text as string) || null,\n text_content: (args.text_content as string) || null,\n is_active: true,\n }).select(\"id, name, slug, subject, category, created_at\").single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n case \"update_template\": {\n if (!args.template_id) return { success: false, error: \"template_id is required\" };\n const updates: Record<string, unknown> = {};\n if (args.name !== undefined) updates.name = args.name;\n if (args.slug !== undefined) updates.slug = args.slug;\n if (args.subject !== undefined) updates.subject = args.subject;\n if (args.category !== undefined) updates.category = args.category;\n if (args.description !== undefined) updates.description = args.description;\n if (args.html_content !== undefined) updates.html_content = args.html_content;\n if (args.preview_text !== undefined) updates.preview_text = args.preview_text;\n if (args.text_content !== undefined) updates.text_content = args.text_content;\n if (Object.keys(updates).length === 0) return { success: false, error: \"No fields to update\" };\n const { data, error } = await sb.from(\"email_templates\")\n .update(updates).eq(\"id\", args.template_id as string).eq(\"store_id\", sid)\n .select(\"id, name, slug, subject, category, updated_at\").single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n case \"delete_template\": {\n if (!args.template_id) return { success: false, error: \"template_id is required\" };\n const { data, error } = await sb.from(\"email_templates\")\n .update({ is_active: false }).eq(\"id\", args.template_id as string).eq(\"store_id\", sid)\n .select(\"id, name\").single();\n if (error) return { success: false, error: error.message };\n return { success: true, data: { ...data, deleted: true } };\n }\n default:\n return { success: false, error: `Unknown email action: ${args.action}. Valid: send, send_template, list, get, templates, inbox, inbox_get, inbox_reply, inbox_update, inbox_stats, create_template, update_template, delete_template` };\n }\n}\n\nexport async function handleDocuments(sb: SupabaseClient, args: Record<string, unknown>, storeId?: string) {\n if (!storeId) return { success: false, error: \"store_id required\" };\n const sid = storeId as string;\n const action = args.action as string;\n\n switch (action) {\n case \"create\": {\n const docType = (args.document_type as string) || \"text\";\n const name = args.name as string;\n if (!name) return { success: false, error: \"name is required\" };\n\n const extMap: Record<string, string> = { csv: \"csv\", json: \"json\", text: \"txt\", markdown: \"md\", html: \"html\", pdf: \"pdf\" };\n const mimeMap: Record<string, string> = {\n csv: \"text/csv\", json: \"application/json\", text: \"text/plain\",\n markdown: \"text/markdown\", html: \"text/html\", pdf: \"application/pdf\",\n };\n const ext = extMap[docType] || \"txt\";\n const mime = mimeMap[docType] || \"text/plain\";\n const safeName = name.replace(/[^a-zA-Z0-9_\\-]/g, \"_\");\n const fileName = `${safeName}_${Date.now()}.${ext}`;\n const storagePath = `${sid}/${fileName}`;\n\n let uploadBuffer: Uint8Array;\n\n if (docType === \"pdf\") {\n // PDF generation from HTML content via React-PDF\n const htmlContent = (args.html as string) || (args.content as string);\n if (!htmlContent) return { success: false, error: \"html or content (HTML string) is required for PDF documents\" };\n try {\n const pdfBuffer = await renderHtmlToPdf(htmlContent, {\n format: (args.format as string) || \"A4\",\n landscape: (args.landscape as boolean) || false,\n });\n uploadBuffer = new Uint8Array(pdfBuffer);\n } catch (err) {\n return { success: false, error: `PDF generation failed: ${err instanceof Error ? err.message : String(err)}` };\n }\n } else {\n let content: string;\n if (docType === \"csv\") {\n const headers = args.headers as string[];\n const rows = args.rows as unknown[][];\n if (!headers || !rows) return { success: false, error: \"headers and rows required for CSV\" };\n const lines = [headers.map(escapeCSV).join(\",\")];\n for (const row of rows) {\n if (Array.isArray(row)) {\n lines.push(row.map(escapeCSV).join(\",\"));\n } else {\n lines.push(headers.map(h => escapeCSV((row as Record<string, unknown>)[h])).join(\",\"));\n }\n }\n content = lines.join(\"\\n\");\n } else if (docType === \"json\") {\n const jsonData = args.data || args.content;\n content = typeof jsonData === \"string\" ? jsonData : JSON.stringify(jsonData, null, 2);\n } else {\n content = (args.content as string) || \"\";\n }\n uploadBuffer = new TextEncoder().encode(content);\n }\n\n const { error: uploadErr } = await sb.storage\n .from(\"documents\")\n .upload(storagePath, uploadBuffer, { contentType: mime, upsert: true });\n if (uploadErr) return { success: false, error: `Upload failed: ${uploadErr.message}` };\n\n const { data: urlData } = sb.storage.from(\"documents\").getPublicUrl(storagePath);\n const fileUrl = urlData.publicUrl;\n const sizeBytes = uploadBuffer.length;\n\n const { data: record, error: insertErr } = await sb.from(\"store_documents\").insert({\n store_id: sid,\n document_type: docType,\n file_name: fileName,\n file_url: fileUrl,\n file_size: sizeBytes,\n file_type: mime,\n document_name: name,\n source_name: \"Documents Edge Function\",\n document_date: new Date().toISOString().split(\"T\")[0],\n data: { document_type: docType },\n metadata: { size_bytes: sizeBytes },\n }).select(\"id, document_name, file_url, created_at\").single();\n\n if (insertErr) return { success: false, error: insertErr.message };\n if (fileUrl.endsWith('.pdf')) await generateThumbnail(sb, record.id, fileUrl).catch(() => {});\n return { success: true, data: { id: record.id, name: record.document_name, type: docType, url: record.file_url, file_name: fileName, size: sizeBytes } };\n }\n\n case \"find\": {\n let query = sb.from(\"store_documents\")\n .select(\"id, document_type, document_name, reference_number, file_url, file_type, file_size, created_at, metadata\");\n query = query.eq(\"store_id\", sid);\n if (args.document_type) query = query.eq(\"document_type\", args.document_type as string);\n if (args.name) { const sn = sanitizeFilterValue(args.name as string); query = query.ilike(\"document_name\", `%${sn}%`); }\n query = query.order(\"created_at\", { ascending: false }).limit(args.limit as number || 50);\n\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return {\n success: true,\n data: {\n count: data?.length || 0,\n documents: (data || []).map(d => ({\n id: d.id, type: d.document_type, name: d.document_name,\n reference: d.reference_number, url: d.file_url,\n size: d.file_size, created: d.created_at,\n })),\n },\n };\n }\n\n case \"delete\": {\n if (!args.confirm) return { success: false, error: \"Set confirm: true to delete\" };\n let query = sb.from(\"store_documents\").delete().eq(\"store_id\", sid);\n if (args.document_type) query = query.eq(\"document_type\", args.document_type as string);\n if (args.name) { const sn = sanitizeFilterValue(args.name as string); query = query.ilike(\"document_name\", `%${sn}%`); }\n const { data, error } = await query.select(\"id\");\n if (error) return { success: false, error: error.message };\n return { success: true, data: { deleted: data?.length || 0 } };\n }\n\n case \"create_template\": {\n if (!args.name) return { success: false, error: \"name is required\" };\n if (!args.document_type) return { success: false, error: \"document_type is required\" };\n const { data, error } = await sb.from(\"document_templates\").insert({\n store_id: sid || null,\n name: args.name as string,\n description: (args.description as string) || null,\n document_type: args.document_type as string,\n content: (args.content as string) || null,\n headers: (args.headers as string[]) || null,\n schema: (args.schema as unknown[]) || [],\n metadata: (args.data as Record<string, unknown>) || {},\n }).select(\"id, name, document_type, created_at\").single();\n if (error) return { success: false, error: error.message };\n return { success: true, data: { template_id: data.id, name: data.name, type: data.document_type } };\n }\n\n case \"list_templates\": {\n let query = sb.from(\"document_templates\")\n .select(\"id, name, description, document_type, headers, schema, created_at\")\n .eq(\"is_active\", true);\n if (sid) query = query.or(`store_id.eq.${sid},store_id.is.null`);\n if (args.document_type) query = query.eq(\"document_type\", args.document_type as string);\n if (args.limit) query = query.limit(args.limit as number);\n query = query.order(\"created_at\", { ascending: false });\n\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return {\n success: true,\n data: {\n count: data?.length || 0,\n templates: (data || []).map(t => ({\n id: t.id, name: t.name, description: t.description,\n type: t.document_type, headers: t.headers,\n fields: (t.schema as unknown[])?.length || 0,\n })),\n },\n };\n }\n\n case \"from_template\": {\n const templateId = args.template_id as string;\n if (!templateId) return { success: false, error: \"template_id is required\" };\n\n const { data: template, error: tErr } = await sb.from(\"document_templates\")\n .select(\"*\").eq(\"id\", templateId).or(`store_id.eq.${sid},store_id.is.null`).single();\n if (tErr || !template) return { success: false, error: \"Template not found\" };\n\n const tData = { ...(template.metadata as Record<string, unknown>), ...(args.data as Record<string, unknown> || {}), date: new Date().toISOString().split(\"T\")[0] };\n const docType = template.document_type as string;\n const docName = (args.name as string) || fillTemplate(template.name, tData);\n\n let content: string;\n if (docType === \"csv\") {\n const headers = template.headers as string[] || [];\n const rows = args.rows as unknown[][];\n if (!rows) return { success: false, error: \"rows required for CSV template\" };\n const lines = [headers.map(escapeCSV).join(\",\")];\n for (const row of rows) {\n if (Array.isArray(row)) lines.push(row.map(escapeCSV).join(\",\"));\n else lines.push(headers.map(h => escapeCSV((row as Record<string, unknown>)[h])).join(\",\"));\n }\n content = lines.join(\"\\n\");\n } else if (docType === \"json\") {\n content = template.content ? fillTemplate(template.content as string, tData) : JSON.stringify(tData, null, 2);\n } else {\n content = template.content ? fillTemplate(template.content as string, tData) : \"\";\n }\n\n const extMap: Record<string, string> = { csv: \"csv\", json: \"json\", text: \"txt\", markdown: \"md\", html: \"html\" };\n const mimeMap: Record<string, string> = {\n csv: \"text/csv\", json: \"application/json\", text: \"text/plain\",\n markdown: \"text/markdown\", html: \"text/html\",\n };\n const ext = extMap[docType] || \"txt\";\n const mime = mimeMap[docType] || \"text/plain\";\n const safeName = docName.replace(/[^a-zA-Z0-9_\\-]/g, \"_\");\n const fileName = `${safeName}_${Date.now()}.${ext}`;\n const storagePath = `${sid}/${fileName}`;\n\n const { error: uploadErr } = await sb.storage\n .from(\"documents\")\n .upload(storagePath, new TextEncoder().encode(content), { contentType: mime, upsert: true });\n if (uploadErr) return { success: false, error: `Upload failed: ${uploadErr.message}` };\n\n const { data: urlData } = sb.storage.from(\"documents\").getPublicUrl(storagePath);\n const sizeBytes = new TextEncoder().encode(content).length;\n\n const { data: record, error: insertErr } = await sb.from(\"store_documents\").insert({\n store_id: sid,\n document_type: docType,\n file_name: fileName,\n file_url: urlData.publicUrl,\n file_size: sizeBytes,\n file_type: mime,\n document_name: docName,\n source_name: \"Documents Edge Function\",\n document_date: new Date().toISOString().split(\"T\")[0],\n data: { template_id: template.id, template_name: template.name },\n metadata: { size_bytes: sizeBytes, from_template: true },\n }).select(\"id, document_name, file_url, created_at\").single();\n\n if (insertErr) return { success: false, error: insertErr.message };\n if (urlData.publicUrl.endsWith('.pdf')) await generateThumbnail(sb, record.id, urlData.publicUrl).catch(() => {});\n return { success: true, data: { id: record.id, name: record.document_name, type: docType, template: template.name, url: record.file_url, size: sizeBytes } };\n }\n\n case \"list_stores\": {\n const { data, error } = await sb.from(\"stores\")\n .select(\"id, store_name, slug, status, created_at\")\n .eq(\"id\", sid)\n .order(\"store_name\");\n if (error) return { success: false, error: error.message };\n return { success: true, data: { count: data?.length || 0, stores: data } };\n }\n\n case \"list_profiles\": {\n const { data, error } = await sb.from(\"document_profiles\")\n .select(\"id, name, category, sample_type, config, template_id, is_active, created_at\")\n .eq(\"is_active\", true)\n .eq(\"owner_store_id\", sid)\n .order(\"name\");\n if (error) return { success: false, error: error.message };\n return {\n success: true,\n data: {\n count: data?.length || 0,\n profiles: (data || []).map(p => ({\n id: p.id, name: p.name, category: p.category,\n sample_type: p.sample_type, template_id: p.template_id,\n has_config: Object.keys((p.config as object) || {}).length > 0,\n })),\n },\n };\n }\n\n case \"generate\": {\n // Generate a document from a template profile with store data\n const templateId = args.template_id as string;\n if (!templateId) return { success: false, error: \"template_id is required. Use list_profiles to find available templates.\" };\n // Route to from_template with the same args\n return handleDocuments(sb, { ...args, action: \"from_template\" }, storeId);\n }\n\n case \"bulk_generate\": {\n const templateId = args.template_id as string;\n if (!templateId) return { success: false, error: \"template_id required\" };\n const items = args.items as Record<string, unknown>[];\n if (!items || !Array.isArray(items) || items.length === 0) {\n return { success: false, error: \"items required: array of variable sets for each document\" };\n }\n if (items.length > 50) {\n return { success: false, error: \"Maximum 50 documents per bulk_generate call\" };\n }\n\n const results: { name: string; url: string; error?: string }[] = [];\n for (const item of items) {\n const itemArgs = { ...args, action: \"from_template\", data: item, name: item.name || undefined };\n const result = await handleDocuments(sb, itemArgs as any, storeId);\n if (result.success && result.data) {\n results.push({ name: (result.data as any).name || \"\", url: (result.data as any).url || \"\" });\n } else {\n results.push({ name: String(item.name || \"\"), url: \"\", error: result.error || \"Generation failed\" });\n }\n }\n\n const succeeded = results.filter(r => !r.error).length;\n return { success: true, data: { total: items.length, succeeded, failed: items.length - succeeded, results } };\n }\n\n // ================================================================\n // PDF TEMPLATE SYSTEM — full layout rendering, calculations, profiles\n // ================================================================\n\n case \"generate_pdf\": {\n const templateId = args.template_id as string | undefined;\n const templateSlug = args.template_slug as string | undefined;\n if (!templateId && !templateSlug) return { success: false, error: \"template_id or template_slug required\" };\n\n // 1. Load pdf_template\n let tplQuery = sb.from(\"pdf_templates\").select(\"*\").eq(\"is_active\", true);\n if (templateId) tplQuery = tplQuery.eq(\"id\", templateId);\n else tplQuery = tplQuery.eq(\"slug\", templateSlug as string);\n tplQuery = tplQuery.or(`store_id.eq.${sid},store_id.is.null`);\n const { data: tpl, error: tplErr } = await tplQuery.limit(1).single();\n if (tplErr || !tpl) return { success: false, error: `Template not found: ${templateId || templateSlug}` };\n\n // 2. Optionally load document_profile + its client store\n let profileConfig: Record<string, unknown> = {};\n let profileConstants: Record<string, unknown> = {};\n let profileClientData: Record<string, unknown> = {};\n let resolvedClientStoreId: string | null = null;\n if (args.profile_id) {\n const { data: profile } = await sb.from(\"document_profiles\")\n .select(\"*\").eq(\"id\", args.profile_id as string).eq(\"is_active\", true).single();\n if (profile) {\n const cfg = (profile.config || {}) as Record<string, unknown>;\n profileConfig = cfg;\n profileConstants = (cfg.constants || {}) as Record<string, unknown>;\n resolvedClientStoreId = profile.client_store_id || null;\n // Load client info from the profile's linked store\n if (profile.client_store_id) {\n const { data: clientStore } = await sb.from(\"stores\")\n .select(\"store_name, legal_name, address, city, state, zip, distributor_license_number, phone, email\")\n .eq(\"id\", profile.client_store_id).single();\n if (clientStore) {\n profileClientData = {\n clientName: clientStore.legal_name || clientStore.store_name,\n clientAddress: [clientStore.address, clientStore.city, clientStore.state, clientStore.zip].filter(Boolean).join(\", \") || null,\n licenseNumber: clientStore.distributor_license_number || null,\n clientPhone: clientStore.phone || null,\n clientEmail: clientStore.email || null,\n };\n }\n }\n // Use profile name as sampleName if not already set\n if (profile.name && !profileConstants.sampleName) {\n profileClientData.sampleName = profile.name;\n }\n if (profile.sample_type) {\n profileClientData.sampleType = profile.sample_type;\n }\n if (profile.default_size) {\n profileClientData.sampleSize = profile.default_size;\n }\n }\n }\n\n // 3. Optionally load customer (via store_customer_profiles + platform_users) — overrides profile client\n let clientData: Record<string, unknown> = {};\n if (args.customer_id) {\n const { data: rel } = await sb.from(\"user_creation_relationships\")\n .select(\"id, store_id, platform_users!inner(first_name, last_name, email, phone)\")\n .eq(\"id\", args.customer_id as string).single();\n if (rel) {\n const pu = (rel as any).platform_users;\n const { data: prof } = await sb.from(\"store_customer_profiles\")\n .select(\"street_address, city, state, postal_code, drivers_license_number, medical_card_number\")\n .eq(\"relationship_id\", rel.id).maybeSingle();\n clientData = {\n clientName: [pu.first_name, pu.last_name].filter(Boolean).join(\" \"),\n clientEmail: pu.email,\n clientPhone: pu.phone,\n clientAddress: prof ? [prof.street_address, prof.city, prof.state, prof.postal_code].filter(Boolean).join(\", \") : null,\n clientLicense: prof?.drivers_license_number || null,\n clientMedicalCard: prof?.medical_card_number || null,\n };\n }\n }\n\n // 4. Merge data: constants ← profile config ← profile client ← explicit client ← user data\n const tplConstants = (tpl.constants || {}) as Record<string, unknown>;\n const mergedConstants = { ...tplConstants, ...profileConstants };\n const cannabinoidCfg = (profileConfig.cannabinoids ?? undefined) as Record<string, unknown> | undefined;\n const { cannabinoids: _cfgRanges, ...profileDataOnly } = profileConfig;\n let mergedData: Record<string, unknown> = {\n ...mergedConstants,\n ...profileDataOnly,\n ...profileClientData,\n ...clientData,\n ...(args.data as Record<string, unknown> || {}),\n date: new Date().toISOString().slice(0, 10),\n approvalDate: new Date().toISOString().slice(0, 10),\n };\n\n // 5. Apply generation rules — auto-fill sampleId, dates, etc.\n mergedData = applyGenerationRules(\n tpl.generation_rules as any,\n mergedData,\n );\n\n // 6. Generate cannabinoid data if profile has cannabinoid config\n if (cannabinoidCfg && !mergedData.cannabinoids) {\n mergedData.cannabinoids = generateCannabinoidData(\n cannabinoidCfg as any,\n mergedConstants,\n );\n }\n\n // 6b. Flatten cannabinoid rows into top-level keys for calculation formulas\n // e.g. { name: \"D9-THC\", percentWeight: 0.22 } → D9_THC: 0.22\n if (Array.isArray(mergedData.cannabinoids)) {\n for (const row of mergedData.cannabinoids as { name: string; percentWeight: number }[]) {\n const key = row.name.replace(/-/g, \"_\").replace(/[^a-zA-Z0-9_]/g, \"\");\n if (key && row.percentWeight !== undefined) {\n mergedData[key] = row.percentWeight;\n }\n }\n }\n\n // 7. Apply calculations\n mergedData = applyCalculations(\n tpl.calculations as any,\n mergedConstants,\n mergedData,\n );\n\n // Also run per-row calculations if cannabinoids exist\n if (Array.isArray(mergedData.cannabinoids)) {\n const rows = mergedData.cannabinoids as Record<string, unknown>[];\n for (const row of rows) {\n const rowCtx = { ...mergedConstants, ...row };\n const rowCalcs = (tpl.row_calculations || tpl.calculations) as any;\n if (rowCalcs) {\n const computed = applyCalculations(rowCalcs, mergedConstants, rowCtx);\n Object.assign(row, computed);\n }\n }\n }\n\n // 7b. Generate full panel data if requested (safety tests, pesticides, solvents)\n if (mergedData.fullPanel && !mergedData.microbialResults) {\n const tplConstants = (tpl.constants || {}) as Record<string, unknown>;\n const fullPanel = generateFullPanelData(tplConstants);\n mergedData.microbialResults = fullPanel.microbialResults;\n mergedData.heavyMetalsResults = fullPanel.heavyMetalsResults;\n mergedData.mycotoxinResults = fullPanel.mycotoxinResults;\n mergedData.pesticidesCat1 = fullPanel.pesticidesCat1;\n mergedData.pesticidesCat2 = fullPanel.pesticidesCat2;\n mergedData.testsResidualSolvents = fullPanel.residualSolventsResults;\n mergedData.totalPages = 5;\n mergedData.complianceResults = mergedData.complianceResults || {\n heavyMetals: { status: \"PASS\" }, microbial: { status: \"PASS\" },\n pesticides: { status: \"PASS\" }, mycotoxins: { status: \"PASS\" },\n residualSolvents: { status: \"PASS\" },\n };\n }\n\n // 7b2. Auto-set test status flags for summary section\n if (mergedData.cannabinoids && (mergedData.cannabinoids as unknown[]).length > 0) {\n mergedData.testsCannabinoids = true;\n }\n if (mergedData.moisture !== undefined && mergedData.moisture !== null) {\n mergedData.testsMoisture = true;\n }\n if (mergedData.dateTested) {\n mergedData.testsBatch = true;\n }\n\n // 7c. Generate QR code for COA templates — links to Quantix COA landing page\n if ((tpl.slug as string)?.startsWith(\"cannabis-coa\") && !mergedData.qrCodeDataUrl) {\n const productSlug = ((mergedData.sampleName as string) || \"certificate\")\n .toLowerCase().replace(/[^a-z0-9]+/g, \"_\").replace(/^_|_$/g, \"\");\n const coaUrl = `https://quantixanalytics.com/coa/${sid}/${productSlug}`;\n try {\n mergedData.qrCodeDataUrl = await QRCode.toDataURL(coaUrl, { width: 120, margin: 1 });\n } catch { /* skip QR if generation fails */ }\n }\n\n // 8. Validate\n const validationResults = runValidation(tpl.validation_rules as any, mergedData);\n const errors = validationResults.filter(v => v.severity === \"error\" && !v.passed);\n const warnings = validationResults.filter(v => v.severity === \"warning\" && !v.passed);\n\n if (errors.length > 0 && !args.force) {\n return {\n success: false,\n error: `Validation failed: ${errors.map(e => e.message).join(\"; \")}`,\n data: { errors, warnings },\n };\n }\n\n // 9-10. Render PDF — all templates use React-PDF\n let pdfBuffer: Buffer;\n try {\n if ((tpl.slug as string)?.startsWith(\"cannabis-coa\")) {\n // COA templates use dedicated renderer\n pdfBuffer = await renderCOAToPdf(mergedData as unknown as COAData);\n } else {\n // Detect label layout vs generic layout\n const layout = tpl.layout as any;\n const isLabel = layout?.version === 1 && Array.isArray(layout?.elements) && layout.elements[0]?.field;\n\n if (isLabel) {\n const items = Array.isArray(mergedData.items)\n ? mergedData.items as Record<string, unknown>[]\n : [mergedData];\n pdfBuffer = await renderLabelToPdf(layout, tpl.page_config as any, items);\n } else {\n pdfBuffer = await renderLayoutToPdf(\n tpl.layout as any, tpl.page_config as any, tpl.styles as any, mergedData,\n );\n }\n }\n } catch (err) {\n return { success: false, error: `PDF generation failed: ${err instanceof Error ? err.message : String(err)}` };\n }\n\n // 11. Upload to Supabase storage\n const sampleName = (mergedData.sampleName as string) || (mergedData.productName as string) || \"\";\n const docName = (args.name as string) || (sampleName ? `${sampleName} COA` : fillTemplate(tpl.name || \"Document\", mergedData));\n const safeName = docName.replace(/[^a-zA-Z0-9_\\-]/g, \"_\");\n const fileName = `${safeName}_${Date.now()}.pdf`;\n const storagePath = `${sid}/${fileName}`;\n const bucketName = \"store-documents\";\n\n const { error: uploadErr } = await sb.storage\n .from(bucketName)\n .upload(storagePath, new Uint8Array(pdfBuffer), { contentType: \"application/pdf\", upsert: true });\n if (uploadErr) return { success: false, error: `Upload failed: ${uploadErr.message}` };\n\n const { data: urlData } = sb.storage.from(bucketName).getPublicUrl(storagePath);\n\n // 12. Build COA metadata for the Quantix landing page\n const coaMetadata: Record<string, unknown> = {\n size_bytes: pdfBuffer.length,\n from_pdf_template: true,\n template_version: tpl.version,\n };\n if ((tpl.slug as string)?.startsWith(\"cannabis-coa\")) {\n coaMetadata.sample_name = sampleName;\n coaMetadata.sample_id = mergedData.sampleId || null;\n coaMetadata.sample_type = mergedData.sampleType || mergedData.strain || null;\n coaMetadata.sample_size = mergedData.sampleSize || null;\n coaMetadata.batch_number = mergedData.batchId || null;\n coaMetadata.lab_name = mergedData.labName || null;\n coaMetadata.lab_contact = mergedData.labContact || null;\n coaMetadata.lab_website = mergedData.labWebsite || null;\n coaMetadata.lab_director = mergedData.labDirector || null;\n coaMetadata.director_title = mergedData.directorTitle || null;\n coaMetadata.logo_url = mergedData.logoUrl || null;\n coaMetadata.signature_url = mergedData.signatureUrl || null;\n coaMetadata.client_name = mergedData.clientName || null;\n coaMetadata.client_address = mergedData.clientAddress || null;\n coaMetadata.date_collected = mergedData.dateCollected || null;\n coaMetadata.date_received = mergedData.dateReceived || null;\n coaMetadata.date_tested = mergedData.dateTested || null;\n coaMetadata.date_reported = mergedData.dateReported || null;\n coaMetadata.status = \"Pass\";\n coaMetadata.thc_total = mergedData.totalTHC || null;\n coaMetadata.cbd_total = mergedData.totalCBD || null;\n coaMetadata.cannabinoids_total = mergedData.totalCannabinoids || null;\n coaMetadata.moisture = mergedData.moisture || null;\n // Detailed cannabinoid data for the interactive landing page\n const cannabinoids = mergedData.cannabinoids as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(cannabinoids)) {\n coaMetadata.cannabinoids = Object.fromEntries(\n cannabinoids.filter((c) => typeof c.percentWeight === \"number\" && c.percentWeight > 0)\n .map((c) => [c.name as string, c.percentWeight as number]),\n );\n coaMetadata.cannabinoids_detailed = cannabinoids.map((c) => ({\n name: c.name, percent: c.percentWeight, mg_per_g: c.mgPerG, lod: c.lod, loq: c.loq, result: String(c.result ?? c.percentWeight),\n }));\n }\n // Safety test panels\n if (mergedData.fullPanel) {\n coaMetadata.test_panels = {\n cannabinoids: true, microbial: true, heavy_metals: true,\n mycotoxins: true, pesticides: true, residual_solvents: true,\n };\n coaMetadata.safety_tests = {\n microbial: \"Pass\", heavy_metals: \"Pass\", mycotoxins: \"Pass\",\n pesticides: \"Pass\", residual_solvents: \"Pass\",\n };\n }\n }\n\n // 13. Insert store_documents record\n const { data: record, error: insertErr } = await sb.from(\"store_documents\").insert({\n store_id: sid,\n document_type: tpl.document_type || \"pdf\",\n file_name: fileName,\n file_url: urlData.publicUrl,\n file_size: pdfBuffer.length,\n file_type: \"application/pdf\",\n document_name: docName,\n source_name: \"PDF Template Engine\",\n document_date: new Date().toISOString().split(\"T\")[0],\n customer_id: (args.customer_id as string) || null,\n client_store_id: resolvedClientStoreId,\n data: { template_id: tpl.id, template_slug: tpl.slug, profile_id: args.profile_id || null },\n metadata: coaMetadata,\n }).select(\"id, document_name, file_url, created_at\").single();\n\n if (insertErr) return { success: false, error: insertErr.message };\n await generateThumbnail(sb, record.id, urlData.publicUrl).catch(() => {});\n\n return {\n success: true,\n data: {\n id: record.id,\n name: record.document_name,\n url: record.file_url,\n template: tpl.name,\n size: pdfBuffer.length,\n warnings: warnings.map(w => w.message),\n },\n };\n }\n\n case \"list_pdf_templates\": {\n let query = sb.from(\"pdf_templates\")\n .select(\"id, slug, name, description, document_type, version, created_at\")\n .eq(\"is_active\", true)\n .or(`store_id.eq.${sid},store_id.is.null`)\n .order(\"name\");\n if (args.document_type) query = query.eq(\"document_type\", args.document_type as string);\n if (args.limit) query = query.limit(args.limit as number);\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return {\n success: true,\n data: {\n count: data?.length || 0,\n templates: (data || []).map(t => ({\n id: t.id, slug: t.slug, name: t.name,\n description: t.description, type: t.document_type, version: t.version,\n })),\n },\n };\n }\n\n case \"list_document_profiles\": {\n let query = sb.from(\"document_profiles\")\n .select(\"id, name, category, sample_type, default_size, client_store_id, template_id, created_at\")\n .eq(\"is_active\", true)\n .eq(\"owner_store_id\", sid)\n .order(\"name\");\n if (args.template_id) query = query.eq(\"template_id\", args.template_id as string);\n if (args.category) query = query.eq(\"category\", args.category as string);\n if (args.limit) query = query.limit(args.limit as number);\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return {\n success: true,\n data: {\n count: data?.length || 0,\n profiles: (data || []).map(p => ({\n id: p.id, name: p.name, category: p.category,\n sample_type: p.sample_type, default_size: p.default_size,\n client_store_id: p.client_store_id,\n })),\n },\n };\n }\n\n case \"list_clients\":\n case \"list_customers\":\n return { success: false, error: \"Use the 'customers' tool instead. Clients are customers.\" };\n\n case \"deliver_documents\": {\n // Batch-assign documents to a customer and optionally send notification email\n const docIds = (args.document_ids as string[]) || (args.document_id ? [args.document_id as string] : []);\n const customerId = args.customer_id as string;\n if (!docIds.length) return { success: false, error: \"document_ids (array) or document_id (string) is required\" };\n if (!customerId) return { success: false, error: \"customer_id is required\" };\n\n // Verify customer belongs to this store\n const { data: rel, error: relErr } = await sb.from(\"user_creation_relationships\")\n .select(\"id, store_id, platform_users!inner(first_name, last_name, email)\")\n .eq(\"id\", customerId).eq(\"store_id\", sid).single();\n if (relErr || !rel) return { success: false, error: \"Customer not found for this store\" };\n\n const pu = (rel as any).platform_users;\n const customerEmail = pu.email as string;\n const customerName = [pu.first_name, pu.last_name].filter(Boolean).join(\" \");\n\n // Assign all documents to the customer\n const { error: updateErr } = await sb.from(\"store_documents\")\n .update({ customer_id: customerId })\n .in(\"id\", docIds)\n .eq(\"store_id\", sid);\n if (updateErr) return { success: false, error: `Failed to assign documents: ${updateErr.message}` };\n\n // Get document names for the email\n const { data: docs } = await sb.from(\"store_documents\")\n .select(\"id, document_name, file_url\")\n .in(\"id\", docIds);\n\n let emailSent = false;\n if (!args.skip_email && customerEmail) {\n const portalUrl = (args.portal_url as string) || null;\n const docList = (docs || []).map(d => `<li><a href=\"${d.file_url}\">${d.document_name || \"Document\"}</a></li>`).join(\"\");\n\n // Get store name for template\n const { data: store } = await sb.from(\"stores\").select(\"store_name\").eq(\"id\", sid).single();\n\n const emailResult = await handleEmail(sb, {\n action: \"send_template\",\n to: customerEmail,\n template: \"documents-delivered\",\n template_data: {\n customer_name: customerName || \"there\",\n store_name: store?.store_name || \"\",\n document_count: String(docIds.length),\n document_list: docList,\n portal_url: portalUrl || \"\",\n },\n }, storeId);\n emailSent = emailResult.success;\n }\n\n return {\n success: true,\n data: {\n document_ids: docIds,\n customer_id: customerId,\n customer_email: customerEmail,\n email_sent: emailSent,\n count: docIds.length,\n },\n };\n }\n\n case \"list_customer_documents\": {\n const customerId = args.customer_id as string;\n if (!customerId) return { success: false, error: \"customer_id is required\" };\n\n let query = sb.from(\"store_documents\")\n .select(\"id, document_name, file_url, file_type, created_at, thumbnail_url, metadata, document_type\")\n .eq(\"store_id\", sid)\n .eq(\"customer_id\", customerId)\n .eq(\"is_active\", true)\n .order(\"created_at\", { ascending: false });\n if (args.limit) query = query.limit(args.limit as number);\n\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return {\n success: true,\n data: {\n count: data?.length || 0,\n documents: data || [],\n },\n };\n }\n\n default:\n return { success: false, error: `Unknown documents action: ${action}. Valid: create, find, delete, create_template, list_templates, from_template, list_stores, list_profiles, generate, bulk_generate, generate_pdf, list_pdf_templates, list_document_profiles, deliver_documents, list_customer_documents` };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"comms.js","names":["sanitizeFilterValue","escapeCSV","fillTemplate","groupBy","validateUrl","applyGenerationRules","generateCannabinoidData","applyCalculations","runValidation","generateFullPanelData","renderLayoutToPdf","renderHtmlToPdf","renderLabelToPdf","renderCOAToPdf","QRCode","handleBrowser","MAX_ATTACHMENT_BYTES","MAX_TOTAL_ATTACHMENT_BYTES","MAX_ATTACHMENT_COUNT","generateThumbnail","sb","docId","pdfUrl","viewerUrl","encodeURIComponent","result","action","url","b64","data","screenshot_base64","thumbBuffer","Buffer","from","thumbPath","storage","upload","contentType","upsert","thumbUrlData","getPublicUrl","update","thumbnail_url","publicUrl","eq","handleEmail","args","storeId","success","error","sid","q","select","order","ascending","limit","status","mailbox","priority","message","flattened","map","row","latest_message","rest","subject","from_email","thread_id","single","messages","thread","lines","msg","sort","a","b","Date","created_at","getTime","push","to_email","slice","body","body_text","length","join","oneHourAgo","now","toISOString","count","recentSends","head","gte","sbUrl","process","env","sbKey","attachments","rawAttachments","Error","totalBytes","att","ssrfErr","fileResp","fetch","ok","buffer","arrayBuffer","byteLength","toFixed","base64","toString","filename","split","pop","content","contentBytes","Math","ceil","emailHtml","html","emailSubject","emailText","text","template_data","tplData","payload","to","resp","method","headers","JSON","stringify","json","err","template","email_id","updates","intent","ai_intent","ai_summary","stats","total","by_status","by_mailbox","by_priority","name","slug","toLowerCase","replace","insert","store_id","category","description","html_content","preview_text","text_content","is_active","template_id","undefined","Object","keys","deleted","handleDocuments","docType","document_type","extMap","csv","markdown","pdf","mimeMap","ext","mime","safeName","fileName","storagePath","uploadBuffer","htmlContent","pdfBuffer","format","landscape","Uint8Array","String","rows","Array","isArray","h","jsonData","TextEncoder","encode","uploadErr","urlData","fileUrl","sizeBytes","record","insertErr","file_name","file_url","file_size","file_type","document_name","source_name","document_date","metadata","size_bytes","endsWith","id","catch","type","size","query","sn","ilike","documents","d","reference","reference_number","created","confirm","delete","schema","or","templates","t","fields","templateId","tErr","tData","date","docName","template_name","from_template","stores","profiles","p","sample_type","has_config","config","items","results","item","itemArgs","succeeded","filter","r","failed","templateSlug","template_slug","tplQuery","tpl","tplErr","profileConfig","profileConstants","profileClientData","resolvedClientStoreId","profile_id","profile","cfg","constants","client_store_id","clientStore","clientName","legal_name","store_name","clientAddress","address","city","state","zip","Boolean","licenseNumber","distributor_license_number","clientPhone","phone","clientEmail","email","sampleType","default_size","sampleSize","clientData","customer_id","rel","pu","platform_users","prof","maybeSingle","first_name","last_name","street_address","postal_code","clientLicense","drivers_license_number","clientMedicalCard","medical_card_number","tplConstants","mergedConstants","cannabinoidCfg","cannabinoids","_cfgRanges","profileDataOnly","rawOverrides","userOverrides","productName","sampleName","dateCompleted","dateTested","mergedData","_sampleNameExplicit","generation_rules","key","percentWeight","calculations","rowCtx","rowCalcs","row_calculations","computed","assign","fullPanel","microbialResults","heavyMetalsResults","mycotoxinResults","pesticidesCat1","pesticidesCat2","testsResidualSolvents","residualSolventsResults","totalPages","complianceResults","heavyMetals","microbial","pesticides","mycotoxins","residualSolvents","testsCannabinoids","moisture","testsMoisture","testsBatch","startsWith","qrCodeDataUrl","productSlug","coaUrl","_coaVerificationUrl","_qrCodePrefix","resolverUrl","_resolverUrl","toDataURL","width","margin","validationResults","validation_rules","errors","v","severity","passed","warnings","force","e","res","buf","get","layout","isLabel","version","elements","field","page_config","styles","batchId","defaultName","bucketName","coaMetadata","from_pdf_template","template_version","sample_name","product_name","sample_id","sampleId","strain","sample_size","batch_number","lab_name","labName","lab_contact","labContact","lab_website","labWebsite","lab_director","labDirector","director_title","directorTitle","logo_url","logoUrl","signature_url","signatureUrl","client_name","client_address","date_collected","dateCollected","date_received","dateReceived","date_tested","date_reported","dateReported","thc_total","totalTHC","cbd_total","totalCBD","cannabinoids_total","totalCannabinoids","fromEntries","c","cannabinoids_detailed","percent","mg_per_g","mgPerG","lod","loq","test_panels","heavy_metals","residual_solvents","safety_tests","qr_code_url","qrCode","code","destination_url","product_id","batch_id","then","qrRecord","qrErr","console","qr_code_id","entity_type","entity_id","entity_name","field_name","refErr","updErr","w","not","clientIds","Set","clients","hint","storesErr","in","s","license","docIds","document_ids","document_id","customerId","relErr","customerEmail","customerName","updateErr","docs","emailSent","skip_email","portalUrl","portal_url","docList","store","emailResult","customer_name","document_count","document_list","customer_email","email_sent"],"sources":["../../../src/server/handlers/comms.ts"],"sourcesContent":["import type { SupabaseClient } from \"@supabase/supabase-js\";\nimport { sanitizeFilterValue, escapeCSV, fillTemplate, groupBy } from \"../lib/utils.js\";\nimport { validateUrl } from \"../lib/ssrf-guard.js\";\nimport {\n applyGenerationRules,\n generateCannabinoidData,\n applyCalculations,\n runValidation,\n generateFullPanelData,\n} from \"../lib/pdf-renderer.js\";\nimport { renderLayoutToPdf, renderHtmlToPdf, renderLabelToPdf } from \"../lib/react-pdf-layout.js\";\nimport { renderCOAToPdf } from \"../lib/coa-renderer.js\";\nimport type { COAData } from \"../lib/coa-renderer.js\";\nimport QRCode from \"qrcode\";\nimport { handleBrowser } from \"./browser.js\";\n\nconst MAX_ATTACHMENT_BYTES = 10 * 1024 * 1024; // 10MB per attachment\nconst MAX_TOTAL_ATTACHMENT_BYTES = 25 * 1024 * 1024; // 25MB total\nconst MAX_ATTACHMENT_COUNT = 10;\n\n/** Generate a PNG thumbnail for a PDF document via Playwright screenshot and store it in Supabase. */\nasync function generateThumbnail(sb: SupabaseClient, docId: string, pdfUrl: string): Promise<void> {\n // Wrap in Google Docs viewer — headless Chromium downloads raw PDFs instead of rendering them\n const viewerUrl = `https://docs.google.com/gview?url=${encodeURIComponent(pdfUrl)}&embedded=true`;\n const result = await handleBrowser(sb, { action: \"screenshot\", url: viewerUrl });\n const b64 = (result.data as { screenshot_base64?: string })?.screenshot_base64;\n if (!b64) return;\n const thumbBuffer = Buffer.from(b64, 'base64');\n const thumbPath = `thumbs/${docId}.png`;\n await sb.storage.from('screenshots').upload(thumbPath, thumbBuffer, {\n contentType: 'image/png', upsert: true,\n });\n const { data: thumbUrlData } = sb.storage.from('screenshots').getPublicUrl(thumbPath);\n await sb.from('store_documents').update({ thumbnail_url: thumbUrlData.publicUrl }).eq('id', docId);\n}\n\nexport async function handleEmail(sb: SupabaseClient, args: Record<string, unknown>, storeId?: string) {\n if (!storeId) return { success: false, error: \"store_id required\" };\n const sid = storeId as string;\n switch (args.action) {\n case \"inbox\": {\n let q = sb.from(\"email_threads\").select(\"*, latest_message:email_inbox(subject, from_email, created_at)\")\n .eq(\"store_id\", sid).order(\"updated_at\", { ascending: false }).limit(args.limit as number || 25);\n if (args.status) q = q.eq(\"status\", args.status as string);\n if (args.mailbox) q = q.eq(\"mailbox\", args.mailbox as string);\n if (args.priority) q = q.eq(\"priority\", args.priority as string);\n const { data, error } = await q;\n if (error) return { success: false, error: error.message };\n // Flatten latest_message join so subject/from appear as table columns\n const flattened = (data || []).map((row: any) => {\n const { latest_message, ...rest } = row;\n return { ...rest, subject: latest_message?.subject || null, from_email: latest_message?.from_email || null };\n });\n return { success: true, data: flattened };\n }\n case \"inbox_get\": {\n const { data, error } = await sb.from(\"email_threads\")\n .select(\"*, messages:email_inbox(id, subject, from_email, to_email, body_text, created_at)\").eq(\"id\", args.thread_id as string).eq(\"store_id\", sid).single();\n if (error) return { success: false, error: error.message };\n // Pre-format so messages are visible (formatter handles sub-tables but body gets truncated)\n const { messages, ...thread } = data as any;\n const lines: string[] = [\n `## Email Thread`,\n `**Status**: ${thread.status || \"—\"} | **Mailbox**: ${thread.mailbox || \"—\"} | **Priority**: ${thread.priority || \"—\"}`,\n \"\",\n ];\n for (const msg of (messages || []).sort((a: any, b: any) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime())) {\n lines.push(`### ${msg.from_email} → ${msg.to_email || \"—\"} (${msg.created_at?.slice(0, 16) || \"—\"})`);\n lines.push(`**Subject**: ${msg.subject || \"(no subject)\"}`);\n const body = (msg.body_text || \"\").slice(0, 500);\n lines.push(body + (msg.body_text?.length > 500 ? \"...\" : \"\"));\n lines.push(\"\");\n }\n return { success: true, data: lines.join(\"\\n\") };\n }\n case \"send\": {\n // P0 FIX: Per-store email rate limit (100 emails/hour)\n const oneHourAgo = new Date(Date.now() - 3600_000).toISOString();\n const { count: recentSends } = await sb.from(\"email_sends\")\n .select(\"id\", { count: \"exact\", head: true })\n .eq(\"store_id\", sid)\n .gte(\"created_at\", oneHourAgo);\n if ((recentSends || 0) >= 100) {\n return { success: false, error: \"Email rate limit exceeded (100/hour). Try again later.\" };\n }\n\n // Invoke send-email edge function\n const sbUrl = process.env[\"SUPABASE_URL\"]!;\n const sbKey = process.env[\"SUPABASE_SERVICE_ROLE_KEY\"]!;\n try {\n // Resolve URL-based attachments to base64 for Resend API\n let attachments: { filename: string; content: string }[] | undefined;\n const rawAttachments = args.attachments as { url?: string; filename?: string; content?: string }[] | undefined;\n if (rawAttachments && rawAttachments.length > 0) {\n // P0 FIX: Enforce attachment count limit\n if (rawAttachments.length > MAX_ATTACHMENT_COUNT) {\n throw new Error(`Too many attachments: ${rawAttachments.length} (max ${MAX_ATTACHMENT_COUNT})`);\n }\n attachments = [];\n let totalBytes = 0;\n for (const att of rawAttachments) {\n if (att.url) {\n // P0 FIX: Validate URL to prevent SSRF via attachment URLs\n const ssrfErr = await validateUrl(att.url);\n if (ssrfErr) throw new Error(`Attachment URL blocked: ${ssrfErr}`);\n // Fetch the file and convert to base64\n const fileResp = await fetch(att.url);\n if (!fileResp.ok) throw new Error(`Failed to fetch attachment: ${att.url} (${fileResp.status})`);\n const buffer = await fileResp.arrayBuffer();\n // P0 FIX: Enforce 10MB per-attachment size limit\n if (buffer.byteLength > MAX_ATTACHMENT_BYTES) {\n throw new Error(`Attachment too large: ${(buffer.byteLength / 1024 / 1024).toFixed(1)}MB (max 10MB)`);\n }\n // P0 FIX: Enforce 25MB total attachment size limit\n totalBytes += buffer.byteLength;\n if (totalBytes > MAX_TOTAL_ATTACHMENT_BYTES) {\n throw new Error(`Total attachment size exceeds limit: ${(totalBytes / 1024 / 1024).toFixed(1)}MB (max 25MB)`);\n }\n const base64 = Buffer.from(buffer).toString(\"base64\");\n const filename = att.filename || att.url.split(\"/\").pop() || \"attachment\";\n attachments.push({ filename, content: base64 });\n } else if (att.content && att.filename) {\n // Already base64 — decode length to check size\n const contentBytes = Math.ceil((att.content.length * 3) / 4);\n if (contentBytes > MAX_ATTACHMENT_BYTES) {\n throw new Error(`Attachment too large: ${(contentBytes / 1024 / 1024).toFixed(1)}MB (max 10MB)`);\n }\n totalBytes += contentBytes;\n if (totalBytes > MAX_TOTAL_ATTACHMENT_BYTES) {\n throw new Error(`Total attachment size exceeds limit: ${(totalBytes / 1024 / 1024).toFixed(1)}MB (max 25MB)`);\n }\n attachments.push({ filename: att.filename, content: att.content });\n }\n }\n }\n\n // Resolve {{variable}} placeholders in email fields against template_data\n let emailHtml = args.html as string | undefined;\n let emailSubject = args.subject as string | undefined;\n let emailText = args.text as string | undefined;\n if (args.template_data && typeof args.template_data === \"object\") {\n const tplData = args.template_data as Record<string, unknown>;\n if (emailHtml) emailHtml = fillTemplate(emailHtml, tplData);\n if (emailSubject) emailSubject = fillTemplate(emailSubject, tplData);\n if (emailText) emailText = fillTemplate(emailText, tplData);\n }\n\n const payload: Record<string, unknown> = { to: args.to, subject: emailSubject, html: emailHtml, text: emailText, storeId: sid };\n if (attachments && attachments.length > 0) payload.attachments = attachments;\n\n const resp = await fetch(`${sbUrl}/functions/v1/send-email`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", \"Authorization\": `Bearer ${sbKey}` },\n body: JSON.stringify(payload)\n });\n const result = await resp.json();\n return resp.ok ? { success: true, data: result } : { success: false, error: result.error || \"Send failed\" };\n } catch (err) {\n return { success: false, error: `Email send failed: ${err}` };\n }\n }\n case \"send_template\": {\n const sbUrl = process.env[\"SUPABASE_URL\"]!;\n const sbKey = process.env[\"SUPABASE_SERVICE_ROLE_KEY\"]!;\n try {\n const resp = await fetch(`${sbUrl}/functions/v1/send-email`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", \"Authorization\": `Bearer ${sbKey}` },\n body: JSON.stringify({ to: args.to, template: args.template, template_data: args.template_data, storeId: sid })\n });\n const result = await resp.json();\n return resp.ok ? { success: true, data: result } : { success: false, error: result.error || \"Send failed\" };\n } catch (err) {\n return { success: false, error: `Template send failed: ${err}` };\n }\n }\n case \"list\": {\n const { data, error } = await sb.from(\"email_sends\").select(\"*\")\n .eq(\"store_id\", sid).order(\"created_at\", { ascending: false }).limit(args.limit as number || 50);\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n case \"get\": {\n const { data, error } = await sb.from(\"email_sends\")\n .select(\"*\").eq(\"id\", args.email_id as string).eq(\"store_id\", sid).single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n case \"templates\": {\n const { data, error } = await sb.from(\"email_templates\").select(\"*\")\n .eq(\"store_id\", sid).eq(\"is_active\", true).limit(100);\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n case \"inbox_reply\": {\n const sbUrl = process.env[\"SUPABASE_URL\"]!;\n const sbKey = process.env[\"SUPABASE_SERVICE_ROLE_KEY\"]!;\n try {\n const resp = await fetch(`${sbUrl}/functions/v1/send-email`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", \"Authorization\": `Bearer ${sbKey}` },\n body: JSON.stringify({ to: args.to, subject: args.subject, html: args.html, text: args.text, thread_id: args.thread_id, storeId: sid })\n });\n const result = await resp.json();\n return resp.ok ? { success: true, data: result } : { success: false, error: result.error || \"Reply failed\" };\n } catch (err) {\n return { success: false, error: `Reply failed: ${err}` };\n }\n }\n case \"inbox_update\": {\n const updates: Record<string, unknown> = {};\n if (args.status) updates.status = args.status;\n if (args.priority) updates.priority = args.priority;\n if (args.intent) updates.ai_intent = args.intent;\n if (args.ai_summary) updates.ai_summary = args.ai_summary;\n const { data, error } = await sb.from(\"email_threads\")\n .update(updates).eq(\"id\", args.thread_id as string).eq(\"store_id\", sid).select().single();\n return error ? { success: false, error: error.message } : { success: true, data };\n }\n case \"inbox_stats\": {\n const { data, error } = await sb.from(\"email_threads\")\n .select(\"status, mailbox, priority\").eq(\"store_id\", sid).limit(1000);\n if (error) return { success: false, error: error.message };\n const stats = {\n total: data.length,\n by_status: groupBy(data, \"status\"),\n by_mailbox: groupBy(data, \"mailbox\"),\n by_priority: groupBy(data, \"priority\")\n };\n return { success: true, data: stats };\n }\n case \"create_template\": {\n if (!args.name) return { success: false, error: \"name is required\" };\n if (!args.subject) return { success: false, error: \"subject is required\" };\n const slug = (args.slug as string) || (args.name as string).toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\");\n const { data, error } = await sb.from(\"email_templates\").insert({\n store_id: sid,\n name: args.name as string,\n slug,\n subject: args.subject as string,\n category: (args.category as string) || \"general\",\n description: (args.description as string) || null,\n html_content: (args.html_content as string) || null,\n preview_text: (args.preview_text as string) || null,\n text_content: (args.text_content as string) || null,\n is_active: true,\n }).select(\"id, name, slug, subject, category, created_at\").single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n case \"update_template\": {\n if (!args.template_id) return { success: false, error: \"template_id is required\" };\n const updates: Record<string, unknown> = {};\n if (args.name !== undefined) updates.name = args.name;\n if (args.slug !== undefined) updates.slug = args.slug;\n if (args.subject !== undefined) updates.subject = args.subject;\n if (args.category !== undefined) updates.category = args.category;\n if (args.description !== undefined) updates.description = args.description;\n if (args.html_content !== undefined) updates.html_content = args.html_content;\n if (args.preview_text !== undefined) updates.preview_text = args.preview_text;\n if (args.text_content !== undefined) updates.text_content = args.text_content;\n if (Object.keys(updates).length === 0) return { success: false, error: \"No fields to update\" };\n const { data, error } = await sb.from(\"email_templates\")\n .update(updates).eq(\"id\", args.template_id as string).eq(\"store_id\", sid)\n .select(\"id, name, slug, subject, category, updated_at\").single();\n if (error) return { success: false, error: error.message };\n return { success: true, data };\n }\n case \"delete_template\": {\n if (!args.template_id) return { success: false, error: \"template_id is required\" };\n const { data, error } = await sb.from(\"email_templates\")\n .update({ is_active: false }).eq(\"id\", args.template_id as string).eq(\"store_id\", sid)\n .select(\"id, name\").single();\n if (error) return { success: false, error: error.message };\n return { success: true, data: { ...data, deleted: true } };\n }\n default:\n return { success: false, error: `Unknown email action: ${args.action}. Valid: send, send_template, list, get, templates, inbox, inbox_get, inbox_reply, inbox_update, inbox_stats, create_template, update_template, delete_template` };\n }\n}\n\nexport async function handleDocuments(sb: SupabaseClient, args: Record<string, unknown>, storeId?: string) {\n if (!storeId) return { success: false, error: \"store_id required\" };\n const sid = storeId as string;\n const action = args.action as string;\n\n switch (action) {\n case \"create\": {\n const docType = (args.document_type as string) || \"text\";\n const name = args.name as string;\n if (!name) return { success: false, error: \"name is required\" };\n\n const extMap: Record<string, string> = { csv: \"csv\", json: \"json\", text: \"txt\", markdown: \"md\", html: \"html\", pdf: \"pdf\" };\n const mimeMap: Record<string, string> = {\n csv: \"text/csv\", json: \"application/json\", text: \"text/plain\",\n markdown: \"text/markdown\", html: \"text/html\", pdf: \"application/pdf\",\n };\n const ext = extMap[docType] || \"txt\";\n const mime = mimeMap[docType] || \"text/plain\";\n const safeName = name.replace(/[^a-zA-Z0-9_\\-]/g, \"_\");\n const fileName = `${safeName}_${Date.now()}.${ext}`;\n const storagePath = `${sid}/${fileName}`;\n\n let uploadBuffer: Uint8Array;\n\n if (docType === \"pdf\") {\n // PDF generation from HTML content via React-PDF\n const htmlContent = (args.html as string) || (args.content as string);\n if (!htmlContent) return { success: false, error: \"html or content (HTML string) is required for PDF documents\" };\n try {\n const pdfBuffer = await renderHtmlToPdf(htmlContent, {\n format: (args.format as string) || \"A4\",\n landscape: (args.landscape as boolean) || false,\n });\n uploadBuffer = new Uint8Array(pdfBuffer);\n } catch (err) {\n return { success: false, error: `PDF generation failed: ${err instanceof Error ? err.message : String(err)}` };\n }\n } else {\n let content: string;\n if (docType === \"csv\") {\n const headers = args.headers as string[];\n const rows = args.rows as unknown[][];\n if (!headers || !rows) return { success: false, error: \"headers and rows required for CSV\" };\n const lines = [headers.map(escapeCSV).join(\",\")];\n for (const row of rows) {\n if (Array.isArray(row)) {\n lines.push(row.map(escapeCSV).join(\",\"));\n } else {\n lines.push(headers.map(h => escapeCSV((row as Record<string, unknown>)[h])).join(\",\"));\n }\n }\n content = lines.join(\"\\n\");\n } else if (docType === \"json\") {\n const jsonData = args.data || args.content;\n content = typeof jsonData === \"string\" ? jsonData : JSON.stringify(jsonData, null, 2);\n } else {\n content = (args.content as string) || \"\";\n }\n uploadBuffer = new TextEncoder().encode(content);\n }\n\n const { error: uploadErr } = await sb.storage\n .from(\"documents\")\n .upload(storagePath, uploadBuffer, { contentType: mime, upsert: true });\n if (uploadErr) return { success: false, error: `Upload failed: ${uploadErr.message}` };\n\n const { data: urlData } = sb.storage.from(\"documents\").getPublicUrl(storagePath);\n const fileUrl = urlData.publicUrl;\n const sizeBytes = uploadBuffer.length;\n\n const { data: record, error: insertErr } = await sb.from(\"store_documents\").insert({\n store_id: sid,\n document_type: docType,\n file_name: fileName,\n file_url: fileUrl,\n file_size: sizeBytes,\n file_type: mime,\n document_name: name,\n source_name: \"Documents Edge Function\",\n document_date: new Date().toISOString().split(\"T\")[0],\n data: { document_type: docType },\n metadata: { size_bytes: sizeBytes },\n }).select(\"id, document_name, file_url, created_at\").single();\n\n if (insertErr) return { success: false, error: insertErr.message };\n if (fileUrl.endsWith('.pdf')) await generateThumbnail(sb, record.id, fileUrl).catch(() => {});\n return { success: true, data: { id: record.id, name: record.document_name, type: docType, url: record.file_url, file_name: fileName, size: sizeBytes } };\n }\n\n case \"find\": {\n let query = sb.from(\"store_documents\")\n .select(\"id, document_type, document_name, reference_number, file_url, file_type, file_size, created_at, metadata\");\n query = query.eq(\"store_id\", sid);\n if (args.document_type) query = query.eq(\"document_type\", args.document_type as string);\n if (args.name) { const sn = sanitizeFilterValue(args.name as string); query = query.ilike(\"document_name\", `%${sn}%`); }\n query = query.order(\"created_at\", { ascending: false }).limit(args.limit as number || 50);\n\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return {\n success: true,\n data: {\n count: data?.length || 0,\n documents: (data || []).map(d => ({\n id: d.id, type: d.document_type, name: d.document_name,\n reference: d.reference_number, url: d.file_url,\n size: d.file_size, created: d.created_at,\n })),\n },\n };\n }\n\n case \"delete\": {\n if (!args.confirm) return { success: false, error: \"Set confirm: true to delete\" };\n let query = sb.from(\"store_documents\").delete().eq(\"store_id\", sid);\n if (args.document_type) query = query.eq(\"document_type\", args.document_type as string);\n if (args.name) { const sn = sanitizeFilterValue(args.name as string); query = query.ilike(\"document_name\", `%${sn}%`); }\n const { data, error } = await query.select(\"id\");\n if (error) return { success: false, error: error.message };\n return { success: true, data: { deleted: data?.length || 0 } };\n }\n\n case \"create_template\": {\n if (!args.name) return { success: false, error: \"name is required\" };\n if (!args.document_type) return { success: false, error: \"document_type is required\" };\n const { data, error } = await sb.from(\"document_templates\").insert({\n store_id: sid || null,\n name: args.name as string,\n description: (args.description as string) || null,\n document_type: args.document_type as string,\n content: (args.content as string) || null,\n headers: (args.headers as string[]) || null,\n schema: (args.schema as unknown[]) || [],\n metadata: (args.data as Record<string, unknown>) || {},\n }).select(\"id, name, document_type, created_at\").single();\n if (error) return { success: false, error: error.message };\n return { success: true, data: { template_id: data.id, name: data.name, type: data.document_type } };\n }\n\n case \"list_templates\": {\n let query = sb.from(\"document_templates\")\n .select(\"id, name, description, document_type, headers, schema, created_at\")\n .eq(\"is_active\", true);\n if (sid) query = query.or(`store_id.eq.${sid},store_id.is.null`);\n if (args.document_type) query = query.eq(\"document_type\", args.document_type as string);\n if (args.limit) query = query.limit(args.limit as number);\n query = query.order(\"created_at\", { ascending: false });\n\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return {\n success: true,\n data: {\n count: data?.length || 0,\n templates: (data || []).map(t => ({\n id: t.id, name: t.name, description: t.description,\n type: t.document_type, headers: t.headers,\n fields: (t.schema as unknown[])?.length || 0,\n })),\n },\n };\n }\n\n case \"from_template\": {\n const templateId = args.template_id as string;\n if (!templateId) return { success: false, error: \"template_id is required\" };\n\n const { data: template, error: tErr } = await sb.from(\"document_templates\")\n .select(\"*\").eq(\"id\", templateId).or(`store_id.eq.${sid},store_id.is.null`).single();\n if (tErr || !template) return { success: false, error: \"Template not found\" };\n\n const tData = { ...(template.metadata as Record<string, unknown>), ...(args.data as Record<string, unknown> || {}), date: new Date().toISOString().split(\"T\")[0] };\n const docType = template.document_type as string;\n const docName = (args.name as string) || fillTemplate(template.name, tData);\n\n let content: string;\n if (docType === \"csv\") {\n const headers = template.headers as string[] || [];\n const rows = args.rows as unknown[][];\n if (!rows) return { success: false, error: \"rows required for CSV template\" };\n const lines = [headers.map(escapeCSV).join(\",\")];\n for (const row of rows) {\n if (Array.isArray(row)) lines.push(row.map(escapeCSV).join(\",\"));\n else lines.push(headers.map(h => escapeCSV((row as Record<string, unknown>)[h])).join(\",\"));\n }\n content = lines.join(\"\\n\");\n } else if (docType === \"json\") {\n content = template.content ? fillTemplate(template.content as string, tData) : JSON.stringify(tData, null, 2);\n } else {\n content = template.content ? fillTemplate(template.content as string, tData) : \"\";\n }\n\n const extMap: Record<string, string> = { csv: \"csv\", json: \"json\", text: \"txt\", markdown: \"md\", html: \"html\" };\n const mimeMap: Record<string, string> = {\n csv: \"text/csv\", json: \"application/json\", text: \"text/plain\",\n markdown: \"text/markdown\", html: \"text/html\",\n };\n const ext = extMap[docType] || \"txt\";\n const mime = mimeMap[docType] || \"text/plain\";\n const safeName = docName.replace(/[^a-zA-Z0-9_\\-]/g, \"_\");\n const fileName = `${safeName}_${Date.now()}.${ext}`;\n const storagePath = `${sid}/${fileName}`;\n\n const { error: uploadErr } = await sb.storage\n .from(\"documents\")\n .upload(storagePath, new TextEncoder().encode(content), { contentType: mime, upsert: true });\n if (uploadErr) return { success: false, error: `Upload failed: ${uploadErr.message}` };\n\n const { data: urlData } = sb.storage.from(\"documents\").getPublicUrl(storagePath);\n const sizeBytes = new TextEncoder().encode(content).length;\n\n const { data: record, error: insertErr } = await sb.from(\"store_documents\").insert({\n store_id: sid,\n document_type: docType,\n file_name: fileName,\n file_url: urlData.publicUrl,\n file_size: sizeBytes,\n file_type: mime,\n document_name: docName,\n source_name: \"Documents Edge Function\",\n document_date: new Date().toISOString().split(\"T\")[0],\n data: { template_id: template.id, template_name: template.name },\n metadata: { size_bytes: sizeBytes, from_template: true },\n }).select(\"id, document_name, file_url, created_at\").single();\n\n if (insertErr) return { success: false, error: insertErr.message };\n if (urlData.publicUrl.endsWith('.pdf')) await generateThumbnail(sb, record.id, urlData.publicUrl).catch(() => {});\n return { success: true, data: { id: record.id, name: record.document_name, type: docType, template: template.name, url: record.file_url, size: sizeBytes } };\n }\n\n case \"list_stores\": {\n const { data, error } = await sb.from(\"stores\")\n .select(\"id, store_name, slug, status, created_at\")\n .eq(\"id\", sid)\n .order(\"store_name\");\n if (error) return { success: false, error: error.message };\n return { success: true, data: { count: data?.length || 0, stores: data } };\n }\n\n case \"list_profiles\": {\n const { data, error } = await sb.from(\"document_profiles\")\n .select(\"id, name, category, sample_type, config, template_id, is_active, created_at\")\n .eq(\"is_active\", true)\n .eq(\"owner_store_id\", sid)\n .order(\"name\");\n if (error) return { success: false, error: error.message };\n return {\n success: true,\n data: {\n count: data?.length || 0,\n profiles: (data || []).map(p => ({\n id: p.id, name: p.name, category: p.category,\n sample_type: p.sample_type, template_id: p.template_id,\n has_config: Object.keys((p.config as object) || {}).length > 0,\n })),\n },\n };\n }\n\n case \"generate\": {\n // Generate a document from a template profile with store data\n const templateId = args.template_id as string;\n if (!templateId) return { success: false, error: \"template_id is required. Use list_profiles to find available templates.\" };\n // Route to from_template with the same args\n return handleDocuments(sb, { ...args, action: \"from_template\" }, storeId);\n }\n\n case \"bulk_generate\": {\n const templateId = args.template_id as string;\n if (!templateId) return { success: false, error: \"template_id required\" };\n const items = args.items as Record<string, unknown>[];\n if (!items || !Array.isArray(items) || items.length === 0) {\n return { success: false, error: \"items required: array of variable sets for each document\" };\n }\n if (items.length > 50) {\n return { success: false, error: \"Maximum 50 documents per bulk_generate call\" };\n }\n\n const results: { name: string; url: string; error?: string }[] = [];\n for (const item of items) {\n const itemArgs = { ...args, action: \"from_template\", data: item, name: item.name || undefined };\n const result = await handleDocuments(sb, itemArgs as any, storeId);\n if (result.success && result.data) {\n results.push({ name: (result.data as any).name || \"\", url: (result.data as any).url || \"\" });\n } else {\n results.push({ name: String(item.name || \"\"), url: \"\", error: result.error || \"Generation failed\" });\n }\n }\n\n const succeeded = results.filter(r => !r.error).length;\n return { success: true, data: { total: items.length, succeeded, failed: items.length - succeeded, results } };\n }\n\n // ================================================================\n // PDF TEMPLATE SYSTEM — full layout rendering, calculations, profiles\n // ================================================================\n\n case \"generate_pdf\": {\n const templateId = args.template_id as string | undefined;\n const templateSlug = args.template_slug as string | undefined;\n if (!templateId && !templateSlug) return { success: false, error: \"template_id or template_slug required\" };\n\n // 1. Load pdf_template\n let tplQuery = sb.from(\"pdf_templates\").select(\"*\").eq(\"is_active\", true);\n if (templateId) tplQuery = tplQuery.eq(\"id\", templateId);\n else tplQuery = tplQuery.eq(\"slug\", templateSlug as string);\n tplQuery = tplQuery.or(`store_id.eq.${sid},store_id.is.null`);\n const { data: tpl, error: tplErr } = await tplQuery.limit(1).single();\n if (tplErr || !tpl) return { success: false, error: `Template not found: ${templateId || templateSlug}` };\n\n // 2. Optionally load document_profile + its client store\n let profileConfig: Record<string, unknown> = {};\n let profileConstants: Record<string, unknown> = {};\n let profileClientData: Record<string, unknown> = {};\n let resolvedClientStoreId: string | null = null;\n if (args.profile_id) {\n const { data: profile } = await sb.from(\"document_profiles\")\n .select(\"*\").eq(\"id\", args.profile_id as string).eq(\"is_active\", true).single();\n if (profile) {\n const cfg = (profile.config || {}) as Record<string, unknown>;\n profileConfig = cfg;\n profileConstants = (cfg.constants || {}) as Record<string, unknown>;\n resolvedClientStoreId = profile.client_store_id || null;\n // Load client info from the profile's linked store\n if (profile.client_store_id) {\n const { data: clientStore } = await sb.from(\"stores\")\n .select(\"store_name, legal_name, address, city, state, zip, distributor_license_number, phone, email\")\n .eq(\"id\", profile.client_store_id).single();\n if (clientStore) {\n profileClientData = {\n clientName: clientStore.legal_name || clientStore.store_name,\n clientAddress: [clientStore.address, clientStore.city, clientStore.state, clientStore.zip].filter(Boolean).join(\", \") || null,\n licenseNumber: clientStore.distributor_license_number || null,\n clientPhone: clientStore.phone || null,\n clientEmail: clientStore.email || null,\n };\n }\n }\n // Profile name is a category (e.g. \"THCA Flower\"), not a sample name.\n // sampleName must come from user data (productName or sampleName override).\n if (profile.sample_type) {\n profileClientData.sampleType = profile.sample_type;\n } else if (profile.name) {\n profileClientData.sampleType = profile.name;\n }\n if (profile.default_size) {\n profileClientData.sampleSize = profile.default_size;\n }\n }\n }\n\n // 3. Optionally load customer (via store_customer_profiles + platform_users) — overrides profile client\n let clientData: Record<string, unknown> = {};\n if (args.customer_id) {\n const { data: rel } = await sb.from(\"user_creation_relationships\")\n .select(\"id, store_id, platform_users!inner(first_name, last_name, email, phone)\")\n .eq(\"id\", args.customer_id as string).single();\n if (rel) {\n const pu = (rel as any).platform_users;\n const { data: prof } = await sb.from(\"store_customer_profiles\")\n .select(\"street_address, city, state, postal_code, drivers_license_number, medical_card_number\")\n .eq(\"relationship_id\", rel.id).maybeSingle();\n clientData = {\n clientName: [pu.first_name, pu.last_name].filter(Boolean).join(\" \"),\n clientEmail: pu.email,\n clientPhone: pu.phone,\n clientAddress: prof ? [prof.street_address, prof.city, prof.state, prof.postal_code].filter(Boolean).join(\", \") : null,\n clientLicense: prof?.drivers_license_number || null,\n clientMedicalCard: prof?.medical_card_number || null,\n };\n }\n }\n\n // 4. Merge data: constants ← profile config ← profile client ← explicit client ← user data\n const tplConstants = (tpl.constants || {}) as Record<string, unknown>;\n const mergedConstants = { ...tplConstants, ...profileConstants };\n const cannabinoidCfg = (profileConfig.cannabinoids ?? undefined) as Record<string, unknown> | undefined;\n const { cannabinoids: _cfgRanges, ...profileDataOnly } = profileConfig;\n // Normalize common field name aliases to what the COA renderer expects\n const rawOverrides = (args.data as Record<string, unknown>) || {};\n const userOverrides = { ...rawOverrides };\n if (userOverrides.productName && !userOverrides.sampleName) {\n userOverrides.sampleName = userOverrides.productName as string;\n }\n if (userOverrides.dateCompleted && !userOverrides.dateTested) {\n userOverrides.dateTested = userOverrides.dateCompleted;\n delete userOverrides.dateCompleted;\n }\n if (userOverrides.clientLicense && !userOverrides.licenseNumber) {\n userOverrides.licenseNumber = userOverrides.clientLicense;\n delete userOverrides.clientLicense;\n }\n let mergedData: Record<string, unknown> = {\n ...mergedConstants,\n ...profileDataOnly,\n ...profileClientData,\n ...clientData,\n ...userOverrides,\n date: new Date().toISOString().slice(0, 10),\n };\n // Track if user explicitly set sampleName (so productName doesn't clobber it)\n const _sampleNameExplicit = !!userOverrides.sampleName;\n\n // 5. Apply generation rules — auto-fill sampleId, dates, etc.\n mergedData = applyGenerationRules(\n tpl.generation_rules as any,\n mergedData,\n );\n\n // 6. Generate cannabinoid data if profile has cannabinoid config\n if (cannabinoidCfg && !mergedData.cannabinoids) {\n mergedData.cannabinoids = generateCannabinoidData(\n cannabinoidCfg as any,\n mergedConstants,\n );\n }\n\n // 6b. Flatten cannabinoid rows into top-level keys for calculation formulas\n // e.g. { name: \"D9-THC\", percentWeight: 0.22 } → D9_THC: 0.22\n if (Array.isArray(mergedData.cannabinoids)) {\n for (const row of mergedData.cannabinoids as { name: string; percentWeight: number }[]) {\n const key = row.name.replace(/-/g, \"_\").replace(/[^a-zA-Z0-9_]/g, \"\");\n if (key && row.percentWeight !== undefined) {\n mergedData[key] = row.percentWeight;\n }\n }\n }\n\n // 7. Apply calculations\n mergedData = applyCalculations(\n tpl.calculations as any,\n mergedConstants,\n mergedData,\n );\n\n // Also run per-row calculations if cannabinoids exist\n if (Array.isArray(mergedData.cannabinoids)) {\n const rows = mergedData.cannabinoids as Record<string, unknown>[];\n for (const row of rows) {\n const rowCtx = { ...mergedConstants, ...row };\n const rowCalcs = (tpl.row_calculations || tpl.calculations) as any;\n if (rowCalcs) {\n const computed = applyCalculations(rowCalcs, mergedConstants, rowCtx);\n Object.assign(row, computed);\n }\n }\n }\n\n // 7b. Generate full panel data if requested (safety tests, pesticides, solvents)\n if (mergedData.fullPanel && !mergedData.microbialResults) {\n const tplConstants = (tpl.constants || {}) as Record<string, unknown>;\n const fullPanel = generateFullPanelData(tplConstants);\n mergedData.microbialResults = fullPanel.microbialResults;\n mergedData.heavyMetalsResults = fullPanel.heavyMetalsResults;\n mergedData.mycotoxinResults = fullPanel.mycotoxinResults;\n mergedData.pesticidesCat1 = fullPanel.pesticidesCat1;\n mergedData.pesticidesCat2 = fullPanel.pesticidesCat2;\n mergedData.testsResidualSolvents = fullPanel.residualSolventsResults;\n mergedData.totalPages = 5;\n mergedData.complianceResults = mergedData.complianceResults || {\n heavyMetals: { status: \"PASS\" }, microbial: { status: \"PASS\" },\n pesticides: { status: \"PASS\" }, mycotoxins: { status: \"PASS\" },\n residualSolvents: { status: \"PASS\" },\n };\n }\n\n // 7b2. Auto-set test status flags for summary section\n if (mergedData.cannabinoids && (mergedData.cannabinoids as unknown[]).length > 0) {\n mergedData.testsCannabinoids = true;\n }\n if (mergedData.moisture !== undefined && mergedData.moisture !== null) {\n mergedData.testsMoisture = true;\n }\n if (mergedData.dateTested) {\n mergedData.testsBatch = true;\n }\n\n // 7b3. Resolve product name: productName override → sampleName from profile\n if (mergedData.productName && !_sampleNameExplicit) {\n mergedData.sampleName = mergedData.productName as string;\n }\n\n // 7c. Generate QR code for COA templates — uses universal resolver URL\n if ((tpl.slug as string)?.startsWith(\"cannabis-coa\") && !mergedData.qrCodeDataUrl) {\n const productSlug = ((mergedData.sampleName as string) || \"certificate\")\n .toLowerCase().replace(/[^a-z0-9]+/g, \"_\").replace(/^_|_$/g, \"\");\n const coaUrl = `https://www.quantixanalytics.com/coa/${sid}/${productSlug}`;\n mergedData._coaVerificationUrl = coaUrl;\n // Generate a predictable QR code — will be registered in qr_codes table after document insert\n const _qrCodePrefix = `DOC-${Date.now().toString(36)}`;\n mergedData._qrCodePrefix = _qrCodePrefix;\n const resolverUrl = `https://whale-gateway.fly.dev/q/${_qrCodePrefix}`;\n mergedData._resolverUrl = resolverUrl;\n try {\n mergedData.qrCodeDataUrl = await QRCode.toDataURL(resolverUrl, { width: 120, margin: 1 });\n } catch { /* skip QR if generation fails */ }\n }\n\n // 8. Validate\n const validationResults = runValidation(tpl.validation_rules as any, mergedData);\n const errors = validationResults.filter(v => v.severity === \"error\" && !v.passed);\n const warnings = validationResults.filter(v => v.severity === \"warning\" && !v.passed);\n\n if (errors.length > 0 && !args.force) {\n return {\n success: false,\n error: `Validation failed: ${errors.map(e => e.message).join(\"; \")}`,\n data: { errors, warnings },\n };\n }\n\n // 8b. Pre-fetch image URLs as base64 data URLs — React-PDF in Node can't fetch external URLs\n for (const key of [\"logoUrl\", \"signatureUrl\"] as const) {\n const url = mergedData[key];\n if (typeof url === \"string\" && url.startsWith(\"http\")) {\n try {\n const res = await fetch(url);\n if (res.ok) {\n const buf = Buffer.from(await res.arrayBuffer());\n const mime = res.headers.get(\"content-type\") || \"image/png\";\n mergedData[key] = `data:${mime};base64,${buf.toString(\"base64\")}`;\n }\n } catch { /* leave as URL if fetch fails */ }\n }\n }\n\n // 9-10. Render PDF — all templates use React-PDF\n let pdfBuffer: Buffer;\n try {\n if ((tpl.slug as string)?.startsWith(\"cannabis-coa\")) {\n // COA templates use dedicated renderer\n pdfBuffer = await renderCOAToPdf(mergedData as unknown as COAData);\n } else {\n // Detect label layout vs generic layout\n const layout = tpl.layout as any;\n const isLabel = layout?.version === 1 && Array.isArray(layout?.elements) && layout.elements[0]?.field;\n\n if (isLabel) {\n const items = Array.isArray(mergedData.items)\n ? mergedData.items as Record<string, unknown>[]\n : [mergedData];\n pdfBuffer = await renderLabelToPdf(layout, tpl.page_config as any, items);\n } else {\n pdfBuffer = await renderLayoutToPdf(\n tpl.layout as any, tpl.page_config as any, tpl.styles as any, mergedData,\n );\n }\n }\n } catch (err) {\n return { success: false, error: `PDF generation failed: ${err instanceof Error ? err.message : String(err)}` };\n }\n\n // 11. Upload to Supabase storage\n const sampleName = (mergedData.sampleName as string) || (mergedData.productName as string) || \"\";\n const batchId = mergedData.batchId as string | undefined;\n const defaultName = sampleName\n ? (batchId ? `COA - ${sampleName} - ${batchId}` : `${sampleName} COA`)\n : fillTemplate(tpl.name || \"Document\", mergedData);\n const docName = (args.name as string) || defaultName;\n const safeName = docName.replace(/[^a-zA-Z0-9_\\-]/g, \"_\");\n const fileName = `${safeName}_${Date.now()}.pdf`;\n const storagePath = `${sid}/${fileName}`;\n const bucketName = \"store-documents\";\n\n const { error: uploadErr } = await sb.storage\n .from(bucketName)\n .upload(storagePath, new Uint8Array(pdfBuffer), { contentType: \"application/pdf\", upsert: true });\n if (uploadErr) return { success: false, error: `Upload failed: ${uploadErr.message}` };\n\n const { data: urlData } = sb.storage.from(bucketName).getPublicUrl(storagePath);\n\n // 12. Build COA metadata for the Quantix landing page\n const coaMetadata: Record<string, unknown> = {\n size_bytes: pdfBuffer.length,\n from_pdf_template: true,\n template_version: tpl.version,\n };\n if ((tpl.slug as string)?.startsWith(\"cannabis-coa\")) {\n coaMetadata.sample_name = sampleName;\n coaMetadata.product_name = (mergedData.productName as string) || sampleName;\n coaMetadata.sample_id = mergedData.sampleId || null;\n coaMetadata.sample_type = mergedData.sampleType || mergedData.strain || null;\n coaMetadata.sample_size = mergedData.sampleSize || null;\n coaMetadata.batch_number = mergedData.batchId || null;\n coaMetadata.lab_name = mergedData.labName || null;\n coaMetadata.lab_contact = mergedData.labContact || null;\n coaMetadata.lab_website = mergedData.labWebsite || null;\n coaMetadata.lab_director = mergedData.labDirector || null;\n coaMetadata.director_title = mergedData.directorTitle || null;\n coaMetadata.logo_url = mergedData.logoUrl || null;\n coaMetadata.signature_url = mergedData.signatureUrl || null;\n coaMetadata.client_name = mergedData.clientName || null;\n coaMetadata.client_address = mergedData.clientAddress || null;\n coaMetadata.date_collected = mergedData.dateCollected || null;\n coaMetadata.date_received = mergedData.dateReceived || null;\n coaMetadata.date_tested = mergedData.dateTested || null;\n coaMetadata.date_reported = mergedData.dateReported || null;\n coaMetadata.status = \"Pass\";\n coaMetadata.thc_total = mergedData.totalTHC || null;\n coaMetadata.cbd_total = mergedData.totalCBD || null;\n coaMetadata.cannabinoids_total = mergedData.totalCannabinoids || null;\n coaMetadata.moisture = mergedData.moisture || null;\n // Detailed cannabinoid data for the interactive landing page\n const cannabinoids = mergedData.cannabinoids as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(cannabinoids)) {\n coaMetadata.cannabinoids = Object.fromEntries(\n cannabinoids.filter((c) => typeof c.percentWeight === \"number\" && c.percentWeight > 0)\n .map((c) => [c.name as string, c.percentWeight as number]),\n );\n coaMetadata.cannabinoids_detailed = cannabinoids.map((c) => ({\n name: c.name, percent: c.percentWeight, mg_per_g: c.mgPerG, lod: c.lod, loq: c.loq, result: String(c.result ?? c.percentWeight),\n }));\n }\n // Safety test panels\n if (mergedData.fullPanel) {\n coaMetadata.test_panels = {\n cannabinoids: true, microbial: true, heavy_metals: true,\n mycotoxins: true, pesticides: true, residual_solvents: true,\n };\n coaMetadata.safety_tests = {\n microbial: \"Pass\", heavy_metals: \"Pass\", mycotoxins: \"Pass\",\n pesticides: \"Pass\", residual_solvents: \"Pass\",\n };\n }\n }\n\n // 13. Insert store_documents record\n const { data: record, error: insertErr } = await sb.from(\"store_documents\").insert({\n store_id: sid,\n document_type: tpl.document_type || \"pdf\",\n file_name: fileName,\n file_url: urlData.publicUrl,\n file_size: pdfBuffer.length,\n file_type: \"application/pdf\",\n document_name: docName,\n source_name: \"PDF Template Engine\",\n document_date: new Date().toISOString().split(\"T\")[0],\n customer_id: (args.customer_id as string) || null,\n client_store_id: resolvedClientStoreId,\n qr_code_url: (mergedData._coaVerificationUrl as string) || null,\n data: { template_id: tpl.id, template_slug: tpl.slug, profile_id: args.profile_id || null },\n metadata: coaMetadata,\n }).select(\"id, document_name, file_url, created_at\").single();\n\n if (insertErr) return { success: false, error: insertErr.message };\n await generateThumbnail(sb, record.id, urlData.publicUrl).catch(() => {});\n\n // 14. Create unified qr_codes record for scan tracking\n if (mergedData._coaVerificationUrl && mergedData._qrCodePrefix) {\n const qrCode = mergedData._qrCodePrefix as string;\n const resolverUrl = `https://whale-gateway.fly.dev/q/${qrCode}`;\n sb.from(\"qr_codes\").insert({\n store_id: sid,\n code: qrCode,\n name: docName,\n type: \"document\",\n destination_url: mergedData._coaVerificationUrl as string,\n product_id: (args.product_id as string) || null,\n batch_id: (args.batch_id as string) || null,\n is_active: true,\n }).select(\"id\").single().then(({ data: qrRecord, error: qrErr }) => {\n if (qrErr) {\n console.error(\"[comms] qr_codes insert error:\", qrErr.message);\n return;\n }\n // Link qr_code to the document via qr_code_references\n if (qrRecord) {\n sb.from(\"qr_code_references\").insert({\n store_id: sid,\n qr_code_id: qrRecord.id,\n entity_type: \"store_document\",\n entity_id: record.id,\n entity_name: docName,\n field_name: \"coa_verification_qr\",\n }).then(({ error: refErr }) => {\n if (refErr) console.error(\"[comms] qr_code_references insert error:\", refErr.message);\n });\n }\n // Update document with resolver URL\n sb.from(\"store_documents\").update({ qr_code_url: resolverUrl }).eq(\"id\", record.id)\n .then(({ error: updErr }) => {\n if (updErr) console.error(\"[comms] store_documents qr_code_url update error:\", updErr.message);\n });\n });\n }\n\n return {\n success: true,\n data: {\n id: record.id,\n name: record.document_name,\n url: record.file_url,\n template: tpl.name,\n size: pdfBuffer.length,\n warnings: warnings.map(w => w.message),\n },\n };\n }\n\n case \"list_pdf_templates\": {\n let query = sb.from(\"pdf_templates\")\n .select(\"id, slug, name, description, document_type, version, created_at\")\n .eq(\"is_active\", true)\n .or(`store_id.eq.${sid},store_id.is.null`)\n .order(\"name\");\n if (args.document_type) query = query.eq(\"document_type\", args.document_type as string);\n if (args.limit) query = query.limit(args.limit as number);\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return {\n success: true,\n data: {\n count: data?.length || 0,\n templates: (data || []).map(t => ({\n id: t.id, slug: t.slug, name: t.name,\n description: t.description, type: t.document_type, version: t.version,\n })),\n },\n };\n }\n\n case \"list_document_profiles\": {\n let query = sb.from(\"document_profiles\")\n .select(\"id, name, category, sample_type, default_size, client_store_id, template_id, created_at\")\n .eq(\"is_active\", true)\n .eq(\"owner_store_id\", sid)\n .order(\"name\");\n if (args.template_id) query = query.eq(\"template_id\", args.template_id as string);\n if (args.category) query = query.eq(\"category\", args.category as string);\n if (args.limit) query = query.limit(args.limit as number);\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return {\n success: true,\n data: {\n count: data?.length || 0,\n profiles: (data || []).map(p => ({\n id: p.id, name: p.name, category: p.category,\n sample_type: p.sample_type, default_size: p.default_size,\n client_store_id: p.client_store_id,\n })),\n },\n };\n }\n\n case \"list_clients\": {\n // List B2B client stores linked via document_profiles.client_store_id\n const { data: profiles } = await sb.from(\"document_profiles\")\n .select(\"client_store_id\")\n .eq(\"owner_store_id\", sid)\n .eq(\"is_active\", true)\n .not(\"client_store_id\", \"is\", null);\n const clientIds = [...new Set((profiles || []).map(p => p.client_store_id).filter(Boolean))];\n if (!clientIds.length) {\n return { success: true, data: { count: 0, clients: [], hint: \"No client stores linked to document profiles. Use list_customers for retail customers.\" } };\n }\n const { data: stores, error: storesErr } = await sb.from(\"stores\")\n .select(\"id, store_name, legal_name, address, city, state, zip, distributor_license_number, phone, email\")\n .in(\"id\", clientIds);\n if (storesErr) return { success: false, error: storesErr.message };\n return {\n success: true,\n data: {\n count: stores?.length || 0,\n clients: (stores || []).map(s => ({\n id: s.id,\n name: s.legal_name || s.store_name,\n store_name: s.store_name,\n address: [s.address, s.city, s.state, s.zip].filter(Boolean).join(\", \"),\n license: s.distributor_license_number || null,\n phone: s.phone || null,\n email: s.email || null,\n })),\n },\n };\n }\n\n case \"list_customers\":\n return { success: false, error: \"Use the 'customers' tool for retail customers. Use list_clients for B2B client stores.\" };\n\n case \"deliver_documents\": {\n // Batch-assign documents to a customer and optionally send notification email\n const docIds = (args.document_ids as string[]) || (args.document_id ? [args.document_id as string] : []);\n const customerId = args.customer_id as string;\n if (!docIds.length) return { success: false, error: \"document_ids (array) or document_id (string) is required\" };\n if (!customerId) return { success: false, error: \"customer_id is required\" };\n\n // Verify customer belongs to this store\n const { data: rel, error: relErr } = await sb.from(\"user_creation_relationships\")\n .select(\"id, store_id, platform_users!inner(first_name, last_name, email)\")\n .eq(\"id\", customerId).eq(\"store_id\", sid).single();\n if (relErr || !rel) return { success: false, error: \"Customer not found for this store\" };\n\n const pu = (rel as any).platform_users;\n const customerEmail = pu.email as string;\n const customerName = [pu.first_name, pu.last_name].filter(Boolean).join(\" \");\n\n // Assign all documents to the customer\n const { error: updateErr } = await sb.from(\"store_documents\")\n .update({ customer_id: customerId })\n .in(\"id\", docIds)\n .eq(\"store_id\", sid);\n if (updateErr) return { success: false, error: `Failed to assign documents: ${updateErr.message}` };\n\n // Get document names for the email\n const { data: docs } = await sb.from(\"store_documents\")\n .select(\"id, document_name, file_url\")\n .in(\"id\", docIds);\n\n let emailSent = false;\n if (!args.skip_email && customerEmail) {\n const portalUrl = (args.portal_url as string) || null;\n const docList = (docs || []).map(d => `<li><a href=\"${d.file_url}\">${d.document_name || \"Document\"}</a></li>`).join(\"\");\n\n // Get store name for template\n const { data: store } = await sb.from(\"stores\").select(\"store_name\").eq(\"id\", sid).single();\n\n const emailResult = await handleEmail(sb, {\n action: \"send_template\",\n to: customerEmail,\n template: \"documents-delivered\",\n template_data: {\n customer_name: customerName || \"there\",\n store_name: store?.store_name || \"\",\n document_count: String(docIds.length),\n document_list: docList,\n portal_url: portalUrl || \"\",\n },\n }, storeId);\n emailSent = emailResult.success;\n }\n\n return {\n success: true,\n data: {\n document_ids: docIds,\n customer_id: customerId,\n customer_email: customerEmail,\n email_sent: emailSent,\n count: docIds.length,\n },\n };\n }\n\n case \"list_customer_documents\": {\n const customerId = args.customer_id as string;\n if (!customerId) return { success: false, error: \"customer_id is required\" };\n\n let query = sb.from(\"store_documents\")\n .select(\"id, document_name, file_url, file_type, created_at, thumbnail_url, metadata, document_type\")\n .eq(\"store_id\", sid)\n .eq(\"customer_id\", customerId)\n .eq(\"is_active\", true)\n .order(\"created_at\", { ascending: false });\n if (args.limit) query = query.limit(args.limit as number);\n\n const { data, error } = await query;\n if (error) return { success: false, error: error.message };\n return {\n success: true,\n data: {\n count: data?.length || 0,\n documents: data || [],\n },\n };\n }\n\n default:\n return { success: false, error: `Unknown documents action: ${action}. Valid: create, find, delete, create_template, list_templates, from_template, list_stores, list_profiles, generate, bulk_generate, generate_pdf, list_pdf_templates, list_document_profiles, deliver_documents, list_customer_documents` };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
2
|
+
type Result = {
|
|
3
|
+
success: boolean;
|
|
4
|
+
data?: unknown;
|
|
5
|
+
error?: string;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
};
|
|
8
|
+
export declare function handleCoupons(sb: SupabaseClient, args: Record<string, unknown>, storeId?: string): Promise<Result>;
|
|
9
|
+
export {};
|