PageSourceSearch

https://browsertotal.com/assets/CxLdjegc.js

js browsertotal.com collected 2026-10-05 00:53:39 UTC 8,917 bytes, 1 lines download raw bytes

1class e{static analyzeExtension(e,t,i){var n;const s=this.assessIdentifyFunction(e,t),o=this.assessProtectFunction(e,t),r=this.assessDetectFunction(e,t),a=this.assessRespondFunction(e,t),c=this.assessRecoverFunction(e,t),l={identify:s,protect:o,detect:r,respond:a,recover:c},u=this.calculateOverallScore(l),d=this.calculateOverallMaturity(l),m=this.identifyCriticalGaps(l);return{identify:s,protect:o,detect:r,respond:a,recover:c,overallMaturity:d,overallScore:u,criticalGaps:m,remediationPriorities:this.generateRemediationPlan(l,m),assessmentDate:new Date,extensionId:(null==t?void 0:t.id)||"unknown",extensionName:(null==t?void 0:t.name)||(null==(n=null==e?void 0:e.manifest)?void 0:n.name)||"Unknown Extension"}}static scoreToMaturity(e){return e>=90?5:e>=70?4:e>=50?3:e>=30?2:1}static calculateOverallScore(e){const t=Object.values(e).map(e=>e.score);return Math.round(t.reduce((e,t)=>e+t,0)/t.length)}static calculateOverallMaturity(e){const t=Object.values(e).map(e=>e.maturityLevel),i=t.reduce((e,t)=>e+t,0)/t.length;return Math.round(10*i)/10}static identifyCriticalGaps(e){const t=[];return Object.entries(e).forEach(([e,i])=>{t.push(...i.gaps)}),t.filter(e=>"critical"===e.priority||"high"===e.priority).sort((e,t)=>{const i={critical:0,high:1,medium:2,low:3};return i[e.priority]-i[t.priority]}).slice(0,10)}static generateRemediationPlan(e,t){const i=[];let n=1;return t.forEach(e=>{i.push({id:"REM-"+n++,function:e.function,action:this.gapToRemediationAction(e),impact:"critical"===e.priority?"high":"medium",effort:e.remediationEffort,timeframe:this.getTimeframe(e.remediationEffort),dependencies:[]})}),Object.entries(e).forEach(([e,t])=>{t.maturityLevel<3&&i.push({id:"REM-"+n++,function:e,action:`Improve ${e} function maturity from level ${t.maturityLevel} to level 3`,impact:"high",effort:"medium",timeframe:"3-6 months",dependencies:[]})}),i.slice(0,15)}static gapToRemediationAction(e){return{"Access Control":"Implement least privilege access controls and regular permission reviews","Data Protection":"Enable encryption for sensitive data storage and transmission",Monitoring:"Deploy comprehensive logging and monitoring capabilities","Incident Response":"Develop and test incident response procedures",Recovery:"Establish backup and recovery mechanisms"}[e.category]||`Address gap in ${e.category}: Move from "${e.currentState}" to "${e.targetState}"`}static getTimeframe(e){switch(e){case"low":return"1-2 weeks";case"medium":return"1-3 months";case"high":return"3-6 months"}}static assessIdentifyFunction(e,t){var i,n,s,o,r,a;const c=[],l=[],u=[],d=[],m=!!((null==(n=null==(i=null==e?void 0:e.manifest)?void 0:i.permissions)?void 0:n.length)>0),p=m?60:20;d.push({id:"ID.AM",name:"Asset Management",score:p,implemented:m,notes:"Extension permissions and resources cataloged"}),l.push({name:"Permission Inventory",implemented:m,effectiveness:p,evidence:`${(null==(o=null==(s=null==e?void 0:e.manifest)?void 0:s.permissions)?void 0:o.length)||0} permissions identified`});const v=!!((null==(r=null==t?void 0:t.categories)?void 0:r.length)>0||(null==t?void 0:t.description)),h=v?70:30;d.push({id:"ID.BE",name:"Business Environment",score:h,implemented:v,notes:"Extension purpose and category identified"});const g=(null==(a=null==e?void 0:e.vulnerabilities)?void 0:a.length)||0,y=g>0||(null==e?void 0:e.riskScore),f=y?Math.max(20,80-10*g):10;d.push({id:"ID.RA",name:"Risk Assessment",score:f,implemented:y,notes:`${g} vulnerabilities identified`}),g>0&&c.push({category:"Vulnerability Management",description:`${g} known vulnerabilities present`,severity:g>5?"critical":g>2?"high":"medium",mitigationEffort:"medium"});const M=!!(null==t?void 0:t.privacyPolicy),R=M?70:20;d.push({id:"ID.GV",name:"Governance",score:R,implemented:M,notes:"Privacy policy and data handling practices"}),M||u.push({function:"identify",category:"Governance",currentState:"No privacy policy available",targetState:"Comprehensive privacy policy published",gap:"Missing privacy documentation",priority:"high",remediationEffort:"low"});const b=Math.round(d.reduce((e,t)=>e+t.score,0)/d.length);return{score:b,maturityLevel:this.scoreToMaturity(b),risks:c,controls:l,gaps:u,subcategories:d}}static assessProtectFunction(e,t){var i,n;const s=[],o=[],r=[],a=[],c=(null==(i=null==e?void 0:e.manifest)?void 0:i.permissions)||[],l=c.length<5?70:Math.max(20,70-5*c.length);
1a.push({id:"PR.AC",name:"Access Control",score:l,implemented:!0,notes:`${c.length} permissions requested`}),(c.includes("*://*/*")||c.includes("<all_urls>"))&&s.push({category:"Access Control",description:"Extension has access to all websites",severity:"critical",mitigationEffort:"high"});const u=!!(null==(n=null==e?void 0:e.manifest)?void 0:n.content_security_policy),d=u?80:30;a.push({id:"PR.DS",name:"Data Security",score:d,implemented:u,notes:"Content Security Policy implementation"}),o.push({name:"Content Security Policy",implemented:u,effectiveness:u?80:0,evidence:u?"CSP defined in manifest":"No CSP found"});const m=null==t?void 0:t.lastUpdated,p=m?Math.floor((Date.now()-new Date(m).getTime())/864e5):999,v=p<90?80:p<180?60:30;a.push({id:"PR.MA",name:"Maintenance",score:v,implemented:p<180,notes:`Last updated ${p} days ago`}),p>180&&r.push({function:"protect",category:"Maintenance",currentState:"Outdated extension",targetState:"Regular updates every 90 days",gap:"Infrequent updates",priority:"medium",remediationEffort:"medium"});const h=Math.round(a.reduce((e,t)=>e+t.score,0)/a.length);return{score:h,maturityLevel:this.scoreToMaturity(h),risks:s,controls:o,gaps:r,subcategories:a}}static assessDetectFunction(e,t){var i,n,s,o,r,a;const c=[],l=[],u=(null==(n=null==(i=null==e?void 0:e.manifest)?void 0:i.permissions)?void 0:n.includes("webRequest"))||(null==(o=null==(s=null==e?void 0:e.manifest)?void 0:s.permissions)?void 0:o.includes("webRequestBlocking")),d=u?60:20;l.push({id:"DE.AE",name:"Anomalies and Events",score:d,implemented:u,notes:"Network monitoring capabilities"});const m=!!(null==(r=null==e?void 0:e.manifest)?void 0:r.background),p=m?70:30;l.push({id:"DE.CM",name:"Continuous Monitoring",score:p,implemented:m,notes:"Backgroun
1d script for monitoring"});const v=(null==(a=null==e?void 0:e.codeQuality)?void 0:a.errorHandling)>50,h=v?60:20;l.push({id:"DE.DP",name:"Detection Processes",score:h,implemented:v,notes:"Error detection and handling"}),v||c.push({function:"detect",category:"Detection Processes",currentState:"Limited error detection",targetState:"Comprehensive error handling",gap:"Insufficient detection mechanisms",priority:"medium",remediationEffort:"medium"});const g=Math.round(l.reduce((e,t)=>e+t.score,0)/l.length);return{score:g,maturityLevel:this.scoreToMaturity(g),risks:[],controls:[],gaps:c,subcategories:l}}static assessRespondFunction(e,t){var i,n;const s=[],o=[],r=null==(n=null==(i=null==e?void 0:e.manifest)?void 0:i.permissions)?void 0:n.includes("notifications"),a=r?60:20;o.push({id:"RS.RP",name:"Response Planning",score:a,implemented:r,notes:"User notification capabilities"});const c=!!(null==t?void 0:t.supportUrl),l=c?70:20;o.push({id:"RS.CO",name:"Communications",score:l,implemented:c,notes:"Support communication channel"}),c||s.push({function:"respond",category:"Communications",currentState:"No support channel",targetState:"Active support and incident reporting",gap:"Missing communication channel",priority:"high",remediationEffort:"low"});const u=!!(null==t?void 0:t.updateUrl)||"webstore"===(null==t?void 0:t.source),d=u?80:30;o.push({id:"RS.MI",name:"Mitigation",score:d,implemented:u,notes:"Update mechanism available"});const m=Math.round(o.reduce((e,t)=>e+t.score,0)/o.length);return{score:m,maturityLevel:this.scoreToMaturity(m),risks:[],controls:[],gaps:s,subcategories:o}}static assessRecoverFunction(e,t){var i,n,s,o,r,a;const c=[],l=[],u=null==(n=null==(i=null==e?void 0:e.manifest)?void 0:i.permissions)?void 0:n.includes("storage"),d=u&&(null==(o=null==(s=null==e?void 0:e.manifest)?void 0:s.permissions)?void 0:o.includes("unlimitedStorage"))?70:u?50:20;l.push({id:"RC.RP",name:"Recovery Planning",score:d,implemented:u,notes:"Data backup capabilities"});const m=null==(r=null==e?void 0:e.manifest)?void 0:r.version,p=!!m&&"1.0"!==m&&"1.0.0"!==m,v=p?60:20;l.push({id:"RC.IM",name:"Improvements",score:v,implemented:p,notes:`Version ${m||"unknown"}`});const h=!!(null==(a=null==t?void 0:t.updateHistory)?void 0:a.length),g=h?70:20;l.push({id:"RC.CO",name:"Recovery Communications",score:g,implemented:h,notes:"Update history available"}),h||c.push({function:"recover",category:"Recovery Communications",currentState:"No update history",targetState:"Detailed changelog for each version",gap:"Missing recovery documentation",priority:"medium",remediationEffort:"low"});const y=Math.round(l.reduce((e,t)=>e+t.score,0)/l.length);return{score:y,maturityLevel:this.scoreToMaturity(y),risks:[],controls:[],gaps:c,subcategories:l}}}export{e as NISTFrameworkProcessor};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.