build-valuecurve/_app/immutable/nodes/8.CyYeH63o.js

19 lines
27 KiB
JavaScript
Raw Normal View History

import{f as y,a as p,c as me,t as ye,b as he}from"../chunks/Bh-96fzJ.js";import{p as Xt,i as o,d as a,s as n,t as G,g as e,e as Qt,j as f,f as er,$ as tr,r,n as S,C as rr,k as F,h as ar,D as sr}from"../chunks/mO2F3zLa.js";import{d as nr,s as I,e as gt}from"../chunks/eH5yZvH4.js";import{i as E}from"../chunks/tuD4s8Oc.js";import{h as or,N as ir,F as dr,s as k,r as O,e as bt,i as ft}from"../chunks/DhvLCtu-.js";import{a as K,b as lr}from"../chunks/Da-hDQCT.js";var cr=y('<meta name="description" content="Detect and redact personally identifiable information (PII) from text and files."/>'),pr=y('<span class="text-gray-300">|</span> <button class="text-xs text-gray-500 hover:text-red-600">Clear</button>',1),vr=y('<div class="space-y-3"><div class="flex justify-between items-center"><label for="text-input" class="text-sm font-medium text-gray-700">Text to Scan</label> <div class="flex gap-2"><button class="text-xs text-primary-600 hover:text-primary-700">Load Sample</button> <!></div></div> <textarea id="text-input" placeholder="Paste text containing potential PII here..." class="w-full px-3 py-2 border border-gray-200 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-primary-500 min-h-[150px] resize-none font-mono text-xs"></textarea></div>'),xr=y('<div class="mt-3 flex items-center gap-2 p-2 bg-gray-50 rounded-lg"><svg class="w-4 h-4 text-green-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg> <span class="text-sm text-gray-700 truncate flex-1"> </span></div>'),ur=y('<div class="border-2 border-dashed border-gray-300 rounded-xl p-6 text-center hover:border-primary-400 transition-colors cursor-pointer" role="button" tabindex="0"><input type="file" accept=".csv,.txt,.json" class="hidden" id="file-input"/> <label for="file-input" class="cursor-pointer"><div class="w-12 h-12 rounded-xl bg-primary-100 flex items-center justify-center mx-auto mb-3"><svg class="w-6 h-6 text-primary-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path></svg></div> <p class="text-sm text-gray-600"><span class="text-primary-600 font-medium">Click to upload</span> or drag and drop</p> <p class="text-xs text-gray-400 mt-1">CSV, TXT, or JSON files</p></label></div> <!>',1),_r=y('<div class="mt-3 p-3 bg-red-50 text-red-700 text-sm rounded-lg border border-red-100"> </div>'),gr=y('<div><div class="flex items-center gap-2"><span class="text-xs font-bold w-6 h-6 rounded flex items-center justify-center bg-white/50"> </span> <span class="text-sm font-medium"> </span></div> <span class="text-sm font-bold"> </span></div>'),br=y('<div class="bg-gray-50 rounded-lg p-4 border border-gray-100"><h3 class="text-sm font-semibold text-gray-700 mb-3">PII by Type</h3> <div class="grid grid-cols-2 gap-2"></div></div>'),fr=y('<div class="bg-green-50 rounded-lg p-4 border border-green-200"><div class="flex items-center gap-2"><svg class="w-5 h-5 text-green-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg> <span class="text-sm text-green-700 font-medium">No PII detected in the input</span></div></div>'),mr=y('<div class="space-y-4"><!> <div><h3 class="text-sm font-semibold mb-2">Risk Assessment</h3> <p class="text-sm opacity-90"><!></p></div></div>'),yr=he('<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg> Copied!',1),hr=he('<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2
`),s=At(t,{detectEmails:e(oe),detectPhones:e(ie),detectSSN:e(de),detectCreditCards:e(le),detectIPAddresses:e(ce),detectDates:e(pe),detectAddresses:e(ve),detectIBAN:e(xe),detectSecrets:e(ue)}),i={};for(const u of s)i[u.type]=(i[u.type]||0)+1;const d={SSN:100,CREDIT_CARD:95,PRIVATE_KEY:100,INDIA_AADHAAR:90,AWS_ACCESS_KEY:100,GITHUB_TOKEN:95,STRIPE_KEY:95,PASSWORD_IN_URL:90,JWT_TOKEN:85,IBAN:85,EMAIL:40,EMAIL_OBFUSCATED:40,PHONE_US:35,PHONE_INTL:35,IP_ADDRESS:30,DATE_OF_BIRTH:50,US_ADDRESS:55,SLACK_TOKEN:90,GOOGLE_API_KEY:85};let g=0;for(const u of s){const h=d[u.type]||25;g+=h*u.confidence}const c=Math.min(100,Math.floor(g/Math.max(1,s.length)+s.length*5)),_=c>=70?"CRITICAL":c>=50?"HIGH":c>=30?"MEDIUM":"LOW";o(l,{total_entities:s.length,entities_by_type:i,entities:s,risk_score:c,risk_level:_,redacted_preview:St(t,s),coordinates_only:!0,client_side_only:!0},!0)}else{let t;if(e(D)==="text"){const s=e(B).replace(/\r\n/g,`
`),i=new FormData;i.append("text",s),i.append("detect_emails",String(e(oe))),i.append("detect_phones",String(e(ie))),i.append("detect_ssn",String(e(de))),i.append("detect_credit_cards",String(e(le))),i.append("detect_ip_addresses",String(e(ce))),i.append("detect_dates",String(e(pe))),i.append("detect_addresses",String(e(ve))),i.append("detect_iban",String(e(xe))),i.append("detect_secrets",String(e(ue))),i.append("coordinates_only","false"),t=await fetch(`${Ze}/privacy/scan-text`,{method:"POST",body:i})}else{const s=new FormData;s.append("file",e(W)),t=await fetch(`${Ze}/privacy/scan-file`,{method:"POST",body:s})}if(!t.ok){const s=await t.json();throw new Error(s.detail||"Scan failed")}o(l,await t.json(),!0)}}catch(t){o(L,t instanceof Error?t.message:"Failed to scan for PII",!0)}finally{o(ne,!1)}}function Fe(t){switch(t){case"CRITICAL":return"text-red-700 bg-red-50 border-red-200";case"HIGH":return"text-orange-700 bg-orange-50 border-orange-200";case"MEDIUM":return"text-yellow-700 bg-yellow-50 border-yellow-200";default:return"text-green-700 bg-green-50 border-green-200"}}function kt(t){switch(t){case"EMAIL":return"@";case"PHONE_US":case"PHONE_INTL":return"#";case"SSN":return"SSN";case"CREDIT_CARD":return"$";case"IP_ADDRESS":return"IP";case"DATE_OF_BIRTH":return"DOB";case"US_ADDRESS":case"UK_ADDRESS":case"EU_ADDRESS":return"ADR";case"IBAN":case"BANK_ACCOUNT":return"BNK";case"AWS_ACCESS_KEY":case"AWS_SECRET_KEY":return"AWS";case"GITHUB_TOKEN":return"GH";case"STRIPE_KEY":return"STR";case"GOOGLE_API_KEY":return"GCP";case"PASSWORD_IN_URL":return"PWD";case"PRIVATE_KEY":return"KEY";case"JWT_TOKEN":return"JWT";case"SLACK_TOKEN":return"SLK";case"GENERIC_API_KEY":return"API";default:return"?"}}function Ve(t){switch(t){case"SSN":case"CREDIT_CARD":case"IBAN":case"BANK_ACCOUNT":return"bg-red-100 text-red-700 border-red-200";case"AWS_ACCESS_KEY":case"AWS_SECRET_KEY":case"PRIVATE_KEY":case"PASSWORD_IN_URL":case"GITHUB_TOKEN":case"STRIPE_KEY":return"bg-purple-100 text-purple-700 border-purple-200";case"GOOGLE_API_KEY":case"SLACK_TOKEN":case"JWT_TOKEN":case"GENERIC_API_KEY":return"bg-orange-100 text-orange-700 border-orange-200";case"EMAIL":case"PHONE_US":case"PHONE_INTL":return"bg-yellow-100 text-yellow-700 border-yellow-200";case"US_ADDRESS":case"UK_ADDRESS":case"EU_ADDRESS":return"bg-amber-100 text-amber-700 border-amber-200";default:return"bg-blue-100 text-blue-700 border-blue-200"}}let _e=f(!1);async function Pt(){if(!e(l)||!e(l).entities||e(l).entities.length===0)return;const t="Type Original Value Masked Value Confidence",s=e(l).entities.map(d=>`${d.type} ${d.value} ${d.masked_value} ${Math.round(d.confidence*100)}%`),i=[t,...s].join(`
`);try{await navigator.clipboard.writeText(i),o(_e,!0),setTimeout(()=>o(_e,!1),2e3)}catch(d){console.error("Failed to copy:",d)}}let ge=f(!1);async function Ct(){if(!(!e(l)||!e(l).redacted_preview))try{await navigator.clipboard.writeText(e(l).redacted_preview),o(ge,!0),setTimeout(()=>o(ge,!1),2e3)}catch(t){console.error("Failed to copy:",t)}}function Dt(){o(B,`Customer Record:
Name: John Smith
Email: john.smith@example.com
US Phone: (555) 123-4567
SSN: 123-45-6789
Credit Card: 4532 0151 1283 0366
IP Address: 192.168.1.100
--- CLOUD SECRETS ---
AWS Key: AKIAIOSFODNN7EXAMPLE
GitHub Token: ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Please contact support@company.org for assistance.`)}function Nt(){o(B,""),o(W,null),o(q,""),o(l,null),o(L,"")}var Se=Dr();or("tts6bo",t=>{var s=cr();er(()=>{tr.title="Privacy Scanner | Build with AI"}),p(t,s)});var Je=a(Se);ir(Je,{});var Ie=n(Je,2),$e=a(Ie),qe=n(a($e),2),Ee=a(qe),we=n(a(Ee),2),Te=a(we);Te.__click=()=>o(D,"text");var Xe=n(Te,2);Xe.__click=()=>o(D,"file"),r(we);var Qe=n(we,2);{var Rt=t=>{var s=vr(),i=a(s),d=n(a(i),2),g=a(d);g.__click=Dt;var c=n(g,2);{var _=h=>{var A=pr(),M=n(F(A),2);M.__click=Nt,p(h,A)};E(c,h=>{(e(B)||e(l))&&h(_)})}r(d),r(i);var u=n(i,2);rr(u),r(s),lr(u,()=>e(B),h=>o(B,h)),p(t,s)},Ot=t=>{var s=ur(),i=F(s),d=a(i);d.__change=It,S(2),r(i);var g=n(i,2);{var c=_=>{var u=xr(),h=n(a(u),2),A=a(h,!0);r(h),r(u),G(()=>I(A,e(q))),p(_,u)};E(g,_=>{e(q)&&_(c)})}gt("drop",i,Et),gt("dragover",i,wt),p(t,s)};E(Qe,t=>{e(D)==="text"?t(Rt):t(Ot,!1)})}var ke=n(Qe,2),Pe=a(ke),et=n(a(Pe),2),tt=a(et);O(tt),S(2),r(et),r(Pe);var Ce=n(Pe,2),De=a(Ce),rt=a(De);O(rt),S(2),r(De);var Ne=n(De,2),at=a(Ne);O(at),S(2),r(Ne);var Re=n(Ne,2),st=a(Re);O(st),S(2),r(Re);var Oe=n(Re,2),nt=a(Oe);O(nt),S(2),r(Oe);var Ke=n(Oe,2),ot=a(Ke);O(ot),S(2),r(Ke);var Be=n(Ke,2),it=a(Be);O(it),S(2),r(Be);var Le=n(Be,2),dt=a(Le);O(dt),S(2),r(Le);var lt=n(Le,2),ct=a(lt);O(ct),S(2),r(lt),r(Ce);var pt=n(Ce,2),He=n(a(pt),2);O(He),S(2),r(pt),r(ke);var X=n(ke,2);X.__click=Tt;var Kt=a(X,!0);r(X);var Bt=n(X,2);{var Lt=t=>{var s=_r(),i=a(s,!0);r(s),G(()=>I(i,e(L))),p(t,s)};E(Bt,t=>{e(L)&&t(Lt)})}r(Ee);var vt=n(Ee,2),Ht=n(a(vt),2);{var Mt=t=>{var s=Pr(),i=F(s),d=a(i),g=n(a(d),2),c=a(g,!0);r(g),r(d);var _=n(d,2),u=n(a(_),2),h=a(u,!0);r(u),r(_);var A=n(_,2),M=n(a(A),2),zt=a(M,!0);r(M),r(A);var Me=n(A,2),xt=n(a(Me),2),Gt=a(xt,!0);r(xt),r(Me),r(i);var Ue=n(i,2),je=a(Ue);je.__click=()=>o(H,"overview");var Q=n(je,2);Q.__click=()=>o(H,"entities");var Wt=a(Q);r(Q);var ut=n(Q,2);ut.__click=()=>o(H,"redacted"),r(Ue);var Yt=n(Ue,2);{var Zt=Y=>{var Z=mr(),be=a(Z);{var ze=v=>{var m=br(),P=n(a(m),2);bt(P,21,()=>Object.entries(e(l).entities_by_type),ft,(w,J)=>{var T=ar(()=>sr(e(J),2));let C=()=>e(T)[0],j=()=>e(T)[1];var N=gr(),b=a(N),x=a(b),z=a(x,!0);r(x);var $=n(x,2),re=a($,!0);r($),r(b);var fe=n(b,2),ae=a(fe,!0);r(fe),r(N),G((We,se)=>{k(N,1,`flex items-center justify-between p-2 rounded-lg border ${We??""}`),I(z,se),I(re,C()),I(ae,j())},[()=>Ve(C()),()=>kt(C())]),p(w,N)}),r(P),r(m),p(v,m)},Ge=v=>{var m=fr();p(v,m)};E(be,v=>{Object.keys(e(l).entities_by_type||{}).length>0?v(ze):v(Ge,!1)})}var R=n(be,2),U=n(a(R),2),ee=a(U);{var te=v=>{var m=ye("Critical risk! Highly sensitive PII (SSN, Credit Cards) detected. Immediate action required.");p(v,m)},V=v=>{var m=me(),P=F(m);{var w=T=>{var C=ye("High risk! Multiple sensitive PII elements found. Consider redaction before sharing.");p(T,C)},J=T=>{var C=me(),j=F(C);{var N=x=>{var z=ye("Medium risk. Some PII detected that may require attention.");p(x,z)},b=x=>{var z=ye("Low risk. Minimal or no PII detected.");p(x,z)};E(j,x=>{e(l).risk_level==="MEDIUM"?x(N):x(b,!1)},!0)}p(T,C)};E(P,T=>{e(l).risk_level==="HIGH"?T(w):T(J,!1)},!0)}p(v,m)};E(ee,v=>{e(l).risk_level==="CRITICAL"?v(te):v(V,!1)})}r(U),r(R),r(Z),G(v=>k(R,1,`rounded-lg p-4 border ${v??""}`),[()=>Fe(e(l).risk_level)]),p(Y,Z)},Ft=Y=>{var Z=me(),be=F(Z);{var ze=R=>{var U=Er(),ee=a(U);{var te=v=>{var m=Sr(),P=F(m),w=a(P);w.__click=Pt;var J=a(w);{var T=b=>{var x=yr();S(),p(b,x)},C=b=>{var x=hr();S(),p(b,x)};E(J,b=>{e(_e)?b(T):b(C,!1)})}r(w),r(P);var j=n(P,2),N=n(a(j));bt(N,21,()=>e(l).entities,ft,(b,x)=>{var z=Ar(),$=a(z),re=a($),fe=a(re,!0);r(re),r($);var ae=n($),We=a(ae,!0);r(ae);var se=n(ae),Vt=a(se,!0);r(se);var _t=n(se),Ye=a(_t),Jt=a(Ye);r(Ye),r(_t),r(z),G(($t,qt)=>{k(re,1,`text-xs px-2 py-1 rounded border ${$t??""}`),I(fe,e(x).type),I(We,e(x).value),I(Vt,e(x).masked_value),k(Ye,1,`text-xs px-2 py-0.5 rounded ${e(x).confidence>=.9?"bg-green-100 text-green-700":e(x).confidence>=.7?"bg-yellow-100 text-yellow-700":"bg-red-100 text-red-700"}`),I(Jt,`${qt??""}%`)},[()=>Ve(e(x).type),()=>Math.round(e(x).confidence*100)]),p(b,z)}),r(N),r(j),G(()=>k(w,1,`flex items-center gap-1.5 p
${e(_e)?"bg-green-100 text-green-700 border border-green-300":"bg-gray-100 text-gray-600 hover:bg-gray-200 border border-gray-200"}`)),p(v,m)},V=v=>{var m=Ir();p(v,m)};E(ee,v=>{e(l).entities&&e(l).entities.length>0?v(te):v(V,!1)})}r(U),p(R,U)},Ge=R=>{var U=me(),ee=F(U);{var te=V=>{var v=kr(),m=a(v),P=a(m),w=n(a(P),2);w.__click=Ct;var J=a(w);{var T=b=>{var x=wr();S(),p(b,x)},C=b=>{var x=Tr();S(),p(b,x)};E(J,b=>{e(ge)?b(T):b(C,!1)})}r(w),r(P);var j=n(P,2),N=a(j,!0);r(j),r(m),S(2),r(v),G(()=>{k(w,1,`flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-lg transition-all
${e(ge)?"bg-green-100 text-green-700 border border-green-300":"bg-white text-gray-600 hover:bg-gray-100 border border-gray-200"}`),I(N,e(l).redacted_preview||"No preview available")}),p(V,v)};E(ee,V=>{e(H)==="redacted"&&V(te)},!0)}p(R,U)};E(be,R=>{e(H)==="entities"?R(ze):R(Ge,!1)},!0)}p(Y,Z)};E(Yt,Y=>{e(H)==="overview"?Y(Zt):Y(Ft,!1)})}G((Y,Z)=>{k(g,1,`text-xl font-bold ${e(l).total_entities>0?"text-red-600":"text-green-600"}`),I(c,e(l).total_entities),I(h,Y),I(zt,e(l).risk_score),k(Me,1,`rounded-lg p-2.5 text-center border ${Z??""}`),I(Gt,e(l).risk_level),k(je,1,`px-4 py-2 text-sm font-medium transition-colors ${e(H)==="overview"?"text-primary-600 border-b-2 border-primary-600":"text-gray-500 hover:text-gray-700"}`),k(Q,1,`px-4 py-2 text-sm font-medium transition-colors ${e(H)==="entities"?"text-primary-600 border-b-2 border-primary-600":"text-gray-500 hover:text-gray-700"}`),I(Wt,`Entities (${e(l).total_entities??""})`),k(ut,1,`px-4 py-2 text-sm font-medium transition-colors ${e(H)==="redacted"?"text-primary-600 border-b-2 border-primary-600":"text-gray-500 hover:text-gray-700"}`)},[()=>Object.keys(e(l).entities_by_type||{}).length,()=>Fe(e(l).risk_level)]),p(t,s)},Ut=t=>{var s=Cr();p(t,s)};E(Ht,t=>{e(l)?t(Mt):t(Ut,!1)})}r(vt),r(qe),r($e),r(Ie);var jt=n(Ie,2);dr(jt),r(Se),G(t=>{k(Te,1,`flex-1 py-2 px-3 text-sm font-medium rounded-md transition-all ${e(D)==="text"?"bg-white text-primary-600 shadow-sm":"text-gray-500 hover:text-gray-700"}`),k(Xe,1,`flex-1 py-2 px-3 text-sm font-medium rounded-md transition-all ${e(D)==="file"?"bg-white text-primary-600 shadow-sm":"text-gray-500 hover:text-gray-700"}`),He.disabled=e(D)==="file",X.disabled=t,I(Kt,e(ne)?"Scanning...":"Scan for PII")},[()=>e(ne)||(e(D)==="text"?!e(B).trim():!e(W))]),K(tt,()=>e(ue),t=>o(ue,t)),K(rt,()=>e(oe),t=>o(oe,t)),K(at,()=>e(ie),t=>o(ie,t)),K(st,()=>e(de),t=>o(de,t)),K(nt,()=>e(le),t=>o(le,t)),K(ot,()=>e(ce),t=>o(ce,t)),K(it,()=>e(pe),t=>o(pe,t)),K(dt,()=>e(ve),t=>o(ve,t)),K(ct,()=>e(xe),t=>o(xe,t)),K(He,()=>e(Ae),t=>o(Ae,t)),p(mt,Se),Qt()}nr(["click","change"]);export{Hr as component};