{
  "version": 3,
  "sources": ["/cdn/shop/t/4/assets/ims-backup.js?bust=20260629"],
  "sourcesContent": ["/* StockMaestro: Backup\r\n * Download data backup: a complete copy of the company's data, made on the\r\n * server in one consistent snapshot (database function company_export):\r\n * every table, found automatically, child tables included through their\r\n * parents, no row limit. A summary shows what is in it, and anything that\r\n * could not be included is named, never left out silently.\r\n * Download files: a zip of the company's stored files (invoice PDFs, import\r\n * documents, logo, and optionally proof-of-delivery photos), which are not\r\n * part of Supabase's database backups.\r\n * Restore, archive and the data resets were removed: they could damage\r\n * data. To recover from a serious problem, use Supabase's daily backups.\r\n */\r\n(function(){\r\n  'use strict';\r\n  const db=()=>window.SM.DB, ui=()=>window.SM.UI, util=()=>window.SM.UTIL;\r\n  const client=()=>window.supabase.createClient(window.IMS_SUPABASE_URL,window.IMS_SUPABASE_ANON_KEY);\r\n  const BUCKETS=[\r\n    {id:'courier-invoices',label:'Courier invoice PDFs',on:true},\r\n    {id:'import-documents',label:'Import documents',on:true},\r\n    {id:'company-assets',label:'Company logo',on:true},\r\n    {id:'pod',label:'Proof of delivery photos and signatures',on:false}\r\n  ];\r\n  const fmtSize=n=>{ n=Number(n)||0; return n>=1048576?`${(n/1048576).toFixed(1)} MB`:n>=1024?`${Math.round(n/1024)} KB`:`${n} bytes`; };\r\n  const slug=s=>String(s||'company').toLowerCase().replace(/[^a-z0-9]+/g,'-').replace(/^-|-$/g,'')||'company';\r\n  const today=()=>new Date().toISOString().split('T')[0];\r\n  function saveBlob(blob,name){\r\n    const a=document.createElement('a'); a.href=URL.createObjectURL(blob); a.download=name;\r\n    document.body.appendChild(a); a.click(); a.remove(); setTimeout(()=>URL.revokeObjectURL(a.href),4000);\r\n  }\r\n\r\n  async function load(){\r\n    const content=document.getElementById('ims-backup-content');\r\n    if(!content)return;\r\n    content.innerHTML=`<div class=\"ims__loading\"><i class=\"ti ti-loader-2 ims__spin\"></i></div>`;\r\n    const isSuperAdmin=window.SM.AUTH.hasRole('super_admin');\r\n    const isAdmin=window.SM.AUTH.hasRole('admin');\r\n    if(!isSuperAdmin&&!isAdmin){\r\n      content.innerHTML=`<div class=\"ims__coming-soon\"><i class=\"ti ti-lock\"></i><h3>Access denied</h3><p>Backup is available to Admin and Super Admin only.</p></div>`;\r\n      return;\r\n    }\r\n    content.innerHTML=`\r\n      <div style=\"display:grid;grid-template-columns:1fr 1fr;gap:16px\">\r\n        <div class=\"ims__card\" style=\"grid-column:1/-1\">\r\n          <div class=\"ims__card-header\"><div class=\"ims__card-title\"><i class=\"ti ti-download\"></i>Backup</div></div>\r\n          <div class=\"ims__alert ims__alert--info\" style=\"margin-bottom:14px\"><i class=\"ti ti-shield-check\"></i>\r\n            <span>Your database is backed up automatically every night by Supabase (Supabase, Database, Backups). That is how to recover from a serious problem.\r\n            Use the downloads below for your own long-term copies: we suggest once a month, kept outside StockMaestro (for example, in Google Drive).</span></div>\r\n          <div class=\"ims__btn-group\" style=\"flex-wrap:wrap\">\r\n            <button class=\"ims__btn ims__btn--primary\" id=\"ims-backup-data-btn\" onclick=\"window.IMS_BACKUP.downloadBackup()\"><i class=\"ti ti-database-export\"></i> Download data backup</button>\r\n            <button class=\"ims__btn ims__btn--secondary\" id=\"ims-backup-files-btn\" onclick=\"window.IMS_BACKUP.downloadFiles()\"><i class=\"ti ti-file-zip\"></i> Download files</button>\r\n          </div>\r\n          <p style=\"font-size:12px;color:var(--ims-text-muted);margin:10px 0 0\">Data backup: every record of your company in one file. Files: your invoice PDFs, import documents and logo (and, if you choose, proof of delivery photos), which Supabase&rsquo;s nightly backups do not include.</p>\r\n          <div id=\"ims-backup-result\" style=\"margin-top:12px\"></div>\r\n        </div>\r\n        <div class=\"ims__card\">\r\n          <div class=\"ims__card-header\"><div class=\"ims__card-title\"><i class=\"ti ti-file-download\"></i>Import templates</div></div>\r\n          <p style=\"font-size:13px;color:var(--ims-text-sec);margin-bottom:14px\">Download blank CSV templates for bulk data import.</p>\r\n          <div class=\"ims__btn-group\" style=\"flex-wrap:wrap\">\r\n            <button class=\"ims__btn ims__btn--secondary ims__btn--sm\" onclick=\"window.IMS_BACKUP.downloadTemplate('products')\"><i class=\"ti ti-box\"></i> Products</button>\r\n            <button class=\"ims__btn ims__btn--secondary ims__btn--sm\" onclick=\"window.IMS_BACKUP.downloadTemplate('customers')\"><i class=\"ti ti-users\"></i> Customers</button>\r\n            <button class=\"ims__btn ims__btn--secondary ims__btn--sm\" onclick=\"window.IMS_BACKUP.downloadTemplate('suppliers')\"><i class=\"ti ti-building-store\"></i> Suppliers</button>\r\n            <button class=\"ims__btn ims__btn--secondary ims__btn--sm\" onclick=\"window.IMS_BACKUP.downloadTemplate('orders')\"><i class=\"ti ti-shopping-cart\"></i> Orders</button>\r\n          </div>\r\n        </div>\r\n        <div class=\"ims__card\">\r\n          <div class=\"ims__card-header\"><div class=\"ims__card-title\"><i class=\"ti ti-info-circle\"></i>System info</div></div>\r\n          <table class=\"ims__table\">\r\n            <tbody>\r\n              <tr><td>StockMaestro version</td><td style=\"font-weight:600\">v2.1.0</td></tr>\r\n              <tr><td>Developed by</td><td>ABSA Digital</td></tr>\r\n              <tr><td>Company</td><td>${util().sanitize(window.SM.AUTH.company?.name||'\u2014')}</td></tr>\r\n              <tr><td>Database</td><td>Supabase (PostgreSQL)</td></tr>\r\n              <tr><td>Your role</td><td>${util().formatRole(window.SM.AUTH.user?.role)}</td></tr>\r\n              <tr><td>Last login</td><td>${util().formatDateTime(window.SM.AUTH.user?.last_login)}</td></tr>\r\n            </tbody>\r\n          </table>\r\n        </div>\r\n      </div>`;\r\n  }\r\n\r\n  // \u2500\u2500\u2500 DATA BACKUP \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  async function downloadBackup(){\r\n    const btn=document.getElementById('ims-backup-data-btn'), out=document.getElementById('ims-backup-result');\r\n    if(btn){ btn.disabled=true; btn.innerHTML='<i class=\"ti ti-loader-2 ims__spin\"></i> Preparing backup...'; }\r\n    try{\r\n      const {data,error}=await client().rpc('company_export');\r\n      if(error||!data||data.format!=='stockmaestro-export'){\r\n        const msg=String(error?.message||'No data returned').replace(/[.\\s]+$/,'');\r\n        ui().toast('Backup failed: '+msg,'error',9000);\r\n        if(out) out.innerHTML=`<div class=\"ims__alert ims__alert--danger\"><i class=\"ti ti-alert-circle\"></i><span>Backup failed: ${util().sanitize(msg)}. Nothing was downloaded.</span></div>`;\r\n        return;\r\n      }\r\n      const json=JSON.stringify(data);\r\n      saveBlob(new Blob([json],{type:'application/json'}),`stockmaestro_backup_${slug(window.SM.AUTH.company?.name)}_${today()}.json`);\r\n      const tables=Object.keys(data.counts||{}).length, notInc=data.not_included||[], part=data.partly_included||{}, files=data.files||[];\r\n      const fileSize=files.reduce((t,f)=>t+(Number(f.size)||0),0);\r\n      if(out) out.innerHTML=`\r\n        <div class=\"ims__alert ims__alert--success\"><i class=\"ti ti-circle-check\"></i><span><strong>Backup downloaded</strong> (${fmtSize(json.length)}):\r\n          ${Number(data.total_rows||0).toLocaleString('en-GB')} records from ${tables} tables. ${files.length} stored files are listed in it (download them with Download files).</span></div>\r\n        ${Object.keys(part).length?`<div style=\"font-size:12px;margin-top:8px\"><strong>Partly included</strong> (rows shared by the whole system, or not linked to your company): ${Object.entries(part).map(([t,v])=>`${util().sanitize(t)} (${v.included} of ${v.total})`).join(', ')}</div>`:''}\r\n        ${notInc.length?`<div style=\"font-size:12px;margin-top:4px;color:var(--ims-text-muted)\"><strong>Not included</strong> (system tables, not company data): ${notInc.map(t=>util().sanitize(t)).join(', ')}</div>`:''}\r\n        <details style=\"margin-top:8px;font-size:12px\"><summary style=\"cursor:pointer\">Records per table</summary>\r\n          <div style=\"columns:3;column-gap:20px;margin-top:6px\">${Object.entries(data.counts||{}).sort((a,b)=>a[0].localeCompare(b[0])).map(([t,n])=>`<div>${util().sanitize(t)}: ${n}</div>`).join('')}</div></details>\r\n        ${files.length?`<div style=\"font-size:12px;margin-top:6px;color:var(--ims-text-muted)\">Stored files: ${files.length} (${fmtSize(fileSize)}).</div>`:''}`;\r\n      ui().toast('Backup downloaded','success');\r\n    }catch(e){\r\n      ui().toast('Backup failed: '+(e?.message||e),'error',9000);\r\n    }finally{\r\n      if(btn){ btn.disabled=false; btn.innerHTML='<i class=\"ti ti-database-export\"></i> Download data backup'; }\r\n    }\r\n  }\r\n\r\n  // \u2500\u2500\u2500 FILES \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  let _files=[];\r\n  async function downloadFiles(){\r\n    const {data,error}=await client().rpc('company_file_list');\r\n    if(error){ ui().toast('Could not list the files: '+error.message,'error',9000); return; }\r\n    _files=Array.isArray(data)?data:[];\r\n    const rows=BUCKETS.map(b=>{ const fs=_files.filter(f=>f.bucket===b.id); return {...b,count:fs.length,size:fs.reduce((t,f)=>t+(Number(f.size)||0),0)}; });\r\n    ui().openModal('Download files',`\r\n      <p style=\"font-size:13px;margin:0 0 12px\">Choose which files to put in the zip. They are fetched privately from your storage.</p>\r\n      <div style=\"display:grid;gap:8px\">${rows.map(r=>`\r\n        <label style=\"display:flex;gap:10px;align-items:center;font-size:13px;opacity:${r.count?1:.55}\">\r\n          <input type=\"checkbox\" class=\"ims-bk-bucket\" value=\"${r.id}\" ${r.on&&r.count?'checked':''} ${r.count?'':'disabled'}>\r\n          <span style=\"flex:1\">${util().sanitize(r.label)}</span><span style=\"color:var(--ims-text-muted)\">${r.count} file${r.count===1?'':'s'}, ${fmtSize(r.size)}</span></label>`).join('')}</div>\r\n      <p style=\"font-size:12px;color:var(--ims-text-muted);margin:12px 0 0\">Proof of delivery photos can be large; they are kept for 12 months and then deleted automatically.</p>\r\n      <div id=\"ims-bk-progress\" style=\"margin-top:10px;font-size:13px\"></div>`,`\r\n      <button class=\"ims__btn ims__btn--ghost\" onclick=\"window.SM.UI.closeModal()\">Cancel</button>\r\n      <button class=\"ims__btn ims__btn--primary\" id=\"ims-bk-zip-btn\" onclick=\"window.IMS_BACKUP.runFilesZip()\"><i class=\"ti ti-file-zip\"></i> Download zip</button>`);\r\n  }\r\n  function loadJSZip(){\r\n    if(window.JSZip) return Promise.resolve(window.JSZip);\r\n    return new Promise((res,rej)=>{\r\n      const s=document.createElement('script'); s.src='https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js';\r\n      s.onload=()=>window.JSZip?res(window.JSZip):rej(new Error('Zip tool did not load')); s.onerror=()=>rej(new Error('Zip tool could not be loaded'));\r\n      document.head.appendChild(s);\r\n    });\r\n  }\r\n  async function runFilesZip(){\r\n    const chosen=[...document.querySelectorAll('.ims-bk-bucket:checked')].map(c=>c.value);\r\n    const list=_files.filter(f=>chosen.includes(f.bucket));\r\n    if(!list.length){ ui().toast('Please tick at least one type of file','warning'); return; }\r\n    const btn=document.getElementById('ims-bk-zip-btn'), prog=document.getElementById('ims-bk-progress');\r\n    if(btn) btn.disabled=true;\r\n    const say=t=>{ if(prog) prog.textContent=t; };\r\n    try{\r\n      const JSZip=await loadJSZip(); const zip=new JSZip(); const c=client(); const failed=[]; let done=0;\r\n      for(const bucket of chosen){\r\n        const paths=list.filter(f=>f.bucket===bucket).map(f=>f.path);\r\n        for(let i=0;i<paths.length;i+=100){\r\n          const part=paths.slice(i,i+100);\r\n          const {data:signed,error}=await c.storage.from(bucket).createSignedUrls(part,900);\r\n          if(error){ part.forEach(p=>failed.push(`${bucket}/${p}: ${error.message}`)); done+=part.length; continue; }\r\n          for(const s of (signed||[])){\r\n            done++; say(`Adding file ${done} of ${list.length}...`);\r\n            if(!s.signedUrl){ failed.push(`${bucket}/${s.path}: ${s.error||'no access'}`); continue; }\r\n            try{ const r=await fetch(s.signedUrl); if(!r.ok) throw new Error(`HTTP ${r.status}`); zip.file(`${bucket}/${s.path}`,await r.blob()); }\r\n            catch(e){ failed.push(`${bucket}/${s.path}: ${e.message}`); }\r\n          }\r\n        }\r\n      }\r\n      if(failed.length) zip.file('NOT-INCLUDED.txt',`These files could not be fetched:\\r\\n\\r\\n${failed.join('\\r\\n')}\\r\\n`);\r\n      say('Creating the zip...');\r\n      const blob=await zip.generateAsync({type:'blob'});\r\n      saveBlob(blob,`stockmaestro_files_${slug(window.SM.AUTH.company?.name)}_${today()}.zip`);\r\n      ui().closeModal();\r\n      ui().toast(failed.length?`Files downloaded: ${list.length-failed.length} of ${list.length} (see NOT-INCLUDED.txt in the zip)`:`Files downloaded: ${list.length}`,failed.length?'warning':'success',8000);\r\n    }catch(e){\r\n      say(''); ui().toast('Files download failed: '+(e?.message||e),'error',9000);\r\n    }finally{\r\n      if(btn) btn.disabled=false;\r\n    }\r\n  }\r\n\r\n  // \u2500\u2500\u2500 REMOVED TOOLS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  // Restore, archive and the data resets could damage data (see the audit),\r\n  // so they no longer run. Anything still calling them gets this message.\r\n  function removedTool(){\r\n    ui().toast('This tool has been removed for safety. To recover data, use Supabase\\u2019s daily backups (Supabase, Database, Backups).','warning',9000);\r\n  }\r\n\r\n  function downloadTemplate(type){\r\n    const templates={\r\n      products:{\r\n        headers:['SKU','Product Name','Category','Barcode','Unit','Cost Price','Wholesale Price','RRP','Reorder Threshold','Reorder Quantity','Default Bin','Notes'],\r\n        rows:[['CHR-001','Example Chair','Furniture','1234567890','each','10.00','18.00','35.00','10','50','A-51','Sample product']]\r\n      },\r\n      customers:{\r\n        headers:['Business Name','Contact Name','Email','Phone','Postcode','Address','VAT Number','Credit Terms','Credit Limit','Notes'],\r\n        rows:[['Acme Furniture Ltd','John Smith','john@acme.com','07700900000','SW1A 1AA','1 Example St London','GB123456789','30 days net','5000','']]\r\n      },\r\n      suppliers:{\r\n        headers:['Supplier Name','Contact Name','Email','Phone','Country','Currency','Payment Terms','VAT Number','Address','Notes'],\r\n        rows:[['Best Supplier Ltd','Jane Doe','jane@supplier.com','01234567890','China','CNY','30 days net','','123 Factory Road','']]\r\n      },\r\n      orders:{\r\n        headers:['Customer Name','Postcode','Address','Phone','Email','Platform','Product Name','SKU','Quantity','Unit Price','Notes'],\r\n        rows:[['John Smith','SW1A 1AA','1 Example Street London','07700900000','john@email.com','Amazon UK','Example Chair','CHR-001','2','35.00','']]\r\n      }\r\n    };\r\n    const tpl=templates[type];\r\n    if(!tpl)return;\r\n    util().exportCSV(tpl.headers,tpl.rows,`${type}_template`);\r\n  }\r\n\r\n  window.addEventListener('ims:panel',e=>{if(e.detail.panel==='backup')load();});\r\n  window.IMS_BACKUP={\r\n    load, downloadBackup, downloadFiles, runFilesZip, downloadTemplate,\r\n    previewRestore: removedTool, confirmRestore: removedTool, archiveOrders: removedTool,\r\n    resetOrdersLogistics: removedTool, executeResetOrdersLogistics: removedTool,\r\n    resetDropship: removedTool, executeResetDropship: removedTool\r\n  };\r\n})();\r\n"],
  "mappings": "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",
  "names": []
}
